[{"data":1,"prerenderedAt":174981},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch7-han-shu-jin-jie":3,"wiki-doc-nav":2366},{"id":4,"title":5,"body":6,"description":2359,"extension":2360,"meta":2361,"navigation":99,"path":2362,"seo":2363,"stem":2364,"__hash__":2365},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":8,"toc":2334},"minimark",[9,13,18,22,140,143,164,167,171,174,251,254,271,275,278,324,327,337,341,344,431,434,437,463,466,489,493,496,499,563,566,569,626,630,635,641,761,765,771,850,854,857,931,934,1020,1024,1030,1067,1070,1073,1200,1206,1210,1213,1288,1291,1295,1299,1305,1369,1373,1379,1450,1454,1460,1577,1581,1584,1666,1669,1673,1676,1789,1792,1807,1810,1814,1953,1962,1966,1969,1980,1983,2261,2265,2297,2301,2330],[10,11,5],"h1",{"id":12},"_7-函数进阶",[14,15,17],"h2",{"id":16},"_71-多返回值","7.1 多返回值",[19,20,21],"p",{},"Python 函数可以返回多个值，本质上返回的是元组。",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-python shiki shiki-themes github-light github-dark","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","python","",[30,31,32,49,62,74,85,94,101,106,117,126],"code",{"__ignoreMap":28},[33,34,37,41,45],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"szBVR","def",[33,42,44],{"class":43},"sScJk"," get_info",[33,46,48],{"class":47},"sVt8B","():\n",[33,50,52,55,58],{"class":35,"line":51},2,[33,53,54],{"class":47},"    name ",[33,56,57],{"class":39},"=",[33,59,61],{"class":60},"sZZnC"," \"小明\"\n",[33,63,65,68,70],{"class":35,"line":64},3,[33,66,67],{"class":47},"    age ",[33,69,57],{"class":39},[33,71,73],{"class":72},"sj4cs"," 18\n",[33,75,77,80,82],{"class":35,"line":76},4,[33,78,79],{"class":47},"    score ",[33,81,57],{"class":39},[33,83,84],{"class":72}," 95\n",[33,86,88,91],{"class":35,"line":87},5,[33,89,90],{"class":39},"    return",[33,92,93],{"class":47}," name, age, score\n",[33,95,97],{"class":35,"line":96},6,[33,98,100],{"emptyLinePlaceholder":99},true,"\n",[33,102,104],{"class":35,"line":103},7,[33,105,100],{"emptyLinePlaceholder":99},[33,107,109,112,114],{"class":35,"line":108},8,[33,110,111],{"class":47},"result ",[33,113,57],{"class":39},[33,115,116],{"class":47}," get_info()\n",[33,118,120,123],{"class":35,"line":119},9,[33,121,122],{"class":72},"print",[33,124,125],{"class":47},"(result)\n",[33,127,129,131,134,137],{"class":35,"line":128},10,[33,130,122],{"class":72},[33,132,133],{"class":47},"(",[33,135,136],{"class":72},"type",[33,138,139],{"class":47},"(result))\n",[19,141,142],{},"可以直接解包：",[23,144,146],{"className":25,"code":145,"language":27,"meta":28,"style":28},"name, age, score = get_info()\nprint(name, age, score)\n",[30,147,148,157],{"__ignoreMap":28},[33,149,150,153,155],{"class":35,"line":36},[33,151,152],{"class":47},"name, age, score ",[33,154,57],{"class":39},[33,156,116],{"class":47},[33,158,159,161],{"class":35,"line":51},[33,160,122],{"class":72},[33,162,163],{"class":47},"(name, age, score)\n",[19,165,166],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,168,170],{"id":169},"_72-位置参数","7.2 位置参数",[19,172,173],{},"位置参数按顺序传递。",[23,175,177],{"className":25,"code":176,"language":27,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[30,178,179,189,227,231,235],{"__ignoreMap":28},[33,180,181,183,186],{"class":35,"line":36},[33,182,40],{"class":39},[33,184,185],{"class":43}," introduce",[33,187,188],{"class":47},"(name, age):\n",[33,190,191,194,196,199,202,205,208,211,214,216,219,221,224],{"class":35,"line":51},[33,192,193],{"class":72},"    print",[33,195,133],{"class":47},[33,197,198],{"class":39},"f",[33,200,201],{"class":60},"\"我叫",[33,203,204],{"class":72},"{",[33,206,207],{"class":47},"name",[33,209,210],{"class":72},"}",[33,212,213],{"class":60},"，今年",[33,215,204],{"class":72},[33,217,218],{"class":47},"age",[33,220,210],{"class":72},[33,222,223],{"class":60},"岁\"",[33,225,226],{"class":47},")\n",[33,228,229],{"class":35,"line":64},[33,230,100],{"emptyLinePlaceholder":99},[33,232,233],{"class":35,"line":76},[33,234,100],{"emptyLinePlaceholder":99},[33,236,237,240,243,246,249],{"class":35,"line":87},[33,238,239],{"class":47},"introduce(",[33,241,242],{"class":60},"\"小明\"",[33,244,245],{"class":47},", ",[33,247,248],{"class":72},"18",[33,250,226],{"class":47},[19,252,253],{},"顺序错了就会得到错误含义：",[23,255,257],{"className":25,"code":256,"language":27,"meta":28,"style":28},"introduce(18, \"小明\")\n",[30,258,259],{"__ignoreMap":28},[33,260,261,263,265,267,269],{"class":35,"line":36},[33,262,239],{"class":47},[33,264,248],{"class":72},[33,266,245],{"class":47},[33,268,242],{"class":60},[33,270,226],{"class":47},[14,272,274],{"id":273},"_73-关键字参数","7.3 关键字参数",[19,276,277],{},"关键字参数按参数名传递。",[23,279,281],{"className":25,"code":280,"language":27,"meta":28,"style":28},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[30,282,283,304],{"__ignoreMap":28},[33,284,285,287,290,292,294,296,298,300,302],{"class":35,"line":36},[33,286,239],{"class":47},[33,288,207],{"class":289},"s4XuR",[33,291,57],{"class":39},[33,293,242],{"class":60},[33,295,245],{"class":47},[33,297,218],{"class":289},[33,299,57],{"class":39},[33,301,248],{"class":72},[33,303,226],{"class":47},[33,305,306,308,310,312,314,316,318,320,322],{"class":35,"line":51},[33,307,239],{"class":47},[33,309,218],{"class":289},[33,311,57],{"class":39},[33,313,248],{"class":72},[33,315,245],{"class":47},[33,317,207],{"class":289},[33,319,57],{"class":39},[33,321,242],{"class":60},[33,323,226],{"class":47},[19,325,326],{},"优点：",[328,329,330,334],"ol",{},[331,332,333],"li",{},"顺序不容易错。",[331,335,336],{},"调用时可读性更强。",[14,338,340],{"id":339},"_74-默认参数","7.4 默认参数",[19,342,343],{},"默认参数给参数设置默认值。",[23,345,347],{"className":25,"code":346,"language":27,"meta":28,"style":28},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[30,348,349,367,400,404,408,418],{"__ignoreMap":28},[33,350,351,353,356,359,361,364],{"class":35,"line":36},[33,352,40],{"class":39},[33,354,355],{"class":43}," connect",[33,357,358],{"class":47},"(host, port",[33,360,57],{"class":39},[33,362,363],{"class":72},"3306",[33,365,366],{"class":47},"):\n",[33,368,369,371,373,375,378,380,383,385,388,390,393,395,398],{"class":35,"line":51},[33,370,193],{"class":72},[33,372,133],{"class":47},[33,374,198],{"class":39},[33,376,377],{"class":60},"\"连接",[33,379,204],{"class":72},[33,381,382],{"class":47},"host",[33,384,210],{"class":72},[33,386,387],{"class":60},":",[33,389,204],{"class":72},[33,391,392],{"class":47},"port",[33,394,210],{"class":72},[33,396,397],{"class":60},"\"",[33,399,226],{"class":47},[33,401,402],{"class":35,"line":64},[33,403,100],{"emptyLinePlaceholder":99},[33,405,406],{"class":35,"line":76},[33,407,100],{"emptyLinePlaceholder":99},[33,409,410,413,416],{"class":35,"line":87},[33,411,412],{"class":47},"connect(",[33,414,415],{"class":60},"\"localhost\"",[33,417,226],{"class":47},[33,419,420,422,424,426,429],{"class":35,"line":96},[33,421,412],{"class":47},[33,423,415],{"class":60},[33,425,245],{"class":47},[33,427,428],{"class":72},"6379",[33,430,226],{"class":47},[19,432,433],{},"注意：默认参数必须放在非默认参数后面。",[19,435,436],{},"错误：",[23,438,440],{"className":25,"code":439,"language":27,"meta":28,"style":28},"def connect(port=3306, host):\n    pass\n",[30,441,442,458],{"__ignoreMap":28},[33,443,444,446,448,451,453,455],{"class":35,"line":36},[33,445,40],{"class":39},[33,447,355],{"class":43},[33,449,450],{"class":47},"(port",[33,452,57],{"class":39},[33,454,363],{"class":72},[33,456,457],{"class":47},", host):\n",[33,459,460],{"class":35,"line":51},[33,461,462],{"class":39},"    pass\n",[19,464,465],{},"正确：",[23,467,469],{"className":25,"code":468,"language":27,"meta":28,"style":28},"def connect(host, port=3306):\n    pass\n",[30,470,471,485],{"__ignoreMap":28},[33,472,473,475,477,479,481,483],{"class":35,"line":36},[33,474,40],{"class":39},[33,476,355],{"class":43},[33,478,358],{"class":47},[33,480,57],{"class":39},[33,482,363],{"class":72},[33,484,366],{"class":47},[33,486,487],{"class":35,"line":51},[33,488,462],{"class":39},[14,490,492],{"id":491},"_75-默认参数的坑","7.5 默认参数的坑",[19,494,495],{},"不要使用可变对象作为默认参数。",[19,497,498],{},"错误示例：",[23,500,502],{"className":25,"code":501,"language":27,"meta":28,"style":28},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[30,503,504,519,524,531,535,539,552],{"__ignoreMap":28},[33,505,506,508,511,514,516],{"class":35,"line":36},[33,507,40],{"class":39},[33,509,510],{"class":43}," add_item",[33,512,513],{"class":47},"(item, items",[33,515,57],{"class":39},[33,517,518],{"class":47},"[]):\n",[33,520,521],{"class":35,"line":51},[33,522,523],{"class":47},"    items.append(item)\n",[33,525,526,528],{"class":35,"line":64},[33,527,90],{"class":39},[33,529,530],{"class":47}," items\n",[33,532,533],{"class":35,"line":76},[33,534,100],{"emptyLinePlaceholder":99},[33,536,537],{"class":35,"line":87},[33,538,100],{"emptyLinePlaceholder":99},[33,540,541,543,546,549],{"class":35,"line":96},[33,542,122],{"class":72},[33,544,545],{"class":47},"(add_item(",[33,547,548],{"class":60},"\"a\"",[33,550,551],{"class":47},"))\n",[33,553,554,556,558,561],{"class":35,"line":103},[33,555,122],{"class":72},[33,557,545],{"class":47},[33,559,560],{"class":60},"\"b\"",[33,562,551],{"class":47},[19,564,565],{},"第二次调用会复用第一次的列表。",[19,567,568],{},"正确写法：",[23,570,572],{"className":25,"code":571,"language":27,"meta":28,"style":28},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[30,573,574,589,606,616,620],{"__ignoreMap":28},[33,575,576,578,580,582,584,587],{"class":35,"line":36},[33,577,40],{"class":39},[33,579,510],{"class":43},[33,581,513],{"class":47},[33,583,57],{"class":39},[33,585,586],{"class":72},"None",[33,588,366],{"class":47},[33,590,591,594,597,600,603],{"class":35,"line":51},[33,592,593],{"class":39},"    if",[33,595,596],{"class":47}," items ",[33,598,599],{"class":39},"is",[33,601,602],{"class":72}," None",[33,604,605],{"class":47},":\n",[33,607,608,611,613],{"class":35,"line":64},[33,609,610],{"class":47},"        items ",[33,612,57],{"class":39},[33,614,615],{"class":47}," []\n",[33,617,618],{"class":35,"line":76},[33,619,523],{"class":47},[33,621,622,624],{"class":35,"line":87},[33,623,90],{"class":39},[33,625,530],{"class":47},[14,627,629],{"id":628},"_76-不定长参数","7.6 不定长参数",[631,632,634],"h3",{"id":633},"_761-args","7.6.1 *args",[19,636,637,640],{},[30,638,639],{},"*args"," 接收任意数量的位置参数，得到元组。",[23,642,644],{"className":25,"code":643,"language":27,"meta":28,"style":28},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[30,645,646,661,671,685,696,703,707,711,733],{"__ignoreMap":28},[33,647,648,650,653,655,658],{"class":35,"line":36},[33,649,40],{"class":39},[33,651,652],{"class":43}," add",[33,654,133],{"class":47},[33,656,657],{"class":39},"*",[33,659,660],{"class":47},"args):\n",[33,662,663,666,668],{"class":35,"line":51},[33,664,665],{"class":47},"    total ",[33,667,57],{"class":39},[33,669,670],{"class":72}," 0\n",[33,672,673,676,679,682],{"class":35,"line":64},[33,674,675],{"class":39},"    for",[33,677,678],{"class":47}," num ",[33,680,681],{"class":39},"in",[33,683,684],{"class":47}," args:\n",[33,686,687,690,693],{"class":35,"line":76},[33,688,689],{"class":47},"        total ",[33,691,692],{"class":39},"+=",[33,694,695],{"class":47}," num\n",[33,697,698,700],{"class":35,"line":87},[33,699,90],{"class":39},[33,701,702],{"class":47}," total\n",[33,704,705],{"class":35,"line":96},[33,706,100],{"emptyLinePlaceholder":99},[33,708,709],{"class":35,"line":103},[33,710,100],{"emptyLinePlaceholder":99},[33,712,713,715,718,721,723,726,728,731],{"class":35,"line":108},[33,714,122],{"class":72},[33,716,717],{"class":47},"(add(",[33,719,720],{"class":72},"1",[33,722,245],{"class":47},[33,724,725],{"class":72},"2",[33,727,245],{"class":47},[33,729,730],{"class":72},"3",[33,732,551],{"class":47},[33,734,735,737,739,741,743,745,747,749,751,754,756,759],{"class":35,"line":119},[33,736,122],{"class":72},[33,738,717],{"class":47},[33,740,720],{"class":72},[33,742,245],{"class":47},[33,744,725],{"class":72},[33,746,245],{"class":47},[33,748,730],{"class":72},[33,750,245],{"class":47},[33,752,753],{"class":72},"4",[33,755,245],{"class":47},[33,757,758],{"class":72},"5",[33,760,551],{"class":47},[631,762,764],{"id":763},"_762-kwargs","7.6.2 **kwargs",[19,766,767,770],{},[30,768,769],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[23,772,774],{"className":25,"code":773,"language":27,"meta":28,"style":28},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[30,775,776,791,803,811,815,819],{"__ignoreMap":28},[33,777,778,780,783,785,788],{"class":35,"line":36},[33,779,40],{"class":39},[33,781,782],{"class":43}," print_info",[33,784,133],{"class":47},[33,786,787],{"class":39},"**",[33,789,790],{"class":47},"kwargs):\n",[33,792,793,795,798,800],{"class":35,"line":51},[33,794,675],{"class":39},[33,796,797],{"class":47}," key, value ",[33,799,681],{"class":39},[33,801,802],{"class":47}," kwargs.items():\n",[33,804,805,808],{"class":35,"line":64},[33,806,807],{"class":72},"        print",[33,809,810],{"class":47},"(key, value)\n",[33,812,813],{"class":35,"line":76},[33,814,100],{"emptyLinePlaceholder":99},[33,816,817],{"class":35,"line":87},[33,818,100],{"emptyLinePlaceholder":99},[33,820,821,824,826,828,830,832,834,836,838,840,843,845,848],{"class":35,"line":96},[33,822,823],{"class":47},"print_info(",[33,825,207],{"class":289},[33,827,57],{"class":39},[33,829,242],{"class":60},[33,831,245],{"class":47},[33,833,218],{"class":289},[33,835,57],{"class":39},[33,837,248],{"class":72},[33,839,245],{"class":47},[33,841,842],{"class":289},"city",[33,844,57],{"class":39},[33,846,847],{"class":60},"\"北京\"",[33,849,226],{"class":47},[14,851,853],{"id":852},"_77-参数解包","7.7 参数解包",[19,855,856],{},"列表或元组解包为位置参数：",[23,858,860],{"className":25,"code":859,"language":27,"meta":28,"style":28},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[30,861,862,871,889,893,897,920],{"__ignoreMap":28},[33,863,864,866,868],{"class":35,"line":36},[33,865,40],{"class":39},[33,867,652],{"class":43},[33,869,870],{"class":47},"(a, b, c):\n",[33,872,873,875,878,881,884,886],{"class":35,"line":51},[33,874,90],{"class":39},[33,876,877],{"class":47}," a ",[33,879,880],{"class":39},"+",[33,882,883],{"class":47}," b ",[33,885,880],{"class":39},[33,887,888],{"class":47}," c\n",[33,890,891],{"class":35,"line":64},[33,892,100],{"emptyLinePlaceholder":99},[33,894,895],{"class":35,"line":76},[33,896,100],{"emptyLinePlaceholder":99},[33,898,899,902,904,907,909,911,913,915,917],{"class":35,"line":87},[33,900,901],{"class":47},"nums ",[33,903,57],{"class":39},[33,905,906],{"class":47}," [",[33,908,720],{"class":72},[33,910,245],{"class":47},[33,912,725],{"class":72},[33,914,245],{"class":47},[33,916,730],{"class":72},[33,918,919],{"class":47},"]\n",[33,921,922,924,926,928],{"class":35,"line":96},[33,923,122],{"class":72},[33,925,717],{"class":47},[33,927,657],{"class":39},[33,929,930],{"class":47},"nums))\n",[19,932,933],{},"字典解包为关键字参数：",[23,935,937],{"className":25,"code":936,"language":27,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[30,938,939,947,974,978,982,1011],{"__ignoreMap":28},[33,940,941,943,945],{"class":35,"line":36},[33,942,40],{"class":39},[33,944,185],{"class":43},[33,946,188],{"class":47},[33,948,949,951,953,955,957,959,961,963,966,968,970,972],{"class":35,"line":51},[33,950,193],{"class":72},[33,952,133],{"class":47},[33,954,198],{"class":39},[33,956,397],{"class":60},[33,958,204],{"class":72},[33,960,207],{"class":47},[33,962,210],{"class":72},[33,964,965],{"class":72}," {",[33,967,218],{"class":47},[33,969,210],{"class":72},[33,971,397],{"class":60},[33,973,226],{"class":47},[33,975,976],{"class":35,"line":64},[33,977,100],{"emptyLinePlaceholder":99},[33,979,980],{"class":35,"line":76},[33,981,100],{"emptyLinePlaceholder":99},[33,983,984,987,989,991,994,997,999,1001,1004,1006,1008],{"class":35,"line":87},[33,985,986],{"class":47},"info ",[33,988,57],{"class":39},[33,990,965],{"class":47},[33,992,993],{"class":60},"\"name\"",[33,995,996],{"class":47},": ",[33,998,242],{"class":60},[33,1000,245],{"class":47},[33,1002,1003],{"class":60},"\"age\"",[33,1005,996],{"class":47},[33,1007,248],{"class":72},[33,1009,1010],{"class":47},"}\n",[33,1012,1013,1015,1017],{"class":35,"line":96},[33,1014,239],{"class":47},[33,1016,787],{"class":39},[33,1018,1019],{"class":47},"info)\n",[14,1021,1023],{"id":1022},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,1025,1026,1029],{},[30,1027,1028],{},"lambda"," 用于定义简单匿名函数。",[23,1031,1033],{"className":25,"code":1032,"language":27,"meta":28,"style":28},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[30,1034,1035,1053],{"__ignoreMap":28},[33,1036,1037,1040,1042,1045,1048,1050],{"class":35,"line":36},[33,1038,1039],{"class":47},"add ",[33,1041,57],{"class":39},[33,1043,1044],{"class":39}," lambda",[33,1046,1047],{"class":47}," a, b: a ",[33,1049,880],{"class":39},[33,1051,1052],{"class":47}," b\n",[33,1054,1055,1057,1059,1061,1063,1065],{"class":35,"line":51},[33,1056,122],{"class":72},[33,1058,717],{"class":47},[33,1060,720],{"class":72},[33,1062,245],{"class":47},[33,1064,725],{"class":72},[33,1066,551],{"class":47},[19,1068,1069],{},"常和排序、过滤等函数一起使用。",[19,1071,1072],{},"按分数排序：",[23,1074,1076],{"className":25,"code":1075,"language":27,"meta":28,"style":28},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[30,1077,1078,1088,1112,1134,1156,1160,1164,1193],{"__ignoreMap":28},[33,1079,1080,1083,1085],{"class":35,"line":36},[33,1081,1082],{"class":47},"students ",[33,1084,57],{"class":39},[33,1086,1087],{"class":47}," [\n",[33,1089,1090,1093,1095,1097,1099,1101,1104,1106,1109],{"class":35,"line":51},[33,1091,1092],{"class":47},"    {",[33,1094,993],{"class":60},[33,1096,996],{"class":47},[33,1098,242],{"class":60},[33,1100,245],{"class":47},[33,1102,1103],{"class":60},"\"score\"",[33,1105,996],{"class":47},[33,1107,1108],{"class":72},"95",[33,1110,1111],{"class":47},"},\n",[33,1113,1114,1116,1118,1120,1123,1125,1127,1129,1132],{"class":35,"line":64},[33,1115,1092],{"class":47},[33,1117,993],{"class":60},[33,1119,996],{"class":47},[33,1121,1122],{"class":60},"\"小红\"",[33,1124,245],{"class":47},[33,1126,1103],{"class":60},[33,1128,996],{"class":47},[33,1130,1131],{"class":72},"88",[33,1133,1111],{"class":47},[33,1135,1136,1138,1140,1142,1145,1147,1149,1151,1154],{"class":35,"line":76},[33,1137,1092],{"class":47},[33,1139,993],{"class":60},[33,1141,996],{"class":47},[33,1143,1144],{"class":60},"\"小刚\"",[33,1146,245],{"class":47},[33,1148,1103],{"class":60},[33,1150,996],{"class":47},[33,1152,1153],{"class":72},"72",[33,1155,1111],{"class":47},[33,1157,1158],{"class":35,"line":87},[33,1159,919],{"class":47},[33,1161,1162],{"class":35,"line":96},[33,1163,100],{"emptyLinePlaceholder":99},[33,1165,1166,1169,1172,1175,1178,1180,1183,1186,1188,1191],{"class":35,"line":103},[33,1167,1168],{"class":47},"students.sort(",[33,1170,1171],{"class":289},"key",[33,1173,1174],{"class":39},"=lambda",[33,1176,1177],{"class":47}," item: item[",[33,1179,1103],{"class":60},[33,1181,1182],{"class":47},"], ",[33,1184,1185],{"class":289},"reverse",[33,1187,57],{"class":39},[33,1189,1190],{"class":72},"True",[33,1192,226],{"class":47},[33,1194,1195,1197],{"class":35,"line":108},[33,1196,122],{"class":72},[33,1198,1199],{"class":47},"(students)\n",[19,1201,1202,1203,1205],{},"如果逻辑复杂，不要硬写 ",[30,1204,1028],{},"，定义普通函数更清晰。",[14,1207,1209],{"id":1208},"_79-函数作为参数","7.9 函数作为参数",[19,1211,1212],{},"函数可以作为参数传给另一个函数。",[23,1214,1216],{"className":25,"code":1215,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[30,1217,1218,1227,1237,1241,1245,1255,1262,1266,1270],{"__ignoreMap":28},[33,1219,1220,1222,1224],{"class":35,"line":36},[33,1221,40],{"class":39},[33,1223,652],{"class":43},[33,1225,1226],{"class":47},"(a, b):\n",[33,1228,1229,1231,1233,1235],{"class":35,"line":51},[33,1230,90],{"class":39},[33,1232,877],{"class":47},[33,1234,880],{"class":39},[33,1236,1052],{"class":47},[33,1238,1239],{"class":35,"line":64},[33,1240,100],{"emptyLinePlaceholder":99},[33,1242,1243],{"class":35,"line":76},[33,1244,100],{"emptyLinePlaceholder":99},[33,1246,1247,1249,1252],{"class":35,"line":87},[33,1248,40],{"class":39},[33,1250,1251],{"class":43}," calculate",[33,1253,1254],{"class":47},"(a, b, func):\n",[33,1256,1257,1259],{"class":35,"line":96},[33,1258,90],{"class":39},[33,1260,1261],{"class":47}," func(a, b)\n",[33,1263,1264],{"class":35,"line":103},[33,1265,100],{"emptyLinePlaceholder":99},[33,1267,1268],{"class":35,"line":108},[33,1269,100],{"emptyLinePlaceholder":99},[33,1271,1272,1274,1277,1280,1282,1285],{"class":35,"line":119},[33,1273,122],{"class":72},[33,1275,1276],{"class":47},"(calculate(",[33,1278,1279],{"class":72},"10",[33,1281,245],{"class":47},[33,1283,1284],{"class":72},"20",[33,1286,1287],{"class":47},", add))\n",[19,1289,1290],{},"这种思想在排序、回调、框架中经常出现。",[14,1292,1294],{"id":1293},"_710-mapfiltersorted","7.10 map、filter、sorted",[631,1296,1298],{"id":1297},"_7101-map","7.10.1 map",[19,1300,1301,1304],{},[30,1302,1303],{},"map"," 对每个元素执行函数。",[23,1306,1308],{"className":25,"code":1307,"language":27,"meta":28,"style":28},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[30,1309,1310,1334,1358],{"__ignoreMap":28},[33,1311,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332],{"class":35,"line":36},[33,1313,901],{"class":47},[33,1315,57],{"class":39},[33,1317,906],{"class":47},[33,1319,720],{"class":72},[33,1321,245],{"class":47},[33,1323,725],{"class":72},[33,1325,245],{"class":47},[33,1327,730],{"class":72},[33,1329,245],{"class":47},[33,1331,753],{"class":72},[33,1333,919],{"class":47},[33,1335,1336,1338,1340,1343,1345,1347,1350,1352,1355],{"class":35,"line":51},[33,1337,111],{"class":47},[33,1339,57],{"class":39},[33,1341,1342],{"class":72}," map",[33,1344,133],{"class":47},[33,1346,1028],{"class":39},[33,1348,1349],{"class":47}," x: x ",[33,1351,657],{"class":39},[33,1353,1354],{"class":72}," 2",[33,1356,1357],{"class":47},", nums)\n",[33,1359,1360,1362,1364,1367],{"class":35,"line":64},[33,1361,122],{"class":72},[33,1363,133],{"class":47},[33,1365,1366],{"class":72},"list",[33,1368,139],{"class":47},[631,1370,1372],{"id":1371},"_7102-filter","7.10.2 filter",[19,1374,1375,1378],{},[30,1376,1377],{},"filter"," 保留满足条件的元素。",[23,1380,1382],{"className":25,"code":1381,"language":27,"meta":28,"style":28},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[30,1383,1384,1412,1440],{"__ignoreMap":28},[33,1385,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410],{"class":35,"line":36},[33,1387,901],{"class":47},[33,1389,57],{"class":39},[33,1391,906],{"class":47},[33,1393,720],{"class":72},[33,1395,245],{"class":47},[33,1397,725],{"class":72},[33,1399,245],{"class":47},[33,1401,730],{"class":72},[33,1403,245],{"class":47},[33,1405,753],{"class":72},[33,1407,245],{"class":47},[33,1409,758],{"class":72},[33,1411,919],{"class":47},[33,1413,1414,1416,1418,1421,1423,1425,1427,1430,1432,1435,1438],{"class":35,"line":51},[33,1415,111],{"class":47},[33,1417,57],{"class":39},[33,1419,1420],{"class":72}," filter",[33,1422,133],{"class":47},[33,1424,1028],{"class":39},[33,1426,1349],{"class":47},[33,1428,1429],{"class":39},"%",[33,1431,1354],{"class":72},[33,1433,1434],{"class":39}," ==",[33,1436,1437],{"class":72}," 0",[33,1439,1357],{"class":47},[33,1441,1442,1444,1446,1448],{"class":35,"line":64},[33,1443,122],{"class":72},[33,1445,133],{"class":47},[33,1447,1366],{"class":72},[33,1449,139],{"class":47},[631,1451,1453],{"id":1452},"_7103-sorted","7.10.3 sorted",[19,1455,1456,1459],{},[30,1457,1458],{},"sorted"," 返回排序后的新列表。",[23,1461,1463],{"className":25,"code":1462,"language":27,"meta":28,"style":28},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[30,1464,1465,1473,1493,1513,1533,1537,1541,1571],{"__ignoreMap":28},[33,1466,1467,1469,1471],{"class":35,"line":36},[33,1468,1082],{"class":47},[33,1470,57],{"class":39},[33,1472,1087],{"class":47},[33,1474,1475,1477,1479,1481,1483,1485,1487,1489,1491],{"class":35,"line":51},[33,1476,1092],{"class":47},[33,1478,993],{"class":60},[33,1480,996],{"class":47},[33,1482,242],{"class":60},[33,1484,245],{"class":47},[33,1486,1103],{"class":60},[33,1488,996],{"class":47},[33,1490,1108],{"class":72},[33,1492,1111],{"class":47},[33,1494,1495,1497,1499,1501,1503,1505,1507,1509,1511],{"class":35,"line":64},[33,1496,1092],{"class":47},[33,1498,993],{"class":60},[33,1500,996],{"class":47},[33,1502,1122],{"class":60},[33,1504,245],{"class":47},[33,1506,1103],{"class":60},[33,1508,996],{"class":47},[33,1510,1131],{"class":72},[33,1512,1111],{"class":47},[33,1514,1515,1517,1519,1521,1523,1525,1527,1529,1531],{"class":35,"line":76},[33,1516,1092],{"class":47},[33,1518,993],{"class":60},[33,1520,996],{"class":47},[33,1522,1144],{"class":60},[33,1524,245],{"class":47},[33,1526,1103],{"class":60},[33,1528,996],{"class":47},[33,1530,1153],{"class":72},[33,1532,1111],{"class":47},[33,1534,1535],{"class":35,"line":87},[33,1536,919],{"class":47},[33,1538,1539],{"class":35,"line":96},[33,1540,100],{"emptyLinePlaceholder":99},[33,1542,1543,1545,1547,1550,1553,1555,1557,1559,1561,1563,1565,1567,1569],{"class":35,"line":103},[33,1544,111],{"class":47},[33,1546,57],{"class":39},[33,1548,1549],{"class":72}," sorted",[33,1551,1552],{"class":47},"(students, ",[33,1554,1171],{"class":289},[33,1556,1174],{"class":39},[33,1558,1177],{"class":47},[33,1560,1103],{"class":60},[33,1562,1182],{"class":47},[33,1564,1185],{"class":289},[33,1566,57],{"class":39},[33,1568,1190],{"class":72},[33,1570,226],{"class":47},[33,1572,1573,1575],{"class":35,"line":108},[33,1574,122],{"class":72},[33,1576,125],{"class":47},[14,1578,1580],{"id":1579},"_711-闭包入门","7.11 闭包入门",[19,1582,1583],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[23,1585,1587],{"className":25,"code":1586,"language":27,"meta":28,"style":28},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[30,1588,1589,1599,1610,1622,1626,1633,1637,1641,1655],{"__ignoreMap":28},[33,1590,1591,1593,1596],{"class":35,"line":36},[33,1592,40],{"class":39},[33,1594,1595],{"class":43}," outer",[33,1597,1598],{"class":47},"(base):\n",[33,1600,1601,1604,1607],{"class":35,"line":51},[33,1602,1603],{"class":39},"    def",[33,1605,1606],{"class":43}," inner",[33,1608,1609],{"class":47},"(num):\n",[33,1611,1612,1615,1618,1620],{"class":35,"line":64},[33,1613,1614],{"class":39},"        return",[33,1616,1617],{"class":47}," base ",[33,1619,880],{"class":39},[33,1621,695],{"class":47},[33,1623,1624],{"class":35,"line":76},[33,1625,100],{"emptyLinePlaceholder":99},[33,1627,1628,1630],{"class":35,"line":87},[33,1629,90],{"class":39},[33,1631,1632],{"class":47}," inner\n",[33,1634,1635],{"class":35,"line":96},[33,1636,100],{"emptyLinePlaceholder":99},[33,1638,1639],{"class":35,"line":103},[33,1640,100],{"emptyLinePlaceholder":99},[33,1642,1643,1646,1648,1651,1653],{"class":35,"line":108},[33,1644,1645],{"class":47},"add_10 ",[33,1647,57],{"class":39},[33,1649,1650],{"class":47}," outer(",[33,1652,1279],{"class":72},[33,1654,226],{"class":47},[33,1656,1657,1659,1662,1664],{"class":35,"line":119},[33,1658,122],{"class":72},[33,1660,1661],{"class":47},"(add_10(",[33,1663,758],{"class":72},[33,1665,551],{"class":47},[19,1667,1668],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,1670,1672],{"id":1671},"_712-装饰器入门","7.12 装饰器入门",[19,1674,1675],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[23,1677,1679],{"className":25,"code":1678,"language":27,"meta":28,"style":28},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[30,1680,1681,1691,1700,1711,1716,1727,1731,1738,1742,1746,1751,1761,1773,1778,1783],{"__ignoreMap":28},[33,1682,1683,1685,1688],{"class":35,"line":36},[33,1684,40],{"class":39},[33,1686,1687],{"class":43}," log",[33,1689,1690],{"class":47},"(func):\n",[33,1692,1693,1695,1698],{"class":35,"line":51},[33,1694,1603],{"class":39},[33,1696,1697],{"class":43}," wrapper",[33,1699,48],{"class":47},[33,1701,1702,1704,1706,1709],{"class":35,"line":64},[33,1703,807],{"class":72},[33,1705,133],{"class":47},[33,1707,1708],{"class":60},"\"函数开始执行\"",[33,1710,226],{"class":47},[33,1712,1713],{"class":35,"line":76},[33,1714,1715],{"class":47},"        func()\n",[33,1717,1718,1720,1722,1725],{"class":35,"line":87},[33,1719,807],{"class":72},[33,1721,133],{"class":47},[33,1723,1724],{"class":60},"\"函数执行结束\"",[33,1726,226],{"class":47},[33,1728,1729],{"class":35,"line":96},[33,1730,100],{"emptyLinePlaceholder":99},[33,1732,1733,1735],{"class":35,"line":103},[33,1734,90],{"class":39},[33,1736,1737],{"class":47}," wrapper\n",[33,1739,1740],{"class":35,"line":108},[33,1741,100],{"emptyLinePlaceholder":99},[33,1743,1744],{"class":35,"line":119},[33,1745,100],{"emptyLinePlaceholder":99},[33,1747,1748],{"class":35,"line":128},[33,1749,1750],{"class":43},"@log\n",[33,1752,1754,1756,1759],{"class":35,"line":1753},11,[33,1755,40],{"class":39},[33,1757,1758],{"class":43}," say_hello",[33,1760,48],{"class":47},[33,1762,1764,1766,1768,1771],{"class":35,"line":1763},12,[33,1765,193],{"class":72},[33,1767,133],{"class":47},[33,1769,1770],{"class":60},"\"hello\"",[33,1772,226],{"class":47},[33,1774,1776],{"class":35,"line":1775},13,[33,1777,100],{"emptyLinePlaceholder":99},[33,1779,1781],{"class":35,"line":1780},14,[33,1782,100],{"emptyLinePlaceholder":99},[33,1784,1786],{"class":35,"line":1785},15,[33,1787,1788],{"class":47},"say_hello()\n",[19,1790,1791],{},"等价于：",[23,1793,1795],{"className":25,"code":1794,"language":27,"meta":28,"style":28},"say_hello = log(say_hello)\n",[30,1796,1797],{"__ignoreMap":28},[33,1798,1799,1802,1804],{"class":35,"line":36},[33,1800,1801],{"class":47},"say_hello ",[33,1803,57],{"class":39},[33,1805,1806],{"class":47}," log(say_hello)\n",[19,1808,1809],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,1811,1813],{"id":1812},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[23,1815,1817],{"className":25,"code":1816,"language":27,"meta":28,"style":28},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[30,1818,1819,1827,1844,1854,1873,1883,1890,1894,1900,1904,1908,1912,1920,1930,1934,1938],{"__ignoreMap":28},[33,1820,1821,1823,1825],{"class":35,"line":36},[33,1822,40],{"class":39},[33,1824,1687],{"class":43},[33,1826,1690],{"class":47},[33,1828,1829,1831,1833,1835,1837,1840,1842],{"class":35,"line":51},[33,1830,1603],{"class":39},[33,1832,1697],{"class":43},[33,1834,133],{"class":47},[33,1836,657],{"class":39},[33,1838,1839],{"class":47},"args, ",[33,1841,787],{"class":39},[33,1843,790],{"class":47},[33,1845,1846,1848,1850,1852],{"class":35,"line":64},[33,1847,807],{"class":72},[33,1849,133],{"class":47},[33,1851,1708],{"class":60},[33,1853,226],{"class":47},[33,1855,1856,1859,1861,1864,1866,1868,1870],{"class":35,"line":76},[33,1857,1858],{"class":47},"        result ",[33,1860,57],{"class":39},[33,1862,1863],{"class":47}," func(",[33,1865,657],{"class":39},[33,1867,1839],{"class":47},[33,1869,787],{"class":39},[33,1871,1872],{"class":47},"kwargs)\n",[33,1874,1875,1877,1879,1881],{"class":35,"line":87},[33,1876,807],{"class":72},[33,1878,133],{"class":47},[33,1880,1724],{"class":60},[33,1882,226],{"class":47},[33,1884,1885,1887],{"class":35,"line":96},[33,1886,1614],{"class":39},[33,1888,1889],{"class":47}," result\n",[33,1891,1892],{"class":35,"line":103},[33,1893,100],{"emptyLinePlaceholder":99},[33,1895,1896,1898],{"class":35,"line":108},[33,1897,90],{"class":39},[33,1899,1737],{"class":47},[33,1901,1902],{"class":35,"line":119},[33,1903,100],{"emptyLinePlaceholder":99},[33,1905,1906],{"class":35,"line":128},[33,1907,100],{"emptyLinePlaceholder":99},[33,1909,1910],{"class":35,"line":1753},[33,1911,1750],{"class":43},[33,1913,1914,1916,1918],{"class":35,"line":1763},[33,1915,40],{"class":39},[33,1917,652],{"class":43},[33,1919,1226],{"class":47},[33,1921,1922,1924,1926,1928],{"class":35,"line":1775},[33,1923,90],{"class":39},[33,1925,877],{"class":47},[33,1927,880],{"class":39},[33,1929,1052],{"class":47},[33,1931,1932],{"class":35,"line":1780},[33,1933,100],{"emptyLinePlaceholder":99},[33,1935,1936],{"class":35,"line":1785},[33,1937,100],{"emptyLinePlaceholder":99},[33,1939,1941,1943,1945,1947,1949,1951],{"class":35,"line":1940},16,[33,1942,122],{"class":72},[33,1944,717],{"class":47},[33,1946,1279],{"class":72},[33,1948,245],{"class":47},[33,1950,1284],{"class":72},[33,1952,551],{"class":47},[19,1954,1955,1956,1958,1959,1961],{},"这个写法使用 ",[30,1957,639],{}," 和 ",[30,1960,769],{}," 接收原函数的所有参数。",[14,1963,1965],{"id":1964},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,1967,1968],{},"需求：",[328,1970,1971,1974,1977],{},[331,1972,1973],{},"给定一组学生数据。",[331,1975,1976],{},"封装函数，根据传入规则筛选学生。",[331,1978,1979],{},"筛选及格、优秀、未成年学生。",[19,1981,1982],{},"代码：",[23,1984,1986],{"className":25,"code":1985,"language":27,"meta":28,"style":28},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[30,1987,1988,1996,2024,2053,2083,2087,2091,2095,2105,2114,2126,2134,2139,2145,2149,2153,2181,2206,2232,2237,2245,2253],{"__ignoreMap":28},[33,1989,1990,1992,1994],{"class":35,"line":36},[33,1991,1082],{"class":47},[33,1993,57],{"class":39},[33,1995,1087],{"class":47},[33,1997,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022],{"class":35,"line":51},[33,1999,1092],{"class":47},[33,2001,993],{"class":60},[33,2003,996],{"class":47},[33,2005,242],{"class":60},[33,2007,245],{"class":47},[33,2009,1003],{"class":60},[33,2011,996],{"class":47},[33,2013,248],{"class":72},[33,2015,245],{"class":47},[33,2017,1103],{"class":60},[33,2019,996],{"class":47},[33,2021,1108],{"class":72},[33,2023,1111],{"class":47},[33,2025,2026,2028,2030,2032,2034,2036,2038,2040,2043,2045,2047,2049,2051],{"class":35,"line":64},[33,2027,1092],{"class":47},[33,2029,993],{"class":60},[33,2031,996],{"class":47},[33,2033,1122],{"class":60},[33,2035,245],{"class":47},[33,2037,1003],{"class":60},[33,2039,996],{"class":47},[33,2041,2042],{"class":72},"17",[33,2044,245],{"class":47},[33,2046,1103],{"class":60},[33,2048,996],{"class":47},[33,2050,1131],{"class":72},[33,2052,1111],{"class":47},[33,2054,2055,2057,2059,2061,2063,2065,2067,2069,2072,2074,2076,2078,2081],{"class":35,"line":76},[33,2056,1092],{"class":47},[33,2058,993],{"class":60},[33,2060,996],{"class":47},[33,2062,1144],{"class":60},[33,2064,245],{"class":47},[33,2066,1003],{"class":60},[33,2068,996],{"class":47},[33,2070,2071],{"class":72},"19",[33,2073,245],{"class":47},[33,2075,1103],{"class":60},[33,2077,996],{"class":47},[33,2079,2080],{"class":72},"59",[33,2082,1111],{"class":47},[33,2084,2085],{"class":35,"line":87},[33,2086,919],{"class":47},[33,2088,2089],{"class":35,"line":96},[33,2090,100],{"emptyLinePlaceholder":99},[33,2092,2093],{"class":35,"line":103},[33,2094,100],{"emptyLinePlaceholder":99},[33,2096,2097,2099,2102],{"class":35,"line":108},[33,2098,40],{"class":39},[33,2100,2101],{"class":43}," filter_students",[33,2103,2104],{"class":47},"(students, condition):\n",[33,2106,2107,2110,2112],{"class":35,"line":119},[33,2108,2109],{"class":47},"    result ",[33,2111,57],{"class":39},[33,2113,615],{"class":47},[33,2115,2116,2118,2121,2123],{"class":35,"line":128},[33,2117,675],{"class":39},[33,2119,2120],{"class":47}," student ",[33,2122,681],{"class":39},[33,2124,2125],{"class":47}," students:\n",[33,2127,2128,2131],{"class":35,"line":1753},[33,2129,2130],{"class":39},"        if",[33,2132,2133],{"class":47}," condition(student):\n",[33,2135,2136],{"class":35,"line":1763},[33,2137,2138],{"class":47},"            result.append(student)\n",[33,2140,2141,2143],{"class":35,"line":1775},[33,2142,90],{"class":39},[33,2144,1889],{"class":47},[33,2146,2147],{"class":35,"line":1780},[33,2148,100],{"emptyLinePlaceholder":99},[33,2150,2151],{"class":35,"line":1785},[33,2152,100],{"emptyLinePlaceholder":99},[33,2154,2155,2158,2160,2163,2165,2168,2170,2173,2176,2179],{"class":35,"line":1940},[33,2156,2157],{"class":47},"passed ",[33,2159,57],{"class":39},[33,2161,2162],{"class":47}," filter_students(students, ",[33,2164,1028],{"class":39},[33,2166,2167],{"class":47}," s: s[",[33,2169,1103],{"class":60},[33,2171,2172],{"class":47},"] ",[33,2174,2175],{"class":39},">=",[33,2177,2178],{"class":72}," 60",[33,2180,226],{"class":47},[33,2182,2184,2187,2189,2191,2193,2195,2197,2199,2201,2204],{"class":35,"line":2183},17,[33,2185,2186],{"class":47},"excellent ",[33,2188,57],{"class":39},[33,2190,2162],{"class":47},[33,2192,1028],{"class":39},[33,2194,2167],{"class":47},[33,2196,1103],{"class":60},[33,2198,2172],{"class":47},[33,2200,2175],{"class":39},[33,2202,2203],{"class":72}," 90",[33,2205,226],{"class":47},[33,2207,2209,2212,2214,2216,2218,2220,2222,2224,2227,2230],{"class":35,"line":2208},18,[33,2210,2211],{"class":47},"under_age ",[33,2213,57],{"class":39},[33,2215,2162],{"class":47},[33,2217,1028],{"class":39},[33,2219,2167],{"class":47},[33,2221,1003],{"class":60},[33,2223,2172],{"class":47},[33,2225,2226],{"class":39},"\u003C",[33,2228,2229],{"class":72}," 18",[33,2231,226],{"class":47},[33,2233,2235],{"class":35,"line":2234},19,[33,2236,100],{"emptyLinePlaceholder":99},[33,2238,2240,2242],{"class":35,"line":2239},20,[33,2241,122],{"class":72},[33,2243,2244],{"class":47},"(passed)\n",[33,2246,2248,2250],{"class":35,"line":2247},21,[33,2249,122],{"class":72},[33,2251,2252],{"class":47},"(excellent)\n",[33,2254,2256,2258],{"class":35,"line":2255},22,[33,2257,122],{"class":72},[33,2259,2260],{"class":47},"(under_age)\n",[14,2262,2264],{"id":2263},"_715-易错点","7.15 易错点",[328,2266,2267,2270,2278,2283,2294],{},[331,2268,2269],{},"默认参数不要写可变对象。",[331,2271,2272,2274,2275,2277],{},[30,2273,639],{}," 是元组，",[30,2276,769],{}," 是字典。",[331,2279,2280,2282],{},[30,2281,1028],{}," 只适合简单表达式。",[331,2284,2285,1958,2287,2289,2290,2293],{},[30,2286,1303],{},[30,2288,1377],{}," 的结果是迭代器，常用 ",[30,2291,2292],{},"list()"," 转换查看。",[331,2295,2296],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,2298,2300],{"id":2299},"_716-本章练习","7.16 本章练习",[328,2302,2303,2310,2316,2322,2327],{},[331,2304,2305,2306,2309],{},"写函数 ",[30,2307,2308],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[331,2311,2305,2312,2315],{},[30,2313,2314],{},"print_user(**kwargs)","，输出用户所有字段。",[331,2317,2318,2319,2321],{},"使用 ",[30,2320,1028],{}," 对学生列表按年龄排序。",[331,2323,2318,2324,2326],{},[30,2325,1377],{}," 找出成绩不及格的学生。",[331,2328,2329],{},"写一个装饰器，统计函数执行前后的提示信息。",[2331,2332,2333],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":2335},[2336,2337,2338,2339,2340,2341,2345,2346,2347,2348,2353,2354,2355,2356,2357,2358],{"id":16,"depth":51,"text":17},{"id":169,"depth":51,"text":170},{"id":273,"depth":51,"text":274},{"id":339,"depth":51,"text":340},{"id":491,"depth":51,"text":492},{"id":628,"depth":51,"text":629,"children":2342},[2343,2344],{"id":633,"depth":64,"text":634},{"id":763,"depth":64,"text":764},{"id":852,"depth":51,"text":853},{"id":1022,"depth":51,"text":1023},{"id":1208,"depth":51,"text":1209},{"id":1293,"depth":51,"text":1294,"children":2349},[2350,2351,2352],{"id":1297,"depth":64,"text":1298},{"id":1371,"depth":64,"text":1372},{"id":1452,"depth":64,"text":1453},{"id":1579,"depth":51,"text":1580},{"id":1671,"depth":51,"text":1672},{"id":1812,"depth":51,"text":1813},{"id":1964,"depth":51,"text":1965},{"id":2263,"depth":51,"text":2264},{"id":2299,"depth":51,"text":2300},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":5,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",[2367,7411,8516,9936,12922,14271,15759,16848,25609,25621,26220,26246,26370,26611,26676,26694,26707,26754,26878,27047,27246,27426,27631,27767,27862,27899,27912,28222,28962,29669,29690,30710,32341,32492,32505,32517,32814,52615,52630,52647,52680,55549,78889,95031,95052,95165,95286,96056,96719,97080,97118,97224,97324,97367,97393,97454,99107,99208,99233,99724,100224,101304,101587,102329,102831,102843,104857,106520,108022,109720,111637,113556,115577,119046,119478,119941,120689,123633,123981,124003,124358,127664,127676,128079,128102,128249,128416,128621,128922,129479,130136,132067,133665,134314,135808,137239,138474,140168,141920,144330,144446,145381,145592,146477,147712,147940,147953,149107,151518,153874,157186,159660,161300,163073,165079,168122,170088,172615,174809],{"id":2368,"title":2369,"body":2370,"description":28,"extension":2360,"meta":7406,"navigation":99,"path":7407,"seo":7408,"stem":7409,"__hash__":7410},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2371,"toc":7378},[2372,2375,2379,2382,2386,2397,2401,2405,2408,2411,2414,2417,2420,2446,2450,2453,2456,2459,2462,2510,2514,2532,2534,2548,2551,2559,2562,3405,3412,3429,3433,3519,3523,3529,3615,3619,3657,3661,3725,3729,3733,3740,3751,3755,3760,3764,3769,3773,3778,3782,3786,3791,4047,4052,4190,4195,4451,4454,4462,4466,4471,4574,4577,4881,4890,4991,4994,4997,5000,5003,5263,5268,5407,5410,5588,5591,5719,5722,5874,5878,5883,5886,5897,5905,5908,6014,6018,6022,6027,6077,6082,6087,6111,6116,6169,6172,6177,6352,6357,6642,6647,7042,7046,7051,7108,7113,7121,7124,7263,7266,7375],[10,2373,2369],{"id":2374},"_1基础入门",[14,2376,2378],{"id":2377},"_11注释","1.1注释",[19,2380,2381],{},"\u002F\u002F或者\u002F* *\u002F",[14,2383,2385],{"id":2384},"_12命名","1.2命名",[328,2387,2388,2391,2394],{},[331,2389,2390],{},"字母数字下划线",[331,2392,2393],{},"开头必须是字母或_",[331,2395,2396],{},"不能使用关键词",[14,2398,2400],{"id":2399},"_13数据类型","1.3数据类型",[631,2402,2404],{"id":2403},"_131整形","1.3.1整形",[19,2406,2407],{},"short 短整形 2",[19,2409,2410],{},"int 整形 4",[19,2412,2413],{},"long 长整形 win4 linux32位4 linux64位8",[19,2415,2416],{},"long long 长长整形 8",[19,2418,2419],{},"利用sizeof可以求数据类型占用的内存空间大小",[23,2421,2425],{"className":2422,"code":2423,"language":2424,"meta":28,"style":28},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[30,2426,2427,2439],{"__ignoreMap":28},[33,2428,2429,2432,2434,2437],{"class":35,"line":36},[33,2430,2431],{"class":39},"sizeof",[33,2433,133],{"class":47},[33,2435,2436],{"class":39},"int",[33,2438,226],{"class":47},[33,2440,2441,2443],{"class":35,"line":51},[33,2442,2431],{"class":39},[33,2444,2445],{"class":47},"(num)\n",[631,2447,2449],{"id":2448},"_132浮点型","1.3.2浮点型",[19,2451,2452],{},"float 单精度 4节 7位有效数字",[19,2454,2455],{},"double 双精度 8节 15-16有效数字",[19,2457,2458],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2460,2461],{},"注意点：",[23,2463,2465],{"className":2422,"code":2464,"language":2424,"meta":28,"style":28},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[30,2466,2467,2489],{"__ignoreMap":28},[33,2468,2469,2472,2475,2477,2480,2482,2485],{"class":35,"line":36},[33,2470,2471],{"class":39},"float",[33,2473,2474],{"class":47}," f1",[33,2476,57],{"class":39},[33,2478,2479],{"class":72},"3.14",[33,2481,198],{"class":39},[33,2483,2484],{"class":47},";",[33,2486,2488],{"class":2487},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[33,2490,2491,2493,2496,2498,2500,2503,2505,2507],{"class":35,"line":51},[33,2492,2471],{"class":39},[33,2494,2495],{"class":47}," f2",[33,2497,57],{"class":39},[33,2499,730],{"class":72},[33,2501,2502],{"class":39},"e",[33,2504,725],{"class":72},[33,2506,2484],{"class":47},[33,2508,2509],{"class":2487}," \u002F\u002F科学记数法\n",[631,2511,2513],{"id":2512},"_133字符型","1.3.3字符型",[23,2515,2517],{"className":2422,"code":2516,"language":2424,"meta":28,"style":28},"char ch='a'\n",[30,2518,2519],{"__ignoreMap":28},[33,2520,2521,2524,2527,2529],{"class":35,"line":36},[33,2522,2523],{"class":39},"char",[33,2525,2526],{"class":47}," ch",[33,2528,57],{"class":39},[33,2530,2531],{"class":60},"'a'\n",[19,2533,2461],{},[328,2535,2536,2539,2542,2545],{},[331,2537,2538],{},"在显示字符型变量时，只能单引号，双引号x",[331,2540,2541],{},"单引号内只能一个字符，不能字符串",[331,2543,2544],{},"c和c++字符型变量只占用一个字符",[331,2546,2547],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2549,2550],{},"ASCII码大致由以下两部分组成：",[328,2552,2553,2556],{},[331,2554,2555],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[331,2557,2558],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2560,2561],{},"ASCII码表格：",[2563,2564,2565,2609],"table",{},[2566,2567,2568],"thead",{},[2569,2570,2571,2579,2584,2588,2593,2597,2601,2605],"tr",{},[2572,2573,2574,2578],"th",{},[2575,2576,2577],"strong",{},"ASCII","值",[2572,2580,2581],{},[2575,2582,2583],{},"控制字符",[2572,2585,2586,2578],{},[2575,2587,2577],{},[2572,2589,2590],{},[2575,2591,2592],{},"字符",[2572,2594,2595,2578],{},[2575,2596,2577],{},[2572,2598,2599],{},[2575,2600,2592],{},[2572,2602,2603,2578],{},[2575,2604,2577],{},[2572,2606,2607],{},[2575,2608,2592],{},[2610,2611,2612,2639,2664,2688,2713,2738,2761,2786,2812,2836,2862,2886,2911,2936,2962,2988,3014,3038,3062,3086,3110,3134,3159,3184,3209,3233,3258,3283,3306,3330,3354,3380],"tbody",{},[2569,2613,2614,2618,2621,2624,2627,2630,2633,2636],{},[2615,2616,2617],"td",{},"0",[2615,2619,2620],{},"NUT",[2615,2622,2623],{},"32",[2615,2625,2626],{},"(space)",[2615,2628,2629],{},"64",[2615,2631,2632],{},"@",[2615,2634,2635],{},"96",[2615,2637,2638],{},"、",[2569,2640,2641,2643,2646,2649,2652,2655,2658,2661],{},[2615,2642,720],{},[2615,2644,2645],{},"SOH",[2615,2647,2648],{},"33",[2615,2650,2651],{},"!",[2615,2653,2654],{},"65",[2615,2656,2657],{},"A",[2615,2659,2660],{},"97",[2615,2662,2663],{},"a",[2569,2665,2666,2668,2671,2674,2676,2679,2682,2685],{},[2615,2667,725],{},[2615,2669,2670],{},"STX",[2615,2672,2673],{},"34",[2615,2675,397],{},[2615,2677,2678],{},"66",[2615,2680,2681],{},"B",[2615,2683,2684],{},"98",[2615,2686,2687],{},"b",[2569,2689,2690,2692,2695,2698,2701,2704,2707,2710],{},[2615,2691,730],{},[2615,2693,2694],{},"ETX",[2615,2696,2697],{},"35",[2615,2699,2700],{},"#",[2615,2702,2703],{},"67",[2615,2705,2706],{},"C",[2615,2708,2709],{},"99",[2615,2711,2712],{},"c",[2569,2714,2715,2717,2720,2723,2726,2729,2732,2735],{},[2615,2716,753],{},[2615,2718,2719],{},"EOT",[2615,2721,2722],{},"36",[2615,2724,2725],{},"$",[2615,2727,2728],{},"68",[2615,2730,2731],{},"D",[2615,2733,2734],{},"100",[2615,2736,2737],{},"d",[2569,2739,2740,2742,2745,2748,2750,2753,2756,2759],{},[2615,2741,758],{},[2615,2743,2744],{},"ENQ",[2615,2746,2747],{},"37",[2615,2749,1429],{},[2615,2751,2752],{},"69",[2615,2754,2755],{},"E",[2615,2757,2758],{},"101",[2615,2760,2502],{},[2569,2762,2763,2766,2769,2772,2775,2778,2781,2784],{},[2615,2764,2765],{},"6",[2615,2767,2768],{},"ACK",[2615,2770,2771],{},"38",[2615,2773,2774],{},"&",[2615,2776,2777],{},"70",[2615,2779,2780],{},"F",[2615,2782,2783],{},"102",[2615,2785,198],{},[2569,2787,2788,2791,2794,2797,2800,2803,2806,2809],{},[2615,2789,2790],{},"7",[2615,2792,2793],{},"BEL",[2615,2795,2796],{},"39",[2615,2798,2799],{},",",[2615,2801,2802],{},"71",[2615,2804,2805],{},"G",[2615,2807,2808],{},"103",[2615,2810,2811],{},"g",[2569,2813,2814,2817,2820,2823,2825,2827,2830,2833],{},[2615,2815,2816],{},"8",[2615,2818,2819],{},"BS",[2615,2821,2822],{},"40",[2615,2824,133],{},[2615,2826,1153],{},[2615,2828,2829],{},"H",[2615,2831,2832],{},"104",[2615,2834,2835],{},"h",[2569,2837,2838,2841,2844,2847,2850,2853,2856,2859],{},[2615,2839,2840],{},"9",[2615,2842,2843],{},"HT",[2615,2845,2846],{},"41",[2615,2848,2849],{},")",[2615,2851,2852],{},"73",[2615,2854,2855],{},"I",[2615,2857,2858],{},"105",[2615,2860,2861],{},"i",[2569,2863,2864,2866,2869,2872,2874,2877,2880,2883],{},[2615,2865,1279],{},[2615,2867,2868],{},"LF",[2615,2870,2871],{},"42",[2615,2873,657],{},[2615,2875,2876],{},"74",[2615,2878,2879],{},"J",[2615,2881,2882],{},"106",[2615,2884,2885],{},"j",[2569,2887,2888,2891,2894,2897,2899,2902,2905,2908],{},[2615,2889,2890],{},"11",[2615,2892,2893],{},"VT",[2615,2895,2896],{},"43",[2615,2898,880],{},[2615,2900,2901],{},"75",[2615,2903,2904],{},"K",[2615,2906,2907],{},"107",[2615,2909,2910],{},"k",[2569,2912,2913,2916,2919,2922,2924,2927,2930,2933],{},[2615,2914,2915],{},"12",[2615,2917,2918],{},"FF",[2615,2920,2921],{},"44",[2615,2923,2799],{},[2615,2925,2926],{},"76",[2615,2928,2929],{},"L",[2615,2931,2932],{},"108",[2615,2934,2935],{},"l",[2569,2937,2938,2941,2944,2947,2950,2953,2956,2959],{},[2615,2939,2940],{},"13",[2615,2942,2943],{},"CR",[2615,2945,2946],{},"45",[2615,2948,2949],{},"-",[2615,2951,2952],{},"77",[2615,2954,2955],{},"M",[2615,2957,2958],{},"109",[2615,2960,2961],{},"m",[2569,2963,2964,2967,2970,2973,2976,2979,2982,2985],{},[2615,2965,2966],{},"14",[2615,2968,2969],{},"SO",[2615,2971,2972],{},"46",[2615,2974,2975],{},".",[2615,2977,2978],{},"78",[2615,2980,2981],{},"N",[2615,2983,2984],{},"110",[2615,2986,2987],{},"n",[2569,2989,2990,2993,2996,2999,3002,3005,3008,3011],{},[2615,2991,2992],{},"15",[2615,2994,2995],{},"SI",[2615,2997,2998],{},"47",[2615,3000,3001],{},"\u002F",[2615,3003,3004],{},"79",[2615,3006,3007],{},"O",[2615,3009,3010],{},"111",[2615,3012,3013],{},"o",[2569,3015,3016,3019,3022,3025,3027,3030,3033,3036],{},[2615,3017,3018],{},"16",[2615,3020,3021],{},"DLE",[2615,3023,3024],{},"48",[2615,3026,2617],{},[2615,3028,3029],{},"80",[2615,3031,3032],{},"P",[2615,3034,3035],{},"112",[2615,3037,19],{},[2569,3039,3040,3042,3045,3048,3050,3053,3056,3059],{},[2615,3041,2042],{},[2615,3043,3044],{},"DCI",[2615,3046,3047],{},"49",[2615,3049,720],{},[2615,3051,3052],{},"81",[2615,3054,3055],{},"Q",[2615,3057,3058],{},"113",[2615,3060,3061],{},"q",[2569,3063,3064,3066,3069,3072,3074,3077,3080,3083],{},[2615,3065,248],{},[2615,3067,3068],{},"DC2",[2615,3070,3071],{},"50",[2615,3073,725],{},[2615,3075,3076],{},"82",[2615,3078,3079],{},"R",[2615,3081,3082],{},"114",[2615,3084,3085],{},"r",[2569,3087,3088,3090,3093,3096,3098,3101,3104,3107],{},[2615,3089,2071],{},[2615,3091,3092],{},"DC3",[2615,3094,3095],{},"51",[2615,3097,730],{},[2615,3099,3100],{},"83",[2615,3102,3103],{},"S",[2615,3105,3106],{},"115",[2615,3108,3109],{},"s",[2569,3111,3112,3114,3117,3120,3122,3125,3128,3131],{},[2615,3113,1284],{},[2615,3115,3116],{},"DC4",[2615,3118,3119],{},"52",[2615,3121,753],{},[2615,3123,3124],{},"84",[2615,3126,3127],{},"T",[2615,3129,3130],{},"116",[2615,3132,3133],{},"t",[2569,3135,3136,3139,3142,3145,3147,3150,3153,3156],{},[2615,3137,3138],{},"21",[2615,3140,3141],{},"NAK",[2615,3143,3144],{},"53",[2615,3146,758],{},[2615,3148,3149],{},"85",[2615,3151,3152],{},"U",[2615,3154,3155],{},"117",[2615,3157,3158],{},"u",[2569,3160,3161,3164,3167,3170,3172,3175,3178,3181],{},[2615,3162,3163],{},"22",[2615,3165,3166],{},"SYN",[2615,3168,3169],{},"54",[2615,3171,2765],{},[2615,3173,3174],{},"86",[2615,3176,3177],{},"V",[2615,3179,3180],{},"118",[2615,3182,3183],{},"v",[2569,3185,3186,3189,3192,3195,3197,3200,3203,3206],{},[2615,3187,3188],{},"23",[2615,3190,3191],{},"TB",[2615,3193,3194],{},"55",[2615,3196,2790],{},[2615,3198,3199],{},"87",[2615,3201,3202],{},"W",[2615,3204,3205],{},"119",[2615,3207,3208],{},"w",[2569,3210,3211,3214,3217,3220,3222,3224,3227,3230],{},[2615,3212,3213],{},"24",[2615,3215,3216],{},"CAN",[2615,3218,3219],{},"56",[2615,3221,2816],{},[2615,3223,1131],{},[2615,3225,3226],{},"X",[2615,3228,3229],{},"120",[2615,3231,3232],{},"x",[2569,3234,3235,3238,3241,3244,3246,3249,3252,3255],{},[2615,3236,3237],{},"25",[2615,3239,3240],{},"EM",[2615,3242,3243],{},"57",[2615,3245,2840],{},[2615,3247,3248],{},"89",[2615,3250,3251],{},"Y",[2615,3253,3254],{},"121",[2615,3256,3257],{},"y",[2569,3259,3260,3263,3266,3269,3271,3274,3277,3280],{},[2615,3261,3262],{},"26",[2615,3264,3265],{},"SUB",[2615,3267,3268],{},"58",[2615,3270,387],{},[2615,3272,3273],{},"90",[2615,3275,3276],{},"Z",[2615,3278,3279],{},"122",[2615,3281,3282],{},"z",[2569,3284,3285,3288,3291,3293,3295,3298,3301,3304],{},[2615,3286,3287],{},"27",[2615,3289,3290],{},"ESC",[2615,3292,2080],{},[2615,3294,2484],{},[2615,3296,3297],{},"91",[2615,3299,3300],{},"[",[2615,3302,3303],{},"123",[2615,3305,204],{},[2569,3307,3308,3311,3314,3317,3319,3322,3324,3327],{},[2615,3309,3310],{},"28",[2615,3312,3313],{},"FS",[2615,3315,3316],{},"60",[2615,3318,2226],{},[2615,3320,3321],{},"92",[2615,3323,3001],{},[2615,3325,3326],{},"124",[2615,3328,3329],{},"|",[2569,3331,3332,3335,3338,3341,3343,3346,3349,3352],{},[2615,3333,3334],{},"29",[2615,3336,3337],{},"GS",[2615,3339,3340],{},"61",[2615,3342,57],{},[2615,3344,3345],{},"93",[2615,3347,3348],{},"]",[2615,3350,3351],{},"125",[2615,3353,210],{},[2569,3355,3356,3359,3362,3365,3368,3371,3374,3377],{},[2615,3357,3358],{},"30",[2615,3360,3361],{},"RS",[2615,3363,3364],{},"62",[2615,3366,3367],{},">",[2615,3369,3370],{},"94",[2615,3372,3373],{},"^",[2615,3375,3376],{},"126",[2615,3378,3379],{},"`",[2569,3381,3382,3385,3388,3391,3394,3396,3399,3402],{},[2615,3383,3384],{},"31",[2615,3386,3387],{},"US",[2615,3389,3390],{},"63",[2615,3392,3393],{},"?",[2615,3395,1108],{},[2615,3397,3398],{},"_",[2615,3400,3401],{},"127",[2615,3403,3404],{},"DEL",[19,3406,3407,3408,3411],{},"ASCII 码大致由以下",[2575,3409,3410],{},"两部分组","成：",[3413,3414,3415,3422],"ul",{},[331,3416,3417,3418,3421],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2575,3419,3420],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[331,3423,3424,3425,3428],{},"ASCII 打印字符：数字 ",[2575,3426,3427],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[631,3430,3432],{"id":3431},"_134转义字符","1.3.4转义字符",[23,3434,3436],{"className":2422,"code":3435,"language":2424,"meta":28,"style":28},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[30,3437,3438,3443,3459,3473,3478,3491,3496],{"__ignoreMap":28},[33,3439,3440],{"class":35,"line":36},[33,3441,3442],{"class":2487},"\u002F\u002F换行符\n",[33,3444,3445,3448,3451,3454,3456],{"class":35,"line":51},[33,3446,3447],{"class":47},"cout ",[33,3449,3450],{"class":39},"\u003C\u003C",[33,3452,3453],{"class":60},"\"hello world\u002Fn\"",[33,3455,2484],{"class":47},[33,3457,3458],{"class":2487}," \u002F\u002F就等同于如下：\n",[33,3460,3461,3463,3465,3468,3470],{"class":35,"line":64},[33,3462,3447],{"class":47},[33,3464,3450],{"class":39},[33,3466,3467],{"class":60},"\"hello world\"",[33,3469,3450],{"class":39},[33,3471,3472],{"class":47},"endl;\n",[33,3474,3475],{"class":35,"line":76},[33,3476,3477],{"class":2487},"\u002F\u002F反斜杠\n",[33,3479,3480,3482,3484,3487,3489],{"class":35,"line":87},[33,3481,3447],{"class":47},[33,3483,3450],{"class":39},[33,3485,3486],{"class":60},"\"\u002F\u002F\"",[33,3488,3450],{"class":39},[33,3490,3472],{"class":47},[33,3492,3493],{"class":35,"line":96},[33,3494,3495],{"class":2487},"\u002F\u002F水平制表符\n",[33,3497,3498,3500,3502,3505,3508,3511,3513,3516],{"class":35,"line":103},[33,3499,3447],{"class":47},[33,3501,3450],{"class":39},[33,3503,3504],{"class":60},"\"aaaa",[33,3506,3507],{"class":72},"\\t",[33,3509,3510],{"class":60},"helloworld\"",[33,3512,3450],{"class":39},[33,3514,3515],{"class":47},"endl;",[33,3517,3518],{"class":2487}," \u002F\u002F输出窗口时有对齐效果\n",[631,3520,3522],{"id":3521},"_135字符串型","1.3.5字符串型",[19,3524,3525,3526,3528],{},"char 变量名",[33,3527],{},"=\"字符串值\"",[23,3530,3532],{"className":2422,"code":3531,"language":2424,"meta":28,"style":28},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[30,3533,3534,3539,3544,3549,3554,3568,3581,3586,3591,3602],{"__ignoreMap":28},[33,3535,3536],{"class":35,"line":36},[33,3537,3538],{"class":2487},"\u002F\u002Fc风格字符串\n",[33,3540,3541],{"class":35,"line":51},[33,3542,3543],{"class":2487},"\u002F\u002F注意事项：\n",[33,3545,3546],{"class":35,"line":64},[33,3547,3548],{"class":2487},"\u002F\u002F1.char字符串名[]\n",[33,3550,3551],{"class":35,"line":76},[33,3552,3553],{"class":2487},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[33,3555,3556,3558,3561,3563,3565],{"class":35,"line":87},[33,3557,2523],{"class":39},[33,3559,3560],{"class":47}," str[]",[33,3562,57],{"class":39},[33,3564,3467],{"class":60},[33,3566,3567],{"class":47},";\n",[33,3569,3570,3572,3574,3577,3579],{"class":35,"line":96},[33,3571,3447],{"class":47},[33,3573,3450],{"class":39},[33,3575,3576],{"class":47},"str",[33,3578,3450],{"class":39},[33,3580,3472],{"class":47},[33,3582,3583],{"class":35,"line":103},[33,3584,3585],{"class":2487},"\u002F\u002Fc++风格字符串\n",[33,3587,3588],{"class":35,"line":108},[33,3589,3590],{"class":2487},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[33,3592,3593,3596,3598,3600],{"class":35,"line":119},[33,3594,3595],{"class":47},"string str2",[33,3597,57],{"class":39},[33,3599,3467],{"class":60},[33,3601,3567],{"class":47},[33,3603,3604,3606,3608,3611,3613],{"class":35,"line":128},[33,3605,3447],{"class":47},[33,3607,3450],{"class":39},[33,3609,3610],{"class":47},"str2",[33,3612,3450],{"class":39},[33,3614,3472],{"class":47},[631,3616,3618],{"id":3617},"_136布尔类型bool","1.3.6布尔类型bool",[23,3620,3622],{"className":2422,"code":3621,"language":2424,"meta":28,"style":28},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[30,3623,3624,3639],{"__ignoreMap":28},[33,3625,3626,3629,3632,3634,3637],{"class":35,"line":36},[33,3627,3628],{"class":39},"bool",[33,3630,3631],{"class":47}," flag",[33,3633,57],{"class":39},[33,3635,3636],{"class":72},"true",[33,3638,3567],{"class":47},[33,3640,3641,3644,3647,3650,3652,3654],{"class":35,"line":51},[33,3642,3643],{"class":47},"cout",[33,3645,3646],{"class":39},"\u003C\u003Csizeof",[33,3648,3649],{"class":47},"(flag)",[33,3651,3450],{"class":39},[33,3653,3515],{"class":47},[33,3655,3656],{"class":2487}," \u002F\u002F查看布尔占内存空间\n",[14,3658,3660],{"id":3659},"_14键盘输入cin","1.4键盘输入cin",[23,3662,3664],{"className":2422,"code":3663,"language":2424,"meta":28,"style":28},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[30,3665,3666,3679,3696,3707],{"__ignoreMap":28},[33,3667,3668,3670,3673,3675,3677],{"class":35,"line":36},[33,3669,2436],{"class":39},[33,3671,3672],{"class":47}," a",[33,3674,57],{"class":39},[33,3676,2617],{"class":72},[33,3678,3567],{"class":47},[33,3680,3681,3683,3685,3688,3690,3692,3694],{"class":35,"line":51},[33,3682,3643],{"class":47},[33,3684,3450],{"class":39},[33,3686,3687],{"class":60},"\"请给整型变量a赋值\"",[33,3689,3450],{"class":39},[33,3691,2663],{"class":47},[33,3693,3450],{"class":39},[33,3695,3472],{"class":47},[33,3697,3698,3701,3704],{"class":35,"line":64},[33,3699,3700],{"class":47},"cin ",[33,3702,3703],{"class":39},">>",[33,3705,3706],{"class":47}," a;\n",[33,3708,3709,3711,3713,3716,3719,3721,3723],{"class":35,"line":76},[33,3710,3447],{"class":47},[33,3712,3450],{"class":39},[33,3714,3715],{"class":60}," \"整型变量a=\"",[33,3717,3718],{"class":39}," \u003C\u003C",[33,3720,2663],{"class":47},[33,3722,3450],{"class":39},[33,3724,3472],{"class":47},[14,3726,3728],{"id":3727},"_15运算符","1.5运算符",[631,3730,3732],{"id":3731},"_151算术运算符","1.5.1算术运算符",[19,3734,3735,3739],{},[3736,3737],"img",{"alt":28,"src":3738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[328,3741,3742,3745,3748],{},[331,3743,3744],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[331,3746,3747],{},"两个小数不可以做取模运算",[331,3749,3750],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[631,3752,3754],{"id":3753},"_152赋值运算符","1.5.2赋值运算符",[19,3756,3757],{},[3736,3758],{"alt":28,"src":3759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[631,3761,3763],{"id":3762},"_153比较运算符","1.5.3比较运算符",[19,3765,3766],{},[3736,3767],{"alt":28,"src":3768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[631,3770,3772],{"id":3771},"_154逻辑运算符","1.5.4逻辑运算符",[19,3774,3775],{},[3736,3776],{"alt":28,"src":3777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3779,3781],{"id":3780},"_16程序流程结构","1.6程序流程结构",[631,3783,3785],{"id":3784},"_161选择结构","1.6.1选择结构",[328,3787,3788],{},[331,3789,3790],{},"if语句\n单行、多行、多条件if语句",[23,3792,3794],{"className":2422,"code":3793,"language":2424,"meta":28,"style":28},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[30,3795,3796,3801,3816,3821,3835,3839,3844,3853,3866,3870,3883,3887,3892,3896,3909,3913,3918,3938,3942,3955,3959,3986,3990,4007,4012,4017,4022,4036,4041],{"__ignoreMap":28},[33,3797,3798],{"class":35,"line":36},[33,3799,3800],{"class":2487},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[33,3802,3803,3806,3809,3811,3814],{"class":35,"line":51},[33,3804,3805],{"class":39},"if",[33,3807,3808],{"class":47},"(score",[33,3810,3367],{"class":39},[33,3812,3813],{"class":72},"600",[33,3815,226],{"class":47},[33,3817,3818],{"class":35,"line":64},[33,3819,3820],{"class":47},"{\n",[33,3822,3823,3826,3828,3831,3833],{"class":35,"line":76},[33,3824,3825],{"class":47},"    cout",[33,3827,3450],{"class":39},[33,3829,3830],{"class":60},"'这是单行if语句'",[33,3832,3450],{"class":39},[33,3834,3472],{"class":47},[33,3836,3837],{"class":35,"line":87},[33,3838,1010],{"class":47},[33,3840,3841],{"class":35,"line":96},[33,3842,3843],{"class":2487},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[33,3845,3846,3848,3850],{"class":35,"line":103},[33,3847,3700],{"class":47},[33,3849,3703],{"class":39},[33,3851,3852],{"class":47}," score\n",[33,3854,3855,3857,3859,3862,3864],{"class":35,"line":108},[33,3856,3805],{"class":39},[33,3858,3808],{"class":47},[33,3860,3861],{"class":39},"\u003C=",[33,3863,3813],{"class":72},[33,3865,226],{"class":47},[33,3867,3868],{"class":35,"line":119},[33,3869,3820],{"class":47},[33,3871,3872,3874,3876,3879,3881],{"class":35,"line":128},[33,3873,3825],{"class":47},[33,3875,3703],{"class":39},[33,3877,3878],{"class":60},"\"小于等于600\"",[33,3880,3450],{"class":39},[33,3882,3472],{"class":47},[33,3884,3885],{"class":35,"line":1753},[33,3886,1010],{"class":47},[33,3888,3889],{"class":35,"line":1763},[33,3890,3891],{"class":39},"else\n",[33,3893,3894],{"class":35,"line":1775},[33,3895,3820],{"class":47},[33,3897,3898,3900,3902,3905,3907],{"class":35,"line":1780},[33,3899,3825],{"class":47},[33,3901,3703],{"class":39},[33,3903,3904],{"class":60},"\"大于600\"",[33,3906,3703],{"class":39},[33,3908,3472],{"class":47},[33,3910,3911],{"class":35,"line":1785},[33,3912,1010],{"class":47},[33,3914,3915],{"class":35,"line":1940},[33,3916,3917],{"class":2487},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[33,3919,3920,3922,3925,3927,3929,3932,3934,3936],{"class":35,"line":2183},[33,3921,3805],{"class":39},[33,3923,3924],{"class":47}," (",[33,3926,2617],{"class":72},[33,3928,2226],{"class":39},[33,3930,3931],{"class":47},"num",[33,3933,2226],{"class":39},[33,3935,2734],{"class":72},[33,3937,226],{"class":47},[33,3939,3940],{"class":35,"line":2208},[33,3941,3820],{"class":47},[33,3943,3944,3946,3948,3951,3953],{"class":35,"line":2234},[33,3945,3825],{"class":47},[33,3947,3450],{"class":39},[33,3949,3950],{"class":60},"\"小于100\"",[33,3952,3450],{"class":39},[33,3954,3472],{"class":47},[33,3956,3957],{"class":35,"line":2239},[33,3958,1010],{"class":47},[33,3960,3961,3964,3967,3970,3972,3974,3977,3979,3981,3984],{"class":35,"line":2247},[33,3962,3963],{"class":39},"else",[33,3965,3966],{"class":39}," if",[33,3968,3969],{"class":47}," (nmu",[33,3971,2175],{"class":39},[33,3973,2734],{"class":72},[33,3975,3976],{"class":39},"&&",[33,3978,3931],{"class":47},[33,3980,2226],{"class":39},[33,3982,3983],{"class":72},"200",[33,3985,226],{"class":47},[33,3987,3988],{"class":35,"line":2255},[33,3989,3820],{"class":47},[33,3991,3993,3995,3997,4000,4002,4004],{"class":35,"line":3992},23,[33,3994,3825],{"class":47},[33,3996,3450],{"class":39},[33,3998,3999],{"class":60},"\"不小于100且小于200\"",[33,4001,3450],{"class":39},[33,4003,3515],{"class":47},[33,4005,4006],{"class":2487}," \u002F\u002F可以无限else if,python中是elif：\n",[33,4008,4010],{"class":35,"line":4009},24,[33,4011,1010],{"class":47},[33,4013,4015],{"class":35,"line":4014},25,[33,4016,3891],{"class":39},[33,4018,4020],{"class":35,"line":4019},26,[33,4021,3820],{"class":47},[33,4023,4025,4027,4029,4032,4034],{"class":35,"line":4024},27,[33,4026,3825],{"class":47},[33,4028,3450],{"class":39},[33,4030,4031],{"class":60},"\"不小于200\"",[33,4033,3450],{"class":39},[33,4035,3472],{"class":47},[33,4037,4039],{"class":35,"line":4038},28,[33,4040,1010],{"class":47},[33,4042,4044],{"class":35,"line":4043},29,[33,4045,4046],{"class":2487},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[328,4048,4049],{"start":51},[331,4050,4051],{},"三目运算符",[23,4053,4055],{"className":2422,"code":4054,"language":2424,"meta":28,"style":28},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[30,4056,4057,4062,4067,4093,4115,4132,4137,4160,4175],{"__ignoreMap":28},[33,4058,4059],{"class":35,"line":36},[33,4060,4061],{"class":2487},"\u002F\u002F创建三个变量a,b,c\n",[33,4063,4064],{"class":35,"line":51},[33,4065,4066],{"class":2487},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[33,4068,4069,4071,4073,4075,4077,4080,4082,4084,4087,4089,4091],{"class":35,"line":64},[33,4070,2436],{"class":39},[33,4072,3672],{"class":47},[33,4074,57],{"class":39},[33,4076,1284],{"class":72},[33,4078,4079],{"class":47},",b",[33,4081,57],{"class":39},[33,4083,1279],{"class":72},[33,4085,4086],{"class":47},",c",[33,4088,57],{"class":39},[33,4090,2617],{"class":72},[33,4092,3567],{"class":47},[33,4094,4095,4097,4099,4102,4104,4106,4108,4110,4112],{"class":35,"line":76},[33,4096,2712],{"class":47},[33,4098,57],{"class":39},[33,4100,4101],{"class":47},"(a",[33,4103,3367],{"class":39},[33,4105,2687],{"class":47},[33,4107,3393],{"class":39},[33,4109,2663],{"class":47},[33,4111,387],{"class":39},[33,4113,4114],{"class":47},"b)\n",[33,4116,4117,4119,4121,4124,4126,4128,4130],{"class":35,"line":87},[33,4118,3643],{"class":47},[33,4120,3450],{"class":39},[33,4122,4123],{"class":60},"\"c=\"",[33,4125,3450],{"class":39},[33,4127,2712],{"class":47},[33,4129,3450],{"class":39},[33,4131,3472],{"class":47},[33,4133,4134],{"class":35,"line":96},[33,4135,4136],{"class":2487},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[33,4138,4139,4141,4143,4145,4147,4149,4151,4154,4156,4158],{"class":35,"line":103},[33,4140,4101],{"class":47},[33,4142,3367],{"class":39},[33,4144,2687],{"class":47},[33,4146,3393],{"class":39},[33,4148,2663],{"class":47},[33,4150,387],{"class":39},[33,4152,4153],{"class":47},"b)",[33,4155,57],{"class":39},[33,4157,2734],{"class":72},[33,4159,3567],{"class":47},[33,4161,4162,4164,4166,4168,4170,4172],{"class":35,"line":108},[33,4163,3643],{"class":47},[33,4165,3450],{"class":39},[33,4167,2663],{"class":47},[33,4169,3450],{"class":39},[33,4171,3515],{"class":47},[33,4173,4174],{"class":2487}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[33,4176,4177,4179,4181,4183,4185,4187],{"class":35,"line":119},[33,4178,3643],{"class":47},[33,4180,3450],{"class":39},[33,4182,2687],{"class":47},[33,4184,3450],{"class":39},[33,4186,3515],{"class":47},[33,4188,4189],{"class":2487}," \u002F\u002F10   a>b,b还是原值\n",[328,4191,4192],{"start":64},[331,4193,4194],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[23,4196,4198],{"className":2422,"code":4197,"language":2424,"meta":28,"style":28},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[30,4199,4200,4205,4213,4226,4236,4240,4254,4267,4277,4285,4290,4315,4336,4358,4379,4401,4422,4442,4447],{"__ignoreMap":28},[33,4201,4202],{"class":35,"line":36},[33,4203,4204],{"class":2487},"\u002F\u002F案例-电影打分\n",[33,4206,4207,4210],{"class":35,"line":51},[33,4208,4209],{"class":39},"#include",[33,4211,4212],{"class":60},"\u003Ciostream>\n",[33,4214,4215,4218,4221,4224],{"class":35,"line":64},[33,4216,4217],{"class":39},"using",[33,4219,4220],{"class":39}," namespace",[33,4222,4223],{"class":43}," std",[33,4225,3567],{"class":47},[33,4227,4228,4230,4233],{"class":35,"line":76},[33,4229,2436],{"class":39},[33,4231,4232],{"class":43}," main",[33,4234,4235],{"class":47},"()\n",[33,4237,4238],{"class":35,"line":87},[33,4239,3820],{"class":47},[33,4241,4242,4245,4248,4250,4252],{"class":35,"line":96},[33,4243,4244],{"class":39},"    int",[33,4246,4247],{"class":47}," score",[33,4249,57],{"class":39},[33,4251,2617],{"class":72},[33,4253,3567],{"class":47},[33,4255,4256,4258,4260,4263,4265],{"class":35,"line":103},[33,4257,3825],{"class":47},[33,4259,3450],{"class":39},[33,4261,4262],{"class":60},"\"电影打分：\"",[33,4264,3450],{"class":39},[33,4266,3472],{"class":47},[33,4268,4269,4272,4274],{"class":35,"line":108},[33,4270,4271],{"class":47},"    cin",[33,4273,3703],{"class":39},[33,4275,4276],{"class":47},"score;\n",[33,4278,4279,4282],{"class":35,"line":119},[33,4280,4281],{"class":39},"    switch",[33,4283,4284],{"class":47},"(score)\n",[33,4286,4287],{"class":35,"line":128},[33,4288,4289],{"class":47},"    {\n",[33,4291,4292,4295,4298,4301,4303,4306,4308,4310,4313],{"class":35,"line":1753},[33,4293,4294],{"class":39},"        case",[33,4296,4297],{"class":72}," 10",[33,4299,4300],{"class":47},":cout",[33,4302,3450],{"class":39},[33,4304,4305],{"class":60},"\"经典\"",[33,4307,3450],{"class":39},[33,4309,3515],{"class":47},[33,4311,4312],{"class":39},"break",[33,4314,3567],{"class":47},[33,4316,4317,4319,4322,4324,4326,4328,4330,4332,4334],{"class":35,"line":1763},[33,4318,4294],{"class":39},[33,4320,4321],{"class":72}," 9",[33,4323,4300],{"class":47},[33,4325,3450],{"class":39},[33,4327,4305],{"class":60},[33,4329,3450],{"class":39},[33,4331,3515],{"class":47},[33,4333,4312],{"class":39},[33,4335,3567],{"class":47},[33,4337,4338,4340,4343,4345,4347,4350,4352,4354,4356],{"class":35,"line":1775},[33,4339,4294],{"class":39},[33,4341,4342],{"class":72}," 8",[33,4344,4300],{"class":47},[33,4346,3450],{"class":39},[33,4348,4349],{"class":60},"\"非常好\"",[33,4351,3450],{"class":39},[33,4353,3515],{"class":47},[33,4355,4312],{"class":39},[33,4357,3567],{"class":47},[33,4359,4360,4362,4365,4367,4369,4371,4373,4375,4377],{"class":35,"line":1780},[33,4361,4294],{"class":39},[33,4363,4364],{"class":72}," 7",[33,4366,4300],{"class":47},[33,4368,3450],{"class":39},[33,4370,4349],{"class":60},[33,4372,3450],{"class":39},[33,4374,3515],{"class":47},[33,4376,4312],{"class":39},[33,4378,3567],{"class":47},[33,4380,4381,4383,4386,4388,4390,4393,4395,4397,4399],{"class":35,"line":1785},[33,4382,4294],{"class":39},[33,4384,4385],{"class":72}," 6",[33,4387,4300],{"class":47},[33,4389,3450],{"class":39},[33,4391,4392],{"class":60},"\"一般\"",[33,4394,3450],{"class":39},[33,4396,3515],{"class":47},[33,4398,4312],{"class":39},[33,4400,3567],{"class":47},[33,4402,4403,4405,4408,4410,4412,4414,4416,4418,4420],{"class":35,"line":1940},[33,4404,4294],{"class":39},[33,4406,4407],{"class":72}," 5",[33,4409,4300],{"class":47},[33,4411,3450],{"class":39},[33,4413,4392],{"class":60},[33,4415,3450],{"class":39},[33,4417,3515],{"class":47},[33,4419,4312],{"class":39},[33,4421,3567],{"class":47},[33,4423,4424,4427,4429,4431,4434,4436,4438,4440],{"class":35,"line":2183},[33,4425,4426],{"class":39},"        default",[33,4428,4300],{"class":47},[33,4430,3450],{"class":39},[33,4432,4433],{"class":60},"\"烂片\"",[33,4435,3450],{"class":39},[33,4437,3515],{"class":47},[33,4439,4312],{"class":39},[33,4441,3567],{"class":47},[33,4443,4444],{"class":35,"line":2208},[33,4445,4446],{"class":47},"    }\n",[33,4448,4449],{"class":35,"line":2234},[33,4450,1010],{"class":47},[19,4452,4453],{},"if和switch区别：",[3413,4455,4456,4459],{},[331,4457,4458],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[331,4460,4461],{},"switch优点：结构清晰，执行效率高",[631,4463,4465],{"id":4464},"_162循环结构","1.6.2循环结构",[328,4467,4468],{},[331,4469,4470],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[23,4472,4474],{"className":2422,"code":4473,"language":2424,"meta":28,"style":28},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[30,4475,4476,4481,4489,4493,4506,4520,4524,4544,4554,4558,4570],{"__ignoreMap":28},[33,4477,4478],{"class":35,"line":36},[33,4479,4480],{"class":2487},"\u002F\u002F打印0-9数字\n",[33,4482,4483,4485,4487],{"class":35,"line":51},[33,4484,2436],{"class":39},[33,4486,4232],{"class":43},[33,4488,4235],{"class":47},[33,4490,4491],{"class":35,"line":64},[33,4492,3820],{"class":47},[33,4494,4495,4497,4500,4502,4504],{"class":35,"line":76},[33,4496,4244],{"class":39},[33,4498,4499],{"class":47}," num",[33,4501,57],{"class":39},[33,4503,2617],{"class":72},[33,4505,3567],{"class":47},[33,4507,4508,4511,4514,4516,4518],{"class":35,"line":87},[33,4509,4510],{"class":39},"    while",[33,4512,4513],{"class":47},"(num",[33,4515,2226],{"class":39},[33,4517,1279],{"class":72},[33,4519,226],{"class":47},[33,4521,4522],{"class":35,"line":96},[33,4523,4289],{"class":47},[33,4525,4526,4529,4532,4534,4536,4538,4541],{"class":35,"line":103},[33,4527,4528],{"class":43},"       std",[33,4530,4531],{"class":47},"::cout",[33,4533,3450],{"class":39},[33,4535,3931],{"class":47},[33,4537,3450],{"class":39},[33,4539,4540],{"class":43},"std",[33,4542,4543],{"class":47},"::endl;\n",[33,4545,4546,4549,4552],{"class":35,"line":108},[33,4547,4548],{"class":47},"        num",[33,4550,4551],{"class":39},"++",[33,4553,3567],{"class":47},[33,4555,4556],{"class":35,"line":119},[33,4557,4446],{"class":47},[33,4559,4560,4563,4565,4568],{"class":35,"line":128},[33,4561,4562],{"class":43},"    system",[33,4564,133],{"class":47},[33,4566,4567],{"class":60},"\"pause\"",[33,4569,226],{"class":47},[33,4571,4572],{"class":35,"line":1753},[33,4573,1010],{"class":47},[19,4575,4576],{},"注意：写好循环条件，避免死循环情况",[23,4578,4580],{"className":2422,"code":4579,"language":2424,"meta":28,"style":28},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[30,4581,4582,4587,4594,4601,4611,4619,4623,4628,4655,4659,4664,4672,4699,4704,4709,4722,4732,4736,4746,4751,4763,4768,4782,4787,4802,4806,4819,4823,4828,4832,4846,4854,4859,4865,4871,4876],{"__ignoreMap":28},[33,4583,4584],{"class":35,"line":36},[33,4585,4586],{"class":2487},"\u002F\u002F循环结构-猜数字\n",[33,4588,4589,4591],{"class":35,"line":51},[33,4590,4209],{"class":39},[33,4592,4593],{"class":60}," \u003Ciostream>\n",[33,4595,4596,4598],{"class":35,"line":64},[33,4597,4209],{"class":39},[33,4599,4600],{"class":60}," \u003Cctime>\n",[33,4602,4603,4605,4607,4609],{"class":35,"line":76},[33,4604,4217],{"class":39},[33,4606,4220],{"class":39},[33,4608,4223],{"class":43},[33,4610,3567],{"class":47},[33,4612,4613,4615,4617],{"class":35,"line":87},[33,4614,2436],{"class":39},[33,4616,4232],{"class":43},[33,4618,4235],{"class":47},[33,4620,4621],{"class":35,"line":96},[33,4622,3820],{"class":47},[33,4624,4625],{"class":35,"line":103},[33,4626,4627],{"class":2487},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[33,4629,4630,4633,4636,4639,4642,4644,4647,4649,4652],{"class":35,"line":108},[33,4631,4632],{"class":43},"    srand",[33,4634,4635],{"class":47},"((",[33,4637,4638],{"class":39},"unsigned",[33,4640,4641],{"class":39}," int",[33,4643,2849],{"class":47},[33,4645,4646],{"class":43},"time",[33,4648,133],{"class":47},[33,4650,4651],{"class":72},"NULL",[33,4653,4654],{"class":47},"));\n",[33,4656,4657],{"class":35,"line":119},[33,4658,100],{"emptyLinePlaceholder":99},[33,4660,4661],{"class":35,"line":128},[33,4662,4663],{"class":2487},"    \u002F\u002F1.系统生成随机数\n",[33,4665,4666,4669],{"class":35,"line":1753},[33,4667,4668],{"class":2487},"    \u002F\u002Frand()%100",[33,4670,4671],{"class":2487}," \u002F\u002F生成0-99的随机数\n",[33,4673,4674,4676,4678,4680,4683,4686,4688,4690,4692,4694,4696],{"class":35,"line":1763},[33,4675,4244],{"class":39},[33,4677,4499],{"class":47},[33,4679,57],{"class":39},[33,4681,4682],{"class":43},"rand",[33,4684,4685],{"class":47},"()",[33,4687,1429],{"class":39},[33,4689,2734],{"class":72},[33,4691,880],{"class":39},[33,4693,720],{"class":72},[33,4695,2484],{"class":47},[33,4697,4698],{"class":2487}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[33,4700,4701],{"class":35,"line":1775},[33,4702,4703],{"class":2487},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[33,4705,4706],{"class":35,"line":1780},[33,4707,4708],{"class":2487},"    \u002F\u002F2.玩家猜测\n",[33,4710,4711,4713,4716,4718,4720],{"class":35,"line":1785},[33,4712,4244],{"class":39},[33,4714,4715],{"class":47}," val",[33,4717,57],{"class":39},[33,4719,2617],{"class":72},[33,4721,3567],{"class":47},[33,4723,4724,4726,4728,4730],{"class":35,"line":1940},[33,4725,4510],{"class":39},[33,4727,3924],{"class":47},[33,4729,720],{"class":72},[33,4731,226],{"class":47},[33,4733,4734],{"class":35,"line":2183},[33,4735,4289],{"class":47},[33,4737,4738,4741,4743],{"class":35,"line":2208},[33,4739,4740],{"class":47},"        cin",[33,4742,3703],{"class":39},[33,4744,4745],{"class":47},"val;\n",[33,4747,4748],{"class":35,"line":2234},[33,4749,4750],{"class":2487},"        \u002F\u002F3.判断玩家猜测\n",[33,4752,4753,4755,4758,4760],{"class":35,"line":2239},[33,4754,2130],{"class":39},[33,4756,4757],{"class":47},"(val",[33,4759,2226],{"class":39},[33,4761,4762],{"class":47},"num) \n",[33,4764,4765],{"class":35,"line":2247},[33,4766,4767],{"class":47},"        {\n",[33,4769,4770,4773,4775,4778,4780],{"class":35,"line":2255},[33,4771,4772],{"class":47},"            cout",[33,4774,3450],{"class":39},[33,4776,4777],{"class":60},"\"猜小了！\"",[33,4779,3450],{"class":39},[33,4781,3472],{"class":47},[33,4783,4784],{"class":35,"line":3992},[33,4785,4786],{"class":47},"        }\n",[33,4788,4789,4792,4794,4797,4799],{"class":35,"line":4009},[33,4790,4791],{"class":39},"        else",[33,4793,3966],{"class":39},[33,4795,4796],{"class":47}," (val",[33,4798,3367],{"class":39},[33,4800,4801],{"class":47},"num)\n",[33,4803,4804],{"class":35,"line":4014},[33,4805,4767],{"class":47},[33,4807,4808,4810,4812,4815,4817],{"class":35,"line":4019},[33,4809,4772],{"class":47},[33,4811,3450],{"class":39},[33,4813,4814],{"class":60},"\"猜大了！\"",[33,4816,3450],{"class":39},[33,4818,3472],{"class":47},[33,4820,4821],{"class":35,"line":4024},[33,4822,4786],{"class":47},[33,4824,4825],{"class":35,"line":4038},[33,4826,4827],{"class":39},"        else\n",[33,4829,4830],{"class":35,"line":4043},[33,4831,4767],{"class":47},[33,4833,4835,4837,4839,4842,4844],{"class":35,"line":4834},30,[33,4836,4772],{"class":47},[33,4838,3450],{"class":39},[33,4840,4841],{"class":60},"\"猜对了！\"",[33,4843,3450],{"class":39},[33,4845,3472],{"class":47},[33,4847,4849,4852],{"class":35,"line":4848},31,[33,4850,4851],{"class":39},"            break",[33,4853,3567],{"class":47},[33,4855,4857],{"class":35,"line":4856},32,[33,4858,4786],{"class":47},[33,4860,4862],{"class":35,"line":4861},33,[33,4863,4864],{"class":2487},"        \u002F\u002F猜对 退出游戏\n",[33,4866,4868],{"class":35,"line":4867},34,[33,4869,4870],{"class":2487},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[33,4872,4874],{"class":35,"line":4873},35,[33,4875,4446],{"class":47},[33,4877,4879],{"class":35,"line":4878},36,[33,4880,1010],{"class":47},[328,4882,4883],{"start":51},[331,4884,4885,4886,4889],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2575,4887,4888],{},"do...while会先执行一次循环语句","，在判断循环语句",[23,4891,4893],{"className":2422,"code":4892,"language":2424,"meta":28,"style":28},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[30,4894,4895,4900,4908,4912,4924,4932,4936,4953,4960,4964,4977,4987],{"__ignoreMap":28},[33,4896,4897],{"class":35,"line":36},[33,4898,4899],{"class":2487},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[33,4901,4902,4904,4906],{"class":35,"line":51},[33,4903,2436],{"class":39},[33,4905,4232],{"class":43},[33,4907,4235],{"class":47},[33,4909,4910],{"class":35,"line":64},[33,4911,3820],{"class":47},[33,4913,4914,4916,4918,4920,4922],{"class":35,"line":76},[33,4915,4244],{"class":39},[33,4917,4499],{"class":47},[33,4919,57],{"class":39},[33,4921,2617],{"class":72},[33,4923,3567],{"class":47},[33,4925,4926,4929],{"class":35,"line":87},[33,4927,4928],{"class":39},"    do",[33,4930,4931],{"class":47}," \n",[33,4933,4934],{"class":35,"line":96},[33,4935,4289],{"class":47},[33,4937,4938,4941,4943,4945,4947,4949,4951],{"class":35,"line":103},[33,4939,4940],{"class":43},"        std",[33,4942,4531],{"class":47},[33,4944,3450],{"class":39},[33,4946,3931],{"class":47},[33,4948,3450],{"class":39},[33,4950,4540],{"class":43},[33,4952,4543],{"class":47},[33,4954,4955,4957],{"class":35,"line":108},[33,4956,4548],{"class":47},[33,4958,4959],{"class":39},"++\n",[33,4961,4962],{"class":35,"line":119},[33,4963,4446],{"class":47},[33,4965,4966,4968,4970,4972,4974],{"class":35,"line":128},[33,4967,4510],{"class":39},[33,4969,4513],{"class":47},[33,4971,2226],{"class":39},[33,4973,1279],{"class":72},[33,4975,4976],{"class":47},");\n",[33,4978,4979,4981,4983,4985],{"class":35,"line":1753},[33,4980,4562],{"class":43},[33,4982,133],{"class":47},[33,4984,4567],{"class":60},[33,4986,4976],{"class":47},[33,4988,4989],{"class":35,"line":1763},[33,4990,1010],{"class":47},[19,4992,4993],{},"案例-水仙花数",[19,4995,4996],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4998,4999],{},"例如：1^3+5^3+3^3=153",[19,5001,5002],{},"请用do...while语句，求出所有3位数的水仙花数",[23,5004,5006],{"className":2422,"code":5005,"language":2424,"meta":28,"style":28},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[30,5007,5008,5014,5024,5032,5036,5041,5053,5059,5063,5068,5084,5100,5116,5131,5150,5165,5213,5217,5229,5233,5241,5245,5259],{"__ignoreMap":28},[33,5009,5010,5012],{"class":35,"line":36},[33,5011,4209],{"class":39},[33,5013,4593],{"class":60},[33,5015,5016,5018,5020,5022],{"class":35,"line":51},[33,5017,4217],{"class":39},[33,5019,4220],{"class":39},[33,5021,4223],{"class":43},[33,5023,3567],{"class":47},[33,5025,5026,5028,5030],{"class":35,"line":64},[33,5027,2436],{"class":39},[33,5029,4232],{"class":43},[33,5031,4235],{"class":47},[33,5033,5034],{"class":35,"line":76},[33,5035,3820],{"class":47},[33,5037,5038],{"class":35,"line":87},[33,5039,5040],{"class":2487},"    \u002F\u002F1.先打印所有三位数字\n",[33,5042,5043,5045,5047,5049,5051],{"class":35,"line":96},[33,5044,4244],{"class":39},[33,5046,4499],{"class":47},[33,5048,57],{"class":39},[33,5050,2734],{"class":72},[33,5052,3567],{"class":47},[33,5054,5055,5057],{"class":35,"line":103},[33,5056,4928],{"class":39},[33,5058,4931],{"class":47},[33,5060,5061],{"class":35,"line":108},[33,5062,4289],{"class":47},[33,5064,5065],{"class":35,"line":119},[33,5066,5067],{"class":2487},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[33,5069,5070,5073,5075,5077,5079,5081],{"class":35,"line":128},[33,5071,5072],{"class":39},"        int",[33,5074,3672],{"class":47},[33,5076,57],{"class":39},[33,5078,2617],{"class":72},[33,5080,2484],{"class":47},[33,5082,5083],{"class":2487}," \u002F\u002F个位\n",[33,5085,5086,5088,5091,5093,5095,5097],{"class":35,"line":1753},[33,5087,5072],{"class":39},[33,5089,5090],{"class":47}," b",[33,5092,57],{"class":39},[33,5094,2617],{"class":72},[33,5096,2484],{"class":47},[33,5098,5099],{"class":2487}," \u002F\u002F十位\n",[33,5101,5102,5104,5107,5109,5111,5113],{"class":35,"line":1763},[33,5103,5072],{"class":39},[33,5105,5106],{"class":47}," c",[33,5108,57],{"class":39},[33,5110,2617],{"class":72},[33,5112,2484],{"class":47},[33,5114,5115],{"class":2487}," \u002F\u002F百位\n",[33,5117,5118,5121,5123,5125,5127,5129],{"class":35,"line":1775},[33,5119,5120],{"class":47},"        a",[33,5122,57],{"class":39},[33,5124,3931],{"class":47},[33,5126,1429],{"class":39},[33,5128,1279],{"class":72},[33,5130,3567],{"class":47},[33,5132,5133,5136,5138,5140,5142,5144,5146,5148],{"class":35,"line":1780},[33,5134,5135],{"class":47},"        b",[33,5137,57],{"class":39},[33,5139,3931],{"class":47},[33,5141,3001],{"class":39},[33,5143,1279],{"class":72},[33,5145,1429],{"class":39},[33,5147,1279],{"class":72},[33,5149,3567],{"class":47},[33,5151,5152,5155,5157,5159,5161,5163],{"class":35,"line":1785},[33,5153,5154],{"class":47},"        c",[33,5156,57],{"class":39},[33,5158,3931],{"class":47},[33,5160,3001],{"class":39},[33,5162,2734],{"class":72},[33,5164,3567],{"class":47},[33,5166,5167,5169,5171,5173,5175,5177,5179,5181,5183,5185,5187,5189,5191,5193,5195,5197,5199,5201,5204,5207,5210],{"class":35,"line":1940},[33,5168,2130],{"class":39},[33,5170,4101],{"class":47},[33,5172,657],{"class":39},[33,5174,2663],{"class":47},[33,5176,657],{"class":39},[33,5178,2663],{"class":47},[33,5180,880],{"class":39},[33,5182,2687],{"class":47},[33,5184,657],{"class":39},[33,5186,2687],{"class":47},[33,5188,657],{"class":39},[33,5190,2687],{"class":47},[33,5192,880],{"class":39},[33,5194,2712],{"class":47},[33,5196,657],{"class":39},[33,5198,2712],{"class":47},[33,5200,657],{"class":39},[33,5202,5203],{"class":47},"c ",[33,5205,5206],{"class":39},"==",[33,5208,5209],{"class":47}," num)",[33,5211,5212],{"class":2487}," \u002F\u002F如果是水仙花数，才打印\n",[33,5214,5215],{"class":35,"line":2183},[33,5216,4767],{"class":47},[33,5218,5219,5221,5223,5225,5227],{"class":35,"line":2208},[33,5220,4772],{"class":47},[33,5222,3450],{"class":39},[33,5224,3931],{"class":47},[33,5226,3450],{"class":39},[33,5228,3472],{"class":47},[33,5230,5231],{"class":35,"line":2234},[33,5232,4786],{"class":47},[33,5234,5235,5237,5239],{"class":35,"line":2239},[33,5236,4548],{"class":47},[33,5238,4551],{"class":39},[33,5240,3567],{"class":47},[33,5242,5243],{"class":35,"line":2247},[33,5244,4446],{"class":47},[33,5246,5247,5249,5252,5254,5257],{"class":35,"line":2255},[33,5248,4510],{"class":39},[33,5250,5251],{"class":47}," (num ",[33,5253,2226],{"class":39},[33,5255,5256],{"class":72}," 1000",[33,5258,4976],{"class":47},[33,5260,5261],{"class":35,"line":3992},[33,5262,1010],{"class":47},[328,5264,5265],{"start":64},[331,5266,5267],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[23,5269,5271],{"className":2422,"code":5270,"language":2424,"meta":28,"style":28},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[30,5272,5273,5278,5307,5311,5323,5327,5332,5343,5350,5354,5367,5371,5378,5382,5394,5403],{"__ignoreMap":28},[33,5274,5275],{"class":35,"line":36},[33,5276,5277],{"class":2487},"\u002F\u002F从数字0-9打印\n",[33,5279,5280,5283,5285,5287,5290,5292,5294,5297,5299,5301,5303,5305],{"class":35,"line":51},[33,5281,5282],{"class":39},"for",[33,5284,133],{"class":47},[33,5286,2436],{"class":39},[33,5288,5289],{"class":47}," i",[33,5291,57],{"class":39},[33,5293,2617],{"class":72},[33,5295,5296],{"class":47},";i",[33,5298,2226],{"class":39},[33,5300,1279],{"class":72},[33,5302,5296],{"class":47},[33,5304,4551],{"class":39},[33,5306,226],{"class":47},[33,5308,5309],{"class":35,"line":64},[33,5310,3820],{"class":47},[33,5312,5313,5315,5317,5319,5321],{"class":35,"line":76},[33,5314,3825],{"class":47},[33,5316,3450],{"class":39},[33,5318,2861],{"class":47},[33,5320,3450],{"class":39},[33,5322,3472],{"class":47},[33,5324,5325],{"class":35,"line":87},[33,5326,1010],{"class":47},[33,5328,5329],{"class":35,"line":96},[33,5330,5331],{"class":2487},"\u002F\u002F上式可以进行拆分\n",[33,5333,5334,5336,5338,5340],{"class":35,"line":103},[33,5335,2436],{"class":39},[33,5337,5289],{"class":47},[33,5339,57],{"class":39},[33,5341,5342],{"class":72},"0\n",[33,5344,5345,5347],{"class":35,"line":108},[33,5346,5282],{"class":39},[33,5348,5349],{"class":47},"(;;;)\n",[33,5351,5352],{"class":35,"line":119},[33,5353,3820],{"class":47},[33,5355,5356,5358,5361,5363,5365],{"class":35,"line":128},[33,5357,593],{"class":39},[33,5359,5360],{"class":47},"(i",[33,5362,2175],{"class":39},[33,5364,1279],{"class":72},[33,5366,226],{"class":47},[33,5368,5369],{"class":35,"line":1753},[33,5370,4289],{"class":47},[33,5372,5373,5376],{"class":35,"line":1763},[33,5374,5375],{"class":39},"        break",[33,5377,3567],{"class":47},[33,5379,5380],{"class":35,"line":1775},[33,5381,4446],{"class":47},[33,5383,5384,5386,5388,5390,5392],{"class":35,"line":1780},[33,5385,3825],{"class":47},[33,5387,3450],{"class":39},[33,5389,2861],{"class":47},[33,5391,3450],{"class":39},[33,5393,3472],{"class":47},[33,5395,5396,5399,5401],{"class":35,"line":1785},[33,5397,5398],{"class":47},"    i",[33,5400,4551],{"class":39},[33,5402,3567],{"class":47},[33,5404,5405],{"class":35,"line":1940},[33,5406,1010],{"class":47},[19,5408,5409],{},"小练习",[23,5411,5413],{"className":2422,"code":5412,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[30,5414,5415,5421,5431,5439,5443,5448,5453,5480,5484,5489,5494,5535,5539,5552,5556,5560,5564,5576,5580,5584],{"__ignoreMap":28},[33,5416,5417,5419],{"class":35,"line":36},[33,5418,4209],{"class":39},[33,5420,4212],{"class":60},[33,5422,5423,5425,5427,5429],{"class":35,"line":51},[33,5424,4217],{"class":39},[33,5426,4220],{"class":39},[33,5428,4223],{"class":43},[33,5430,3567],{"class":47},[33,5432,5433,5435,5437],{"class":35,"line":64},[33,5434,2436],{"class":39},[33,5436,4232],{"class":43},[33,5438,4235],{"class":47},[33,5440,5441],{"class":35,"line":76},[33,5442,3820],{"class":47},[33,5444,5445],{"class":35,"line":87},[33,5446,5447],{"class":2487},"    \u002F\u002F敲桌子案例\n",[33,5449,5450],{"class":35,"line":96},[33,5451,5452],{"class":2487},"    \u002F\u002F1.先输出1-100的数字\n",[33,5454,5455,5457,5459,5461,5463,5465,5467,5470,5472,5474,5476,5478],{"class":35,"line":103},[33,5456,675],{"class":39},[33,5458,133],{"class":47},[33,5460,2436],{"class":39},[33,5462,5289],{"class":47},[33,5464,57],{"class":39},[33,5466,720],{"class":72},[33,5468,5469],{"class":47},"; i",[33,5471,3861],{"class":39},[33,5473,2734],{"class":72},[33,5475,5469],{"class":47},[33,5477,4551],{"class":39},[33,5479,226],{"class":47},[33,5481,5482],{"class":35,"line":108},[33,5483,4289],{"class":47},[33,5485,5486],{"class":35,"line":119},[33,5487,5488],{"class":2487},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[33,5490,5491],{"class":35,"line":128},[33,5492,5493],{"class":2487},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[33,5495,5496,5498,5500,5502,5504,5506,5508,5511,5513,5515,5517,5519,5521,5523,5525,5527,5529,5531,5533],{"class":35,"line":1753},[33,5497,2130],{"class":39},[33,5499,5360],{"class":47},[33,5501,1429],{"class":39},[33,5503,2790],{"class":72},[33,5505,5206],{"class":39},[33,5507,2617],{"class":72},[33,5509,5510],{"class":39}," ||",[33,5512,5289],{"class":47},[33,5514,1429],{"class":39},[33,5516,1279],{"class":72},[33,5518,5206],{"class":39},[33,5520,2790],{"class":72},[33,5522,5510],{"class":39},[33,5524,5289],{"class":47},[33,5526,3001],{"class":39},[33,5528,1279],{"class":72},[33,5530,5206],{"class":39},[33,5532,2790],{"class":72},[33,5534,226],{"class":47},[33,5536,5537],{"class":35,"line":1763},[33,5538,4767],{"class":47},[33,5540,5541,5543,5545,5548,5550],{"class":35,"line":1775},[33,5542,4772],{"class":47},[33,5544,3450],{"class":39},[33,5546,5547],{"class":60},"\"敲桌子\"",[33,5549,3450],{"class":39},[33,5551,3472],{"class":47},[33,5553,5554],{"class":35,"line":1780},[33,5555,4786],{"class":47},[33,5557,5558],{"class":35,"line":1785},[33,5559,4827],{"class":39},[33,5561,5562],{"class":35,"line":1940},[33,5563,4767],{"class":47},[33,5565,5566,5568,5570,5572,5574],{"class":35,"line":2183},[33,5567,4772],{"class":47},[33,5569,3450],{"class":39},[33,5571,2861],{"class":47},[33,5573,3450],{"class":39},[33,5575,3472],{"class":47},[33,5577,5578],{"class":35,"line":2208},[33,5579,4786],{"class":47},[33,5581,5582],{"class":35,"line":2234},[33,5583,4446],{"class":47},[33,5585,5586],{"class":35,"line":2239},[33,5587,1010],{"class":47},[19,5589,5590],{},"嵌套实现星图",[23,5592,5594],{"className":2422,"code":5593,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[30,5595,5596,5602,5612,5620,5624,5650,5654,5683,5687,5698,5702,5711,5715],{"__ignoreMap":28},[33,5597,5598,5600],{"class":35,"line":36},[33,5599,4209],{"class":39},[33,5601,4212],{"class":60},[33,5603,5604,5606,5608,5610],{"class":35,"line":51},[33,5605,4217],{"class":39},[33,5607,4220],{"class":39},[33,5609,4223],{"class":43},[33,5611,3567],{"class":47},[33,5613,5614,5616,5618],{"class":35,"line":64},[33,5615,2436],{"class":39},[33,5617,4232],{"class":43},[33,5619,4235],{"class":47},[33,5621,5622],{"class":35,"line":76},[33,5623,3820],{"class":47},[33,5625,5626,5628,5630,5632,5634,5636,5638,5640,5642,5644,5646,5648],{"class":35,"line":87},[33,5627,675],{"class":39},[33,5629,3924],{"class":47},[33,5631,2436],{"class":39},[33,5633,5289],{"class":47},[33,5635,57],{"class":39},[33,5637,2617],{"class":72},[33,5639,5296],{"class":47},[33,5641,2226],{"class":39},[33,5643,1279],{"class":72},[33,5645,5296],{"class":47},[33,5647,4551],{"class":39},[33,5649,226],{"class":47},[33,5651,5652],{"class":35,"line":96},[33,5653,4289],{"class":47},[33,5655,5656,5659,5661,5663,5666,5668,5670,5673,5675,5677,5679,5681],{"class":35,"line":103},[33,5657,5658],{"class":39},"        for",[33,5660,3924],{"class":47},[33,5662,2436],{"class":39},[33,5664,5665],{"class":47}," j",[33,5667,57],{"class":39},[33,5669,2617],{"class":72},[33,5671,5672],{"class":47},";j",[33,5674,2226],{"class":39},[33,5676,1279],{"class":72},[33,5678,5672],{"class":47},[33,5680,4551],{"class":39},[33,5682,226],{"class":47},[33,5684,5685],{"class":35,"line":108},[33,5686,4767],{"class":47},[33,5688,5689,5691,5693,5696],{"class":35,"line":119},[33,5690,4772],{"class":47},[33,5692,3450],{"class":39},[33,5694,5695],{"class":60},"\"*\"",[33,5697,3567],{"class":47},[33,5699,5700],{"class":35,"line":128},[33,5701,4786],{"class":47},[33,5703,5704,5707,5709],{"class":35,"line":1753},[33,5705,5706],{"class":47},"        cout",[33,5708,3450],{"class":39},[33,5710,3472],{"class":47},[33,5712,5713],{"class":35,"line":1763},[33,5714,4446],{"class":47},[33,5716,5717],{"class":35,"line":1775},[33,5718,1010],{"class":47},[19,5720,5721],{},"乘法口诀表",[23,5723,5725],{"className":2422,"code":5724,"language":2424,"meta":28,"style":28},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[30,5726,5727,5733,5743,5751,5755,5781,5785,5810,5814,5854,5858,5866,5870],{"__ignoreMap":28},[33,5728,5729,5731],{"class":35,"line":36},[33,5730,4209],{"class":39},[33,5732,4593],{"class":60},[33,5734,5735,5737,5739,5741],{"class":35,"line":51},[33,5736,4217],{"class":39},[33,5738,4220],{"class":39},[33,5740,4223],{"class":43},[33,5742,3567],{"class":47},[33,5744,5745,5747,5749],{"class":35,"line":64},[33,5746,2436],{"class":39},[33,5748,4232],{"class":43},[33,5750,4235],{"class":47},[33,5752,5753],{"class":35,"line":76},[33,5754,3820],{"class":47},[33,5756,5757,5759,5761,5763,5765,5767,5769,5771,5773,5775,5777,5779],{"class":35,"line":87},[33,5758,675],{"class":39},[33,5760,133],{"class":47},[33,5762,2436],{"class":39},[33,5764,5289],{"class":47},[33,5766,57],{"class":39},[33,5768,720],{"class":72},[33,5770,5296],{"class":47},[33,5772,2226],{"class":39},[33,5774,1279],{"class":72},[33,5776,5296],{"class":47},[33,5778,4551],{"class":39},[33,5780,226],{"class":47},[33,5782,5783],{"class":35,"line":96},[33,5784,4289],{"class":47},[33,5786,5787,5789,5791,5793,5795,5797,5799,5801,5803,5806,5808],{"class":35,"line":103},[33,5788,5658],{"class":39},[33,5790,133],{"class":47},[33,5792,2436],{"class":39},[33,5794,5665],{"class":47},[33,5796,57],{"class":39},[33,5798,720],{"class":72},[33,5800,5672],{"class":47},[33,5802,3861],{"class":39},[33,5804,5805],{"class":47},"i;j",[33,5807,4551],{"class":39},[33,5809,226],{"class":47},[33,5811,5812],{"class":35,"line":108},[33,5813,4767],{"class":47},[33,5815,5816,5818,5820,5822,5824,5826,5828,5830,5832,5835,5837,5839,5841,5843,5845,5848,5850,5852],{"class":35,"line":119},[33,5817,4772],{"class":47},[33,5819,3450],{"class":39},[33,5821,2885],{"class":47},[33,5823,3450],{"class":39},[33,5825,5695],{"class":60},[33,5827,3450],{"class":39},[33,5829,2861],{"class":47},[33,5831,3450],{"class":39},[33,5833,5834],{"class":60},"\"=\"",[33,5836,3450],{"class":39},[33,5838,2861],{"class":47},[33,5840,657],{"class":39},[33,5842,2885],{"class":47},[33,5844,3450],{"class":39},[33,5846,5847],{"class":60},"'",[33,5849,3507],{"class":72},[33,5851,5847],{"class":60},[33,5853,3567],{"class":47},[33,5855,5856],{"class":35,"line":128},[33,5857,4786],{"class":47},[33,5859,5860,5862,5864],{"class":35,"line":1753},[33,5861,5706],{"class":47},[33,5863,3450],{"class":39},[33,5865,3472],{"class":47},[33,5867,5868],{"class":35,"line":1763},[33,5869,4446],{"class":47},[33,5871,5872],{"class":35,"line":1775},[33,5873,1010],{"class":47},[631,5875,5877],{"id":5876},"_163跳出语句","1.6.3跳出语句",[328,5879,5880],{},[331,5881,5882],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5884,5885],{},"break使用时机：",[3413,5887,5888,5891,5894],{},[331,5889,5890],{},"出现在switch条件语句中，作用是终止case并跳出switch",[331,5892,5893],{},"出现在循环结构中，作用是跳出当前的循环结构",[331,5895,5896],{},"出现在嵌套循环中，跳出最近的内层循环语句",[328,5898,5899,5902],{"start":51},[331,5900,5901],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[331,5903,5904],{},"goto语句\n语法：goto 标记;",[19,5906,5907],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[23,5909,5911],{"className":2422,"code":5910,"language":2424,"meta":28,"style":28},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[30,5912,5913,5921,5925,5938,5948,5961,5974,5987,5994,6010],{"__ignoreMap":28},[33,5914,5915,5917,5919],{"class":35,"line":36},[33,5916,2436],{"class":39},[33,5918,4232],{"class":43},[33,5920,4235],{"class":47},[33,5922,5923],{"class":35,"line":51},[33,5924,3820],{"class":47},[33,5926,5927,5929,5931,5934,5936],{"class":35,"line":64},[33,5928,3825],{"class":47},[33,5930,3450],{"class":39},[33,5932,5933],{"class":60},"\"1\"",[33,5935,3450],{"class":39},[33,5937,3472],{"class":47},[33,5939,5940,5943,5946],{"class":35,"line":76},[33,5941,5942],{"class":39},"    goto",[33,5944,5945],{"class":43}," FLAG",[33,5947,3567],{"class":47},[33,5949,5950,5952,5954,5957,5959],{"class":35,"line":87},[33,5951,3825],{"class":47},[33,5953,3450],{"class":39},[33,5955,5956],{"class":60},"\"2\"",[33,5958,3450],{"class":39},[33,5960,3472],{"class":47},[33,5962,5963,5965,5967,5970,5972],{"class":35,"line":96},[33,5964,3825],{"class":47},[33,5966,3450],{"class":39},[33,5968,5969],{"class":60},"\"3\"",[33,5971,3450],{"class":39},[33,5973,3472],{"class":47},[33,5975,5976,5978,5980,5983,5985],{"class":35,"line":103},[33,5977,3825],{"class":47},[33,5979,3450],{"class":39},[33,5981,5982],{"class":60},"\"4\"",[33,5984,3450],{"class":39},[33,5986,3472],{"class":47},[33,5988,5989,5992],{"class":35,"line":108},[33,5990,5991],{"class":43},"    FLAG",[33,5993,605],{"class":47},[33,5995,5996,5998,6000,6003,6005,6007],{"class":35,"line":119},[33,5997,3825],{"class":47},[33,5999,3450],{"class":39},[33,6001,6002],{"class":60},"\"5\"",[33,6004,3450],{"class":39},[33,6006,3515],{"class":47},[33,6008,6009],{"class":2487},"\u002F\u002F跳过了2,3,4,直接到5\n",[33,6011,6012],{"class":35,"line":128},[33,6013,1010],{"class":47},[14,6015,6017],{"id":6016},"_17数组","1.7数组",[631,6019,6021],{"id":6020},"_171一维数组","1.7.1一维数组",[328,6023,6024],{},[331,6025,6026],{},"一维数组定义方式",[2563,6028,6029,6039],{},[2566,6030,6031],{},[2569,6032,6033,6036],{},[2572,6034,6035],{},"方式",[2572,6037,6038],{},"注意事项",[2610,6040,6041,6055,6065],{},[2569,6042,6043,6049],{},[2615,6044,6045,6046,2484],{},"数据类型 数组名",[33,6047,6048],{},"数组长度",[2615,6050,6051,6052,6054],{},"这种方式是先定义再arr",[33,6053,2861],{},"赋值",[2569,6056,6057,6062],{},[2615,6058,6045,6059,6061],{},[33,6060,6048],{},"={值1,值2....};",[2615,6063,6064],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2569,6066,6067,6071],{},[2615,6068,6045,6069,6061],{},[33,6070],{},[2615,6072,6073,6074,6076],{},"int arr",[33,6075],{},";这是不正确的，按照这样的方式定义必须有初始长度",[328,6078,6079],{"start":51},[331,6080,6081],{},"一维数组数组名\n用途：",[3413,6083,6084],{},[331,6085,6086],{},"1.可以统计整个数组在内存中的长度：",[23,6088,6090],{"className":2422,"code":6089,"language":2424,"meta":28,"style":28},"sizeof(arr);\nsizeof(arr[0]);\n",[30,6091,6092,6099],{"__ignoreMap":28},[33,6093,6094,6096],{"class":35,"line":36},[33,6095,2431],{"class":39},[33,6097,6098],{"class":47},"(arr);\n",[33,6100,6101,6103,6106,6108],{"class":35,"line":51},[33,6102,2431],{"class":39},[33,6104,6105],{"class":47},"(arr[",[33,6107,2617],{"class":72},[33,6109,6110],{"class":47},"]);\n",[3413,6112,6113],{},[331,6114,6115],{},"2.可以获取数组在内存中的首地址:",[23,6117,6119],{"className":2422,"code":6118,"language":2424,"meta":28,"style":28},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[30,6120,6121,6126,6139,6144],{"__ignoreMap":28},[33,6122,6123],{"class":35,"line":36},[33,6124,6125],{"class":2487},"\u002F\u002F查看16进制的首地址\n",[33,6127,6128,6130,6132,6135,6137],{"class":35,"line":51},[33,6129,3643],{"class":47},[33,6131,3450],{"class":39},[33,6133,6134],{"class":47},"arr",[33,6136,3450],{"class":39},[33,6138,3472],{"class":47},[33,6140,6141],{"class":35,"line":64},[33,6142,6143],{"class":2487},"\u002F\u002F看10进制数\n",[33,6145,6146,6148,6150,6152,6154,6156,6158,6161,6163,6165,6167],{"class":35,"line":76},[33,6147,3643],{"class":47},[33,6149,3450],{"class":39},[33,6151,133],{"class":47},[33,6153,2436],{"class":39},[33,6155,2849],{"class":47},[33,6157,2774],{"class":39},[33,6159,6160],{"class":47},"arr[",[33,6162,2617],{"class":72},[33,6164,3348],{"class":47},[33,6166,3450],{"class":39},[33,6168,3472],{"class":47},[19,6170,6171],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3413,6173,6174],{},[331,6175,6176],{},"1️⃣五只小猪称体重",[23,6178,6180],{"className":2422,"code":6179,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[30,6181,6182,6188,6198,6206,6210,6250,6263,6289,6293,6305,6309,6319,6323,6327,6340,6348],{"__ignoreMap":28},[33,6183,6184,6186],{"class":35,"line":36},[33,6185,4209],{"class":39},[33,6187,4212],{"class":60},[33,6189,6190,6192,6194,6196],{"class":35,"line":51},[33,6191,4217],{"class":39},[33,6193,4220],{"class":39},[33,6195,4223],{"class":43},[33,6197,3567],{"class":47},[33,6199,6200,6202,6204],{"class":35,"line":64},[33,6201,2436],{"class":39},[33,6203,4232],{"class":43},[33,6205,4235],{"class":47},[33,6207,6208],{"class":35,"line":76},[33,6209,3820],{"class":47},[33,6211,6212,6214,6217,6219,6221,6223,6225,6228,6230,6233,6235,6237,6239,6242,6244,6247],{"class":35,"line":87},[33,6213,4244],{"class":39},[33,6215,6216],{"class":47}," arr[",[33,6218,758],{"class":72},[33,6220,3348],{"class":47},[33,6222,57],{"class":39},[33,6224,204],{"class":47},[33,6226,6227],{"class":72},"300",[33,6229,2799],{"class":47},[33,6231,6232],{"class":72},"350",[33,6234,2799],{"class":47},[33,6236,3983],{"class":72},[33,6238,2799],{"class":47},[33,6240,6241],{"class":72},"400",[33,6243,2799],{"class":47},[33,6245,6246],{"class":72},"250",[33,6248,6249],{"class":47},"};\n",[33,6251,6252,6254,6257,6259,6261],{"class":35,"line":96},[33,6253,4244],{"class":39},[33,6255,6256],{"class":47}," tmp",[33,6258,57],{"class":39},[33,6260,2617],{"class":72},[33,6262,3567],{"class":47},[33,6264,6265,6267,6269,6271,6273,6275,6277,6279,6281,6283,6285,6287],{"class":35,"line":103},[33,6266,675],{"class":39},[33,6268,3924],{"class":47},[33,6270,2436],{"class":39},[33,6272,5289],{"class":47},[33,6274,57],{"class":39},[33,6276,2617],{"class":72},[33,6278,5296],{"class":47},[33,6280,2226],{"class":39},[33,6282,758],{"class":72},[33,6284,5296],{"class":47},[33,6286,4551],{"class":39},[33,6288,226],{"class":47},[33,6290,6291],{"class":35,"line":108},[33,6292,4289],{"class":47},[33,6294,6295,6297,6300,6302],{"class":35,"line":119},[33,6296,2130],{"class":39},[33,6298,6299],{"class":47},"(tmp",[33,6301,2226],{"class":39},[33,6303,6304],{"class":47},"arr[i])\n",[33,6306,6307],{"class":35,"line":128},[33,6308,4767],{"class":47},[33,6310,6311,6314,6316],{"class":35,"line":1753},[33,6312,6313],{"class":47},"            tmp",[33,6315,57],{"class":39},[33,6317,6318],{"class":47},"arr[i];\n",[33,6320,6321],{"class":35,"line":1763},[33,6322,4786],{"class":47},[33,6324,6325],{"class":35,"line":1775},[33,6326,4446],{"class":47},[33,6328,6329,6331,6333,6336,6338],{"class":35,"line":1780},[33,6330,3825],{"class":47},[33,6332,3450],{"class":39},[33,6334,6335],{"class":47},"tmp",[33,6337,3450],{"class":39},[33,6339,3472],{"class":47},[33,6341,6342,6344,6346],{"class":35,"line":1785},[33,6343,90],{"class":39},[33,6345,1437],{"class":72},[33,6347,3567],{"class":47},[33,6349,6350],{"class":35,"line":1940},[33,6351,1010],{"class":47},[3413,6353,6354],{},[331,6355,6356],{},"2️⃣数组元素逆置",[23,6358,6360],{"className":2422,"code":6359,"language":2424,"meta":28,"style":28},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[30,6361,6362,6367,6373,6383,6391,6395,6430,6446,6478,6491,6496,6501,6513,6523,6533,6538,6547,6557,6562,6567,6594,6598,6614,6618,6629,6638],{"__ignoreMap":28},[33,6363,6364],{"class":35,"line":36},[33,6365,6366],{"class":2487},"\u002F\u002F元素逆置\n",[33,6368,6369,6371],{"class":35,"line":51},[33,6370,4209],{"class":39},[33,6372,4212],{"class":60},[33,6374,6375,6377,6379,6381],{"class":35,"line":64},[33,6376,4217],{"class":39},[33,6378,4220],{"class":39},[33,6380,4223],{"class":43},[33,6382,3567],{"class":47},[33,6384,6385,6387,6389],{"class":35,"line":76},[33,6386,2436],{"class":39},[33,6388,4232],{"class":43},[33,6390,4235],{"class":47},[33,6392,6393],{"class":35,"line":87},[33,6394,3820],{"class":47},[33,6396,6397,6400,6402,6404,6406,6408,6410,6412,6414,6416,6418,6420,6422,6424,6426,6428],{"class":35,"line":96},[33,6398,6399],{"class":39},"   int",[33,6401,6216],{"class":47},[33,6403,758],{"class":72},[33,6405,3348],{"class":47},[33,6407,57],{"class":39},[33,6409,204],{"class":47},[33,6411,720],{"class":72},[33,6413,2799],{"class":47},[33,6415,725],{"class":72},[33,6417,2799],{"class":47},[33,6419,730],{"class":72},[33,6421,2799],{"class":47},[33,6423,753],{"class":72},[33,6425,2799],{"class":47},[33,6427,758],{"class":72},[33,6429,6249],{"class":47},[33,6431,6432,6434,6437,6439,6441,6443],{"class":35,"line":103},[33,6433,6399],{"class":39},[33,6435,6436],{"class":47}," start",[33,6438,57],{"class":39},[33,6440,2617],{"class":72},[33,6442,2484],{"class":47},[33,6444,6445],{"class":2487},"\u002F\u002F起始下标\n",[33,6447,6448,6450,6453,6456,6459,6462,6464,6466,6469,6471,6473,6475],{"class":35,"line":108},[33,6449,6399],{"class":39},[33,6451,6452],{"class":47}," end",[33,6454,6455],{"class":39},"=sizeof",[33,6457,6458],{"class":47},"(arr)",[33,6460,6461],{"class":39},"\u002Fsizeof",[33,6463,6105],{"class":47},[33,6465,2617],{"class":72},[33,6467,6468],{"class":47},"])",[33,6470,2949],{"class":39},[33,6472,720],{"class":72},[33,6474,2484],{"class":47},[33,6476,6477],{"class":2487},"\u002F\u002F结束下标\n",[33,6479,6480,6483,6486,6488],{"class":35,"line":119},[33,6481,6482],{"class":39},"   while",[33,6484,6485],{"class":47}," (start",[33,6487,2226],{"class":39},[33,6489,6490],{"class":47},"end)\n",[33,6492,6493],{"class":35,"line":128},[33,6494,6495],{"class":47},"   {\n",[33,6497,6498],{"class":35,"line":1753},[33,6499,6500],{"class":2487},"    \u002F\u002F实现元素互换代码\n",[33,6502,6503,6505,6508,6510],{"class":35,"line":1763},[33,6504,4244],{"class":39},[33,6506,6507],{"class":47}," temp",[33,6509,57],{"class":39},[33,6511,6512],{"class":47},"arr[start];\n",[33,6514,6515,6518,6520],{"class":35,"line":1775},[33,6516,6517],{"class":47},"    arr[start]",[33,6519,57],{"class":39},[33,6521,6522],{"class":47},"arr[end];\n",[33,6524,6525,6528,6530],{"class":35,"line":1780},[33,6526,6527],{"class":47},"    arr[end]",[33,6529,57],{"class":39},[33,6531,6532],{"class":47},"temp;\n",[33,6534,6535],{"class":35,"line":1785},[33,6536,6537],{"class":2487},"    \u002F\u002F下标更新\n",[33,6539,6540,6543,6545],{"class":35,"line":1940},[33,6541,6542],{"class":47},"    start",[33,6544,4551],{"class":39},[33,6546,3567],{"class":47},[33,6548,6549,6552,6555],{"class":35,"line":2183},[33,6550,6551],{"class":47},"    end",[33,6553,6554],{"class":39},"--",[33,6556,3567],{"class":47},[33,6558,6559],{"class":35,"line":2208},[33,6560,6561],{"class":47},"   }\n",[33,6563,6564],{"class":35,"line":2234},[33,6565,6566],{"class":2487},"   \u002F\u002F输出逆置后的数组\n",[33,6568,6569,6572,6574,6576,6578,6580,6582,6584,6586,6588,6590,6592],{"class":35,"line":2239},[33,6570,6571],{"class":39},"   for",[33,6573,3924],{"class":47},[33,6575,2436],{"class":39},[33,6577,5289],{"class":47},[33,6579,57],{"class":39},[33,6581,2617],{"class":72},[33,6583,5296],{"class":47},[33,6585,2226],{"class":39},[33,6587,758],{"class":72},[33,6589,5296],{"class":47},[33,6591,4551],{"class":39},[33,6593,226],{"class":47},[33,6595,6596],{"class":35,"line":2247},[33,6597,6495],{"class":47},[33,6599,6600,6602,6604,6607,6609,6612],{"class":35,"line":2255},[33,6601,3825],{"class":47},[33,6603,3450],{"class":39},[33,6605,6606],{"class":47},"arr[i]",[33,6608,3450],{"class":39},[33,6610,6611],{"class":60},"\" \"",[33,6613,3567],{"class":47},[33,6615,6616],{"class":35,"line":3992},[33,6617,6561],{"class":47},[33,6619,6620,6623,6625,6627],{"class":35,"line":4009},[33,6621,6622],{"class":43},"   system",[33,6624,133],{"class":47},[33,6626,4567],{"class":60},[33,6628,4976],{"class":47},[33,6630,6631,6634,6636],{"class":35,"line":4014},[33,6632,6633],{"class":39},"   return",[33,6635,1437],{"class":72},[33,6637,3567],{"class":47},[33,6639,6640],{"class":35,"line":4019},[33,6641,1010],{"class":47},[3413,6643,6644],{},[331,6645,6646],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[23,6648,6650],{"className":2422,"code":6649,"language":2424,"meta":28,"style":28},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[30,6651,6652,6657,6663,6673,6681,6685,6735,6748,6774,6778,6792,6796,6801,6806,6836,6840,6845,6879,6883,6888,6908,6913,6925,6941,6956,6961,6965,6969,6982,7008,7012,7026,7030,7038],{"__ignoreMap":28},[33,6653,6654],{"class":35,"line":36},[33,6655,6656],{"class":2487},"\u002F\u002F冒泡排序,升序\n",[33,6658,6659,6661],{"class":35,"line":51},[33,6660,4209],{"class":39},[33,6662,4212],{"class":60},[33,6664,6665,6667,6669,6671],{"class":35,"line":64},[33,6666,4217],{"class":39},[33,6668,4220],{"class":39},[33,6670,4223],{"class":43},[33,6672,3567],{"class":47},[33,6674,6675,6677,6679],{"class":35,"line":76},[33,6676,2436],{"class":39},[33,6678,4232],{"class":43},[33,6680,4235],{"class":47},[33,6682,6683],{"class":35,"line":87},[33,6684,3820],{"class":47},[33,6686,6687,6689,6691,6693,6695,6697,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717,6719,6721,6723,6725,6727,6729,6731,6733],{"class":35,"line":96},[33,6688,4244],{"class":39},[33,6690,6216],{"class":47},[33,6692,2840],{"class":72},[33,6694,2172],{"class":47},[33,6696,57],{"class":39},[33,6698,965],{"class":47},[33,6700,753],{"class":72},[33,6702,2799],{"class":47},[33,6704,725],{"class":72},[33,6706,2799],{"class":47},[33,6708,2816],{"class":72},[33,6710,2799],{"class":47},[33,6712,2617],{"class":72},[33,6714,2799],{"class":47},[33,6716,758],{"class":72},[33,6718,2799],{"class":47},[33,6720,2790],{"class":72},[33,6722,2799],{"class":47},[33,6724,720],{"class":72},[33,6726,2799],{"class":47},[33,6728,730],{"class":72},[33,6730,2799],{"class":47},[33,6732,2840],{"class":72},[33,6734,6249],{"class":47},[33,6736,6737,6739,6741,6744,6746],{"class":35,"line":103},[33,6738,3825],{"class":47},[33,6740,3450],{"class":39},[33,6742,6743],{"class":60},"\"排序前：\"",[33,6745,3450],{"class":39},[33,6747,3472],{"class":47},[33,6749,6750,6752,6754,6756,6758,6760,6762,6764,6766,6768,6770,6772],{"class":35,"line":108},[33,6751,675],{"class":39},[33,6753,3924],{"class":47},[33,6755,2436],{"class":39},[33,6757,5289],{"class":47},[33,6759,57],{"class":39},[33,6761,2617],{"class":72},[33,6763,5296],{"class":47},[33,6765,2226],{"class":39},[33,6767,2840],{"class":72},[33,6769,5296],{"class":47},[33,6771,4551],{"class":39},[33,6773,226],{"class":47},[33,6775,6776],{"class":35,"line":119},[33,6777,4289],{"class":47},[33,6779,6780,6782,6784,6786,6788,6790],{"class":35,"line":128},[33,6781,5706],{"class":47},[33,6783,3450],{"class":39},[33,6785,6606],{"class":47},[33,6787,3450],{"class":39},[33,6789,6611],{"class":60},[33,6791,3567],{"class":47},[33,6793,6794],{"class":35,"line":1753},[33,6795,4446],{"class":47},[33,6797,6798],{"class":35,"line":1763},[33,6799,6800],{"class":2487},"    \u002F\u002F开始冒泡排序\n",[33,6802,6803],{"class":35,"line":1775},[33,6804,6805],{"class":2487},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[33,6807,6808,6810,6812,6814,6816,6818,6820,6822,6824,6826,6828,6830,6832,6834],{"class":35,"line":1780},[33,6809,675],{"class":39},[33,6811,3924],{"class":47},[33,6813,2436],{"class":39},[33,6815,5289],{"class":47},[33,6817,57],{"class":39},[33,6819,2617],{"class":72},[33,6821,5296],{"class":47},[33,6823,2226],{"class":39},[33,6825,2840],{"class":72},[33,6827,2949],{"class":39},[33,6829,720],{"class":72},[33,6831,5296],{"class":47},[33,6833,4551],{"class":39},[33,6835,226],{"class":47},[33,6837,6838],{"class":35,"line":1785},[33,6839,4289],{"class":47},[33,6841,6842],{"class":35,"line":1940},[33,6843,6844],{"class":2487},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[33,6846,6847,6849,6851,6853,6855,6857,6859,6861,6863,6865,6867,6869,6871,6873,6875,6877],{"class":35,"line":2183},[33,6848,5658],{"class":39},[33,6850,3924],{"class":47},[33,6852,2436],{"class":39},[33,6854,5665],{"class":47},[33,6856,57],{"class":39},[33,6858,2617],{"class":72},[33,6860,5672],{"class":47},[33,6862,2226],{"class":39},[33,6864,2840],{"class":72},[33,6866,2949],{"class":39},[33,6868,2861],{"class":47},[33,6870,2949],{"class":39},[33,6872,720],{"class":72},[33,6874,5672],{"class":47},[33,6876,4551],{"class":39},[33,6878,226],{"class":47},[33,6880,6881],{"class":35,"line":2208},[33,6882,4767],{"class":47},[33,6884,6885],{"class":35,"line":2234},[33,6886,6887],{"class":2487},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[33,6889,6890,6893,6896,6898,6901,6903,6905],{"class":35,"line":2239},[33,6891,6892],{"class":39},"            if",[33,6894,6895],{"class":47},"(arr[j]",[33,6897,3367],{"class":39},[33,6899,6900],{"class":47},"arr[j",[33,6902,880],{"class":39},[33,6904,720],{"class":72},[33,6906,6907],{"class":47},"])\n",[33,6909,6910],{"class":35,"line":2247},[33,6911,6912],{"class":47},"            {\n",[33,6914,6915,6918,6920,6922],{"class":35,"line":2255},[33,6916,6917],{"class":39},"                int",[33,6919,6507],{"class":47},[33,6921,57],{"class":39},[33,6923,6924],{"class":47},"arr[j];\n",[33,6926,6927,6930,6932,6934,6936,6938],{"class":35,"line":3992},[33,6928,6929],{"class":47},"                arr[j]",[33,6931,57],{"class":39},[33,6933,6900],{"class":47},[33,6935,880],{"class":39},[33,6937,720],{"class":72},[33,6939,6940],{"class":47},"];\n",[33,6942,6943,6946,6948,6950,6952,6954],{"class":35,"line":4009},[33,6944,6945],{"class":47},"                arr[j",[33,6947,880],{"class":39},[33,6949,720],{"class":72},[33,6951,3348],{"class":47},[33,6953,57],{"class":39},[33,6955,6532],{"class":47},[33,6957,6958],{"class":35,"line":4014},[33,6959,6960],{"class":47},"            }\n",[33,6962,6963],{"class":35,"line":4019},[33,6964,4786],{"class":47},[33,6966,6967],{"class":35,"line":4024},[33,6968,4446],{"class":47},[33,6970,6971,6973,6975,6978,6980],{"class":35,"line":4038},[33,6972,3825],{"class":47},[33,6974,3450],{"class":39},[33,6976,6977],{"class":60},"\"排序后：\"",[33,6979,3450],{"class":39},[33,6981,3472],{"class":47},[33,6983,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006],{"class":35,"line":4043},[33,6985,675],{"class":39},[33,6987,3924],{"class":47},[33,6989,2436],{"class":39},[33,6991,5289],{"class":47},[33,6993,57],{"class":39},[33,6995,2617],{"class":72},[33,6997,5296],{"class":47},[33,6999,2226],{"class":39},[33,7001,2840],{"class":72},[33,7003,5296],{"class":47},[33,7005,4551],{"class":39},[33,7007,226],{"class":47},[33,7009,7010],{"class":35,"line":4834},[33,7011,4289],{"class":47},[33,7013,7014,7016,7018,7020,7022,7024],{"class":35,"line":4848},[33,7015,5706],{"class":47},[33,7017,3450],{"class":39},[33,7019,6606],{"class":47},[33,7021,3450],{"class":39},[33,7023,6611],{"class":60},[33,7025,3567],{"class":47},[33,7027,7028],{"class":35,"line":4856},[33,7029,4446],{"class":47},[33,7031,7032,7034,7036],{"class":35,"line":4861},[33,7033,90],{"class":39},[33,7035,1437],{"class":72},[33,7037,3567],{"class":47},[33,7039,7040],{"class":35,"line":4867},[33,7041,1010],{"class":47},[631,7043,7045],{"id":7044},"_172二维数组","1.7.2二维数组",[328,7047,7048],{},[331,7049,7050],{},"二维数组的四种定义方式",[2563,7052,7053,7062],{},[2566,7054,7055],{},[2569,7056,7057,7060],{},[2572,7058,7059],{},"序号",[2572,7061,6035],{},[2610,7063,7064,7074,7083,7092,7101],{},[2569,7065,7066,7068],{},[2615,7067,720],{},[2615,7069,7070,7071,2484],{},"数据类型 数组名[行数]",[33,7072,7073],{},"列数",[2569,7075,7076,7078],{},[2615,7077,725],{},[2615,7079,7070,7080,7082],{},[33,7081,7073],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2569,7084,7085,7087],{},[2615,7086,730],{},[2615,7088,7070,7089,7091],{},[33,7090,7073],{},"={数据1,数据2,数据3...}",[2569,7093,7094,7096],{},[2615,7095,753],{},[2615,7097,7098,7099,7091],{},"数据类型 数组名[]",[33,7100,7073],{},[2569,7102,7103,7106],{},[2615,7104,7105],{},"注意：不能只省略列数",[2615,7107],{},[328,7109,7110],{"start":51},[331,7111,7112],{},"二维数组数组名",[3413,7114,7115,7118],{},[331,7116,7117],{},"1.查看二维数组所占内存空间",[331,7119,7120],{},"2.获取二维数组首地址",[19,7122,7123],{},"已知二维数组，求二维数组的行数与列数",[23,7125,7127],{"className":2422,"code":7126,"language":2424,"meta":28,"style":28},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[30,7128,7129,7137,7141,7159,7163,7180,7196,7201,7226,7259],{"__ignoreMap":28},[33,7130,7131,7133,7135],{"class":35,"line":36},[33,7132,2436],{"class":39},[33,7134,4232],{"class":43},[33,7136,4235],{"class":47},[33,7138,7139],{"class":35,"line":51},[33,7140,3820],{"class":47},[33,7142,7143,7145,7147,7149,7152,7154,7156],{"class":35,"line":64},[33,7144,4244],{"class":39},[33,7146,6216],{"class":47},[33,7148,725],{"class":72},[33,7150,7151],{"class":47},"][",[33,7153,730],{"class":72},[33,7155,3348],{"class":47},[33,7157,7158],{"class":39},"=\n",[33,7160,7161],{"class":35,"line":76},[33,7162,4289],{"class":47},[33,7164,7165,7168,7170,7172,7174,7176,7178],{"class":35,"line":87},[33,7166,7167],{"class":47},"        {",[33,7169,720],{"class":72},[33,7171,2799],{"class":47},[33,7173,725],{"class":72},[33,7175,2799],{"class":47},[33,7177,730],{"class":72},[33,7179,1111],{"class":47},[33,7181,7182,7184,7186,7188,7190,7192,7194],{"class":35,"line":96},[33,7183,7167],{"class":47},[33,7185,753],{"class":72},[33,7187,2799],{"class":47},[33,7189,758],{"class":72},[33,7191,2799],{"class":47},[33,7193,2765],{"class":72},[33,7195,1010],{"class":47},[33,7197,7198],{"class":35,"line":103},[33,7199,7200],{"class":47},"    };\n",[33,7202,7203,7205,7207,7210,7212,7214,7216,7218,7220,7222,7224],{"class":35,"line":108},[33,7204,3825],{"class":47},[33,7206,3450],{"class":39},[33,7208,7209],{"class":60},"\"二维数组的行数\"",[33,7211,3646],{"class":39},[33,7213,6458],{"class":47},[33,7215,6461],{"class":39},[33,7217,6105],{"class":47},[33,7219,2617],{"class":72},[33,7221,6468],{"class":47},[33,7223,3450],{"class":39},[33,7225,3472],{"class":47},[33,7227,7228,7230,7232,7235,7237,7239,7241,7243,7245,7247,7249,7251,7253,7255,7257],{"class":35,"line":119},[33,7229,3825],{"class":47},[33,7231,3450],{"class":39},[33,7233,7234],{"class":60},"\"二维数组的列数\"",[33,7236,3646],{"class":39},[33,7238,6105],{"class":47},[33,7240,2617],{"class":72},[33,7242,6468],{"class":47},[33,7244,6461],{"class":39},[33,7246,6105],{"class":47},[33,7248,2617],{"class":72},[33,7250,7151],{"class":47},[33,7252,2617],{"class":72},[33,7254,6468],{"class":47},[33,7256,3450],{"class":39},[33,7258,3472],{"class":47},[33,7260,7261],{"class":35,"line":128},[33,7262,1010],{"class":47},[19,7264,7265],{},"查看二维数组首地址",[23,7267,7269],{"className":2422,"code":7268,"language":2424,"meta":28,"style":28},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[30,7270,7271,7288,7314,7339],{"__ignoreMap":28},[33,7272,7273,7275,7277,7280,7282,7284,7286],{"class":35,"line":36},[33,7274,3643],{"class":47},[33,7276,3450],{"class":39},[33,7278,7279],{"class":60},"\"二维数组首地址：\"",[33,7281,3450],{"class":39},[33,7283,6134],{"class":47},[33,7285,3450],{"class":39},[33,7287,3472],{"class":47},[33,7289,7290,7292,7294,7297,7299,7301,7303,7306,7308,7310,7312],{"class":35,"line":51},[33,7291,3643],{"class":47},[33,7293,3450],{"class":39},[33,7295,7296],{"class":60},"\"二维数组第一行的首地址：\"",[33,7298,3450],{"class":39},[33,7300,133],{"class":47},[33,7302,2436],{"class":39},[33,7304,7305],{"class":47},")arr[",[33,7307,2617],{"class":72},[33,7309,3348],{"class":47},[33,7311,3450],{"class":39},[33,7313,3472],{"class":47},[33,7315,7316,7318,7320,7323,7325,7327,7329,7331,7333,7335,7337],{"class":35,"line":64},[33,7317,3643],{"class":47},[33,7319,3450],{"class":39},[33,7321,7322],{"class":60},"\"二维数组第二行的首地址：\"",[33,7324,3450],{"class":39},[33,7326,133],{"class":47},[33,7328,2436],{"class":39},[33,7330,7305],{"class":47},[33,7332,720],{"class":72},[33,7334,3348],{"class":47},[33,7336,3450],{"class":39},[33,7338,3472],{"class":47},[33,7340,7341,7343,7345,7348,7350,7352,7354,7356,7358,7360,7362,7364,7366,7368,7370,7372],{"class":35,"line":76},[33,7342,3643],{"class":47},[33,7344,3450],{"class":39},[33,7346,7347],{"class":60},"\"二维数组第一个元素的首地址:\"",[33,7349,3450],{"class":39},[33,7351,133],{"class":47},[33,7353,2436],{"class":39},[33,7355,2849],{"class":47},[33,7357,2774],{"class":39},[33,7359,6160],{"class":47},[33,7361,2617],{"class":72},[33,7363,7151],{"class":47},[33,7365,2617],{"class":72},[33,7367,3348],{"class":47},[33,7369,3450],{"class":39},[33,7371,3515],{"class":47},[33,7373,7374],{"class":2487},"\u002F\u002F对于数，要加取址符\n",[2331,7376,7377],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":28,"searchDepth":51,"depth":51,"links":7379},[7380,7381,7382,7390,7391,7397,7402],{"id":2377,"depth":51,"text":2378},{"id":2384,"depth":51,"text":2385},{"id":2399,"depth":51,"text":2400,"children":7383},[7384,7385,7386,7387,7388,7389],{"id":2403,"depth":64,"text":2404},{"id":2448,"depth":64,"text":2449},{"id":2512,"depth":64,"text":2513},{"id":3431,"depth":64,"text":3432},{"id":3521,"depth":64,"text":3522},{"id":3617,"depth":64,"text":3618},{"id":3659,"depth":51,"text":3660},{"id":3727,"depth":51,"text":3728,"children":7392},[7393,7394,7395,7396],{"id":3731,"depth":64,"text":3732},{"id":3753,"depth":64,"text":3754},{"id":3762,"depth":64,"text":3763},{"id":3771,"depth":64,"text":3772},{"id":3780,"depth":51,"text":3781,"children":7398},[7399,7400,7401],{"id":3784,"depth":64,"text":3785},{"id":4464,"depth":64,"text":4465},{"id":5876,"depth":64,"text":5877},{"id":6016,"depth":51,"text":6017,"children":7403},[7404,7405],{"id":6020,"depth":64,"text":6021},{"id":7044,"depth":64,"text":7045},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2369,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7412,"title":7413,"body":7414,"description":28,"extension":2360,"meta":8511,"navigation":99,"path":8512,"seo":8513,"stem":8514,"__hash__":8515},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7415,"toc":8503},[7416,7419,7423,7431,7439,7442,7506,7510,7513,7589,7593,7596,7599,7602,7815,7819,7824,7888,7893,7960,7965,8056,8059,8163,8167,8170,8176,8320,8324,8327,8341,8344,8389,8392,8500],[10,7417,7413],{"id":7418},"_2函数",[14,7420,7422],{"id":7421},"_21函数概述","2.1函数概述",[328,7424,7425,7428],{},[331,7426,7427],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[331,7429,7430],{},"语法：",[23,7432,7437],{"className":7433,"code":7435,"language":7436,"meta":28},[7434],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[30,7438,7435],{"__ignoreMap":28},[19,7440,7441],{},"小案例",[23,7443,7445],{"className":2422,"code":7444,"language":2424,"meta":28,"style":28},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[30,7446,7447,7452,7474,7478,7495,7502],{"__ignoreMap":28},[33,7448,7449],{"class":35,"line":36},[33,7450,7451],{"class":2487},"\u002F\u002Fnum1,num2形参\n",[33,7453,7454,7456,7458,7460,7462,7465,7467,7469,7472],{"class":35,"line":51},[33,7455,2436],{"class":39},[33,7457,652],{"class":43},[33,7459,133],{"class":47},[33,7461,2436],{"class":39},[33,7463,7464],{"class":289}," num1",[33,7466,2799],{"class":47},[33,7468,2436],{"class":39},[33,7470,7471],{"class":289}," num2",[33,7473,226],{"class":47},[33,7475,7476],{"class":35,"line":64},[33,7477,3820],{"class":47},[33,7479,7480,7482,7485,7487,7490,7492],{"class":35,"line":76},[33,7481,4244],{"class":39},[33,7483,7484],{"class":47}," sum",[33,7486,57],{"class":39},[33,7488,7489],{"class":47},"num1",[33,7491,880],{"class":39},[33,7493,7494],{"class":47},"num2;\n",[33,7496,7497,7499],{"class":35,"line":87},[33,7498,90],{"class":39},[33,7500,7501],{"class":47}," sum;\n",[33,7503,7504],{"class":35,"line":96},[33,7505,1010],{"class":47},[14,7507,7509],{"id":7508},"_22函数调用","2.2函数调用",[19,7511,7512],{},"调用刚刚写的求和函数",[23,7514,7516],{"className":2422,"code":7515,"language":2424,"meta":28,"style":28},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[30,7517,7518,7526,7530,7535,7547,7559,7568,7573,7585],{"__ignoreMap":28},[33,7519,7520,7522,7524],{"class":35,"line":36},[33,7521,2436],{"class":39},[33,7523,4232],{"class":43},[33,7525,4235],{"class":47},[33,7527,7528],{"class":35,"line":51},[33,7529,3820],{"class":47},[33,7531,7532],{"class":35,"line":64},[33,7533,7534],{"class":2487},"    \u002F\u002Fa,b实参\n",[33,7536,7537,7539,7541,7543,7545],{"class":35,"line":76},[33,7538,4244],{"class":39},[33,7540,3672],{"class":47},[33,7542,57],{"class":39},[33,7544,2617],{"class":72},[33,7546,3567],{"class":47},[33,7548,7549,7551,7553,7555,7557],{"class":35,"line":87},[33,7550,4244],{"class":39},[33,7552,5090],{"class":47},[33,7554,57],{"class":39},[33,7556,2617],{"class":72},[33,7558,3567],{"class":47},[33,7560,7561,7563,7565],{"class":35,"line":96},[33,7562,4271],{"class":47},[33,7564,3703],{"class":39},[33,7566,7567],{"class":47},"a,b;\n",[33,7569,7570],{"class":35,"line":103},[33,7571,7572],{"class":2487},"    \u002F\u002F调用函数时，实参值传给了形参\n",[33,7574,7575,7577,7579,7582],{"class":35,"line":108},[33,7576,3825],{"class":47},[33,7578,3450],{"class":39},[33,7580,7581],{"class":43},"add",[33,7583,7584],{"class":47},"(a,b);\n",[33,7586,7587],{"class":35,"line":119},[33,7588,1010],{"class":47},[14,7590,7592],{"id":7591},"_23值传递","2.3值传递",[19,7594,7595],{},"值传递就是函数调用时实参将数值传给形参",[19,7597,7598],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7600,7601],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[23,7603,7605],{"className":2422,"code":7604,"language":2424,"meta":28,"style":28},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[30,7606,7607,7629,7633,7646,7663,7681,7692,7701,7710,7723,7739,7755,7764,7768,7776,7780,7792,7804,7811],{"__ignoreMap":28},[33,7608,7609,7612,7615,7617,7619,7621,7623,7625,7627],{"class":35,"line":36},[33,7610,7611],{"class":39},"void",[33,7613,7614],{"class":43}," swap",[33,7616,133],{"class":47},[33,7618,2436],{"class":39},[33,7620,7464],{"class":289},[33,7622,2799],{"class":47},[33,7624,2436],{"class":39},[33,7626,7471],{"class":289},[33,7628,226],{"class":47},[33,7630,7631],{"class":35,"line":51},[33,7632,3820],{"class":47},[33,7634,7635,7637,7639,7642,7644],{"class":35,"line":64},[33,7636,3825],{"class":47},[33,7638,3450],{"class":39},[33,7640,7641],{"class":60},"\"交换前：\"",[33,7643,3450],{"class":39},[33,7645,3472],{"class":47},[33,7647,7648,7650,7652,7655,7657,7659,7661],{"class":35,"line":76},[33,7649,3825],{"class":47},[33,7651,3450],{"class":39},[33,7653,7654],{"class":60},"\"num1=\"",[33,7656,3450],{"class":39},[33,7658,7489],{"class":47},[33,7660,3450],{"class":39},[33,7662,3472],{"class":47},[33,7664,7665,7667,7669,7672,7674,7677,7679],{"class":35,"line":87},[33,7666,3825],{"class":47},[33,7668,3450],{"class":39},[33,7670,7671],{"class":60},"\"num2=\"",[33,7673,3450],{"class":39},[33,7675,7676],{"class":47},"num2",[33,7678,3450],{"class":39},[33,7680,3472],{"class":47},[33,7682,7683,7685,7687,7689],{"class":35,"line":96},[33,7684,4244],{"class":39},[33,7686,6507],{"class":47},[33,7688,57],{"class":39},[33,7690,7691],{"class":47},"num1;\n",[33,7693,7694,7697,7699],{"class":35,"line":103},[33,7695,7696],{"class":47},"    num1",[33,7698,57],{"class":39},[33,7700,7494],{"class":47},[33,7702,7703,7706,7708],{"class":35,"line":108},[33,7704,7705],{"class":47},"    num2",[33,7707,57],{"class":39},[33,7709,6532],{"class":47},[33,7711,7712,7714,7716,7719,7721],{"class":35,"line":119},[33,7713,3825],{"class":47},[33,7715,3450],{"class":39},[33,7717,7718],{"class":60},"\"交换后：\"",[33,7720,3450],{"class":39},[33,7722,3472],{"class":47},[33,7724,7725,7727,7729,7731,7733,7735,7737],{"class":35,"line":128},[33,7726,3825],{"class":47},[33,7728,3450],{"class":39},[33,7730,7654],{"class":60},[33,7732,3450],{"class":39},[33,7734,7489],{"class":47},[33,7736,3450],{"class":39},[33,7738,3472],{"class":47},[33,7740,7741,7743,7745,7747,7749,7751,7753],{"class":35,"line":1753},[33,7742,3825],{"class":47},[33,7744,3450],{"class":39},[33,7746,7671],{"class":60},[33,7748,3450],{"class":39},[33,7750,7676],{"class":47},[33,7752,3450],{"class":39},[33,7754,3472],{"class":47},[33,7756,7757,7759,7761],{"class":35,"line":1763},[33,7758,90],{"class":39},[33,7760,2484],{"class":47},[33,7762,7763],{"class":2487},"\u002F\u002F或者不写\n",[33,7765,7766],{"class":35,"line":1775},[33,7767,1010],{"class":47},[33,7769,7770,7772,7774],{"class":35,"line":1780},[33,7771,2436],{"class":39},[33,7773,4232],{"class":43},[33,7775,4235],{"class":47},[33,7777,7778],{"class":35,"line":1785},[33,7779,3820],{"class":47},[33,7781,7782,7784,7786,7788,7790],{"class":35,"line":1940},[33,7783,4244],{"class":39},[33,7785,3672],{"class":47},[33,7787,57],{"class":39},[33,7789,1279],{"class":72},[33,7791,3567],{"class":47},[33,7793,7794,7796,7798,7800,7802],{"class":35,"line":2183},[33,7795,4244],{"class":39},[33,7797,5090],{"class":47},[33,7799,57],{"class":39},[33,7801,1284],{"class":72},[33,7803,3567],{"class":47},[33,7805,7806,7809],{"class":35,"line":2208},[33,7807,7808],{"class":43},"    swap",[33,7810,7584],{"class":47},[33,7812,7813],{"class":35,"line":2234},[33,7814,1010],{"class":47},[14,7816,7818],{"id":7817},"_24函数的常见形式","2.4函数的常见形式",[328,7820,7821],{},[331,7822,7823],{},"无参无返",[23,7825,7827],{"className":2422,"code":7826,"language":2424,"meta":28,"style":28},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[30,7828,7829,7838,7842,7855,7859,7867,7871,7876,7884],{"__ignoreMap":28},[33,7830,7831,7833,7836],{"class":35,"line":36},[33,7832,7611],{"class":39},[33,7834,7835],{"class":43}," test01",[33,7837,4235],{"class":47},[33,7839,7840],{"class":35,"line":51},[33,7841,3820],{"class":47},[33,7843,7844,7846,7848,7851,7853],{"class":35,"line":64},[33,7845,3825],{"class":47},[33,7847,3450],{"class":39},[33,7849,7850],{"class":60},"\"你好\"",[33,7852,3450],{"class":39},[33,7854,3472],{"class":47},[33,7856,7857],{"class":35,"line":76},[33,7858,1010],{"class":47},[33,7860,7861,7863,7865],{"class":35,"line":87},[33,7862,2436],{"class":39},[33,7864,4232],{"class":43},[33,7866,4235],{"class":47},[33,7868,7869],{"class":35,"line":96},[33,7870,3820],{"class":47},[33,7872,7873],{"class":35,"line":103},[33,7874,7875],{"class":2487},"    \u002F\u002F函数调用\n",[33,7877,7878,7881],{"class":35,"line":108},[33,7879,7880],{"class":43},"    test01",[33,7882,7883],{"class":47},"();\n",[33,7885,7886],{"class":35,"line":119},[33,7887,1010],{"class":47},[328,7889,7890],{"start":51},[331,7891,7892],{},"有参无返",[23,7894,7896],{"className":2422,"code":7895,"language":2424,"meta":28,"style":28},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[30,7897,7898,7913,7917,7929,7933,7941,7945,7956],{"__ignoreMap":28},[33,7899,7900,7902,7905,7907,7909,7911],{"class":35,"line":36},[33,7901,7611],{"class":39},[33,7903,7904],{"class":43}," test02",[33,7906,133],{"class":47},[33,7908,2436],{"class":39},[33,7910,3672],{"class":289},[33,7912,226],{"class":47},[33,7914,7915],{"class":35,"line":51},[33,7916,3820],{"class":47},[33,7918,7919,7921,7923,7925,7927],{"class":35,"line":64},[33,7920,3825],{"class":47},[33,7922,3450],{"class":39},[33,7924,7850],{"class":60},[33,7926,3450],{"class":39},[33,7928,3472],{"class":47},[33,7930,7931],{"class":35,"line":76},[33,7932,1010],{"class":47},[33,7934,7935,7937,7939],{"class":35,"line":87},[33,7936,2436],{"class":39},[33,7938,4232],{"class":43},[33,7940,4235],{"class":47},[33,7942,7943],{"class":35,"line":96},[33,7944,3820],{"class":47},[33,7946,7947,7950,7952,7954],{"class":35,"line":103},[33,7948,7949],{"class":43},"    test02",[33,7951,133],{"class":47},[33,7953,2734],{"class":72},[33,7955,4976],{"class":47},[33,7957,7958],{"class":35,"line":108},[33,7959,1010],{"class":47},[328,7961,7962],{"start":64},[331,7963,7964],{},"无参有返",[23,7966,7968],{"className":2422,"code":7967,"language":2424,"meta":28,"style":28},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[30,7969,7970,7979,7983,7995,8004,8008,8016,8020,8033,8052],{"__ignoreMap":28},[33,7971,7972,7974,7977],{"class":35,"line":36},[33,7973,2436],{"class":39},[33,7975,7976],{"class":43}," test03",[33,7978,4235],{"class":47},[33,7980,7981],{"class":35,"line":51},[33,7982,3820],{"class":47},[33,7984,7985,7987,7989,7991,7993],{"class":35,"line":64},[33,7986,3825],{"class":47},[33,7988,3450],{"class":39},[33,7990,7850],{"class":60},[33,7992,3450],{"class":39},[33,7994,3472],{"class":47},[33,7996,7997,7999,8002],{"class":35,"line":76},[33,7998,90],{"class":39},[33,8000,8001],{"class":72}," 100",[33,8003,3567],{"class":47},[33,8005,8006],{"class":35,"line":87},[33,8007,1010],{"class":47},[33,8009,8010,8012,8014],{"class":35,"line":96},[33,8011,2436],{"class":39},[33,8013,4232],{"class":43},[33,8015,4235],{"class":47},[33,8017,8018],{"class":35,"line":103},[33,8019,3820],{"class":47},[33,8021,8022,8024,8026,8028,8031],{"class":35,"line":108},[33,8023,4244],{"class":39},[33,8025,7464],{"class":47},[33,8027,57],{"class":39},[33,8029,8030],{"class":43},"test03",[33,8032,7883],{"class":47},[33,8034,8035,8037,8039,8041,8043,8045,8047,8049],{"class":35,"line":119},[33,8036,3825],{"class":47},[33,8038,3450],{"class":39},[33,8040,7654],{"class":60},[33,8042,3450],{"class":39},[33,8044,7489],{"class":47},[33,8046,3450],{"class":39},[33,8048,3515],{"class":47},[33,8050,8051],{"class":2487}," \u002F\u002F100\n",[33,8053,8054],{"class":35,"line":128},[33,8055,1010],{"class":47},[19,8057,8058],{},"4.有参有返",[23,8060,8062],{"className":2422,"code":8061,"language":2424,"meta":28,"style":28},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[30,8063,8064,8079,8083,8095,8101,8105,8114,8118,8130,8144,8159],{"__ignoreMap":28},[33,8065,8066,8068,8071,8073,8075,8077],{"class":35,"line":36},[33,8067,2436],{"class":39},[33,8069,8070],{"class":43}," test04",[33,8072,133],{"class":47},[33,8074,2436],{"class":39},[33,8076,3672],{"class":289},[33,8078,226],{"class":47},[33,8080,8081],{"class":35,"line":51},[33,8082,3820],{"class":47},[33,8084,8085,8087,8089,8091,8093],{"class":35,"line":64},[33,8086,3825],{"class":47},[33,8088,3450],{"class":39},[33,8090,1770],{"class":60},[33,8092,3450],{"class":39},[33,8094,3472],{"class":47},[33,8096,8097,8099],{"class":35,"line":76},[33,8098,90],{"class":39},[33,8100,3706],{"class":47},[33,8102,8103],{"class":35,"line":87},[33,8104,1010],{"class":47},[33,8106,8107,8109,8112],{"class":35,"line":96},[33,8108,2436],{"class":39},[33,8110,8111],{"class":43}," mian",[33,8113,4235],{"class":47},[33,8115,8116],{"class":35,"line":103},[33,8117,3820],{"class":47},[33,8119,8120,8122,8124,8126,8128],{"class":35,"line":108},[33,8121,4244],{"class":39},[33,8123,5090],{"class":47},[33,8125,57],{"class":39},[33,8127,720],{"class":72},[33,8129,3567],{"class":47},[33,8131,8132,8134,8136,8138,8141],{"class":35,"line":119},[33,8133,4244],{"class":39},[33,8135,5106],{"class":47},[33,8137,57],{"class":39},[33,8139,8140],{"class":43},"test04",[33,8142,8143],{"class":47},"(b);\n",[33,8145,8146,8148,8150,8152,8154,8156],{"class":35,"line":128},[33,8147,3825],{"class":47},[33,8149,3450],{"class":39},[33,8151,2712],{"class":47},[33,8153,3450],{"class":39},[33,8155,3515],{"class":47},[33,8157,8158],{"class":2487}," \u002F\u002F1\n",[33,8160,8161],{"class":35,"line":1753},[33,8162,1010],{"class":47},[14,8164,8166],{"id":8165},"_25函数的声明","2.5函数的声明",[19,8168,8169],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,8171,8172,8173],{},"函数的",[2575,8174,8175],{},"声明可以多次，但是函数的定义只能有一次",[23,8177,8179],{"className":2422,"code":8178,"language":2424,"meta":28,"style":28},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[30,8180,8181,8186,8191,8216,8225,8229,8241,8253,8269,8273,8293,8297,8316],{"__ignoreMap":28},[33,8182,8183],{"class":35,"line":36},[33,8184,8185],{"class":2487},"\u002F\u002F函数声明\n",[33,8187,8188],{"class":35,"line":51},[33,8189,8190],{"class":2487},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[33,8192,8193,8195,8198,8200,8202,8204,8206,8208,8210,8213],{"class":35,"line":64},[33,8194,2436],{"class":39},[33,8196,8197],{"class":43}," max",[33,8199,133],{"class":47},[33,8201,2436],{"class":39},[33,8203,3672],{"class":289},[33,8205,2799],{"class":47},[33,8207,2436],{"class":39},[33,8209,5090],{"class":289},[33,8211,8212],{"class":47},");",[33,8214,8215],{"class":2487},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[33,8217,8218,8220,8222],{"class":35,"line":76},[33,8219,2436],{"class":39},[33,8221,4232],{"class":43},[33,8223,8224],{"class":47},"() \n",[33,8226,8227],{"class":35,"line":87},[33,8228,3820],{"class":47},[33,8230,8231,8233,8235,8237,8239],{"class":35,"line":96},[33,8232,4244],{"class":39},[33,8234,3672],{"class":47},[33,8236,57],{"class":39},[33,8238,1279],{"class":72},[33,8240,3567],{"class":47},[33,8242,8243,8245,8247,8249,8251],{"class":35,"line":103},[33,8244,4244],{"class":39},[33,8246,5090],{"class":47},[33,8248,57],{"class":39},[33,8250,1284],{"class":72},[33,8252,3567],{"class":47},[33,8254,8255,8257,8259,8262,8265,8267],{"class":35,"line":108},[33,8256,3825],{"class":47},[33,8258,3450],{"class":39},[33,8260,8261],{"class":43},"max",[33,8263,8264],{"class":47},"(a,b)",[33,8266,3450],{"class":39},[33,8268,3472],{"class":47},[33,8270,8271],{"class":35,"line":119},[33,8272,1010],{"class":47},[33,8274,8275,8277,8279,8281,8283,8285,8287,8289,8291],{"class":35,"line":128},[33,8276,2436],{"class":39},[33,8278,8197],{"class":43},[33,8280,133],{"class":47},[33,8282,2436],{"class":39},[33,8284,3672],{"class":289},[33,8286,2799],{"class":47},[33,8288,2436],{"class":39},[33,8290,5090],{"class":289},[33,8292,226],{"class":47},[33,8294,8295],{"class":35,"line":1753},[33,8296,3820],{"class":47},[33,8298,8299,8301,8303,8305,8307,8309,8311,8313],{"class":35,"line":1763},[33,8300,90],{"class":39},[33,8302,3672],{"class":47},[33,8304,3367],{"class":39},[33,8306,2687],{"class":47},[33,8308,3393],{"class":39},[33,8310,2663],{"class":47},[33,8312,387],{"class":39},[33,8314,8315],{"class":47},"b;\n",[33,8317,8318],{"class":35,"line":1775},[33,8319,1010],{"class":47},[14,8321,8323],{"id":8322},"_26函数的分文件编写","2.6函数的分文件编写",[19,8325,8326],{},"4个步骤：",[3413,8328,8329,8332,8335,8338],{},[331,8330,8331],{},"1.创建后缀名为.h的头文件",[331,8333,8334],{},"2.创建后缀名为.cpp的源文件",[331,8336,8337],{},"3.在头文件中写函数的定义",[331,8339,8340],{},"4.在源文件中写函数的定义\n示例：",[19,8342,8343],{},"头文件：swap.h",[23,8345,8347],{"className":2422,"code":8346,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[30,8348,8349,8355,8365,8369],{"__ignoreMap":28},[33,8350,8351,8353],{"class":35,"line":36},[33,8352,4209],{"class":39},[33,8354,4212],{"class":60},[33,8356,8357,8359,8361,8363],{"class":35,"line":51},[33,8358,4217],{"class":39},[33,8360,4220],{"class":39},[33,8362,4223],{"class":43},[33,8364,3567],{"class":47},[33,8366,8367],{"class":35,"line":64},[33,8368,8185],{"class":2487},[33,8370,8371,8373,8375,8377,8379,8381,8383,8385,8387],{"class":35,"line":76},[33,8372,7611],{"class":39},[33,8374,7614],{"class":43},[33,8376,133],{"class":47},[33,8378,2436],{"class":39},[33,8380,3672],{"class":289},[33,8382,2799],{"class":47},[33,8384,2436],{"class":39},[33,8386,5090],{"class":289},[33,8388,4976],{"class":47},[19,8390,8391],{},"源文件：swap.cpp",[23,8393,8395],{"className":2422,"code":8394,"language":2424,"meta":28,"style":28},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[30,8396,8397,8404,8409,8429,8433,8444,8453,8462,8479,8496],{"__ignoreMap":28},[33,8398,8399,8401],{"class":35,"line":36},[33,8400,4209],{"class":39},[33,8402,8403],{"class":60}," \"swap.h\"\n",[33,8405,8406],{"class":35,"line":51},[33,8407,8408],{"class":2487},"\u002F\u002F函数的定义\n",[33,8410,8411,8413,8415,8417,8419,8421,8423,8425,8427],{"class":35,"line":64},[33,8412,7611],{"class":39},[33,8414,7614],{"class":43},[33,8416,133],{"class":47},[33,8418,2436],{"class":39},[33,8420,3672],{"class":289},[33,8422,2799],{"class":47},[33,8424,2436],{"class":39},[33,8426,5090],{"class":289},[33,8428,226],{"class":47},[33,8430,8431],{"class":35,"line":76},[33,8432,3820],{"class":47},[33,8434,8435,8437,8439,8441],{"class":35,"line":87},[33,8436,4244],{"class":39},[33,8438,6507],{"class":47},[33,8440,57],{"class":39},[33,8442,8443],{"class":47},"a;\n",[33,8445,8446,8449,8451],{"class":35,"line":96},[33,8447,8448],{"class":47},"    a",[33,8450,57],{"class":39},[33,8452,8315],{"class":47},[33,8454,8455,8458,8460],{"class":35,"line":103},[33,8456,8457],{"class":47},"    b",[33,8459,57],{"class":39},[33,8461,6532],{"class":47},[33,8463,8464,8466,8468,8471,8473,8475,8477],{"class":35,"line":108},[33,8465,3825],{"class":47},[33,8467,3450],{"class":39},[33,8469,8470],{"class":60},"\"a=\"",[33,8472,3450],{"class":39},[33,8474,2663],{"class":47},[33,8476,3450],{"class":39},[33,8478,3472],{"class":47},[33,8480,8481,8483,8485,8488,8490,8492,8494],{"class":35,"line":119},[33,8482,3825],{"class":47},[33,8484,3450],{"class":39},[33,8486,8487],{"class":60},"\"b=\"",[33,8489,3450],{"class":39},[33,8491,2687],{"class":47},[33,8493,3450],{"class":39},[33,8495,3472],{"class":47},[33,8497,8498],{"class":35,"line":128},[33,8499,1010],{"class":47},[2331,8501,8502],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":8504},[8505,8506,8507,8508,8509,8510],{"id":7421,"depth":51,"text":7422},{"id":7508,"depth":51,"text":7509},{"id":7591,"depth":51,"text":7592},{"id":7817,"depth":51,"text":7818},{"id":8165,"depth":51,"text":8166},{"id":8322,"depth":51,"text":8323},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7413,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8517,"title":8518,"body":8519,"description":8526,"extension":2360,"meta":9931,"navigation":99,"path":9932,"seo":9933,"stem":9934,"__hash__":9935},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8520,"toc":9921},[8521,8524,8527,8531,8693,8697,8700,8703,8706,8709,8849,8853,8856,8859,8862,8927,8931,8936,9003,9006,9010,9013,9024,9029,9049,9052,9057,9076,9079,9083,9102,9105,9109,9344,9348,9351,9354,9357,9519,9522,9526,9529,9535,9918],[10,8522,8518],{"id":8523},"_3指针",[19,8525,8526],{},"通过指针保存一个地址，指针就是个地址",[14,8528,8530],{"id":8529},"_31定义指针","3.1定义指针",[23,8532,8534],{"className":2422,"code":8533,"language":2424,"meta":28,"style":28},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[30,8535,8536,8544,8548,8553,8565,8570,8578,8588,8606,8626,8630,8635,8640,8645,8659,8675,8689],{"__ignoreMap":28},[33,8537,8538,8540,8542],{"class":35,"line":36},[33,8539,2436],{"class":39},[33,8541,4232],{"class":43},[33,8543,4235],{"class":47},[33,8545,8546],{"class":35,"line":51},[33,8547,3820],{"class":47},[33,8549,8550],{"class":35,"line":64},[33,8551,8552],{"class":2487},"    \u002F\u002F1.定义指针\n",[33,8554,8555,8557,8559,8561,8563],{"class":35,"line":76},[33,8556,4244],{"class":39},[33,8558,3672],{"class":47},[33,8560,57],{"class":39},[33,8562,1279],{"class":72},[33,8564,3567],{"class":47},[33,8566,8567],{"class":35,"line":87},[33,8568,8569],{"class":2487},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[33,8571,8572,8575],{"class":35,"line":96},[33,8573,8574],{"class":39},"    int*",[33,8576,8577],{"class":47},"p;\n",[33,8579,8580,8583,8586],{"class":35,"line":103},[33,8581,8582],{"class":47},"    p",[33,8584,8585],{"class":39},"=&",[33,8587,8443],{"class":47},[33,8589,8590,8592,8594,8597,8600,8602,8604],{"class":35,"line":108},[33,8591,3825],{"class":47},[33,8593,3450],{"class":39},[33,8595,8596],{"class":60},"\"a的地址为：\"",[33,8598,8599],{"class":39},"\u003C\u003C&",[33,8601,2663],{"class":47},[33,8603,3450],{"class":39},[33,8605,3472],{"class":47},[33,8607,8608,8610,8612,8615,8617,8619,8621,8623],{"class":35,"line":119},[33,8609,3825],{"class":47},[33,8611,3450],{"class":39},[33,8613,8614],{"class":60},"\"指针p为：\"",[33,8616,3450],{"class":39},[33,8618,19],{"class":47},[33,8620,3450],{"class":39},[33,8622,3515],{"class":47},[33,8624,8625],{"class":2487},"\u002F\u002F指针p表示的就是a的地址\n",[33,8627,8628],{"class":35,"line":128},[33,8629,100],{"emptyLinePlaceholder":99},[33,8631,8632],{"class":35,"line":1753},[33,8633,8634],{"class":2487},"    \u002F\u002F2.使用指针\n",[33,8636,8637],{"class":35,"line":1763},[33,8638,8639],{"class":2487},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[33,8641,8642],{"class":35,"line":1775},[33,8643,8644],{"class":2487},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[33,8646,8647,8650,8652,8654,8657],{"class":35,"line":1780},[33,8648,8649],{"class":39},"    *",[33,8651,19],{"class":47},[33,8653,57],{"class":39},[33,8655,8656],{"class":72},"1000",[33,8658,3567],{"class":47},[33,8660,8661,8663,8666,8668,8670,8672],{"class":35,"line":1785},[33,8662,3825],{"class":47},[33,8664,8665],{"class":39},"\u003C\u003C*",[33,8667,19],{"class":47},[33,8669,3450],{"class":39},[33,8671,3515],{"class":47},[33,8673,8674],{"class":2487},"\u002F\u002F1000\n",[33,8676,8677,8679,8681,8683,8685,8687],{"class":35,"line":1940},[33,8678,3825],{"class":47},[33,8680,3450],{"class":39},[33,8682,2663],{"class":47},[33,8684,3450],{"class":39},[33,8686,3515],{"class":47},[33,8688,8674],{"class":2487},[33,8690,8691],{"class":35,"line":2183},[33,8692,1010],{"class":47},[14,8694,8696],{"id":8695},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8698,8699],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8701,8702],{},"在32位操作系统下：占用4个字节空间",[19,8704,8705],{},"在64位操作系统下：占用8个字节空间",[19,8707,8708],{},"上方是不管啥数据类型的",[23,8710,8712],{"className":2422,"code":8711,"language":2424,"meta":28,"style":28},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[30,8713,8714,8722,8726,8731,8743,8748,8753,8758,8771,8793,8819,8845],{"__ignoreMap":28},[33,8715,8716,8718,8720],{"class":35,"line":36},[33,8717,2436],{"class":39},[33,8719,4232],{"class":43},[33,8721,4235],{"class":47},[33,8723,8724],{"class":35,"line":51},[33,8725,3820],{"class":47},[33,8727,8728],{"class":35,"line":64},[33,8729,8730],{"class":2487},"    \u002F\u002F指针所占内存空间\n",[33,8732,8733,8735,8737,8739,8741],{"class":35,"line":76},[33,8734,4244],{"class":39},[33,8736,3672],{"class":47},[33,8738,57],{"class":39},[33,8740,1279],{"class":72},[33,8742,3567],{"class":47},[33,8744,8745],{"class":35,"line":87},[33,8746,8747],{"class":2487},"    \u002F\u002Fint *p;\n",[33,8749,8750],{"class":35,"line":96},[33,8751,8752],{"class":2487},"    \u002F\u002Fp=&a;\n",[33,8754,8755],{"class":35,"line":103},[33,8756,8757],{"class":2487},"    \u002F\u002F上述可以写为以下：\n",[33,8759,8760,8762,8765,8767,8769],{"class":35,"line":108},[33,8761,4244],{"class":39},[33,8763,8764],{"class":39}," *",[33,8766,19],{"class":47},[33,8768,8585],{"class":39},[33,8770,8443],{"class":47},[33,8772,8773,8776,8778,8781,8783,8786,8788,8790],{"class":35,"line":119},[33,8774,8775],{"class":47},"    cout ",[33,8777,3450],{"class":39},[33,8779,8780],{"class":60},"\"sizeof(int *)\"",[33,8782,3646],{"class":39},[33,8784,8785],{"class":47},"(p)",[33,8787,3450],{"class":39},[33,8789,3515],{"class":47},[33,8791,8792],{"class":2487},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[33,8794,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813,8816],{"class":35,"line":128},[33,8796,8775],{"class":47},[33,8798,3450],{"class":39},[33,8800,8780],{"class":60},[33,8802,3646],{"class":39},[33,8804,133],{"class":47},[33,8806,2436],{"class":39},[33,8808,8764],{"class":39},[33,8810,2849],{"class":47},[33,8812,3450],{"class":39},[33,8814,8815],{"class":47},"endl",[33,8817,8818],{"class":2487},"  \u002F\u002F4字节(32位的话)\n",[33,8820,8821,8823,8825,8828,8830,8832,8834,8836,8838,8840,8842],{"class":35,"line":1753},[33,8822,8775],{"class":47},[33,8824,3450],{"class":39},[33,8826,8827],{"class":60},"\"sizeof(char *)\"",[33,8829,3646],{"class":39},[33,8831,133],{"class":47},[33,8833,2523],{"class":39},[33,8835,8764],{"class":39},[33,8837,2849],{"class":47},[33,8839,3450],{"class":39},[33,8841,3515],{"class":47},[33,8843,8844],{"class":2487}," \u002F\u002F4字节(32位的话)\n",[33,8846,8847],{"class":35,"line":1763},[33,8848,1010],{"class":47},[14,8850,8852],{"id":8851},"_33空指针","3.3空指针",[19,8854,8855],{},"空指针：指针变量指向内存中编号为0的空间",[19,8857,8858],{},"用途：初始化指针变量",[19,8860,8861],{},"注意：空指针指向的内存是不可以访问的",[23,8863,8865],{"className":2422,"code":8864,"language":2424,"meta":28,"style":28},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[30,8866,8867,8875,8879,8884,8898,8903,8918,8923],{"__ignoreMap":28},[33,8868,8869,8871,8873],{"class":35,"line":36},[33,8870,2436],{"class":39},[33,8872,4232],{"class":43},[33,8874,4235],{"class":47},[33,8876,8877],{"class":35,"line":51},[33,8878,3820],{"class":47},[33,8880,8881],{"class":35,"line":64},[33,8882,8883],{"class":2487},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[33,8885,8886,8888,8890,8892,8894,8896],{"class":35,"line":76},[33,8887,4244],{"class":39},[33,8889,8764],{"class":39},[33,8891,19],{"class":47},[33,8893,57],{"class":39},[33,8895,4651],{"class":72},[33,8897,3567],{"class":47},[33,8899,8900],{"class":35,"line":87},[33,8901,8902],{"class":2487},"    \u002F\u002F2.空指针不能进行访问\n",[33,8904,8905,8907,8909,8911,8913,8915],{"class":35,"line":96},[33,8906,8649],{"class":39},[33,8908,19],{"class":47},[33,8910,57],{"class":39},[33,8912,2734],{"class":72},[33,8914,2484],{"class":47},[33,8916,8917],{"class":2487},"\u002F\u002F直接报错，压根不能访问\n",[33,8919,8920],{"class":35,"line":103},[33,8921,8922],{"class":2487},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[33,8924,8925],{"class":35,"line":108},[33,8926,1010],{"class":47},[14,8928,8930],{"id":8929},"_34野指针","3.4野指针",[19,8932,8933],{},[2575,8934,8935],{},"指针变量指向非法的内存空间",[23,8937,8939],{"className":2422,"code":8938,"language":2424,"meta":28,"style":28},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[30,8940,8941,8949,8953,8982,8987,8999],{"__ignoreMap":28},[33,8942,8943,8945,8947],{"class":35,"line":36},[33,8944,2436],{"class":39},[33,8946,4232],{"class":43},[33,8948,4235],{"class":47},[33,8950,8951],{"class":35,"line":51},[33,8952,3820],{"class":47},[33,8954,8955,8957,8959,8961,8963,8965,8967,8969,8971,8974,8977,8979],{"class":35,"line":64},[33,8956,4244],{"class":39},[33,8958,8764],{"class":39},[33,8960,19],{"class":47},[33,8962,57],{"class":39},[33,8964,133],{"class":47},[33,8966,2436],{"class":39},[33,8968,8764],{"class":39},[33,8970,2849],{"class":47},[33,8972,8973],{"class":39},"0x",[33,8975,8976],{"class":72},"1100",[33,8978,2484],{"class":47},[33,8980,8981],{"class":2487}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[33,8983,8984],{"class":35,"line":76},[33,8985,8986],{"class":2487},"    \u002F\u002F访问野指针报错\n",[33,8988,8989,8991,8993,8995,8997],{"class":35,"line":87},[33,8990,3825],{"class":47},[33,8992,8665],{"class":39},[33,8994,19],{"class":47},[33,8996,3450],{"class":39},[33,8998,3472],{"class":47},[33,9000,9001],{"class":35,"line":96},[33,9002,1010],{"class":47},[19,9004,9005],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,9007,9009],{"id":9008},"_35const修饰指针","3.5const修饰指针",[19,9011,9012],{},"三种情况：",[3413,9014,9015,9018,9021],{},[331,9016,9017],{},"const修饰指针 常量指针",[331,9019,9020],{},"const修饰常量 指针常量",[331,9022,9023],{},"const即修饰指针，又修饰常量",[328,9025,9026],{},[331,9027,9028],{},"常量指针",[23,9030,9032],{"className":2422,"code":9031,"language":2424,"meta":28,"style":28},"const int *p=&a;\n",[30,9033,9034],{"__ignoreMap":28},[33,9035,9036,9039,9041,9043,9045,9047],{"class":35,"line":36},[33,9037,9038],{"class":39},"const",[33,9040,4641],{"class":39},[33,9042,8764],{"class":39},[33,9044,19],{"class":47},[33,9046,8585],{"class":39},[33,9048,8443],{"class":47},[19,9050,9051],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[328,9053,9054],{"start":51},[331,9055,9056],{},"指针常量",[23,9058,9060],{"className":2422,"code":9059,"language":2424,"meta":28,"style":28},"int *const p=&a;\n",[30,9061,9062],{"__ignoreMap":28},[33,9063,9064,9066,9069,9072,9074],{"class":35,"line":36},[33,9065,2436],{"class":39},[33,9067,9068],{"class":39}," *const",[33,9070,9071],{"class":47}," p",[33,9073,8585],{"class":39},[33,9075,8443],{"class":47},[19,9077,9078],{},"指针的指向不可以改，指针指向的值可以改",[328,9080,9081],{"start":64},[331,9082,9023],{},[23,9084,9086],{"className":2422,"code":9085,"language":2424,"meta":28,"style":28},"const int *const p=&a;\n",[30,9087,9088],{"__ignoreMap":28},[33,9089,9090,9092,9094,9096,9098,9100],{"class":35,"line":36},[33,9091,9038],{"class":39},[33,9093,4641],{"class":39},[33,9095,9068],{"class":39},[33,9097,9071],{"class":47},[33,9099,8585],{"class":39},[33,9101,8443],{"class":47},[19,9103,9104],{},"指针的指向和指针指向的值都不可以改变",[14,9106,9108],{"id":9107},"_36指针和数组","3.6指针和数组",[23,9110,9112],{"className":2422,"code":9111,"language":2424,"meta":28,"style":28},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[30,9113,9114,9122,9126,9131,9185,9206,9222,9238,9249,9266,9271,9285,9311,9315,9327,9336,9340],{"__ignoreMap":28},[33,9115,9116,9118,9120],{"class":35,"line":36},[33,9117,2436],{"class":39},[33,9119,4232],{"class":43},[33,9121,4235],{"class":47},[33,9123,9124],{"class":35,"line":51},[33,9125,3820],{"class":47},[33,9127,9128],{"class":35,"line":64},[33,9129,9130],{"class":2487},"    \u002F\u002F利用指针访问数组中的元素\n",[33,9132,9133,9135,9137,9139,9141,9143,9145,9147,9149,9151,9153,9155,9157,9159,9161,9163,9165,9167,9169,9171,9173,9175,9177,9179,9181,9183],{"class":35,"line":76},[33,9134,4244],{"class":39},[33,9136,6216],{"class":47},[33,9138,1279],{"class":72},[33,9140,3348],{"class":47},[33,9142,57],{"class":39},[33,9144,204],{"class":47},[33,9146,720],{"class":72},[33,9148,2799],{"class":47},[33,9150,725],{"class":72},[33,9152,2799],{"class":47},[33,9154,730],{"class":72},[33,9156,2799],{"class":47},[33,9158,753],{"class":72},[33,9160,2799],{"class":47},[33,9162,758],{"class":72},[33,9164,2799],{"class":47},[33,9166,2765],{"class":72},[33,9168,2799],{"class":47},[33,9170,2790],{"class":72},[33,9172,2799],{"class":47},[33,9174,2816],{"class":72},[33,9176,2799],{"class":47},[33,9178,2840],{"class":72},[33,9180,2799],{"class":47},[33,9182,1279],{"class":72},[33,9184,6249],{"class":47},[33,9186,9187,9189,9191,9194,9196,9198,9200,9202,9204],{"class":35,"line":87},[33,9188,3825],{"class":47},[33,9190,3450],{"class":39},[33,9192,9193],{"class":60},"\"数组的第一个元素为：\"",[33,9195,3450],{"class":39},[33,9197,6160],{"class":47},[33,9199,2617],{"class":72},[33,9201,3348],{"class":47},[33,9203,3450],{"class":39},[33,9205,3472],{"class":47},[33,9207,9208,9210,9212,9214,9216,9219],{"class":35,"line":96},[33,9209,4244],{"class":39},[33,9211,8764],{"class":39},[33,9213,19],{"class":47},[33,9215,57],{"class":39},[33,9217,9218],{"class":47},"arr;",[33,9220,9221],{"class":2487},"\u002F\u002F注意数才要加取地址符号&\n",[33,9223,9224,9226,9228,9230,9232,9234,9236],{"class":35,"line":103},[33,9225,3825],{"class":47},[33,9227,3450],{"class":39},[33,9229,9193],{"class":60},[33,9231,8665],{"class":39},[33,9233,19],{"class":47},[33,9235,3450],{"class":39},[33,9237,3472],{"class":47},[33,9239,9240,9242,9244,9246],{"class":35,"line":108},[33,9241,8582],{"class":47},[33,9243,4551],{"class":39},[33,9245,2484],{"class":47},[33,9247,9248],{"class":2487}," \u002F\u002F让指针向后偏移4个字节\n",[33,9250,9251,9253,9255,9258,9260,9262,9264],{"class":35,"line":119},[33,9252,3825],{"class":47},[33,9254,3450],{"class":39},[33,9256,9257],{"class":60},"\"数组的第二个元素为：\"",[33,9259,8665],{"class":39},[33,9261,19],{"class":47},[33,9263,3450],{"class":39},[33,9265,3472],{"class":47},[33,9267,9268],{"class":35,"line":128},[33,9269,9270],{"class":2487},"    \u002F\u002F利用指针遍历数组\n",[33,9272,9273,9275,9277,9280,9282],{"class":35,"line":1753},[33,9274,4244],{"class":39},[33,9276,8764],{"class":39},[33,9278,9279],{"class":47},"p2",[33,9281,57],{"class":39},[33,9283,9284],{"class":47},"arr;\n",[33,9286,9287,9289,9291,9293,9295,9297,9299,9301,9303,9305,9307,9309],{"class":35,"line":1763},[33,9288,675],{"class":39},[33,9290,3924],{"class":47},[33,9292,2436],{"class":39},[33,9294,5289],{"class":47},[33,9296,57],{"class":39},[33,9298,2617],{"class":72},[33,9300,5296],{"class":47},[33,9302,2226],{"class":39},[33,9304,1279],{"class":72},[33,9306,5296],{"class":47},[33,9308,4551],{"class":39},[33,9310,226],{"class":47},[33,9312,9313],{"class":35,"line":1775},[33,9314,4289],{"class":47},[33,9316,9317,9319,9321,9323,9325],{"class":35,"line":1780},[33,9318,5706],{"class":47},[33,9320,8665],{"class":39},[33,9322,9279],{"class":47},[33,9324,3450],{"class":39},[33,9326,3472],{"class":47},[33,9328,9329,9332,9334],{"class":35,"line":1785},[33,9330,9331],{"class":47},"        p2",[33,9333,4551],{"class":39},[33,9335,3567],{"class":47},[33,9337,9338],{"class":35,"line":1940},[33,9339,4446],{"class":47},[33,9341,9342],{"class":35,"line":2183},[33,9343,1010],{"class":47},[14,9345,9347],{"id":9346},"_37指针和函数","3.7指针和函数",[19,9349,9350],{},"利用指针做函数参数，可以修改实参的值",[19,9352,9353],{},"值传递：只改变形参，不改变实参",[19,9355,9356],{},"地址传递：",[23,9358,9360],{"className":2422,"code":9359,"language":2424,"meta":28,"style":28},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[30,9361,9362,9387,9391,9403,9414,9424,9428,9436,9440,9452,9464,9469,9485,9500,9515],{"__ignoreMap":28},[33,9363,9364,9366,9368,9370,9372,9374,9377,9379,9381,9383,9385],{"class":35,"line":36},[33,9365,7611],{"class":39},[33,9367,7614],{"class":43},[33,9369,133],{"class":47},[33,9371,2436],{"class":39},[33,9373,8764],{"class":39},[33,9375,9376],{"class":289},"p1",[33,9378,2799],{"class":47},[33,9380,2436],{"class":39},[33,9382,8764],{"class":39},[33,9384,9279],{"class":289},[33,9386,226],{"class":47},[33,9388,9389],{"class":35,"line":51},[33,9390,3820],{"class":47},[33,9392,9393,9395,9397,9400],{"class":35,"line":64},[33,9394,4244],{"class":39},[33,9396,6507],{"class":47},[33,9398,9399],{"class":39},"=*",[33,9401,9402],{"class":47},"p1;\n",[33,9404,9405,9407,9409,9411],{"class":35,"line":76},[33,9406,8649],{"class":39},[33,9408,9376],{"class":47},[33,9410,9399],{"class":39},[33,9412,9413],{"class":47},"p2;\n",[33,9415,9416,9418,9420,9422],{"class":35,"line":87},[33,9417,8649],{"class":39},[33,9419,9279],{"class":47},[33,9421,57],{"class":39},[33,9423,6532],{"class":47},[33,9425,9426],{"class":35,"line":96},[33,9427,1010],{"class":47},[33,9429,9430,9432,9434],{"class":35,"line":103},[33,9431,2436],{"class":39},[33,9433,4232],{"class":43},[33,9435,4235],{"class":47},[33,9437,9438],{"class":35,"line":108},[33,9439,3820],{"class":47},[33,9441,9442,9444,9446,9448,9450],{"class":35,"line":119},[33,9443,4244],{"class":39},[33,9445,3672],{"class":47},[33,9447,57],{"class":39},[33,9449,1279],{"class":72},[33,9451,3567],{"class":47},[33,9453,9454,9456,9458,9460,9462],{"class":35,"line":128},[33,9455,4244],{"class":39},[33,9457,5090],{"class":47},[33,9459,57],{"class":39},[33,9461,1284],{"class":72},[33,9463,3567],{"class":47},[33,9465,9466],{"class":35,"line":1753},[33,9467,9468],{"class":2487},"    \u002F\u002F地址传递\n",[33,9470,9471,9473,9475,9477,9480,9482],{"class":35,"line":1763},[33,9472,7808],{"class":43},[33,9474,133],{"class":47},[33,9476,2774],{"class":39},[33,9478,9479],{"class":47},"a,",[33,9481,2774],{"class":39},[33,9483,9484],{"class":47},"b);\n",[33,9486,9487,9489,9491,9493,9495,9497],{"class":35,"line":1775},[33,9488,3825],{"class":47},[33,9490,3450],{"class":39},[33,9492,2663],{"class":47},[33,9494,3450],{"class":39},[33,9496,3515],{"class":47},[33,9498,9499],{"class":2487},"\u002F\u002F20\n",[33,9501,9502,9504,9506,9508,9510,9512],{"class":35,"line":1780},[33,9503,3825],{"class":47},[33,9505,3450],{"class":39},[33,9507,2687],{"class":47},[33,9509,3450],{"class":39},[33,9511,3515],{"class":47},[33,9513,9514],{"class":2487},"\u002F\u002F10\n",[33,9516,9517],{"class":35,"line":1785},[33,9518,1010],{"class":47},[19,9520,9521],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9523,9525],{"id":9524},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9527,9528],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9530,9531,9532,9534],{},"例如数组：int arr",[33,9533,1279],{},"={4,3,6,9,1,2,10,8,7,5}",[23,9536,9538],{"className":2422,"code":9537,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[30,9539,9540,9546,9556,9580,9584,9615,9619,9653,9657,9675,9679,9690,9705,9720,9724,9728,9732,9736,9740,9748,9752,9757,9811,9823,9835,9840,9848,9852,9857,9882,9886,9901,9910,9914],{"__ignoreMap":28},[33,9541,9542,9544],{"class":35,"line":36},[33,9543,4209],{"class":39},[33,9545,4212],{"class":60},[33,9547,9548,9550,9552,9554],{"class":35,"line":51},[33,9549,4217],{"class":39},[33,9551,4220],{"class":39},[33,9553,4223],{"class":43},[33,9555,3567],{"class":47},[33,9557,9558,9560,9563,9565,9567,9569,9571,9573,9575,9578],{"class":35,"line":64},[33,9559,7611],{"class":39},[33,9561,9562],{"class":43}," bubbleSort",[33,9564,133],{"class":47},[33,9566,2436],{"class":39},[33,9568,8764],{"class":39},[33,9570,19],{"class":289},[33,9572,2799],{"class":47},[33,9574,2436],{"class":39},[33,9576,9577],{"class":289}," len",[33,9579,226],{"class":47},[33,9581,9582],{"class":35,"line":76},[33,9583,3820],{"class":47},[33,9585,9586,9588,9590,9592,9594,9596,9598,9600,9602,9605,9607,9609,9611,9613],{"class":35,"line":87},[33,9587,675],{"class":39},[33,9589,133],{"class":47},[33,9591,2436],{"class":39},[33,9593,5289],{"class":47},[33,9595,57],{"class":39},[33,9597,2617],{"class":72},[33,9599,5296],{"class":47},[33,9601,2226],{"class":39},[33,9603,9604],{"class":47},"len",[33,9606,2949],{"class":39},[33,9608,720],{"class":72},[33,9610,5296],{"class":47},[33,9612,4551],{"class":39},[33,9614,226],{"class":47},[33,9616,9617],{"class":35,"line":96},[33,9618,4289],{"class":47},[33,9620,9621,9623,9625,9627,9629,9631,9633,9635,9637,9639,9641,9643,9645,9647,9649,9651],{"class":35,"line":103},[33,9622,5658],{"class":39},[33,9624,133],{"class":47},[33,9626,2436],{"class":39},[33,9628,5665],{"class":47},[33,9630,57],{"class":39},[33,9632,2617],{"class":72},[33,9634,5672],{"class":47},[33,9636,2226],{"class":39},[33,9638,9604],{"class":47},[33,9640,2949],{"class":39},[33,9642,2861],{"class":47},[33,9644,2949],{"class":39},[33,9646,720],{"class":72},[33,9648,5672],{"class":47},[33,9650,4551],{"class":39},[33,9652,226],{"class":47},[33,9654,9655],{"class":35,"line":108},[33,9656,4767],{"class":47},[33,9658,9659,9661,9664,9666,9669,9671,9673],{"class":35,"line":119},[33,9660,6892],{"class":39},[33,9662,9663],{"class":47},"(p[j]",[33,9665,3367],{"class":39},[33,9667,9668],{"class":47},"p[j",[33,9670,880],{"class":39},[33,9672,720],{"class":72},[33,9674,6907],{"class":47},[33,9676,9677],{"class":35,"line":128},[33,9678,6912],{"class":47},[33,9680,9681,9683,9685,9687],{"class":35,"line":1753},[33,9682,6917],{"class":39},[33,9684,6507],{"class":47},[33,9686,57],{"class":39},[33,9688,9689],{"class":47},"p[j];\n",[33,9691,9692,9695,9697,9699,9701,9703],{"class":35,"line":1763},[33,9693,9694],{"class":47},"                p[j]",[33,9696,57],{"class":39},[33,9698,9668],{"class":47},[33,9700,880],{"class":39},[33,9702,720],{"class":72},[33,9704,6940],{"class":47},[33,9706,9707,9710,9712,9714,9716,9718],{"class":35,"line":1775},[33,9708,9709],{"class":47},"                p[j",[33,9711,880],{"class":39},[33,9713,720],{"class":72},[33,9715,3348],{"class":47},[33,9717,57],{"class":39},[33,9719,6532],{"class":47},[33,9721,9722],{"class":35,"line":1780},[33,9723,6960],{"class":47},[33,9725,9726],{"class":35,"line":1785},[33,9727,4786],{"class":47},[33,9729,9730],{"class":35,"line":1940},[33,9731,4446],{"class":47},[33,9733,9734],{"class":35,"line":2183},[33,9735,1010],{"class":47},[33,9737,9738],{"class":35,"line":2208},[33,9739,100],{"emptyLinePlaceholder":99},[33,9741,9742,9744,9746],{"class":35,"line":2234},[33,9743,2436],{"class":39},[33,9745,4232],{"class":43},[33,9747,4235],{"class":47},[33,9749,9750],{"class":35,"line":2239},[33,9751,3820],{"class":47},[33,9753,9754],{"class":35,"line":2247},[33,9755,9756],{"class":2487},"    \u002F\u002F 1.创建数组\n",[33,9758,9759,9761,9763,9765,9767,9769,9771,9773,9775,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797,9799,9801,9803,9805,9807,9809],{"class":35,"line":2255},[33,9760,4244],{"class":39},[33,9762,6216],{"class":47},[33,9764,1279],{"class":72},[33,9766,3348],{"class":47},[33,9768,57],{"class":39},[33,9770,204],{"class":47},[33,9772,753],{"class":72},[33,9774,2799],{"class":47},[33,9776,730],{"class":72},[33,9778,2799],{"class":47},[33,9780,2765],{"class":72},[33,9782,2799],{"class":47},[33,9784,2840],{"class":72},[33,9786,2799],{"class":47},[33,9788,720],{"class":72},[33,9790,2799],{"class":47},[33,9792,725],{"class":72},[33,9794,2799],{"class":47},[33,9796,1279],{"class":72},[33,9798,2799],{"class":47},[33,9800,2816],{"class":72},[33,9802,2799],{"class":47},[33,9804,2790],{"class":72},[33,9806,2799],{"class":47},[33,9808,758],{"class":72},[33,9810,6249],{"class":47},[33,9812,9813,9815,9817,9819,9821],{"class":35,"line":3992},[33,9814,4244],{"class":39},[33,9816,9577],{"class":47},[33,9818,57],{"class":39},[33,9820,1279],{"class":72},[33,9822,3567],{"class":47},[33,9824,9825,9827,9829,9831,9833],{"class":35,"line":4009},[33,9826,4244],{"class":39},[33,9828,8764],{"class":39},[33,9830,19],{"class":47},[33,9832,57],{"class":39},[33,9834,9284],{"class":47},[33,9836,9837],{"class":35,"line":4014},[33,9838,9839],{"class":2487},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[33,9841,9842,9845],{"class":35,"line":4019},[33,9843,9844],{"class":43},"    bubbleSort",[33,9846,9847],{"class":47},"(p,len);\n",[33,9849,9850],{"class":35,"line":4024},[33,9851,100],{"emptyLinePlaceholder":99},[33,9853,9854],{"class":35,"line":4038},[33,9855,9856],{"class":2487},"    \u002F\u002F 3.打印排序后的数组\n",[33,9858,9859,9861,9863,9865,9867,9869,9871,9873,9875,9878,9880],{"class":35,"line":4043},[33,9860,675],{"class":39},[33,9862,3924],{"class":47},[33,9864,2436],{"class":39},[33,9866,5289],{"class":47},[33,9868,57],{"class":39},[33,9870,2617],{"class":72},[33,9872,5469],{"class":47},[33,9874,2226],{"class":39},[33,9876,9877],{"class":47},"len; i",[33,9879,4551],{"class":39},[33,9881,226],{"class":47},[33,9883,9884],{"class":35,"line":4834},[33,9885,4289],{"class":47},[33,9887,9888,9890,9892,9894,9896,9899],{"class":35,"line":4848},[33,9889,5706],{"class":47},[33,9891,8665],{"class":39},[33,9893,19],{"class":47},[33,9895,3450],{"class":39},[33,9897,9898],{"class":60},"\"\"",[33,9900,3567],{"class":47},[33,9902,9903,9906,9908],{"class":35,"line":4856},[33,9904,9905],{"class":47},"        p",[33,9907,4551],{"class":39},[33,9909,3567],{"class":47},[33,9911,9912],{"class":35,"line":4861},[33,9913,4446],{"class":47},[33,9915,9916],{"class":35,"line":4867},[33,9917,1010],{"class":47},[2331,9919,9920],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":9922},[9923,9924,9925,9926,9927,9928,9929,9930],{"id":8529,"depth":51,"text":8530},{"id":8695,"depth":51,"text":8696},{"id":8851,"depth":51,"text":8852},{"id":8929,"depth":51,"text":8930},{"id":9008,"depth":51,"text":9009},{"id":9107,"depth":51,"text":9108},{"id":9346,"depth":51,"text":9347},{"id":9524,"depth":51,"text":9525},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8518,"description":8526},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9937,"title":9938,"body":9939,"description":9946,"extension":2360,"meta":12917,"navigation":99,"path":12918,"seo":12919,"stem":12920,"__hash__":12921},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9940,"toc":12908},[9941,9944,9947,9951,9954,9957,9968,10306,10309,10313,10316,10323,10578,10582,10585,10588,10743,10747,10750,10753,10959,10963,10966,11269,11272,11280,11284,11287,11438,11440,11451,11508,11512,11517,12173,12181,12184,12278,12280,12900,12905],[10,9942,9938],{"id":9943},"_4结构体",[19,9945,9946],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9948,9950],{"id":9949},"_41结构体定义与使用","4.1结构体定义与使用",[19,9952,9953],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9955,9956],{},"通过结构体创建变量的方式：",[3413,9958,9959,9962,9965],{},[331,9960,9961],{},"struct 结构体名 变量名",[331,9963,9964],{},"struct 结构体名 变量名={成员1值，成员2值...}",[331,9966,9967],{},"定义结构体时顺便创建变量",[23,9969,9971],{"className":2422,"code":9970,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[30,9972,9973,9979,9989,9996,10001,10009,10013,10018,10022,10027,10032,10037,10044,10049,10056,10060,10067,10071,10075,10079,10083,10087,10091,10097,10101,10107,10115,10123,10127,10132,10137,10148,10153,10165,10176,10187,10192,10216,10221,10227,10254,10259,10265,10277,10289,10301],{"__ignoreMap":28},[33,9974,9975,9977],{"class":35,"line":36},[33,9976,4209],{"class":39},[33,9978,4212],{"class":60},[33,9980,9981,9983,9985,9987],{"class":35,"line":51},[33,9982,4217],{"class":39},[33,9984,4220],{"class":39},[33,9986,4223],{"class":43},[33,9988,3567],{"class":47},[33,9990,9991,9993],{"class":35,"line":64},[33,9992,4209],{"class":39},[33,9994,9995],{"class":60},"\u003Cstring>\n",[33,9997,9998],{"class":35,"line":76},[33,9999,10000],{"class":2487},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[33,10002,10003,10006],{"class":35,"line":87},[33,10004,10005],{"class":39},"struct",[33,10007,10008],{"class":43}," Student\n",[33,10010,10011],{"class":35,"line":96},[33,10012,3820],{"class":47},[33,10014,10015],{"class":35,"line":103},[33,10016,10017],{"class":2487},"    \u002F\u002F成员列表\n",[33,10019,10020],{"class":35,"line":108},[33,10021,100],{"emptyLinePlaceholder":99},[33,10023,10024],{"class":35,"line":119},[33,10025,10026],{"class":2487},"    \u002F\u002F姓名\n",[33,10028,10029],{"class":35,"line":128},[33,10030,10031],{"class":47},"    string name;\n",[33,10033,10034],{"class":35,"line":1753},[33,10035,10036],{"class":2487},"    \u002F\u002F年龄\n",[33,10038,10039,10041],{"class":35,"line":1763},[33,10040,4244],{"class":39},[33,10042,10043],{"class":47}," age;\n",[33,10045,10046],{"class":35,"line":1775},[33,10047,10048],{"class":2487},"    \u002F\u002F分数\n",[33,10050,10051,10053],{"class":35,"line":1780},[33,10052,4244],{"class":39},[33,10054,10055],{"class":47}," score;\n",[33,10057,10058],{"class":35,"line":1785},[33,10059,6249],{"class":47},[33,10061,10062,10064],{"class":35,"line":1940},[33,10063,10005],{"class":39},[33,10065,10066],{"class":43}," School\n",[33,10068,10069],{"class":35,"line":2183},[33,10070,3820],{"class":47},[33,10072,10073],{"class":35,"line":2208},[33,10074,10017],{"class":2487},[33,10076,10077],{"class":35,"line":2234},[33,10078,100],{"emptyLinePlaceholder":99},[33,10080,10081],{"class":35,"line":2239},[33,10082,10026],{"class":2487},[33,10084,10085],{"class":35,"line":2247},[33,10086,10031],{"class":47},[33,10088,10089],{"class":35,"line":2255},[33,10090,10036],{"class":2487},[33,10092,10093,10095],{"class":35,"line":3992},[33,10094,4244],{"class":39},[33,10096,10043],{"class":47},[33,10098,10099],{"class":35,"line":4009},[33,10100,10048],{"class":2487},[33,10102,10103,10105],{"class":35,"line":4014},[33,10104,4244],{"class":39},[33,10106,10055],{"class":47},[33,10108,10109,10112],{"class":35,"line":4019},[33,10110,10111],{"class":47},"} s3;",[33,10113,10114],{"class":2487}," \u002F\u002F创建结构体时就创建了变量\n",[33,10116,10117,10119,10121],{"class":35,"line":4024},[33,10118,2436],{"class":39},[33,10120,4232],{"class":43},[33,10122,4235],{"class":47},[33,10124,10125],{"class":35,"line":4038},[33,10126,3820],{"class":47},[33,10128,10129],{"class":35,"line":4043},[33,10130,10131],{"class":2487},"    \u002F\u002F2.通过学生类型创建具体学生\n",[33,10133,10134],{"class":35,"line":4834},[33,10135,10136],{"class":2487},"    \u002F\u002F2.1 struct Student s1;\n",[33,10138,10139,10142,10145],{"class":35,"line":4848},[33,10140,10141],{"class":39},"    struct",[33,10143,10144],{"class":43}," Student",[33,10146,10147],{"class":47}," s1;\n",[33,10149,10150],{"class":35,"line":4856},[33,10151,10152],{"class":2487},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[33,10154,10155,10158,10160,10163],{"class":35,"line":4861},[33,10156,10157],{"class":47},"    s1.name",[33,10159,57],{"class":39},[33,10161,10162],{"class":60},"\"张三\"",[33,10164,3567],{"class":47},[33,10166,10167,10170,10172,10174],{"class":35,"line":4867},[33,10168,10169],{"class":47},"    s1.age",[33,10171,57],{"class":39},[33,10173,248],{"class":72},[33,10175,3567],{"class":47},[33,10177,10178,10181,10183,10185],{"class":35,"line":4873},[33,10179,10180],{"class":47},"    s1.score",[33,10182,57],{"class":39},[33,10184,2678],{"class":72},[33,10186,3567],{"class":47},[33,10188,10189],{"class":35,"line":4878},[33,10190,10191],{"class":2487},"    \u002F\u002F输出结果\n",[33,10193,10195,10197,10199,10202,10204,10207,10209,10212,10214],{"class":35,"line":10194},37,[33,10196,3825],{"class":47},[33,10198,3450],{"class":39},[33,10200,10201],{"class":47},"s1.name",[33,10203,3450],{"class":39},[33,10205,10206],{"class":47},"s1.age",[33,10208,3450],{"class":39},[33,10210,10211],{"class":47},"s1.score",[33,10213,3450],{"class":39},[33,10215,3472],{"class":47},[33,10217,10219],{"class":35,"line":10218},38,[33,10220,100],{"emptyLinePlaceholder":99},[33,10222,10224],{"class":35,"line":10223},39,[33,10225,10226],{"class":2487},"    \u002F\u002F2.2 struct Student s2={...}\n",[33,10228,10230,10232,10234,10237,10239,10241,10244,10246,10248,10250,10252],{"class":35,"line":10229},40,[33,10231,10141],{"class":39},[33,10233,10144],{"class":43},[33,10235,10236],{"class":47}," s2",[33,10238,57],{"class":39},[33,10240,204],{"class":47},[33,10242,10243],{"class":60},"\"王五\"",[33,10245,2799],{"class":47},[33,10247,248],{"class":72},[33,10249,2799],{"class":47},[33,10251,2678],{"class":72},[33,10253,6249],{"class":47},[33,10255,10257],{"class":35,"line":10256},41,[33,10258,100],{"emptyLinePlaceholder":99},[33,10260,10262],{"class":35,"line":10261},42,[33,10263,10264],{"class":2487},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[33,10266,10268,10271,10273,10275],{"class":35,"line":10267},43,[33,10269,10270],{"class":47},"    s3.name",[33,10272,57],{"class":39},[33,10274,5933],{"class":60},[33,10276,3567],{"class":47},[33,10278,10280,10283,10285,10287],{"class":35,"line":10279},44,[33,10281,10282],{"class":47},"    s3.age",[33,10284,57],{"class":39},[33,10286,248],{"class":72},[33,10288,3567],{"class":47},[33,10290,10292,10295,10297,10299],{"class":35,"line":10291},45,[33,10293,10294],{"class":47},"    s3.score",[33,10296,57],{"class":39},[33,10298,1284],{"class":72},[33,10300,3567],{"class":47},[33,10302,10304],{"class":35,"line":10303},46,[33,10305,1010],{"class":47},[19,10307,10308],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10310,10312],{"id":10311},"_42结构体数组","4.2结构体数组",[19,10314,10315],{},"将自定义的结构体放入到数组中方便维护",[19,10317,10318,10319,10322],{},"语法：struct 结构体名 数组名",[33,10320,10321],{},"元素个数","={ {}，{},...{} };",[23,10324,10326],{"className":2422,"code":10325,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[30,10327,10328,10334,10344,10350,10355,10361,10365,10369,10375,10381,10385,10389,10397,10401,10406,10421,10425,10441,10457,10461,10466,10482,10497,10512,10517,10543,10547,10570,10574],{"__ignoreMap":28},[33,10329,10330,10332],{"class":35,"line":36},[33,10331,4209],{"class":39},[33,10333,4212],{"class":60},[33,10335,10336,10338,10340,10342],{"class":35,"line":51},[33,10337,4217],{"class":39},[33,10339,4220],{"class":39},[33,10341,4223],{"class":43},[33,10343,3567],{"class":47},[33,10345,10346,10348],{"class":35,"line":64},[33,10347,4209],{"class":39},[33,10349,9995],{"class":60},[33,10351,10352],{"class":35,"line":76},[33,10353,10354],{"class":2487},"\u002F\u002F1.定义结构体\n",[33,10356,10357,10359],{"class":35,"line":87},[33,10358,10005],{"class":39},[33,10360,10008],{"class":43},[33,10362,10363],{"class":35,"line":96},[33,10364,3820],{"class":47},[33,10366,10367],{"class":35,"line":103},[33,10368,10031],{"class":47},[33,10370,10371,10373],{"class":35,"line":108},[33,10372,4244],{"class":39},[33,10374,10043],{"class":47},[33,10376,10377,10379],{"class":35,"line":119},[33,10378,4244],{"class":39},[33,10380,10055],{"class":47},[33,10382,10383],{"class":35,"line":128},[33,10384,100],{"emptyLinePlaceholder":99},[33,10386,10387],{"class":35,"line":1753},[33,10388,6249],{"class":47},[33,10390,10391,10393,10395],{"class":35,"line":1763},[33,10392,2436],{"class":39},[33,10394,4232],{"class":43},[33,10396,4235],{"class":47},[33,10398,10399],{"class":35,"line":1775},[33,10400,3820],{"class":47},[33,10402,10403],{"class":35,"line":1780},[33,10404,10405],{"class":2487},"    \u002F\u002F2.创建结构体数组\n",[33,10407,10408,10410,10412,10415,10417,10419],{"class":35,"line":1785},[33,10409,10141],{"class":39},[33,10411,10144],{"class":43},[33,10413,10414],{"class":47}," stuArray[",[33,10416,725],{"class":72},[33,10418,3348],{"class":47},[33,10420,7158],{"class":39},[33,10422,10423],{"class":35,"line":1940},[33,10424,4289],{"class":47},[33,10426,10427,10429,10431,10433,10435,10437,10439],{"class":35,"line":2183},[33,10428,7167],{"class":47},[33,10430,10162],{"class":60},[33,10432,2799],{"class":47},[33,10434,248],{"class":72},[33,10436,2799],{"class":47},[33,10438,2734],{"class":72},[33,10440,1111],{"class":47},[33,10442,10443,10445,10447,10449,10451,10453,10455],{"class":35,"line":2208},[33,10444,7167],{"class":47},[33,10446,5933],{"class":60},[33,10448,2799],{"class":47},[33,10450,2992],{"class":72},[33,10452,2799],{"class":47},[33,10454,2992],{"class":72},[33,10456,1010],{"class":47},[33,10458,10459],{"class":35,"line":2234},[33,10460,4446],{"class":47},[33,10462,10463],{"class":35,"line":2239},[33,10464,10465],{"class":2487},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[33,10467,10468,10471,10473,10476,10478,10480],{"class":35,"line":2247},[33,10469,10470],{"class":47},"    stuArray[",[33,10472,720],{"class":72},[33,10474,10475],{"class":47},"].name",[33,10477,57],{"class":39},[33,10479,5956],{"class":60},[33,10481,3567],{"class":47},[33,10483,10484,10486,10488,10491,10493,10495],{"class":35,"line":2255},[33,10485,10470],{"class":47},[33,10487,720],{"class":72},[33,10489,10490],{"class":47},"].age",[33,10492,57],{"class":39},[33,10494,725],{"class":72},[33,10496,3567],{"class":47},[33,10498,10499,10501,10503,10506,10508,10510],{"class":35,"line":3992},[33,10500,10470],{"class":47},[33,10502,720],{"class":72},[33,10504,10505],{"class":47},"].score",[33,10507,57],{"class":39},[33,10509,725],{"class":72},[33,10511,3567],{"class":47},[33,10513,10514],{"class":35,"line":4009},[33,10515,10516],{"class":2487},"    \u002F\u002F4.遍历结构体数组\n",[33,10518,10519,10521,10523,10525,10527,10529,10531,10533,10535,10537,10539,10541],{"class":35,"line":4014},[33,10520,675],{"class":39},[33,10522,3924],{"class":47},[33,10524,2436],{"class":39},[33,10526,5289],{"class":47},[33,10528,57],{"class":39},[33,10530,2617],{"class":72},[33,10532,5296],{"class":47},[33,10534,2226],{"class":39},[33,10536,725],{"class":72},[33,10538,5296],{"class":47},[33,10540,4551],{"class":39},[33,10542,226],{"class":47},[33,10544,10545],{"class":35,"line":4019},[33,10546,4289],{"class":47},[33,10548,10549,10551,10553,10556,10558,10561,10563,10566,10568],{"class":35,"line":4024},[33,10550,5706],{"class":47},[33,10552,3450],{"class":39},[33,10554,10555],{"class":47},"stuArray[i].name",[33,10557,3450],{"class":39},[33,10559,10560],{"class":47},"stuArray[i].age",[33,10562,3450],{"class":39},[33,10564,10565],{"class":47},"stuArray[i].score",[33,10567,3450],{"class":39},[33,10569,3472],{"class":47},[33,10571,10572],{"class":35,"line":4038},[33,10573,4446],{"class":47},[33,10575,10576],{"class":35,"line":4043},[33,10577,1010],{"class":47},[14,10579,10581],{"id":10580},"_43结构体指针","4.3结构体指针",[19,10583,10584],{},"作用：通过指针访问结构体中的成员",[19,10586,10587],{},"利用操作符->可以通过结构体指针访问结构体属性",[23,10589,10591],{"className":2422,"code":10590,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[30,10592,10593,10599,10609,10615,10619,10625,10629,10633,10639,10645,10649,10657,10661,10666,10691,10696,10711,10716,10739],{"__ignoreMap":28},[33,10594,10595,10597],{"class":35,"line":36},[33,10596,4209],{"class":39},[33,10598,4212],{"class":60},[33,10600,10601,10603,10605,10607],{"class":35,"line":51},[33,10602,4217],{"class":39},[33,10604,4220],{"class":39},[33,10606,4223],{"class":43},[33,10608,3567],{"class":47},[33,10610,10611,10613],{"class":35,"line":64},[33,10612,4209],{"class":39},[33,10614,9995],{"class":60},[33,10616,10617],{"class":35,"line":76},[33,10618,10354],{"class":2487},[33,10620,10621,10623],{"class":35,"line":87},[33,10622,10005],{"class":39},[33,10624,10008],{"class":43},[33,10626,10627],{"class":35,"line":96},[33,10628,3820],{"class":47},[33,10630,10631],{"class":35,"line":103},[33,10632,10031],{"class":47},[33,10634,10635,10637],{"class":35,"line":108},[33,10636,4244],{"class":39},[33,10638,10043],{"class":47},[33,10640,10641,10643],{"class":35,"line":119},[33,10642,4244],{"class":39},[33,10644,10055],{"class":47},[33,10646,10647],{"class":35,"line":128},[33,10648,6249],{"class":47},[33,10650,10651,10653,10655],{"class":35,"line":1753},[33,10652,2436],{"class":39},[33,10654,4232],{"class":43},[33,10656,4235],{"class":47},[33,10658,10659],{"class":35,"line":1763},[33,10660,3820],{"class":47},[33,10662,10663],{"class":35,"line":1775},[33,10664,10665],{"class":2487},"    \u002F\u002F创建学生结构体变量\n",[33,10667,10668,10670,10672,10675,10677,10679,10681,10683,10685,10687,10689],{"class":35,"line":1780},[33,10669,10141],{"class":39},[33,10671,10144],{"class":43},[33,10673,10674],{"class":47}," s",[33,10676,57],{"class":39},[33,10678,204],{"class":47},[33,10680,10162],{"class":60},[33,10682,2799],{"class":47},[33,10684,248],{"class":72},[33,10686,2799],{"class":47},[33,10688,3983],{"class":72},[33,10690,6249],{"class":47},[33,10692,10693],{"class":35,"line":1785},[33,10694,10695],{"class":2487},"    \u002F\u002F通过指针指向结构体变量\n",[33,10697,10698,10700,10702,10704,10706,10708],{"class":35,"line":1940},[33,10699,10141],{"class":39},[33,10701,10144],{"class":43},[33,10703,8764],{"class":39},[33,10705,19],{"class":47},[33,10707,8585],{"class":39},[33,10709,10710],{"class":47},"s\n",[33,10712,10713],{"class":35,"line":2183},[33,10714,10715],{"class":2487},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[33,10717,10718,10720,10722,10725,10727,10730,10732,10735,10737],{"class":35,"line":2208},[33,10719,3825],{"class":47},[33,10721,3450],{"class":39},[33,10723,10724],{"class":47},"p->name",[33,10726,3450],{"class":39},[33,10728,10729],{"class":47},"p->age",[33,10731,3450],{"class":39},[33,10733,10734],{"class":47},"p->score",[33,10736,3450],{"class":39},[33,10738,3472],{"class":47},[33,10740,10741],{"class":35,"line":2234},[33,10742,1010],{"class":47},[14,10744,10746],{"id":10745},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10748,10749],{},"作用：结构体中的成员可以是另一个结构体",[19,10751,10752],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[23,10754,10756],{"className":2422,"code":10755,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[30,10757,10758,10764,10774,10780,10785,10793,10797,10801,10807,10813,10817,10822,10829,10833,10840,10844,10850,10855,10859,10867,10871,10876,10881,10886,10897,10909,10920,10933,10944,10955],{"__ignoreMap":28},[33,10759,10760,10762],{"class":35,"line":36},[33,10761,4209],{"class":39},[33,10763,4212],{"class":60},[33,10765,10766,10768,10770,10772],{"class":35,"line":51},[33,10767,4217],{"class":39},[33,10769,4220],{"class":39},[33,10771,4223],{"class":43},[33,10773,3567],{"class":47},[33,10775,10776,10778],{"class":35,"line":64},[33,10777,4209],{"class":39},[33,10779,9995],{"class":60},[33,10781,10782],{"class":35,"line":76},[33,10783,10784],{"class":2487},"\u002F\u002F定义学生结构体\n",[33,10786,10787,10789,10791],{"class":35,"line":87},[33,10788,10005],{"class":39},[33,10790,10144],{"class":43},[33,10792,4931],{"class":47},[33,10794,10795],{"class":35,"line":96},[33,10796,3820],{"class":47},[33,10798,10799],{"class":35,"line":103},[33,10800,10031],{"class":47},[33,10802,10803,10805],{"class":35,"line":108},[33,10804,4244],{"class":39},[33,10806,10043],{"class":47},[33,10808,10809,10811],{"class":35,"line":119},[33,10810,4244],{"class":39},[33,10812,10055],{"class":47},[33,10814,10815],{"class":35,"line":128},[33,10816,1010],{"class":47},[33,10818,10819],{"class":35,"line":1753},[33,10820,10821],{"class":2487},"\u002F\u002F定义老师结构体\n",[33,10823,10824,10826],{"class":35,"line":1763},[33,10825,10005],{"class":39},[33,10827,10828],{"class":43}," Teacher\n",[33,10830,10831],{"class":35,"line":1775},[33,10832,3820],{"class":47},[33,10834,10835,10837],{"class":35,"line":1780},[33,10836,4244],{"class":39},[33,10838,10839],{"class":47}," id;\n",[33,10841,10842],{"class":35,"line":1785},[33,10843,10031],{"class":47},[33,10845,10846,10848],{"class":35,"line":1940},[33,10847,4244],{"class":39},[33,10849,10043],{"class":47},[33,10851,10852],{"class":35,"line":2183},[33,10853,10854],{"class":47},"    Student stu;\n",[33,10856,10857],{"class":35,"line":2208},[33,10858,1010],{"class":47},[33,10860,10861,10863,10865],{"class":35,"line":2234},[33,10862,2436],{"class":39},[33,10864,4232],{"class":43},[33,10866,8224],{"class":47},[33,10868,10869],{"class":35,"line":2239},[33,10870,3820],{"class":47},[33,10872,10873],{"class":35,"line":2247},[33,10874,10875],{"class":2487},"    \u002F\u002F结构体嵌套结构体\n",[33,10877,10878],{"class":35,"line":2255},[33,10879,10880],{"class":2487},"    \u002F\u002F创建老师\n",[33,10882,10883],{"class":35,"line":3992},[33,10884,10885],{"class":47},"    Teacher t;\n",[33,10887,10888,10891,10893,10895],{"class":35,"line":4009},[33,10889,10890],{"class":47},"    t.id",[33,10892,57],{"class":39},[33,10894,2734],{"class":72},[33,10896,3567],{"class":47},[33,10898,10899,10902,10904,10907],{"class":35,"line":4014},[33,10900,10901],{"class":47},"    t.name",[33,10903,57],{"class":39},[33,10905,10906],{"class":60},"\"老王\"",[33,10908,3567],{"class":47},[33,10910,10911,10914,10916,10918],{"class":35,"line":4019},[33,10912,10913],{"class":47},"    t.age",[33,10915,57],{"class":39},[33,10917,248],{"class":72},[33,10919,3567],{"class":47},[33,10921,10922,10925,10927,10930],{"class":35,"line":4024},[33,10923,10924],{"class":47},"    t.stu.name",[33,10926,57],{"class":39},[33,10928,10929],{"class":60},"\"小王\"",[33,10931,10932],{"class":47},"；\n",[33,10934,10935,10938,10940,10942],{"class":35,"line":4038},[33,10936,10937],{"class":47},"    t.stu.age",[33,10939,57],{"class":39},[33,10941,1284],{"class":72},[33,10943,3567],{"class":47},[33,10945,10946,10949,10951,10953],{"class":35,"line":4043},[33,10947,10948],{"class":47},"    t.stu.score",[33,10950,57],{"class":39},[33,10952,2765],{"class":72},[33,10954,3567],{"class":47},[33,10956,10957],{"class":35,"line":4834},[33,10958,1010],{"class":47},[14,10960,10962],{"id":10961},"_45结构体做函数参数","4.5结构体做函数参数",[19,10964,10965],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[23,10967,10969],{"className":2422,"code":10968,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[30,10970,10971,10977,10987,10993,10999,11003,11007,11013,11019,11023,11028,11033,11050,11054,11087,11091,11096,11115,11119,11150,11154,11162,11166,11175,11187,11199,11211,11224,11232,11245,11257,11265],{"__ignoreMap":28},[33,10972,10973,10975],{"class":35,"line":36},[33,10974,4209],{"class":39},[33,10976,4212],{"class":60},[33,10978,10979,10981,10983,10985],{"class":35,"line":51},[33,10980,4217],{"class":39},[33,10982,4220],{"class":39},[33,10984,4223],{"class":43},[33,10986,3567],{"class":47},[33,10988,10989,10991],{"class":35,"line":64},[33,10990,4209],{"class":39},[33,10992,9995],{"class":60},[33,10994,10995,10997],{"class":35,"line":76},[33,10996,10005],{"class":39},[33,10998,10008],{"class":43},[33,11000,11001],{"class":35,"line":87},[33,11002,3820],{"class":47},[33,11004,11005],{"class":35,"line":96},[33,11006,10031],{"class":47},[33,11008,11009,11011],{"class":35,"line":103},[33,11010,4244],{"class":39},[33,11012,10043],{"class":47},[33,11014,11015,11017],{"class":35,"line":108},[33,11016,4244],{"class":39},[33,11018,10055],{"class":47},[33,11020,11021],{"class":35,"line":119},[33,11022,6249],{"class":47},[33,11024,11025],{"class":35,"line":128},[33,11026,11027],{"class":2487},"\u002F\u002F打印学生信息的函数\n",[33,11029,11030],{"class":35,"line":1753},[33,11031,11032],{"class":2487},"\u002F\u002F值传递\n",[33,11034,11035,11037,11040,11042,11044,11046,11048],{"class":35,"line":1763},[33,11036,7611],{"class":39},[33,11038,11039],{"class":43}," printStudent1",[33,11041,133],{"class":47},[33,11043,10005],{"class":39},[33,11045,10144],{"class":43},[33,11047,10674],{"class":289},[33,11049,226],{"class":47},[33,11051,11052],{"class":35,"line":1775},[33,11053,3820],{"class":47},[33,11055,11056,11058,11060,11063,11065,11068,11070,11073,11075,11077,11079,11082,11084],{"class":35,"line":1780},[33,11057,8775],{"class":47},[33,11059,3450],{"class":39},[33,11061,11062],{"class":47}," s.name ",[33,11064,3450],{"class":39},[33,11066,11067],{"class":60}," \" \"",[33,11069,3718],{"class":39},[33,11071,11072],{"class":47}," s.age ",[33,11074,3450],{"class":39},[33,11076,11067],{"class":60},[33,11078,3718],{"class":39},[33,11080,11081],{"class":47}," s.score ",[33,11083,3450],{"class":39},[33,11085,11086],{"class":47}," endl;\n",[33,11088,11089],{"class":35,"line":1785},[33,11090,1010],{"class":47},[33,11092,11093],{"class":35,"line":1940},[33,11094,11095],{"class":2487},"\u002F\u002F地址传递\n",[33,11097,11098,11100,11103,11105,11107,11109,11111,11113],{"class":35,"line":2183},[33,11099,7611],{"class":39},[33,11101,11102],{"class":43}," printStudent2",[33,11104,133],{"class":47},[33,11106,10005],{"class":39},[33,11108,10144],{"class":43},[33,11110,8764],{"class":39},[33,11112,3109],{"class":289},[33,11114,226],{"class":47},[33,11116,11117],{"class":35,"line":2208},[33,11118,3820],{"class":47},[33,11120,11121,11123,11125,11128,11130,11132,11134,11137,11139,11141,11143,11146,11148],{"class":35,"line":2234},[33,11122,8775],{"class":47},[33,11124,3450],{"class":39},[33,11126,11127],{"class":47}," s->name ",[33,11129,3450],{"class":39},[33,11131,11067],{"class":60},[33,11133,3718],{"class":39},[33,11135,11136],{"class":47}," s->age ",[33,11138,3450],{"class":39},[33,11140,11067],{"class":60},[33,11142,3718],{"class":39},[33,11144,11145],{"class":47}," s->score ",[33,11147,3450],{"class":39},[33,11149,11086],{"class":47},[33,11151,11152],{"class":35,"line":2239},[33,11153,1010],{"class":47},[33,11155,11156,11158,11160],{"class":35,"line":2247},[33,11157,2436],{"class":39},[33,11159,4232],{"class":43},[33,11161,4235],{"class":47},[33,11163,11164],{"class":35,"line":2255},[33,11165,3820],{"class":47},[33,11167,11168,11170,11172],{"class":35,"line":3992},[33,11169,10141],{"class":39},[33,11171,10144],{"class":43},[33,11173,11174],{"class":47}," s;\n",[33,11176,11177,11180,11182,11185],{"class":35,"line":4009},[33,11178,11179],{"class":47},"    s.name ",[33,11181,57],{"class":39},[33,11183,11184],{"class":60}," \"张三\"",[33,11186,3567],{"class":47},[33,11188,11189,11192,11194,11197],{"class":35,"line":4014},[33,11190,11191],{"class":47},"    s.age ",[33,11193,57],{"class":39},[33,11195,11196],{"class":72}," 20",[33,11198,3567],{"class":47},[33,11200,11201,11204,11206,11209],{"class":35,"line":4019},[33,11202,11203],{"class":47},"    s.score ",[33,11205,57],{"class":39},[33,11207,11208],{"class":72}," 85",[33,11210,3567],{"class":47},[33,11212,11213,11215,11217,11220,11222],{"class":35,"line":4024},[33,11214,3825],{"class":47},[33,11216,3450],{"class":39},[33,11218,11219],{"class":60},"\"值传递:\"",[33,11221,3450],{"class":39},[33,11223,3472],{"class":47},[33,11225,11226,11229],{"class":35,"line":4038},[33,11227,11228],{"class":43},"    printStudent1",[33,11230,11231],{"class":47},"(s);\n",[33,11233,11234,11236,11238,11241,11243],{"class":35,"line":4043},[33,11235,3825],{"class":47},[33,11237,3450],{"class":39},[33,11239,11240],{"class":60},"\"地址传递:\"",[33,11242,3450],{"class":39},[33,11244,3472],{"class":47},[33,11246,11247,11250,11252,11254],{"class":35,"line":4834},[33,11248,11249],{"class":43},"    printStudent2",[33,11251,133],{"class":47},[33,11253,2774],{"class":39},[33,11255,11256],{"class":47},"s); \n",[33,11258,11259,11261,11263],{"class":35,"line":4848},[33,11260,90],{"class":39},[33,11262,1437],{"class":72},[33,11264,3567],{"class":47},[33,11266,11267],{"class":35,"line":4856},[33,11268,1010],{"class":47},[19,11270,11271],{},"注意：",[3413,11273,11274,11277],{},[331,11275,11276],{},"1.先定义结构体，不要在函数中写结构体的定义",[331,11278,11279],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,11281,11283],{"id":11282},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,11285,11286],{},"用const防止误操作",[23,11288,11290],{"className":2422,"code":11289,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[30,11291,11292,11298,11308,11314,11319,11323,11327,11333,11339,11343,11359,11363,11386,11390,11398,11402,11423,11430,11434],{"__ignoreMap":28},[33,11293,11294,11296],{"class":35,"line":36},[33,11295,4209],{"class":39},[33,11297,4212],{"class":60},[33,11299,11300,11302,11304,11306],{"class":35,"line":51},[33,11301,4217],{"class":39},[33,11303,4220],{"class":39},[33,11305,4223],{"class":43},[33,11307,3567],{"class":47},[33,11309,11310,11312],{"class":35,"line":64},[33,11311,4209],{"class":39},[33,11313,9995],{"class":60},[33,11315,11316],{"class":35,"line":76},[33,11317,11318],{"class":47},"sctuct Student\n",[33,11320,11321],{"class":35,"line":87},[33,11322,3820],{"class":47},[33,11324,11325],{"class":35,"line":96},[33,11326,10031],{"class":47},[33,11328,11329,11331],{"class":35,"line":103},[33,11330,4244],{"class":39},[33,11332,10043],{"class":47},[33,11334,11335,11337],{"class":35,"line":108},[33,11336,4244],{"class":39},[33,11338,10055],{"class":47},[33,11340,11341],{"class":35,"line":119},[33,11342,6249],{"class":47},[33,11344,11345,11347,11350,11352,11355,11357],{"class":35,"line":128},[33,11346,7611],{"class":39},[33,11348,11349],{"class":43}," printStudents",[33,11351,133],{"class":47},[33,11353,11354],{"class":43},"student",[33,11356,10674],{"class":289},[33,11358,226],{"class":47},[33,11360,11361],{"class":35,"line":1753},[33,11362,3820],{"class":47},[33,11364,11365,11367,11369,11372,11374,11377,11379,11382,11384],{"class":35,"line":1763},[33,11366,3825],{"class":47},[33,11368,3450],{"class":39},[33,11370,11371],{"class":47},"s.name",[33,11373,3450],{"class":39},[33,11375,11376],{"class":47},"s.age",[33,11378,3450],{"class":39},[33,11380,11381],{"class":47},"s.score",[33,11383,3450],{"class":39},[33,11385,3472],{"class":47},[33,11387,11388],{"class":35,"line":1775},[33,11389,1010],{"class":47},[33,11391,11392,11394,11396],{"class":35,"line":1780},[33,11393,2436],{"class":39},[33,11395,4232],{"class":43},[33,11397,8224],{"class":47},[33,11399,11400],{"class":35,"line":1785},[33,11401,3820],{"class":47},[33,11403,11404,11407,11409,11411,11413,11415,11417,11419,11421],{"class":35,"line":1940},[33,11405,11406],{"class":47},"    Student s",[33,11408,57],{"class":39},[33,11410,204],{"class":47},[33,11412,10162],{"class":60},[33,11414,2799],{"class":47},[33,11416,248],{"class":72},[33,11418,2799],{"class":47},[33,11420,248],{"class":72},[33,11422,6249],{"class":47},[33,11424,11425,11428],{"class":35,"line":2183},[33,11426,11427],{"class":43},"    printStudent",[33,11429,11231],{"class":47},[33,11431,11432],{"class":35,"line":2208},[33,11433,100],{"emptyLinePlaceholder":99},[33,11435,11436],{"class":35,"line":2234},[33,11437,1010],{"class":47},[19,11439,11271],{},[3413,11441,11442,11445,11448],{},[331,11443,11444],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[331,11446,11447],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[331,11449,11450],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[23,11452,11454],{"className":2422,"code":11453,"language":2424,"meta":28,"style":28},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[30,11455,11456,11475,11479,11484,11504],{"__ignoreMap":28},[33,11457,11458,11460,11462,11464,11466,11469,11471,11473],{"class":35,"line":36},[33,11459,7611],{"class":39},[33,11461,11349],{"class":43},[33,11463,133],{"class":47},[33,11465,9038],{"class":39},[33,11467,11468],{"class":43}," student",[33,11470,8764],{"class":39},[33,11472,3109],{"class":289},[33,11474,226],{"class":47},[33,11476,11477],{"class":35,"line":51},[33,11478,3820],{"class":47},[33,11480,11481],{"class":35,"line":64},[33,11482,11483],{"class":2487},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[33,11485,11486,11488,11490,11492,11494,11496,11498,11500,11502],{"class":35,"line":76},[33,11487,3825],{"class":47},[33,11489,3450],{"class":39},[33,11491,11371],{"class":47},[33,11493,3450],{"class":39},[33,11495,11376],{"class":47},[33,11497,3450],{"class":39},[33,11499,11381],{"class":47},[33,11501,3450],{"class":39},[33,11503,3472],{"class":47},[33,11505,11506],{"class":35,"line":87},[33,11507,1010],{"class":47},[14,11509,11511],{"id":11510},"_47案例","4.7案例",[328,11513,11514],{},[331,11515,11516],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[23,11518,11520],{"className":2422,"code":11519,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[30,11521,11522,11528,11538,11544,11551,11555,11561,11565,11570,11576,11582,11586,11590,11596,11600,11605,11610,11623,11627,11632,11658,11662,11674,11701,11705,11717,11726,11730,11735,11764,11768,11780,11789,11816,11827,11837,11841,11845,11849,11854,11878,11882,11906,11910,11929,11955,11959,11984,12007,12031,12036,12041,12046,12055,12060,12066,12087,12093,12107,12113,12140,12149,12155,12163,12168],{"__ignoreMap":28},[33,11523,11524,11526],{"class":35,"line":36},[33,11525,4209],{"class":39},[33,11527,4212],{"class":60},[33,11529,11530,11532,11534,11536],{"class":35,"line":51},[33,11531,4217],{"class":39},[33,11533,4220],{"class":39},[33,11535,4223],{"class":43},[33,11537,3567],{"class":47},[33,11539,11540,11542],{"class":35,"line":64},[33,11541,4209],{"class":39},[33,11543,9995],{"class":60},[33,11545,11546,11548],{"class":35,"line":76},[33,11547,4209],{"class":39},[33,11549,11550],{"class":60},"\u003Cctime>\n",[33,11552,11553],{"class":35,"line":87},[33,11554,10784],{"class":2487},[33,11556,11557,11559],{"class":35,"line":96},[33,11558,10005],{"class":39},[33,11560,10008],{"class":43},[33,11562,11563],{"class":35,"line":103},[33,11564,3820],{"class":47},[33,11566,11567],{"class":35,"line":108},[33,11568,11569],{"class":47},"    string sName;\n",[33,11571,11572,11574],{"class":35,"line":119},[33,11573,4244],{"class":39},[33,11575,10043],{"class":47},[33,11577,11578,11580],{"class":35,"line":128},[33,11579,4244],{"class":39},[33,11581,10055],{"class":47},[33,11583,11584],{"class":35,"line":1753},[33,11585,6249],{"class":47},[33,11587,11588],{"class":35,"line":1763},[33,11589,10821],{"class":2487},[33,11591,11592,11594],{"class":35,"line":1775},[33,11593,10005],{"class":39},[33,11595,10828],{"class":43},[33,11597,11598],{"class":35,"line":1780},[33,11599,3820],{"class":47},[33,11601,11602],{"class":35,"line":1785},[33,11603,11604],{"class":47},"    string tName;\n",[33,11606,11607],{"class":35,"line":1940},[33,11608,11609],{"class":2487},"    \u002F\u002F学生数组\n",[33,11611,11612,11614,11616,11619,11621],{"class":35,"line":2183},[33,11613,10141],{"class":39},[33,11615,10144],{"class":43},[33,11617,11618],{"class":47}," sArray[",[33,11620,758],{"class":72},[33,11622,6940],{"class":47},[33,11624,11625],{"class":35,"line":2208},[33,11626,6249],{"class":47},[33,11628,11629],{"class":35,"line":2234},[33,11630,11631],{"class":2487},"\u002F\u002F给老师和学生赋值的函数\n",[33,11633,11634,11636,11639,11641,11643,11646,11649,11652,11654,11656],{"class":35,"line":2239},[33,11635,7611],{"class":39},[33,11637,11638],{"class":43}," allocateSpace",[33,11640,133],{"class":47},[33,11642,10005],{"class":39},[33,11644,11645],{"class":43}," Teacher",[33,11647,11648],{"class":289}," tArray",[33,11650,11651],{"class":47},"[],",[33,11653,2436],{"class":39},[33,11655,9577],{"class":289},[33,11657,226],{"class":47},[33,11659,11660],{"class":35,"line":2247},[33,11661,3820],{"class":47},[33,11663,11664,11667,11669,11672],{"class":35,"line":2255},[33,11665,11666],{"class":47},"    string nameSeed",[33,11668,57],{"class":39},[33,11670,11671],{"class":60},"\"ABCDE\"",[33,11673,3567],{"class":47},[33,11675,11676,11678,11680,11682,11685,11687,11689,11692,11694,11697,11699],{"class":35,"line":3992},[33,11677,675],{"class":39},[33,11679,3924],{"class":47},[33,11681,2436],{"class":39},[33,11683,11684],{"class":47}," i ",[33,11686,57],{"class":39},[33,11688,1437],{"class":72},[33,11690,11691],{"class":47},"; i ",[33,11693,2226],{"class":39},[33,11695,11696],{"class":47}," len; i",[33,11698,4551],{"class":39},[33,11700,226],{"class":47},[33,11702,11703],{"class":35,"line":4009},[33,11704,4289],{"class":47},[33,11706,11707,11710,11712,11715],{"class":35,"line":4014},[33,11708,11709],{"class":47},"        tArray[i].tName ",[33,11711,57],{"class":39},[33,11713,11714],{"class":60}," \"Teacher_\"",[33,11716,3567],{"class":47},[33,11718,11719,11721,11723],{"class":35,"line":4019},[33,11720,11709],{"class":47},[33,11722,692],{"class":39},[33,11724,11725],{"class":47},"nameSeed[i];\n",[33,11727,11728],{"class":35,"line":4024},[33,11729,100],{"emptyLinePlaceholder":99},[33,11731,11732],{"class":35,"line":4038},[33,11733,11734],{"class":2487},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[33,11736,11737,11739,11741,11743,11746,11748,11750,11753,11755,11757,11760,11762],{"class":35,"line":4043},[33,11738,5658],{"class":39},[33,11740,3924],{"class":47},[33,11742,2436],{"class":39},[33,11744,11745],{"class":47}," j ",[33,11747,57],{"class":39},[33,11749,1437],{"class":72},[33,11751,11752],{"class":47},"; j ",[33,11754,2226],{"class":39},[33,11756,4407],{"class":72},[33,11758,11759],{"class":47},"; j",[33,11761,4551],{"class":39},[33,11763,226],{"class":47},[33,11765,11766],{"class":35,"line":4834},[33,11767,4767],{"class":47},[33,11769,11770,11773,11775,11778],{"class":35,"line":4848},[33,11771,11772],{"class":47},"            tArray[i].sArray[j].sName ",[33,11774,57],{"class":39},[33,11776,11777],{"class":60}," \"Student_\"",[33,11779,3567],{"class":47},[33,11781,11782,11784,11786],{"class":35,"line":4856},[33,11783,11772],{"class":47},[33,11785,692],{"class":39},[33,11787,11788],{"class":47}," nameSeed[j];\n",[33,11790,11791,11794,11797,11799,11801,11803,11805,11807,11809,11811,11813],{"class":35,"line":4861},[33,11792,11793],{"class":39},"            int",[33,11795,11796],{"class":47}," random",[33,11798,57],{"class":39},[33,11800,4682],{"class":43},[33,11802,4685],{"class":47},[33,11804,1429],{"class":39},[33,11806,3316],{"class":72},[33,11808,880],{"class":39},[33,11810,2822],{"class":72},[33,11812,2484],{"class":47},[33,11814,11815],{"class":2487},"\u002F\u002F40~99\n",[33,11817,11818,11821,11823,11825],{"class":35,"line":4867},[33,11819,11820],{"class":47},"            tArray[i].sArray[j].age ",[33,11822,57],{"class":39},[33,11824,11196],{"class":72},[33,11826,3567],{"class":47},[33,11828,11829,11832,11834],{"class":35,"line":4873},[33,11830,11831],{"class":47},"            tArray[i].sArray[j].score ",[33,11833,57],{"class":39},[33,11835,11836],{"class":47}," random;\n",[33,11838,11839],{"class":35,"line":4878},[33,11840,4786],{"class":47},[33,11842,11843],{"class":35,"line":10194},[33,11844,4446],{"class":47},[33,11846,11847],{"class":35,"line":10218},[33,11848,1010],{"class":47},[33,11850,11851],{"class":35,"line":10223},[33,11852,11853],{"class":2487},"\u002F\u002F打印所有信息的函数\n",[33,11855,11856,11858,11861,11863,11865,11867,11869,11872,11874,11876],{"class":35,"line":10229},[33,11857,7611],{"class":39},[33,11859,11860],{"class":43}," printInfo",[33,11862,133],{"class":47},[33,11864,10005],{"class":39},[33,11866,11645],{"class":43},[33,11868,11648],{"class":289},[33,11870,11871],{"class":47},"[], ",[33,11873,2436],{"class":39},[33,11875,9577],{"class":289},[33,11877,226],{"class":47},[33,11879,11880],{"class":35,"line":10256},[33,11881,3820],{"class":47},[33,11883,11884,11886,11888,11890,11892,11894,11896,11898,11900,11902,11904],{"class":35,"line":10261},[33,11885,675],{"class":39},[33,11887,3924],{"class":47},[33,11889,2436],{"class":39},[33,11891,11684],{"class":47},[33,11893,57],{"class":39},[33,11895,1437],{"class":72},[33,11897,11691],{"class":47},[33,11899,2226],{"class":39},[33,11901,11696],{"class":47},[33,11903,4551],{"class":39},[33,11905,226],{"class":47},[33,11907,11908],{"class":35,"line":10267},[33,11909,4289],{"class":47},[33,11911,11912,11915,11917,11920,11922,11925,11927],{"class":35,"line":10279},[33,11913,11914],{"class":47},"        cout ",[33,11916,3450],{"class":39},[33,11918,11919],{"class":60}," \"Teacher: \"",[33,11921,3718],{"class":39},[33,11923,11924],{"class":47}," tArray[i].tName ",[33,11926,3450],{"class":39},[33,11928,11086],{"class":47},[33,11930,11931,11933,11935,11937,11939,11941,11943,11945,11947,11949,11951,11953],{"class":35,"line":10291},[33,11932,5658],{"class":39},[33,11934,3924],{"class":47},[33,11936,2436],{"class":39},[33,11938,11745],{"class":47},[33,11940,57],{"class":39},[33,11942,1437],{"class":72},[33,11944,11752],{"class":47},[33,11946,2226],{"class":39},[33,11948,4407],{"class":72},[33,11950,11759],{"class":47},[33,11952,4551],{"class":39},[33,11954,226],{"class":47},[33,11956,11957],{"class":35,"line":10303},[33,11958,4767],{"class":47},[33,11960,11962,11965,11967,11970,11972,11975,11977,11980,11982],{"class":35,"line":11961},47,[33,11963,11964],{"class":47},"            cout ",[33,11966,3450],{"class":39},[33,11968,11969],{"class":60}," \"",[33,11971,3507],{"class":72},[33,11973,11974],{"class":60},"Student: \"",[33,11976,3718],{"class":39},[33,11978,11979],{"class":47}," tArray[i].sArray[j].sName",[33,11981,3450],{"class":39},[33,11983,3472],{"class":47},[33,11985,11987,11989,11991,11993,11995,11998,12000,12003,12005],{"class":35,"line":11986},48,[33,11988,11964],{"class":47},[33,11990,3450],{"class":39},[33,11992,11969],{"class":60},[33,11994,3507],{"class":72},[33,11996,11997],{"class":60},"Age: \"",[33,11999,3718],{"class":39},[33,12001,12002],{"class":47}," tArray[i].sArray[j].age ",[33,12004,3450],{"class":39},[33,12006,11086],{"class":47},[33,12008,12010,12012,12014,12016,12018,12021,12023,12026,12028],{"class":35,"line":12009},49,[33,12011,11964],{"class":47},[33,12013,3450],{"class":39},[33,12015,11969],{"class":60},[33,12017,3507],{"class":72},[33,12019,12020],{"class":60},"Score: \"",[33,12022,3718],{"class":39},[33,12024,12025],{"class":47}," tArray[i].sArray[j].score ",[33,12027,3450],{"class":39},[33,12029,12030],{"class":47}," endl;   \n",[33,12032,12034],{"class":35,"line":12033},50,[33,12035,4786],{"class":47},[33,12037,12039],{"class":35,"line":12038},51,[33,12040,4446],{"class":47},[33,12042,12044],{"class":35,"line":12043},52,[33,12045,1010],{"class":47},[33,12047,12049,12051,12053],{"class":35,"line":12048},53,[33,12050,2436],{"class":39},[33,12052,4232],{"class":43},[33,12054,4235],{"class":47},[33,12056,12058],{"class":35,"line":12057},54,[33,12059,3820],{"class":47},[33,12061,12063],{"class":35,"line":12062},55,[33,12064,12065],{"class":2487},"    \u002F\u002F随机数种子\n",[33,12067,12069,12071,12073,12075,12077,12079,12081,12083,12085],{"class":35,"line":12068},56,[33,12070,4632],{"class":43},[33,12072,4635],{"class":47},[33,12074,4638],{"class":39},[33,12076,4641],{"class":39},[33,12078,2849],{"class":47},[33,12080,4646],{"class":43},[33,12082,133],{"class":47},[33,12084,4651],{"class":72},[33,12086,4654],{"class":47},[33,12088,12090],{"class":35,"line":12089},57,[33,12091,12092],{"class":2487},"    \u002F\u002F1.创建3名老师的数组\n",[33,12094,12096,12098,12100,12103,12105],{"class":35,"line":12095},58,[33,12097,10141],{"class":39},[33,12099,11645],{"class":43},[33,12101,12102],{"class":47}," tArray[",[33,12104,730],{"class":72},[33,12106,6940],{"class":47},[33,12108,12110],{"class":35,"line":12109},59,[33,12111,12112],{"class":2487},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[33,12114,12116,12118,12121,12123,12126,12129,12131,12133,12136,12138],{"class":35,"line":12115},60,[33,12117,4244],{"class":39},[33,12119,12120],{"class":47}," len ",[33,12122,57],{"class":39},[33,12124,12125],{"class":39}," sizeof",[33,12127,12128],{"class":47},"(tArray) ",[33,12130,3001],{"class":39},[33,12132,12125],{"class":39},[33,12134,12135],{"class":47},"(tArray[",[33,12137,2617],{"class":72},[33,12139,6110],{"class":47},[33,12141,12143,12146],{"class":35,"line":12142},61,[33,12144,12145],{"class":43},"    allocateSpace",[33,12147,12148],{"class":47},"(tArray, len);\n",[33,12150,12152],{"class":35,"line":12151},62,[33,12153,12154],{"class":2487},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[33,12156,12158,12161],{"class":35,"line":12157},63,[33,12159,12160],{"class":43},"    printInfo",[33,12162,12148],{"class":47},[33,12164,12166],{"class":35,"line":12165},64,[33,12167,100],{"emptyLinePlaceholder":99},[33,12169,12171],{"class":35,"line":12170},65,[33,12172,1010],{"class":47},[328,12174,12175],{"start":51},[331,12176,12177,12180],{},[2575,12178,12179],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,12182,12183],{},"五名英雄信息如下：",[23,12185,12189],{"className":12186,"code":12187,"language":12188,"meta":28,"style":28},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[30,12190,12191,12209,12226,12243,12260],{"__ignoreMap":28},[33,12192,12193,12195,12198,12200,12202,12204,12207],{"class":35,"line":36},[33,12194,7167],{"class":47},[33,12196,12197],{"class":60},"\"刘备\"",[33,12199,2799],{"class":47},[33,12201,3188],{"class":72},[33,12203,2799],{"class":47},[33,12205,12206],{"class":60},"\"男\"",[33,12208,1111],{"class":47},[33,12210,12211,12213,12216,12218,12220,12222,12224],{"class":35,"line":51},[33,12212,7167],{"class":47},[33,12214,12215],{"class":60},"\"关羽\"",[33,12217,2799],{"class":47},[33,12219,3163],{"class":72},[33,12221,2799],{"class":47},[33,12223,12206],{"class":60},[33,12225,1111],{"class":47},[33,12227,12228,12230,12233,12235,12237,12239,12241],{"class":35,"line":64},[33,12229,7167],{"class":47},[33,12231,12232],{"class":60},"\"张飞\"",[33,12234,2799],{"class":47},[33,12236,1284],{"class":72},[33,12238,2799],{"class":47},[33,12240,12206],{"class":60},[33,12242,1111],{"class":47},[33,12244,12245,12247,12250,12252,12254,12256,12258],{"class":35,"line":76},[33,12246,7167],{"class":47},[33,12248,12249],{"class":60},"\"赵云\"",[33,12251,2799],{"class":47},[33,12253,3138],{"class":72},[33,12255,2799],{"class":47},[33,12257,12206],{"class":60},[33,12259,1111],{"class":47},[33,12261,12262,12264,12267,12269,12271,12273,12276],{"class":35,"line":87},[33,12263,7167],{"class":47},[33,12265,12266],{"class":60},"\"貂蝉\"",[33,12268,2799],{"class":47},[33,12270,2071],{"class":72},[33,12272,2799],{"class":47},[33,12274,12275],{"class":60},"\"女\"",[33,12277,1111],{"class":47},[19,12279,1982],{},[23,12281,12283],{"className":2422,"code":12282,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[30,12284,12285,12291,12301,12307,12314,12318,12322,12328,12333,12337,12342,12365,12369,12394,12398,12431,12436,12465,12470,12485,12511,12531,12536,12541,12545,12549,12554,12576,12580,12604,12608,12670,12674,12678,12686,12690,12695,12706,12710,12726,12742,12758,12774,12790,12794,12814,12836,12841,12854,12861,12866,12872,12877,12890,12896],{"__ignoreMap":28},[33,12286,12287,12289],{"class":35,"line":36},[33,12288,4209],{"class":39},[33,12290,4212],{"class":60},[33,12292,12293,12295,12297,12299],{"class":35,"line":51},[33,12294,4217],{"class":39},[33,12296,4220],{"class":39},[33,12298,4223],{"class":43},[33,12300,3567],{"class":47},[33,12302,12303,12305],{"class":35,"line":64},[33,12304,4209],{"class":39},[33,12306,9995],{"class":60},[33,12308,12309,12311],{"class":35,"line":76},[33,12310,10005],{"class":39},[33,12312,12313],{"class":43}," Sanguo\n",[33,12315,12316],{"class":35,"line":87},[33,12317,3820],{"class":47},[33,12319,12320],{"class":35,"line":96},[33,12321,10031],{"class":47},[33,12323,12324,12326],{"class":35,"line":103},[33,12325,4244],{"class":39},[33,12327,10043],{"class":47},[33,12329,12330],{"class":35,"line":108},[33,12331,12332],{"class":47},"    string gender;\n",[33,12334,12335],{"class":35,"line":119},[33,12336,6249],{"class":47},[33,12338,12339],{"class":35,"line":128},[33,12340,12341],{"class":2487},"\u002F\u002F定义排序函数\n",[33,12343,12344,12346,12348,12350,12353,12355,12357,12359,12361,12363],{"class":35,"line":1753},[33,12345,7611],{"class":39},[33,12347,9562],{"class":43},[33,12349,133],{"class":47},[33,12351,12352],{"class":43},"Sanguo",[33,12354,8764],{"class":39},[33,12356,3109],{"class":289},[33,12358,2799],{"class":47},[33,12360,2436],{"class":39},[33,12362,9577],{"class":289},[33,12364,226],{"class":47},[33,12366,12367],{"class":35,"line":1763},[33,12368,3820],{"class":47},[33,12370,12371,12373,12375,12377,12379,12381,12383,12385,12387,12390,12392],{"class":35,"line":1775},[33,12372,675],{"class":39},[33,12374,133],{"class":47},[33,12376,2436],{"class":39},[33,12378,5289],{"class":47},[33,12380,57],{"class":39},[33,12382,2617],{"class":72},[33,12384,5296],{"class":47},[33,12386,2226],{"class":39},[33,12388,12389],{"class":47},"len;i",[33,12391,4551],{"class":39},[33,12393,226],{"class":47},[33,12395,12396],{"class":35,"line":1780},[33,12397,4289],{"class":47},[33,12399,12400,12403,12405,12407,12409,12411,12413,12415,12417,12419,12421,12423,12425,12427,12429],{"class":35,"line":1785},[33,12401,12402],{"class":39},"     for",[33,12404,3924],{"class":47},[33,12406,2436],{"class":39},[33,12408,5665],{"class":47},[33,12410,57],{"class":39},[33,12412,2617],{"class":72},[33,12414,5672],{"class":47},[33,12416,2226],{"class":39},[33,12418,9604],{"class":47},[33,12420,2949],{"class":39},[33,12422,720],{"class":72},[33,12424,2949],{"class":39},[33,12426,5805],{"class":47},[33,12428,4551],{"class":39},[33,12430,226],{"class":47},[33,12432,12433],{"class":35,"line":1940},[33,12434,12435],{"class":47},"     {\n",[33,12437,12438,12441,12444,12446,12449,12451,12454,12456,12458,12460,12462],{"class":35,"line":2183},[33,12439,12440],{"class":39},"         if",[33,12442,12443],{"class":47}," ((s",[33,12445,880],{"class":39},[33,12447,12448],{"class":47},"j)->age ",[33,12450,3367],{"class":39},[33,12452,12453],{"class":47}," (s",[33,12455,880],{"class":39},[33,12457,2885],{"class":47},[33,12459,880],{"class":39},[33,12461,720],{"class":72},[33,12463,12464],{"class":47},")->age)\n",[33,12466,12467],{"class":35,"line":2208},[33,12468,12469],{"class":47},"         {\n",[33,12471,12472,12475,12477,12480,12482],{"class":35,"line":2234},[33,12473,12474],{"class":47},"             Sanguo temp",[33,12476,9399],{"class":39},[33,12478,12479],{"class":47},"(s",[33,12481,880],{"class":39},[33,12483,12484],{"class":47},"j);\n",[33,12486,12487,12490,12492,12494,12497,12499,12501,12503,12505,12507,12509],{"class":35,"line":2239},[33,12488,12489],{"class":39},"             *",[33,12491,12479],{"class":47},[33,12493,880],{"class":39},[33,12495,12496],{"class":47},"j)",[33,12498,9399],{"class":39},[33,12500,12479],{"class":47},[33,12502,880],{"class":39},[33,12504,2885],{"class":47},[33,12506,880],{"class":39},[33,12508,720],{"class":72},[33,12510,4976],{"class":47},[33,12512,12513,12515,12517,12519,12521,12523,12525,12527,12529],{"class":35,"line":2247},[33,12514,12489],{"class":39},[33,12516,12479],{"class":47},[33,12518,880],{"class":39},[33,12520,2885],{"class":47},[33,12522,880],{"class":39},[33,12524,720],{"class":72},[33,12526,2849],{"class":47},[33,12528,57],{"class":39},[33,12530,6532],{"class":47},[33,12532,12533],{"class":35,"line":2255},[33,12534,12535],{"class":47},"         }\n",[33,12537,12538],{"class":35,"line":3992},[33,12539,12540],{"class":47},"     }\n",[33,12542,12543],{"class":35,"line":4009},[33,12544,4446],{"class":47},[33,12546,12547],{"class":35,"line":4014},[33,12548,1010],{"class":47},[33,12550,12551],{"class":35,"line":4019},[33,12552,12553],{"class":2487},"\u002F\u002F定义打印函数\n",[33,12555,12556,12558,12560,12562,12564,12566,12568,12570,12572,12574],{"class":35,"line":4024},[33,12557,7611],{"class":39},[33,12559,11860],{"class":43},[33,12561,133],{"class":47},[33,12563,12352],{"class":43},[33,12565,8764],{"class":39},[33,12567,3109],{"class":289},[33,12569,2799],{"class":47},[33,12571,2436],{"class":39},[33,12573,9577],{"class":289},[33,12575,226],{"class":47},[33,12577,12578],{"class":35,"line":4038},[33,12579,3820],{"class":47},[33,12581,12582,12584,12586,12588,12590,12592,12594,12596,12598,12600,12602],{"class":35,"line":4043},[33,12583,675],{"class":39},[33,12585,3924],{"class":47},[33,12587,2436],{"class":39},[33,12589,5289],{"class":47},[33,12591,57],{"class":39},[33,12593,2617],{"class":72},[33,12595,5296],{"class":47},[33,12597,2226],{"class":39},[33,12599,12389],{"class":47},[33,12601,4551],{"class":39},[33,12603,226],{"class":47},[33,12605,12606],{"class":35,"line":4834},[33,12607,4289],{"class":47},[33,12609,12610,12612,12614,12616,12618,12621,12623,12625,12627,12630,12632,12634,12636,12639,12641,12643,12645,12648,12650,12652,12654,12657,12659,12661,12663,12666,12668],{"class":35,"line":4848},[33,12611,5706],{"class":47},[33,12613,3450],{"class":39},[33,12615,397],{"class":60},[33,12617,3507],{"class":72},[33,12619,12620],{"class":60},"姓名：\"",[33,12622,3450],{"class":39},[33,12624,12479],{"class":47},[33,12626,880],{"class":39},[33,12628,12629],{"class":47},"i)->name",[33,12631,3450],{"class":39},[33,12633,397],{"class":60},[33,12635,3507],{"class":72},[33,12637,12638],{"class":60},"年龄：\"",[33,12640,3450],{"class":39},[33,12642,12479],{"class":47},[33,12644,880],{"class":39},[33,12646,12647],{"class":47},"i)->age",[33,12649,3450],{"class":39},[33,12651,397],{"class":60},[33,12653,3507],{"class":72},[33,12655,12656],{"class":60},"性别：\"",[33,12658,3450],{"class":39},[33,12660,12479],{"class":47},[33,12662,880],{"class":39},[33,12664,12665],{"class":47},"i)->gender",[33,12667,3450],{"class":39},[33,12669,3472],{"class":47},[33,12671,12672],{"class":35,"line":4856},[33,12673,4446],{"class":47},[33,12675,12676],{"class":35,"line":4861},[33,12677,1010],{"class":47},[33,12679,12680,12682,12684],{"class":35,"line":4867},[33,12681,2436],{"class":39},[33,12683,4232],{"class":43},[33,12685,4235],{"class":47},[33,12687,12688],{"class":35,"line":4873},[33,12689,3820],{"class":47},[33,12691,12692],{"class":35,"line":4878},[33,12693,12694],{"class":2487},"    \u002F\u002F定义结构体变量\n",[33,12696,12697,12700,12702,12704],{"class":35,"line":10194},[33,12698,12699],{"class":47},"    Sanguo s1[",[33,12701,758],{"class":72},[33,12703,3348],{"class":47},[33,12705,7158],{"class":39},[33,12707,12708],{"class":35,"line":10218},[33,12709,4289],{"class":47},[33,12711,12712,12714,12716,12718,12720,12722,12724],{"class":35,"line":10223},[33,12713,7167],{"class":47},[33,12715,12197],{"class":60},[33,12717,2799],{"class":47},[33,12719,3188],{"class":72},[33,12721,2799],{"class":47},[33,12723,12206],{"class":60},[33,12725,1111],{"class":47},[33,12727,12728,12730,12732,12734,12736,12738,12740],{"class":35,"line":10229},[33,12729,7167],{"class":47},[33,12731,12215],{"class":60},[33,12733,2799],{"class":47},[33,12735,3163],{"class":72},[33,12737,2799],{"class":47},[33,12739,12206],{"class":60},[33,12741,1111],{"class":47},[33,12743,12744,12746,12748,12750,12752,12754,12756],{"class":35,"line":10256},[33,12745,7167],{"class":47},[33,12747,12232],{"class":60},[33,12749,2799],{"class":47},[33,12751,1284],{"class":72},[33,12753,2799],{"class":47},[33,12755,12206],{"class":60},[33,12757,1111],{"class":47},[33,12759,12760,12762,12764,12766,12768,12770,12772],{"class":35,"line":10261},[33,12761,7167],{"class":47},[33,12763,12249],{"class":60},[33,12765,2799],{"class":47},[33,12767,3138],{"class":72},[33,12769,2799],{"class":47},[33,12771,12206],{"class":60},[33,12773,1111],{"class":47},[33,12775,12776,12778,12780,12782,12784,12786,12788],{"class":35,"line":10267},[33,12777,7167],{"class":47},[33,12779,12266],{"class":60},[33,12781,2799],{"class":47},[33,12783,2071],{"class":72},[33,12785,2799],{"class":47},[33,12787,12275],{"class":60},[33,12789,1111],{"class":47},[33,12791,12792],{"class":35,"line":10279},[33,12793,7200],{"class":47},[33,12795,12796,12798,12800,12802,12805,12807,12810,12812],{"class":35,"line":10291},[33,12797,4244],{"class":39},[33,12799,9577],{"class":47},[33,12801,6455],{"class":39},[33,12803,12804],{"class":47},"(s1)",[33,12806,6461],{"class":39},[33,12808,12809],{"class":47},"(s1[",[33,12811,2617],{"class":72},[33,12813,6110],{"class":47},[33,12815,12816,12819,12821,12824,12826,12829,12832,12834],{"class":35,"line":10303},[33,12817,12818],{"class":47},"    Sanguo ",[33,12820,657],{"class":39},[33,12822,12823],{"class":47},"s ",[33,12825,57],{"class":39},[33,12827,12828],{"class":39}," &",[33,12830,12831],{"class":47},"s1[",[33,12833,2617],{"class":72},[33,12835,6940],{"class":47},[33,12837,12838],{"class":35,"line":11961},[33,12839,12840],{"class":2487},"    \u002F\u002F排序前：\n",[33,12842,12843,12845,12847,12850,12852],{"class":35,"line":11986},[33,12844,8775],{"class":47},[33,12846,3450],{"class":39},[33,12848,12849],{"class":60}," \"排序前：\"",[33,12851,3718],{"class":39},[33,12853,11086],{"class":47},[33,12855,12856,12858],{"class":35,"line":12009},[33,12857,12160],{"class":43},[33,12859,12860],{"class":47},"(s,len);\n",[33,12862,12863],{"class":35,"line":12033},[33,12864,12865],{"class":2487},"    \u002F\u002F调用排序函数\n",[33,12867,12868,12870],{"class":35,"line":12038},[33,12869,9844],{"class":43},[33,12871,12860],{"class":47},[33,12873,12874],{"class":35,"line":12043},[33,12875,12876],{"class":2487},"    \u002F\u002F排序后\n",[33,12878,12879,12881,12883,12886,12888],{"class":35,"line":12048},[33,12880,8775],{"class":47},[33,12882,3450],{"class":39},[33,12884,12885],{"class":60}," \"排序后：\"",[33,12887,3718],{"class":39},[33,12889,11086],{"class":47},[33,12891,12892,12894],{"class":35,"line":12057},[33,12893,12160],{"class":43},[33,12895,12860],{"class":47},[33,12897,12898],{"class":35,"line":12062},[33,12899,1010],{"class":47},[19,12901,12902,12903,787],{},"注意：使用指针时直接用传首地址**&s",[33,12904,2617],{},[2331,12906,12907],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":12909},[12910,12911,12912,12913,12914,12915,12916],{"id":9949,"depth":51,"text":9950},{"id":10311,"depth":51,"text":10312},{"id":10580,"depth":51,"text":10581},{"id":10745,"depth":51,"text":10746},{"id":10961,"depth":51,"text":10962},{"id":11282,"depth":51,"text":11283},{"id":11510,"depth":51,"text":11511},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9938,"description":9946},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12923,"title":12924,"body":12925,"description":28,"extension":2360,"meta":14266,"navigation":99,"path":14267,"seo":14268,"stem":14269,"__hash__":14270},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12926,"toc":14260},[12927,12930,12934,12940,12954,12959,12962,12966,12973,12979,12982,12989,12995,13000,13003,13006,13009,13571,13574,13588,13592,13597,13613,13753,13756,13762,13765,13770,13778,13886,13889,13894,13897,13902,13905,13911,13914,14257],[10,12928,12924],{"id":12929},"_5程序内存模型",[14,12931,12933],{"id":12932},"_51内存分区模型","5.1内存分区模型",[19,12935,12936,12937],{},"C++程序在执行时，将内存大方向划分为",[2575,12938,12939],{},"4个区域",[3413,12941,12942,12945,12948,12951],{},[331,12943,12944],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[331,12946,12947],{},"全局区：存放全局变量和静态变量以及常量",[331,12949,12950],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[331,12952,12953],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12955,12956],{},[2575,12957,12958],{},"内存四区意义：",[19,12960,12961],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[631,12963,12965],{"id":12964},"_511程序运行前","5.1.1程序运行前",[19,12967,12968,12969,12972],{},"​\t在程序编译后，生成了exe可执行程序，",[2575,12970,12971],{},"未执行该程序前","分为两个区域",[19,12974,12975,12976],{},"​\t",[2575,12977,12978],{},"代码区：",[19,12980,12981],{},"​\t\t存放 CPU 执行的机器指令",[19,12983,12984,12985,12988],{},"​\t\t代码区是",[2575,12986,12987],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12990,12984,12991,12994],{},[2575,12992,12993],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12996,12975,12997],{},[2575,12998,12999],{},"全局区：",[19,13001,13002],{},"​\t\t全局变量和静态变量存放在此.",[19,13004,13005],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,13007,13008],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[23,13010,13012],{"className":2422,"code":13011,"language":2424,"meta":28,"style":28},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,13013,13014,13019,13032,13045,13049,13054,13069,13084,13088,13097,13101,13106,13118,13130,13134,13139,13165,13191,13195,13222,13248,13252,13257,13273,13288,13292,13318,13344,13348,13373,13398,13402,13428,13454,13458,13474,13489,13515,13541,13545,13555,13559,13567],{"__ignoreMap":28},[33,13015,13016],{"class":35,"line":36},[33,13017,13018],{"class":2487},"\u002F\u002F全局变量\n",[33,13020,13021,13023,13026,13028,13030],{"class":35,"line":51},[33,13022,2436],{"class":39},[33,13024,13025],{"class":47}," g_a ",[33,13027,57],{"class":39},[33,13029,4297],{"class":72},[33,13031,3567],{"class":47},[33,13033,13034,13036,13039,13041,13043],{"class":35,"line":64},[33,13035,2436],{"class":39},[33,13037,13038],{"class":47}," g_b ",[33,13040,57],{"class":39},[33,13042,4297],{"class":72},[33,13044,3567],{"class":47},[33,13046,13047],{"class":35,"line":76},[33,13048,100],{"emptyLinePlaceholder":99},[33,13050,13051],{"class":35,"line":87},[33,13052,13053],{"class":2487},"\u002F\u002F全局常量\n",[33,13055,13056,13058,13060,13063,13065,13067],{"class":35,"line":96},[33,13057,9038],{"class":39},[33,13059,4641],{"class":39},[33,13061,13062],{"class":47}," c_g_a ",[33,13064,57],{"class":39},[33,13066,4297],{"class":72},[33,13068,3567],{"class":47},[33,13070,13071,13073,13075,13078,13080,13082],{"class":35,"line":103},[33,13072,9038],{"class":39},[33,13074,4641],{"class":39},[33,13076,13077],{"class":47}," c_g_b ",[33,13079,57],{"class":39},[33,13081,4297],{"class":72},[33,13083,3567],{"class":47},[33,13085,13086],{"class":35,"line":108},[33,13087,100],{"emptyLinePlaceholder":99},[33,13089,13090,13092,13094],{"class":35,"line":119},[33,13091,2436],{"class":39},[33,13093,4232],{"class":43},[33,13095,13096],{"class":47},"() {\n",[33,13098,13099],{"class":35,"line":128},[33,13100,100],{"emptyLinePlaceholder":99},[33,13102,13103],{"class":35,"line":1753},[33,13104,13105],{"class":2487},"    \u002F\u002F局部变量\n",[33,13107,13108,13110,13112,13114,13116],{"class":35,"line":1763},[33,13109,4244],{"class":39},[33,13111,877],{"class":47},[33,13113,57],{"class":39},[33,13115,4297],{"class":72},[33,13117,3567],{"class":47},[33,13119,13120,13122,13124,13126,13128],{"class":35,"line":1775},[33,13121,4244],{"class":39},[33,13123,883],{"class":47},[33,13125,57],{"class":39},[33,13127,4297],{"class":72},[33,13129,3567],{"class":47},[33,13131,13132],{"class":35,"line":1780},[33,13133,100],{"emptyLinePlaceholder":99},[33,13135,13136],{"class":35,"line":1785},[33,13137,13138],{"class":2487},"    \u002F\u002F打印地址\n",[33,13140,13141,13143,13145,13148,13150,13152,13154,13156,13158,13161,13163],{"class":35,"line":1940},[33,13142,8775],{"class":47},[33,13144,3450],{"class":39},[33,13146,13147],{"class":60}," \"局部变量a地址为： \"",[33,13149,3718],{"class":39},[33,13151,3924],{"class":47},[33,13153,2436],{"class":39},[33,13155,2849],{"class":47},[33,13157,2774],{"class":39},[33,13159,13160],{"class":47},"a ",[33,13162,3450],{"class":39},[33,13164,11086],{"class":47},[33,13166,13167,13169,13171,13174,13176,13178,13180,13182,13184,13187,13189],{"class":35,"line":2183},[33,13168,8775],{"class":47},[33,13170,3450],{"class":39},[33,13172,13173],{"class":60}," \"局部变量b地址为： \"",[33,13175,3718],{"class":39},[33,13177,3924],{"class":47},[33,13179,2436],{"class":39},[33,13181,2849],{"class":47},[33,13183,2774],{"class":39},[33,13185,13186],{"class":47},"b ",[33,13188,3450],{"class":39},[33,13190,11086],{"class":47},[33,13192,13193],{"class":35,"line":2208},[33,13194,100],{"emptyLinePlaceholder":99},[33,13196,13197,13199,13201,13204,13206,13209,13211,13213,13215,13218,13220],{"class":35,"line":2234},[33,13198,8775],{"class":47},[33,13200,3450],{"class":39},[33,13202,13203],{"class":60}," \"全局变量g_a地址为： \"",[33,13205,3718],{"class":39},[33,13207,13208],{"class":47},"  (",[33,13210,2436],{"class":39},[33,13212,2849],{"class":47},[33,13214,2774],{"class":39},[33,13216,13217],{"class":47},"g_a ",[33,13219,3450],{"class":39},[33,13221,11086],{"class":47},[33,13223,13224,13226,13228,13231,13233,13235,13237,13239,13241,13244,13246],{"class":35,"line":2239},[33,13225,8775],{"class":47},[33,13227,3450],{"class":39},[33,13229,13230],{"class":60}," \"全局变量g_b地址为： \"",[33,13232,3718],{"class":39},[33,13234,13208],{"class":47},[33,13236,2436],{"class":39},[33,13238,2849],{"class":47},[33,13240,2774],{"class":39},[33,13242,13243],{"class":47},"g_b ",[33,13245,3450],{"class":39},[33,13247,11086],{"class":47},[33,13249,13250],{"class":35,"line":2247},[33,13251,100],{"emptyLinePlaceholder":99},[33,13253,13254],{"class":35,"line":2255},[33,13255,13256],{"class":2487},"    \u002F\u002F静态变量\n",[33,13258,13259,13262,13264,13267,13269,13271],{"class":35,"line":3992},[33,13260,13261],{"class":39},"    static",[33,13263,4641],{"class":39},[33,13265,13266],{"class":47}," s_a ",[33,13268,57],{"class":39},[33,13270,4297],{"class":72},[33,13272,3567],{"class":47},[33,13274,13275,13277,13279,13282,13284,13286],{"class":35,"line":4009},[33,13276,13261],{"class":39},[33,13278,4641],{"class":39},[33,13280,13281],{"class":47}," s_b ",[33,13283,57],{"class":39},[33,13285,4297],{"class":72},[33,13287,3567],{"class":47},[33,13289,13290],{"class":35,"line":4014},[33,13291,100],{"emptyLinePlaceholder":99},[33,13293,13294,13296,13298,13301,13303,13305,13307,13309,13311,13314,13316],{"class":35,"line":4019},[33,13295,8775],{"class":47},[33,13297,3450],{"class":39},[33,13299,13300],{"class":60}," \"静态变量s_a地址为： \"",[33,13302,3718],{"class":39},[33,13304,3924],{"class":47},[33,13306,2436],{"class":39},[33,13308,2849],{"class":47},[33,13310,2774],{"class":39},[33,13312,13313],{"class":47},"s_a ",[33,13315,3450],{"class":39},[33,13317,11086],{"class":47},[33,13319,13320,13322,13324,13327,13329,13331,13333,13335,13337,13340,13342],{"class":35,"line":4024},[33,13321,8775],{"class":47},[33,13323,3450],{"class":39},[33,13325,13326],{"class":60}," \"静态变量s_b地址为： \"",[33,13328,3718],{"class":39},[33,13330,3924],{"class":47},[33,13332,2436],{"class":39},[33,13334,2849],{"class":47},[33,13336,2774],{"class":39},[33,13338,13339],{"class":47},"s_b ",[33,13341,3450],{"class":39},[33,13343,11086],{"class":47},[33,13345,13346],{"class":35,"line":4038},[33,13347,100],{"emptyLinePlaceholder":99},[33,13349,13350,13352,13354,13357,13359,13361,13363,13365,13367,13369,13371],{"class":35,"line":4043},[33,13351,8775],{"class":47},[33,13353,3450],{"class":39},[33,13355,13356],{"class":60}," \"字符串常量地址为： \"",[33,13358,3718],{"class":39},[33,13360,3924],{"class":47},[33,13362,2436],{"class":39},[33,13364,2849],{"class":47},[33,13366,2774],{"class":39},[33,13368,3467],{"class":60},[33,13370,3718],{"class":39},[33,13372,11086],{"class":47},[33,13374,13375,13377,13379,13381,13383,13385,13387,13389,13391,13394,13396],{"class":35,"line":4834},[33,13376,8775],{"class":47},[33,13378,3450],{"class":39},[33,13380,13356],{"class":60},[33,13382,3718],{"class":39},[33,13384,3924],{"class":47},[33,13386,2436],{"class":39},[33,13388,2849],{"class":47},[33,13390,2774],{"class":39},[33,13392,13393],{"class":60},"\"hello world1\"",[33,13395,3718],{"class":39},[33,13397,11086],{"class":47},[33,13399,13400],{"class":35,"line":4848},[33,13401,100],{"emptyLinePlaceholder":99},[33,13403,13404,13406,13408,13411,13413,13415,13417,13419,13421,13424,13426],{"class":35,"line":4856},[33,13405,8775],{"class":47},[33,13407,3450],{"class":39},[33,13409,13410],{"class":60}," \"全局常量c_g_a地址为： \"",[33,13412,3718],{"class":39},[33,13414,3924],{"class":47},[33,13416,2436],{"class":39},[33,13418,2849],{"class":47},[33,13420,2774],{"class":39},[33,13422,13423],{"class":47},"c_g_a ",[33,13425,3450],{"class":39},[33,13427,11086],{"class":47},[33,13429,13430,13432,13434,13437,13439,13441,13443,13445,13447,13450,13452],{"class":35,"line":4861},[33,13431,8775],{"class":47},[33,13433,3450],{"class":39},[33,13435,13436],{"class":60}," \"全局常量c_g_b地址为： \"",[33,13438,3718],{"class":39},[33,13440,3924],{"class":47},[33,13442,2436],{"class":39},[33,13444,2849],{"class":47},[33,13446,2774],{"class":39},[33,13448,13449],{"class":47},"c_g_b ",[33,13451,3450],{"class":39},[33,13453,11086],{"class":47},[33,13455,13456],{"class":35,"line":4867},[33,13457,100],{"emptyLinePlaceholder":99},[33,13459,13460,13463,13465,13468,13470,13472],{"class":35,"line":4873},[33,13461,13462],{"class":39},"    const",[33,13464,4641],{"class":39},[33,13466,13467],{"class":47}," c_l_a ",[33,13469,57],{"class":39},[33,13471,4297],{"class":72},[33,13473,3567],{"class":47},[33,13475,13476,13478,13480,13483,13485,13487],{"class":35,"line":4878},[33,13477,13462],{"class":39},[33,13479,4641],{"class":39},[33,13481,13482],{"class":47}," c_l_b ",[33,13484,57],{"class":39},[33,13486,4297],{"class":72},[33,13488,3567],{"class":47},[33,13490,13491,13493,13495,13498,13500,13502,13504,13506,13508,13511,13513],{"class":35,"line":10194},[33,13492,8775],{"class":47},[33,13494,3450],{"class":39},[33,13496,13497],{"class":60}," \"局部常量c_l_a地址为： \"",[33,13499,3718],{"class":39},[33,13501,3924],{"class":47},[33,13503,2436],{"class":39},[33,13505,2849],{"class":47},[33,13507,2774],{"class":39},[33,13509,13510],{"class":47},"c_l_a ",[33,13512,3450],{"class":39},[33,13514,11086],{"class":47},[33,13516,13517,13519,13521,13524,13526,13528,13530,13532,13534,13537,13539],{"class":35,"line":10218},[33,13518,8775],{"class":47},[33,13520,3450],{"class":39},[33,13522,13523],{"class":60}," \"局部常量c_l_b地址为： \"",[33,13525,3718],{"class":39},[33,13527,3924],{"class":47},[33,13529,2436],{"class":39},[33,13531,2849],{"class":47},[33,13533,2774],{"class":39},[33,13535,13536],{"class":47},"c_l_b ",[33,13538,3450],{"class":39},[33,13540,11086],{"class":47},[33,13542,13543],{"class":35,"line":10223},[33,13544,100],{"emptyLinePlaceholder":99},[33,13546,13547,13549,13551,13553],{"class":35,"line":10229},[33,13548,4562],{"class":43},[33,13550,133],{"class":47},[33,13552,4567],{"class":60},[33,13554,4976],{"class":47},[33,13556,13557],{"class":35,"line":10256},[33,13558,100],{"emptyLinePlaceholder":99},[33,13560,13561,13563,13565],{"class":35,"line":10261},[33,13562,90],{"class":39},[33,13564,1437],{"class":72},[33,13566,3567],{"class":47},[33,13568,13569],{"class":35,"line":10267},[33,13570,1010],{"class":47},[19,13572,13573],{},"总结：",[3413,13575,13576,13579,13582,13585],{},[331,13577,13578],{},"c++中程序运行前分为全局区和代码区",[331,13580,13581],{},"代码区特点是共享和只读",[331,13583,13584],{},"全局区中存放全局变量、静态变量、常量",[331,13586,13587],{},"常量区中存放const修饰的全局常量和字符串常量",[631,13589,13591],{"id":13590},"_512程序运行后","5.1.2程序运行后",[328,13593,13594],{},[331,13595,13596],{},"栈区：",[3413,13598,13599,13606],{},[331,13600,13601,13602,13605],{},"由编译器自动分配释放, 存放",[2575,13603,13604],{},"函数的参数值,局部变量","等",[331,13607,13608,13609,13612],{},"注意事项：",[2575,13610,13611],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[23,13614,13616],{"className":2422,"code":13615,"language":2424,"meta":28,"style":28},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[30,13617,13618,13629,13633,13648,13660,13664,13668,13676,13681,13696,13714,13731,13741,13749],{"__ignoreMap":28},[33,13619,13620,13622,13624,13627],{"class":35,"line":36},[33,13621,2436],{"class":39},[33,13623,8764],{"class":39},[33,13625,13626],{"class":43}," func",[33,13628,4235],{"class":47},[33,13630,13631],{"class":35,"line":51},[33,13632,3820],{"class":47},[33,13634,13635,13637,13639,13641,13643,13645],{"class":35,"line":64},[33,13636,4244],{"class":39},[33,13638,877],{"class":47},[33,13640,57],{"class":39},[33,13642,4297],{"class":72},[33,13644,2484],{"class":47},[33,13646,13647],{"class":2487}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[33,13649,13650,13652,13654,13657],{"class":35,"line":76},[33,13651,90],{"class":39},[33,13653,12828],{"class":39},[33,13655,13656],{"class":47},"a;",[33,13658,13659],{"class":2487}," \u002F\u002F放回局部变量的地址\n",[33,13661,13662],{"class":35,"line":87},[33,13663,1010],{"class":47},[33,13665,13666],{"class":35,"line":96},[33,13667,100],{"emptyLinePlaceholder":99},[33,13669,13670,13672,13674],{"class":35,"line":103},[33,13671,2436],{"class":39},[33,13673,4232],{"class":43},[33,13675,13096],{"class":47},[33,13677,13678],{"class":35,"line":108},[33,13679,13680],{"class":2487},"    \u002F\u002F接受func的返回值\n",[33,13682,13683,13685,13687,13690,13692,13694],{"class":35,"line":119},[33,13684,4244],{"class":39},[33,13686,8764],{"class":39},[33,13688,13689],{"class":47},"p ",[33,13691,57],{"class":39},[33,13693,13626],{"class":43},[33,13695,7883],{"class":47},[33,13697,13698,13700,13702,13704,13706,13708,13711],{"class":35,"line":128},[33,13699,8775],{"class":47},[33,13701,3450],{"class":39},[33,13703,8764],{"class":39},[33,13705,13689],{"class":47},[33,13707,3450],{"class":39},[33,13709,13710],{"class":47}," endl;",[33,13712,13713],{"class":2487}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[33,13715,13716,13718,13720,13722,13724,13726,13728],{"class":35,"line":1753},[33,13717,8775],{"class":47},[33,13719,3450],{"class":39},[33,13721,8764],{"class":39},[33,13723,13689],{"class":47},[33,13725,3450],{"class":39},[33,13727,13710],{"class":47},[33,13729,13730],{"class":2487}," \u002F\u002F第二次这个数据不再保留\n",[33,13732,13733,13735,13737,13739],{"class":35,"line":1763},[33,13734,4562],{"class":43},[33,13736,133],{"class":47},[33,13738,4567],{"class":60},[33,13740,4976],{"class":47},[33,13742,13743,13745,13747],{"class":35,"line":1775},[33,13744,90],{"class":39},[33,13746,1437],{"class":72},[33,13748,3567],{"class":47},[33,13750,13751],{"class":35,"line":1780},[33,13752,1010],{"class":47},[19,13754,13755],{},"输出结果：",[19,13757,13758],{},[3736,13759],{"alt":13760,"src":13761},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13763,13764],{},"总结：不要返回局部变量的地址",[328,13766,13767],{"start":51},[331,13768,13769],{},"堆区",[3413,13771,13772,13775],{},[331,13773,13774],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[331,13776,13777],{},"在c++中主要利用new在堆区开辟内存",[23,13779,13781],{"className":2422,"code":13780,"language":2424,"meta":28,"style":28},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[30,13782,13783,13798,13802,13807,13828,13835,13839,13847,13851,13856,13870,13882],{"__ignoreMap":28},[33,13784,13785,13787,13790,13793,13795],{"class":35,"line":36},[33,13786,2436],{"class":39},[33,13788,13789],{"class":39},"  *",[33,13791,13792],{"class":43},"func",[33,13794,4685],{"class":47},[33,13796,13797],{"class":2487},"  \u002F\u002F函数返回指针\n",[33,13799,13800],{"class":35,"line":51},[33,13801,3820],{"class":47},[33,13803,13804],{"class":35,"line":64},[33,13805,13806],{"class":2487},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[33,13808,13809,13811,13813,13815,13817,13820,13822,13824,13826],{"class":35,"line":76},[33,13810,6399],{"class":39},[33,13812,8764],{"class":39},[33,13814,19],{"class":47},[33,13816,57],{"class":39},[33,13818,13819],{"class":39}," new",[33,13821,4641],{"class":39},[33,13823,133],{"class":47},[33,13825,1279],{"class":72},[33,13827,4976],{"class":47},[33,13829,13830,13832],{"class":35,"line":87},[33,13831,6633],{"class":39},[33,13833,13834],{"class":47}," p;\n",[33,13836,13837],{"class":35,"line":96},[33,13838,1010],{"class":47},[33,13840,13841,13843,13845],{"class":35,"line":103},[33,13842,2436],{"class":39},[33,13844,4232],{"class":43},[33,13846,4235],{"class":47},[33,13848,13849],{"class":35,"line":108},[33,13850,3820],{"class":47},[33,13852,13853],{"class":35,"line":119},[33,13854,13855],{"class":2487},"    \u002F\u002F在堆区开辟数据\n",[33,13857,13858,13860,13862,13864,13866,13868],{"class":35,"line":128},[33,13859,4244],{"class":39},[33,13861,8764],{"class":39},[33,13863,19],{"class":47},[33,13865,57],{"class":39},[33,13867,13792],{"class":43},[33,13869,7883],{"class":47},[33,13871,13872,13874,13876,13878,13880],{"class":35,"line":1753},[33,13873,3825],{"class":47},[33,13875,8665],{"class":39},[33,13877,19],{"class":47},[33,13879,3450],{"class":39},[33,13881,3472],{"class":47},[33,13883,13884],{"class":35,"line":1763},[33,13885,1010],{"class":47},[19,13887,13888],{},"图片展示：",[19,13890,13891],{},[3736,13892],{"alt":13760,"src":13893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13895,13896],{},"堆区内存由程序员管生死！！！",[328,13898,13899],{"start":64},[331,13900,13901],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13903,13904],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13906,13907,13908],{},"​语法：",[30,13909,13910],{}," new 数据类型",[19,13912,13913],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[23,13915,13917],{"className":2422,"code":13916,"language":2424,"meta":28,"style":28},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[30,13918,13919,13924,13934,13938,13943,13948,13970,13974,13982,13986,14000,14012,14024,14036,14041,14046,14057,14061,14066,14074,14078,14083,14105,14131,14135,14153,14157,14183,14187,14199,14203,14208,14213,14221,14225,14229,14237,14241,14247,14253],{"__ignoreMap":28},[33,13920,13921],{"class":35,"line":36},[33,13922,13923],{"class":2487},"\u002F\u002F1.new的基本语法\n",[33,13925,13926,13928,13930,13932],{"class":35,"line":51},[33,13927,2436],{"class":39},[33,13929,8764],{"class":39},[33,13931,13792],{"class":43},[33,13933,4235],{"class":47},[33,13935,13936],{"class":35,"line":64},[33,13937,3820],{"class":47},[33,13939,13940],{"class":35,"line":76},[33,13941,13942],{"class":2487},"    \u002F\u002F在堆区创建整型数据\n",[33,13944,13945],{"class":35,"line":87},[33,13946,13947],{"class":2487},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[33,13949,13950,13952,13954,13956,13959,13961,13963,13965,13967],{"class":35,"line":96},[33,13951,4244],{"class":39},[33,13953,8764],{"class":39},[33,13955,19],{"class":47},[33,13957,13958],{"class":39},"=new",[33,13960,4641],{"class":39},[33,13962,133],{"class":47},[33,13964,1279],{"class":72},[33,13966,8212],{"class":47},[33,13968,13969],{"class":2487},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[33,13971,13972],{"class":35,"line":103},[33,13973,1010],{"class":47},[33,13975,13976,13978,13980],{"class":35,"line":108},[33,13977,7611],{"class":39},[33,13979,7835],{"class":43},[33,13981,4235],{"class":47},[33,13983,13984],{"class":35,"line":119},[33,13985,3820],{"class":47},[33,13987,13988,13990,13992,13994,13996,13998],{"class":35,"line":128},[33,13989,4244],{"class":39},[33,13991,8764],{"class":39},[33,13993,19],{"class":47},[33,13995,57],{"class":39},[33,13997,13792],{"class":43},[33,13999,7883],{"class":47},[33,14001,14002,14004,14006,14008,14010],{"class":35,"line":1753},[33,14003,3825],{"class":47},[33,14005,8665],{"class":39},[33,14007,19],{"class":47},[33,14009,3450],{"class":39},[33,14011,3472],{"class":47},[33,14013,14014,14016,14018,14020,14022],{"class":35,"line":1763},[33,14015,3825],{"class":47},[33,14017,8665],{"class":39},[33,14019,19],{"class":47},[33,14021,3450],{"class":39},[33,14023,3472],{"class":47},[33,14025,14026,14028,14030,14032,14034],{"class":35,"line":1775},[33,14027,3825],{"class":47},[33,14029,8665],{"class":39},[33,14031,19],{"class":47},[33,14033,3450],{"class":39},[33,14035,3472],{"class":47},[33,14037,14038],{"class":35,"line":1780},[33,14039,14040],{"class":2487},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[33,14042,14043],{"class":35,"line":1785},[33,14044,14045],{"class":2487},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[33,14047,14048,14051,14054],{"class":35,"line":1940},[33,14049,14050],{"class":39},"    delete",[33,14052,14053],{"class":47}," p;",[33,14055,14056],{"class":2487},"\u002F\u002F删除这块地址\n",[33,14058,14059],{"class":35,"line":2183},[33,14060,1010],{"class":47},[33,14062,14063],{"class":35,"line":2208},[33,14064,14065],{"class":2487},"\u002F\u002F2.在堆区利用new开辟数组\n",[33,14067,14068,14070,14072],{"class":35,"line":2234},[33,14069,7611],{"class":39},[33,14071,7904],{"class":43},[33,14073,4235],{"class":47},[33,14075,14076],{"class":35,"line":2239},[33,14077,3820],{"class":47},[33,14079,14080],{"class":35,"line":2247},[33,14081,14082],{"class":2487},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[33,14084,14085,14087,14089,14091,14093,14095,14097,14099,14102],{"class":35,"line":2255},[33,14086,4244],{"class":39},[33,14088,8764],{"class":39},[33,14090,6134],{"class":47},[33,14092,13958],{"class":39},[33,14094,4641],{"class":39},[33,14096,3300],{"class":47},[33,14098,1279],{"class":72},[33,14100,14101],{"class":47},"];",[33,14103,14104],{"class":2487},"\u002F\u002F10代表数组有10个元素\n",[33,14106,14107,14109,14111,14113,14115,14117,14119,14121,14123,14125,14127,14129],{"class":35,"line":3992},[33,14108,675],{"class":39},[33,14110,3924],{"class":47},[33,14112,2436],{"class":39},[33,14114,5289],{"class":47},[33,14116,57],{"class":39},[33,14118,2617],{"class":72},[33,14120,5296],{"class":47},[33,14122,2226],{"class":39},[33,14124,1279],{"class":72},[33,14126,5296],{"class":47},[33,14128,4551],{"class":39},[33,14130,226],{"class":47},[33,14132,14133],{"class":35,"line":4009},[33,14134,4289],{"class":47},[33,14136,14137,14140,14142,14144,14146,14148,14150],{"class":35,"line":4014},[33,14138,14139],{"class":47},"        arr[i]",[33,14141,57],{"class":39},[33,14143,2861],{"class":47},[33,14145,880],{"class":39},[33,14147,2734],{"class":72},[33,14149,2484],{"class":47},[33,14151,14152],{"class":2487},"\u002F\u002F给10个元素赋值100～109\n",[33,14154,14155],{"class":35,"line":4019},[33,14156,4446],{"class":47},[33,14158,14159,14161,14163,14165,14167,14169,14171,14173,14175,14177,14179,14181],{"class":35,"line":4024},[33,14160,675],{"class":39},[33,14162,3924],{"class":47},[33,14164,2436],{"class":39},[33,14166,5289],{"class":47},[33,14168,57],{"class":39},[33,14170,2617],{"class":72},[33,14172,5296],{"class":47},[33,14174,2226],{"class":39},[33,14176,1279],{"class":72},[33,14178,5296],{"class":47},[33,14180,4551],{"class":39},[33,14182,226],{"class":47},[33,14184,14185],{"class":35,"line":4038},[33,14186,4289],{"class":47},[33,14188,14189,14191,14193,14195,14197],{"class":35,"line":4043},[33,14190,5706],{"class":47},[33,14192,3450],{"class":39},[33,14194,6606],{"class":47},[33,14196,3450],{"class":39},[33,14198,3472],{"class":47},[33,14200,14201],{"class":35,"line":4834},[33,14202,4446],{"class":47},[33,14204,14205],{"class":35,"line":4848},[33,14206,14207],{"class":2487},"    \u002F\u002F释放堆区数组\n",[33,14209,14210],{"class":35,"line":4856},[33,14211,14212],{"class":2487},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[33,14214,14215,14218],{"class":35,"line":4861},[33,14216,14217],{"class":39},"    delete[]",[33,14219,14220],{"class":47}," arr;\n",[33,14222,14223],{"class":35,"line":4867},[33,14224,1010],{"class":47},[33,14226,14227],{"class":35,"line":4873},[33,14228,100],{"emptyLinePlaceholder":99},[33,14230,14231,14233,14235],{"class":35,"line":4878},[33,14232,2436],{"class":39},[33,14234,4232],{"class":43},[33,14236,4235],{"class":47},[33,14238,14239],{"class":35,"line":10194},[33,14240,3820],{"class":47},[33,14242,14243,14245],{"class":35,"line":10218},[33,14244,7880],{"class":43},[33,14246,7883],{"class":47},[33,14248,14249,14251],{"class":35,"line":10223},[33,14250,7949],{"class":43},[33,14252,7883],{"class":47},[33,14254,14255],{"class":35,"line":10229},[33,14256,1010],{"class":47},[2331,14258,14259],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":14261},[14262],{"id":12932,"depth":51,"text":12933,"children":14263},[14264,14265],{"id":12964,"depth":64,"text":12965},{"id":13590,"depth":64,"text":13591},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12924,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":14272,"title":14273,"body":14274,"description":28,"extension":2360,"meta":15754,"navigation":99,"path":15755,"seo":15756,"stem":15757,"__hash__":15758},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":14275,"toc":15746},[14276,14279,14283,14286,14289,14458,14462,14467,14484,14489,14641,14645,14648,14651,15044,15048,15051,15056,15059,15371,15375,15381,15541,15543,15551,15555,15558,15565,15743],[10,14277,14273],{"id":14278},"_6引用",[14,14280,14282],{"id":14281},"_61引用基本用法","6.1引用基本用法",[19,14284,14285],{},"引用的本质：给变量起别名",[19,14287,14288],{},"语法：数据类型 &别名=原名",[23,14290,14292],{"className":2422,"code":14291,"language":2424,"meta":28,"style":28},"int main() {\n\n    int a = 10;\n    int &b = a;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F10\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F10\n\n    b = 100;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F100\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F100\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,14293,14294,14302,14306,14318,14330,14334,14353,14372,14376,14387,14391,14410,14428,14432,14442,14446,14454],{"__ignoreMap":28},[33,14295,14296,14298,14300],{"class":35,"line":36},[33,14297,2436],{"class":39},[33,14299,4232],{"class":43},[33,14301,13096],{"class":47},[33,14303,14304],{"class":35,"line":51},[33,14305,100],{"emptyLinePlaceholder":99},[33,14307,14308,14310,14312,14314,14316],{"class":35,"line":64},[33,14309,4244],{"class":39},[33,14311,877],{"class":47},[33,14313,57],{"class":39},[33,14315,4297],{"class":72},[33,14317,3567],{"class":47},[33,14319,14320,14322,14324,14326,14328],{"class":35,"line":76},[33,14321,4244],{"class":39},[33,14323,12828],{"class":39},[33,14325,13186],{"class":47},[33,14327,57],{"class":39},[33,14329,3706],{"class":47},[33,14331,14332],{"class":35,"line":87},[33,14333,100],{"emptyLinePlaceholder":99},[33,14335,14336,14338,14340,14343,14345,14347,14349,14351],{"class":35,"line":96},[33,14337,8775],{"class":47},[33,14339,3450],{"class":39},[33,14341,14342],{"class":60}," \"a = \"",[33,14344,3718],{"class":39},[33,14346,877],{"class":47},[33,14348,3450],{"class":39},[33,14350,13710],{"class":47},[33,14352,9514],{"class":2487},[33,14354,14355,14357,14359,14362,14364,14366,14368,14370],{"class":35,"line":103},[33,14356,8775],{"class":47},[33,14358,3450],{"class":39},[33,14360,14361],{"class":60}," \"b = \"",[33,14363,3718],{"class":39},[33,14365,883],{"class":47},[33,14367,3450],{"class":39},[33,14369,13710],{"class":47},[33,14371,9514],{"class":2487},[33,14373,14374],{"class":35,"line":108},[33,14375,100],{"emptyLinePlaceholder":99},[33,14377,14378,14381,14383,14385],{"class":35,"line":119},[33,14379,14380],{"class":47},"    b ",[33,14382,57],{"class":39},[33,14384,8001],{"class":72},[33,14386,3567],{"class":47},[33,14388,14389],{"class":35,"line":128},[33,14390,100],{"emptyLinePlaceholder":99},[33,14392,14393,14395,14397,14399,14401,14403,14405,14407],{"class":35,"line":1753},[33,14394,8775],{"class":47},[33,14396,3450],{"class":39},[33,14398,14342],{"class":60},[33,14400,3718],{"class":39},[33,14402,877],{"class":47},[33,14404,3450],{"class":39},[33,14406,13710],{"class":47},[33,14408,14409],{"class":2487},"\u002F\u002F100\n",[33,14411,14412,14414,14416,14418,14420,14422,14424,14426],{"class":35,"line":1763},[33,14413,8775],{"class":47},[33,14415,3450],{"class":39},[33,14417,14361],{"class":60},[33,14419,3718],{"class":39},[33,14421,883],{"class":47},[33,14423,3450],{"class":39},[33,14425,13710],{"class":47},[33,14427,14409],{"class":2487},[33,14429,14430],{"class":35,"line":1775},[33,14431,100],{"emptyLinePlaceholder":99},[33,14433,14434,14436,14438,14440],{"class":35,"line":1780},[33,14435,4562],{"class":43},[33,14437,133],{"class":47},[33,14439,4567],{"class":60},[33,14441,4976],{"class":47},[33,14443,14444],{"class":35,"line":1785},[33,14445,100],{"emptyLinePlaceholder":99},[33,14447,14448,14450,14452],{"class":35,"line":1940},[33,14449,90],{"class":39},[33,14451,1437],{"class":72},[33,14453,3567],{"class":47},[33,14455,14456],{"class":35,"line":2183},[33,14457,1010],{"class":47},[14,14459,14461],{"id":14460},"_62引用的注意事项","6.2引用的注意事项",[328,14463,14464],{},[331,14465,14466],{},"引用必须要初始化",[23,14468,14470],{"className":2422,"code":14469,"language":2424,"meta":28,"style":28},"int &b;\u002F\u002F非常错误！\n",[30,14471,14472],{"__ignoreMap":28},[33,14473,14474,14476,14478,14481],{"class":35,"line":36},[33,14475,2436],{"class":39},[33,14477,12828],{"class":39},[33,14479,14480],{"class":47},"b;",[33,14482,14483],{"class":2487},"\u002F\u002F非常错误！\n",[328,14485,14486],{"start":51},[331,14487,14488],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[23,14490,14492],{"className":2422,"code":14491,"language":2424,"meta":28,"style":28},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[30,14493,14494,14502,14514,14526,14534,14550,14563,14581,14599,14619,14629,14637],{"__ignoreMap":28},[33,14495,14496,14498,14500],{"class":35,"line":36},[33,14497,2436],{"class":39},[33,14499,4232],{"class":43},[33,14501,13096],{"class":47},[33,14503,14504,14506,14508,14510,14512],{"class":35,"line":51},[33,14505,4244],{"class":39},[33,14507,877],{"class":47},[33,14509,57],{"class":39},[33,14511,4297],{"class":72},[33,14513,3567],{"class":47},[33,14515,14516,14518,14520,14522,14524],{"class":35,"line":64},[33,14517,4244],{"class":39},[33,14519,883],{"class":47},[33,14521,57],{"class":39},[33,14523,11196],{"class":72},[33,14525,3567],{"class":47},[33,14527,14528,14531],{"class":35,"line":76},[33,14529,14530],{"class":2487},"    \u002F\u002Fint &c;",[33,14532,14533],{"class":2487}," \u002F\u002F错误，引用必须初始化\n",[33,14535,14536,14538,14540,14542,14544,14547],{"class":35,"line":87},[33,14537,4244],{"class":39},[33,14539,12828],{"class":39},[33,14541,5203],{"class":47},[33,14543,57],{"class":39},[33,14545,14546],{"class":47}," a;",[33,14548,14549],{"class":2487}," \u002F\u002F一旦初始化后，就不可以更改\n",[33,14551,14552,14555,14557,14560],{"class":35,"line":96},[33,14553,14554],{"class":47},"    c ",[33,14556,57],{"class":39},[33,14558,14559],{"class":47}," b;",[33,14561,14562],{"class":2487}," \u002F\u002F这是赋值操作，不是更改引用\n",[33,14564,14565,14567,14569,14571,14573,14575,14577,14579],{"class":35,"line":103},[33,14566,8775],{"class":47},[33,14568,3450],{"class":39},[33,14570,14342],{"class":60},[33,14572,3718],{"class":39},[33,14574,877],{"class":47},[33,14576,3450],{"class":39},[33,14578,13710],{"class":47},[33,14580,9499],{"class":2487},[33,14582,14583,14585,14587,14589,14591,14593,14595,14597],{"class":35,"line":108},[33,14584,8775],{"class":47},[33,14586,3450],{"class":39},[33,14588,14361],{"class":60},[33,14590,3718],{"class":39},[33,14592,883],{"class":47},[33,14594,3450],{"class":39},[33,14596,13710],{"class":47},[33,14598,9499],{"class":2487},[33,14600,14601,14603,14605,14608,14610,14613,14615,14617],{"class":35,"line":119},[33,14602,8775],{"class":47},[33,14604,3450],{"class":39},[33,14606,14607],{"class":60}," \"c = \"",[33,14609,3718],{"class":39},[33,14611,14612],{"class":47}," c ",[33,14614,3450],{"class":39},[33,14616,13710],{"class":47},[33,14618,9499],{"class":2487},[33,14620,14621,14623,14625,14627],{"class":35,"line":128},[33,14622,4562],{"class":43},[33,14624,133],{"class":47},[33,14626,4567],{"class":60},[33,14628,4976],{"class":47},[33,14630,14631,14633,14635],{"class":35,"line":1753},[33,14632,90],{"class":39},[33,14634,1437],{"class":72},[33,14636,3567],{"class":47},[33,14638,14639],{"class":35,"line":1763},[33,14640,1010],{"class":47},[14,14642,14644],{"id":14643},"_63引用做函数参数","6.3引用做函数参数",[19,14646,14647],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14649,14650],{},"优点：可以简化指针修改实参",[23,14652,14654],{"className":2422,"code":14653,"language":2424,"meta":28,"style":28},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[30,14655,14656,14661,14683,14694,14704,14713,14717,14721,14726,14748,14760,14772,14782,14786,14790,14795,14817,14827,14835,14843,14847,14851,14859,14863,14875,14887,14891,14902,14928,14932,14952,14976,14980,14990,15014,15018,15028,15032,15040],{"__ignoreMap":28},[33,14657,14658],{"class":35,"line":36},[33,14659,14660],{"class":2487},"\u002F\u002F1. 值传递\n",[33,14662,14663,14665,14668,14670,14672,14674,14676,14678,14680],{"class":35,"line":51},[33,14664,7611],{"class":39},[33,14666,14667],{"class":43}," mySwap01",[33,14669,133],{"class":47},[33,14671,2436],{"class":39},[33,14673,3672],{"class":289},[33,14675,245],{"class":47},[33,14677,2436],{"class":39},[33,14679,5090],{"class":289},[33,14681,14682],{"class":47},") {\n",[33,14684,14685,14687,14690,14692],{"class":35,"line":64},[33,14686,4244],{"class":39},[33,14688,14689],{"class":47}," temp ",[33,14691,57],{"class":39},[33,14693,3706],{"class":47},[33,14695,14696,14699,14701],{"class":35,"line":76},[33,14697,14698],{"class":47},"    a ",[33,14700,57],{"class":39},[33,14702,14703],{"class":47}," b;\n",[33,14705,14706,14708,14710],{"class":35,"line":87},[33,14707,14380],{"class":47},[33,14709,57],{"class":39},[33,14711,14712],{"class":47}," temp;\n",[33,14714,14715],{"class":35,"line":96},[33,14716,1010],{"class":47},[33,14718,14719],{"class":35,"line":103},[33,14720,100],{"emptyLinePlaceholder":99},[33,14722,14723],{"class":35,"line":108},[33,14724,14725],{"class":2487},"\u002F\u002F2. 地址传递\n",[33,14727,14728,14730,14733,14735,14738,14740,14742,14744,14746],{"class":35,"line":119},[33,14729,7611],{"class":39},[33,14731,14732],{"class":43}," mySwap02",[33,14734,133],{"class":47},[33,14736,14737],{"class":39},"int*",[33,14739,3672],{"class":289},[33,14741,245],{"class":47},[33,14743,14737],{"class":39},[33,14745,5090],{"class":289},[33,14747,14682],{"class":47},[33,14749,14750,14752,14754,14756,14758],{"class":35,"line":128},[33,14751,4244],{"class":39},[33,14753,14689],{"class":47},[33,14755,57],{"class":39},[33,14757,8764],{"class":39},[33,14759,8443],{"class":47},[33,14761,14762,14764,14766,14768,14770],{"class":35,"line":1753},[33,14763,8649],{"class":39},[33,14765,13160],{"class":47},[33,14767,57],{"class":39},[33,14769,8764],{"class":39},[33,14771,8315],{"class":47},[33,14773,14774,14776,14778,14780],{"class":35,"line":1763},[33,14775,8649],{"class":39},[33,14777,13186],{"class":47},[33,14779,57],{"class":39},[33,14781,14712],{"class":47},[33,14783,14784],{"class":35,"line":1775},[33,14785,1010],{"class":47},[33,14787,14788],{"class":35,"line":1780},[33,14789,100],{"emptyLinePlaceholder":99},[33,14791,14792],{"class":35,"line":1785},[33,14793,14794],{"class":2487},"\u002F\u002F3. 引用传递\n",[33,14796,14797,14799,14802,14804,14807,14809,14811,14813,14815],{"class":35,"line":1940},[33,14798,7611],{"class":39},[33,14800,14801],{"class":43}," mySwap03",[33,14803,133],{"class":47},[33,14805,14806],{"class":39},"int&",[33,14808,3672],{"class":289},[33,14810,245],{"class":47},[33,14812,14806],{"class":39},[33,14814,5090],{"class":289},[33,14816,14682],{"class":47},[33,14818,14819,14821,14823,14825],{"class":35,"line":2183},[33,14820,4244],{"class":39},[33,14822,14689],{"class":47},[33,14824,57],{"class":39},[33,14826,3706],{"class":47},[33,14828,14829,14831,14833],{"class":35,"line":2208},[33,14830,14698],{"class":47},[33,14832,57],{"class":39},[33,14834,14703],{"class":47},[33,14836,14837,14839,14841],{"class":35,"line":2234},[33,14838,14380],{"class":47},[33,14840,57],{"class":39},[33,14842,14712],{"class":47},[33,14844,14845],{"class":35,"line":2239},[33,14846,1010],{"class":47},[33,14848,14849],{"class":35,"line":2247},[33,14850,100],{"emptyLinePlaceholder":99},[33,14852,14853,14855,14857],{"class":35,"line":2255},[33,14854,2436],{"class":39},[33,14856,4232],{"class":43},[33,14858,13096],{"class":47},[33,14860,14861],{"class":35,"line":3992},[33,14862,100],{"emptyLinePlaceholder":99},[33,14864,14865,14867,14869,14871,14873],{"class":35,"line":4009},[33,14866,4244],{"class":39},[33,14868,877],{"class":47},[33,14870,57],{"class":39},[33,14872,4297],{"class":72},[33,14874,3567],{"class":47},[33,14876,14877,14879,14881,14883,14885],{"class":35,"line":4014},[33,14878,4244],{"class":39},[33,14880,883],{"class":47},[33,14882,57],{"class":39},[33,14884,11196],{"class":72},[33,14886,3567],{"class":47},[33,14888,14889],{"class":35,"line":4019},[33,14890,100],{"emptyLinePlaceholder":99},[33,14892,14893,14896,14899],{"class":35,"line":4024},[33,14894,14895],{"class":43},"    mySwap01",[33,14897,14898],{"class":47},"(a, b);",[33,14900,14901],{"class":2487},"\u002F\u002F值传递，形参不会修饰实参\n",[33,14903,14904,14906,14908,14911,14913,14915,14917,14920,14922,14924,14926],{"class":35,"line":4038},[33,14905,8775],{"class":47},[33,14907,3450],{"class":39},[33,14909,14910],{"class":60}," \"a:\"",[33,14912,3718],{"class":39},[33,14914,877],{"class":47},[33,14916,3450],{"class":39},[33,14918,14919],{"class":60}," \" b:\"",[33,14921,3718],{"class":39},[33,14923,883],{"class":47},[33,14925,3450],{"class":39},[33,14927,11086],{"class":47},[33,14929,14930],{"class":35,"line":4043},[33,14931,100],{"emptyLinePlaceholder":99},[33,14933,14934,14937,14939,14941,14944,14946,14949],{"class":35,"line":4834},[33,14935,14936],{"class":43},"    mySwap02",[33,14938,133],{"class":47},[33,14940,2774],{"class":39},[33,14942,14943],{"class":47},"a, ",[33,14945,2774],{"class":39},[33,14947,14948],{"class":47},"b);",[33,14950,14951],{"class":2487},"\u002F\u002F地址传递，形参会修饰实参\n",[33,14953,14954,14956,14958,14960,14962,14964,14966,14968,14970,14972,14974],{"class":35,"line":4848},[33,14955,8775],{"class":47},[33,14957,3450],{"class":39},[33,14959,14910],{"class":60},[33,14961,3718],{"class":39},[33,14963,877],{"class":47},[33,14965,3450],{"class":39},[33,14967,14919],{"class":60},[33,14969,3718],{"class":39},[33,14971,883],{"class":47},[33,14973,3450],{"class":39},[33,14975,11086],{"class":47},[33,14977,14978],{"class":35,"line":4856},[33,14979,100],{"emptyLinePlaceholder":99},[33,14981,14982,14985,14987],{"class":35,"line":4861},[33,14983,14984],{"class":43},"    mySwap03",[33,14986,14898],{"class":47},[33,14988,14989],{"class":2487},"\u002F\u002F引用传递，形参会修饰实参\n",[33,14991,14992,14994,14996,14998,15000,15002,15004,15006,15008,15010,15012],{"class":35,"line":4867},[33,14993,8775],{"class":47},[33,14995,3450],{"class":39},[33,14997,14910],{"class":60},[33,14999,3718],{"class":39},[33,15001,877],{"class":47},[33,15003,3450],{"class":39},[33,15005,14919],{"class":60},[33,15007,3718],{"class":39},[33,15009,883],{"class":47},[33,15011,3450],{"class":39},[33,15013,11086],{"class":47},[33,15015,15016],{"class":35,"line":4873},[33,15017,100],{"emptyLinePlaceholder":99},[33,15019,15020,15022,15024,15026],{"class":35,"line":4878},[33,15021,4562],{"class":43},[33,15023,133],{"class":47},[33,15025,4567],{"class":60},[33,15027,4976],{"class":47},[33,15029,15030],{"class":35,"line":10194},[33,15031,100],{"emptyLinePlaceholder":99},[33,15033,15034,15036,15038],{"class":35,"line":10218},[33,15035,90],{"class":39},[33,15037,1437],{"class":72},[33,15039,3567],{"class":47},[33,15041,15042],{"class":35,"line":10223},[33,15043,1010],{"class":47},[14,15045,15047],{"id":15046},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,15049,15050],{},"作用：引用是可以作为函数的返回值存在的",[19,15052,11271,15053],{},[2575,15054,15055],{},"不要返回局部变量引用",[19,15057,15058],{},"用法：函数调用作为左值",[23,15060,15062],{"className":12186,"code":15061,"language":12188,"meta":28,"style":28},"\u002F\u002F返回局部变量引用\nint& test01() {\n    int a = 10; \u002F\u002F局部变量\n    return a;\n}\n\n\u002F\u002F返回静态变量引用\nint& test02() {\n    static int a = 20;\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n    return a;\n}\n\nint main() {\n\n    \u002F\u002F不能返回局部变量的引用\n    int& ref = test01();\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F10 第一次正确，是因为编译器做了保留\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n\n    \u002F\u002F如果函数做左值，那么必须返回引用\n    int& ref2 = test02();\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n\n    test02() = 1000;\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,15063,15064,15069,15077,15092,15098,15102,15106,15111,15119,15136,15142,15146,15150,15158,15162,15167,15181,15201,15220,15224,15229,15242,15262,15280,15284,15300,15304,15323,15341,15345,15355,15359,15367],{"__ignoreMap":28},[33,15065,15066],{"class":35,"line":36},[33,15067,15068],{"class":2487},"\u002F\u002F返回局部变量引用\n",[33,15070,15071,15073,15075],{"class":35,"line":51},[33,15072,14806],{"class":39},[33,15074,7835],{"class":43},[33,15076,13096],{"class":47},[33,15078,15079,15081,15083,15085,15087,15089],{"class":35,"line":64},[33,15080,4244],{"class":39},[33,15082,877],{"class":47},[33,15084,57],{"class":39},[33,15086,4297],{"class":72},[33,15088,2484],{"class":47},[33,15090,15091],{"class":2487}," \u002F\u002F局部变量\n",[33,15093,15094,15096],{"class":35,"line":76},[33,15095,90],{"class":39},[33,15097,3706],{"class":47},[33,15099,15100],{"class":35,"line":87},[33,15101,1010],{"class":47},[33,15103,15104],{"class":35,"line":96},[33,15105,100],{"emptyLinePlaceholder":99},[33,15107,15108],{"class":35,"line":103},[33,15109,15110],{"class":2487},"\u002F\u002F返回静态变量引用\n",[33,15112,15113,15115,15117],{"class":35,"line":108},[33,15114,14806],{"class":39},[33,15116,7904],{"class":43},[33,15118,13096],{"class":47},[33,15120,15121,15123,15125,15127,15129,15131,15133],{"class":35,"line":119},[33,15122,13261],{"class":39},[33,15124,4641],{"class":39},[33,15126,877],{"class":47},[33,15128,57],{"class":39},[33,15130,11196],{"class":72},[33,15132,2484],{"class":47},[33,15134,15135],{"class":2487},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[33,15137,15138,15140],{"class":35,"line":128},[33,15139,90],{"class":39},[33,15141,3706],{"class":47},[33,15143,15144],{"class":35,"line":1753},[33,15145,1010],{"class":47},[33,15147,15148],{"class":35,"line":1763},[33,15149,100],{"emptyLinePlaceholder":99},[33,15151,15152,15154,15156],{"class":35,"line":1775},[33,15153,2436],{"class":39},[33,15155,4232],{"class":43},[33,15157,13096],{"class":47},[33,15159,15160],{"class":35,"line":1780},[33,15161,100],{"emptyLinePlaceholder":99},[33,15163,15164],{"class":35,"line":1785},[33,15165,15166],{"class":2487},"    \u002F\u002F不能返回局部变量的引用\n",[33,15168,15169,15172,15175,15177,15179],{"class":35,"line":1940},[33,15170,15171],{"class":39},"    int&",[33,15173,15174],{"class":47}," ref ",[33,15176,57],{"class":39},[33,15178,7835],{"class":43},[33,15180,7883],{"class":47},[33,15182,15183,15185,15187,15190,15192,15194,15196,15198],{"class":35,"line":2183},[33,15184,8775],{"class":47},[33,15186,3450],{"class":39},[33,15188,15189],{"class":60}," \"ref = \"",[33,15191,3718],{"class":39},[33,15193,15174],{"class":47},[33,15195,3450],{"class":39},[33,15197,13710],{"class":47},[33,15199,15200],{"class":2487},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[33,15202,15203,15205,15207,15209,15211,15213,15215,15217],{"class":35,"line":2208},[33,15204,8775],{"class":47},[33,15206,3450],{"class":39},[33,15208,15189],{"class":60},[33,15210,3718],{"class":39},[33,15212,15174],{"class":47},[33,15214,3450],{"class":39},[33,15216,13710],{"class":47},[33,15218,15219],{"class":2487},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[33,15221,15222],{"class":35,"line":2234},[33,15223,100],{"emptyLinePlaceholder":99},[33,15225,15226],{"class":35,"line":2239},[33,15227,15228],{"class":2487},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[33,15230,15231,15233,15236,15238,15240],{"class":35,"line":2247},[33,15232,15171],{"class":39},[33,15234,15235],{"class":47}," ref2 ",[33,15237,57],{"class":39},[33,15239,7904],{"class":43},[33,15241,7883],{"class":47},[33,15243,15244,15246,15248,15251,15253,15255,15257,15259],{"class":35,"line":2255},[33,15245,8775],{"class":47},[33,15247,3450],{"class":39},[33,15249,15250],{"class":60}," \"ref2 = \"",[33,15252,3718],{"class":39},[33,15254,15235],{"class":47},[33,15256,3450],{"class":39},[33,15258,13710],{"class":47},[33,15260,15261],{"class":2487}," \u002F\u002F20\n",[33,15263,15264,15266,15268,15270,15272,15274,15276,15278],{"class":35,"line":3992},[33,15265,8775],{"class":47},[33,15267,3450],{"class":39},[33,15269,15250],{"class":60},[33,15271,3718],{"class":39},[33,15273,15235],{"class":47},[33,15275,3450],{"class":39},[33,15277,13710],{"class":47},[33,15279,15261],{"class":2487},[33,15281,15282],{"class":35,"line":4009},[33,15283,100],{"emptyLinePlaceholder":99},[33,15285,15286,15288,15291,15293,15295,15297],{"class":35,"line":4014},[33,15287,7949],{"class":43},[33,15289,15290],{"class":47},"() ",[33,15292,57],{"class":39},[33,15294,5256],{"class":72},[33,15296,2484],{"class":47},[33,15298,15299],{"class":2487},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[33,15301,15302],{"class":35,"line":4019},[33,15303,100],{"emptyLinePlaceholder":99},[33,15305,15306,15308,15310,15312,15314,15316,15318,15320],{"class":35,"line":4024},[33,15307,8775],{"class":47},[33,15309,3450],{"class":39},[33,15311,15250],{"class":60},[33,15313,3718],{"class":39},[33,15315,15235],{"class":47},[33,15317,3450],{"class":39},[33,15319,13710],{"class":47},[33,15321,15322],{"class":2487}," \u002F\u002F1000\n",[33,15324,15325,15327,15329,15331,15333,15335,15337,15339],{"class":35,"line":4038},[33,15326,8775],{"class":47},[33,15328,3450],{"class":39},[33,15330,15250],{"class":60},[33,15332,3718],{"class":39},[33,15334,15235],{"class":47},[33,15336,3450],{"class":39},[33,15338,13710],{"class":47},[33,15340,15322],{"class":2487},[33,15342,15343],{"class":35,"line":4043},[33,15344,100],{"emptyLinePlaceholder":99},[33,15346,15347,15349,15351,15353],{"class":35,"line":4834},[33,15348,4562],{"class":43},[33,15350,133],{"class":47},[33,15352,4567],{"class":60},[33,15354,4976],{"class":47},[33,15356,15357],{"class":35,"line":4848},[33,15358,100],{"emptyLinePlaceholder":99},[33,15360,15361,15363,15365],{"class":35,"line":4856},[33,15362,90],{"class":39},[33,15364,1437],{"class":72},[33,15366,3567],{"class":47},[33,15368,15369],{"class":35,"line":4861},[33,15370,1010],{"class":47},[14,15372,15374],{"id":15373},"_65引用的本质","6.5引用的本质",[19,15376,15377,15378],{},"本质：",[2575,15379,15380],{},"引用的本质在c++内部实现是一个指针常量.",[23,15382,15384],{"className":2422,"code":15383,"language":2424,"meta":28,"style":28},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[30,15385,15386,15391,15407,15421,15425,15434,15446,15451,15456,15467,15480,15484,15500,15517,15521,15529,15537],{"__ignoreMap":28},[33,15387,15388],{"class":35,"line":36},[33,15389,15390],{"class":2487},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[33,15392,15393,15395,15397,15399,15401,15404],{"class":35,"line":51},[33,15394,7611],{"class":39},[33,15396,13626],{"class":43},[33,15398,133],{"class":47},[33,15400,14806],{"class":39},[33,15402,15403],{"class":289}," ref",[33,15405,15406],{"class":47},"){\n",[33,15408,15409,15412,15414,15416,15418],{"class":35,"line":64},[33,15410,15411],{"class":47},"    ref ",[33,15413,57],{"class":39},[33,15415,8001],{"class":72},[33,15417,2484],{"class":47},[33,15419,15420],{"class":2487}," \u002F\u002F ref是引用，转换为*ref = 100\n",[33,15422,15423],{"class":35,"line":76},[33,15424,1010],{"class":47},[33,15426,15427,15429,15431],{"class":35,"line":87},[33,15428,2436],{"class":39},[33,15430,4232],{"class":43},[33,15432,15433],{"class":47},"(){\n",[33,15435,15436,15438,15440,15442,15444],{"class":35,"line":96},[33,15437,4244],{"class":39},[33,15439,877],{"class":47},[33,15441,57],{"class":39},[33,15443,4297],{"class":72},[33,15445,3567],{"class":47},[33,15447,15448],{"class":35,"line":103},[33,15449,15450],{"class":47},"    \n",[33,15452,15453],{"class":35,"line":108},[33,15454,15455],{"class":2487},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[33,15457,15458,15460,15462,15464],{"class":35,"line":119},[33,15459,15171],{"class":39},[33,15461,15174],{"class":47},[33,15463,57],{"class":39},[33,15465,15466],{"class":47}," a; \n",[33,15468,15469,15471,15473,15475,15477],{"class":35,"line":128},[33,15470,15411],{"class":47},[33,15472,57],{"class":39},[33,15474,11196],{"class":72},[33,15476,2484],{"class":47},[33,15478,15479],{"class":2487}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[33,15481,15482],{"class":35,"line":1753},[33,15483,15450],{"class":47},[33,15485,15486,15488,15490,15492,15494,15496,15498],{"class":35,"line":1763},[33,15487,8775],{"class":47},[33,15489,3450],{"class":39},[33,15491,14910],{"class":60},[33,15493,3718],{"class":39},[33,15495,877],{"class":47},[33,15497,3450],{"class":39},[33,15499,11086],{"class":47},[33,15501,15502,15504,15506,15509,15511,15513,15515],{"class":35,"line":1775},[33,15503,8775],{"class":47},[33,15505,3450],{"class":39},[33,15507,15508],{"class":60}," \"ref:\"",[33,15510,3718],{"class":39},[33,15512,15174],{"class":47},[33,15514,3450],{"class":39},[33,15516,11086],{"class":47},[33,15518,15519],{"class":35,"line":1780},[33,15520,15450],{"class":47},[33,15522,15523,15526],{"class":35,"line":1785},[33,15524,15525],{"class":43},"    func",[33,15527,15528],{"class":47},"(a);\n",[33,15530,15531,15533,15535],{"class":35,"line":1940},[33,15532,90],{"class":39},[33,15534,1437],{"class":72},[33,15536,3567],{"class":47},[33,15538,15539],{"class":35,"line":2183},[33,15540,1010],{"class":47},[19,15542,13573],{},[328,15544,15545,15548],{},[331,15546,15547],{},"引用的本质，就是一个指针常量",[331,15549,15550],{},"引用一旦初始化，就不可以发生改变",[14,15552,15554],{"id":15553},"_66常量引用","6.6常量引用",[19,15556,15557],{},"作用：常量引用主要用来修饰形参",[19,15559,15560,15561,15564],{},"在函数形参列表中，可以加",[2575,15562,15563],{},"const修饰形参","，防止形参改变实参",[23,15566,15568],{"className":2422,"code":15567,"language":2424,"meta":28,"style":28},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,15569,15570,15575,15580,15599,15604,15617,15621,15625,15633,15637,15642,15647,15661,15665,15673,15685,15689,15694,15706,15713,15717,15727,15731,15739],{"__ignoreMap":28},[33,15571,15572],{"class":35,"line":36},[33,15573,15574],{"class":2487},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[33,15576,15577],{"class":35,"line":51},[33,15578,15579],{"class":2487},"\u002F\u002F加上const就不能修改实参的\n",[33,15581,15582,15584,15587,15589,15591,15594,15597],{"class":35,"line":64},[33,15583,7611],{"class":39},[33,15585,15586],{"class":43}," showValue",[33,15588,133],{"class":47},[33,15590,9038],{"class":39},[33,15592,15593],{"class":39}," int&",[33,15595,15596],{"class":289}," v",[33,15598,14682],{"class":47},[33,15600,15601],{"class":35,"line":76},[33,15602,15603],{"class":2487},"    \u002F\u002Fv += 100;\n",[33,15605,15606,15608,15610,15613,15615],{"class":35,"line":87},[33,15607,8775],{"class":47},[33,15609,3450],{"class":39},[33,15611,15612],{"class":47}," v ",[33,15614,3450],{"class":39},[33,15616,11086],{"class":47},[33,15618,15619],{"class":35,"line":96},[33,15620,1010],{"class":47},[33,15622,15623],{"class":35,"line":103},[33,15624,100],{"emptyLinePlaceholder":99},[33,15626,15627,15629,15631],{"class":35,"line":108},[33,15628,2436],{"class":39},[33,15630,4232],{"class":43},[33,15632,13096],{"class":47},[33,15634,15635],{"class":35,"line":119},[33,15636,100],{"emptyLinePlaceholder":99},[33,15638,15639],{"class":35,"line":128},[33,15640,15641],{"class":2487},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[33,15643,15644],{"class":35,"line":1753},[33,15645,15646],{"class":2487},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[33,15648,15649,15651,15653,15655,15657,15659],{"class":35,"line":1763},[33,15650,13462],{"class":39},[33,15652,15593],{"class":39},[33,15654,15174],{"class":47},[33,15656,57],{"class":39},[33,15658,4297],{"class":72},[33,15660,3567],{"class":47},[33,15662,15663],{"class":35,"line":1775},[33,15664,100],{"emptyLinePlaceholder":99},[33,15666,15667,15670],{"class":35,"line":1780},[33,15668,15669],{"class":2487},"    \u002F\u002Fref = 100;",[33,15671,15672],{"class":2487},"  \u002F\u002F加入const后不可以修改变量\n",[33,15674,15675,15677,15679,15681,15683],{"class":35,"line":1785},[33,15676,8775],{"class":47},[33,15678,3450],{"class":39},[33,15680,15174],{"class":47},[33,15682,3450],{"class":39},[33,15684,11086],{"class":47},[33,15686,15687],{"class":35,"line":1940},[33,15688,100],{"emptyLinePlaceholder":99},[33,15690,15691],{"class":35,"line":2183},[33,15692,15693],{"class":2487},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[33,15695,15696,15698,15700,15702,15704],{"class":35,"line":2208},[33,15697,4244],{"class":39},[33,15699,877],{"class":47},[33,15701,57],{"class":39},[33,15703,4297],{"class":72},[33,15705,3567],{"class":47},[33,15707,15708,15711],{"class":35,"line":2234},[33,15709,15710],{"class":43},"    showValue",[33,15712,15528],{"class":47},[33,15714,15715],{"class":35,"line":2239},[33,15716,100],{"emptyLinePlaceholder":99},[33,15718,15719,15721,15723,15725],{"class":35,"line":2247},[33,15720,4562],{"class":43},[33,15722,133],{"class":47},[33,15724,4567],{"class":60},[33,15726,4976],{"class":47},[33,15728,15729],{"class":35,"line":2255},[33,15730,100],{"emptyLinePlaceholder":99},[33,15732,15733,15735,15737],{"class":35,"line":3992},[33,15734,90],{"class":39},[33,15736,1437],{"class":72},[33,15738,3567],{"class":47},[33,15740,15741],{"class":35,"line":4009},[33,15742,1010],{"class":47},[2331,15744,15745],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":15747},[15748,15749,15750,15751,15752,15753],{"id":14281,"depth":51,"text":14282},{"id":14460,"depth":51,"text":14461},{"id":14643,"depth":51,"text":14644},{"id":15046,"depth":51,"text":15047},{"id":15373,"depth":51,"text":15374},{"id":15553,"depth":51,"text":15554},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":14273,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15760,"title":15761,"body":15762,"description":28,"extension":2360,"meta":16843,"navigation":99,"path":16844,"seo":16845,"stem":16846,"__hash__":16847},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15763,"toc":16835},[15764,15767,15771,15774,15779,16011,16013,16024,16028,16031,16039,16143,16146,16150,16153,16157,16160,16165,16187,16193,16520,16523,16527,16535,16832],[10,15765,15761],{"id":15766},"_7函数高级部分",[14,15768,15770],{"id":15769},"_71函数默认参数","7.1函数默认参数",[19,15772,15773],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15775,7430,15776],{},[30,15777,15778],{}," 返回值类型  函数名 （参数= 默认值）{}",[23,15780,15782],{"className":2422,"code":15781,"language":2424,"meta":28,"style":28},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,15783,15784,15819,15834,15838,15842,15847,15852,15881,15901,15911,15915,15919,15927,15931,15959,15981,15985,15995,15999,16007],{"__ignoreMap":28},[33,15785,15786,15788,15790,15792,15794,15796,15798,15800,15802,15805,15807,15809,15811,15813,15815,15817],{"class":35,"line":36},[33,15787,2436],{"class":39},[33,15789,13626],{"class":43},[33,15791,133],{"class":47},[33,15793,2436],{"class":39},[33,15795,3672],{"class":289},[33,15797,245],{"class":47},[33,15799,2436],{"class":39},[33,15801,5090],{"class":289},[33,15803,15804],{"class":39}," =",[33,15806,4297],{"class":72},[33,15808,245],{"class":47},[33,15810,2436],{"class":39},[33,15812,5106],{"class":289},[33,15814,15804],{"class":39},[33,15816,4297],{"class":72},[33,15818,14682],{"class":47},[33,15820,15821,15823,15825,15827,15829,15831],{"class":35,"line":51},[33,15822,90],{"class":39},[33,15824,877],{"class":47},[33,15826,880],{"class":39},[33,15828,883],{"class":47},[33,15830,880],{"class":39},[33,15832,15833],{"class":47}," c;\n",[33,15835,15836],{"class":35,"line":64},[33,15837,1010],{"class":47},[33,15839,15840],{"class":35,"line":76},[33,15841,100],{"emptyLinePlaceholder":99},[33,15843,15844],{"class":35,"line":87},[33,15845,15846],{"class":2487},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[33,15848,15849],{"class":35,"line":96},[33,15850,15851],{"class":2487},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[33,15853,15854,15856,15859,15861,15863,15865,15867,15869,15871,15873,15875,15877,15879],{"class":35,"line":103},[33,15855,2436],{"class":39},[33,15857,15858],{"class":43}," func2",[33,15860,133],{"class":47},[33,15862,2436],{"class":39},[33,15864,3672],{"class":289},[33,15866,15804],{"class":39},[33,15868,4297],{"class":72},[33,15870,245],{"class":47},[33,15872,2436],{"class":39},[33,15874,5090],{"class":289},[33,15876,15804],{"class":39},[33,15878,4297],{"class":72},[33,15880,4976],{"class":47},[33,15882,15883,15885,15887,15889,15891,15893,15895,15897,15899],{"class":35,"line":108},[33,15884,2436],{"class":39},[33,15886,15858],{"class":43},[33,15888,133],{"class":47},[33,15890,2436],{"class":39},[33,15892,3672],{"class":289},[33,15894,245],{"class":47},[33,15896,2436],{"class":39},[33,15898,5090],{"class":289},[33,15900,14682],{"class":47},[33,15902,15903,15905,15907,15909],{"class":35,"line":119},[33,15904,90],{"class":39},[33,15906,877],{"class":47},[33,15908,880],{"class":39},[33,15910,14703],{"class":47},[33,15912,15913],{"class":35,"line":128},[33,15914,1010],{"class":47},[33,15916,15917],{"class":35,"line":1753},[33,15918,100],{"emptyLinePlaceholder":99},[33,15920,15921,15923,15925],{"class":35,"line":1763},[33,15922,2436],{"class":39},[33,15924,4232],{"class":43},[33,15926,13096],{"class":47},[33,15928,15929],{"class":35,"line":1775},[33,15930,100],{"emptyLinePlaceholder":99},[33,15932,15933,15935,15937,15940,15942,15944,15946,15948,15950,15952,15955,15957],{"class":35,"line":1780},[33,15934,8775],{"class":47},[33,15936,3450],{"class":39},[33,15938,15939],{"class":60}," \"ret = \"",[33,15941,3718],{"class":39},[33,15943,13626],{"class":43},[33,15945,133],{"class":47},[33,15947,1284],{"class":72},[33,15949,245],{"class":47},[33,15951,1284],{"class":72},[33,15953,15954],{"class":47},") ",[33,15956,3450],{"class":39},[33,15958,11086],{"class":47},[33,15960,15961,15963,15965,15967,15969,15971,15973,15975,15977,15979],{"class":35,"line":1785},[33,15962,8775],{"class":47},[33,15964,3450],{"class":39},[33,15966,15939],{"class":60},[33,15968,3718],{"class":39},[33,15970,13626],{"class":43},[33,15972,133],{"class":47},[33,15974,2734],{"class":72},[33,15976,15954],{"class":47},[33,15978,3450],{"class":39},[33,15980,11086],{"class":47},[33,15982,15983],{"class":35,"line":1940},[33,15984,100],{"emptyLinePlaceholder":99},[33,15986,15987,15989,15991,15993],{"class":35,"line":2183},[33,15988,4562],{"class":43},[33,15990,133],{"class":47},[33,15992,4567],{"class":60},[33,15994,4976],{"class":47},[33,15996,15997],{"class":35,"line":2208},[33,15998,100],{"emptyLinePlaceholder":99},[33,16000,16001,16003,16005],{"class":35,"line":2234},[33,16002,90],{"class":39},[33,16004,1437],{"class":72},[33,16006,3567],{"class":47},[33,16008,16009],{"class":35,"line":2239},[33,16010,1010],{"class":47},[19,16012,13573],{},[328,16014,16015,16018,16021],{},[331,16016,16017],{},"我传就用我；没传就用你",[331,16019,16020],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[331,16022,16023],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,16025,16027],{"id":16026},"_72函数的占位参数","7.2函数的占位参数",[19,16029,16030],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,16032,16033,16035,16036],{},[2575,16034,7430],{}," ",[30,16037,16038],{},"返回值类型 函数名 (数据类型){}",[23,16040,16042],{"className":2422,"code":16041,"language":2424,"meta":28,"style":28},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,16043,16044,16049,16067,16080,16084,16092,16096,16113,16117,16127,16131,16139],{"__ignoreMap":28},[33,16045,16046],{"class":35,"line":36},[33,16047,16048],{"class":2487},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[33,16050,16051,16053,16055,16057,16059,16061,16063,16065],{"class":35,"line":51},[33,16052,7611],{"class":39},[33,16054,13626],{"class":43},[33,16056,133],{"class":47},[33,16058,2436],{"class":39},[33,16060,3672],{"class":289},[33,16062,245],{"class":47},[33,16064,2436],{"class":39},[33,16066,14682],{"class":47},[33,16068,16069,16071,16073,16076,16078],{"class":35,"line":64},[33,16070,8775],{"class":47},[33,16072,3450],{"class":39},[33,16074,16075],{"class":60}," \"this is func\"",[33,16077,3718],{"class":39},[33,16079,11086],{"class":47},[33,16081,16082],{"class":35,"line":76},[33,16083,1010],{"class":47},[33,16085,16086,16088,16090],{"class":35,"line":87},[33,16087,2436],{"class":39},[33,16089,4232],{"class":43},[33,16091,13096],{"class":47},[33,16093,16094],{"class":35,"line":96},[33,16095,100],{"emptyLinePlaceholder":99},[33,16097,16098,16100,16102,16104,16106,16108,16110],{"class":35,"line":103},[33,16099,15525],{"class":43},[33,16101,133],{"class":47},[33,16103,1279],{"class":72},[33,16105,2799],{"class":47},[33,16107,1279],{"class":72},[33,16109,8212],{"class":47},[33,16111,16112],{"class":2487}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[33,16114,16115],{"class":35,"line":108},[33,16116,100],{"emptyLinePlaceholder":99},[33,16118,16119,16121,16123,16125],{"class":35,"line":119},[33,16120,4562],{"class":43},[33,16122,133],{"class":47},[33,16124,4567],{"class":60},[33,16126,4976],{"class":47},[33,16128,16129],{"class":35,"line":128},[33,16130,100],{"emptyLinePlaceholder":99},[33,16132,16133,16135,16137],{"class":35,"line":1753},[33,16134,90],{"class":39},[33,16136,1437],{"class":72},[33,16138,3567],{"class":47},[33,16140,16141],{"class":35,"line":1763},[33,16142,1010],{"class":47},[19,16144,16145],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,16147,16149],{"id":16148},"_73函数重载","7.3函数重载",[19,16151,16152],{},"意思是函数名是可以相同的",[631,16154,16156],{"id":16155},"_731基本语法","7.3.1基本语法",[19,16158,16159],{},"作用：函数名可以相同，提高复用性",[19,16161,16162],{},[2575,16163,16164],{},"函数重载满足条件：",[3413,16166,16167,16170,16173],{},[331,16168,16169],{},"同一个作用域下",[331,16171,16172],{},"函数名称相同",[331,16174,16175,16176,16179,16180,16183,16184],{},"函数参数",[2575,16177,16178],{},"类型不同","  或者 ",[2575,16181,16182],{},"个数不同"," 或者 ",[2575,16185,16186],{},"顺序不同",[19,16188,16189,16192],{},[2575,16190,16191],{},"注意:","  函数的返回值不可以作为函数重载的条件",[23,16194,16196],{"className":12186,"code":16195,"language":12188,"meta":28,"style":28},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[30,16197,16198,16203,16211,16215,16228,16232,16246,16250,16263,16267,16282,16286,16299,16303,16324,16328,16341,16345,16365,16369,16382,16386,16390,16395,16400,16405,16410,16415,16419,16423,16431,16435,16441,16451,16461,16475,16490,16494,16504,16508,16516],{"__ignoreMap":28},[33,16199,16200],{"class":35,"line":36},[33,16201,16202],{"class":2487},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[33,16204,16205,16207,16209],{"class":35,"line":51},[33,16206,7611],{"class":39},[33,16208,13626],{"class":43},[33,16210,4235],{"class":47},[33,16212,16213],{"class":35,"line":64},[33,16214,3820],{"class":47},[33,16216,16217,16219,16221,16224,16226],{"class":35,"line":76},[33,16218,8775],{"class":47},[33,16220,3450],{"class":39},[33,16222,16223],{"class":60}," \"func 的调用！\"",[33,16225,3718],{"class":39},[33,16227,11086],{"class":47},[33,16229,16230],{"class":35,"line":87},[33,16231,1010],{"class":47},[33,16233,16234,16236,16238,16240,16242,16244],{"class":35,"line":96},[33,16235,7611],{"class":39},[33,16237,13626],{"class":43},[33,16239,133],{"class":47},[33,16241,2436],{"class":39},[33,16243,3672],{"class":289},[33,16245,226],{"class":47},[33,16247,16248],{"class":35,"line":103},[33,16249,3820],{"class":47},[33,16251,16252,16254,16256,16259,16261],{"class":35,"line":108},[33,16253,8775],{"class":47},[33,16255,3450],{"class":39},[33,16257,16258],{"class":60}," \"func (int a) 的调用！\"",[33,16260,3718],{"class":39},[33,16262,11086],{"class":47},[33,16264,16265],{"class":35,"line":119},[33,16266,1010],{"class":47},[33,16268,16269,16271,16273,16275,16278,16280],{"class":35,"line":128},[33,16270,7611],{"class":39},[33,16272,13626],{"class":43},[33,16274,133],{"class":47},[33,16276,16277],{"class":39},"double",[33,16279,3672],{"class":289},[33,16281,226],{"class":47},[33,16283,16284],{"class":35,"line":1753},[33,16285,3820],{"class":47},[33,16287,16288,16290,16292,16295,16297],{"class":35,"line":1763},[33,16289,8775],{"class":47},[33,16291,3450],{"class":39},[33,16293,16294],{"class":60}," \"func (double a)的调用！\"",[33,16296,3718],{"class":39},[33,16298,11086],{"class":47},[33,16300,16301],{"class":35,"line":1775},[33,16302,1010],{"class":47},[33,16304,16305,16307,16309,16311,16313,16315,16318,16320,16322],{"class":35,"line":1780},[33,16306,7611],{"class":39},[33,16308,13626],{"class":43},[33,16310,133],{"class":47},[33,16312,2436],{"class":39},[33,16314,3672],{"class":289},[33,16316,16317],{"class":47}," ,",[33,16319,16277],{"class":39},[33,16321,5090],{"class":289},[33,16323,226],{"class":47},[33,16325,16326],{"class":35,"line":1785},[33,16327,3820],{"class":47},[33,16329,16330,16332,16334,16337,16339],{"class":35,"line":1940},[33,16331,8775],{"class":47},[33,16333,3450],{"class":39},[33,16335,16336],{"class":60}," \"func (int a ,double b) 的调用！\"",[33,16338,3718],{"class":39},[33,16340,11086],{"class":47},[33,16342,16343],{"class":35,"line":2183},[33,16344,1010],{"class":47},[33,16346,16347,16349,16351,16353,16355,16357,16359,16361,16363],{"class":35,"line":2208},[33,16348,7611],{"class":39},[33,16350,13626],{"class":43},[33,16352,133],{"class":47},[33,16354,16277],{"class":39},[33,16356,3672],{"class":289},[33,16358,16317],{"class":47},[33,16360,2436],{"class":39},[33,16362,5090],{"class":289},[33,16364,226],{"class":47},[33,16366,16367],{"class":35,"line":2234},[33,16368,3820],{"class":47},[33,16370,16371,16373,16375,16378,16380],{"class":35,"line":2239},[33,16372,8775],{"class":47},[33,16374,3450],{"class":39},[33,16376,16377],{"class":60}," \"func (double a ,int b)的调用！\"",[33,16379,3718],{"class":39},[33,16381,11086],{"class":47},[33,16383,16384],{"class":35,"line":2247},[33,16385,1010],{"class":47},[33,16387,16388],{"class":35,"line":2255},[33,16389,100],{"emptyLinePlaceholder":99},[33,16391,16392],{"class":35,"line":3992},[33,16393,16394],{"class":2487},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[33,16396,16397],{"class":35,"line":4009},[33,16398,16399],{"class":2487},"\u002F\u002Fint func(double a, int b)\n",[33,16401,16402],{"class":35,"line":4014},[33,16403,16404],{"class":2487},"\u002F\u002F{\n",[33,16406,16407],{"class":35,"line":4019},[33,16408,16409],{"class":2487},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[33,16411,16412],{"class":35,"line":4024},[33,16413,16414],{"class":2487},"\u002F\u002F}\n",[33,16416,16417],{"class":35,"line":4038},[33,16418,100],{"emptyLinePlaceholder":99},[33,16420,16421],{"class":35,"line":4043},[33,16422,100],{"emptyLinePlaceholder":99},[33,16424,16425,16427,16429],{"class":35,"line":4834},[33,16426,2436],{"class":39},[33,16428,4232],{"class":43},[33,16430,13096],{"class":47},[33,16432,16433],{"class":35,"line":4848},[33,16434,100],{"emptyLinePlaceholder":99},[33,16436,16437,16439],{"class":35,"line":4856},[33,16438,15525],{"class":43},[33,16440,7883],{"class":47},[33,16442,16443,16445,16447,16449],{"class":35,"line":4861},[33,16444,15525],{"class":43},[33,16446,133],{"class":47},[33,16448,1279],{"class":72},[33,16450,4976],{"class":47},[33,16452,16453,16455,16457,16459],{"class":35,"line":4867},[33,16454,15525],{"class":43},[33,16456,133],{"class":47},[33,16458,2479],{"class":72},[33,16460,4976],{"class":47},[33,16462,16463,16465,16467,16469,16471,16473],{"class":35,"line":4873},[33,16464,15525],{"class":43},[33,16466,133],{"class":47},[33,16468,1279],{"class":72},[33,16470,2799],{"class":47},[33,16472,2479],{"class":72},[33,16474,4976],{"class":47},[33,16476,16477,16479,16481,16483,16486,16488],{"class":35,"line":4878},[33,16478,15525],{"class":43},[33,16480,133],{"class":47},[33,16482,2479],{"class":72},[33,16484,16485],{"class":47}," , ",[33,16487,1279],{"class":72},[33,16489,4976],{"class":47},[33,16491,16492],{"class":35,"line":10194},[33,16493,15450],{"class":47},[33,16495,16496,16498,16500,16502],{"class":35,"line":10218},[33,16497,4562],{"class":43},[33,16499,133],{"class":47},[33,16501,4567],{"class":60},[33,16503,4976],{"class":47},[33,16505,16506],{"class":35,"line":10223},[33,16507,100],{"emptyLinePlaceholder":99},[33,16509,16510,16512,16514],{"class":35,"line":10229},[33,16511,90],{"class":39},[33,16513,1437],{"class":72},[33,16515,3567],{"class":47},[33,16517,16518],{"class":35,"line":10256},[33,16519,1010],{"class":47},[19,16521,16522],{},"重点：函数返回值不可以作为函数重载条件！",[631,16524,16526],{"id":16525},"_732注意事项","7.3.2注意事项",[3413,16528,16529,16532],{},[331,16530,16531],{},"引用作为重载条件!!!",[331,16533,16534],{},"函数重载碰到函数默认参数",[23,16536,16538],{"className":2422,"code":16537,"language":2424,"meta":28,"style":28},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,16539,16540,16545,16550,16554,16570,16574,16587,16591,16595,16613,16617,16630,16634,16638,16642,16647,16651,16675,16679,16692,16696,16700,16714,16718,16731,16735,16739,16747,16751,16763,16773,16786,16790,16794,16802,16806,16816,16820,16828],{"__ignoreMap":28},[33,16541,16542],{"class":35,"line":36},[33,16543,16544],{"class":2487},"\u002F\u002F函数重载注意事项\n",[33,16546,16547],{"class":35,"line":51},[33,16548,16549],{"class":2487},"\u002F\u002F1、引用作为重载条件\n",[33,16551,16552],{"class":35,"line":64},[33,16553,100],{"emptyLinePlaceholder":99},[33,16555,16556,16558,16560,16562,16564,16566,16568],{"class":35,"line":76},[33,16557,7611],{"class":39},[33,16559,13626],{"class":43},[33,16561,133],{"class":47},[33,16563,2436],{"class":39},[33,16565,12828],{"class":39},[33,16567,2663],{"class":289},[33,16569,226],{"class":47},[33,16571,16572],{"class":35,"line":87},[33,16573,3820],{"class":47},[33,16575,16576,16578,16580,16583,16585],{"class":35,"line":96},[33,16577,8775],{"class":47},[33,16579,3450],{"class":39},[33,16581,16582],{"class":60}," \"func (int &a) 调用 \"",[33,16584,3718],{"class":39},[33,16586,11086],{"class":47},[33,16588,16589],{"class":35,"line":103},[33,16590,1010],{"class":47},[33,16592,16593],{"class":35,"line":108},[33,16594,100],{"emptyLinePlaceholder":99},[33,16596,16597,16599,16601,16603,16605,16607,16609,16611],{"class":35,"line":119},[33,16598,7611],{"class":39},[33,16600,13626],{"class":43},[33,16602,133],{"class":47},[33,16604,9038],{"class":39},[33,16606,4641],{"class":39},[33,16608,12828],{"class":39},[33,16610,2663],{"class":289},[33,16612,226],{"class":47},[33,16614,16615],{"class":35,"line":128},[33,16616,3820],{"class":47},[33,16618,16619,16621,16623,16626,16628],{"class":35,"line":1753},[33,16620,8775],{"class":47},[33,16622,3450],{"class":39},[33,16624,16625],{"class":60}," \"func (const int &a) 调用 \"",[33,16627,3718],{"class":39},[33,16629,11086],{"class":47},[33,16631,16632],{"class":35,"line":1763},[33,16633,1010],{"class":47},[33,16635,16636],{"class":35,"line":1775},[33,16637,100],{"emptyLinePlaceholder":99},[33,16639,16640],{"class":35,"line":1780},[33,16641,100],{"emptyLinePlaceholder":99},[33,16643,16644],{"class":35,"line":1785},[33,16645,16646],{"class":2487},"\u002F\u002F2、函数重载碰到函数默认参数\n",[33,16648,16649],{"class":35,"line":1940},[33,16650,100],{"emptyLinePlaceholder":99},[33,16652,16653,16655,16657,16659,16661,16663,16665,16667,16669,16671,16673],{"class":35,"line":2183},[33,16654,7611],{"class":39},[33,16656,15858],{"class":43},[33,16658,133],{"class":47},[33,16660,2436],{"class":39},[33,16662,3672],{"class":289},[33,16664,245],{"class":47},[33,16666,2436],{"class":39},[33,16668,5090],{"class":289},[33,16670,15804],{"class":39},[33,16672,4297],{"class":72},[33,16674,226],{"class":47},[33,16676,16677],{"class":35,"line":2208},[33,16678,3820],{"class":47},[33,16680,16681,16683,16685,16688,16690],{"class":35,"line":2234},[33,16682,8775],{"class":47},[33,16684,3450],{"class":39},[33,16686,16687],{"class":60}," \"func2(int a, int b = 10) 调用\"",[33,16689,3718],{"class":39},[33,16691,11086],{"class":47},[33,16693,16694],{"class":35,"line":2239},[33,16695,1010],{"class":47},[33,16697,16698],{"class":35,"line":2247},[33,16699,100],{"emptyLinePlaceholder":99},[33,16701,16702,16704,16706,16708,16710,16712],{"class":35,"line":2255},[33,16703,7611],{"class":39},[33,16705,15858],{"class":43},[33,16707,133],{"class":47},[33,16709,2436],{"class":39},[33,16711,3672],{"class":289},[33,16713,226],{"class":47},[33,16715,16716],{"class":35,"line":3992},[33,16717,3820],{"class":47},[33,16719,16720,16722,16724,16727,16729],{"class":35,"line":4009},[33,16721,8775],{"class":47},[33,16723,3450],{"class":39},[33,16725,16726],{"class":60}," \"func2(int a) 调用\"",[33,16728,3718],{"class":39},[33,16730,11086],{"class":47},[33,16732,16733],{"class":35,"line":4014},[33,16734,1010],{"class":47},[33,16736,16737],{"class":35,"line":4019},[33,16738,100],{"emptyLinePlaceholder":99},[33,16740,16741,16743,16745],{"class":35,"line":4024},[33,16742,2436],{"class":39},[33,16744,4232],{"class":43},[33,16746,13096],{"class":47},[33,16748,16749],{"class":35,"line":4038},[33,16750,15450],{"class":47},[33,16752,16753,16755,16757,16759,16761],{"class":35,"line":4043},[33,16754,4244],{"class":39},[33,16756,877],{"class":47},[33,16758,57],{"class":39},[33,16760,4297],{"class":72},[33,16762,3567],{"class":47},[33,16764,16765,16767,16770],{"class":35,"line":4834},[33,16766,15525],{"class":43},[33,16768,16769],{"class":47},"(a);",[33,16771,16772],{"class":2487}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[33,16774,16775,16777,16779,16781,16783],{"class":35,"line":4848},[33,16776,15525],{"class":43},[33,16778,133],{"class":47},[33,16780,1279],{"class":72},[33,16782,8212],{"class":47},[33,16784,16785],{"class":2487},"\u002F\u002F调用有const   10是个常量\n",[33,16787,16788],{"class":35,"line":4856},[33,16789,100],{"emptyLinePlaceholder":99},[33,16791,16792],{"class":35,"line":4861},[33,16793,100],{"emptyLinePlaceholder":99},[33,16795,16796,16799],{"class":35,"line":4867},[33,16797,16798],{"class":2487},"    \u002F\u002Ffunc2(10);",[33,16800,16801],{"class":2487}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[33,16803,16804],{"class":35,"line":4873},[33,16805,100],{"emptyLinePlaceholder":99},[33,16807,16808,16810,16812,16814],{"class":35,"line":4878},[33,16809,4562],{"class":43},[33,16811,133],{"class":47},[33,16813,4567],{"class":60},[33,16815,4976],{"class":47},[33,16817,16818],{"class":35,"line":10194},[33,16819,100],{"emptyLinePlaceholder":99},[33,16821,16822,16824,16826],{"class":35,"line":10218},[33,16823,90],{"class":39},[33,16825,1437],{"class":72},[33,16827,3567],{"class":47},[33,16829,16830],{"class":35,"line":10223},[33,16831,1010],{"class":47},[2331,16833,16834],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":16836},[16837,16838,16839],{"id":15769,"depth":51,"text":15770},{"id":16026,"depth":51,"text":16027},{"id":16148,"depth":51,"text":16149,"children":16840},[16841,16842],{"id":16155,"depth":64,"text":16156},{"id":16525,"depth":64,"text":16526},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15761,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16849,"title":16850,"body":16851,"description":25603,"extension":2360,"meta":25604,"navigation":99,"path":25605,"seo":25606,"stem":25607,"__hash__":25608},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16852,"toc":25584},[16853,16856,16862,16869,16874,16877,16880,16883,16887,16891,16894,16897,16905,16910,16913,16920,16925,17082,17085,17338,17341,17344,17347,17352,17355,17358,17369,17374,17610,17614,17624,17627,17635,17782,17786,17789,17792,17796,18241,18245,18253,18261,19173,19180,19185,19813,19816,19819,19822,19941,19944,20031,20034,20160,20163,20257,20260,20613,20617,20625,20629,20636,20639,20642,20653,20659,20664,20676,20684,20704,20712,20729,20915,20918,20922,20925,20928,20931,20934,20937,20940,20943,21403,21409,21413,21416,21427,22014,22017,22506,22510,22513,22516,22519,22522,22525,22533,22929,22933,22936,22939,23386,23389,23392,23397,23400,23405,23408,23412,23415,23417,23423,23426,23732,23742,23783,23787,23790,23792,23825,23828,24135,24137,24152,24155,24178,24187,24193,24196,24200,24203,24206,24211,24222,24227,24235,24240,24370,24373,24376,24551,24556,24768,24772,24775,24889,24894,25133,25137,25141,25144,25147,25152,25257,25260,25263,25266,25270,25381,25384,25387,25392,25444,25447,25450,25455,25501,25504,25509,25577,25579,25582],[10,16854,16850],{"id":16855},"_8类和对象",[19,16857,16858,16859],{},"C++面向对象的三大特性为",[2575,16860,16861],{},"封装、继承、多态",[19,16863,16864,16865,16868],{},"C++认为",[2575,16866,16867],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16870,16871],{},[2575,16872,16873],{},"例如：",[19,16875,16876],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16878,16879],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16881,16882],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16884,16886],{"id":16885},"_81封装","8.1封装",[631,16888,16890],{"id":16889},"_811封装的意义","8.1.1封装的意义",[19,16892,16893],{},"封装是C++面向对象三大特性之一",[19,16895,16896],{},"封装的意义：",[3413,16898,16899,16902],{},[331,16900,16901],{},"将属性和行为作为一个整体，表现生活中的事物",[331,16903,16904],{},"将属性和行为加以权限控制",[19,16906,16907],{},[2575,16908,16909],{},"封装意义一：",[19,16911,16912],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16914,16915,16035,16917],{},[2575,16916,7430],{},[30,16918,16919],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[328,16921,16922],{},[331,16923,16924],{},"**示例1：**设计一个圆类，求圆的周长",[23,16926,16928],{"className":2422,"code":16927,"language":2424,"meta":28,"style":28},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[30,16929,16930,16938,16942,16947,16952,16957,16962,16969,16974,16984,16988,17004,17008,17012,17020,17024,17029,17034,17039,17044,17055,17078],{"__ignoreMap":28},[33,16931,16932,16935],{"class":35,"line":36},[33,16933,16934],{"class":39},"class",[33,16936,16937],{"class":43}," Circle\n",[33,16939,16940],{"class":35,"line":51},[33,16941,3820],{"class":47},[33,16943,16944],{"class":35,"line":64},[33,16945,16946],{"class":2487},"    \u002F\u002F访问权限\n",[33,16948,16949],{"class":35,"line":76},[33,16950,16951],{"class":2487},"    \u002F\u002F公共权限\n",[33,16953,16954],{"class":35,"line":87},[33,16955,16956],{"class":39},"public:\n",[33,16958,16959],{"class":35,"line":96},[33,16960,16961],{"class":2487},"    \u002F\u002F属性\n",[33,16963,16964,16966],{"class":35,"line":103},[33,16965,4244],{"class":39},[33,16967,16968],{"class":47}," m_r;\n",[33,16970,16971],{"class":35,"line":108},[33,16972,16973],{"class":2487},"    \u002F\u002F行为\n",[33,16975,16976,16979,16982],{"class":35,"line":119},[33,16977,16978],{"class":39},"    double",[33,16980,16981],{"class":43}," calculateZC",[33,16983,4235],{"class":47},[33,16985,16986],{"class":35,"line":128},[33,16987,4289],{"class":47},[33,16989,16990,16992,16994,16996,16999,17001],{"class":35,"line":1753},[33,16991,1614],{"class":39},[33,16993,1354],{"class":72},[33,16995,657],{"class":39},[33,16997,16998],{"class":47},"PI",[33,17000,657],{"class":39},[33,17002,17003],{"class":47},"m_r;\n",[33,17005,17006],{"class":35,"line":1763},[33,17007,4446],{"class":47},[33,17009,17010],{"class":35,"line":1775},[33,17011,6249],{"class":47},[33,17013,17014,17016,17018],{"class":35,"line":1780},[33,17015,2436],{"class":39},[33,17017,4232],{"class":43},[33,17019,4235],{"class":47},[33,17021,17022],{"class":35,"line":1785},[33,17023,3820],{"class":47},[33,17025,17026],{"class":35,"line":1940},[33,17027,17028],{"class":2487},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[33,17030,17031],{"class":35,"line":2183},[33,17032,17033],{"class":2487},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[33,17035,17036],{"class":35,"line":2208},[33,17037,17038],{"class":47},"    Circle c1;\n",[33,17040,17041],{"class":35,"line":2234},[33,17042,17043],{"class":2487},"    \u002F\u002F给圆对象 的属性进行赋值\n",[33,17045,17046,17049,17051,17053],{"class":35,"line":2239},[33,17047,17048],{"class":47},"    c1.m_r",[33,17050,57],{"class":39},[33,17052,1279],{"class":72},[33,17054,3567],{"class":47},[33,17056,17057,17059,17061,17064,17066,17069,17072,17074,17076],{"class":35,"line":2247},[33,17058,3825],{"class":47},[33,17060,3450],{"class":39},[33,17062,17063],{"class":60},"\"圆的周长\"",[33,17065,3450],{"class":39},[33,17067,17068],{"class":47},"c1.",[33,17070,17071],{"class":43},"calculateZC",[33,17073,4685],{"class":47},[33,17075,3450],{"class":39},[33,17077,3472],{"class":47},[33,17079,17080],{"class":35,"line":2255},[33,17081,1010],{"class":47},[19,17083,17084],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[23,17086,17088],{"className":2422,"code":17087,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[30,17089,17090,17096,17106,17112,17118,17122,17126,17131,17138,17143,17161,17165,17175,17179,17184,17200,17204,17214,17218,17223,17231,17235,17267,17271,17275,17283,17287,17292,17297,17311,17325,17334],{"__ignoreMap":28},[33,17091,17092,17094],{"class":35,"line":36},[33,17093,4209],{"class":39},[33,17095,4212],{"class":60},[33,17097,17098,17100,17102,17104],{"class":35,"line":51},[33,17099,4217],{"class":39},[33,17101,4220],{"class":39},[33,17103,4223],{"class":43},[33,17105,3567],{"class":47},[33,17107,17108,17110],{"class":35,"line":64},[33,17109,4209],{"class":39},[33,17111,9995],{"class":60},[33,17113,17114,17116],{"class":35,"line":76},[33,17115,16934],{"class":39},[33,17117,10008],{"class":43},[33,17119,17120],{"class":35,"line":87},[33,17121,3820],{"class":47},[33,17123,17124],{"class":35,"line":96},[33,17125,16956],{"class":39},[33,17127,17128],{"class":35,"line":103},[33,17129,17130],{"class":47},"    string m_name;\n",[33,17132,17133,17135],{"class":35,"line":108},[33,17134,4244],{"class":39},[33,17136,17137],{"class":47}," m_id;\n",[33,17139,17140],{"class":35,"line":119},[33,17141,17142],{"class":2487},"    \u002F\u002F赋值姓名\n",[33,17144,17145,17148,17151,17153,17156,17159],{"class":35,"line":128},[33,17146,17147],{"class":39},"    void",[33,17149,17150],{"class":43}," setName",[33,17152,133],{"class":47},[33,17154,17155],{"class":43},"string",[33,17157,17158],{"class":289}," name",[33,17160,226],{"class":47},[33,17162,17163],{"class":35,"line":1753},[33,17164,4289],{"class":47},[33,17166,17167,17170,17172],{"class":35,"line":1763},[33,17168,17169],{"class":47},"        m_name",[33,17171,57],{"class":39},[33,17173,17174],{"class":47},"name;\n",[33,17176,17177],{"class":35,"line":1775},[33,17178,4446],{"class":47},[33,17180,17181],{"class":35,"line":1780},[33,17182,17183],{"class":2487},"    \u002F\u002F赋值学号\n",[33,17185,17186,17188,17191,17193,17195,17198],{"class":35,"line":1785},[33,17187,17147],{"class":39},[33,17189,17190],{"class":43}," setId",[33,17192,133],{"class":47},[33,17194,2436],{"class":39},[33,17196,17197],{"class":289}," id",[33,17199,226],{"class":47},[33,17201,17202],{"class":35,"line":1940},[33,17203,4289],{"class":47},[33,17205,17206,17209,17211],{"class":35,"line":2183},[33,17207,17208],{"class":47},"        m_id",[33,17210,57],{"class":39},[33,17212,17213],{"class":47},"id;\n",[33,17215,17216],{"class":35,"line":2208},[33,17217,4446],{"class":47},[33,17219,17220],{"class":35,"line":2234},[33,17221,17222],{"class":2487},"    \u002F\u002F打印学生信息\n",[33,17224,17225,17227,17229],{"class":35,"line":2239},[33,17226,17147],{"class":39},[33,17228,11860],{"class":43},[33,17230,4235],{"class":47},[33,17232,17233],{"class":35,"line":2247},[33,17234,4289],{"class":47},[33,17236,17237,17239,17241,17244,17246,17249,17251,17253,17255,17258,17260,17263,17265],{"class":35,"line":2255},[33,17238,5706],{"class":47},[33,17240,3450],{"class":39},[33,17242,17243],{"class":60},"\"姓名：\"",[33,17245,3450],{"class":39},[33,17247,17248],{"class":47},"m_name",[33,17250,3450],{"class":39},[33,17252,6611],{"class":60},[33,17254,3450],{"class":39},[33,17256,17257],{"class":60},"\"学号：\"",[33,17259,3450],{"class":39},[33,17261,17262],{"class":47},"m_id",[33,17264,3450],{"class":39},[33,17266,3472],{"class":47},[33,17268,17269],{"class":35,"line":3992},[33,17270,4446],{"class":47},[33,17272,17273],{"class":35,"line":4009},[33,17274,6249],{"class":47},[33,17276,17277,17279,17281],{"class":35,"line":4014},[33,17278,2436],{"class":39},[33,17280,4232],{"class":43},[33,17282,4235],{"class":47},[33,17284,17285],{"class":35,"line":4019},[33,17286,3820],{"class":47},[33,17288,17289],{"class":35,"line":4024},[33,17290,17291],{"class":2487},"    \u002F\u002F实例化\n",[33,17293,17294],{"class":35,"line":4038},[33,17295,17296],{"class":47},"    Student s1;\n",[33,17298,17299,17302,17305,17307,17309],{"class":35,"line":4043},[33,17300,17301],{"class":47},"    s1.",[33,17303,17304],{"class":43},"setName",[33,17306,133],{"class":47},[33,17308,10162],{"class":60},[33,17310,4976],{"class":47},[33,17312,17313,17315,17318,17320,17323],{"class":35,"line":4834},[33,17314,17301],{"class":47},[33,17316,17317],{"class":43},"setId",[33,17319,133],{"class":47},[33,17321,17322],{"class":72},"123456",[33,17324,4976],{"class":47},[33,17326,17327,17329,17332],{"class":35,"line":4848},[33,17328,17301],{"class":47},[33,17330,17331],{"class":43},"printInfo",[33,17333,7883],{"class":47},[33,17335,17336],{"class":35,"line":4856},[33,17337,1010],{"class":47},[19,17339,17340],{},"类中的属性和行为统称为成员",[19,17342,17343],{},"属性：成员属性(成员变量)",[19,17345,17346],{},"方法：成员函数(成员方法)",[19,17348,17349],{},[2575,17350,17351],{},"封装意义二：",[19,17353,17354],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17356,17357],{},"访问权限有三种：",[328,17359,17360,17363,17366],{},[331,17361,17362],{},"public        公共权限",[331,17364,17365],{},"protected 保护权限",[331,17367,17368],{},"private      私有权限",[19,17370,17371],{},[2575,17372,17373],{},"示例：",[23,17375,17377],{"className":12186,"code":17376,"language":12188,"meta":28,"style":28},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,17378,17379,17384,17389,17394,17399,17403,17410,17414,17419,17423,17428,17432,17437,17442,17447,17451,17456,17461,17468,17472,17476,17484,17488,17499,17511,17523,17527,17531,17535,17543,17547,17552,17564,17572,17580,17584,17594,17598,17606],{"__ignoreMap":28},[33,17380,17381],{"class":35,"line":36},[33,17382,17383],{"class":2487},"\u002F\u002F三种权限\n",[33,17385,17386],{"class":35,"line":51},[33,17387,17388],{"class":2487},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[33,17390,17391],{"class":35,"line":64},[33,17392,17393],{"class":2487},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[33,17395,17396],{"class":35,"line":76},[33,17397,17398],{"class":2487},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[33,17400,17401],{"class":35,"line":87},[33,17402,100],{"emptyLinePlaceholder":99},[33,17404,17405,17407],{"class":35,"line":96},[33,17406,16934],{"class":39},[33,17408,17409],{"class":43}," Person\n",[33,17411,17412],{"class":35,"line":103},[33,17413,3820],{"class":47},[33,17415,17416],{"class":35,"line":108},[33,17417,17418],{"class":2487},"    \u002F\u002F姓名  公共权限\n",[33,17420,17421],{"class":35,"line":119},[33,17422,16956],{"class":39},[33,17424,17425],{"class":35,"line":128},[33,17426,17427],{"class":47},"    string m_Name;\n",[33,17429,17430],{"class":35,"line":1753},[33,17431,100],{"emptyLinePlaceholder":99},[33,17433,17434],{"class":35,"line":1763},[33,17435,17436],{"class":2487},"    \u002F\u002F汽车  保护权限\n",[33,17438,17439],{"class":35,"line":1775},[33,17440,17441],{"class":39},"protected:\n",[33,17443,17444],{"class":35,"line":1780},[33,17445,17446],{"class":47},"    string m_Car;\n",[33,17448,17449],{"class":35,"line":1785},[33,17450,100],{"emptyLinePlaceholder":99},[33,17452,17453],{"class":35,"line":1940},[33,17454,17455],{"class":2487},"    \u002F\u002F银行卡密码  私有权限\n",[33,17457,17458],{"class":35,"line":2183},[33,17459,17460],{"class":39},"private:\n",[33,17462,17463,17465],{"class":35,"line":2208},[33,17464,4244],{"class":39},[33,17466,17467],{"class":47}," m_Password;\n",[33,17469,17470],{"class":35,"line":2234},[33,17471,100],{"emptyLinePlaceholder":99},[33,17473,17474],{"class":35,"line":2239},[33,17475,16956],{"class":39},[33,17477,17478,17480,17482],{"class":35,"line":2247},[33,17479,17147],{"class":39},[33,17481,13626],{"class":43},[33,17483,4235],{"class":47},[33,17485,17486],{"class":35,"line":2255},[33,17487,4289],{"class":47},[33,17489,17490,17493,17495,17497],{"class":35,"line":3992},[33,17491,17492],{"class":47},"        m_Name ",[33,17494,57],{"class":39},[33,17496,11184],{"class":60},[33,17498,3567],{"class":47},[33,17500,17501,17504,17506,17509],{"class":35,"line":4009},[33,17502,17503],{"class":47},"        m_Car ",[33,17505,57],{"class":39},[33,17507,17508],{"class":60}," \"拖拉机\"",[33,17510,3567],{"class":47},[33,17512,17513,17516,17518,17521],{"class":35,"line":4014},[33,17514,17515],{"class":47},"        m_Password ",[33,17517,57],{"class":39},[33,17519,17520],{"class":72}," 123456",[33,17522,3567],{"class":47},[33,17524,17525],{"class":35,"line":4019},[33,17526,4446],{"class":47},[33,17528,17529],{"class":35,"line":4024},[33,17530,6249],{"class":47},[33,17532,17533],{"class":35,"line":4038},[33,17534,100],{"emptyLinePlaceholder":99},[33,17536,17537,17539,17541],{"class":35,"line":4043},[33,17538,2436],{"class":39},[33,17540,4232],{"class":43},[33,17542,13096],{"class":47},[33,17544,17545],{"class":35,"line":4834},[33,17546,100],{"emptyLinePlaceholder":99},[33,17548,17549],{"class":35,"line":4848},[33,17550,17551],{"class":47},"    Person p;\n",[33,17553,17554,17557,17559,17562],{"class":35,"line":4856},[33,17555,17556],{"class":47},"    p.m_Name ",[33,17558,57],{"class":39},[33,17560,17561],{"class":60}," \"李四\"",[33,17563,3567],{"class":47},[33,17565,17566,17569],{"class":35,"line":4861},[33,17567,17568],{"class":2487},"    \u002F\u002Fp.m_Car = \"奔驰\";",[33,17570,17571],{"class":2487},"  \u002F\u002F保护权限类外访问不到\n",[33,17573,17574,17577],{"class":35,"line":4867},[33,17575,17576],{"class":2487},"    \u002F\u002Fp.m_Password = 123;",[33,17578,17579],{"class":2487}," \u002F\u002F私有权限类外访问不到\n",[33,17581,17582],{"class":35,"line":4873},[33,17583,100],{"emptyLinePlaceholder":99},[33,17585,17586,17588,17590,17592],{"class":35,"line":4878},[33,17587,4562],{"class":43},[33,17589,133],{"class":47},[33,17591,4567],{"class":60},[33,17593,4976],{"class":47},[33,17595,17596],{"class":35,"line":10194},[33,17597,100],{"emptyLinePlaceholder":99},[33,17599,17600,17602,17604],{"class":35,"line":10218},[33,17601,90],{"class":39},[33,17603,1437],{"class":72},[33,17605,3567],{"class":47},[33,17607,17608],{"class":35,"line":10223},[33,17609,1010],{"class":47},[631,17611,17613],{"id":17612},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17615,17616,17617,17620,17621],{},"在C++中 struct和class唯一的",[2575,17618,17619],{},"区别","就在于 ",[2575,17622,17623],{},"默认的访问权限不同",[19,17625,17626],{},"区别：",[3413,17628,17629,17632],{},[331,17630,17631],{},"struct 默认权限为公共",[331,17633,17634],{},"class   默认权限为私有",[23,17636,17638],{"className":12186,"code":17637,"language":12188,"meta":28,"style":28},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,17639,17640,17647,17651,17661,17665,17669,17676,17680,17690,17694,17698,17706,17710,17715,17729,17733,17738,17752,17756,17766,17770,17778],{"__ignoreMap":28},[33,17641,17642,17644],{"class":35,"line":36},[33,17643,16934],{"class":39},[33,17645,17646],{"class":43}," C1\n",[33,17648,17649],{"class":35,"line":51},[33,17650,3820],{"class":47},[33,17652,17653,17655,17658],{"class":35,"line":64},[33,17654,4244],{"class":39},[33,17656,17657],{"class":47},"  m_A;",[33,17659,17660],{"class":2487}," \u002F\u002F默认是私有权限\n",[33,17662,17663],{"class":35,"line":76},[33,17664,6249],{"class":47},[33,17666,17667],{"class":35,"line":87},[33,17668,100],{"emptyLinePlaceholder":99},[33,17670,17671,17673],{"class":35,"line":96},[33,17672,10005],{"class":39},[33,17674,17675],{"class":43}," C2\n",[33,17677,17678],{"class":35,"line":103},[33,17679,3820],{"class":47},[33,17681,17682,17684,17687],{"class":35,"line":108},[33,17683,4244],{"class":39},[33,17685,17686],{"class":47}," m_A;",[33,17688,17689],{"class":2487},"  \u002F\u002F默认是公共权限\n",[33,17691,17692],{"class":35,"line":119},[33,17693,6249],{"class":47},[33,17695,17696],{"class":35,"line":128},[33,17697,100],{"emptyLinePlaceholder":99},[33,17699,17700,17702,17704],{"class":35,"line":1753},[33,17701,2436],{"class":39},[33,17703,4232],{"class":43},[33,17705,13096],{"class":47},[33,17707,17708],{"class":35,"line":1763},[33,17709,100],{"emptyLinePlaceholder":99},[33,17711,17712],{"class":35,"line":1775},[33,17713,17714],{"class":47},"    C1 c1;\n",[33,17716,17717,17720,17722,17724,17726],{"class":35,"line":1780},[33,17718,17719],{"class":47},"    c1.m_A ",[33,17721,57],{"class":39},[33,17723,4297],{"class":72},[33,17725,2484],{"class":47},[33,17727,17728],{"class":2487}," \u002F\u002F错误，访问权限是私有\n",[33,17730,17731],{"class":35,"line":1785},[33,17732,100],{"emptyLinePlaceholder":99},[33,17734,17735],{"class":35,"line":1940},[33,17736,17737],{"class":47},"    C2 c2;\n",[33,17739,17740,17743,17745,17747,17749],{"class":35,"line":2183},[33,17741,17742],{"class":47},"    c2.m_A ",[33,17744,57],{"class":39},[33,17746,4297],{"class":72},[33,17748,2484],{"class":47},[33,17750,17751],{"class":2487}," \u002F\u002F正确，访问权限是公共\n",[33,17753,17754],{"class":35,"line":2208},[33,17755,100],{"emptyLinePlaceholder":99},[33,17757,17758,17760,17762,17764],{"class":35,"line":2234},[33,17759,4562],{"class":43},[33,17761,133],{"class":47},[33,17763,4567],{"class":60},[33,17765,4976],{"class":47},[33,17767,17768],{"class":35,"line":2239},[33,17769,100],{"emptyLinePlaceholder":99},[33,17771,17772,17774,17776],{"class":35,"line":2247},[33,17773,90],{"class":39},[33,17775,1437],{"class":72},[33,17777,3567],{"class":47},[33,17779,17780],{"class":35,"line":2255},[33,17781,1010],{"class":47},[631,17783,17785],{"id":17784},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17787,17788],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17790,17791],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17793,17794],{},[2575,17795,17373],{},[23,17797,17799],{"className":12186,"code":17798,"language":12188,"meta":28,"style":28},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,17800,17801,17811,17815,17819,17824,17838,17847,17851,17861,17865,17872,17876,17880,17884,17889,17898,17905,17909,17914,17930,17953,17966,17973,17977,17986,17990,17994,17999,18015,18025,18029,18033,18037,18045,18049,18059,18063,18071,18075,18079,18087,18091,18095,18100,18113,18136,18140,18145,18158,18180,18184,18189,18203,18211,18215,18225,18229,18237],{"__ignoreMap":28},[33,17802,17803,17805,17808],{"class":35,"line":36},[33,17804,16934],{"class":39},[33,17806,17807],{"class":43}," Person",[33,17809,17810],{"class":47}," {\n",[33,17812,17813],{"class":35,"line":51},[33,17814,16956],{"class":39},[33,17816,17817],{"class":35,"line":64},[33,17818,100],{"emptyLinePlaceholder":99},[33,17820,17821],{"class":35,"line":76},[33,17822,17823],{"class":2487},"    \u002F\u002F姓名设置可读可写\n",[33,17825,17826,17828,17830,17832,17834,17836],{"class":35,"line":87},[33,17827,17147],{"class":39},[33,17829,17150],{"class":43},[33,17831,133],{"class":47},[33,17833,17155],{"class":43},[33,17835,17158],{"class":289},[33,17837,14682],{"class":47},[33,17839,17840,17842,17844],{"class":35,"line":96},[33,17841,17492],{"class":47},[33,17843,57],{"class":39},[33,17845,17846],{"class":47}," name;\n",[33,17848,17849],{"class":35,"line":103},[33,17850,4446],{"class":47},[33,17852,17853,17856,17859],{"class":35,"line":108},[33,17854,17855],{"class":43},"    string",[33,17857,17858],{"class":43}," getName",[33,17860,4235],{"class":47},[33,17862,17863],{"class":35,"line":119},[33,17864,4289],{"class":47},[33,17866,17867,17869],{"class":35,"line":128},[33,17868,1614],{"class":39},[33,17870,17871],{"class":47}," m_Name;\n",[33,17873,17874],{"class":35,"line":1753},[33,17875,4446],{"class":47},[33,17877,17878],{"class":35,"line":1763},[33,17879,100],{"emptyLinePlaceholder":99},[33,17881,17882],{"class":35,"line":1775},[33,17883,100],{"emptyLinePlaceholder":99},[33,17885,17886],{"class":35,"line":1780},[33,17887,17888],{"class":2487},"    \u002F\u002F获取年龄 \n",[33,17890,17891,17893,17896],{"class":35,"line":1785},[33,17892,4244],{"class":39},[33,17894,17895],{"class":43}," getAge",[33,17897,13096],{"class":47},[33,17899,17900,17902],{"class":35,"line":1940},[33,17901,1614],{"class":39},[33,17903,17904],{"class":47}," m_Age;\n",[33,17906,17907],{"class":35,"line":2183},[33,17908,4446],{"class":47},[33,17910,17911],{"class":35,"line":2208},[33,17912,17913],{"class":2487},"    \u002F\u002F设置年龄\n",[33,17915,17916,17918,17921,17923,17925,17928],{"class":35,"line":2234},[33,17917,17147],{"class":39},[33,17919,17920],{"class":43}," setAge",[33,17922,133],{"class":47},[33,17924,2436],{"class":39},[33,17926,17927],{"class":289}," age",[33,17929,14682],{"class":47},[33,17931,17932,17934,17937,17939,17941,17943,17946,17948,17951],{"class":35,"line":2239},[33,17933,2130],{"class":39},[33,17935,17936],{"class":47}," (age ",[33,17938,2226],{"class":39},[33,17940,1437],{"class":72},[33,17942,5510],{"class":39},[33,17944,17945],{"class":47}," age ",[33,17947,3367],{"class":39},[33,17949,17950],{"class":72}," 150",[33,17952,14682],{"class":47},[33,17954,17955,17957,17959,17962,17964],{"class":35,"line":2247},[33,17956,11964],{"class":47},[33,17958,3450],{"class":39},[33,17960,17961],{"class":60}," \"你个老妖精!\"",[33,17963,3718],{"class":39},[33,17965,11086],{"class":47},[33,17967,17968,17971],{"class":35,"line":2255},[33,17969,17970],{"class":39},"            return",[33,17972,3567],{"class":47},[33,17974,17975],{"class":35,"line":3992},[33,17976,4786],{"class":47},[33,17978,17979,17982,17984],{"class":35,"line":4009},[33,17980,17981],{"class":47},"        m_Age ",[33,17983,57],{"class":39},[33,17985,10043],{"class":47},[33,17987,17988],{"class":35,"line":4014},[33,17989,4446],{"class":47},[33,17991,17992],{"class":35,"line":4019},[33,17993,100],{"emptyLinePlaceholder":99},[33,17995,17996],{"class":35,"line":4024},[33,17997,17998],{"class":2487},"    \u002F\u002F情人设置为只写\n",[33,18000,18001,18003,18006,18008,18010,18013],{"class":35,"line":4038},[33,18002,17147],{"class":39},[33,18004,18005],{"class":43}," setLover",[33,18007,133],{"class":47},[33,18009,17155],{"class":43},[33,18011,18012],{"class":289}," lover",[33,18014,14682],{"class":47},[33,18016,18017,18020,18022],{"class":35,"line":4043},[33,18018,18019],{"class":47},"        m_Lover ",[33,18021,57],{"class":39},[33,18023,18024],{"class":47}," lover;\n",[33,18026,18027],{"class":35,"line":4834},[33,18028,4446],{"class":47},[33,18030,18031],{"class":35,"line":4848},[33,18032,100],{"emptyLinePlaceholder":99},[33,18034,18035],{"class":35,"line":4856},[33,18036,17460],{"class":39},[33,18038,18039,18042],{"class":35,"line":4861},[33,18040,18041],{"class":47},"    string m_Name;",[33,18043,18044],{"class":2487}," \u002F\u002F可读可写  姓名\n",[33,18046,18047],{"class":35,"line":4867},[33,18048,15450],{"class":47},[33,18050,18051,18053,18056],{"class":35,"line":4873},[33,18052,4244],{"class":39},[33,18054,18055],{"class":47}," m_Age;",[33,18057,18058],{"class":2487}," \u002F\u002F只读  年龄\n",[33,18060,18061],{"class":35,"line":4878},[33,18062,100],{"emptyLinePlaceholder":99},[33,18064,18065,18068],{"class":35,"line":10194},[33,18066,18067],{"class":47},"    string m_Lover;",[33,18069,18070],{"class":2487}," \u002F\u002F只写  情人\n",[33,18072,18073],{"class":35,"line":10218},[33,18074,6249],{"class":47},[33,18076,18077],{"class":35,"line":10223},[33,18078,100],{"emptyLinePlaceholder":99},[33,18080,18081,18083,18085],{"class":35,"line":10229},[33,18082,2436],{"class":39},[33,18084,4232],{"class":43},[33,18086,13096],{"class":47},[33,18088,18089],{"class":35,"line":10256},[33,18090,100],{"emptyLinePlaceholder":99},[33,18092,18093],{"class":35,"line":10261},[33,18094,17551],{"class":47},[33,18096,18097],{"class":35,"line":10267},[33,18098,18099],{"class":2487},"    \u002F\u002F姓名设置\n",[33,18101,18102,18105,18107,18109,18111],{"class":35,"line":10279},[33,18103,18104],{"class":47},"    p.",[33,18106,17304],{"class":43},[33,18108,133],{"class":47},[33,18110,10162],{"class":60},[33,18112,4976],{"class":47},[33,18114,18115,18117,18119,18122,18124,18127,18130,18132,18134],{"class":35,"line":10291},[33,18116,8775],{"class":47},[33,18118,3450],{"class":39},[33,18120,18121],{"class":60}," \"姓名： \"",[33,18123,3718],{"class":39},[33,18125,18126],{"class":47}," p.",[33,18128,18129],{"class":43},"getName",[33,18131,15290],{"class":47},[33,18133,3450],{"class":39},[33,18135,11086],{"class":47},[33,18137,18138],{"class":35,"line":10303},[33,18139,100],{"emptyLinePlaceholder":99},[33,18141,18142],{"class":35,"line":11961},[33,18143,18144],{"class":2487},"    \u002F\u002F年龄设置\n",[33,18146,18147,18149,18152,18154,18156],{"class":35,"line":11986},[33,18148,18104],{"class":47},[33,18150,18151],{"class":43},"setAge",[33,18153,133],{"class":47},[33,18155,3071],{"class":72},[33,18157,4976],{"class":47},[33,18159,18160,18162,18164,18167,18169,18171,18174,18176,18178],{"class":35,"line":12009},[33,18161,8775],{"class":47},[33,18163,3450],{"class":39},[33,18165,18166],{"class":60}," \"年龄： \"",[33,18168,3718],{"class":39},[33,18170,18126],{"class":47},[33,18172,18173],{"class":43},"getAge",[33,18175,15290],{"class":47},[33,18177,3450],{"class":39},[33,18179,11086],{"class":47},[33,18181,18182],{"class":35,"line":12033},[33,18183,100],{"emptyLinePlaceholder":99},[33,18185,18186],{"class":35,"line":12038},[33,18187,18188],{"class":2487},"    \u002F\u002F情人设置\n",[33,18190,18191,18193,18196,18198,18201],{"class":35,"line":12043},[33,18192,18104],{"class":47},[33,18194,18195],{"class":43},"setLover",[33,18197,133],{"class":47},[33,18199,18200],{"class":60},"\"苍井\"",[33,18202,4976],{"class":47},[33,18204,18205,18208],{"class":35,"line":12048},[33,18206,18207],{"class":2487},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[33,18209,18210],{"class":2487},"  \u002F\u002F只写属性，不可以读取\n",[33,18212,18213],{"class":35,"line":12057},[33,18214,100],{"emptyLinePlaceholder":99},[33,18216,18217,18219,18221,18223],{"class":35,"line":12062},[33,18218,4562],{"class":43},[33,18220,133],{"class":47},[33,18222,4567],{"class":60},[33,18224,4976],{"class":47},[33,18226,18227],{"class":35,"line":12068},[33,18228,100],{"emptyLinePlaceholder":99},[33,18230,18231,18233,18235],{"class":35,"line":12089},[33,18232,90],{"class":39},[33,18234,1437],{"class":72},[33,18236,3567],{"class":47},[33,18238,18239],{"class":35,"line":12095},[33,18240,1010],{"class":47},[631,18242,18244],{"id":18243},"_814封装案例","8.1.4封装案例",[328,18246,18247],{},[331,18248,18249,18252],{},[2575,18250,18251],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3413,18254,18255,18258],{},[331,18256,18257],{},"求出立方体的面积和体积",[331,18259,18260],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[23,18262,18264],{"className":2422,"code":18263,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[30,18265,18266,18272,18282,18289,18293,18297,18302,18332,18336,18346,18356,18366,18370,18379,18383,18419,18423,18432,18436,18452,18456,18461,18470,18474,18481,18485,18494,18498,18505,18509,18518,18522,18529,18533,18538,18555,18559,18605,18609,18618,18622,18626,18630,18639,18643,18647,18652,18656,18662,18668,18674,18678,18682,18687,18709,18713,18767,18771,18779,18783,18788,18793,18806,18813,18829,18840,18846,18869,18875,18898,18912,18932,18938,18949,18972,18994,18999,19005,19019,19032,19037,19051,19056,19062,19067,19081,19086,19091,19105,19117,19122,19135,19140,19145,19150,19163,19168],{"__ignoreMap":28},[33,18267,18268,18270],{"class":35,"line":36},[33,18269,4209],{"class":39},[33,18271,4212],{"class":60},[33,18273,18274,18276,18278,18280],{"class":35,"line":51},[33,18275,4217],{"class":39},[33,18277,4220],{"class":39},[33,18279,4223],{"class":43},[33,18281,3567],{"class":47},[33,18283,18284,18286],{"class":35,"line":64},[33,18285,16934],{"class":39},[33,18287,18288],{"class":43}," Cube\n",[33,18290,18291],{"class":35,"line":76},[33,18292,3820],{"class":47},[33,18294,18295],{"class":35,"line":87},[33,18296,16956],{"class":39},[33,18298,18299],{"class":35,"line":96},[33,18300,18301],{"class":2487},"    \u002F\u002F输入长宽高\n",[33,18303,18304,18306,18309,18311,18313,18316,18318,18320,18323,18325,18327,18330],{"class":35,"line":103},[33,18305,17147],{"class":39},[33,18307,18308],{"class":43}," setLwh",[33,18310,133],{"class":47},[33,18312,2436],{"class":39},[33,18314,18315],{"class":289}," l",[33,18317,2799],{"class":47},[33,18319,2436],{"class":39},[33,18321,18322],{"class":289}," w",[33,18324,2799],{"class":47},[33,18326,2436],{"class":39},[33,18328,18329],{"class":289}," h",[33,18331,226],{"class":47},[33,18333,18334],{"class":35,"line":108},[33,18335,4289],{"class":47},[33,18337,18338,18341,18343],{"class":35,"line":119},[33,18339,18340],{"class":47},"        m_L",[33,18342,57],{"class":39},[33,18344,18345],{"class":47},"l;\n",[33,18347,18348,18351,18353],{"class":35,"line":128},[33,18349,18350],{"class":47},"        m_W",[33,18352,57],{"class":39},[33,18354,18355],{"class":47},"w;\n",[33,18357,18358,18361,18363],{"class":35,"line":1753},[33,18359,18360],{"class":47},"        m_H",[33,18362,57],{"class":39},[33,18364,18365],{"class":47},"h;\n",[33,18367,18368],{"class":35,"line":1763},[33,18369,4446],{"class":47},[33,18371,18372,18374,18377],{"class":35,"line":1775},[33,18373,4244],{"class":39},[33,18375,18376],{"class":43}," mianji",[33,18378,4235],{"class":47},[33,18380,18381],{"class":35,"line":1780},[33,18382,4289],{"class":47},[33,18384,18385,18387,18389,18391,18394,18396,18399,18401,18404,18406,18409,18411,18414,18416],{"class":35,"line":1785},[33,18386,1614],{"class":39},[33,18388,1354],{"class":72},[33,18390,657],{"class":39},[33,18392,18393],{"class":47},"(m_L",[33,18395,657],{"class":39},[33,18397,18398],{"class":47},"m_W ",[33,18400,880],{"class":39},[33,18402,18403],{"class":47}," m_L",[33,18405,657],{"class":39},[33,18407,18408],{"class":47},"m_H ",[33,18410,880],{"class":39},[33,18412,18413],{"class":47}," m_W",[33,18415,657],{"class":39},[33,18417,18418],{"class":47},"m_H);\n",[33,18420,18421],{"class":35,"line":1940},[33,18422,4446],{"class":47},[33,18424,18425,18427,18430],{"class":35,"line":2183},[33,18426,4244],{"class":39},[33,18428,18429],{"class":43}," tiji",[33,18431,4235],{"class":47},[33,18433,18434],{"class":35,"line":2208},[33,18435,4289],{"class":47},[33,18437,18438,18440,18442,18444,18447,18449],{"class":35,"line":2234},[33,18439,1614],{"class":39},[33,18441,18403],{"class":47},[33,18443,657],{"class":39},[33,18445,18446],{"class":47},"m_W",[33,18448,657],{"class":39},[33,18450,18451],{"class":47},"m_H;\n",[33,18453,18454],{"class":35,"line":2239},[33,18455,4446],{"class":47},[33,18457,18458],{"class":35,"line":2247},[33,18459,18460],{"class":2487},"    \u002F\u002F获取长宽高\n",[33,18462,18463,18465,18468],{"class":35,"line":2255},[33,18464,4244],{"class":39},[33,18466,18467],{"class":43}," getLength",[33,18469,4235],{"class":47},[33,18471,18472],{"class":35,"line":3992},[33,18473,4289],{"class":47},[33,18475,18476,18478],{"class":35,"line":4009},[33,18477,1614],{"class":39},[33,18479,18480],{"class":47}," m_L;\n",[33,18482,18483],{"class":35,"line":4014},[33,18484,4446],{"class":47},[33,18486,18487,18489,18492],{"class":35,"line":4019},[33,18488,4244],{"class":39},[33,18490,18491],{"class":43}," getWidth",[33,18493,4235],{"class":47},[33,18495,18496],{"class":35,"line":4024},[33,18497,4289],{"class":47},[33,18499,18500,18502],{"class":35,"line":4038},[33,18501,1614],{"class":39},[33,18503,18504],{"class":47}," m_W;\n",[33,18506,18507],{"class":35,"line":4043},[33,18508,4446],{"class":47},[33,18510,18511,18513,18516],{"class":35,"line":4834},[33,18512,4244],{"class":39},[33,18514,18515],{"class":43}," getHeight",[33,18517,4235],{"class":47},[33,18519,18520],{"class":35,"line":4848},[33,18521,4289],{"class":47},[33,18523,18524,18526],{"class":35,"line":4856},[33,18525,1614],{"class":39},[33,18527,18528],{"class":47}," m_H;\n",[33,18530,18531],{"class":35,"line":4861},[33,18532,4446],{"class":47},[33,18534,18535],{"class":35,"line":4867},[33,18536,18537],{"class":2487},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[33,18539,18540,18543,18546,18548,18551,18553],{"class":35,"line":4873},[33,18541,18542],{"class":39},"    bool",[33,18544,18545],{"class":43}," isEqual",[33,18547,133],{"class":47},[33,18549,18550],{"class":43},"Cube",[33,18552,5106],{"class":289},[33,18554,226],{"class":47},[33,18556,18557],{"class":35,"line":4878},[33,18558,4289],{"class":47},[33,18560,18561,18563,18566,18569,18571,18573,18576,18578,18581,18584,18586,18588,18591,18593,18595,18598,18600,18602],{"class":35,"line":10194},[33,18562,2130],{"class":39},[33,18564,18565],{"class":47}," (c.",[33,18567,18568],{"class":43},"getLength",[33,18570,15290],{"class":47},[33,18572,5206],{"class":39},[33,18574,18575],{"class":47}," m_L ",[33,18577,3976],{"class":39},[33,18579,18580],{"class":47}," c.",[33,18582,18583],{"class":43},"getWidth",[33,18585,15290],{"class":47},[33,18587,5206],{"class":39},[33,18589,18590],{"class":47}," m_W ",[33,18592,3976],{"class":39},[33,18594,18580],{"class":47},[33,18596,18597],{"class":43},"getHeight",[33,18599,15290],{"class":47},[33,18601,5206],{"class":39},[33,18603,18604],{"class":47}," m_H)\n",[33,18606,18607],{"class":35,"line":10218},[33,18608,4767],{"class":47},[33,18610,18611,18613,18616],{"class":35,"line":10223},[33,18612,17970],{"class":39},[33,18614,18615],{"class":72}," true",[33,18617,3567],{"class":47},[33,18619,18620],{"class":35,"line":10229},[33,18621,4786],{"class":47},[33,18623,18624],{"class":35,"line":10256},[33,18625,4827],{"class":39},[33,18627,18628],{"class":35,"line":10261},[33,18629,4767],{"class":47},[33,18631,18632,18634,18637],{"class":35,"line":10267},[33,18633,17970],{"class":39},[33,18635,18636],{"class":72}," false",[33,18638,3567],{"class":47},[33,18640,18641],{"class":35,"line":10279},[33,18642,4786],{"class":47},[33,18644,18645],{"class":35,"line":10291},[33,18646,4446],{"class":47},[33,18648,18649],{"class":35,"line":10303},[33,18650,18651],{"class":2487},"    \u002F\u002F私有属性\n",[33,18653,18654],{"class":35,"line":11961},[33,18655,17460],{"class":39},[33,18657,18658,18660],{"class":35,"line":11986},[33,18659,4244],{"class":39},[33,18661,18480],{"class":47},[33,18663,18664,18666],{"class":35,"line":12009},[33,18665,4244],{"class":39},[33,18667,18504],{"class":47},[33,18669,18670,18672],{"class":35,"line":12033},[33,18671,4244],{"class":39},[33,18673,18528],{"class":47},[33,18675,18676],{"class":35,"line":12038},[33,18677,100],{"emptyLinePlaceholder":99},[33,18679,18680],{"class":35,"line":12043},[33,18681,6249],{"class":47},[33,18683,18684],{"class":35,"line":12048},[33,18685,18686],{"class":2487},"\u002F\u002F全局函数判断两个立方体是否相等\n",[33,18688,18689,18691,18693,18695,18697,18700,18702,18704,18707],{"class":35,"line":12057},[33,18690,3628],{"class":39},[33,18692,18545],{"class":43},[33,18694,133],{"class":47},[33,18696,18550],{"class":43},[33,18698,18699],{"class":289}," c1",[33,18701,2799],{"class":47},[33,18703,18550],{"class":43},[33,18705,18706],{"class":289}," c2",[33,18708,226],{"class":47},[33,18710,18711],{"class":35,"line":12062},[33,18712,3820],{"class":47},[33,18714,18715,18717,18720,18722,18724,18726,18729,18731,18734,18736,18738,18740,18742,18744,18746,18748,18750,18752,18754,18756,18758,18760,18762,18764],{"class":35,"line":12068},[33,18716,90],{"class":39},[33,18718,18719],{"class":47}," (c1.",[33,18721,18568],{"class":43},[33,18723,15290],{"class":47},[33,18725,5206],{"class":39},[33,18727,18728],{"class":47}," c2.",[33,18730,18568],{"class":43},[33,18732,18733],{"class":47},"()) ",[33,18735,3976],{"class":39},[33,18737,18719],{"class":47},[33,18739,18583],{"class":43},[33,18741,15290],{"class":47},[33,18743,5206],{"class":39},[33,18745,18728],{"class":47},[33,18747,18583],{"class":43},[33,18749,18733],{"class":47},[33,18751,3976],{"class":39},[33,18753,18719],{"class":47},[33,18755,18597],{"class":43},[33,18757,15290],{"class":47},[33,18759,5206],{"class":39},[33,18761,18728],{"class":47},[33,18763,18597],{"class":43},[33,18765,18766],{"class":47},"());\n",[33,18768,18769],{"class":35,"line":12089},[33,18770,1010],{"class":47},[33,18772,18773,18775,18777],{"class":35,"line":12095},[33,18774,2436],{"class":39},[33,18776,4232],{"class":43},[33,18778,4235],{"class":47},[33,18780,18781],{"class":35,"line":12109},[33,18782,3820],{"class":47},[33,18784,18785],{"class":35,"line":12115},[33,18786,18787],{"class":47},"    Cube c1;\n",[33,18789,18790],{"class":35,"line":12142},[33,18791,18792],{"class":2487},"    \u002F\u002F输入立方体的长宽高\n",[33,18794,18795,18797,18799,18802,18804],{"class":35,"line":12151},[33,18796,3825],{"class":47},[33,18798,3450],{"class":39},[33,18800,18801],{"class":60},"\"请输入第一个立方体的长、宽、高：\"",[33,18803,3450],{"class":39},[33,18805,3472],{"class":47},[33,18807,18808,18810],{"class":35,"line":12157},[33,18809,4244],{"class":39},[33,18811,18812],{"class":47}," l,w,h,l1,w1,h1;\n",[33,18814,18815,18817,18819,18821,18823,18825,18827],{"class":35,"line":12165},[33,18816,4271],{"class":47},[33,18818,3703],{"class":39},[33,18820,2935],{"class":47},[33,18822,3703],{"class":39},[33,18824,3208],{"class":47},[33,18826,3703],{"class":39},[33,18828,18365],{"class":47},[33,18830,18831,18834,18837],{"class":35,"line":12170},[33,18832,18833],{"class":47},"    c1.",[33,18835,18836],{"class":43},"setLwh",[33,18838,18839],{"class":47},"(l,w,h);\n",[33,18841,18843],{"class":35,"line":18842},66,[33,18844,18845],{"class":2487},"    \u002F\u002F面积\n",[33,18847,18849,18851,18853,18856,18858,18860,18863,18865,18867],{"class":35,"line":18848},67,[33,18850,3825],{"class":47},[33,18852,3450],{"class":39},[33,18854,18855],{"class":60},"\"立方体的表面积为：\"",[33,18857,3450],{"class":39},[33,18859,17068],{"class":47},[33,18861,18862],{"class":43},"mianji",[33,18864,4685],{"class":47},[33,18866,3450],{"class":39},[33,18868,3472],{"class":47},[33,18870,18872],{"class":35,"line":18871},68,[33,18873,18874],{"class":2487},"    \u002F\u002F体积\n",[33,18876,18878,18880,18882,18885,18887,18889,18892,18894,18896],{"class":35,"line":18877},69,[33,18879,3825],{"class":47},[33,18881,3450],{"class":39},[33,18883,18884],{"class":60},"\"立方体的体积为：\"",[33,18886,3450],{"class":39},[33,18888,17068],{"class":47},[33,18890,18891],{"class":43},"tiji",[33,18893,4685],{"class":47},[33,18895,3450],{"class":39},[33,18897,3472],{"class":47},[33,18899,18901,18903,18905,18908,18910],{"class":35,"line":18900},70,[33,18902,3825],{"class":47},[33,18904,3450],{"class":39},[33,18906,18907],{"class":60},"\"请输入第二个立方体的长、宽、高：\"",[33,18909,3450],{"class":39},[33,18911,3472],{"class":47},[33,18913,18915,18917,18919,18922,18924,18927,18929],{"class":35,"line":18914},71,[33,18916,4271],{"class":47},[33,18918,3703],{"class":39},[33,18920,18921],{"class":47},"l1",[33,18923,3703],{"class":39},[33,18925,18926],{"class":47},"w1",[33,18928,3703],{"class":39},[33,18930,18931],{"class":47},"h1;\n",[33,18933,18935],{"class":35,"line":18934},72,[33,18936,18937],{"class":47},"    Cube c2;\n",[33,18939,18941,18944,18946],{"class":35,"line":18940},73,[33,18942,18943],{"class":47},"    c2.",[33,18945,18836],{"class":43},[33,18947,18948],{"class":47},"(l1,w1,h1);\n",[33,18950,18952,18954,18956,18959,18961,18964,18966,18968,18970],{"class":35,"line":18951},74,[33,18953,3825],{"class":47},[33,18955,3450],{"class":39},[33,18957,18958],{"class":60},"\"第二个立方体的表面积为：\"",[33,18960,3450],{"class":39},[33,18962,18963],{"class":47},"c2.",[33,18965,18862],{"class":43},[33,18967,4685],{"class":47},[33,18969,3450],{"class":39},[33,18971,3472],{"class":47},[33,18973,18975,18977,18979,18982,18984,18986,18988,18990,18992],{"class":35,"line":18974},75,[33,18976,3825],{"class":47},[33,18978,3450],{"class":39},[33,18980,18981],{"class":60},"\"第二个立方体的体积为：\"",[33,18983,3450],{"class":39},[33,18985,18963],{"class":47},[33,18987,18891],{"class":43},[33,18989,4685],{"class":47},[33,18991,3450],{"class":39},[33,18993,3472],{"class":47},[33,18995,18997],{"class":35,"line":18996},76,[33,18998,100],{"emptyLinePlaceholder":99},[33,19000,19002],{"class":35,"line":19001},77,[33,19003,19004],{"class":2487},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[33,19006,19008,19010,19012,19015,19017],{"class":35,"line":19007},78,[33,19009,3825],{"class":47},[33,19011,3450],{"class":39},[33,19013,19014],{"class":60},"\"内部函数判断结果：\"",[33,19016,3450],{"class":39},[33,19018,3472],{"class":47},[33,19020,19022,19024,19026,19029],{"class":35,"line":19021},79,[33,19023,593],{"class":39},[33,19025,18719],{"class":47},[33,19027,19028],{"class":43},"isEqual",[33,19030,19031],{"class":47},"(c2))\n",[33,19033,19035],{"class":35,"line":19034},80,[33,19036,4289],{"class":47},[33,19038,19040,19042,19044,19047,19049],{"class":35,"line":19039},81,[33,19041,5706],{"class":47},[33,19043,3450],{"class":39},[33,19045,19046],{"class":60},"\"两个立方体相等\"",[33,19048,3450],{"class":39},[33,19050,3472],{"class":47},[33,19052,19054],{"class":35,"line":19053},82,[33,19055,4446],{"class":47},[33,19057,19059],{"class":35,"line":19058},83,[33,19060,19061],{"class":39},"    else\n",[33,19063,19065],{"class":35,"line":19064},84,[33,19066,4289],{"class":47},[33,19068,19070,19072,19074,19077,19079],{"class":35,"line":19069},85,[33,19071,5706],{"class":47},[33,19073,3450],{"class":39},[33,19075,19076],{"class":60},"\"两个立方体不相等\"",[33,19078,3450],{"class":39},[33,19080,3472],{"class":47},[33,19082,19084],{"class":35,"line":19083},86,[33,19085,4446],{"class":47},[33,19087,19089],{"class":35,"line":19088},87,[33,19090,100],{"emptyLinePlaceholder":99},[33,19092,19094,19096,19098,19101,19103],{"class":35,"line":19093},88,[33,19095,3825],{"class":47},[33,19097,3450],{"class":39},[33,19099,19100],{"class":60},"\"全局函数判断结果：\"",[33,19102,3450],{"class":39},[33,19104,3472],{"class":47},[33,19106,19108,19110,19112,19114],{"class":35,"line":19107},89,[33,19109,593],{"class":39},[33,19111,3924],{"class":47},[33,19113,19028],{"class":43},[33,19115,19116],{"class":47},"(c1, c2))\n",[33,19118,19120],{"class":35,"line":19119},90,[33,19121,4289],{"class":47},[33,19123,19125,19127,19129,19131,19133],{"class":35,"line":19124},91,[33,19126,5706],{"class":47},[33,19128,3450],{"class":39},[33,19130,19046],{"class":60},[33,19132,3450],{"class":39},[33,19134,3472],{"class":47},[33,19136,19138],{"class":35,"line":19137},92,[33,19139,4446],{"class":47},[33,19141,19143],{"class":35,"line":19142},93,[33,19144,19061],{"class":39},[33,19146,19148],{"class":35,"line":19147},94,[33,19149,4289],{"class":47},[33,19151,19153,19155,19157,19159,19161],{"class":35,"line":19152},95,[33,19154,5706],{"class":47},[33,19156,3450],{"class":39},[33,19158,19076],{"class":60},[33,19160,3450],{"class":39},[33,19162,3472],{"class":47},[33,19164,19166],{"class":35,"line":19165},96,[33,19167,4446],{"class":47},[33,19169,19171],{"class":35,"line":19170},97,[33,19172,1010],{"class":47},[328,19174,19175],{"start":51},[331,19176,19177],{},[2575,19178,19179],{},"练习案例2：点和圆的关系",[3413,19181,19182],{},[331,19183,19184],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[23,19186,19188],{"className":2422,"code":19187,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[30,19189,19190,19196,19206,19213,19220,19224,19228,19233,19267,19272,19288,19302,19306,19310,19317,19324,19328,19334,19338,19342,19346,19368,19391,19396,19410,19425,19429,19433,19439,19444,19449,19453,19479,19483,19513,19541,19569,19586,19590,19603,19607,19611,19615,19628,19632,19636,19644,19648,19652,19656,19661,19665,19676,19683,19692,19702,19713,19720,19733,19744,19754,19765,19772,19786,19791,19801,19809],{"__ignoreMap":28},[33,19191,19192,19194],{"class":35,"line":36},[33,19193,4209],{"class":39},[33,19195,4212],{"class":60},[33,19197,19198,19200,19202,19204],{"class":35,"line":51},[33,19199,4217],{"class":39},[33,19201,4220],{"class":39},[33,19203,4223],{"class":43},[33,19205,3567],{"class":47},[33,19207,19208,19210],{"class":35,"line":64},[33,19209,4209],{"class":39},[33,19211,19212],{"class":60},"\u003Ccmath>\n",[33,19214,19215,19217],{"class":35,"line":76},[33,19216,16934],{"class":39},[33,19218,19219],{"class":43}," Point\n",[33,19221,19222],{"class":35,"line":87},[33,19223,3820],{"class":47},[33,19225,19226],{"class":35,"line":96},[33,19227,16956],{"class":39},[33,19229,19230],{"class":35,"line":103},[33,19231,19232],{"class":2487},"    \u002F\u002F赋值\n",[33,19234,19235,19237,19240,19242,19244,19247,19249,19251,19254,19257,19259,19262,19264],{"class":35,"line":108},[33,19236,17147],{"class":39},[33,19238,19239],{"class":43}," setPoint",[33,19241,133],{"class":47},[33,19243,16277],{"class":39},[33,19245,19246],{"class":289}," x",[33,19248,245],{"class":47},[33,19250,16277],{"class":39},[33,19252,19253],{"class":289}," y",[33,19255,19256],{"class":47},") { m_x ",[33,19258,57],{"class":39},[33,19260,19261],{"class":47}," x; m_y ",[33,19263,57],{"class":39},[33,19265,19266],{"class":47}," y; }\n",[33,19268,19269],{"class":35,"line":119},[33,19270,19271],{"class":2487},"    \u002F\u002F获取坐标\n",[33,19273,19274,19276,19279,19282,19285],{"class":35,"line":128},[33,19275,16978],{"class":39},[33,19277,19278],{"class":43}," getX",[33,19280,19281],{"class":47},"() { ",[33,19283,19284],{"class":39},"return",[33,19286,19287],{"class":47}," m_x; }\n",[33,19289,19290,19292,19295,19297,19299],{"class":35,"line":1753},[33,19291,16978],{"class":39},[33,19293,19294],{"class":43}," getY",[33,19296,19281],{"class":47},[33,19298,19284],{"class":39},[33,19300,19301],{"class":47}," m_y; }\n",[33,19303,19304],{"class":35,"line":1763},[33,19305,100],{"emptyLinePlaceholder":99},[33,19307,19308],{"class":35,"line":1775},[33,19309,17460],{"class":39},[33,19311,19312,19314],{"class":35,"line":1780},[33,19313,16978],{"class":39},[33,19315,19316],{"class":47}," m_x;\n",[33,19318,19319,19321],{"class":35,"line":1785},[33,19320,16978],{"class":39},[33,19322,19323],{"class":47}," m_y;\n",[33,19325,19326],{"class":35,"line":1940},[33,19327,6249],{"class":47},[33,19329,19330,19332],{"class":35,"line":2183},[33,19331,16934],{"class":39},[33,19333,16937],{"class":43},[33,19335,19336],{"class":35,"line":2208},[33,19337,3820],{"class":47},[33,19339,19340],{"class":35,"line":2234},[33,19341,16956],{"class":39},[33,19343,19344],{"class":35,"line":2239},[33,19345,19232],{"class":2487},[33,19347,19348,19350,19353,19355,19357,19360,19363,19365],{"class":35,"line":2247},[33,19349,17147],{"class":39},[33,19351,19352],{"class":43}," setRadius",[33,19354,133],{"class":47},[33,19356,16277],{"class":39},[33,19358,19359],{"class":289}," r",[33,19361,19362],{"class":47},") { m_r ",[33,19364,57],{"class":39},[33,19366,19367],{"class":47}," r; }\n",[33,19369,19370,19372,19375,19377,19380,19383,19386,19388],{"class":35,"line":2255},[33,19371,17147],{"class":39},[33,19373,19374],{"class":43}," setCenter",[33,19376,133],{"class":47},[33,19378,19379],{"class":43},"Point",[33,19381,19382],{"class":289}," center",[33,19384,19385],{"class":47},") { m_center ",[33,19387,57],{"class":39},[33,19389,19390],{"class":47}," center; }\n",[33,19392,19393],{"class":35,"line":3992},[33,19394,19395],{"class":2487},"    \u002F\u002F获取属性\n",[33,19397,19398,19400,19403,19405,19407],{"class":35,"line":4009},[33,19399,16978],{"class":39},[33,19401,19402],{"class":43}," getRadius",[33,19404,19281],{"class":47},[33,19406,19284],{"class":39},[33,19408,19409],{"class":47}," m_r; }\n",[33,19411,19412,19415,19418,19420,19422],{"class":35,"line":4014},[33,19413,19414],{"class":43},"    Point",[33,19416,19417],{"class":43}," getCenter",[33,19419,19281],{"class":47},[33,19421,19284],{"class":39},[33,19423,19424],{"class":47}," m_center; }\n",[33,19426,19427],{"class":35,"line":4019},[33,19428,100],{"emptyLinePlaceholder":99},[33,19430,19431],{"class":35,"line":4024},[33,19432,17460],{"class":39},[33,19434,19435,19437],{"class":35,"line":4038},[33,19436,16978],{"class":39},[33,19438,16968],{"class":47},[33,19440,19441],{"class":35,"line":4043},[33,19442,19443],{"class":2487},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[33,19445,19446],{"class":35,"line":4834},[33,19447,19448],{"class":47},"    Point m_center;\n",[33,19450,19451],{"class":35,"line":4848},[33,19452,6249],{"class":47},[33,19454,19455,19457,19460,19462,19465,19467,19469,19471,19473,19475,19477],{"class":35,"line":4856},[33,19456,7611],{"class":39},[33,19458,19459],{"class":43}," isInCircle",[33,19461,133],{"class":47},[33,19463,19464],{"class":43},"Circle",[33,19466,12828],{"class":39},[33,19468,2712],{"class":289},[33,19470,2799],{"class":47},[33,19472,19379],{"class":43},[33,19474,12828],{"class":39},[33,19476,19],{"class":289},[33,19478,226],{"class":47},[33,19480,19481],{"class":35,"line":4861},[33,19482,3820],{"class":47},[33,19484,19485,19487,19490,19492,19494,19497,19500,19503,19505,19507,19509,19511],{"class":35,"line":4867},[33,19486,16978],{"class":39},[33,19488,19489],{"class":47}," dx ",[33,19491,57],{"class":39},[33,19493,18580],{"class":47},[33,19495,19496],{"class":43},"getCenter",[33,19498,19499],{"class":47},"().",[33,19501,19502],{"class":43},"getX",[33,19504,15290],{"class":47},[33,19506,2949],{"class":39},[33,19508,18126],{"class":47},[33,19510,19502],{"class":43},[33,19512,7883],{"class":47},[33,19514,19515,19517,19520,19522,19524,19526,19528,19531,19533,19535,19537,19539],{"class":35,"line":4873},[33,19516,16978],{"class":39},[33,19518,19519],{"class":47}," dy ",[33,19521,57],{"class":39},[33,19523,18580],{"class":47},[33,19525,19496],{"class":43},[33,19527,19499],{"class":47},[33,19529,19530],{"class":43},"getY",[33,19532,15290],{"class":47},[33,19534,2949],{"class":39},[33,19536,18126],{"class":47},[33,19538,19530],{"class":43},[33,19540,7883],{"class":47},[33,19542,19543,19545,19548,19550,19553,19556,19558,19560,19562,19564,19566],{"class":35,"line":4878},[33,19544,16978],{"class":39},[33,19546,19547],{"class":47}," distance ",[33,19549,57],{"class":39},[33,19551,19552],{"class":43}," sqrt",[33,19554,19555],{"class":47},"(dx ",[33,19557,657],{"class":39},[33,19559,19489],{"class":47},[33,19561,880],{"class":39},[33,19563,19519],{"class":47},[33,19565,657],{"class":39},[33,19567,19568],{"class":47}," dy);\n",[33,19570,19571,19573,19576,19578,19580,19583],{"class":35,"line":10194},[33,19572,593],{"class":39},[33,19574,19575],{"class":47}," (distance ",[33,19577,2226],{"class":39},[33,19579,18580],{"class":47},[33,19581,19582],{"class":43},"getRadius",[33,19584,19585],{"class":47},"())\n",[33,19587,19588],{"class":35,"line":10218},[33,19589,4289],{"class":47},[33,19591,19592,19594,19596,19599,19601],{"class":35,"line":10223},[33,19593,11914],{"class":47},[33,19595,3450],{"class":39},[33,19597,19598],{"class":60}," \"点在圆内\"",[33,19600,3718],{"class":39},[33,19602,11086],{"class":47},[33,19604,19605],{"class":35,"line":10229},[33,19606,4446],{"class":47},[33,19608,19609],{"class":35,"line":10256},[33,19610,19061],{"class":39},[33,19612,19613],{"class":35,"line":10261},[33,19614,4289],{"class":47},[33,19616,19617,19619,19621,19624,19626],{"class":35,"line":10267},[33,19618,11914],{"class":47},[33,19620,3450],{"class":39},[33,19622,19623],{"class":60}," \"点在圆外\"",[33,19625,3718],{"class":39},[33,19627,11086],{"class":47},[33,19629,19630],{"class":35,"line":10279},[33,19631,4446],{"class":47},[33,19633,19634],{"class":35,"line":10291},[33,19635,1010],{"class":47},[33,19637,19638,19640,19642],{"class":35,"line":10303},[33,19639,2436],{"class":39},[33,19641,4232],{"class":43},[33,19643,4235],{"class":47},[33,19645,19646],{"class":35,"line":11961},[33,19647,3820],{"class":47},[33,19649,19650],{"class":35,"line":11986},[33,19651,17291],{"class":2487},[33,19653,19654],{"class":35,"line":12009},[33,19655,17038],{"class":47},[33,19657,19658],{"class":35,"line":12033},[33,19659,19660],{"class":47},"    Point p1;\n",[33,19662,19663],{"class":35,"line":12038},[33,19664,19232],{"class":2487},[33,19666,19667,19669,19671,19674],{"class":35,"line":12043},[33,19668,3825],{"class":47},[33,19670,3450],{"class":39},[33,19672,19673],{"class":60},"\"请输入圆的半径：\"",[33,19675,3567],{"class":47},[33,19677,19678,19680],{"class":35,"line":12048},[33,19679,16978],{"class":39},[33,19681,19682],{"class":47}," r;\n",[33,19684,19685,19687,19689],{"class":35,"line":12057},[33,19686,4271],{"class":47},[33,19688,3703],{"class":39},[33,19690,19691],{"class":47},"r;\n",[33,19693,19694,19696,19699],{"class":35,"line":12062},[33,19695,18833],{"class":47},[33,19697,19698],{"class":43},"setRadius",[33,19700,19701],{"class":47},"(r);\n",[33,19703,19704,19706,19708,19711],{"class":35,"line":12068},[33,19705,3825],{"class":47},[33,19707,3450],{"class":39},[33,19709,19710],{"class":60},"\"请输入圆心坐标：\"",[33,19712,3567],{"class":47},[33,19714,19715,19717],{"class":35,"line":12089},[33,19716,16978],{"class":39},[33,19718,19719],{"class":47}," x, y;\n",[33,19721,19722,19724,19726,19728,19730],{"class":35,"line":12095},[33,19723,4271],{"class":47},[33,19725,3703],{"class":39},[33,19727,3232],{"class":47},[33,19729,3703],{"class":39},[33,19731,19732],{"class":47},"y;\n",[33,19734,19735,19738,19741],{"class":35,"line":12109},[33,19736,19737],{"class":47},"    p1.",[33,19739,19740],{"class":43},"setPoint",[33,19742,19743],{"class":47},"(x, y);\n",[33,19745,19746,19748,19751],{"class":35,"line":12115},[33,19747,18833],{"class":47},[33,19749,19750],{"class":43},"setCenter",[33,19752,19753],{"class":47},"(p1);\n",[33,19755,19756,19758,19760,19763],{"class":35,"line":12142},[33,19757,3825],{"class":47},[33,19759,3450],{"class":39},[33,19761,19762],{"class":60},"\"请输入测试点坐标：\"",[33,19764,3567],{"class":47},[33,19766,19767,19769],{"class":35,"line":12151},[33,19768,16978],{"class":39},[33,19770,19771],{"class":47}," x1, y1;\n",[33,19773,19774,19776,19778,19781,19783],{"class":35,"line":12157},[33,19775,4271],{"class":47},[33,19777,3703],{"class":39},[33,19779,19780],{"class":47},"x1",[33,19782,3703],{"class":39},[33,19784,19785],{"class":47},"y1;\n",[33,19787,19788],{"class":35,"line":12165},[33,19789,19790],{"class":47},"    Point p2;\n",[33,19792,19793,19796,19798],{"class":35,"line":12170},[33,19794,19795],{"class":47},"    p2.",[33,19797,19740],{"class":43},[33,19799,19800],{"class":47},"(x1, y1);\n",[33,19802,19803,19806],{"class":35,"line":18842},[33,19804,19805],{"class":43},"    isInCircle",[33,19807,19808],{"class":47},"(c1, p2);\n",[33,19810,19811],{"class":35,"line":18848},[33,19812,1010],{"class":47},[19,19814,19815],{},"在类中可以让另一个类作为本来的成员",[19,19817,19818],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19820,19821],{},"创建point.h",[23,19823,19825],{"className":2422,"code":19824,"language":2424,"meta":28,"style":28},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[30,19826,19827,19838,19844,19854,19860,19864,19869,19873,19877,19897,19901,19909,19917,19921,19925,19931,19937],{"__ignoreMap":28},[33,19828,19829,19832,19835],{"class":35,"line":36},[33,19830,19831],{"class":39},"#pragma",[33,19833,19834],{"class":43}," once",[33,19836,19837],{"class":2487}," \u002F\u002F防止头文件重复包含\n",[33,19839,19840,19842],{"class":35,"line":51},[33,19841,4209],{"class":39},[33,19843,4212],{"class":60},[33,19845,19846,19848,19850,19852],{"class":35,"line":64},[33,19847,4217],{"class":39},[33,19849,4220],{"class":39},[33,19851,4223],{"class":43},[33,19853,3567],{"class":47},[33,19855,19856,19858],{"class":35,"line":76},[33,19857,16934],{"class":39},[33,19859,19219],{"class":43},[33,19861,19862],{"class":35,"line":87},[33,19863,3820],{"class":47},[33,19865,19866],{"class":35,"line":96},[33,19867,19868],{"class":2487},"\u002F\u002F做好声明与变量定义就可以\n",[33,19870,19871],{"class":35,"line":103},[33,19872,16956],{"class":39},[33,19874,19875],{"class":35,"line":108},[33,19876,19232],{"class":2487},[33,19878,19879,19881,19883,19885,19887,19889,19891,19893,19895],{"class":35,"line":119},[33,19880,17147],{"class":39},[33,19882,19239],{"class":43},[33,19884,133],{"class":47},[33,19886,16277],{"class":39},[33,19888,19246],{"class":289},[33,19890,245],{"class":47},[33,19892,16277],{"class":39},[33,19894,19253],{"class":289},[33,19896,4976],{"class":47},[33,19898,19899],{"class":35,"line":128},[33,19900,19271],{"class":2487},[33,19902,19903,19905,19907],{"class":35,"line":1753},[33,19904,16978],{"class":39},[33,19906,19278],{"class":43},[33,19908,7883],{"class":47},[33,19910,19911,19913,19915],{"class":35,"line":1763},[33,19912,16978],{"class":39},[33,19914,19294],{"class":43},[33,19916,7883],{"class":47},[33,19918,19919],{"class":35,"line":1775},[33,19920,100],{"emptyLinePlaceholder":99},[33,19922,19923],{"class":35,"line":1780},[33,19924,17460],{"class":39},[33,19926,19927,19929],{"class":35,"line":1785},[33,19928,16978],{"class":39},[33,19930,19316],{"class":47},[33,19932,19933,19935],{"class":35,"line":1940},[33,19934,16978],{"class":39},[33,19936,19323],{"class":47},[33,19938,19939],{"class":35,"line":2183},[33,19940,6249],{"class":47},[19,19942,19943],{},"创建point.cpp",[23,19945,19947],{"className":2422,"code":19946,"language":2424,"meta":28,"style":28},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[30,19948,19949,19956,19961,19995,19999,20015],{"__ignoreMap":28},[33,19950,19951,19953],{"class":35,"line":36},[33,19952,4209],{"class":39},[33,19954,19955],{"class":60},"\u003Cpoint.h>\n",[33,19957,19958],{"class":35,"line":51},[33,19959,19960],{"class":2487},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[33,19962,19963,19965,19968,19971,19973,19975,19977,19979,19981,19983,19985,19987,19989,19991,19993],{"class":35,"line":64},[33,19964,17147],{"class":39},[33,19966,19967],{"class":43}," Point",[33,19969,19970],{"class":47},"::",[33,19972,19740],{"class":43},[33,19974,133],{"class":47},[33,19976,16277],{"class":39},[33,19978,19246],{"class":289},[33,19980,245],{"class":47},[33,19982,16277],{"class":39},[33,19984,19253],{"class":289},[33,19986,19256],{"class":47},[33,19988,57],{"class":39},[33,19990,19261],{"class":47},[33,19992,57],{"class":39},[33,19994,19266],{"class":47},[33,19996,19997],{"class":35,"line":76},[33,19998,19271],{"class":2487},[33,20000,20001,20003,20005,20007,20009,20011,20013],{"class":35,"line":87},[33,20002,16978],{"class":39},[33,20004,19967],{"class":43},[33,20006,19970],{"class":47},[33,20008,19502],{"class":43},[33,20010,19281],{"class":47},[33,20012,19284],{"class":39},[33,20014,19287],{"class":47},[33,20016,20017,20019,20021,20023,20025,20027,20029],{"class":35,"line":96},[33,20018,16978],{"class":39},[33,20020,19967],{"class":43},[33,20022,19970],{"class":47},[33,20024,19530],{"class":43},[33,20026,19281],{"class":47},[33,20028,19284],{"class":39},[33,20030,19301],{"class":47},[19,20032,20033],{},"创建circle.h",[23,20035,20037],{"className":2422,"code":20036,"language":2424,"meta":28,"style":28},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[30,20038,20039,20046,20052,20062,20068,20074,20078,20082,20086,20100,20114,20118,20126,20134,20138,20142,20148,20152,20156],{"__ignoreMap":28},[33,20040,20041,20043],{"class":35,"line":36},[33,20042,19831],{"class":39},[33,20044,20045],{"class":43}," once\n",[33,20047,20048,20050],{"class":35,"line":51},[33,20049,4209],{"class":39},[33,20051,4212],{"class":60},[33,20053,20054,20056,20058,20060],{"class":35,"line":64},[33,20055,4217],{"class":39},[33,20057,4220],{"class":39},[33,20059,4223],{"class":43},[33,20061,3567],{"class":47},[33,20063,20064,20066],{"class":35,"line":76},[33,20065,4209],{"class":39},[33,20067,19955],{"class":60},[33,20069,20070,20072],{"class":35,"line":87},[33,20071,16934],{"class":39},[33,20073,16937],{"class":43},[33,20075,20076],{"class":35,"line":96},[33,20077,3820],{"class":47},[33,20079,20080],{"class":35,"line":103},[33,20081,16956],{"class":39},[33,20083,20084],{"class":35,"line":108},[33,20085,19232],{"class":2487},[33,20087,20088,20090,20092,20094,20096,20098],{"class":35,"line":119},[33,20089,17147],{"class":39},[33,20091,19352],{"class":43},[33,20093,133],{"class":47},[33,20095,16277],{"class":39},[33,20097,19359],{"class":289},[33,20099,4976],{"class":47},[33,20101,20102,20104,20106,20108,20110,20112],{"class":35,"line":128},[33,20103,17147],{"class":39},[33,20105,19374],{"class":43},[33,20107,133],{"class":47},[33,20109,19379],{"class":43},[33,20111,19382],{"class":289},[33,20113,4976],{"class":47},[33,20115,20116],{"class":35,"line":1753},[33,20117,19395],{"class":2487},[33,20119,20120,20122,20124],{"class":35,"line":1763},[33,20121,16978],{"class":39},[33,20123,19402],{"class":43},[33,20125,7883],{"class":47},[33,20127,20128,20130,20132],{"class":35,"line":1775},[33,20129,19414],{"class":43},[33,20131,19417],{"class":43},[33,20133,7883],{"class":47},[33,20135,20136],{"class":35,"line":1780},[33,20137,100],{"emptyLinePlaceholder":99},[33,20139,20140],{"class":35,"line":1785},[33,20141,17460],{"class":39},[33,20143,20144,20146],{"class":35,"line":1940},[33,20145,16978],{"class":39},[33,20147,16968],{"class":47},[33,20149,20150],{"class":35,"line":2183},[33,20151,19443],{"class":2487},[33,20153,20154],{"class":35,"line":2208},[33,20155,19448],{"class":47},[33,20157,20158],{"class":35,"line":2234},[33,20159,6249],{"class":47},[19,20161,20162],{},"创建circle.cpp",[23,20164,20166],{"className":2422,"code":20165,"language":2424,"meta":28,"style":28},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[30,20167,20168,20175,20198,20220,20225,20241],{"__ignoreMap":28},[33,20169,20170,20172],{"class":35,"line":36},[33,20171,4209],{"class":39},[33,20173,20174],{"class":60},"\u003Ccircle.h>\n",[33,20176,20177,20179,20182,20184,20186,20188,20190,20192,20194,20196],{"class":35,"line":51},[33,20178,7611],{"class":39},[33,20180,20181],{"class":43}," Circle",[33,20183,19970],{"class":47},[33,20185,19698],{"class":43},[33,20187,133],{"class":47},[33,20189,16277],{"class":39},[33,20191,19359],{"class":289},[33,20193,19362],{"class":47},[33,20195,57],{"class":39},[33,20197,19367],{"class":47},[33,20199,20200,20202,20204,20206,20208,20210,20212,20214,20216,20218],{"class":35,"line":64},[33,20201,7611],{"class":39},[33,20203,20181],{"class":43},[33,20205,19970],{"class":47},[33,20207,19750],{"class":43},[33,20209,133],{"class":47},[33,20211,19379],{"class":43},[33,20213,19382],{"class":289},[33,20215,19385],{"class":47},[33,20217,57],{"class":39},[33,20219,19390],{"class":47},[33,20221,20222],{"class":35,"line":76},[33,20223,20224],{"class":2487},"\u002F\u002F获取属性\n",[33,20226,20227,20229,20231,20233,20235,20237,20239],{"class":35,"line":87},[33,20228,16277],{"class":39},[33,20230,20181],{"class":43},[33,20232,19970],{"class":47},[33,20234,19582],{"class":43},[33,20236,19281],{"class":47},[33,20238,19284],{"class":39},[33,20240,19409],{"class":47},[33,20242,20243,20245,20247,20249,20251,20253,20255],{"class":35,"line":96},[33,20244,19379],{"class":43},[33,20246,20181],{"class":43},[33,20248,19970],{"class":47},[33,20250,19496],{"class":43},[33,20252,19281],{"class":47},[33,20254,19284],{"class":39},[33,20256,19424],{"class":47},[19,20258,20259],{},"使用封装的类",[23,20261,20263],{"className":2422,"code":20262,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[30,20264,20265,20271,20281,20287,20293,20317,20321,20347,20373,20397,20411,20415,20427,20431,20435,20439,20451,20455,20459,20467,20471,20475,20479,20483,20487,20497,20503,20511,20519,20529,20535,20547,20555,20563,20573,20579,20591,20595,20603,20609],{"__ignoreMap":28},[33,20266,20267,20269],{"class":35,"line":36},[33,20268,4209],{"class":39},[33,20270,4212],{"class":60},[33,20272,20273,20275,20277,20279],{"class":35,"line":51},[33,20274,4217],{"class":39},[33,20276,4220],{"class":39},[33,20278,4223],{"class":43},[33,20280,3567],{"class":47},[33,20282,20283,20285],{"class":35,"line":64},[33,20284,4209],{"class":39},[33,20286,20174],{"class":60},[33,20288,20289,20291],{"class":35,"line":76},[33,20290,4209],{"class":39},[33,20292,19955],{"class":60},[33,20294,20295,20297,20299,20301,20303,20305,20307,20309,20311,20313,20315],{"class":35,"line":87},[33,20296,7611],{"class":39},[33,20298,19459],{"class":43},[33,20300,133],{"class":47},[33,20302,19464],{"class":43},[33,20304,12828],{"class":39},[33,20306,2712],{"class":289},[33,20308,2799],{"class":47},[33,20310,19379],{"class":43},[33,20312,12828],{"class":39},[33,20314,19],{"class":289},[33,20316,226],{"class":47},[33,20318,20319],{"class":35,"line":96},[33,20320,3820],{"class":47},[33,20322,20323,20325,20327,20329,20331,20333,20335,20337,20339,20341,20343,20345],{"class":35,"line":103},[33,20324,16978],{"class":39},[33,20326,19489],{"class":47},[33,20328,57],{"class":39},[33,20330,18580],{"class":47},[33,20332,19496],{"class":43},[33,20334,19499],{"class":47},[33,20336,19502],{"class":43},[33,20338,15290],{"class":47},[33,20340,2949],{"class":39},[33,20342,18126],{"class":47},[33,20344,19502],{"class":43},[33,20346,7883],{"class":47},[33,20348,20349,20351,20353,20355,20357,20359,20361,20363,20365,20367,20369,20371],{"class":35,"line":108},[33,20350,16978],{"class":39},[33,20352,19519],{"class":47},[33,20354,57],{"class":39},[33,20356,18580],{"class":47},[33,20358,19496],{"class":43},[33,20360,19499],{"class":47},[33,20362,19530],{"class":43},[33,20364,15290],{"class":47},[33,20366,2949],{"class":39},[33,20368,18126],{"class":47},[33,20370,19530],{"class":43},[33,20372,7883],{"class":47},[33,20374,20375,20377,20379,20381,20383,20385,20387,20389,20391,20393,20395],{"class":35,"line":119},[33,20376,16978],{"class":39},[33,20378,19547],{"class":47},[33,20380,57],{"class":39},[33,20382,19552],{"class":43},[33,20384,19555],{"class":47},[33,20386,657],{"class":39},[33,20388,19489],{"class":47},[33,20390,880],{"class":39},[33,20392,19519],{"class":47},[33,20394,657],{"class":39},[33,20396,19568],{"class":47},[33,20398,20399,20401,20403,20405,20407,20409],{"class":35,"line":128},[33,20400,593],{"class":39},[33,20402,19575],{"class":47},[33,20404,2226],{"class":39},[33,20406,18580],{"class":47},[33,20408,19582],{"class":43},[33,20410,19585],{"class":47},[33,20412,20413],{"class":35,"line":1753},[33,20414,4289],{"class":47},[33,20416,20417,20419,20421,20423,20425],{"class":35,"line":1763},[33,20418,11914],{"class":47},[33,20420,3450],{"class":39},[33,20422,19598],{"class":60},[33,20424,3718],{"class":39},[33,20426,11086],{"class":47},[33,20428,20429],{"class":35,"line":1775},[33,20430,4446],{"class":47},[33,20432,20433],{"class":35,"line":1780},[33,20434,19061],{"class":39},[33,20436,20437],{"class":35,"line":1785},[33,20438,4289],{"class":47},[33,20440,20441,20443,20445,20447,20449],{"class":35,"line":1940},[33,20442,11914],{"class":47},[33,20444,3450],{"class":39},[33,20446,19623],{"class":60},[33,20448,3718],{"class":39},[33,20450,11086],{"class":47},[33,20452,20453],{"class":35,"line":2183},[33,20454,4446],{"class":47},[33,20456,20457],{"class":35,"line":2208},[33,20458,1010],{"class":47},[33,20460,20461,20463,20465],{"class":35,"line":2234},[33,20462,2436],{"class":39},[33,20464,4232],{"class":43},[33,20466,4235],{"class":47},[33,20468,20469],{"class":35,"line":2239},[33,20470,3820],{"class":47},[33,20472,20473],{"class":35,"line":2247},[33,20474,17291],{"class":2487},[33,20476,20477],{"class":35,"line":2255},[33,20478,17038],{"class":47},[33,20480,20481],{"class":35,"line":3992},[33,20482,19660],{"class":47},[33,20484,20485],{"class":35,"line":4009},[33,20486,19232],{"class":2487},[33,20488,20489,20491,20493,20495],{"class":35,"line":4014},[33,20490,3825],{"class":47},[33,20492,3450],{"class":39},[33,20494,19673],{"class":60},[33,20496,3567],{"class":47},[33,20498,20499,20501],{"class":35,"line":4019},[33,20500,16978],{"class":39},[33,20502,19682],{"class":47},[33,20504,20505,20507,20509],{"class":35,"line":4024},[33,20506,4271],{"class":47},[33,20508,3703],{"class":39},[33,20510,19691],{"class":47},[33,20512,20513,20515,20517],{"class":35,"line":4038},[33,20514,18833],{"class":47},[33,20516,19698],{"class":43},[33,20518,19701],{"class":47},[33,20520,20521,20523,20525,20527],{"class":35,"line":4043},[33,20522,3825],{"class":47},[33,20524,3450],{"class":39},[33,20526,19710],{"class":60},[33,20528,3567],{"class":47},[33,20530,20531,20533],{"class":35,"line":4834},[33,20532,16978],{"class":39},[33,20534,19719],{"class":47},[33,20536,20537,20539,20541,20543,20545],{"class":35,"line":4848},[33,20538,4271],{"class":47},[33,20540,3703],{"class":39},[33,20542,3232],{"class":47},[33,20544,3703],{"class":39},[33,20546,19732],{"class":47},[33,20548,20549,20551,20553],{"class":35,"line":4856},[33,20550,19737],{"class":47},[33,20552,19740],{"class":43},[33,20554,19743],{"class":47},[33,20556,20557,20559,20561],{"class":35,"line":4861},[33,20558,18833],{"class":47},[33,20560,19750],{"class":43},[33,20562,19753],{"class":47},[33,20564,20565,20567,20569,20571],{"class":35,"line":4867},[33,20566,3825],{"class":47},[33,20568,3450],{"class":39},[33,20570,19762],{"class":60},[33,20572,3567],{"class":47},[33,20574,20575,20577],{"class":35,"line":4873},[33,20576,16978],{"class":39},[33,20578,19771],{"class":47},[33,20580,20581,20583,20585,20587,20589],{"class":35,"line":4878},[33,20582,4271],{"class":47},[33,20584,3703],{"class":39},[33,20586,19780],{"class":47},[33,20588,3703],{"class":39},[33,20590,19785],{"class":47},[33,20592,20593],{"class":35,"line":10194},[33,20594,19790],{"class":47},[33,20596,20597,20599,20601],{"class":35,"line":10218},[33,20598,19795],{"class":47},[33,20600,19740],{"class":43},[33,20602,19800],{"class":47},[33,20604,20605,20607],{"class":35,"line":10223},[33,20606,19805],{"class":43},[33,20608,19808],{"class":47},[33,20610,20611],{"class":35,"line":10229},[33,20612,1010],{"class":47},[14,20614,20616],{"id":20615},"_82对象的初始化清理","8.2对象的初始化清理",[3413,20618,20619,20622],{},[331,20620,20621],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[331,20623,20624],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[631,20626,20628],{"id":20627},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20630,20631,20632,20635],{},"对象的",[2575,20633,20634],{},"初始化和清理","也是两个非常重要的安全问题",[19,20637,20638],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20640,20641],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20643,20644,20645,20648,20649,20652],{},"c++利用了",[2575,20646,20647],{},"构造函数","和",[2575,20650,20651],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20654,20655,20656],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2575,20657,20658],{},"我们不提供构造和析构，编译器会提供",[19,20660,20661],{},[2575,20662,20663],{},"编译器提供的构造函数和析构函数是空实现。",[3413,20665,20666,20669],{},[331,20667,20668],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[331,20670,20671,20672,20675],{},"析构函数：主要作用在于对象",[2575,20673,20674],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20677,20678,20681],{},[2575,20679,20680],{},"构造函数语法：",[30,20682,20683],{},"类名(){}",[328,20685,20686,20689,20692,20695,20698],{},[331,20687,20688],{},"构造函数，没有返回值也不写void",[331,20690,20691],{},"函数名称与类名相同",[331,20693,20694],{},"构造函数可以有参数，因此可以发生重载",[331,20696,20697],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[331,20699,20700,20701,2849],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[30,20702,20703],{},"Person(){}",[19,20705,20706,16035,20709],{},[2575,20707,20708],{},"析构函数语法：",[30,20710,20711],{},"~类名(){}",[328,20713,20714,20717,20720,20726],{},[331,20715,20716],{},"析构函数，没有返回值也不写void",[331,20718,20719],{},"函数名称与类名相同,在名称前加上符号  ~",[331,20721,20722,20723],{},"析构函数不可以有参数，因此",[2575,20724,20725],{},"不可以发生重载",[331,20727,20728],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[23,20730,20732],{"className":2422,"code":20731,"language":2424,"meta":28,"style":28},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[30,20733,20734,20740,20744,20748,20753,20760,20764,20777,20781,20786,20793,20797,20810,20814,20818,20822,20826,20834,20838,20846,20850,20854,20862,20866,20871,20875,20882,20886,20899,20903,20911],{"__ignoreMap":28},[33,20735,20736,20738],{"class":35,"line":36},[33,20737,16934],{"class":39},[33,20739,17409],{"class":43},[33,20741,20742],{"class":35,"line":51},[33,20743,3820],{"class":47},[33,20745,20746],{"class":35,"line":64},[33,20747,16956],{"class":39},[33,20749,20750],{"class":35,"line":76},[33,20751,20752],{"class":2487},"    \u002F\u002F构造函数\n",[33,20754,20755,20758],{"class":35,"line":87},[33,20756,20757],{"class":43},"    Person",[33,20759,4235],{"class":47},[33,20761,20762],{"class":35,"line":96},[33,20763,4289],{"class":47},[33,20765,20766,20768,20770,20773,20775],{"class":35,"line":103},[33,20767,11914],{"class":47},[33,20769,3450],{"class":39},[33,20771,20772],{"class":60}," \"Person的构造函数调用\"",[33,20774,3718],{"class":39},[33,20776,11086],{"class":47},[33,20778,20779],{"class":35,"line":108},[33,20780,4446],{"class":47},[33,20782,20783],{"class":35,"line":119},[33,20784,20785],{"class":2487},"    \u002F\u002F析构函数\n",[33,20787,20788,20791],{"class":35,"line":128},[33,20789,20790],{"class":43},"    ~Person",[33,20792,4235],{"class":47},[33,20794,20795],{"class":35,"line":1753},[33,20796,4289],{"class":47},[33,20798,20799,20801,20803,20806,20808],{"class":35,"line":1763},[33,20800,11914],{"class":47},[33,20802,3450],{"class":39},[33,20804,20805],{"class":60}," \"Person的析构函数调用\"",[33,20807,3718],{"class":39},[33,20809,11086],{"class":47},[33,20811,20812],{"class":35,"line":1775},[33,20813,4446],{"class":47},[33,20815,20816],{"class":35,"line":1780},[33,20817,100],{"emptyLinePlaceholder":99},[33,20819,20820],{"class":35,"line":1785},[33,20821,6249],{"class":47},[33,20823,20824],{"class":35,"line":1940},[33,20825,100],{"emptyLinePlaceholder":99},[33,20827,20828,20830,20832],{"class":35,"line":2183},[33,20829,7611],{"class":39},[33,20831,7835],{"class":43},[33,20833,4235],{"class":47},[33,20835,20836],{"class":35,"line":2208},[33,20837,3820],{"class":47},[33,20839,20840,20843],{"class":35,"line":2234},[33,20841,20842],{"class":47},"    Person p;",[33,20844,20845],{"class":2487},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[33,20847,20848],{"class":35,"line":2239},[33,20849,1010],{"class":47},[33,20851,20852],{"class":35,"line":2247},[33,20853,100],{"emptyLinePlaceholder":99},[33,20855,20856,20858,20860],{"class":35,"line":2255},[33,20857,2436],{"class":39},[33,20859,4232],{"class":43},[33,20861,13096],{"class":47},[33,20863,20864],{"class":35,"line":3992},[33,20865,15450],{"class":47},[33,20867,20868],{"class":35,"line":4009},[33,20869,20870],{"class":2487},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[33,20872,20873],{"class":35,"line":4014},[33,20874,100],{"emptyLinePlaceholder":99},[33,20876,20877,20879],{"class":35,"line":4019},[33,20878,20842],{"class":47},[33,20880,20881],{"class":2487},"\u002F\u002F只有构造函数\n",[33,20883,20884],{"class":35,"line":4024},[33,20885,100],{"emptyLinePlaceholder":99},[33,20887,20888,20890,20892,20894,20896],{"class":35,"line":4038},[33,20889,4562],{"class":43},[33,20891,133],{"class":47},[33,20893,4567],{"class":60},[33,20895,8212],{"class":47},[33,20897,20898],{"class":2487},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[33,20900,20901],{"class":35,"line":4043},[33,20902,100],{"emptyLinePlaceholder":99},[33,20904,20905,20907,20909],{"class":35,"line":4834},[33,20906,90],{"class":39},[33,20908,1437],{"class":72},[33,20910,3567],{"class":47},[33,20912,20913],{"class":35,"line":4848},[33,20914,1010],{"class":47},[19,20916,20917],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[631,20919,20921],{"id":20920},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20923,20924],{},"两种分类方式：",[19,20926,20927],{},"​\t按参数分为： 有参构造和无参构造",[19,20929,20930],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20932,20933],{},"三种调用方式：",[19,20935,20936],{},"​\t括号法",[19,20938,20939],{},"​\t显示法",[19,20941,20942],{},"​\t隐式转换法",[23,20944,20946],{"className":2422,"code":20945,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[30,20947,20948,20954,20964,20969,20974,20979,20984,20988,20996,21000,21004,21008,21014,21018,21031,21035,21047,21051,21060,21073,21077,21081,21087,21091,21104,21108,21113,21129,21133,21138,21147,21160,21164,21170,21174,21179,21187,21191,21196,21200,21208,21212,21217,21222,21227,21232,21237,21241,21246,21251,21256,21261,21265,21270,21275,21291,21303,21308,21312,21317,21322,21327,21331,21336,21350,21363,21367,21375,21379,21385,21391,21399],{"__ignoreMap":28},[33,20949,20950,20952],{"class":35,"line":36},[33,20951,4209],{"class":39},[33,20953,4212],{"class":60},[33,20955,20956,20958,20960,20962],{"class":35,"line":51},[33,20957,4217],{"class":39},[33,20959,4220],{"class":39},[33,20961,4223],{"class":43},[33,20963,3567],{"class":47},[33,20965,20966],{"class":35,"line":64},[33,20967,20968],{"class":2487},"\u002F\u002F1.构造函数的分类及调用\n",[33,20970,20971],{"class":35,"line":76},[33,20972,20973],{"class":2487},"\u002F\u002F分类\n",[33,20975,20976],{"class":35,"line":87},[33,20977,20978],{"class":2487},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[33,20980,20981],{"class":35,"line":96},[33,20982,20983],{"class":2487},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[33,20985,20986],{"class":35,"line":103},[33,20987,100],{"emptyLinePlaceholder":99},[33,20989,20990,20992,20994],{"class":35,"line":108},[33,20991,16934],{"class":39},[33,20993,17807],{"class":43},[33,20995,4931],{"class":47},[33,20997,20998],{"class":35,"line":119},[33,20999,3820],{"class":47},[33,21001,21002],{"class":35,"line":128},[33,21003,16956],{"class":39},[33,21005,21006],{"class":35,"line":1753},[33,21007,20752],{"class":2487},[33,21009,21010,21012],{"class":35,"line":1763},[33,21011,20757],{"class":43},[33,21013,4235],{"class":47},[33,21015,21016],{"class":35,"line":1775},[33,21017,4289],{"class":47},[33,21019,21020,21022,21024,21027,21029],{"class":35,"line":1780},[33,21021,5706],{"class":47},[33,21023,3450],{"class":39},[33,21025,21026],{"class":60},"\"Person构造函数无参构造\"",[33,21028,3450],{"class":39},[33,21030,3472],{"class":47},[33,21032,21033],{"class":35,"line":1785},[33,21034,4446],{"class":47},[33,21036,21037,21039,21041,21043,21045],{"class":35,"line":1940},[33,21038,20757],{"class":43},[33,21040,133],{"class":47},[33,21042,2436],{"class":39},[33,21044,3672],{"class":289},[33,21046,226],{"class":47},[33,21048,21049],{"class":35,"line":2183},[33,21050,4289],{"class":47},[33,21052,21053,21056,21058],{"class":35,"line":2208},[33,21054,21055],{"class":47},"        age",[33,21057,57],{"class":39},[33,21059,8443],{"class":47},[33,21061,21062,21064,21066,21069,21071],{"class":35,"line":2234},[33,21063,5706],{"class":47},[33,21065,3450],{"class":39},[33,21067,21068],{"class":60},"\"Person构造函数有参构造\"",[33,21070,3450],{"class":39},[33,21072,3472],{"class":47},[33,21074,21075],{"class":35,"line":2239},[33,21076,4446],{"class":47},[33,21078,21079],{"class":35,"line":2247},[33,21080,20785],{"class":2487},[33,21082,21083,21085],{"class":35,"line":2255},[33,21084,20790],{"class":43},[33,21086,4235],{"class":47},[33,21088,21089],{"class":35,"line":3992},[33,21090,4289],{"class":47},[33,21092,21093,21095,21097,21100,21102],{"class":35,"line":4009},[33,21094,5706],{"class":47},[33,21096,3450],{"class":39},[33,21098,21099],{"class":60},"\"Person析构函数被调用\"",[33,21101,3450],{"class":39},[33,21103,3472],{"class":47},[33,21105,21106],{"class":35,"line":4014},[33,21107,4446],{"class":47},[33,21109,21110],{"class":35,"line":4019},[33,21111,21112],{"class":2487},"    \u002F\u002F拷贝构造函数\n",[33,21114,21115,21117,21119,21121,21123,21125,21127],{"class":35,"line":4024},[33,21116,20757],{"class":43},[33,21118,133],{"class":47},[33,21120,9038],{"class":39},[33,21122,17807],{"class":43},[33,21124,12828],{"class":39},[33,21126,19],{"class":289},[33,21128,226],{"class":47},[33,21130,21131],{"class":35,"line":4038},[33,21132,4289],{"class":47},[33,21134,21135],{"class":35,"line":4043},[33,21136,21137],{"class":2487},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[33,21139,21140,21142,21144],{"class":35,"line":4834},[33,21141,21055],{"class":47},[33,21143,57],{"class":39},[33,21145,21146],{"class":47},"p.age;\n",[33,21148,21149,21151,21153,21156,21158],{"class":35,"line":4848},[33,21150,5706],{"class":47},[33,21152,3450],{"class":39},[33,21154,21155],{"class":60},"\"Person拷贝构造函数被调用\"",[33,21157,3450],{"class":39},[33,21159,3472],{"class":47},[33,21161,21162],{"class":35,"line":4856},[33,21163,4446],{"class":47},[33,21165,21166,21168],{"class":35,"line":4861},[33,21167,4244],{"class":39},[33,21169,10043],{"class":47},[33,21171,21172],{"class":35,"line":4867},[33,21173,6249],{"class":47},[33,21175,21176],{"class":35,"line":4873},[33,21177,21178],{"class":2487},"\u002F\u002F调用\n",[33,21180,21181,21183,21185],{"class":35,"line":4878},[33,21182,7611],{"class":39},[33,21184,7835],{"class":43},[33,21186,4235],{"class":47},[33,21188,21189],{"class":35,"line":10194},[33,21190,3820],{"class":47},[33,21192,21193],{"class":35,"line":10218},[33,21194,21195],{"class":2487},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[33,21197,21198],{"class":35,"line":10223},[33,21199,1010],{"class":47},[33,21201,21202,21204,21206],{"class":35,"line":10229},[33,21203,7611],{"class":39},[33,21205,7904],{"class":43},[33,21207,4235],{"class":47},[33,21209,21210],{"class":35,"line":10256},[33,21211,3820],{"class":47},[33,21213,21214],{"class":35,"line":10261},[33,21215,21216],{"class":2487},"    \u002F\u002F1.括号法\n",[33,21218,21219],{"class":35,"line":10267},[33,21220,21221],{"class":2487},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[33,21223,21224],{"class":35,"line":10279},[33,21225,21226],{"class":2487},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[33,21228,21229],{"class":35,"line":10291},[33,21230,21231],{"class":2487},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[33,21233,21234],{"class":35,"line":10303},[33,21235,21236],{"class":2487},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[33,21238,21239],{"class":35,"line":11961},[33,21240,100],{"emptyLinePlaceholder":99},[33,21242,21243],{"class":35,"line":11986},[33,21244,21245],{"class":2487},"    \u002F\u002F注意事项\n",[33,21247,21248],{"class":35,"line":12009},[33,21249,21250],{"class":2487},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[33,21252,21253],{"class":35,"line":12033},[33,21254,21255],{"class":2487},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[33,21257,21258],{"class":35,"line":12038},[33,21259,21260],{"class":2487},"    \u002F\u002F Person p4();\n",[33,21262,21263],{"class":35,"line":12043},[33,21264,100],{"emptyLinePlaceholder":99},[33,21266,21267],{"class":35,"line":12048},[33,21268,21269],{"class":2487},"    \u002F\u002F2.显示法\n",[33,21271,21272],{"class":35,"line":12057},[33,21273,21274],{"class":47},"    Person p1;\n",[33,21276,21277,21280,21282,21285,21287,21289],{"class":35,"line":12062},[33,21278,21279],{"class":47},"    Person p2",[33,21281,57],{"class":39},[33,21283,21284],{"class":43},"Person",[33,21286,133],{"class":47},[33,21288,1279],{"class":72},[33,21290,4976],{"class":47},[33,21292,21293,21296,21298,21300],{"class":35,"line":12068},[33,21294,21295],{"class":47},"    Person p3",[33,21297,57],{"class":39},[33,21299,21284],{"class":43},[33,21301,21302],{"class":47},"(p2);\n",[33,21304,21305],{"class":35,"line":12089},[33,21306,21307],{"class":2487},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[33,21309,21310],{"class":35,"line":12095},[33,21311,100],{"emptyLinePlaceholder":99},[33,21313,21314],{"class":35,"line":12109},[33,21315,21316],{"class":2487},"    \u002F\u002F 注意事项2\n",[33,21318,21319],{"class":35,"line":12115},[33,21320,21321],{"class":2487},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[33,21323,21324],{"class":35,"line":12142},[33,21325,21326],{"class":2487},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[33,21328,21329],{"class":35,"line":12151},[33,21330,100],{"emptyLinePlaceholder":99},[33,21332,21333],{"class":35,"line":12157},[33,21334,21335],{"class":2487},"    \u002F\u002F3.隐士转换法\n",[33,21337,21338,21341,21343,21345,21347],{"class":35,"line":12165},[33,21339,21340],{"class":47},"    Person p4",[33,21342,57],{"class":39},[33,21344,1279],{"class":72},[33,21346,2484],{"class":47},[33,21348,21349],{"class":2487},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[33,21351,21352,21355,21357,21360],{"class":35,"line":12170},[33,21353,21354],{"class":47},"    Person p5",[33,21356,57],{"class":39},[33,21358,21359],{"class":47},"p4;",[33,21361,21362],{"class":2487}," \u002F\u002F 这里会调用拷贝构造函数\n",[33,21364,21365],{"class":35,"line":18842},[33,21366,1010],{"class":47},[33,21368,21369,21371,21373],{"class":35,"line":18848},[33,21370,2436],{"class":39},[33,21372,4232],{"class":43},[33,21374,4235],{"class":47},[33,21376,21377],{"class":35,"line":18871},[33,21378,3820],{"class":47},[33,21380,21381,21383],{"class":35,"line":18877},[33,21382,7880],{"class":43},[33,21384,7883],{"class":47},[33,21386,21387,21389],{"class":35,"line":18900},[33,21388,7949],{"class":43},[33,21390,7883],{"class":47},[33,21392,21393,21395,21397],{"class":35,"line":18914},[33,21394,90],{"class":39},[33,21396,1437],{"class":72},[33,21398,3567],{"class":47},[33,21400,21401],{"class":35,"line":18934},[33,21402,1010],{"class":47},[19,21404,21405,21408],{},[2575,21406,21407],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[631,21410,21412],{"id":21411},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21414,21415],{},"C++中拷贝构造函数调用时机通常有三种情况",[3413,21417,21418,21421,21424],{},[331,21419,21420],{},"使用一个已经创建完毕的对象来初始化一个新对象",[331,21422,21423],{},"值传递的方式给函数参数传值",[331,21425,21426],{},"以值方式返回局部对象",[23,21428,21430],{"className":2422,"code":21429,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[30,21431,21432,21438,21448,21452,21457,21461,21466,21471,21476,21482,21486,21490,21496,21500,21513,21517,21522,21534,21538,21546,21559,21563,21567,21583,21587,21596,21609,21613,21619,21623,21635,21639,21645,21649,21653,21661,21665,21678,21686,21704,21708,21713,21718,21733,21737,21750,21754,21762,21766,21770,21778,21782,21787,21796,21800,21804,21829,21839,21843,21851,21855,21866,21891,21895,21899,21903,21911,21915,21920,21925,21932,21937,21942,21947,21952,21956,21961,21965,21970,21974,21979,21984,21988,21992,21997,22002,22010],{"__ignoreMap":28},[33,21433,21434,21436],{"class":35,"line":36},[33,21435,4209],{"class":39},[33,21437,4212],{"class":60},[33,21439,21440,21442,21444,21446],{"class":35,"line":51},[33,21441,4217],{"class":39},[33,21443,4220],{"class":39},[33,21445,4223],{"class":43},[33,21447,3567],{"class":47},[33,21449,21450],{"class":35,"line":64},[33,21451,100],{"emptyLinePlaceholder":99},[33,21453,21454],{"class":35,"line":76},[33,21455,21456],{"class":2487},"\u002F\u002F拷贝构造函数调用时机\n",[33,21458,21459],{"class":35,"line":87},[33,21460,100],{"emptyLinePlaceholder":99},[33,21462,21463],{"class":35,"line":96},[33,21464,21465],{"class":2487},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[33,21467,21468],{"class":35,"line":103},[33,21469,21470],{"class":2487},"\u002F\u002F2.值传递的方式给函数参数传值\n",[33,21472,21473],{"class":35,"line":108},[33,21474,21475],{"class":2487},"\u002F\u002F3.以值方式返回局部对象\n",[33,21477,21478,21480],{"class":35,"line":119},[33,21479,16934],{"class":39},[33,21481,17409],{"class":43},[33,21483,21484],{"class":35,"line":128},[33,21485,3820],{"class":47},[33,21487,21488],{"class":35,"line":1753},[33,21489,16956],{"class":39},[33,21491,21492,21494],{"class":35,"line":1763},[33,21493,20757],{"class":43},[33,21495,4235],{"class":47},[33,21497,21498],{"class":35,"line":1775},[33,21499,4289],{"class":47},[33,21501,21502,21504,21506,21509,21511],{"class":35,"line":1780},[33,21503,11914],{"class":47},[33,21505,3450],{"class":39},[33,21507,21508],{"class":60}," \"Person的默认构造函数调用\"",[33,21510,3718],{"class":39},[33,21512,11086],{"class":47},[33,21514,21515],{"class":35,"line":1785},[33,21516,4446],{"class":47},[33,21518,21519],{"class":35,"line":1940},[33,21520,21521],{"class":2487},"    \u002F\u002F有参构造\n",[33,21523,21524,21526,21528,21530,21532],{"class":35,"line":2183},[33,21525,20757],{"class":43},[33,21527,133],{"class":47},[33,21529,2436],{"class":39},[33,21531,17927],{"class":289},[33,21533,226],{"class":47},[33,21535,21536],{"class":35,"line":2208},[33,21537,4289],{"class":47},[33,21539,21540,21542,21544],{"class":35,"line":2234},[33,21541,17981],{"class":47},[33,21543,57],{"class":39},[33,21545,10043],{"class":47},[33,21547,21548,21550,21552,21555,21557],{"class":35,"line":2239},[33,21549,11914],{"class":47},[33,21551,3450],{"class":39},[33,21553,21554],{"class":60}," \"Person的有参构造函数调用\"",[33,21556,3718],{"class":39},[33,21558,11086],{"class":47},[33,21560,21561],{"class":35,"line":2247},[33,21562,4446],{"class":47},[33,21564,21565],{"class":35,"line":2255},[33,21566,21112],{"class":2487},[33,21568,21569,21571,21573,21575,21577,21579,21581],{"class":35,"line":3992},[33,21570,20757],{"class":43},[33,21572,133],{"class":47},[33,21574,9038],{"class":39},[33,21576,17807],{"class":43},[33,21578,12828],{"class":39},[33,21580,19],{"class":289},[33,21582,226],{"class":47},[33,21584,21585],{"class":35,"line":4009},[33,21586,4289],{"class":47},[33,21588,21589,21591,21593],{"class":35,"line":4014},[33,21590,17981],{"class":47},[33,21592,57],{"class":39},[33,21594,21595],{"class":47}," p.m_Age;\n",[33,21597,21598,21600,21602,21605,21607],{"class":35,"line":4019},[33,21599,11914],{"class":47},[33,21601,3450],{"class":39},[33,21603,21604],{"class":60}," \"Person的拷贝构造函数调用\"",[33,21606,3718],{"class":39},[33,21608,11086],{"class":47},[33,21610,21611],{"class":35,"line":4024},[33,21612,4446],{"class":47},[33,21614,21615,21617],{"class":35,"line":4038},[33,21616,20790],{"class":43},[33,21618,4235],{"class":47},[33,21620,21621],{"class":35,"line":4043},[33,21622,4289],{"class":47},[33,21624,21625,21627,21629,21631,21633],{"class":35,"line":4834},[33,21626,11914],{"class":47},[33,21628,3450],{"class":39},[33,21630,20805],{"class":60},[33,21632,3718],{"class":39},[33,21634,11086],{"class":47},[33,21636,21637],{"class":35,"line":4848},[33,21638,4446],{"class":47},[33,21640,21641,21643],{"class":35,"line":4856},[33,21642,4244],{"class":39},[33,21644,17904],{"class":47},[33,21646,21647],{"class":35,"line":4861},[33,21648,6249],{"class":47},[33,21650,21651],{"class":35,"line":4867},[33,21652,21465],{"class":2487},[33,21654,21655,21657,21659],{"class":35,"line":4873},[33,21656,7611],{"class":39},[33,21658,7835],{"class":43},[33,21660,4235],{"class":47},[33,21662,21663],{"class":35,"line":4878},[33,21664,3820],{"class":47},[33,21666,21667,21670,21672,21674,21676],{"class":35,"line":10194},[33,21668,21669],{"class":47},"    Person ",[33,21671,9376],{"class":43},[33,21673,133],{"class":47},[33,21675,1284],{"class":72},[33,21677,4976],{"class":47},[33,21679,21680,21682,21684],{"class":35,"line":10218},[33,21681,21669],{"class":47},[33,21683,9279],{"class":43},[33,21685,19753],{"class":47},[33,21687,21688,21690,21692,21695,21697,21700,21702],{"class":35,"line":10223},[33,21689,3825],{"class":47},[33,21691,3450],{"class":39},[33,21693,21694],{"class":60},"\"P2的年龄为：\"",[33,21696,3450],{"class":39},[33,21698,21699],{"class":47},"p2.m_Age",[33,21701,3450],{"class":39},[33,21703,3472],{"class":47},[33,21705,21706],{"class":35,"line":10229},[33,21707,1010],{"class":47},[33,21709,21710],{"class":35,"line":10256},[33,21711,21712],{"class":2487},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[33,21714,21715],{"class":35,"line":10261},[33,21716,21717],{"class":2487},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[33,21719,21720,21722,21725,21727,21729,21731],{"class":35,"line":10267},[33,21721,7611],{"class":39},[33,21723,21724],{"class":43}," doWork",[33,21726,133],{"class":47},[33,21728,21284],{"class":43},[33,21730,9071],{"class":289},[33,21732,226],{"class":47},[33,21734,21735],{"class":35,"line":10279},[33,21736,3820],{"class":47},[33,21738,21739,21741,21743,21746,21748],{"class":35,"line":10291},[33,21740,8775],{"class":47},[33,21742,3450],{"class":39},[33,21744,21745],{"class":60}," \"doWork函数调用\"",[33,21747,3718],{"class":39},[33,21749,11086],{"class":47},[33,21751,21752],{"class":35,"line":10303},[33,21753,1010],{"class":47},[33,21755,21756,21758,21760],{"class":35,"line":11961},[33,21757,7611],{"class":39},[33,21759,7904],{"class":43},[33,21761,4235],{"class":47},[33,21763,21764],{"class":35,"line":11986},[33,21765,3820],{"class":47},[33,21767,21768],{"class":35,"line":12009},[33,21769,17551],{"class":47},[33,21771,21772,21775],{"class":35,"line":12033},[33,21773,21774],{"class":43},"    doWork",[33,21776,21777],{"class":47},"(p);\n",[33,21779,21780],{"class":35,"line":12038},[33,21781,1010],{"class":47},[33,21783,21784],{"class":35,"line":12043},[33,21785,21786],{"class":2487},"\u002F\u002F 3.以值方式返回局部对象\n",[33,21788,21789,21791,21794],{"class":35,"line":12048},[33,21790,21284],{"class":43},[33,21792,21793],{"class":43}," doWork2",[33,21795,4235],{"class":47},[33,21797,21798],{"class":35,"line":12057},[33,21799,3820],{"class":47},[33,21801,21802],{"class":35,"line":12062},[33,21803,21274],{"class":47},[33,21805,21806,21808,21810,21812,21814,21816,21818,21820,21822,21824,21826],{"class":35,"line":12068},[33,21807,3825],{"class":47},[33,21809,3450],{"class":39},[33,21811,133],{"class":47},[33,21813,2436],{"class":39},[33,21815,8764],{"class":39},[33,21817,2849],{"class":47},[33,21819,2774],{"class":39},[33,21821,9376],{"class":47},[33,21823,3450],{"class":39},[33,21825,3515],{"class":47},[33,21827,21828],{"class":2487},"\u002F\u002F打印p1的地址\n",[33,21830,21831,21833,21836],{"class":35,"line":12089},[33,21832,90],{"class":39},[33,21834,21835],{"class":47}," p1;",[33,21837,21838],{"class":2487},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[33,21840,21841],{"class":35,"line":12095},[33,21842,1010],{"class":47},[33,21844,21845,21847,21849],{"class":35,"line":12109},[33,21846,7611],{"class":39},[33,21848,7976],{"class":43},[33,21850,4235],{"class":47},[33,21852,21853],{"class":35,"line":12115},[33,21854,3820],{"class":47},[33,21856,21857,21860,21862,21864],{"class":35,"line":12142},[33,21858,21859],{"class":47},"    Person p ",[33,21861,57],{"class":39},[33,21863,21793],{"class":43},[33,21865,7883],{"class":47},[33,21867,21868,21870,21872,21874,21876,21878,21880,21882,21884,21886,21888],{"class":35,"line":12151},[33,21869,3825],{"class":47},[33,21871,3450],{"class":39},[33,21873,133],{"class":47},[33,21875,2436],{"class":39},[33,21877,8764],{"class":39},[33,21879,2849],{"class":47},[33,21881,2774],{"class":39},[33,21883,19],{"class":47},[33,21885,3450],{"class":39},[33,21887,3515],{"class":47},[33,21889,21890],{"class":2487},"\u002F\u002F打印p的地址\n",[33,21892,21893],{"class":35,"line":12157},[33,21894,1010],{"class":47},[33,21896,21897],{"class":35,"line":12165},[33,21898,100],{"emptyLinePlaceholder":99},[33,21900,21901],{"class":35,"line":12170},[33,21902,100],{"emptyLinePlaceholder":99},[33,21904,21905,21907,21909],{"class":35,"line":18842},[33,21906,2436],{"class":39},[33,21908,4232],{"class":43},[33,21910,4235],{"class":47},[33,21912,21913],{"class":35,"line":18848},[33,21914,3820],{"class":47},[33,21916,21917],{"class":35,"line":18871},[33,21918,21919],{"class":2487},"    \u002F\u002F test01();\n",[33,21921,21922],{"class":35,"line":18877},[33,21923,21924],{"class":2487},"    \u002F\u002F test02();\n",[33,21926,21927,21930],{"class":35,"line":18900},[33,21928,21929],{"class":43},"    test03",[33,21931,7883],{"class":47},[33,21933,21934],{"class":35,"line":18914},[33,21935,21936],{"class":2487},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[33,21938,21939],{"class":35,"line":18934},[33,21940,21941],{"class":2487},"\u002F\u002F 输出结果如下：\n",[33,21943,21944],{"class":35,"line":18940},[33,21945,21946],{"class":2487},"\u002F\u002F Person的默认构造函数调用\n",[33,21948,21949],{"class":35,"line":18951},[33,21950,21951],{"class":2487},"\u002F\u002F 0x7fffffffceec\n",[33,21953,21954],{"class":35,"line":18974},[33,21955,21951],{"class":2487},[33,21957,21958],{"class":35,"line":18996},[33,21959,21960],{"class":2487},"\u002F\u002F Person的析构函数调用\n",[33,21962,21963],{"class":35,"line":19001},[33,21964,100],{"emptyLinePlaceholder":99},[33,21966,21967],{"class":35,"line":19007},[33,21968,21969],{"class":2487},"\u002F\u002F 之前的输出结果如下：\n",[33,21971,21972],{"class":35,"line":19021},[33,21973,21946],{"class":2487},[33,21975,21976],{"class":35,"line":19034},[33,21977,21978],{"class":2487},"\u002F\u002F 地址\n",[33,21980,21981],{"class":35,"line":19039},[33,21982,21983],{"class":2487},"\u002F\u002F Person的拷贝构造函数调用\n",[33,21985,21986],{"class":35,"line":19053},[33,21987,21960],{"class":2487},[33,21989,21990],{"class":35,"line":19058},[33,21991,21978],{"class":2487},[33,21993,21994],{"class":35,"line":19064},[33,21995,21996],{"class":2487},"\u002F\u002F (这两次输出的地址也是不同的) \n",[33,21998,21999],{"class":35,"line":19069},[33,22000,22001],{"class":2487},"\u002F\u002F Person的析构函数调用     \n",[33,22003,22004,22006,22008],{"class":35,"line":19083},[33,22005,90],{"class":39},[33,22007,1437],{"class":72},[33,22009,3567],{"class":47},[33,22011,22012],{"class":35,"line":19088},[33,22013,1010],{"class":47},[19,22015,22016],{},"简化版理解",[23,22018,22020],{"className":2422,"code":22019,"language":2424,"meta":28,"style":28},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,22021,22022,22030,22034,22040,22053,22064,22068,22080,22093,22101,22105,22121,22134,22143,22147,22152,22158,22171,22175,22179,22186,22190,22194,22199,22207,22211,22227,22240,22253,22257,22262,22270,22274,22278,22283,22288,22304,22312,22319,22325,22329,22333,22338,22346,22350,22354,22377,22384,22388,22392,22400,22404,22414,22436,22440,22444,22448,22456,22460,22465,22470,22476,22480,22490,22494,22502],{"__ignoreMap":28},[33,22023,22024,22026,22028],{"class":35,"line":36},[33,22025,16934],{"class":39},[33,22027,17807],{"class":43},[33,22029,17810],{"class":47},[33,22031,22032],{"class":35,"line":51},[33,22033,16956],{"class":39},[33,22035,22036,22038],{"class":35,"line":64},[33,22037,20757],{"class":43},[33,22039,13096],{"class":47},[33,22041,22042,22044,22046,22049,22051],{"class":35,"line":76},[33,22043,11914],{"class":47},[33,22045,3450],{"class":39},[33,22047,22048],{"class":60}," \"无参构造函数!\"",[33,22050,3718],{"class":39},[33,22052,11086],{"class":47},[33,22054,22055,22058,22060,22062],{"class":35,"line":87},[33,22056,22057],{"class":47},"        mAge ",[33,22059,57],{"class":39},[33,22061,1437],{"class":72},[33,22063,3567],{"class":47},[33,22065,22066],{"class":35,"line":96},[33,22067,4446],{"class":47},[33,22069,22070,22072,22074,22076,22078],{"class":35,"line":103},[33,22071,20757],{"class":43},[33,22073,133],{"class":47},[33,22075,2436],{"class":39},[33,22077,17927],{"class":289},[33,22079,14682],{"class":47},[33,22081,22082,22084,22086,22089,22091],{"class":35,"line":108},[33,22083,11914],{"class":47},[33,22085,3450],{"class":39},[33,22087,22088],{"class":60}," \"有参构造函数!\"",[33,22090,3718],{"class":39},[33,22092,11086],{"class":47},[33,22094,22095,22097,22099],{"class":35,"line":119},[33,22096,22057],{"class":47},[33,22098,57],{"class":39},[33,22100,10043],{"class":47},[33,22102,22103],{"class":35,"line":128},[33,22104,4446],{"class":47},[33,22106,22107,22109,22111,22113,22115,22117,22119],{"class":35,"line":1753},[33,22108,20757],{"class":43},[33,22110,133],{"class":47},[33,22112,9038],{"class":39},[33,22114,17807],{"class":43},[33,22116,2774],{"class":39},[33,22118,9071],{"class":289},[33,22120,14682],{"class":47},[33,22122,22123,22125,22127,22130,22132],{"class":35,"line":1763},[33,22124,11914],{"class":47},[33,22126,3450],{"class":39},[33,22128,22129],{"class":60}," \"拷贝构造函数!\"",[33,22131,3718],{"class":39},[33,22133,11086],{"class":47},[33,22135,22136,22138,22140],{"class":35,"line":1775},[33,22137,22057],{"class":47},[33,22139,57],{"class":39},[33,22141,22142],{"class":47}," p.mAge;\n",[33,22144,22145],{"class":35,"line":1780},[33,22146,4446],{"class":47},[33,22148,22149],{"class":35,"line":1785},[33,22150,22151],{"class":2487},"    \u002F\u002F析构函数在释放内存之前调用\n",[33,22153,22154,22156],{"class":35,"line":1940},[33,22155,20790],{"class":43},[33,22157,13096],{"class":47},[33,22159,22160,22162,22164,22167,22169],{"class":35,"line":2183},[33,22161,11914],{"class":47},[33,22163,3450],{"class":39},[33,22165,22166],{"class":60}," \"析构函数!\"",[33,22168,3718],{"class":39},[33,22170,11086],{"class":47},[33,22172,22173],{"class":35,"line":2208},[33,22174,4446],{"class":47},[33,22176,22177],{"class":35,"line":2234},[33,22178,16956],{"class":39},[33,22180,22181,22183],{"class":35,"line":2239},[33,22182,4244],{"class":39},[33,22184,22185],{"class":47}," mAge;\n",[33,22187,22188],{"class":35,"line":2247},[33,22189,6249],{"class":47},[33,22191,22192],{"class":35,"line":2255},[33,22193,100],{"emptyLinePlaceholder":99},[33,22195,22196],{"class":35,"line":3992},[33,22197,22198],{"class":2487},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[33,22200,22201,22203,22205],{"class":35,"line":4009},[33,22202,7611],{"class":39},[33,22204,7835],{"class":43},[33,22206,13096],{"class":47},[33,22208,22209],{"class":35,"line":4014},[33,22210,100],{"emptyLinePlaceholder":99},[33,22212,22213,22215,22218,22220,22222,22224],{"class":35,"line":4019},[33,22214,21669],{"class":47},[33,22216,22217],{"class":43},"man",[33,22219,133],{"class":47},[33,22221,2734],{"class":72},[33,22223,8212],{"class":47},[33,22225,22226],{"class":2487}," \u002F\u002Fp对象已经创建完毕\n",[33,22228,22229,22231,22234,22237],{"class":35,"line":4024},[33,22230,21669],{"class":47},[33,22232,22233],{"class":43},"newman",[33,22235,22236],{"class":47},"(man);",[33,22238,22239],{"class":2487}," \u002F\u002F调用拷贝构造函数\n",[33,22241,22242,22245,22247,22250],{"class":35,"line":4038},[33,22243,22244],{"class":47},"    Person newman2 ",[33,22246,57],{"class":39},[33,22248,22249],{"class":47}," man;",[33,22251,22252],{"class":2487}," \u002F\u002F拷贝构造\n",[33,22254,22255],{"class":35,"line":4043},[33,22256,100],{"emptyLinePlaceholder":99},[33,22258,22259],{"class":35,"line":4834},[33,22260,22261],{"class":2487},"    \u002F\u002FPerson newman3;\n",[33,22263,22264,22267],{"class":35,"line":4848},[33,22265,22266],{"class":2487},"    \u002F\u002Fnewman3 = man;",[33,22268,22269],{"class":2487}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[33,22271,22272],{"class":35,"line":4856},[33,22273,1010],{"class":47},[33,22275,22276],{"class":35,"line":4861},[33,22277,100],{"emptyLinePlaceholder":99},[33,22279,22280],{"class":35,"line":4867},[33,22281,22282],{"class":2487},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[33,22284,22285],{"class":35,"line":4873},[33,22286,22287],{"class":2487},"\u002F\u002F相当于Person p1 = p;\n",[33,22289,22290,22292,22294,22296,22298,22301],{"class":35,"line":4878},[33,22291,7611],{"class":39},[33,22293,21724],{"class":43},[33,22295,133],{"class":47},[33,22297,21284],{"class":43},[33,22299,22300],{"class":289}," p1",[33,22302,22303],{"class":47},") {}\n",[33,22305,22306,22308,22310],{"class":35,"line":10194},[33,22307,7611],{"class":39},[33,22309,7904],{"class":43},[33,22311,13096],{"class":47},[33,22313,22314,22316],{"class":35,"line":10218},[33,22315,20842],{"class":47},[33,22317,22318],{"class":2487}," \u002F\u002F无参构造函数\n",[33,22320,22321,22323],{"class":35,"line":10223},[33,22322,21774],{"class":43},[33,22324,21777],{"class":47},[33,22326,22327],{"class":35,"line":10229},[33,22328,1010],{"class":47},[33,22330,22331],{"class":35,"line":10256},[33,22332,100],{"emptyLinePlaceholder":99},[33,22334,22335],{"class":35,"line":10261},[33,22336,22337],{"class":2487},"\u002F\u002F3. 以值方式返回局部对象\n",[33,22339,22340,22342,22344],{"class":35,"line":10267},[33,22341,21284],{"class":43},[33,22343,21793],{"class":43},[33,22345,4235],{"class":47},[33,22347,22348],{"class":35,"line":10279},[33,22349,3820],{"class":47},[33,22351,22352],{"class":35,"line":10291},[33,22353,21274],{"class":47},[33,22355,22356,22358,22360,22362,22364,22366,22368,22370,22373,22375],{"class":35,"line":10303},[33,22357,8775],{"class":47},[33,22359,3450],{"class":39},[33,22361,3924],{"class":47},[33,22363,2436],{"class":39},[33,22365,8764],{"class":39},[33,22367,2849],{"class":47},[33,22369,2774],{"class":39},[33,22371,22372],{"class":47},"p1 ",[33,22374,3450],{"class":39},[33,22376,11086],{"class":47},[33,22378,22379,22381],{"class":35,"line":11961},[33,22380,90],{"class":39},[33,22382,22383],{"class":47}," p1;\n",[33,22385,22386],{"class":35,"line":11986},[33,22387,1010],{"class":47},[33,22389,22390],{"class":35,"line":12009},[33,22391,100],{"emptyLinePlaceholder":99},[33,22393,22394,22396,22398],{"class":35,"line":12033},[33,22395,7611],{"class":39},[33,22397,7976],{"class":43},[33,22399,4235],{"class":47},[33,22401,22402],{"class":35,"line":12038},[33,22403,3820],{"class":47},[33,22405,22406,22408,22410,22412],{"class":35,"line":12043},[33,22407,21859],{"class":47},[33,22409,57],{"class":39},[33,22411,21793],{"class":43},[33,22413,7883],{"class":47},[33,22415,22416,22418,22420,22422,22424,22426,22428,22430,22432,22434],{"class":35,"line":12048},[33,22417,8775],{"class":47},[33,22419,3450],{"class":39},[33,22421,3924],{"class":47},[33,22423,2436],{"class":39},[33,22425,8764],{"class":39},[33,22427,2849],{"class":47},[33,22429,2774],{"class":39},[33,22431,13689],{"class":47},[33,22433,3450],{"class":39},[33,22435,11086],{"class":47},[33,22437,22438],{"class":35,"line":12057},[33,22439,1010],{"class":47},[33,22441,22442],{"class":35,"line":12062},[33,22443,100],{"emptyLinePlaceholder":99},[33,22445,22446],{"class":35,"line":12068},[33,22447,100],{"emptyLinePlaceholder":99},[33,22449,22450,22452,22454],{"class":35,"line":12089},[33,22451,2436],{"class":39},[33,22453,4232],{"class":43},[33,22455,13096],{"class":47},[33,22457,22458],{"class":35,"line":12095},[33,22459,100],{"emptyLinePlaceholder":99},[33,22461,22462],{"class":35,"line":12109},[33,22463,22464],{"class":2487},"    \u002F\u002Ftest01();\n",[33,22466,22467],{"class":35,"line":12115},[33,22468,22469],{"class":2487},"    \u002F\u002Ftest02();\n",[33,22471,22472,22474],{"class":35,"line":12142},[33,22473,21929],{"class":43},[33,22475,7883],{"class":47},[33,22477,22478],{"class":35,"line":12151},[33,22479,100],{"emptyLinePlaceholder":99},[33,22481,22482,22484,22486,22488],{"class":35,"line":12157},[33,22483,4562],{"class":43},[33,22485,133],{"class":47},[33,22487,4567],{"class":60},[33,22489,4976],{"class":47},[33,22491,22492],{"class":35,"line":12165},[33,22493,100],{"emptyLinePlaceholder":99},[33,22495,22496,22498,22500],{"class":35,"line":12170},[33,22497,90],{"class":39},[33,22499,1437],{"class":72},[33,22501,3567],{"class":47},[33,22503,22504],{"class":35,"line":18842},[33,22505,1010],{"class":47},[631,22507,22509],{"id":22508},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22511,22512],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22514,22515],{},"1．默认构造函数(无参，函数体为空)",[19,22517,22518],{},"2．默认析构函数(无参，函数体为空)",[19,22520,22521],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22523,22524],{},"构造函数调用规则如下：",[3413,22526,22527,22530],{},[331,22528,22529],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[331,22531,22532],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[23,22534,22536],{"className":2422,"code":22535,"language":2424,"meta":28,"style":28},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,22537,22538,22546,22550,22555,22561,22573,22577,22582,22594,22603,22615,22619,22623,22639,22648,22660,22664,22668,22674,22686,22690,22694,22700,22704,22708,22716,22720,22732,22737,22745,22749,22767,22771,22775,22783,22787,22792,22800,22815,22828,22832,22837,22844,22860,22873,22877,22881,22889,22893,22899,22903,22913,22917,22925],{"__ignoreMap":28},[33,22539,22540,22542,22544],{"class":35,"line":36},[33,22541,16934],{"class":39},[33,22543,17807],{"class":43},[33,22545,17810],{"class":47},[33,22547,22548],{"class":35,"line":51},[33,22549,16956],{"class":39},[33,22551,22552],{"class":35,"line":64},[33,22553,22554],{"class":2487},"    \u002F\u002F无参（默认）构造函数\n",[33,22556,22557,22559],{"class":35,"line":76},[33,22558,20757],{"class":43},[33,22560,13096],{"class":47},[33,22562,22563,22565,22567,22569,22571],{"class":35,"line":87},[33,22564,11914],{"class":47},[33,22566,3450],{"class":39},[33,22568,22048],{"class":60},[33,22570,3718],{"class":39},[33,22572,11086],{"class":47},[33,22574,22575],{"class":35,"line":96},[33,22576,4446],{"class":47},[33,22578,22579],{"class":35,"line":103},[33,22580,22581],{"class":2487},"    \u002F\u002F有参构造函数\n",[33,22583,22584,22586,22588,22590,22592],{"class":35,"line":108},[33,22585,20757],{"class":43},[33,22587,133],{"class":47},[33,22589,2436],{"class":39},[33,22591,3672],{"class":289},[33,22593,14682],{"class":47},[33,22595,22596,22599,22601],{"class":35,"line":119},[33,22597,22598],{"class":47},"        age ",[33,22600,57],{"class":39},[33,22602,3706],{"class":47},[33,22604,22605,22607,22609,22611,22613],{"class":35,"line":128},[33,22606,11914],{"class":47},[33,22608,3450],{"class":39},[33,22610,22088],{"class":60},[33,22612,3718],{"class":39},[33,22614,11086],{"class":47},[33,22616,22617],{"class":35,"line":1753},[33,22618,4446],{"class":47},[33,22620,22621],{"class":35,"line":1763},[33,22622,21112],{"class":2487},[33,22624,22625,22627,22629,22631,22633,22635,22637],{"class":35,"line":1775},[33,22626,20757],{"class":43},[33,22628,133],{"class":47},[33,22630,9038],{"class":39},[33,22632,17807],{"class":43},[33,22634,2774],{"class":39},[33,22636,9071],{"class":289},[33,22638,14682],{"class":47},[33,22640,22641,22643,22645],{"class":35,"line":1780},[33,22642,22598],{"class":47},[33,22644,57],{"class":39},[33,22646,22647],{"class":47}," p.age;\n",[33,22649,22650,22652,22654,22656,22658],{"class":35,"line":1785},[33,22651,11914],{"class":47},[33,22653,3450],{"class":39},[33,22655,22129],{"class":60},[33,22657,3718],{"class":39},[33,22659,11086],{"class":47},[33,22661,22662],{"class":35,"line":1940},[33,22663,4446],{"class":47},[33,22665,22666],{"class":35,"line":2183},[33,22667,20785],{"class":2487},[33,22669,22670,22672],{"class":35,"line":2208},[33,22671,20790],{"class":43},[33,22673,13096],{"class":47},[33,22675,22676,22678,22680,22682,22684],{"class":35,"line":2234},[33,22677,11914],{"class":47},[33,22679,3450],{"class":39},[33,22681,22166],{"class":60},[33,22683,3718],{"class":39},[33,22685,11086],{"class":47},[33,22687,22688],{"class":35,"line":2239},[33,22689,4446],{"class":47},[33,22691,22692],{"class":35,"line":2247},[33,22693,16956],{"class":39},[33,22695,22696,22698],{"class":35,"line":2255},[33,22697,4244],{"class":39},[33,22699,10043],{"class":47},[33,22701,22702],{"class":35,"line":3992},[33,22703,6249],{"class":47},[33,22705,22706],{"class":35,"line":4009},[33,22707,100],{"emptyLinePlaceholder":99},[33,22709,22710,22712,22714],{"class":35,"line":4014},[33,22711,7611],{"class":39},[33,22713,7835],{"class":43},[33,22715,4235],{"class":47},[33,22717,22718],{"class":35,"line":4019},[33,22719,3820],{"class":47},[33,22721,22722,22724,22726,22728,22730],{"class":35,"line":4024},[33,22723,21669],{"class":47},[33,22725,9376],{"class":43},[33,22727,133],{"class":47},[33,22729,248],{"class":72},[33,22731,4976],{"class":47},[33,22733,22734],{"class":35,"line":4038},[33,22735,22736],{"class":2487},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[33,22738,22739,22741,22743],{"class":35,"line":4043},[33,22740,21669],{"class":47},[33,22742,9279],{"class":43},[33,22744,19753],{"class":47},[33,22746,22747],{"class":35,"line":4834},[33,22748,100],{"emptyLinePlaceholder":99},[33,22750,22751,22753,22755,22758,22760,22763,22765],{"class":35,"line":4848},[33,22752,8775],{"class":47},[33,22754,3450],{"class":39},[33,22756,22757],{"class":60}," \"p2的年龄为： \"",[33,22759,3718],{"class":39},[33,22761,22762],{"class":47}," p2.age ",[33,22764,3450],{"class":39},[33,22766,11086],{"class":47},[33,22768,22769],{"class":35,"line":4856},[33,22770,1010],{"class":47},[33,22772,22773],{"class":35,"line":4861},[33,22774,100],{"emptyLinePlaceholder":99},[33,22776,22777,22779,22781],{"class":35,"line":4867},[33,22778,7611],{"class":39},[33,22780,7904],{"class":43},[33,22782,4235],{"class":47},[33,22784,22785],{"class":35,"line":4873},[33,22786,3820],{"class":47},[33,22788,22789],{"class":35,"line":4878},[33,22790,22791],{"class":2487},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[33,22793,22794,22797],{"class":35,"line":10194},[33,22795,22796],{"class":47},"    Person p1;",[33,22798,22799],{"class":2487}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[33,22801,22802,22804,22806,22808,22810,22812],{"class":35,"line":10218},[33,22803,21669],{"class":47},[33,22805,9279],{"class":43},[33,22807,133],{"class":47},[33,22809,1279],{"class":72},[33,22811,8212],{"class":47},[33,22813,22814],{"class":2487}," \u002F\u002F用户提供的有参\n",[33,22816,22817,22819,22822,22825],{"class":35,"line":10223},[33,22818,21669],{"class":47},[33,22820,22821],{"class":43},"p3",[33,22823,22824],{"class":47},"(p2);",[33,22826,22827],{"class":2487}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[33,22829,22830],{"class":35,"line":10229},[33,22831,100],{"emptyLinePlaceholder":99},[33,22833,22834],{"class":35,"line":10256},[33,22835,22836],{"class":2487},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[33,22838,22839,22842],{"class":35,"line":10261},[33,22840,22841],{"class":47},"    Person p4;",[33,22843,22799],{"class":2487},[33,22845,22846,22848,22851,22853,22855,22857],{"class":35,"line":10267},[33,22847,21669],{"class":47},[33,22849,22850],{"class":43},"p5",[33,22852,133],{"class":47},[33,22854,1279],{"class":72},[33,22856,8212],{"class":47},[33,22858,22859],{"class":2487}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[33,22861,22862,22864,22867,22870],{"class":35,"line":10279},[33,22863,21669],{"class":47},[33,22865,22866],{"class":43},"p6",[33,22868,22869],{"class":47},"(p5);",[33,22871,22872],{"class":2487}," \u002F\u002F用户自己提供拷贝构造\n",[33,22874,22875],{"class":35,"line":10291},[33,22876,1010],{"class":47},[33,22878,22879],{"class":35,"line":10303},[33,22880,100],{"emptyLinePlaceholder":99},[33,22882,22883,22885,22887],{"class":35,"line":11961},[33,22884,2436],{"class":39},[33,22886,4232],{"class":43},[33,22888,13096],{"class":47},[33,22890,22891],{"class":35,"line":11986},[33,22892,100],{"emptyLinePlaceholder":99},[33,22894,22895,22897],{"class":35,"line":12009},[33,22896,7880],{"class":43},[33,22898,7883],{"class":47},[33,22900,22901],{"class":35,"line":12033},[33,22902,100],{"emptyLinePlaceholder":99},[33,22904,22905,22907,22909,22911],{"class":35,"line":12038},[33,22906,4562],{"class":43},[33,22908,133],{"class":47},[33,22910,4567],{"class":60},[33,22912,4976],{"class":47},[33,22914,22915],{"class":35,"line":12043},[33,22916,100],{"emptyLinePlaceholder":99},[33,22918,22919,22921,22923],{"class":35,"line":12048},[33,22920,90],{"class":39},[33,22922,1437],{"class":72},[33,22924,3567],{"class":47},[33,22926,22927],{"class":35,"line":12057},[33,22928,1010],{"class":47},[631,22930,22932],{"id":22931},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22934,22935],{},"浅拷贝：简单的赋值拷贝操作",[19,22937,22938],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[23,22940,22942],{"className":2422,"code":22941,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[30,22943,22944,22950,22960,22966,22970,22974,22979,22985,22989,23002,23006,23010,23017,23021,23031,23046,23059,23063,23068,23073,23089,23093,23106,23111,23116,23121,23130,23135,23150,23154,23158,23162,23168,23172,23177,23192,23196,23207,23221,23225,23234,23238,23244,23256,23260,23268,23272,23289,23320,23328,23356,23360,23364,23372,23376,23382],{"__ignoreMap":28},[33,22945,22946,22948],{"class":35,"line":36},[33,22947,4209],{"class":39},[33,22949,4212],{"class":60},[33,22951,22952,22954,22956,22958],{"class":35,"line":51},[33,22953,4217],{"class":39},[33,22955,4220],{"class":39},[33,22957,4223],{"class":43},[33,22959,3567],{"class":47},[33,22961,22962,22964],{"class":35,"line":64},[33,22963,16934],{"class":39},[33,22965,17409],{"class":43},[33,22967,22968],{"class":35,"line":76},[33,22969,3820],{"class":47},[33,22971,22972],{"class":35,"line":87},[33,22973,16956],{"class":39},[33,22975,22976],{"class":35,"line":96},[33,22977,22978],{"class":2487},"    \u002F\u002F默认构造函数\n",[33,22980,22981,22983],{"class":35,"line":103},[33,22982,20757],{"class":43},[33,22984,4235],{"class":47},[33,22986,22987],{"class":35,"line":108},[33,22988,4289],{"class":47},[33,22990,22991,22993,22995,22998,23000],{"class":35,"line":119},[33,22992,5706],{"class":47},[33,22994,3450],{"class":39},[33,22996,22997],{"class":60},"\"默认构造函数\"",[33,22999,3450],{"class":39},[33,23001,3472],{"class":47},[33,23003,23004],{"class":35,"line":128},[33,23005,4446],{"class":47},[33,23007,23008],{"class":35,"line":1753},[33,23009,22581],{"class":2487},[33,23011,23012,23014],{"class":35,"line":1763},[33,23013,20790],{"class":43},[33,23015,23016],{"class":47},"(int age,int height)\n",[33,23018,23019],{"class":35,"line":1775},[33,23020,4289],{"class":47},[33,23022,23023,23026,23028],{"class":35,"line":1780},[33,23024,23025],{"class":47},"        m_Age",[33,23027,57],{"class":39},[33,23029,23030],{"class":47},"age;\n",[33,23032,23033,23036,23038,23040,23043],{"class":35,"line":1785},[33,23034,23035],{"class":47},"        m_Height",[33,23037,13958],{"class":39},[33,23039,4641],{"class":39},[33,23041,23042],{"class":47},"(height);",[33,23044,23045],{"class":2487},"\u002F\u002F放到堆区\n",[33,23047,23048,23050,23052,23055,23057],{"class":35,"line":1940},[33,23049,5706],{"class":47},[33,23051,3450],{"class":39},[33,23053,23054],{"class":60},"\"有参构造函数\"",[33,23056,3450],{"class":39},[33,23058,3472],{"class":47},[33,23060,23061],{"class":35,"line":2183},[33,23062,4446],{"class":47},[33,23064,23065],{"class":35,"line":2208},[33,23066,23067],{"class":2487},"    \u002F\u002F深拷贝解决上述问题\n",[33,23069,23070],{"class":35,"line":2234},[33,23071,23072],{"class":2487},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[33,23074,23075,23077,23079,23081,23083,23085,23087],{"class":35,"line":2239},[33,23076,20757],{"class":43},[33,23078,133],{"class":47},[33,23080,9038],{"class":39},[33,23082,17807],{"class":43},[33,23084,12828],{"class":39},[33,23086,19],{"class":289},[33,23088,226],{"class":47},[33,23090,23091],{"class":35,"line":2247},[33,23092,4289],{"class":47},[33,23094,23095,23097,23099,23102,23104],{"class":35,"line":2255},[33,23096,5706],{"class":47},[33,23098,3450],{"class":39},[33,23100,23101],{"class":60},"\"拷贝构造函数\"",[33,23103,3450],{"class":39},[33,23105,3472],{"class":47},[33,23107,23108],{"class":35,"line":3992},[33,23109,23110],{"class":2487},"        \u002F\u002F编译器默认的写如下注释部分\n",[33,23112,23113],{"class":35,"line":4009},[33,23114,23115],{"class":2487},"        \u002F\u002Fm_Age=p.m_Age;\n",[33,23117,23118],{"class":35,"line":4014},[33,23119,23120],{"class":2487},"        \u002F\u002Fm_Height=p.m_Height;\n",[33,23122,23123,23125,23127],{"class":35,"line":4019},[33,23124,23025],{"class":47},[33,23126,57],{"class":39},[33,23128,23129],{"class":47},"p.m_Age;\n",[33,23131,23132],{"class":35,"line":4024},[33,23133,23134],{"class":2487},"        \u002F\u002F深拷贝操作\n",[33,23136,23137,23139,23141,23143,23145,23147],{"class":35,"line":4038},[33,23138,23035],{"class":47},[33,23140,13958],{"class":39},[33,23142,4641],{"class":39},[33,23144,133],{"class":47},[33,23146,657],{"class":39},[33,23148,23149],{"class":47},"p.m_Height);\n",[33,23151,23152],{"class":35,"line":4043},[33,23153,4446],{"class":47},[33,23155,23156],{"class":35,"line":4834},[33,23157,100],{"emptyLinePlaceholder":99},[33,23159,23160],{"class":35,"line":4848},[33,23161,20785],{"class":2487},[33,23163,23164,23166],{"class":35,"line":4856},[33,23165,20790],{"class":43},[33,23167,4235],{"class":47},[33,23169,23170],{"class":35,"line":4861},[33,23171,4289],{"class":47},[33,23173,23174],{"class":35,"line":4867},[33,23175,23176],{"class":2487},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[33,23178,23179,23181,23184,23187,23190],{"class":35,"line":4873},[33,23180,2130],{"class":39},[33,23182,23183],{"class":47},"(m_Height ",[33,23185,23186],{"class":39},"!=",[33,23188,23189],{"class":72}," NULL",[33,23191,226],{"class":47},[33,23193,23194],{"class":35,"line":4878},[33,23195,4767],{"class":47},[33,23197,23198,23201,23204],{"class":35,"line":10194},[33,23199,23200],{"class":39},"            delete",[33,23202,23203],{"class":47}," m_Height;",[33,23205,23206],{"class":2487}," \u002F\u002F释放堆区内存\n",[33,23208,23209,23212,23214,23216,23218],{"class":35,"line":10218},[33,23210,23211],{"class":47},"            m_Height",[33,23213,57],{"class":39},[33,23215,4651],{"class":72},[33,23217,2484],{"class":47},[33,23219,23220],{"class":2487}," \u002F\u002F防止野指针\n",[33,23222,23223],{"class":35,"line":10223},[33,23224,4786],{"class":47},[33,23226,23227,23229,23231],{"class":35,"line":10229},[33,23228,5706],{"class":47},[33,23230,3450],{"class":39},[33,23232,23233],{"class":60},"\"Person的析构函数调用\"\n",[33,23235,23236],{"class":35,"line":10256},[33,23237,4446],{"class":47},[33,23239,23240,23242],{"class":35,"line":10261},[33,23241,4244],{"class":39},[33,23243,17904],{"class":47},[33,23245,23246,23248,23250,23253],{"class":35,"line":10267},[33,23247,4244],{"class":39},[33,23249,8764],{"class":39},[33,23251,23252],{"class":47},"m_Height;",[33,23254,23255],{"class":2487}," \u002F\u002F定义一个指针，指向身高\n",[33,23257,23258],{"class":35,"line":10279},[33,23259,6249],{"class":47},[33,23261,23262,23264,23266],{"class":35,"line":10291},[33,23263,7611],{"class":39},[33,23265,7835],{"class":43},[33,23267,4235],{"class":47},[33,23269,23270],{"class":35,"line":10303},[33,23271,3820],{"class":47},[33,23273,23274,23276,23278,23280,23282,23284,23287],{"class":35,"line":11961},[33,23275,21669],{"class":47},[33,23277,9376],{"class":43},[33,23279,133],{"class":47},[33,23281,248],{"class":72},[33,23283,2799],{"class":47},[33,23285,23286],{"class":72},"160",[33,23288,4976],{"class":47},[33,23290,23291,23293,23295,23298,23300,23303,23305,23308,23310,23313,23315,23317],{"class":35,"line":11986},[33,23292,3825],{"class":47},[33,23294,3450],{"class":39},[33,23296,23297],{"class":60},"\"p1的年龄为:\"",[33,23299,3450],{"class":39},[33,23301,23302],{"class":47},"p1.m_Age",[33,23304,3450],{"class":39},[33,23306,23307],{"class":60},"\"身高为：\"",[33,23309,8665],{"class":39},[33,23311,23312],{"class":47},"p1.m_Height",[33,23314,3450],{"class":39},[33,23316,3515],{"class":47},[33,23318,23319],{"class":2487},"  \u002F\u002F18\n",[33,23321,23322,23324,23326],{"class":35,"line":12009},[33,23323,21669],{"class":47},[33,23325,9279],{"class":43},[33,23327,19753],{"class":47},[33,23329,23330,23332,23334,23337,23339,23341,23343,23345,23347,23350,23352,23354],{"class":35,"line":12033},[33,23331,3825],{"class":47},[33,23333,3450],{"class":39},[33,23335,23336],{"class":60},"\"p2的年龄为：\"",[33,23338,3450],{"class":39},[33,23340,21699],{"class":47},[33,23342,3450],{"class":39},[33,23344,23307],{"class":60},[33,23346,8665],{"class":39},[33,23348,23349],{"class":47},"p2.m_Height",[33,23351,3450],{"class":39},[33,23353,3515],{"class":47},[33,23355,23319],{"class":2487},[33,23357,23358],{"class":35,"line":12038},[33,23359,15450],{"class":47},[33,23361,23362],{"class":35,"line":12043},[33,23363,1010],{"class":47},[33,23365,23366,23368,23370],{"class":35,"line":12048},[33,23367,2436],{"class":39},[33,23369,4232],{"class":43},[33,23371,4235],{"class":47},[33,23373,23374],{"class":35,"line":12057},[33,23375,3820],{"class":47},[33,23377,23378,23380],{"class":35,"line":12062},[33,23379,7880],{"class":43},[33,23381,7883],{"class":47},[33,23383,23384],{"class":35,"line":12068},[33,23385,1010],{"class":47},[19,23387,23388],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23390,23391],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23393,23394],{},[3736,23395],{"alt":28,"src":23396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23398,23399],{},"浅拷贝问题要使用深拷贝来解决",[19,23401,23402],{},[3736,23403],{"alt":28,"src":23404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23406,23407],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[631,23409,23411],{"id":23410},"_826初始化列表","8.2.6初始化列表",[19,23413,23414],{},"作用：初始化属性",[19,23416,7430],{},[23,23418,23421],{"className":23419,"code":23420,"language":7436},[7434],"构造函数():属性1(值1),属性2(值2).....{}\n",[30,23422,23420],{"__ignoreMap":28},[19,23424,23425],{},"例子",[23,23427,23429],{"className":2422,"code":23428,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[30,23430,23431,23437,23447,23453,23457,23462,23466,23471,23476,23481,23486,23491,23496,23500,23505,23510,23553,23562,23580,23598,23616,23620,23624,23631,23638,23645,23649,23653,23661,23665,23669,23689,23698,23702,23706,23716,23720,23728],{"__ignoreMap":28},[33,23432,23433,23435],{"class":35,"line":36},[33,23434,4209],{"class":39},[33,23436,4212],{"class":60},[33,23438,23439,23441,23443,23445],{"class":35,"line":51},[33,23440,4217],{"class":39},[33,23442,4220],{"class":39},[33,23444,4223],{"class":43},[33,23446,3567],{"class":47},[33,23448,23449,23451],{"class":35,"line":64},[33,23450,16934],{"class":39},[33,23452,17409],{"class":43},[33,23454,23455],{"class":35,"line":76},[33,23456,3820],{"class":47},[33,23458,23459],{"class":35,"line":87},[33,23460,23461],{"class":39},"    public:\n",[33,23463,23464],{"class":35,"line":96},[33,23465,100],{"emptyLinePlaceholder":99},[33,23467,23468],{"class":35,"line":103},[33,23469,23470],{"class":2487},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[33,23472,23473],{"class":35,"line":108},[33,23474,23475],{"class":2487},"    \u002F\u002FPerson(int a, int b, int c) {\n",[33,23477,23478],{"class":35,"line":119},[33,23479,23480],{"class":2487},"    \u002F\u002F  m_A = a;\n",[33,23482,23483],{"class":35,"line":128},[33,23484,23485],{"class":2487},"    \u002F\u002F  m_B = b;\n",[33,23487,23488],{"class":35,"line":1753},[33,23489,23490],{"class":2487},"    \u002F\u002F  m_C = c;\n",[33,23492,23493],{"class":35,"line":1763},[33,23494,23495],{"class":2487},"    \u002F\u002F}\n",[33,23497,23498],{"class":35,"line":1775},[33,23499,100],{"emptyLinePlaceholder":99},[33,23501,23502],{"class":35,"line":1780},[33,23503,23504],{"class":2487},"    \u002F\u002F初始化列表方式初始化\n",[33,23506,23507],{"class":35,"line":1785},[33,23508,23509],{"class":2487},"    \u002F\u002F使用有参构造函数\n",[33,23511,23512,23514,23516,23518,23520,23522,23524,23526,23528,23530,23532,23535,23538,23541,23544,23547,23550],{"class":35,"line":1940},[33,23513,20757],{"class":43},[33,23515,133],{"class":47},[33,23517,2436],{"class":39},[33,23519,3672],{"class":289},[33,23521,245],{"class":47},[33,23523,2436],{"class":39},[33,23525,5090],{"class":289},[33,23527,245],{"class":47},[33,23529,2436],{"class":39},[33,23531,5106],{"class":289},[33,23533,23534],{"class":47},") :",[33,23536,23537],{"class":43},"m_A",[33,23539,23540],{"class":47},"(a), ",[33,23542,23543],{"class":43},"m_B",[33,23545,23546],{"class":47},"(b), ",[33,23548,23549],{"class":43},"m_C",[33,23551,23552],{"class":47},"(c) {}\n",[33,23554,23555,23557,23560],{"class":35,"line":2183},[33,23556,17147],{"class":39},[33,23558,23559],{"class":43}," PrintPerson",[33,23561,13096],{"class":47},[33,23563,23564,23566,23568,23571,23573,23576,23578],{"class":35,"line":2208},[33,23565,11914],{"class":47},[33,23567,3450],{"class":39},[33,23569,23570],{"class":60}," \"mA:\"",[33,23572,3718],{"class":39},[33,23574,23575],{"class":47}," m_A ",[33,23577,3450],{"class":39},[33,23579,11086],{"class":47},[33,23581,23582,23584,23586,23589,23591,23594,23596],{"class":35,"line":2234},[33,23583,11914],{"class":47},[33,23585,3450],{"class":39},[33,23587,23588],{"class":60}," \"mB:\"",[33,23590,3718],{"class":39},[33,23592,23593],{"class":47}," m_B ",[33,23595,3450],{"class":39},[33,23597,11086],{"class":47},[33,23599,23600,23602,23604,23607,23609,23612,23614],{"class":35,"line":2239},[33,23601,11914],{"class":47},[33,23603,3450],{"class":39},[33,23605,23606],{"class":60}," \"mC:\"",[33,23608,3718],{"class":39},[33,23610,23611],{"class":47}," m_C ",[33,23613,3450],{"class":39},[33,23615,11086],{"class":47},[33,23617,23618],{"class":35,"line":2247},[33,23619,4446],{"class":47},[33,23621,23622],{"class":35,"line":2255},[33,23623,17460],{"class":39},[33,23625,23626,23628],{"class":35,"line":3992},[33,23627,4244],{"class":39},[33,23629,23630],{"class":47}," m_A;\n",[33,23632,23633,23635],{"class":35,"line":4009},[33,23634,4244],{"class":39},[33,23636,23637],{"class":47}," m_B;\n",[33,23639,23640,23642],{"class":35,"line":4014},[33,23641,4244],{"class":39},[33,23643,23644],{"class":47}," m_C;\n",[33,23646,23647],{"class":35,"line":4019},[33,23648,6249],{"class":47},[33,23650,23651],{"class":35,"line":4024},[33,23652,100],{"emptyLinePlaceholder":99},[33,23654,23655,23657,23659],{"class":35,"line":4038},[33,23656,2436],{"class":39},[33,23658,4232],{"class":43},[33,23660,8224],{"class":47},[33,23662,23663],{"class":35,"line":4043},[33,23664,3820],{"class":47},[33,23666,23667],{"class":35,"line":4834},[33,23668,100],{"emptyLinePlaceholder":99},[33,23670,23671,23673,23675,23677,23679,23681,23683,23685,23687],{"class":35,"line":4848},[33,23672,21669],{"class":47},[33,23674,19],{"class":43},[33,23676,133],{"class":47},[33,23678,720],{"class":72},[33,23680,245],{"class":47},[33,23682,725],{"class":72},[33,23684,245],{"class":47},[33,23686,730],{"class":72},[33,23688,4976],{"class":47},[33,23690,23691,23693,23696],{"class":35,"line":4856},[33,23692,18104],{"class":47},[33,23694,23695],{"class":43},"PrintPerson",[33,23697,7883],{"class":47},[33,23699,23700],{"class":35,"line":4861},[33,23701,100],{"emptyLinePlaceholder":99},[33,23703,23704],{"class":35,"line":4867},[33,23705,100],{"emptyLinePlaceholder":99},[33,23707,23708,23710,23712,23714],{"class":35,"line":4873},[33,23709,4562],{"class":43},[33,23711,133],{"class":47},[33,23713,4567],{"class":60},[33,23715,4976],{"class":47},[33,23717,23718],{"class":35,"line":4878},[33,23719,100],{"emptyLinePlaceholder":99},[33,23721,23722,23724,23726],{"class":35,"line":10194},[33,23723,90],{"class":39},[33,23725,1437],{"class":72},[33,23727,3567],{"class":47},[33,23729,23730],{"class":35,"line":10218},[33,23731,1010],{"class":47},[19,23733,23734,23735,23738,23739],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2575,23736,23737],{},"参数名就是定义的对象属性","，",[2575,23740,23741],{},"属性后面的值为有参构造函数的形参",[23,23743,23745],{"className":2422,"code":23744,"language":2424,"meta":28,"style":28},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[30,23746,23747],{"__ignoreMap":28},[33,23748,23749,23751,23753,23755,23758,23760,23763,23765,23768,23770,23773,23775,23778,23780],{"class":35,"line":36},[33,23750,21284],{"class":43},[33,23752,133],{"class":47},[33,23754,2436],{"class":39},[33,23756,23757],{"class":47}," a.",[33,23759,2436],{"class":39},[33,23761,23762],{"class":47}," b,",[33,23764,2436],{"class":39},[33,23766,23767],{"class":47}," b):",[33,23769,23537],{"class":43},[33,23771,23772],{"class":47},"(a),",[33,23774,23543],{"class":43},[33,23776,23777],{"class":47},"(c),",[33,23779,23549],{"class":43},[33,23781,23782],{"class":47},"(b) {}\n",[631,23784,23786],{"id":23785},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23788,23789],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23791,16873],{},[23,23793,23795],{"className":2422,"code":23794,"language":2424,"meta":28,"style":28},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[30,23796,23797,23802,23807,23811,23816,23820],{"__ignoreMap":28},[33,23798,23799],{"class":35,"line":36},[33,23800,23801],{"class":47},"A{};\n",[33,23803,23804],{"class":35,"line":51},[33,23805,23806],{"class":47},"B\n",[33,23808,23809],{"class":35,"line":64},[33,23810,3820],{"class":47},[33,23812,23813],{"class":35,"line":76},[33,23814,23815],{"class":47},"    A a;\n",[33,23817,23818],{"class":35,"line":87},[33,23819,1010],{"class":47},[33,23821,23822],{"class":35,"line":96},[33,23823,23824],{"class":2487},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23826,23827],{},"案例",[23,23829,23831],{"className":2422,"code":23830,"language":2424,"meta":28,"style":28},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[30,23832,23833,23838,23845,23849,23854,23859,23873,23877,23887,23898,23902,23909,23913,23926,23930,23935,23940,23944,23950,23954,23958,23962,23993,23997,24008,24012,24018,24022,24035,24039,24043,24047,24052,24057,24061,24069,24073,24090,24109,24113,24121,24125,24131],{"__ignoreMap":28},[33,23834,23835],{"class":35,"line":36},[33,23836,23837],{"class":2487},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[33,23839,23840,23842],{"class":35,"line":51},[33,23841,16934],{"class":39},[33,23843,23844],{"class":43}," Phone\n",[33,23846,23847],{"class":35,"line":64},[33,23848,3820],{"class":47},[33,23850,23851],{"class":35,"line":76},[33,23852,23853],{"class":47},"public：\n",[33,23855,23856],{"class":35,"line":87},[33,23857,23858],{"class":2487},"    \u002F\u002F 赋值(构造函数)\n",[33,23860,23861,23864,23866,23868,23871],{"class":35,"line":96},[33,23862,23863],{"class":43},"    Phone",[33,23865,133],{"class":47},[33,23867,17155],{"class":43},[33,23869,23870],{"class":289}," pName",[33,23872,226],{"class":47},[33,23874,23875],{"class":35,"line":103},[33,23876,4289],{"class":47},[33,23878,23879,23882,23884],{"class":35,"line":108},[33,23880,23881],{"class":47},"        m_pName",[33,23883,57],{"class":39},[33,23885,23886],{"class":47},"pName;\n",[33,23888,23889,23891,23893,23896],{"class":35,"line":119},[33,23890,5706],{"class":47},[33,23892,3450],{"class":39},[33,23894,23895],{"class":60},"\"Phone的构造函数调用\"",[33,23897,3567],{"class":47},[33,23899,23900],{"class":35,"line":128},[33,23901,4446],{"class":47},[33,23903,23904,23907],{"class":35,"line":1753},[33,23905,23906],{"class":43},"    ~Phone",[33,23908,4235],{"class":47},[33,23910,23911],{"class":35,"line":1763},[33,23912,4289],{"class":47},[33,23914,23915,23917,23919,23922,23924],{"class":35,"line":1775},[33,23916,5706],{"class":47},[33,23918,3450],{"class":39},[33,23920,23921],{"class":60},"\"Phone析构函数调用\"",[33,23923,3450],{"class":39},[33,23925,3472],{"class":47},[33,23927,23928],{"class":35,"line":1780},[33,23929,4446],{"class":47},[33,23931,23932],{"class":35,"line":1785},[33,23933,23934],{"class":2487},"    \u002F\u002F\n",[33,23936,23937],{"class":35,"line":1940},[33,23938,23939],{"class":47},"    string m_PName;\n",[33,23941,23942],{"class":35,"line":2183},[33,23943,6249],{"class":47},[33,23945,23946,23948],{"class":35,"line":2208},[33,23947,16934],{"class":39},[33,23949,17409],{"class":43},[33,23951,23952],{"class":35,"line":2234},[33,23953,3820],{"class":47},[33,23955,23956],{"class":35,"line":2239},[33,23957,16956],{"class":39},[33,23959,23960],{"class":35,"line":2247},[33,23961,19232],{"class":2487},[33,23963,23964,23966,23968,23970,23972,23974,23976,23979,23982,23984,23987,23990],{"class":35,"line":2255},[33,23965,20757],{"class":43},[33,23967,133],{"class":47},[33,23969,17155],{"class":43},[33,23971,17158],{"class":289},[33,23973,2799],{"class":47},[33,23975,17155],{"class":43},[33,23977,23978],{"class":289}," pname",[33,23980,23981],{"class":47},"):",[33,23983,17248],{"class":43},[33,23985,23986],{"class":47},"(name),m_phone.",[33,23988,23989],{"class":43},"m_PName",[33,23991,23992],{"class":47},"(pname) \n",[33,23994,23995],{"class":35,"line":3992},[33,23996,4289],{"class":47},[33,23998,23999,24001,24003,24006],{"class":35,"line":4009},[33,24000,5706],{"class":47},[33,24002,3450],{"class":39},[33,24004,24005],{"class":60},"\"Person的构造函数调用\"",[33,24007,3567],{"class":47},[33,24009,24010],{"class":35,"line":4014},[33,24011,4446],{"class":47},[33,24013,24014,24016],{"class":35,"line":4019},[33,24015,20790],{"class":43},[33,24017,4235],{"class":47},[33,24019,24020],{"class":35,"line":4024},[33,24021,4289],{"class":47},[33,24023,24024,24026,24028,24031,24033],{"class":35,"line":4038},[33,24025,5706],{"class":47},[33,24027,3450],{"class":39},[33,24029,24030],{"class":60},"\"Person析构函数调用\"",[33,24032,3450],{"class":39},[33,24034,3472],{"class":47},[33,24036,24037],{"class":35,"line":4043},[33,24038,4446],{"class":47},[33,24040,24041],{"class":35,"line":4834},[33,24042,10026],{"class":2487},[33,24044,24045],{"class":35,"line":4848},[33,24046,17130],{"class":47},[33,24048,24049],{"class":35,"line":4856},[33,24050,24051],{"class":2487},"    \u002F\u002F手机\n",[33,24053,24054],{"class":35,"line":4861},[33,24055,24056],{"class":47},"    Phone m_Phone;\n",[33,24058,24059],{"class":35,"line":4867},[33,24060,6249],{"class":47},[33,24062,24063,24065,24067],{"class":35,"line":4873},[33,24064,7611],{"class":39},[33,24066,7835],{"class":43},[33,24068,4235],{"class":47},[33,24070,24071],{"class":35,"line":4878},[33,24072,3820],{"class":47},[33,24074,24075,24077,24079,24081,24083,24085,24088],{"class":35,"line":10194},[33,24076,21669],{"class":47},[33,24078,19],{"class":43},[33,24080,133],{"class":47},[33,24082,10162],{"class":60},[33,24084,2799],{"class":47},[33,24086,24087],{"class":60},"\"安卓\"",[33,24089,4976],{"class":47},[33,24091,24092,24094,24096,24099,24101,24104,24106],{"class":35,"line":10218},[33,24093,3825],{"class":47},[33,24095,3450],{"class":39},[33,24097,24098],{"class":47},"p.Name",[33,24100,3450],{"class":39},[33,24102,24103],{"class":60},"\"拿着：\"",[33,24105,3450],{"class":39},[33,24107,24108],{"class":47},"p.m_phone.m_PName;\n",[33,24110,24111],{"class":35,"line":10223},[33,24112,1010],{"class":47},[33,24114,24115,24117,24119],{"class":35,"line":10229},[33,24116,2436],{"class":39},[33,24118,4232],{"class":43},[33,24120,4235],{"class":47},[33,24122,24123],{"class":35,"line":10256},[33,24124,3820],{"class":47},[33,24126,24127,24129],{"class":35,"line":10261},[33,24128,7880],{"class":43},[33,24130,7883],{"class":47},[33,24132,24133],{"class":35,"line":10267},[33,24134,1010],{"class":47},[19,24136,11271],{},[23,24138,24140],{"className":2422,"code":24139,"language":2424,"meta":28,"style":28},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[30,24141,24142,24147],{"__ignoreMap":28},[33,24143,24144],{"class":35,"line":36},[33,24145,24146],{"class":2487},"    \u002F\u002F不需要写这个：\n",[33,24148,24149],{"class":35,"line":51},[33,24150,24151],{"class":2487},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,24153,24154],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[23,24156,24158],{"className":2422,"code":24157,"language":2424,"meta":28,"style":28},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[30,24159,24160],{"__ignoreMap":28},[33,24161,24162,24164,24167,24169,24172,24175],{"class":35,"line":36},[33,24163,21284],{"class":43},[33,24165,24166],{"class":47},"(string name.string pname):",[33,24168,17248],{"class":43},[33,24170,24171],{"class":47},"(name),",[33,24173,24174],{"class":43},"m_phone",[33,24176,24177],{"class":47},"(pname) {}\n",[19,24179,24180,24181,57,24184],{},"采用的是隐式转换法，实际为如下：\n",[30,24182,24183],{},"m_phone(pname)",[30,24185,24186],{},"Phone m_phone=pname",[19,24188,24189,24192],{},[2575,24190,24191],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,24194,24195],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[631,24197,24199],{"id":24198},"_828静态对象","8.2.8静态对象",[19,24201,24202],{},"静态对象在成员对象前static，称为静态对象",[19,24204,24205],{},"静态对象分为两类：",[328,24207,24208],{},[331,24209,24210],{},"静态成员变量",[3413,24212,24213,24216,24219],{},[331,24214,24215],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[331,24217,24218],{},"②在编译阶段分配内存",[331,24220,24221],{},"③类内声明，类外初始化",[328,24223,24224],{"start":51},[331,24225,24226],{},"静态成员函数",[3413,24228,24229,24232],{},[331,24230,24231],{},"①所有对象共享同一个函数",[331,24233,24234],{},"②静态成员函数只能访问静态成员变量",[24236,24237,24239],"h4",{"id":24238},"_8281静态成员变量","8.2.8.1静态成员变量",[23,24241,24243],{"className":2422,"code":24242,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[30,24244,24245,24251,24261,24267,24271,24275,24280,24285,24290,24298,24302,24306,24310,24318,24322,24326,24331,24344,24348,24356,24360,24366],{"__ignoreMap":28},[33,24246,24247,24249],{"class":35,"line":36},[33,24248,4209],{"class":39},[33,24250,4212],{"class":60},[33,24252,24253,24255,24257,24259],{"class":35,"line":51},[33,24254,4217],{"class":39},[33,24256,4220],{"class":39},[33,24258,4223],{"class":43},[33,24260,3567],{"class":47},[33,24262,24263,24265],{"class":35,"line":64},[33,24264,16934],{"class":39},[33,24266,17409],{"class":43},[33,24268,24269],{"class":35,"line":76},[33,24270,3820],{"class":47},[33,24272,24273],{"class":35,"line":87},[33,24274,16956],{"class":39},[33,24276,24277],{"class":35,"line":96},[33,24278,24279],{"class":2487},"    \u002F\u002F非静态成员变量\n",[33,24281,24282],{"class":35,"line":103},[33,24283,24284],{"class":2487},"    \u002F\u002F int m_A;\n",[33,24286,24287],{"class":35,"line":108},[33,24288,24289],{"class":2487},"    \u002F\u002F定义静态成员变量\n",[33,24291,24292,24294,24296],{"class":35,"line":119},[33,24293,13261],{"class":39},[33,24295,4641],{"class":39},[33,24297,23630],{"class":47},[33,24299,24300],{"class":35,"line":128},[33,24301,100],{"emptyLinePlaceholder":99},[33,24303,24304],{"class":35,"line":1753},[33,24305,100],{"emptyLinePlaceholder":99},[33,24307,24308],{"class":35,"line":1763},[33,24309,6249],{"class":47},[33,24311,24312,24314,24316],{"class":35,"line":1775},[33,24313,7611],{"class":39},[33,24315,7835],{"class":43},[33,24317,4235],{"class":47},[33,24319,24320],{"class":35,"line":1780},[33,24321,3820],{"class":47},[33,24323,24324],{"class":35,"line":1785},[33,24325,17551],{"class":47},[33,24327,24328],{"class":35,"line":1940},[33,24329,24330],{"class":2487},"    \u002F\u002F输出类成员变量这块内存\n",[33,24332,24333,24335,24337,24340,24342],{"class":35,"line":2183},[33,24334,3825],{"class":47},[33,24336,3450],{"class":39},[33,24338,24339],{"class":47},"p.m_A",[33,24341,3450],{"class":39},[33,24343,3472],{"class":47},[33,24345,24346],{"class":35,"line":2208},[33,24347,1010],{"class":47},[33,24349,24350,24352,24354],{"class":35,"line":2234},[33,24351,2436],{"class":39},[33,24353,4232],{"class":43},[33,24355,4235],{"class":47},[33,24357,24358],{"class":35,"line":2239},[33,24359,3820],{"class":47},[33,24361,24362,24364],{"class":35,"line":2247},[33,24363,7880],{"class":43},[33,24365,4235],{"class":47},[33,24367,24368],{"class":35,"line":2255},[33,24369,1010],{"class":47},[19,24371,24372],{},"此时输出是报错的：无法解析外部命令",[19,24374,24375],{},"解决这一问题：必须用到类内声明，类外初始化操作",[23,24377,24379],{"className":2422,"code":24378,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[30,24380,24381,24387,24397,24403,24407,24411,24416,24424,24428,24433,24448,24456,24460,24464,24469,24474,24486,24491,24502,24507,24512,24525,24529,24537,24541,24547],{"__ignoreMap":28},[33,24382,24383,24385],{"class":35,"line":36},[33,24384,4209],{"class":39},[33,24386,4212],{"class":60},[33,24388,24389,24391,24393,24395],{"class":35,"line":51},[33,24390,4217],{"class":39},[33,24392,4220],{"class":39},[33,24394,4223],{"class":43},[33,24396,3567],{"class":47},[33,24398,24399,24401],{"class":35,"line":64},[33,24400,16934],{"class":39},[33,24402,17409],{"class":43},[33,24404,24405],{"class":35,"line":76},[33,24406,3820],{"class":47},[33,24408,24409],{"class":35,"line":87},[33,24410,16956],{"class":39},[33,24412,24413],{"class":35,"line":96},[33,24414,24415],{"class":2487},"    \u002F\u002F类内声明\n",[33,24417,24418,24420,24422],{"class":35,"line":103},[33,24419,13261],{"class":39},[33,24421,4641],{"class":39},[33,24423,23630],{"class":47},[33,24425,24426],{"class":35,"line":108},[33,24427,6249],{"class":47},[33,24429,24430],{"class":35,"line":119},[33,24431,24432],{"class":2487},"\u002F\u002F类外初始化\n",[33,24434,24435,24437,24439,24442,24444,24446],{"class":35,"line":128},[33,24436,2436],{"class":39},[33,24438,17807],{"class":43},[33,24440,24441],{"class":47},"::m_A",[33,24443,57],{"class":39},[33,24445,1279],{"class":72},[33,24447,3567],{"class":47},[33,24449,24450,24452,24454],{"class":35,"line":1753},[33,24451,7611],{"class":39},[33,24453,7835],{"class":43},[33,24455,4235],{"class":47},[33,24457,24458],{"class":35,"line":1763},[33,24459,3820],{"class":47},[33,24461,24462],{"class":35,"line":1775},[33,24463,17551],{"class":47},[33,24465,24466],{"class":35,"line":1780},[33,24467,24468],{"class":2487},"    \u002F\u002F访问变量的原内存空间\n",[33,24470,24471],{"class":35,"line":1785},[33,24472,24473],{"class":2487},"    \u002F\u002F100\n",[33,24475,24476,24478,24480,24482,24484],{"class":35,"line":1940},[33,24477,3825],{"class":47},[33,24479,3450],{"class":39},[33,24481,24339],{"class":47},[33,24483,3450],{"class":39},[33,24485,3472],{"class":47},[33,24487,24488],{"class":35,"line":2183},[33,24489,24490],{"class":47},"    Person p2;\n",[33,24492,24493,24496,24498,24500],{"class":35,"line":2208},[33,24494,24495],{"class":47},"    p2.m_A",[33,24497,57],{"class":39},[33,24499,3983],{"class":72},[33,24501,3567],{"class":47},[33,24503,24504],{"class":35,"line":2234},[33,24505,24506],{"class":2487},"    \u002F\u002F继续访问这片空间\n",[33,24508,24509],{"class":35,"line":2239},[33,24510,24511],{"class":2487},"    \u002F\u002F200\n",[33,24513,24514,24516,24518,24521,24523],{"class":35,"line":2247},[33,24515,3825],{"class":47},[33,24517,3450],{"class":39},[33,24519,24520],{"class":47},"p2.m_A",[33,24522,3450],{"class":39},[33,24524,3472],{"class":47},[33,24526,24527],{"class":35,"line":2255},[33,24528,1010],{"class":47},[33,24530,24531,24533,24535],{"class":35,"line":3992},[33,24532,2436],{"class":39},[33,24534,4232],{"class":43},[33,24536,4235],{"class":47},[33,24538,24539],{"class":35,"line":4009},[33,24540,3820],{"class":47},[33,24542,24543,24545],{"class":35,"line":4014},[33,24544,7880],{"class":43},[33,24546,7883],{"class":47},[33,24548,24549],{"class":35,"line":4019},[33,24550,1010],{"class":47},[19,24552,24553],{},[2575,24554,24555],{},"静态变量的访问",[23,24557,24559],{"className":2422,"code":24558,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[30,24560,24561,24567,24577,24583,24587,24591,24595,24603,24607,24612,24620,24624,24628,24642,24657,24665,24669,24674,24679,24684,24689,24701,24706,24711,24725,24742,24746,24754,24758,24764],{"__ignoreMap":28},[33,24562,24563,24565],{"class":35,"line":36},[33,24564,4209],{"class":39},[33,24566,4212],{"class":60},[33,24568,24569,24571,24573,24575],{"class":35,"line":51},[33,24570,4217],{"class":39},[33,24572,4220],{"class":39},[33,24574,4223],{"class":43},[33,24576,3567],{"class":47},[33,24578,24579,24581],{"class":35,"line":64},[33,24580,16934],{"class":39},[33,24582,17409],{"class":43},[33,24584,24585],{"class":35,"line":76},[33,24586,3820],{"class":47},[33,24588,24589],{"class":35,"line":87},[33,24590,16956],{"class":39},[33,24592,24593],{"class":35,"line":96},[33,24594,24415],{"class":2487},[33,24596,24597,24599,24601],{"class":35,"line":103},[33,24598,13261],{"class":39},[33,24600,4641],{"class":39},[33,24602,23630],{"class":47},[33,24604,24605],{"class":35,"line":108},[33,24606,17460],{"class":39},[33,24608,24609],{"class":35,"line":119},[33,24610,24611],{"class":2487},"    \u002F\u002F静态成员变量也是有访问权限的\n",[33,24613,24614,24616,24618],{"class":35,"line":128},[33,24615,13261],{"class":39},[33,24617,4641],{"class":39},[33,24619,23637],{"class":47},[33,24621,24622],{"class":35,"line":1753},[33,24623,6249],{"class":47},[33,24625,24626],{"class":35,"line":1763},[33,24627,24432],{"class":2487},[33,24629,24630,24632,24634,24636,24638,24640],{"class":35,"line":1775},[33,24631,2436],{"class":39},[33,24633,17807],{"class":43},[33,24635,24441],{"class":47},[33,24637,57],{"class":39},[33,24639,1279],{"class":72},[33,24641,3567],{"class":47},[33,24643,24644,24646,24648,24651,24653,24655],{"class":35,"line":1780},[33,24645,2436],{"class":39},[33,24647,17807],{"class":43},[33,24649,24650],{"class":47},"::m_B",[33,24652,57],{"class":39},[33,24654,1284],{"class":72},[33,24656,3567],{"class":47},[33,24658,24659,24661,24663],{"class":35,"line":1785},[33,24660,7611],{"class":39},[33,24662,7904],{"class":43},[33,24664,4235],{"class":47},[33,24666,24667],{"class":35,"line":1940},[33,24668,3820],{"class":47},[33,24670,24671],{"class":35,"line":2183},[33,24672,24673],{"class":2487},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[33,24675,24676],{"class":35,"line":2208},[33,24677,24678],{"class":2487},"    \u002F\u002F静态成员变量有两种访问方式：\n",[33,24680,24681],{"class":35,"line":2234},[33,24682,24683],{"class":2487},"    \u002F\u002F1.通过对象进行访问\n",[33,24685,24686],{"class":35,"line":2239},[33,24687,24688],{"class":47},"    Person p;  \n",[33,24690,24691,24693,24695,24697,24699],{"class":35,"line":2247},[33,24692,3825],{"class":47},[33,24694,3450],{"class":39},[33,24696,24339],{"class":47},[33,24698,3450],{"class":39},[33,24700,3472],{"class":47},[33,24702,24703],{"class":35,"line":2255},[33,24704,24705],{"class":2487},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[33,24707,24708],{"class":35,"line":3992},[33,24709,24710],{"class":2487},"    \u002F\u002F2.通过类名进行访问\n",[33,24712,24713,24715,24717,24719,24721,24723],{"class":35,"line":4009},[33,24714,3825],{"class":47},[33,24716,3450],{"class":39},[33,24718,21284],{"class":43},[33,24720,24441],{"class":47},[33,24722,3450],{"class":39},[33,24724,3472],{"class":47},[33,24726,24727,24729,24731,24733,24735,24737,24739],{"class":35,"line":4014},[33,24728,3825],{"class":47},[33,24730,3450],{"class":39},[33,24732,21284],{"class":43},[33,24734,24650],{"class":47},[33,24736,3450],{"class":39},[33,24738,3515],{"class":47},[33,24740,24741],{"class":2487}," \u002F\u002F没有访问权限，报错\n",[33,24743,24744],{"class":35,"line":4019},[33,24745,1010],{"class":47},[33,24747,24748,24750,24752],{"class":35,"line":4024},[33,24749,2436],{"class":39},[33,24751,4232],{"class":43},[33,24753,4235],{"class":47},[33,24755,24756],{"class":35,"line":4038},[33,24757,3820],{"class":47},[33,24759,24760,24762],{"class":35,"line":4043},[33,24761,7949],{"class":43},[33,24763,7883],{"class":47},[33,24765,24766],{"class":35,"line":4834},[33,24767,1010],{"class":47},[24236,24769,24771],{"id":24770},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24773,24774],{},"1.静态成员函数定义与访问",[23,24776,24778],{"className":2422,"code":24777,"language":2424,"meta":28,"style":28},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[30,24779,24780,24786,24790,24794,24799,24810,24814,24828,24832,24836,24844,24848,24853,24858,24862,24870,24875,24885],{"__ignoreMap":28},[33,24781,24782,24784],{"class":35,"line":36},[33,24783,16934],{"class":39},[33,24785,17409],{"class":43},[33,24787,24788],{"class":35,"line":51},[33,24789,3820],{"class":47},[33,24791,24792],{"class":35,"line":64},[33,24793,16956],{"class":39},[33,24795,24796],{"class":35,"line":76},[33,24797,24798],{"class":2487},"    \u002F\u002F在公共权限下定义静态成员函数\n",[33,24800,24801,24803,24806,24808],{"class":35,"line":87},[33,24802,13261],{"class":39},[33,24804,24805],{"class":39}," void",[33,24807,13626],{"class":43},[33,24809,4235],{"class":47},[33,24811,24812],{"class":35,"line":96},[33,24813,4289],{"class":47},[33,24815,24816,24819,24821,24824,24826],{"class":35,"line":103},[33,24817,24818],{"class":47},"        coout",[33,24820,3450],{"class":39},[33,24822,24823],{"class":60},"\"静态成员函数的调用\"",[33,24825,3450],{"class":39},[33,24827,3472],{"class":47},[33,24829,24830],{"class":35,"line":108},[33,24831,4446],{"class":47},[33,24833,24834],{"class":35,"line":119},[33,24835,6249],{"class":47},[33,24837,24838,24840,24842],{"class":35,"line":128},[33,24839,7611],{"class":39},[33,24841,7835],{"class":43},[33,24843,4235],{"class":47},[33,24845,24846],{"class":35,"line":1753},[33,24847,3820],{"class":47},[33,24849,24850],{"class":35,"line":1763},[33,24851,24852],{"class":2487},"    \u002F\u002F静态成员函数的调用方式:\n",[33,24854,24855],{"class":35,"line":1775},[33,24856,24857],{"class":2487},"    \u002F\u002F1.通过对象访问\n",[33,24859,24860],{"class":35,"line":1780},[33,24861,17551],{"class":47},[33,24863,24864,24866,24868],{"class":35,"line":1785},[33,24865,18104],{"class":47},[33,24867,13792],{"class":43},[33,24869,7883],{"class":47},[33,24871,24872],{"class":35,"line":1940},[33,24873,24874],{"class":2487},"    \u002F\u002F2.通过类名访问\n",[33,24876,24877,24879,24881,24883],{"class":35,"line":2183},[33,24878,20757],{"class":43},[33,24880,19970],{"class":47},[33,24882,13792],{"class":43},[33,24884,7883],{"class":47},[33,24886,24887],{"class":35,"line":2208},[33,24888,1010],{"class":47},[328,24890,24891],{"start":51},[331,24892,24893],{},"静态成员函数只能访问静态成员变量",[23,24895,24897],{"className":2422,"code":24896,"language":2424,"meta":28,"style":28},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[30,24898,24899,24905,24909,24913,24917,24927,24931,24945,24950,24962,24966,24977,24987,24991,24995,24999,25009,25013,25026,25030,25034,25038,25042,25056,25064,25068,25072,25076,25080,25088,25092,25102,25107,25111,25119,25123,25129],{"__ignoreMap":28},[33,24900,24901,24903],{"class":35,"line":36},[33,24902,16934],{"class":39},[33,24904,17409],{"class":43},[33,24906,24907],{"class":35,"line":51},[33,24908,3820],{"class":47},[33,24910,24911],{"class":35,"line":64},[33,24912,16956],{"class":39},[33,24914,24915],{"class":35,"line":76},[33,24916,24798],{"class":2487},[33,24918,24919,24921,24923,24925],{"class":35,"line":87},[33,24920,13261],{"class":39},[33,24922,24805],{"class":39},[33,24924,13626],{"class":43},[33,24926,4235],{"class":47},[33,24928,24929],{"class":35,"line":96},[33,24930,4289],{"class":47},[33,24932,24933,24936,24938,24940,24942],{"class":35,"line":103},[33,24934,24935],{"class":47},"        m_A",[33,24937,57],{"class":39},[33,24939,2734],{"class":72},[33,24941,2484],{"class":47},[33,24943,24944],{"class":2487}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[33,24946,24947],{"class":35,"line":108},[33,24948,24949],{"class":2487},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[33,24951,24952,24954,24956,24958,24960],{"class":35,"line":119},[33,24953,24818],{"class":47},[33,24955,3450],{"class":39},[33,24957,24823],{"class":60},[33,24959,3450],{"class":39},[33,24961,3472],{"class":47},[33,24963,24964],{"class":35,"line":128},[33,24965,4446],{"class":47},[33,24967,24968,24970,24972,24974],{"class":35,"line":1753},[33,24969,13261],{"class":39},[33,24971,4641],{"class":39},[33,24973,17686],{"class":47},[33,24975,24976],{"class":2487}," \u002F\u002F静态成员变量\n",[33,24978,24979,24981,24984],{"class":35,"line":1763},[33,24980,4244],{"class":39},[33,24982,24983],{"class":47}," m_B;",[33,24985,24986],{"class":2487}," \u002F\u002F非静态成员变量\n",[33,24988,24989],{"class":35,"line":1775},[33,24990,100],{"emptyLinePlaceholder":99},[33,24992,24993],{"class":35,"line":1780},[33,24994,17460],{"class":39},[33,24996,24997],{"class":35,"line":1785},[33,24998,24611],{"class":2487},[33,25000,25001,25003,25005,25007],{"class":35,"line":1940},[33,25002,13261],{"class":39},[33,25004,24805],{"class":39},[33,25006,15858],{"class":43},[33,25008,4235],{"class":47},[33,25010,25011],{"class":35,"line":2183},[33,25012,4289],{"class":47},[33,25014,25015,25017,25019,25022,25024],{"class":35,"line":2208},[33,25016,5706],{"class":47},[33,25018,3450],{"class":39},[33,25020,25021],{"class":60},"\"这是私有权限下的静态函数调用\"",[33,25023,3450],{"class":39},[33,25025,3472],{"class":47},[33,25027,25028],{"class":35,"line":2234},[33,25029,4446],{"class":47},[33,25031,25032],{"class":35,"line":2239},[33,25033,100],{"emptyLinePlaceholder":99},[33,25035,25036],{"class":35,"line":2247},[33,25037,100],{"emptyLinePlaceholder":99},[33,25039,25040],{"class":35,"line":2255},[33,25041,6249],{"class":47},[33,25043,25044,25046,25048,25050,25052,25054],{"class":35,"line":3992},[33,25045,2436],{"class":39},[33,25047,17807],{"class":43},[33,25049,24441],{"class":47},[33,25051,57],{"class":39},[33,25053,2617],{"class":72},[33,25055,3567],{"class":47},[33,25057,25058,25060,25062],{"class":35,"line":4009},[33,25059,7611],{"class":39},[33,25061,7835],{"class":43},[33,25063,4235],{"class":47},[33,25065,25066],{"class":35,"line":4014},[33,25067,3820],{"class":47},[33,25069,25070],{"class":35,"line":4019},[33,25071,24852],{"class":2487},[33,25073,25074],{"class":35,"line":4024},[33,25075,24857],{"class":2487},[33,25077,25078],{"class":35,"line":4038},[33,25079,17551],{"class":47},[33,25081,25082,25084,25086],{"class":35,"line":4043},[33,25083,18104],{"class":47},[33,25085,13792],{"class":43},[33,25087,7883],{"class":47},[33,25089,25090],{"class":35,"line":4834},[33,25091,24874],{"class":2487},[33,25093,25094,25096,25098,25100],{"class":35,"line":4848},[33,25095,20757],{"class":43},[33,25097,19970],{"class":47},[33,25099,13792],{"class":43},[33,25101,7883],{"class":47},[33,25103,25104],{"class":35,"line":4856},[33,25105,25106],{"class":2487},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[33,25108,25109],{"class":35,"line":4861},[33,25110,1010],{"class":47},[33,25112,25113,25115,25117],{"class":35,"line":4867},[33,25114,2436],{"class":39},[33,25116,4232],{"class":43},[33,25118,4235],{"class":47},[33,25120,25121],{"class":35,"line":4873},[33,25122,3820],{"class":47},[33,25124,25125,25127],{"class":35,"line":4878},[33,25126,7880],{"class":43},[33,25128,7883],{"class":47},[33,25130,25131],{"class":35,"line":10194},[33,25132,1010],{"class":47},[631,25134,25136],{"id":25135},"_83c对象模型和this指针","8.3C++对象模型和this指针",[24236,25138,25140],{"id":25139},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,25142,25143],{},"在c++中，类内的成员变量和成员函数分开存储",[19,25145,25146],{},"只有非静态成员变量才属于类的对象上",[25148,25149,25151],"h5",{"id":25150},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[23,25153,25155],{"className":2422,"code":25154,"language":2424,"meta":28,"style":28},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[30,25156,25157,25164,25174,25180,25184,25188,25192,25200,25204,25208,25231,25235,25243,25247,25253],{"__ignoreMap":28},[33,25158,25159,25161],{"class":35,"line":36},[33,25160,4209],{"class":39},[33,25162,25163],{"class":60},"\u003Ciostraem>\n",[33,25165,25166,25168,25170,25172],{"class":35,"line":51},[33,25167,4217],{"class":39},[33,25169,4220],{"class":39},[33,25171,4223],{"class":43},[33,25173,3567],{"class":47},[33,25175,25176,25178],{"class":35,"line":64},[33,25177,16934],{"class":39},[33,25179,17409],{"class":43},[33,25181,25182],{"class":35,"line":76},[33,25183,3820],{"class":47},[33,25185,25186],{"class":35,"line":87},[33,25187,100],{"emptyLinePlaceholder":99},[33,25189,25190],{"class":35,"line":96},[33,25191,6249],{"class":47},[33,25193,25194,25196,25198],{"class":35,"line":103},[33,25195,7611],{"class":39},[33,25197,7835],{"class":43},[33,25199,4235],{"class":47},[33,25201,25202],{"class":35,"line":108},[33,25203,3820],{"class":47},[33,25205,25206],{"class":35,"line":119},[33,25207,17551],{"class":47},[33,25209,25210,25212,25214,25217,25219,25222,25224,25226,25228],{"class":35,"line":128},[33,25211,3825],{"class":47},[33,25213,3450],{"class":39},[33,25215,25216],{"class":60},"\"size of p=\"",[33,25218,3450],{"class":39},[33,25220,25221],{"class":43},"sizeoif",[33,25223,8785],{"class":47},[33,25225,3450],{"class":39},[33,25227,3515],{"class":47},[33,25229,25230],{"class":2487}," \u002F\u002F查看这个空类的占用的内存空间\n",[33,25232,25233],{"class":35,"line":1753},[33,25234,1010],{"class":47},[33,25236,25237,25239,25241],{"class":35,"line":1763},[33,25238,2436],{"class":39},[33,25240,4232],{"class":43},[33,25242,4235],{"class":47},[33,25244,25245],{"class":35,"line":1775},[33,25246,3820],{"class":47},[33,25248,25249,25251],{"class":35,"line":1780},[33,25250,7880],{"class":43},[33,25252,7883],{"class":47},[33,25254,25255],{"class":35,"line":1785},[33,25256,1010],{"class":47},[19,25258,25259],{},"输出结果为：size of p=1",[19,25261,25262],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,25264,25265],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[25148,25267,25269],{"id":25268},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[23,25271,25273],{"className":2422,"code":25272,"language":2424,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[30,25274,25275,25281,25291,25299,25303,25312,25316,25324,25328,25332,25351,25355,25359,25367,25371,25377],{"__ignoreMap":28},[33,25276,25277,25279],{"class":35,"line":36},[33,25278,4209],{"class":39},[33,25280,4212],{"class":60},[33,25282,25283,25285,25287,25289],{"class":35,"line":51},[33,25284,4217],{"class":39},[33,25286,4220],{"class":39},[33,25288,4223],{"class":43},[33,25290,3567],{"class":47},[33,25292,25293,25295,25297],{"class":35,"line":64},[33,25294,16934],{"class":39},[33,25296,17807],{"class":43},[33,25298,4931],{"class":47},[33,25300,25301],{"class":35,"line":76},[33,25302,3820],{"class":47},[33,25304,25305,25307,25309],{"class":35,"line":87},[33,25306,4244],{"class":39},[33,25308,17686],{"class":47},[33,25310,25311],{"class":2487},"\u002F\u002F非静态成员变量\n",[33,25313,25314],{"class":35,"line":96},[33,25315,6249],{"class":47},[33,25317,25318,25320,25322],{"class":35,"line":103},[33,25319,7611],{"class":39},[33,25321,7835],{"class":43},[33,25323,4235],{"class":47},[33,25325,25326],{"class":35,"line":108},[33,25327,3820],{"class":47},[33,25329,25330],{"class":35,"line":119},[33,25331,17551],{"class":47},[33,25333,25334,25336,25338,25340,25342,25344,25346,25348],{"class":35,"line":128},[33,25335,3825],{"class":47},[33,25337,3450],{"class":39},[33,25339,25216],{"class":60},[33,25341,3646],{"class":39},[33,25343,8785],{"class":47},[33,25345,3450],{"class":39},[33,25347,3515],{"class":47},[33,25349,25350],{"class":2487}," \u002F\u002F查看不是空对象时占用多少内存\n",[33,25352,25353],{"class":35,"line":1753},[33,25354,100],{"emptyLinePlaceholder":99},[33,25356,25357],{"class":35,"line":1763},[33,25358,1010],{"class":47},[33,25360,25361,25363,25365],{"class":35,"line":1775},[33,25362,2436],{"class":39},[33,25364,4232],{"class":43},[33,25366,4235],{"class":47},[33,25368,25369],{"class":35,"line":1780},[33,25370,3820],{"class":47},[33,25372,25373,25375],{"class":35,"line":1785},[33,25374,7880],{"class":43},[33,25376,7883],{"class":47},[33,25378,25379],{"class":35,"line":1940},[33,25380,1010],{"class":47},[19,25382,25383],{},"输出结果：size of p=4",[19,25385,25386],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[328,25388,25389],{},[331,25390,25391],{},"如果加上非静态成员变量，Person类修改如下",[23,25393,25395],{"className":2422,"code":25394,"language":2424,"meta":28,"style":28},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[30,25396,25397,25403,25407,25413,25421,25425,25430],{"__ignoreMap":28},[33,25398,25399,25401],{"class":35,"line":36},[33,25400,16934],{"class":39},[33,25402,17409],{"class":43},[33,25404,25405],{"class":35,"line":51},[33,25406,3820],{"class":47},[33,25408,25409,25411],{"class":35,"line":64},[33,25410,4244],{"class":39},[33,25412,23630],{"class":47},[33,25414,25415,25417,25419],{"class":35,"line":76},[33,25416,13261],{"class":39},[33,25418,4641],{"class":39},[33,25420,23637],{"class":47},[33,25422,25423],{"class":35,"line":87},[33,25424,6249],{"class":47},[33,25426,25427],{"class":35,"line":96},[33,25428,25429],{"class":2487},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[33,25431,25432,25434,25436,25438,25440,25442],{"class":35,"line":103},[33,25433,2436],{"class":39},[33,25435,17807],{"class":43},[33,25437,24650],{"class":47},[33,25439,57],{"class":39},[33,25441,2617],{"class":72},[33,25443,3567],{"class":47},[19,25445,25446],{},"输出结果：4",[19,25448,25449],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[328,25451,25452],{"start":51},[331,25453,25454],{},"加上非静态成员函数",[23,25456,25458],{"className":2422,"code":25457,"language":2424,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[30,25459,25460,25467,25471,25477,25485,25489,25493,25497],{"__ignoreMap":28},[33,25461,25462,25464],{"class":35,"line":36},[33,25463,16934],{"class":39},[33,25465,25466],{"class":43},"  Person\n",[33,25468,25469],{"class":35,"line":51},[33,25470,3820],{"class":47},[33,25472,25473,25475],{"class":35,"line":64},[33,25474,4244],{"class":39},[33,25476,23630],{"class":47},[33,25478,25479,25481,25483],{"class":35,"line":76},[33,25480,17147],{"class":39},[33,25482,13626],{"class":43},[33,25484,4235],{"class":47},[33,25486,25487],{"class":35,"line":87},[33,25488,4289],{"class":47},[33,25490,25491],{"class":35,"line":96},[33,25492,100],{"emptyLinePlaceholder":99},[33,25494,25495],{"class":35,"line":103},[33,25496,4446],{"class":47},[33,25498,25499],{"class":35,"line":108},[33,25500,6249],{"class":47},[19,25502,25503],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[328,25505,25506],{"start":64},[331,25507,25508],{},"加上静态成员函数",[23,25510,25512],{"className":2422,"code":25511,"language":2424,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[30,25513,25514,25520,25524,25530,25538,25542,25546,25550,25561,25565,25569,25573],{"__ignoreMap":28},[33,25515,25516,25518],{"class":35,"line":36},[33,25517,16934],{"class":39},[33,25519,25466],{"class":43},[33,25521,25522],{"class":35,"line":51},[33,25523,3820],{"class":47},[33,25525,25526,25528],{"class":35,"line":64},[33,25527,4244],{"class":39},[33,25529,23630],{"class":47},[33,25531,25532,25534,25536],{"class":35,"line":76},[33,25533,17147],{"class":39},[33,25535,13626],{"class":43},[33,25537,4235],{"class":47},[33,25539,25540],{"class":35,"line":87},[33,25541,4289],{"class":47},[33,25543,25544],{"class":35,"line":96},[33,25545,100],{"emptyLinePlaceholder":99},[33,25547,25548],{"class":35,"line":103},[33,25549,4446],{"class":47},[33,25551,25552,25554,25556,25559],{"class":35,"line":108},[33,25553,13261],{"class":39},[33,25555,24805],{"class":39},[33,25557,25558],{"class":43}," func1",[33,25560,4235],{"class":47},[33,25562,25563],{"class":35,"line":119},[33,25564,4289],{"class":47},[33,25566,25567],{"class":35,"line":128},[33,25568,100],{"emptyLinePlaceholder":99},[33,25570,25571],{"class":35,"line":1753},[33,25572,4446],{"class":47},[33,25574,25575],{"class":35,"line":1763},[33,25576,6249],{"class":47},[19,25578,25446],{},[19,25580,25581],{},"解释：静态成员函数也不属于类上",[2331,25583,9920],{},{"title":28,"searchDepth":51,"depth":51,"links":25585},[25586,25592],{"id":16885,"depth":51,"text":16886,"children":25587},[25588,25589,25590,25591],{"id":16889,"depth":64,"text":16890},{"id":17612,"depth":64,"text":17613},{"id":17784,"depth":64,"text":17785},{"id":18243,"depth":64,"text":18244},{"id":20615,"depth":51,"text":20616,"children":25593},[25594,25595,25596,25597,25598,25599,25600,25601,25602],{"id":20627,"depth":64,"text":20628},{"id":20920,"depth":64,"text":20921},{"id":21411,"depth":64,"text":21412},{"id":22508,"depth":64,"text":22509},{"id":22931,"depth":64,"text":22932},{"id":23410,"depth":64,"text":23411},{"id":23785,"depth":64,"text":23786},{"id":24198,"depth":64,"text":24199},{"id":25135,"depth":64,"text":25136},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16850,"description":25603},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25610,"title":2424,"body":25611,"description":2359,"extension":2360,"meta":25615,"navigation":99,"path":25617,"seo":25618,"stem":25619,"__hash__":25620},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25612,"toc":25613},[],{"title":28,"searchDepth":51,"depth":51,"links":25614},[],{"category":25616},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2424,"description":2359},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25622,"title":25623,"body":25624,"description":28,"extension":2360,"meta":26215,"navigation":99,"path":26216,"seo":26217,"stem":26218,"__hash__":26219},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25625,"toc":26197},[25626,25629,25633,25636,25639,25642,25660,25665,25668,25671,25674,25677,25682,25685,25690,25693,25696,25700,25703,25706,25712,25715,25733,25737,25741,25744,25749,25752,25756,25759,25772,25775,25779,25782,25785,25788,25813,25816,25825,25836,25851,25883,25887,25894,25902,25906,25909,25912,25917,25921,25924,25927,25932,25935,25939,25942,25945,25950,25953,25957,25962,25966,26033,26037,26040,26043,26046,26049,26052,26058,26079,26082,26096,26105,26109,26112,26115,26120,26123,26128,26133,26136,26139,26144,26149,26152,26157,26162,26165,26170,26175,26178,26181,26186,26189,26194],[10,25627,25623],{"id":25628},"_1强化学习基本认识",[14,25630,25632],{"id":25631},"_11什么是强化学习","1.1.什么是强化学习",[19,25634,25635],{},"强化学习有两部分组成：智能体和环境；",[19,25637,25638],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25640,25641],{},"强化学习与监督学习的区别:",[328,25643,25644,25647,25650,25653],{},[331,25645,25646],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[331,25648,25649],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[331,25651,25652],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[331,25654,25655,25656,25659],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2575,25657,25658],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25661,25662],{},[3736,25663],{"alt":28,"src":25664},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25666,25667],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25669,25670],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25672,25673],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25675,25676],{},"获取奖励",[19,25678,25679],{},[3736,25680],{"alt":28,"src":25681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25683,25684],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25686,25687],{},[3736,25688],{"alt":28,"src":25689},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25691,25692],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25694,25695],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25697,25699],{"id":25698},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25701,25702],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25704,25705],{},"具身智能中的应用",[19,25707,25708,25711],{},[2575,25709,25710],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25713,25714],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25716,25717,25718,25721,25722,25725,25726,25729,25730],{},"机器人是",[2575,25719,25720],{},"躯体","，深度学习是",[2575,25723,25724],{},"神经元****网络","，VLA是",[2575,25727,25728],{},"通用的行为逻辑","，而强化学习是",[2575,25731,25732],{},"教练",[14,25734,25736],{"id":25735},"_13序列决策","1.3.序列决策",[631,25738,25740],{"id":25739},"_131智能体与环境","1.3.1.智能体与环境",[19,25742,25743],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25745,25746],{},[3736,25747],{"alt":28,"src":25748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25750,25751],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[631,25753,25755],{"id":25754},"_132奖励","1.3.2.奖励",[19,25757,25758],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25760,25761,25762,25771],{},"取某个策略的表现如何。强化学习的目的就是",[2575,25763,25764,25765,25770],{},"最大化",[2575,25766,25767],{},[2575,25768,25769],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25773,25774],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[631,25776,25778],{"id":25777},"_133序列决策","1.3.3.序列决策",[19,25780,25781],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25783,25784],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25786,25787],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25789,25790,25794,25795,25797,25798,25800,25801,25803,25804,16035,25807,16035,25810],{},[25791,25792,25793],"em",{},"Ht"," = ",[25791,25796,3013],{},"1*, a",[25791,25799,720],{},", r",[25791,25802,720],{},", . . . ,* ",[25791,25805,25806],{},"ot",[25791,25808,25809],{},", at ,",[25791,25811,25812],{},"rt",[19,25814,25815],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25817,25818,25794,25821,3924,25823,2849],{},[25791,25819,25820],{},"st",[25791,25822,198],{},[25791,25824,25793],{},[19,25826,25827,25828,25831,25832,25835],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2575,25829,25830],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2575,25833,25834],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25837,25838,25839,25842,25843,25846,25847,25850],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2575,25840,25841],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2575,25844,25845],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25791,25848,25849],{},"S, A, T, R, Ω, O, γ",")。",[19,25852,25853,25854,25856,25857,25859,25860,133,25862,25865,25866,25868,25869,133,25872,25875,25876,25878,25879,25882],{},"其中 ",[25791,25855,3103],{}," 表示状态空间，为隐变量，",[25791,25858,2657],{}," 为动作空间，",[25791,25861,3127],{},[25791,25863,25864],{},"s ′ |s, a",") 为状态转移概率，",[25791,25867,3079],{}," 为奖励函数，",[25791,25870,25871],{},"Ω",[25791,25873,25874],{},"o|s, a",") 为观测概率，",[25791,25877,3007],{}," 为观测空间，",[25791,25880,25881],{},"γ"," 为折扣因子。",[14,25884,25886],{"id":25885},"_14动作空间","1.4.动作空间",[19,25888,25889,25890,25893],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2575,25891,25892],{},"动作空间"," ，动作空间分为:",[328,25895,25896,25899],{},[331,25897,25898],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[331,25900,25901],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25903,25905],{"id":25904},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25907,25908],{},"由策略、价值函数、模型三部分组成",[19,25910,25911],{},"这三者组成马尔可夫决策过程",[19,25913,25914],{},[3736,25915],{"alt":28,"src":25916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[631,25918,25920],{"id":25919},"_151策略","1.5.1.策略",[19,25922,25923],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25925,25926],{},"策略可分为两种：",[19,25928,25929],{},[3736,25930],{"alt":28,"src":25931},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25933,25934],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[631,25936,25938],{"id":25937},"_152价值函数","1.5.2.价值函数",[19,25940,25941],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25943,25944],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25946,25947],{},[3736,25948],{"alt":28,"src":25949},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25951,25952],{},"进入某个状态采取的最优动作可以通过Q函数得到",[631,25954,25956],{"id":25955},"_153模型","1.5.3.模型",[19,25958,25959],{},[3736,25960],{"alt":28,"src":25961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25963,25965],{"id":25964},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2563,25967,25968,25979],{},[2566,25969,25970],{},[2569,25971,25972,25976],{},[2572,25973,25975],{"align":25974},"left","类型",[2572,25977,25978],{"align":25974},"特点",[2610,25980,25981,25991,26001,26011,26023],{},[2569,25982,25983,25988],{},[2615,25984,25985],{"align":25974},[2575,25986,25987],{},"基于价值的智能体",[2615,25989,25990],{"align":25974},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2569,25992,25993,25998],{},[2615,25994,25995],{"align":25974},[2575,25996,25997],{},"基于策略的智能体",[2615,25999,26000],{"align":25974},"直接学习策略，没有学习价值函数",[2569,26002,26003,26008],{},[2615,26004,26005],{"align":25974},[2575,26006,26007],{},"演员-评论员智能体",[2615,26009,26010],{"align":25974},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2569,26012,26013,26018],{},[2615,26014,26015],{"align":25974},[2575,26016,26017],{},"有模型强化学习智能体",[2615,26019,26020],{"align":25974},[3736,26021],{"alt":28,"src":26022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2569,26024,26025,26030],{},[2615,26026,26027],{"align":25974},[2575,26028,26029],{},"免模型强化学习智能体",[2615,26031,26032],{"align":25974},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,26034,26036],{"id":26035},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,26038,26039],{},"学习和规划是序列决策的两个基本问题",[19,26041,26042],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,26044,26045],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,26047,26048],{},"强化学习用到的库：Gym",[19,26050,26051],{},"Gym可以检验强化学习算法的优劣",[19,26053,26054,26057],{},[2575,26055,26056],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[23,26059,26063],{"className":26060,"code":26061,"language":26062,"meta":28,"style":28},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[30,26064,26065],{"__ignoreMap":28},[33,26066,26067,26070,26073,26076],{"class":35,"line":36},[33,26068,26069],{"class":43},"pip",[33,26071,26072],{"class":60}," install",[33,26074,26075],{"class":60}," gym==",[33,26077,26078],{"class":72},"0.25.2\n",[19,26080,26081],{},"显示图形界面需要",[23,26083,26085],{"className":26060,"code":26084,"language":26062,"meta":28,"style":28},"pip install pygame\n",[30,26086,26087],{"__ignoreMap":28},[33,26088,26089,26091,26093],{"class":35,"line":36},[33,26090,26069],{"class":43},[33,26092,26072],{"class":60},[33,26094,26095],{"class":60}," pygame\n",[19,26097,26098,26099],{},"有关Gym库的相关文档介绍：",[2663,26100,26104],{"href":26101,"rel":26102},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[26103],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,26106,26108],{"id":26107},"_18一些补充基础概念","1.8.一些补充基础概念",[19,26110,26111],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,26113,26114],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,26116,26117],{},[3736,26118],{"alt":28,"src":26119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,26121,26122],{},"折扣率需要自己来设定",[19,26124,26125],{},[3736,26126],{"alt":28,"src":26127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[328,26129,26130],{},[331,26131,26132],{},"状态转移函数：",[19,26134,26135],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,26137,26138],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,26140,26141],{},[3736,26142],{"alt":28,"src":26143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[328,26145,26146],{"start":51},[331,26147,26148],{},"动作价值函数：",[19,26150,26151],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,26153,26154],{},[3736,26155],{"alt":28,"src":26156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[328,26158,26159],{"start":64},[331,26160,26161],{},"最优动作价值函数：",[19,26163,26164],{},"这个函数是对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,26166,26167],{},[3736,26168],{"alt":28,"src":26169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[328,26171,26172],{"start":76},[331,26173,26174],{},"状态价值函数:",[19,26176,26177],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,26179,26180],{},"它衡量的是“一个具体动作”的长期价值",[19,26182,26183],{},[3736,26184],{"alt":28,"src":26185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,26187,26188],{},"几个价值函数之间的比较：",[19,26190,26191],{},[3736,26192],{"alt":28,"src":26193},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2331,26195,26196],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":26198},[26199,26200,26201,26206,26207,26212,26213,26214],{"id":25631,"depth":51,"text":25632},{"id":25698,"depth":51,"text":25699},{"id":25735,"depth":51,"text":25736,"children":26202},[26203,26204,26205],{"id":25739,"depth":64,"text":25740},{"id":25754,"depth":64,"text":25755},{"id":25777,"depth":64,"text":25778},{"id":25885,"depth":51,"text":25886},{"id":25904,"depth":51,"text":25905,"children":26208},[26209,26210,26211],{"id":25919,"depth":64,"text":25920},{"id":25937,"depth":64,"text":25938},{"id":25955,"depth":64,"text":25956},{"id":25964,"depth":51,"text":25965},{"id":26035,"depth":51,"text":26036},{"id":26107,"depth":51,"text":26108},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25623,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":26221,"title":26222,"body":26223,"description":26230,"extension":2360,"meta":26241,"navigation":99,"path":26242,"seo":26243,"stem":26244,"__hash__":26245},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":26224,"toc":26239},[26225,26228,26231,26236],[10,26226,26222],{"id":26227},"_2马尔可夫决策过程",[19,26229,26230],{},"这是强化学习的基本框架",[19,26232,26233],{},[3736,26234],{"alt":28,"src":26235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,26237,26238],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":28,"searchDepth":51,"depth":51,"links":26240},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":26222,"description":26230},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":26247,"title":26248,"body":26249,"description":28,"extension":2360,"meta":26365,"navigation":99,"path":26366,"seo":26367,"stem":26368,"__hash__":26369},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":26250,"toc":26360},[26251,26254,26258,26261,26266,26271,26274,26279,26282,26287,26290,26294,26299,26302,26307,26312,26317,26320,26324,26329,26332,26337,26342,26347,26352,26355],[10,26252,26248],{"id":26253},"_3动作价值函数",[14,26255,26257],{"id":26256},"_31dqn","3.1.DQN",[19,26259,26260],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,26262,26263],{},[3736,26264],{"alt":28,"src":26265},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,26267,26268],{},[3736,26269],{"alt":28,"src":26270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,26272,26273],{},"DQN算法的描述：",[19,26275,26276],{},[3736,26277],{"alt":28,"src":26278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,26280,26281],{},"这里的Dense指的是全连接层",[19,26283,26284],{},[3736,26285],{"alt":28,"src":26286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,26288,26289],{},"当前观测的状态为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,26291,26293],{"id":26292},"_32dqn的举例","3.2.DQN的举例",[19,26295,26296],{},[3736,26297],{"alt":28,"src":26298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26300,26301],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26303,26304],{},[3736,26305],{"alt":28,"src":26306},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26308,26309],{},[3736,26310],{"alt":28,"src":26311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26313,26314],{},[3736,26315],{"alt":28,"src":26316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26318,26319],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26321,26323],{"id":26322},"_33td算法","3.3.TD算法",[19,26325,26326],{},[3736,26327],{"alt":28,"src":26328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26330,26331],{},"强化学习TD算法公式的粗略解释：",[19,26333,26334],{},[3736,26335],{"alt":28,"src":26336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26338,26339],{},[3736,26340],{"alt":28,"src":26341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26343,26344],{},[3736,26345],{"alt":28,"src":26346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26348,26349],{},[3736,26350],{"alt":28,"src":26351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26353,26354],{},"TD算法总结：",[19,26356,26357],{},[3736,26358],{"alt":28,"src":26359},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":28,"searchDepth":51,"depth":51,"links":26361},[26362,26363,26364],{"id":26256,"depth":51,"text":26257},{"id":26292,"depth":51,"text":26293},{"id":26322,"depth":51,"text":26323},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":26248,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26371,"title":26372,"body":26373,"description":28,"extension":2360,"meta":26606,"navigation":99,"path":26607,"seo":26608,"stem":26609,"__hash__":26610},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26374,"toc":26602},[26375,26378,26382,26385,26388,26393,26398,26401,26406,26411,26414,26419,26422,26427,26430,26435,26438,26443,26446,26451,26456,26459,26464,26467,26470,26475,26478,26483,26488,26492,26495,26498,26503,26508,26511,26516,26521,26524,26529,26532,26535,26540,26543,26548,26551,26556,26561,26564,26569,26574,26577,26582,26585,26590,26593],[10,26376,26372],{"id":26377},"_4策略学习",[14,26379,26381],{"id":26380},"_41概念描述","4.1.概念描述",[19,26383,26384],{},"用神经网络（策略网络）近似策略函数",[19,26386,26387],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26389,26390],{},[3736,26391],{"alt":28,"src":26392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26394,26395],{},[3736,26396],{"alt":28,"src":26397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26399,26400],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26402,26403],{},[3736,26404],{"alt":28,"src":26405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26407,26408],{},[3736,26409],{"alt":28,"src":26410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26412,26413],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26415,26416],{},[3736,26417],{"alt":28,"src":26418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26420,26421],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26423,26424],{},[3736,26425],{"alt":28,"src":26426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26428,26429],{},"改进theta要用到策略梯度算法",[19,26431,26432],{},[3736,26433],{"alt":28,"src":26434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26436,26437],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26439,26440],{},[3736,26441],{"alt":28,"src":26442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26444,26445],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26447,26448],{},[3736,26449],{"alt":28,"src":26450},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26452,26453],{},[3736,26454],{"alt":28,"src":26455},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26457,26458],{},"梯度公式总结：",[19,26460,26461],{},[3736,26462],{"alt":28,"src":26463},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26465,26466],{},"两个公式的分别应用场景：",[19,26468,26469],{},"对于离散的动作：",[19,26471,26472],{},[3736,26473],{"alt":28,"src":26474},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26476,26477],{},"对于连续的动作：",[19,26479,26480],{},[3736,26481],{"alt":28,"src":26482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26484,26485],{},[3736,26486],{"alt":28,"src":26487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26489,26491],{"id":26490},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26493,26494],{},"使用蒙特卡洛来近似计算策略梯度",[19,26496,26497],{},"蒙特卡洛法的解释如下：",[19,26499,26500],{},[3736,26501],{"alt":28,"src":26502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26504,26505],{},[3736,26506],{"alt":28,"src":26507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26509,26510],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[328,26512,26513],{},[331,26514,26515],{},"方法一：reinforce算法",[19,26517,26518],{},[3736,26519],{"alt":28,"src":26520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26522,26523],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[328,26525,26526],{"start":51},[331,26527,26528],{},"方法二：actor-critic算法",[19,26530,26531],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26533,26534],{},"两个网络的构建：",[19,26536,26537],{},[3736,26538],{"alt":28,"src":26539},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26541,26542],{},"actor网路：",[19,26544,26545],{},[3736,26546],{"alt":28,"src":26547},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26549,26550],{},"critic网络",[19,26552,26553],{},[3736,26554],{"alt":28,"src":26555},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[328,26557,26558],{"start":64},[331,26559,26560],{},"网络的训练",[19,26562,26563],{},"网络描述",[19,26565,26566],{},[3736,26567],{"alt":28,"src":26568},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26570,26571],{},[3736,26572],{"alt":28,"src":26573},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26575,26576],{},"TD算法更新梯度：",[19,26578,26579],{},[3736,26580],{"alt":28,"src":26581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26583,26584],{},"策略网络更新梯度：",[19,26586,26587],{},[3736,26588],{"alt":28,"src":26589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26591,26592],{},"训练整个流程的具体描述：",[19,26594,26595,26598,26599],{},[3736,26596],{"alt":28,"src":26597},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3736,26600],{"alt":28,"src":26601},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":28,"searchDepth":51,"depth":51,"links":26603},[26604,26605],{"id":26380,"depth":51,"text":26381},{"id":26490,"depth":51,"text":26491},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26372,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26612,"title":26613,"body":26614,"description":26621,"extension":2360,"meta":26671,"navigation":99,"path":26672,"seo":26673,"stem":26674,"__hash__":26675},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26615,"toc":26667},[26616,26619,26622,26626,26629,26634,26638,26641,26646,26649,26654,26659,26662],[10,26617,26613],{"id":26618},"_5alphago算法",[19,26620,26621],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26623,26625],{"id":26624},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26627,26628],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26630,26631],{},[3736,26632],{"alt":28,"src":26633},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26635,26637],{"id":26636},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26639,26640],{},"采用强化学习的方式训练策略网络",[19,26642,26643],{},[3736,26644],{"alt":28,"src":26645},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26647,26648],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26650,26651],{},[3736,26652],{"alt":28,"src":26653},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26655,26656],{},[3736,26657],{"alt":28,"src":26658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26660,26661],{},"强化学习训练策略网络的总结：",[19,26663,26664],{},[3736,26665],{"alt":28,"src":26666},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":28,"searchDepth":51,"depth":51,"links":26668},[26669,26670],{"id":26624,"depth":51,"text":26625},{"id":26636,"depth":51,"text":26637},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26613,"description":26621},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26677,"title":26678,"body":26679,"description":26686,"extension":2360,"meta":26689,"navigation":99,"path":26690,"seo":26691,"stem":26692,"__hash__":26693},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26680,"toc":26687},[26681,26684],[10,26682,26678],{"id":26683},"_6价值网络",[19,26685,26686],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":28,"searchDepth":51,"depth":51,"links":26688},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26678,"description":26686},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26695,"title":26696,"body":26697,"description":26701,"extension":2360,"meta":26702,"navigation":99,"path":26703,"seo":26704,"stem":26705,"__hash__":26706},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26698,"toc":26699},[],{"title":28,"searchDepth":51,"depth":51,"links":26700},[],"记录自己的强化学习笔记。",{"category":25616},"\u002Fwiki\u002F2025-12-04",{"title":26696,"description":26701},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26708,"title":26709,"body":26710,"description":2359,"extension":2360,"meta":26749,"navigation":99,"path":26750,"seo":26751,"stem":26752,"__hash__":26753},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26711,"toc":26747},[26712,26715,26718,26724,26727,26733,26736,26741,26744],[10,26713,26709],{"id":26714},"_1-项目概览与官方资源",[19,26716,26717],{},"官方文档：",[19,26719,26720],{},[2663,26721,26722],{"href":26722,"rel":26723},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[26103],[19,26725,26726],{},"官方代码仓库：",[19,26728,26729],{},[2663,26730,26731],{"href":26731,"rel":26732},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[26103],[19,26734,26735],{},"复现大体流程：",[19,26737,26738],{},[3736,26739],{"alt":28,"src":26740},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26742,26743],{},"本教程的目标是打通这条链路：",[19,26745,26746],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":28,"searchDepth":51,"depth":51,"links":26748},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26709,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26755,"title":26756,"body":26757,"description":2359,"extension":2360,"meta":26873,"navigation":99,"path":26874,"seo":26875,"stem":26876,"__hash__":26877},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26758,"toc":26868},[26759,26762,26766,26769,26776,26780,26783,26792,26802,26806,26836,26839,26865],[10,26760,26756],{"id":26761},"_2-环境准备与设备连接",[14,26763,26765],{"id":26764},"_21-系统与环境","2.1 系统与环境",[19,26767,26768],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26770,26771,26772,26775],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[30,26773,26774],{},"lerobot"," 依赖。",[14,26777,26779],{"id":26778},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26781,26782],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[23,26784,26786],{"className":26060,"code":26785,"language":26062,"meta":28,"style":28},"lerobot-find-out\n",[30,26787,26788],{"__ignoreMap":28},[33,26789,26790],{"class":35,"line":36},[33,26791,26785],{"class":43},[19,26793,26794,26795,2638,26798,26801],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[30,26796,26797],{},"\u002Fdev\u002FttyACM0",[30,26799,26800],{},"\u002Fdev\u002FttyACM1","）。",[14,26803,26805],{"id":26804},"_23-串口授权","2.3 串口授权",[23,26807,26809],{"className":26060,"code":26808,"language":26062,"meta":28,"style":28},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[30,26810,26811,26825],{"__ignoreMap":28},[33,26812,26813,26816,26819,26822],{"class":35,"line":36},[33,26814,26815],{"class":43},"sudo",[33,26817,26818],{"class":60}," chmod",[33,26820,26821],{"class":72}," 666",[33,26823,26824],{"class":60}," \u002Fdev\u002FttyACM0\n",[33,26826,26827,26829,26831,26833],{"class":35,"line":51},[33,26828,26815],{"class":43},[33,26830,26818],{"class":60},[33,26832,26821],{"class":72},[33,26834,26835],{"class":60}," \u002Fdev\u002FttyACM1\n",[19,26837,26838],{},"说明：",[3413,26840,26841,26846,26852,26862],{},[331,26842,26843,26845],{},[30,26844,26815],{},"：以 root 权限执行命令。",[331,26847,26848,26851],{},[30,26849,26850],{},"chmod","：修改设备节点权限。",[331,26853,26854,26857,26858,26861],{},[30,26855,26856],{},"666","：",[30,26859,26860],{},"rw-rw-rw-","，所有用户可读写。",[331,26863,26864],{},"串口号必须替换为你机器上的真实端口。",[2331,26866,26867],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":28,"searchDepth":51,"depth":51,"links":26869},[26870,26871,26872],{"id":26764,"depth":51,"text":26765},{"id":26778,"depth":51,"text":26779},{"id":26804,"depth":51,"text":26805},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26756,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26879,"title":26880,"body":26881,"description":2359,"extension":2360,"meta":27042,"navigation":99,"path":27043,"seo":27044,"stem":27045,"__hash__":27046},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26882,"toc":27038},[26883,26887,26891,26897,26900,26957,26960,26964,26967,27035],[10,26884,26886],{"id":26885},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26888,26890],{"id":26889},"_31-配置电机-id","3.1 配置电机 ID",[19,26892,26893,26894,26896],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[30,26895,720],{},"，需要改成机械臂链路里不冲突的编号。",[19,26898,26899],{},"方式一：用 LeRobot 命令逐步写入。",[23,26901,26903],{"className":26060,"code":26902,"language":26062,"meta":28,"style":28},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[30,26904,26905,26910,26918,26925,26930,26934,26939,26945,26952],{"__ignoreMap":28},[33,26906,26907],{"class":35,"line":36},[33,26908,26909],{"class":2487},"# 主臂舵机配置 ID\n",[33,26911,26912,26915],{"class":35,"line":51},[33,26913,26914],{"class":43},"lerobot-setup-motors",[33,26916,26917],{"class":72}," \\\n",[33,26919,26920,26923],{"class":35,"line":64},[33,26921,26922],{"class":72},"  --teleop.type=so101_leader",[33,26924,26917],{"class":72},[33,26926,26927],{"class":35,"line":76},[33,26928,26929],{"class":72},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[33,26931,26932],{"class":35,"line":87},[33,26933,100],{"emptyLinePlaceholder":99},[33,26935,26936],{"class":35,"line":96},[33,26937,26938],{"class":2487},"# 从臂舵机配置 ID\n",[33,26940,26941,26943],{"class":35,"line":103},[33,26942,26914],{"class":43},[33,26944,26917],{"class":72},[33,26946,26947,26950],{"class":35,"line":108},[33,26948,26949],{"class":72},"  --robot.type=so101_follower",[33,26951,26917],{"class":72},[33,26953,26954],{"class":35,"line":119},[33,26955,26956],{"class":72},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26958,26959],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26961,26963],{"id":26962},"_32-机械臂校准","3.2 机械臂校准",[19,26965,26966],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[23,26968,26970],{"className":26060,"code":26969,"language":26062,"meta":28,"style":28},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[30,26971,26972,26977,26984,26990,26997,27002,27006,27011,27017,27023,27030],{"__ignoreMap":28},[33,26973,26974],{"class":35,"line":36},[33,26975,26976],{"class":2487},"# 主臂校准\n",[33,26978,26979,26982],{"class":35,"line":51},[33,26980,26981],{"class":43},"lerobot-calibrate",[33,26983,26917],{"class":72},[33,26985,26986,26988],{"class":35,"line":64},[33,26987,26922],{"class":72},[33,26989,26917],{"class":72},[33,26991,26992,26995],{"class":35,"line":76},[33,26993,26994],{"class":72},"  --teleop.port=\u002Fdev\u002FttyACM0",[33,26996,26917],{"class":72},[33,26998,26999],{"class":35,"line":87},[33,27000,27001],{"class":72},"  --teleop.id=my_awesome_leader_arm\n",[33,27003,27004],{"class":35,"line":96},[33,27005,100],{"emptyLinePlaceholder":99},[33,27007,27008],{"class":35,"line":103},[33,27009,27010],{"class":2487},"# 从臂校准\n",[33,27012,27013,27015],{"class":35,"line":108},[33,27014,26981],{"class":43},[33,27016,26917],{"class":72},[33,27018,27019,27021],{"class":35,"line":119},[33,27020,26949],{"class":72},[33,27022,26917],{"class":72},[33,27024,27025,27028],{"class":35,"line":128},[33,27026,27027],{"class":72},"  --robot.port=\u002Fdev\u002FttyACM1",[33,27029,26917],{"class":72},[33,27031,27032],{"class":35,"line":1753},[33,27033,27034],{"class":72},"  --robot.id=my_awesome_follower_arm\n",[2331,27036,27037],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":27039},[27040,27041],{"id":26889,"depth":51,"text":26890},{"id":26962,"depth":51,"text":26963},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26880,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":27048,"title":27049,"body":27050,"description":2359,"extension":2360,"meta":27241,"navigation":99,"path":27242,"seo":27243,"stem":27244,"__hash__":27245},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":27051,"toc":27237},[27052,27055,27059,27106,27110,27123,27186,27189,27234],[10,27053,27049],{"id":27054},"_4-遥操与相机接入",[14,27056,27058],{"id":27057},"_41-不带相机遥操","4.1 不带相机遥操",[23,27060,27062],{"className":26060,"code":27061,"language":26062,"meta":28,"style":28},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[30,27063,27064,27071,27077,27083,27090,27096,27102],{"__ignoreMap":28},[33,27065,27066,27069],{"class":35,"line":36},[33,27067,27068],{"class":43},"lerobot-teleoperate",[33,27070,26917],{"class":72},[33,27072,27073,27075],{"class":35,"line":51},[33,27074,26949],{"class":72},[33,27076,26917],{"class":72},[33,27078,27079,27081],{"class":35,"line":64},[33,27080,27027],{"class":72},[33,27082,26917],{"class":72},[33,27084,27085,27088],{"class":35,"line":76},[33,27086,27087],{"class":72},"  --robot.id=my_awesome_follower_arm",[33,27089,26917],{"class":72},[33,27091,27092,27094],{"class":35,"line":87},[33,27093,26922],{"class":72},[33,27095,26917],{"class":72},[33,27097,27098,27100],{"class":35,"line":96},[33,27099,26994],{"class":72},[33,27101,26917],{"class":72},[33,27103,27104],{"class":35,"line":103},[33,27105,27001],{"class":72},[14,27107,27109],{"id":27108},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[23,27111,27113],{"className":26060,"code":27112,"language":26062,"meta":28,"style":28},"lerobot-find-cameras opencv\n",[30,27114,27115],{"__ignoreMap":28},[33,27116,27117,27120],{"class":35,"line":36},[33,27118,27119],{"class":43},"lerobot-find-cameras",[33,27121,27122],{"class":60}," opencv\n",[23,27124,27126],{"className":26060,"code":27125,"language":26062,"meta":28,"style":28},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[30,27127,27128,27134,27140,27146,27152,27162,27168,27174,27181],{"__ignoreMap":28},[33,27129,27130,27132],{"class":35,"line":36},[33,27131,27068],{"class":43},[33,27133,26917],{"class":72},[33,27135,27136,27138],{"class":35,"line":51},[33,27137,26949],{"class":72},[33,27139,26917],{"class":72},[33,27141,27142,27144],{"class":35,"line":64},[33,27143,27027],{"class":72},[33,27145,26917],{"class":72},[33,27147,27148,27150],{"class":35,"line":76},[33,27149,27087],{"class":72},[33,27151,26917],{"class":72},[33,27153,27154,27157,27160],{"class":35,"line":87},[33,27155,27156],{"class":72},"  --robot.cameras=",[33,27158,27159],{"class":60},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[33,27161,26917],{"class":72},[33,27163,27164,27166],{"class":35,"line":96},[33,27165,26922],{"class":72},[33,27167,26917],{"class":72},[33,27169,27170,27172],{"class":35,"line":103},[33,27171,26994],{"class":72},[33,27173,26917],{"class":72},[33,27175,27176,27179],{"class":35,"line":108},[33,27177,27178],{"class":72},"  --teleop.id=my_awesome_leader_arm",[33,27180,26917],{"class":72},[33,27182,27183],{"class":35,"line":119},[33,27184,27185],{"class":72},"  --display_data=true\n",[19,27187,27188],{},"相机参数说明：",[3413,27190,27191,27197,27203,27212,27222,27228],{},[331,27192,27193,27196],{},[30,27194,27195],{},"front","：相机名称。",[331,27198,27199,27202],{},[30,27200,27201],{},"type: opencv","：相机驱动类型。",[331,27204,27205,27208,27209,26801],{},[30,27206,27207],{},"index_or_path","：设备编号或设备路径（如 ",[30,27210,27211],{},"\u002Fdev\u002Fvideo4",[331,27213,27214,27217,27218,27221],{},[30,27215,27216],{},"width"," \u002F ",[30,27219,27220],{},"height","：图像分辨率。",[331,27223,27224,27227],{},[30,27225,27226],{},"fps","：采样帧率。",[331,27229,27230,27233],{},[30,27231,27232],{},"--display_data=true","：启用实时可视化。",[2331,27235,27236],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":27238},[27239,27240],{"id":27057,"depth":51,"text":27058},{"id":27108,"depth":51,"text":27109},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":27049,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":27247,"title":27248,"body":27249,"description":2359,"extension":2360,"meta":27421,"navigation":99,"path":27422,"seo":27423,"stem":27424,"__hash__":27425},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":27250,"toc":27416},[27251,27255,27259,27264,27269,27272,27314,27320,27324,27373,27378,27382,27385,27393,27398,27403,27408,27413],[10,27252,27254],{"id":27253},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,27256,27258],{"id":27257},"_51-生成访问令牌","5.1 生成访问令牌",[19,27260,27261],{},[3736,27262],{"alt":28,"src":27263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,27265,27266],{},[3736,27267],{"alt":28,"src":27268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,27270,27271],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[23,27273,27275],{"className":26060,"code":27274,"language":26062,"meta":28,"style":28},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[30,27276,27277,27290],{"__ignoreMap":28},[33,27278,27279,27282,27285,27287],{"class":35,"line":36},[33,27280,27281],{"class":39},"export",[33,27283,27284],{"class":47}," HF_TOKEN",[33,27286,57],{"class":39},[33,27288,27289],{"class":60},"\"your_huggingface_token\"\n",[33,27291,27292,27295,27298,27301,27304,27306,27309,27311],{"class":35,"line":51},[33,27293,27294],{"class":43},"hf",[33,27296,27297],{"class":60}," auth",[33,27299,27300],{"class":60}," login",[33,27302,27303],{"class":72}," --token",[33,27305,11969],{"class":60},[33,27307,27308],{"class":47},"$HF_TOKEN",[33,27310,397],{"class":60},[33,27312,27313],{"class":72}," --add-to-git-credential\n",[19,27315,27316,27319],{},[30,27317,27318],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27321,27323],{"id":27322},"_52-验证登录","5.2 验证登录",[23,27325,27327],{"className":26060,"code":27326,"language":26062,"meta":28,"style":28},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[30,27328,27329,27360],{"__ignoreMap":28},[33,27330,27331,27334,27336,27339,27341,27343,27346,27349,27352,27355,27358],{"class":35,"line":36},[33,27332,27333],{"class":47},"HF_USER",[33,27335,57],{"class":39},[33,27337,27338],{"class":47},"$(",[33,27340,27294],{"class":43},[33,27342,27297],{"class":60},[33,27344,27345],{"class":60}," whoami",[33,27347,27348],{"class":39}," |",[33,27350,27351],{"class":43}," head",[33,27353,27354],{"class":72}," -n",[33,27356,27357],{"class":72}," 1",[33,27359,226],{"class":47},[33,27361,27362,27365,27367,27370],{"class":35,"line":51},[33,27363,27364],{"class":72},"echo",[33,27366,11969],{"class":60},[33,27368,27369],{"class":47},"$HF_USER",[33,27371,27372],{"class":60},"\"\n",[19,27374,27375],{},[3736,27376],{"alt":28,"src":27377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27379,27381],{"id":27380},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27383,27384],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3413,27386,27387,27390],{},[331,27388,27389],{},"Dataset Repo（用于上传演示数据）",[331,27391,27392],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27394,27395],{},[3736,27396],{"alt":28,"src":27397},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27399,27400],{},[3736,27401],{"alt":28,"src":27402},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27404,27405],{},[3736,27406],{"alt":28,"src":27407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27409,27410],{},[3736,27411],{"alt":28,"src":27412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2331,27414,27415],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":27417},[27418,27419,27420],{"id":27257,"depth":51,"text":27258},{"id":27322,"depth":51,"text":27323},{"id":27380,"depth":51,"text":27381},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":27248,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27427,"title":27428,"body":27429,"description":2359,"extension":2360,"meta":27626,"navigation":99,"path":27627,"seo":27628,"stem":27629,"__hash__":27630},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27430,"toc":27621},[27431,27435,27439,27535,27543,27548,27552,27568,27571,27575,27618],[10,27432,27434],{"id":27433},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27436,27438],{"id":27437},"_61-录制示教数据","6.1 录制示教数据",[23,27440,27442],{"className":26060,"code":27441,"language":26062,"meta":28,"style":28},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.num_episodes=10 \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --resume=true\n",[30,27443,27444,27451,27457,27463,27469,27478,27484,27490,27496,27503,27513,27520,27530],{"__ignoreMap":28},[33,27445,27446,27449],{"class":35,"line":36},[33,27447,27448],{"class":43},"lerobot-record",[33,27450,26917],{"class":72},[33,27452,27453,27455],{"class":35,"line":51},[33,27454,26949],{"class":72},[33,27456,26917],{"class":72},[33,27458,27459,27461],{"class":35,"line":64},[33,27460,27027],{"class":72},[33,27462,26917],{"class":72},[33,27464,27465,27467],{"class":35,"line":76},[33,27466,27087],{"class":72},[33,27468,26917],{"class":72},[33,27470,27471,27473,27476],{"class":35,"line":87},[33,27472,27156],{"class":72},[33,27474,27475],{"class":60},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[33,27477,26917],{"class":72},[33,27479,27480,27482],{"class":35,"line":96},[33,27481,26922],{"class":72},[33,27483,26917],{"class":72},[33,27485,27486,27488],{"class":35,"line":103},[33,27487,26994],{"class":72},[33,27489,26917],{"class":72},[33,27491,27492,27494],{"class":35,"line":108},[33,27493,27178],{"class":72},[33,27495,26917],{"class":72},[33,27497,27498,27501],{"class":35,"line":119},[33,27499,27500],{"class":72},"  --display_data=true",[33,27502,26917],{"class":72},[33,27504,27505,27508,27511],{"class":35,"line":128},[33,27506,27507],{"class":72},"  --dataset.repo_id=",[33,27509,27510],{"class":60},"\"Embodied-AI-6\u002Fso101_test\"",[33,27512,26917],{"class":72},[33,27514,27515,27518],{"class":35,"line":1753},[33,27516,27517],{"class":72},"  --dataset.num_episodes=10",[33,27519,26917],{"class":72},[33,27521,27522,27525,27528],{"class":35,"line":1763},[33,27523,27524],{"class":72},"  --dataset.single_task=",[33,27526,27527],{"class":60},"\"Grab the green cube\"",[33,27529,26917],{"class":72},[33,27531,27532],{"class":35,"line":1775},[33,27533,27534],{"class":72},"  --resume=true\n",[3413,27536,27537],{},[331,27538,27539,27542],{},[30,27540,27541],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27544,27545],{},[3736,27546],{"alt":28,"src":27547},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27549,27551],{"id":27550},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[23,27553,27555],{"className":26060,"code":27554,"language":26062,"meta":28,"style":28},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[30,27556,27557],{"__ignoreMap":28},[33,27558,27559,27562,27565],{"class":35,"line":36},[33,27560,27561],{"class":43},"rm",[33,27563,27564],{"class":72}," -rf",[33,27566,27567],{"class":60}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27569,27570],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27572,27574],{"id":27573},"_63-回放指定-episode","6.3 回放指定 episode",[23,27576,27578],{"className":26060,"code":27577,"language":26062,"meta":28,"style":28},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[30,27579,27580,27587,27593,27599,27605,27613],{"__ignoreMap":28},[33,27581,27582,27585],{"class":35,"line":36},[33,27583,27584],{"class":43},"lerobot-replay",[33,27586,26917],{"class":72},[33,27588,27589,27591],{"class":35,"line":51},[33,27590,26949],{"class":72},[33,27592,26917],{"class":72},[33,27594,27595,27597],{"class":35,"line":64},[33,27596,27027],{"class":72},[33,27598,26917],{"class":72},[33,27600,27601,27603],{"class":35,"line":76},[33,27602,27087],{"class":72},[33,27604,26917],{"class":72},[33,27606,27607,27609,27611],{"class":35,"line":87},[33,27608,27507],{"class":72},[33,27610,27510],{"class":60},[33,27612,26917],{"class":72},[33,27614,27615],{"class":35,"line":96},[33,27616,27617],{"class":72},"  --dataset.episode=0\n",[2331,27619,27620],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":27622},[27623,27624,27625],{"id":27437,"depth":51,"text":27438},{"id":27550,"depth":51,"text":27551},{"id":27573,"depth":51,"text":27574},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27428,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27632,"title":27633,"body":27634,"description":2359,"extension":2360,"meta":27762,"navigation":99,"path":27763,"seo":27764,"stem":27765,"__hash__":27766},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27635,"toc":27760},[27636,27640,27703,27706,27753,27758],[10,27637,27639],{"id":27638},"_7-act-模型训练","7. ACT 模型训练",[23,27641,27643],{"className":26060,"code":27642,"language":26062,"meta":28,"style":28},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[30,27644,27645,27652,27660,27667,27674,27681,27688,27695],{"__ignoreMap":28},[33,27646,27647,27650],{"class":35,"line":36},[33,27648,27649],{"class":43},"lerobot-train",[33,27651,26917],{"class":72},[33,27653,27654,27656,27658],{"class":35,"line":51},[33,27655,27507],{"class":72},[33,27657,27510],{"class":60},[33,27659,26917],{"class":72},[33,27661,27662,27665],{"class":35,"line":64},[33,27663,27664],{"class":72},"  --policy.type=act",[33,27666,26917],{"class":72},[33,27668,27669,27672],{"class":35,"line":76},[33,27670,27671],{"class":72},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[33,27673,26917],{"class":72},[33,27675,27676,27679],{"class":35,"line":87},[33,27677,27678],{"class":72},"  --job_name=act_so101_test",[33,27680,26917],{"class":72},[33,27682,27683,27686],{"class":35,"line":96},[33,27684,27685],{"class":72},"  --policy.device=cuda",[33,27687,26917],{"class":72},[33,27689,27690,27693],{"class":35,"line":103},[33,27691,27692],{"class":72},"  --wandb.enable=false",[33,27694,26917],{"class":72},[33,27696,27697,27700],{"class":35,"line":108},[33,27698,27699],{"class":72},"  --policy.repo_id=",[33,27701,27702],{"class":60},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27704,27705],{},"参数说明：",[3413,27707,27708,27714,27720,27726,27732,27741,27747],{},[331,27709,27710,27713],{},[30,27711,27712],{},"--dataset.repo_id","：训练数据集仓库。",[331,27715,27716,27719],{},[30,27717,27718],{},"--policy.type=act","：策略模型类型为 ACT。",[331,27721,27722,27725],{},[30,27723,27724],{},"--output_dir","：本地训练输出目录。",[331,27727,27728,27731],{},[30,27729,27730],{},"--job_name","：训练任务名称。",[331,27733,27734,27737,27738,26801],{},[30,27735,27736],{},"--policy.device","：训练设备（如 ",[30,27739,27740],{},"cuda",[331,27742,27743,27746],{},[30,27744,27745],{},"--wandb.enable","：是否启用 WandB 可视化。",[331,27748,27749,27752],{},[30,27750,27751],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27754,27755],{},[3736,27756],{"alt":28,"src":27757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2331,27759,27620],{},{"title":28,"searchDepth":51,"depth":51,"links":27761},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27633,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27768,"title":27769,"body":27770,"description":2359,"extension":2360,"meta":27857,"navigation":99,"path":27858,"seo":27859,"stem":27860,"__hash__":27861},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27771,"toc":27855},[27772,27775,27778,27845,27853],[10,27773,27769],{"id":27774},"_8-策略部署与自动采集",[19,27776,27777],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[23,27779,27781],{"className":26060,"code":27780,"language":26062,"meta":28,"style":28},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[30,27782,27783,27789,27795,27801,27809,27815,27822,27830,27838],{"__ignoreMap":28},[33,27784,27785,27787],{"class":35,"line":36},[33,27786,27448],{"class":43},[33,27788,26917],{"class":72},[33,27790,27791,27793],{"class":35,"line":51},[33,27792,26949],{"class":72},[33,27794,26917],{"class":72},[33,27796,27797,27799],{"class":35,"line":64},[33,27798,27027],{"class":72},[33,27800,26917],{"class":72},[33,27802,27803,27805,27807],{"class":35,"line":76},[33,27804,27156],{"class":72},[33,27806,27475],{"class":60},[33,27808,26917],{"class":72},[33,27810,27811,27813],{"class":35,"line":87},[33,27812,27087],{"class":72},[33,27814,26917],{"class":72},[33,27816,27817,27820],{"class":35,"line":96},[33,27818,27819],{"class":72},"  --display_data=false",[33,27821,26917],{"class":72},[33,27823,27824,27826,27828],{"class":35,"line":103},[33,27825,27507],{"class":72},[33,27827,27510],{"class":60},[33,27829,26917],{"class":72},[33,27831,27832,27834,27836],{"class":35,"line":108},[33,27833,27524],{"class":72},[33,27835,27527],{"class":60},[33,27837,26917],{"class":72},[33,27839,27840,27843],{"class":35,"line":119},[33,27841,27842],{"class":72},"  --policy.path=",[33,27844,27702],{"class":60},[3413,27846,27847],{},[331,27848,27849,27852],{},[30,27850,27851],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2331,27854,27620],{},{"title":28,"searchDepth":51,"depth":51,"links":27856},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27769,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27863,"title":27864,"body":27865,"description":2359,"extension":2360,"meta":27894,"navigation":99,"path":27895,"seo":27896,"stem":27897,"__hash__":27898},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27866,"toc":27892},[27867,27871,27874,27880,27883,27889],[10,27868,27870],{"id":27869},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27872,27873],{},"项目地址：",[19,27875,27876],{},[2663,27877,27878],{"href":27878,"rel":27879},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[26103],[19,27881,27882],{},"参考教程：",[19,27884,27885],{},[2663,27886,27887],{"href":27887,"rel":27888},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[26103],[19,27890,27891],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":28,"searchDepth":51,"depth":51,"links":27893},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27864,"description":2359},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27900,"title":27901,"body":27902,"description":27906,"extension":2360,"meta":27907,"navigation":99,"path":27908,"seo":27909,"stem":27910,"__hash__":27911},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27903,"toc":27904},[],{"title":28,"searchDepth":51,"depth":51,"links":27905},[],"act复现",{"category":25616},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27901,"description":27906},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27913,"title":27914,"body":27915,"description":28,"extension":2360,"meta":28217,"navigation":99,"path":28218,"seo":28219,"stem":28220,"__hash__":28221},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27916,"toc":28209},[27917,27920,27924,27934,27941,27948,27951,27958,27961,27964,27968,27980,27984,28030,28033,28036,28039,28042,28045,28049,28087,28093,28097,28151,28156,28159,28162,28167,28170,28175,28178,28181,28185,28188,28191,28195],[10,27918,27914],{"id":27919},"_1简介",[631,27921,27923],{"id":27922},"_11什么是-docker","1.1什么是 Docker？",[19,27925,27926,27927,27930,27931],{},"Docker 是一个开源的 ",[2575,27928,27929],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2575,27932,27933],{},"一次构建，到处运行。",[19,27935,27936,27937,27940],{},"“ ",[2575,27938,27939],{},"一次构建，到处运行"," ”也就是说：",[328,27942,27943],{},[331,27944,27945],{},[2575,27946,27947],{},"之前：",[19,27949,27950],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[328,27952,27953],{},[331,27954,27955],{},[2575,27956,27957],{},"使用docker后：",[19,27959,27960],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27962,27963],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[631,27965,27967],{"id":27966},"_12它是怎么工作的","1.2.它是怎么工作的？",[3413,27969,27970,27973],{},[331,27971,27972],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[331,27974,27975,27976,27979],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2575,27977,27978],{},"无论在哪运行都一样稳定"," 。",[631,27981,27983],{"id":27982},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2563,27985,27986,27996],{},[2566,27987,27988],{},[2569,27989,27990,27993],{},[2572,27991,27992],{"align":25974},"概念",[2572,27994,27995],{"align":25974},"解释",[2610,27997,27998,28006,28014,28022],{},[2569,27999,28000,28003],{},[2615,28001,28002],{"align":25974},"镜像",[2615,28004,28005],{"align":25974},"Image，运行容器的模板，像是一个应用快照",[2569,28007,28008,28011],{},[2615,28009,28010],{"align":25974},"容器",[2615,28012,28013],{"align":25974},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2569,28015,28016,28019],{},[2615,28017,28018],{"align":25974},"Dockerfile",[2615,28020,28021],{"align":25974},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2569,28023,28024,28027],{},[2615,28025,28026],{"align":25974},"仓库",[2615,28028,28029],{"align":25974},"Registry，存放镜像的地方，比如 Docker Hub",[19,28031,28032],{},"抽象化理解:",[19,28034,28035],{},"Docker镜像≈C++类",[19,28037,28038],{},"Docker容器≈C++类实例(即对象)",[19,28040,28041],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,28043,28044],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[631,28046,28048],{"id":28047},"_14类比理解","1.4.类比理解",[2563,28050,28051,28061],{},[2566,28052,28053],{},[2569,28054,28055,28058],{},[2572,28056,28057],{"align":25974},"传统部署",[2572,28059,28060],{"align":25974},"Docker部署",[2610,28062,28063,28071,28079],{},[2569,28064,28065,28068],{},[2615,28066,28067],{"align":25974},"手动安装依赖、调试版本不一致问题",[2615,28069,28070],{"align":25974},"一次打包环境和代码",[2569,28072,28073,28076],{},[2615,28074,28075],{"align":25974},"程序“裸奔”跑在系统上",[2615,28077,28078],{"align":25974},"程序“穿着容器”隔离运行",[2569,28080,28081,28084],{},[2615,28082,28083],{"align":25974},"容易“在我电脑上能跑”",[2615,28085,28086],{"align":25974},"保证“无论在哪都能跑”",[19,28088,28089,28090],{},"就像快递包裹： ",[2575,28091,28092],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[631,28094,28096],{"id":28095},"_15docker-的核心优势","1.5.Docker 的核心优势",[2563,28098,28099,28109],{},[2566,28100,28101],{},[2569,28102,28103,28106],{},[2572,28104,28105],{"align":25974},"优势",[2572,28107,28108],{"align":25974},"说明",[2610,28110,28111,28119,28127,28135,28143],{},[2569,28112,28113,28116],{},[2615,28114,28115],{"align":25974},"轻量级",[2615,28117,28118],{"align":25974},"基于系统内核共享，启动速度快，占资源少",[2569,28120,28121,28124],{},[2615,28122,28123],{"align":25974},"跨平台",[2615,28125,28126],{"align":25974},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2569,28128,28129,28132],{},[2615,28130,28131],{"align":25974},"易于迁移部署",[2615,28133,28134],{"align":25974},"应用和环境一起封装，不怕依赖不一致",[2569,28136,28137,28140],{},[2615,28138,28139],{"align":25974},"易于版本控制",[2615,28141,28142],{"align":25974},"镜像版本可控，支持回滚",[2569,28144,28145,28148],{},[2615,28146,28147],{"align":25974},"生态丰富",[2615,28149,28150],{"align":25974},"Docker Hub 上有成千上万的现成镜像可用",[328,28152,28153],{},[331,28154,28155],{},"在Linux上可以几乎实现无性能损失。",[19,28157,28158],{},"docker里的发行版和本机共用Linux内核。",[19,28160,28161],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[328,28163,28164],{},[331,28165,28166],{},"可以快速部署在绝大多数Linux发行版",[19,28168,28169],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[328,28171,28172],{},[331,28173,28174],{},"配置环境简单",[19,28176,28177],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,28179,28180],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[328,28182,28183],{},[331,28184,28147],{},[19,28186,28187],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,28189,28190],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[631,28192,28194],{"id":28193},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3413,28196,28197,28200,28203,28206],{},[331,28198,28199],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[331,28201,28202],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[331,28204,28205],{},"微服务架构：每个服务一个容器，灵活组合",[331,28207,28208],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":28,"searchDepth":51,"depth":51,"links":28210},[28211,28212,28213,28214,28215,28216],{"id":27922,"depth":64,"text":27923},{"id":27966,"depth":64,"text":27967},{"id":27982,"depth":64,"text":27983},{"id":28047,"depth":64,"text":28048},{"id":28095,"depth":64,"text":28096},{"id":28193,"depth":64,"text":28194},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27914,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":28223,"title":28224,"body":28225,"description":28,"extension":2360,"meta":28957,"navigation":99,"path":28958,"seo":28959,"stem":28960,"__hash__":28961},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":28226,"toc":28952},[28227,28230,28234,28237,28240,28246,28252,28256,28265,28268,28324,28327,28378,28381,28464,28467,28504,28508,28519,28532,28539,28542,28622,28625,28675,28678,28701,28705,28712,28715,28731,28737,28740,28756,28762,28765,28781,28795,28801,28821,28827,28830,28842,28848,28851,28865,28871,28874,28894,28899,28902,28905,28909,28912,28915,28918,28925,28928,28931,28934,28939,28944,28949],[10,28228,28224],{"id":28229},"_2安装docker",[631,28231,28233],{"id":28232},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,28235,28236],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,28238,28239],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,28241,28242],{},[2663,28243,28244],{"href":28244,"rel":28245},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[26103],[19,28247,28248],{},[2663,28249,28250],{"href":28250,"rel":28251},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[26103],[24236,28253,28255],{"id":28254},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,28257,28258,28259,28264],{},"以下内容根据 ",[2663,28260,28263],{"href":28261,"rel":28262},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[26103],"官方文档"," 修改而来。",[19,28266,28267],{},"如果你过去安装过 docker，先删掉：",[23,28269,28271],{"className":26060,"code":28270,"language":26062,"meta":28,"style":28},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[30,28272,28273],{"__ignoreMap":28},[33,28274,28275,28277,28280,28282,28285,28288,28291,28294,28297,28300,28303,28306,28309,28312,28315,28318,28321],{"class":35,"line":36},[33,28276,5282],{"class":39},[33,28278,28279],{"class":47}," pkg ",[33,28281,681],{"class":39},[33,28283,28284],{"class":60}," docker.io",[33,28286,28287],{"class":60}," docker-doc",[33,28289,28290],{"class":60}," docker-compose",[33,28292,28293],{"class":60}," docker-compose-v2",[33,28295,28296],{"class":60}," podman-docker",[33,28298,28299],{"class":60}," containerd",[33,28301,28302],{"class":60}," runc",[33,28304,28305],{"class":47},"; ",[33,28307,28308],{"class":39},"do",[33,28310,28311],{"class":43}," sudo",[33,28313,28314],{"class":60}," apt-get",[33,28316,28317],{"class":60}," remove",[33,28319,28320],{"class":47}," $pkg; ",[33,28322,28323],{"class":39},"done\n",[19,28325,28326],{},"首先安装依赖和GPG：",[23,28328,28332],{"className":28329,"code":28330,"language":28331,"meta":28,"style":28},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[30,28333,28334,28339,28344,28349,28354,28359,28364,28368,28373],{"__ignoreMap":28},[33,28335,28336],{"class":35,"line":36},[33,28337,28338],{},"# Add Docker's official GPG key:\n",[33,28340,28341],{"class":35,"line":51},[33,28342,28343],{},"sudo apt-get update\n",[33,28345,28346],{"class":35,"line":64},[33,28347,28348],{},"sudo apt-get install ca-certificates curl\n",[33,28350,28351],{"class":35,"line":76},[33,28352,28353],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[33,28355,28356],{"class":35,"line":87},[33,28357,28358],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[33,28360,28361],{"class":35,"line":96},[33,28362,28363],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[33,28365,28366],{"class":35,"line":103},[33,28367,100],{"emptyLinePlaceholder":99},[33,28369,28370],{"class":35,"line":108},[33,28371,28372],{},"# 如果上面这行报错就弄下面这行\n",[33,28374,28375],{"class":35,"line":119},[33,28376,28377],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28379,28380],{},"信任 Docker 的 GPG 公钥并添加仓库：",[23,28382,28384],{"className":26060,"code":28383,"language":26062,"meta":28,"style":28},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[30,28385,28386,28391,28397,28414,28447],{"__ignoreMap":28},[33,28387,28388],{"class":35,"line":36},[33,28389,28390],{"class":2487},"# Add the repository to Apt sources:\n",[33,28392,28393,28395],{"class":35,"line":51},[33,28394,27364],{"class":72},[33,28396,26917],{"class":72},[33,28398,28399,28402,28405,28408,28411],{"class":35,"line":64},[33,28400,28401],{"class":60},"  \"deb [arch=$(",[33,28403,28404],{"class":43},"dpkg",[33,28406,28407],{"class":72}," --print-architecture",[33,28409,28410],{"class":60},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[33,28412,28413],{"class":72},"\\\n",[33,28415,28416,28419,28421,28423,28426,28429,28431,28433,28436,28438,28440,28443,28445],{"class":35,"line":76},[33,28417,28418],{"class":60},"  \"",[33,28420,27338],{"class":47},[33,28422,2975],{"class":72},[33,28424,28425],{"class":60}," \u002Fetc\u002Fos-release",[33,28427,28428],{"class":47}," && ",[33,28430,27364],{"class":72},[33,28432,11969],{"class":60},[33,28434,28435],{"class":47},"$VERSION_CODENAME",[33,28437,397],{"class":60},[33,28439,2849],{"class":47},[33,28441,28442],{"class":60},"\" stable\"",[33,28444,27348],{"class":39},[33,28446,26917],{"class":72},[33,28448,28449,28452,28455,28458,28461],{"class":35,"line":87},[33,28450,28451],{"class":43},"  sudo",[33,28453,28454],{"class":60}," tee",[33,28456,28457],{"class":60}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[33,28459,28460],{"class":39}," >",[33,28462,28463],{"class":60}," \u002Fdev\u002Fnull\n",[19,28465,28466],{},"最后安装",[23,28468,28470],{"className":26060,"code":28469,"language":26062,"meta":28,"style":28},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,28471,28472,28481],{"__ignoreMap":28},[33,28473,28474,28476,28478],{"class":35,"line":36},[33,28475,26815],{"class":43},[33,28477,28314],{"class":60},[33,28479,28480],{"class":60}," update\n",[33,28482,28483,28485,28487,28489,28492,28495,28498,28501],{"class":35,"line":51},[33,28484,26815],{"class":43},[33,28486,28314],{"class":60},[33,28488,26072],{"class":60},[33,28490,28491],{"class":60}," docker-ce",[33,28493,28494],{"class":60}," docker-ce-cli",[33,28496,28497],{"class":60}," containerd.io",[33,28499,28500],{"class":60}," docker-buildx-plugin",[33,28502,28503],{"class":60}," docker-compose-plugin\n",[24236,28505,28507],{"id":28506},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28509,28510,28511,28514,28515,28518],{},"查看自己自己包管理工具版本（dnf是 ",[2575,28512,28513],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2575,28516,28517],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[23,28520,28522],{"className":26060,"code":28521,"language":26062,"meta":28,"style":28},"dnf --version\n",[30,28523,28524],{"__ignoreMap":28},[33,28525,28526,28529],{"class":35,"line":36},[33,28527,28528],{"class":43},"dnf",[33,28530,28531],{"class":72}," --version\n",[19,28533,28258,28534,28538],{},[2663,28535,28263],{"href":28536,"rel":28537},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[26103]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28540,28541],{},"如果你之前安装过 docker，请先删掉",[23,28543,28545],{"className":26060,"code":28544,"language":26062,"meta":28,"style":28},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[30,28546,28547,28561,28568,28575,28582,28589,28596,28603,28610,28617],{"__ignoreMap":28},[33,28548,28549,28551,28554,28556,28559],{"class":35,"line":36},[33,28550,26815],{"class":43},[33,28552,28553],{"class":60}," dnf",[33,28555,28317],{"class":60},[33,28557,28558],{"class":60}," docker",[33,28560,26917],{"class":72},[33,28562,28563,28566],{"class":35,"line":51},[33,28564,28565],{"class":60},"                  docker-client",[33,28567,26917],{"class":72},[33,28569,28570,28573],{"class":35,"line":64},[33,28571,28572],{"class":60},"                  docker-client-latest",[33,28574,26917],{"class":72},[33,28576,28577,28580],{"class":35,"line":76},[33,28578,28579],{"class":60},"                  docker-common",[33,28581,26917],{"class":72},[33,28583,28584,28587],{"class":35,"line":87},[33,28585,28586],{"class":60},"                  docker-latest",[33,28588,26917],{"class":72},[33,28590,28591,28594],{"class":35,"line":96},[33,28592,28593],{"class":60},"                  docker-latest-logrotate",[33,28595,26917],{"class":72},[33,28597,28598,28601],{"class":35,"line":103},[33,28599,28600],{"class":60},"                  docker-logrotate",[33,28602,26917],{"class":72},[33,28604,28605,28608],{"class":35,"line":108},[33,28606,28607],{"class":60},"                  docker-selinux",[33,28609,26917],{"class":72},[33,28611,28612,28615],{"class":35,"line":119},[33,28613,28614],{"class":60},"                  docker-engine-selinux",[33,28616,26917],{"class":72},[33,28618,28619],{"class":35,"line":128},[33,28620,28621],{"class":60},"                  docker-engine\n",[19,28623,28624],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[23,28626,28628],{"className":26060,"code":28627,"language":26062,"meta":28,"style":28},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[30,28629,28630,28644,28659],{"__ignoreMap":28},[33,28631,28632,28634,28636,28639,28641],{"class":35,"line":36},[33,28633,26815],{"class":43},[33,28635,28553],{"class":60},[33,28637,28638],{"class":72}," -y",[33,28640,26072],{"class":60},[33,28642,28643],{"class":60}," dnf-plugins-core\n",[33,28645,28646,28648,28650,28653,28656],{"class":35,"line":51},[33,28647,26815],{"class":43},[33,28649,28553],{"class":60},[33,28651,28652],{"class":60}," config-manager",[33,28654,28655],{"class":60}," addrepo",[33,28657,28658],{"class":72}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[33,28660,28661,28663,28666,28669,28672],{"class":35,"line":64},[33,28662,26815],{"class":43},[33,28664,28665],{"class":60}," sed",[33,28667,28668],{"class":72}," -i",[33,28670,28671],{"class":60}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[33,28673,28674],{"class":60}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28676,28677],{},"最后安装：",[23,28679,28681],{"className":26060,"code":28680,"language":26062,"meta":28,"style":28},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,28682,28683],{"__ignoreMap":28},[33,28684,28685,28687,28689,28691,28693,28695,28697,28699],{"class":35,"line":36},[33,28686,26815],{"class":43},[33,28688,28553],{"class":60},[33,28690,26072],{"class":60},[33,28692,28491],{"class":60},[33,28694,28494],{"class":60},[33,28696,28497],{"class":60},[33,28698,28500],{"class":60},[33,28700,28503],{"class":60},[631,28702,28704],{"id":28703},"_22配置环境","2.2.配置环境",[24236,28706,28708,28711],{"id":28707},"_221检查-docker-服务状态",[2575,28709,28710],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28713,28714],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[23,28716,28718],{"className":26060,"code":28717,"language":26062,"meta":28,"style":28},"systemctl status docker\n",[30,28719,28720],{"__ignoreMap":28},[33,28721,28722,28725,28728],{"class":35,"line":36},[33,28723,28724],{"class":43},"systemctl",[33,28726,28727],{"class":60}," status",[33,28729,28730],{"class":60}," docker\n",[24236,28732,28734,28711],{"id":28733},"_222启动-docker-服务",[2575,28735,28736],{},"2.2.2.启动 Docker 服务",[19,28738,28739],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[23,28741,28743],{"className":26060,"code":28742,"language":26062,"meta":28,"style":28},"sudo systemctl start docker\n",[30,28744,28745],{"__ignoreMap":28},[33,28746,28747,28749,28752,28754],{"class":35,"line":36},[33,28748,26815],{"class":43},[33,28750,28751],{"class":60}," systemctl",[33,28753,6436],{"class":60},[33,28755,28730],{"class":60},[24236,28757,28759,28711],{"id":28758},"_223设置-docker-开机自启",[2575,28760,28761],{},"2.2.3.设置 Docker 开机自启",[19,28763,28764],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[23,28766,28768],{"className":26060,"code":28767,"language":26062,"meta":28,"style":28},"sudo systemctl enable docker\n",[30,28769,28770],{"__ignoreMap":28},[33,28771,28772,28774,28776,28779],{"class":35,"line":36},[33,28773,26815],{"class":43},[33,28775,28751],{"class":60},[33,28777,28778],{"class":60}," enable",[33,28780,28730],{"class":60},[24236,28782,28784,16035,28787,16035,28792,28711],{"id":28783},"_224将用户添加到-docker-组",[2575,28785,28786],{},"2.2.4.将用户添加到",[2575,28788,28789],{},[30,28790,28791],{},"docker",[2575,28793,28794],{},"组",[19,28796,28797,28798,28800],{},"使用以下命令将当前用户添加到 ",[30,28799,28791],{}," 组：",[23,28802,28804],{"className":26060,"code":28803,"language":26062,"meta":28,"style":28},"sudo usermod -aG docker $USER\n",[30,28805,28806],{"__ignoreMap":28},[33,28807,28808,28810,28813,28816,28818],{"class":35,"line":36},[33,28809,26815],{"class":43},[33,28811,28812],{"class":60}," usermod",[33,28814,28815],{"class":72}," -aG",[33,28817,28558],{"class":60},[33,28819,28820],{"class":47}," $USER\n",[24236,28822,28824,28711],{"id":28823},"_225退出并重新登录",[2575,28825,28826],{},"2.2.5.退出并重新登录",[19,28828,28829],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[23,28831,28833],{"className":26060,"code":28832,"language":26062,"meta":28,"style":28},"newgrp docker\n",[30,28834,28835],{"__ignoreMap":28},[33,28836,28837,28840],{"class":35,"line":36},[33,28838,28839],{"class":43},"newgrp",[33,28841,28730],{"class":60},[24236,28843,28845,28711],{"id":28844},"_226重新启动-docker-服务如果需要",[2575,28846,28847],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28849,28850],{},"确保 Docker 服务正在运行，可以使用以下命令：",[23,28852,28853],{"className":26060,"code":28742,"language":26062,"meta":28,"style":28},[30,28854,28855],{"__ignoreMap":28},[33,28856,28857,28859,28861,28863],{"class":35,"line":36},[33,28858,26815],{"class":43},[33,28860,28751],{"class":60},[33,28862,6436],{"class":60},[33,28864,28730],{"class":60},[24236,28866,28868,28711],{"id":28867},"_227重启电脑后检查-docker-服务状态",[2575,28869,28870],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28872,28873],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[23,28875,28877],{"className":26060,"code":28876,"language":26062,"meta":28,"style":28},"sudo reboot\nsystemctl status docker\n",[30,28878,28879,28886],{"__ignoreMap":28},[33,28880,28881,28883],{"class":35,"line":36},[33,28882,26815],{"class":43},[33,28884,28885],{"class":60}," reboot\n",[33,28887,28888,28890,28892],{"class":35,"line":51},[33,28889,28724],{"class":43},[33,28891,28727],{"class":60},[33,28893,28730],{"class":60},[19,28895,28896],{},[3736,28897],{"alt":28,"src":28898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28900,28901],{},"第三行显示enabled说明开机自启动成功",[19,28903,28904],{},"按q退出",[631,28906,28908],{"id":28907},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28910,28911],{},"优先使用linux来使用docker是比较好的",[19,28913,28914],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28916,28917],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28919,28920,28921],{},"官方下载安装:",[2663,28922,28923],{"href":28923,"rel":28924},"https:\u002F\u002Fwww.docker.com\u002F",[26103],[19,28926,28927],{},"Windows的Docker显卡直通与USB直通:",[19,28929,28930],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28932,28933],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28935,28936],{},[3736,28937],{"alt":28,"src":28938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28940,28941],{},[3736,28942],{"alt":28,"src":28943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28945,28946],{},[3736,28947],{"alt":28,"src":28948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2331,28950,28951],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":28,"searchDepth":51,"depth":51,"links":28953},[28954,28955,28956],{"id":28232,"depth":64,"text":28233},{"id":28703,"depth":64,"text":28704},{"id":28907,"depth":64,"text":28908},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":28224,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28963,"title":28964,"body":28965,"description":28972,"extension":2360,"meta":29664,"navigation":99,"path":29665,"seo":29666,"stem":29667,"__hash__":29668},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28966,"toc":29658},[28967,28970,28973,28977,28982,28987,28990,29018,29023,29032,29035,29040,29044,29051,29056,29062,29066,29069,29073,29078,29170,29175,29193,29198,29219,29224,29240,29244,29249,29278,29283,29329,29334,29378,29386,29403,29408,29424,29429,29443,29446,29449,29452,29455,29484,29487,29492,29496,29499,29502,29508,29511,29514,29517,29579,29586,29591,29594,29612,29616,29619,29635,29638,29641,29655],[10,28968,28964],{"id":28969},"_3docker直通",[19,28971,28972],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[631,28974,28976],{"id":28975},"_31usb直通","3.1.USB直通",[19,28978,28979],{},[3736,28980],{"alt":28,"src":28981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[328,28983,28984],{},[331,28985,28986],{},"方法一(不是很推荐新手)：",[19,28988,28989],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[23,28991,28993],{"className":26060,"code":28992,"language":26062,"meta":28,"style":28},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[30,28994,28995,29003,29008],{"__ignoreMap":28},[33,28996,28997,29000],{"class":35,"line":36},[33,28998,28999],{"class":43},"ls",[33,29001,29002],{"class":60}," \u002Fdev\n",[33,29004,29005],{"class":35,"line":51},[33,29006,29007],{"class":2487},"#例如\n",[33,29009,29010,29013,29015],{"class":35,"line":64},[33,29011,29012],{"class":47},"--device",[33,29014,57],{"class":39},[33,29016,29017],{"class":60},"\u002Fdev\u002Ftty_USB0\n",[328,29019,29020],{"start":51},[331,29021,29022],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[23,29024,29026],{"className":26060,"code":29025,"language":26062,"meta":28,"style":28},"--privileged\n",[30,29027,29028],{"__ignoreMap":28},[33,29029,29030],{"class":35,"line":36},[33,29031,29025],{"class":43},[19,29033,29034],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,29036,29037],{},[3736,29038],{"alt":28,"src":29039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[631,29041,29043],{"id":29042},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,29045,29046,29047,29050],{},"NVIDIA Container Toolkit使用户 ",[2575,29048,29049],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,29052,29053],{},[3736,29054],{"alt":28,"src":29055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,29057,29058],{},[2663,29059,29060],{"href":29060,"rel":29061},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[26103],[24236,29063,29065],{"id":29064},"_321安装","3.2.1.安装",[19,29067,29068],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[25148,29070,29072],{"id":29071},"_3211ubuntu","3.2.1.1.Ubuntu",[328,29074,29075],{},[331,29076,29077],{},"配置存储库 并更新",[23,29079,29081],{"className":26060,"code":29080,"language":26062,"meta":28,"style":28},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[30,29082,29083,29112,29132,29144,29156,29162],{"__ignoreMap":28},[33,29084,29085,29088,29091,29094,29096,29098,29101,29104,29107,29110],{"class":35,"line":36},[33,29086,29087],{"class":43},"curl",[33,29089,29090],{"class":72}," -fsSL",[33,29092,29093],{"class":60}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[33,29095,27348],{"class":39},[33,29097,28311],{"class":43},[33,29099,29100],{"class":60}," gpg",[33,29102,29103],{"class":72}," --dearmor",[33,29105,29106],{"class":72}," -o",[33,29108,29109],{"class":60}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[33,29111,26917],{"class":72},[33,29113,29114,29117,29119,29122,29125,29128,29130],{"class":35,"line":51},[33,29115,29116],{"class":47},"  && ",[33,29118,29087],{"class":43},[33,29120,29121],{"class":72}," -s",[33,29123,29124],{"class":72}," -L",[33,29126,29127],{"class":60}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[33,29129,27348],{"class":39},[33,29131,26917],{"class":72},[33,29133,29134,29137,29140,29142],{"class":35,"line":64},[33,29135,29136],{"class":43},"    sed",[33,29138,29139],{"class":60}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[33,29141,27348],{"class":39},[33,29143,26917],{"class":72},[33,29145,29146,29149,29151,29154],{"class":35,"line":76},[33,29147,29148],{"class":43},"    sudo",[33,29150,28454],{"class":60},[33,29152,29153],{"class":60}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[33,29155,26917],{"class":72},[33,29157,29158,29160],{"class":35,"line":87},[33,29159,29116],{"class":47},[33,29161,28413],{"class":72},[33,29163,29164,29166,29168],{"class":35,"line":96},[33,29165,29148],{"class":43},[33,29167,28314],{"class":60},[33,29169,28480],{"class":60},[328,29171,29172],{"start":51},[331,29173,29174],{},"安装nvidia-docker2",[23,29176,29178],{"className":26060,"code":29177,"language":26062,"meta":28,"style":28},"sudo apt-get install -y nvidia-docker2\n",[30,29179,29180],{"__ignoreMap":28},[33,29181,29182,29184,29186,29188,29190],{"class":35,"line":36},[33,29183,26815],{"class":43},[33,29185,28314],{"class":60},[33,29187,26072],{"class":60},[33,29189,28638],{"class":72},[33,29191,29192],{"class":60}," nvidia-docker2\n",[328,29194,29195],{"start":64},[331,29196,29197],{},"使用nvidia-ctk命令配置container runtime",[23,29199,29201],{"className":26060,"code":29200,"language":26062,"meta":28,"style":28},"sudo nvidia-ctk runtime configure --runtime=docker\n",[30,29202,29203],{"__ignoreMap":28},[33,29204,29205,29207,29210,29213,29216],{"class":35,"line":36},[33,29206,26815],{"class":43},[33,29208,29209],{"class":60}," nvidia-ctk",[33,29211,29212],{"class":60}," runtime",[33,29214,29215],{"class":60}," configure",[33,29217,29218],{"class":72}," --runtime=docker\n",[328,29220,29221],{"start":76},[331,29222,29223],{},"重启docker服务:",[23,29225,29227],{"className":26060,"code":29226,"language":26062,"meta":28,"style":28},"sudo systemctl restart docker\n",[30,29228,29229],{"__ignoreMap":28},[33,29230,29231,29233,29235,29238],{"class":35,"line":36},[33,29232,26815],{"class":43},[33,29234,28751],{"class":60},[33,29236,29237],{"class":60}," restart",[33,29239,28730],{"class":60},[25148,29241,29243],{"id":29242},"_3212fedora","3.2.1.2.Fedora",[328,29245,29246],{},[331,29247,29248],{},"配置存储库",[23,29250,29252],{"className":26060,"code":29251,"language":26062,"meta":28,"style":28},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[30,29253,29254,29269],{"__ignoreMap":28},[33,29255,29256,29258,29260,29262,29265,29267],{"class":35,"line":36},[33,29257,29087],{"class":43},[33,29259,29121],{"class":72},[33,29261,29124],{"class":72},[33,29263,29264],{"class":60}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[33,29266,27348],{"class":39},[33,29268,26917],{"class":72},[33,29270,29271,29273,29275],{"class":35,"line":51},[33,29272,26815],{"class":43},[33,29274,28454],{"class":60},[33,29276,29277],{"class":60}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[328,29279,29280],{"start":51},[331,29281,29282],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[23,29284,29286],{"className":26060,"code":29285,"language":26062,"meta":28,"style":28},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[30,29287,29288,29293,29307,29311,29316],{"__ignoreMap":28},[33,29289,29290],{"class":35,"line":36},[33,29291,29292],{"class":2487},"# 如果是RHEL或者Rocky（DNF4）\n",[33,29294,29295,29297,29299,29301,29304],{"class":35,"line":51},[33,29296,26815],{"class":43},[33,29298,28553],{"class":60},[33,29300,28652],{"class":60},[33,29302,29303],{"class":72}," --add-repo",[33,29305,29306],{"class":60}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[33,29308,29309],{"class":35,"line":64},[33,29310,100],{"emptyLinePlaceholder":99},[33,29312,29313],{"class":35,"line":76},[33,29314,29315],{"class":2487},"# 如果是Feodra41+（DNF5）\n",[33,29317,29318,29320,29322,29324,29326],{"class":35,"line":87},[33,29319,26815],{"class":43},[33,29321,28553],{"class":60},[33,29323,28652],{"class":60},[33,29325,28655],{"class":60},[33,29327,29328],{"class":72}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[328,29330,29331],{"start":64},[331,29332,29333],{},"安装NVIDIA Container Toolki包",[23,29335,29337],{"className":26060,"code":29336,"language":26062,"meta":28,"style":28},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[30,29338,29339,29344,29357,29361,29366],{"__ignoreMap":28},[33,29340,29341],{"class":35,"line":36},[33,29342,29343],{"class":2487},"# 如果是RHEL或者Rocky\n",[33,29345,29346,29348,29350,29352,29354],{"class":35,"line":51},[33,29347,26815],{"class":43},[33,29349,28553],{"class":60},[33,29351,26072],{"class":60},[33,29353,28638],{"class":72},[33,29355,29356],{"class":60}," nvidia-container-toolkit\n",[33,29358,29359],{"class":35,"line":64},[33,29360,100],{"emptyLinePlaceholder":99},[33,29362,29363],{"class":35,"line":76},[33,29364,29365],{"class":2487},"# 如果是Fedora\n",[33,29367,29368,29370,29372,29374,29376],{"class":35,"line":87},[33,29369,26815],{"class":43},[33,29371,28553],{"class":60},[33,29373,26072],{"class":60},[33,29375,28638],{"class":72},[33,29377,29356],{"class":60},[328,29379,29380],{"start":76},[331,29381,29382,29383,29385],{},"安装nvidia-docker2 ： 在Fedora上使用",[30,29384,28528],{},"进行安装",[23,29387,29389],{"className":26060,"code":29388,"language":26062,"meta":28,"style":28},"sudo dnf install -y nvidia-docker2\n",[30,29390,29391],{"__ignoreMap":28},[33,29392,29393,29395,29397,29399,29401],{"class":35,"line":36},[33,29394,26815],{"class":43},[33,29396,28553],{"class":60},[33,29398,26072],{"class":60},[33,29400,28638],{"class":72},[33,29402,29192],{"class":60},[328,29404,29405],{"start":87},[331,29406,29407],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[23,29409,29410],{"className":26060,"code":29200,"language":26062,"meta":28,"style":28},[30,29411,29412],{"__ignoreMap":28},[33,29413,29414,29416,29418,29420,29422],{"class":35,"line":36},[33,29415,26815],{"class":43},[33,29417,29209],{"class":60},[33,29419,29212],{"class":60},[33,29421,29215],{"class":60},[33,29423,29218],{"class":72},[328,29425,29426],{"start":96},[331,29427,29428],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[23,29430,29431],{"className":26060,"code":29226,"language":26062,"meta":28,"style":28},[30,29432,29433],{"__ignoreMap":28},[33,29434,29435,29437,29439,29441],{"class":35,"line":36},[33,29436,26815],{"class":43},[33,29438,28751],{"class":60},[33,29440,29237],{"class":60},[33,29442,28730],{"class":60},[19,29444,29445],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29447,29448],{},"方法：",[19,29450,29451],{},"1️⃣nvidia-smi",[19,29453,29454],{},"2️⃣运行nvidia cuda 容器进行测试",[23,29456,29458],{"className":26060,"code":29457,"language":26062,"meta":28,"style":28},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[30,29459,29460],{"__ignoreMap":28},[33,29461,29462,29464,29466,29469,29472,29475,29478,29481],{"class":35,"line":36},[33,29463,26815],{"class":43},[33,29465,28558],{"class":60},[33,29467,29468],{"class":60}," run",[33,29470,29471],{"class":72}," --rm",[33,29473,29474],{"class":72}," --gpus",[33,29476,29477],{"class":60}," all",[33,29479,29480],{"class":60}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[33,29482,29483],{"class":60}," nvidia-smi\n",[19,29485,29486],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29488,29489],{},[3736,29490],{"alt":28,"src":29491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[631,29493,29495],{"id":29494},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29497,29498],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29500,29501],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29503,29504],{},[2663,29505,29506],{"href":29506,"rel":29507},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[26103],[19,29509,29510],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29512,29513],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29515,29516],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2563,29518,29519,29535],{},[2566,29520,29521],{},[2569,29522,29523,29526,29529,29532],{},[2572,29524,29525],{"align":25974},"镜像类型",[2572,29527,29528],{"align":25974},"适用场景",[2572,29530,29531],{"align":25974},"示例标签",[2572,29533,29534],{"align":25974},"大小",[2610,29536,29537,29551,29565],{},[2569,29538,29539,29542,29545,29548],{},[2615,29540,29541],{"align":25974},"base",[2615,29543,29544],{"align":25974},"仅需 CUDA 运行时库",[2615,29546,29547],{"align":25974},"12.4.0-base-ubuntu22.04",[2615,29549,29550],{"align":25974},"~240MB",[2569,29552,29553,29556,29559,29562],{},[2615,29554,29555],{"align":25974},"runtime",[2615,29557,29558],{"align":25974},"部署编译后的应用（含数学库）",[2615,29560,29561],{"align":25974},"12.4.0-runtime-ubuntu22.04",[2615,29563,29564],{"align":25974},"~2GB",[2569,29566,29567,29570,29573,29576],{},[2615,29568,29569],{"align":25974},"devel",[2615,29571,29572],{"align":25974},"开发环境（含编译工具）",[2615,29574,29575],{"align":25974},"12.4.0-devel-ubuntu22.04",[2615,29577,29578],{"align":25974},"~3GB",[19,29580,29581,29582,29585],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[30,29583,29584],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29587,29588],{},[3736,29589],{"alt":28,"src":29590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29592,29593],{},"在dockerfile里就可以开头这么写：",[23,29595,29597],{"className":26060,"code":29596,"language":26062,"meta":28,"style":28},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[30,29598,29599,29604],{"__ignoreMap":28},[33,29600,29601],{"class":35,"line":36},[33,29602,29603],{"class":2487},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[33,29605,29606,29609],{"class":35,"line":51},[33,29607,29608],{"class":43},"FROM",[33,29610,29611],{"class":60}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[631,29613,29615],{"id":29614},"_34配置以太网","3.4.配置以太网",[19,29617,29618],{},"指定网络模式",[23,29620,29622],{"className":26060,"code":29621,"language":26062,"meta":28,"style":28},"--net=host \\\n",[30,29623,29624],{"__ignoreMap":28},[33,29625,29626,29629,29631,29633],{"class":35,"line":36},[33,29627,29628],{"class":47},"--net",[33,29630,57],{"class":39},[33,29632,382],{"class":60},[33,29634,26917],{"class":43},[19,29636,29637],{},"启动参数里加上这行即可。具体在下方",[19,29639,29640],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3413,29642,29643,29646,29649,29652],{},[331,29644,29645],{},"--net=bridge:默认选项，表示连接到默认的网桥",[331,29647,29648],{},"--net=host:容器使用宿主机的网络",[331,29650,29651],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[331,29653,29654],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2331,29656,29657],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":28,"searchDepth":51,"depth":51,"links":29659},[29660,29661,29662,29663],{"id":28975,"depth":64,"text":28976},{"id":29042,"depth":64,"text":29043},{"id":29494,"depth":64,"text":29495},{"id":29614,"depth":64,"text":29615},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28964,"description":28972},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29670,"title":29671,"body":29672,"description":29679,"extension":2360,"meta":29685,"navigation":99,"path":29686,"seo":29687,"stem":29688,"__hash__":29689},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29673,"toc":29683},[29674,29677,29680],[10,29675,29671],{"id":29676},"_4dockerhub换源",[19,29678,29679],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29681,29682],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":28,"searchDepth":51,"depth":51,"links":29684},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29671,"description":29679},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29691,"title":29692,"body":29693,"description":28,"extension":2360,"meta":30705,"navigation":99,"path":30706,"seo":30707,"stem":30708,"__hash__":30709},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29694,"toc":30700},[29695,29698,29702,29708,29712,29715,30055,30058,30061,30064,30069,30074,30077,30080,30083,30086,30105,30108,30119,30125,30307,30317,30333,30596,30598,30623,30638,30647,30697],[10,29696,29692],{"id":29697},"_5docker命令学习",[631,29699,29701],{"id":29700},"_51参考文档","5.1.参考文档",[19,29703,29704],{},[2663,29705,29706],{"href":29706,"rel":29707},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[26103],[631,29709,29711],{"id":29710},"_52常用命令","5.2.常用命令",[19,29713,29714],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2563,29716,29717,29730],{},[2566,29718,29719],{},[2569,29720,29721,29724,29727],{},[2572,29722,29723],{"align":25974},"命令",[2572,29725,29726],{"align":25974},"描述",[2572,29728,29729],{"align":25974},"示例",[2610,29731,29732,29743,29754,29765,29776,29787,29798,29809,29819,29830,29841,29852,29862,29873,29884,29895,29905,29915,29925,29935,29946,29957,29968,29979,29990,30001,30011,30022,30033,30044],{},[2569,29733,29734,29737,29740],{},[2615,29735,29736],{"align":25974},"docker run",[2615,29738,29739],{"align":25974},"创建并启动一个新的容器。",[2615,29741,29742],{"align":25974},"docker run -it ubuntu bash",[2569,29744,29745,29748,29751],{},[2615,29746,29747],{"align":25974},"docker build",[2615,29749,29750],{"align":25974},"通过指定的 Dockerfile 创建一个新的镜像。",[2615,29752,29753],{"align":25974},"docker build -t myimage .",[2569,29755,29756,29759,29762],{},[2615,29757,29758],{"align":25974},"docker pull",[2615,29760,29761],{"align":25974},"从 Docker 仓库拉取镜像。",[2615,29763,29764],{"align":25974},"docker pull ubuntu",[2569,29766,29767,29770,29773],{},[2615,29768,29769],{"align":25974},"docker push",[2615,29771,29772],{"align":25974},"将本地镜像推送到 Docker 仓库。",[2615,29774,29775],{"align":25974},"docker push myimage",[2569,29777,29778,29781,29784],{},[2615,29779,29780],{"align":25974},"docker stop",[2615,29782,29783],{"align":25974},"停止一个正在运行的容器。",[2615,29785,29786],{"align":25974},"docker stop container_id",[2569,29788,29789,29792,29795],{},[2615,29790,29791],{"align":25974},"docker start",[2615,29793,29794],{"align":25974},"启动一个已经存在的容器。",[2615,29796,29797],{"align":25974},"docker start container_id",[2569,29799,29800,29803,29806],{},[2615,29801,29802],{"align":25974},"docker restart",[2615,29804,29805],{"align":25974},"重新启动容器。",[2615,29807,29808],{"align":25974},"docker restart container_id",[2569,29810,29811,29814,29817],{},[2615,29812,29813],{"align":25974},"docker ps",[2615,29815,29816],{"align":25974},"列出当前正在运行的容器。",[2615,29818,29813],{"align":25974},[2569,29820,29821,29824,29827],{},[2615,29822,29823],{"align":25974},"docker rm",[2615,29825,29826],{"align":25974},"删除一个或多个停止的容器。",[2615,29828,29829],{"align":25974},"docker rm container_id",[2569,29831,29832,29835,29838],{},[2615,29833,29834],{"align":25974},"docker exec",[2615,29836,29837],{"align":25974},"在一个正在运行的容器中执行命令。",[2615,29839,29840],{"align":25974},"docker exec -it container_id bash",[2569,29842,29843,29846,29849],{},[2615,29844,29845],{"align":25974},"docker logs",[2615,29847,29848],{"align":25974},"查看容器的日志输出。",[2615,29850,29851],{"align":25974},"docker logs container_id",[2569,29853,29854,29857,29860],{},[2615,29855,29856],{"align":25974},"docker images",[2615,29858,29859],{"align":25974},"列出本地所有镜像。",[2615,29861,29856],{"align":25974},[2569,29863,29864,29867,29870],{},[2615,29865,29866],{"align":25974},"docker rmi",[2615,29868,29869],{"align":25974},"删除一个或多个镜像。",[2615,29871,29872],{"align":25974},"docker rmi myimage",[2569,29874,29875,29878,29881],{},[2615,29876,29877],{"align":25974},"docker network",[2615,29879,29880],{"align":25974},"管理 Docker 网络。",[2615,29882,29883],{"align":25974},"docker network ls",[2569,29885,29886,29889,29892],{},[2615,29887,29888],{"align":25974},"docker volume",[2615,29890,29891],{"align":25974},"管理 Docker 数据卷。",[2615,29893,29894],{"align":25974},"docker volume ls",[2569,29896,29897,29900,29903],{},[2615,29898,29899],{"align":25974},"docker-compose up",[2615,29901,29902],{"align":25974},"启动 docker-compose.yml 中定义的所有服务。",[2615,29904,29899],{"align":25974},[2569,29906,29907,29910,29913],{},[2615,29908,29909],{"align":25974},"docker-compose down",[2615,29911,29912],{"align":25974},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2615,29914,29909],{"align":25974},[2569,29916,29917,29920,29923],{},[2615,29918,29919],{"align":25974},"docker info",[2615,29921,29922],{"align":25974},"显示 Docker 系统的详细信息。",[2615,29924,29919],{"align":25974},[2569,29926,29927,29930,29933],{},[2615,29928,29929],{"align":25974},"docker stats",[2615,29931,29932],{"align":25974},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2615,29934,29929],{"align":25974},[2569,29936,29937,29940,29943],{},[2615,29938,29939],{"align":25974},"docker inspect",[2615,29941,29942],{"align":25974},"查看容器或镜像的详细信息（JSON 格式）。",[2615,29944,29945],{"align":25974},"docker inspect container_id",[2569,29947,29948,29951,29954],{},[2615,29949,29950],{"align":25974},"docker save",[2615,29952,29953],{"align":25974},"将一个镜像保存为 tar 文件。",[2615,29955,29956],{"align":25974},"docker save -o myimage.tar myimage",[2569,29958,29959,29962,29965],{},[2615,29960,29961],{"align":25974},"docker load",[2615,29963,29964],{"align":25974},"从 tar 文件中加载镜像。",[2615,29966,29967],{"align":25974},"docker load -i myimage.tar",[2569,29969,29970,29973,29976],{},[2615,29971,29972],{"align":25974},"docker tag",[2615,29974,29975],{"align":25974},"为镜像添加标签（tag）。",[2615,29977,29978],{"align":25974},"docker tag myimage myimage:v1",[2569,29980,29981,29984,29987],{},[2615,29982,29983],{"align":25974},"docker buildx build",[2615,29985,29986],{"align":25974},"使用 Buildx 构建多架构镜像。",[2615,29988,29989],{"align":25974},"docker buildx build -t myimage .",[2569,29991,29992,29995,29998],{},[2615,29993,29994],{"align":25974},"docker buildx create",[2615,29996,29997],{"align":25974},"创建一个新的 Buildx 构建实例。",[2615,29999,30000],{"align":25974},"docker buildx create –use",[2569,30002,30003,30006,30009],{},[2615,30004,30005],{"align":25974},"docker buildx ls",[2615,30007,30008],{"align":25974},"列出所有可用的 Buildx 构建实例。",[2615,30010,30005],{"align":25974},[2569,30012,30013,30016,30019],{},[2615,30014,30015],{"align":25974},"docker buildx use",[2615,30017,30018],{"align":25974},"设置当前的 Buildx 构建实例。",[2615,30020,30021],{"align":25974},"docker buildx use mybuilder",[2569,30023,30024,30027,30030],{},[2615,30025,30026],{"align":25974},"docker buildx bake",[2615,30028,30029],{"align":25974},"使用 Bake 文件批量构建镜像。",[2615,30031,30032],{"align":25974},"docker buildx bake -f bake.hcl",[2569,30034,30035,30038,30041],{},[2615,30036,30037],{"align":25974},"docker buildx build –push",[2615,30039,30040],{"align":25974},"构建镜像并推送到镜像仓库。",[2615,30042,30043],{"align":25974},"docker buildx build –push -t myimage .",[2569,30045,30046,30049,30052],{},[2615,30047,30048],{"align":25974},"docker buildx build –platform",[2615,30050,30051],{"align":25974},"构建镜像并为多个平台生成支持。",[2615,30053,30054],{"align":25974},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,30056,30057],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,30059,30060],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,30062,30063],{},"docker images 可以查看已经下载的镜像",[19,30065,30066],{},[3736,30067],{"alt":28,"src":30068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,30070,30071],{},[2575,30072,30073],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,30075,30076],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,30078,30079],{},"docker container logs 查看容器日志",[19,30081,30082],{},"docker top 查看容器里的进程",[19,30084,30085],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[23,30087,30089],{"className":26060,"code":30088,"language":26062,"meta":28,"style":28},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[30,30090,30091],{"__ignoreMap":28},[33,30092,30093,30096,30099,30102],{"class":35,"line":36},[33,30094,30095],{"class":43},"如：docker",[33,30097,30098],{"class":60}," cp",[33,30100,30101],{"class":60}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[33,30103,30104],{"class":60}," \u002Fmydata\u002Fnginx\n",[19,30106,30107],{},"docker run时在启动容器的时候会有几个常用的选项：",[3413,30109,30110,30113,30116],{},[331,30111,30112],{},"-d选项：表示后台运行",[331,30114,30115],{},"-P选项：随机端口映射",[331,30117,30118],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[631,30120,30122],{"id":30121},"_53run命令的参数非常重要",[2575,30123,30124],{},"5.3.run命令的参数（非常重要）",[2563,30126,30127,30140],{},[2566,30128,30129],{},[2569,30130,30131,30134,30137],{},[2572,30132,30133],{"align":25974},"参数\u002F配置",[2572,30135,30136],{"align":25974},"功能说明",[2572,30138,30139],{"align":25974},"重要性与参考依据",[2610,30141,30142,30153,30164,30175,30186,30197,30208,30219,30230,30241,30252,30263,30274,30285,30296],{},[2569,30143,30144,30147,30150],{},[2615,30145,30146],{"align":25974},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2615,30148,30149],{"align":25974},"指定容器名称，便于后续管理",[2615,30151,30152],{"align":25974},"替代随机生成的容器名。",[2569,30154,30155,30158,30161],{},[2615,30156,30157],{"align":25974},"–gpus all",[2615,30159,30160],{"align":25974},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2615,30162,30163],{"align":25974},"用于CUDA加速等GPU依赖任务。",[2569,30165,30166,30169,30172],{},[2615,30167,30168],{"align":25974},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2615,30170,30171],{"align":25974},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2615,30173,30174],{"align":25974},"确保容器内GPU功能完整67。",[2569,30176,30177,30180,30183],{},[2615,30178,30179],{"align":25974},"-dit",[2615,30181,30182],{"align":25974},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2615,30184,30185],{"align":25974},"允许容器在后台运行并支持交互操作。",[2569,30187,30188,30191,30194],{},[2615,30189,30190],{"align":25974},"–privileged",[2615,30192,30193],{"align":25974},"赋予容器完全主机权限（可访问设备、内核模块等）",[2615,30195,30196],{"align":25974},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2569,30198,30199,30202,30205],{},[2615,30200,30201],{"align":25974},"–net=host",[2615,30203,30204],{"align":25974},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2615,30206,30207],{"align":25974},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2569,30209,30210,30213,30216],{},[2615,30211,30212],{"align":25974},"–group-add audio–group-add video–group-add dialout",[2615,30214,30215],{"align":25974},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2615,30217,30218],{"align":25974},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2569,30220,30221,30224,30227],{},[2615,30222,30223],{"align":25974},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2615,30225,30226],{"align":25974},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2615,30228,30229],{"align":25974},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2569,30231,30232,30235,30238],{},[2615,30233,30234],{"align":25974},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2615,30236,30237],{"align":25974},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2615,30239,30240],{"align":25974},"实现容器内图形显示。",[2569,30242,30243,30246,30249],{},[2615,30244,30245],{"align":25974},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2615,30247,30248],{"align":25974},"挂载X11认证文件（只读）",[2615,30250,30251],{"align":25974},"确保容器有权连接宿主机显示服务。",[2569,30253,30254,30257,30260],{},[2615,30255,30256],{"align":25974},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2615,30258,30259],{"align":25974},"挂载Wayland显示协议相关目录",[2615,30261,30262],{"align":25974},"支持Wayland协议的图形显示。",[2569,30264,30265,30268,30271],{},[2615,30266,30267],{"align":25974},"–ulimit nofile=1024:524288",[2615,30269,30270],{"align":25974},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2615,30272,30273],{"align":25974},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2569,30275,30276,30279,30282],{},[2615,30277,30278],{"align":25974},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2615,30280,30281],{"align":25974},"挂载宿主机用户目录到容器内同名路径",[2615,30283,30284],{"align":25974},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2569,30286,30287,30290,30293],{},[2615,30288,30289],{"align":25974},"-w \u002Fhome\u002Ftungchiahui",[2615,30291,30292],{"align":25974},"设置容器启动后的默认工作目录",[2615,30294,30295],{"align":25974},"直接进入项目路径，方便执行命令2324。",[2569,30297,30298,30301,30304],{},[2615,30299,30300],{"align":25974},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2615,30302,30303],{"align":25974},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2615,30305,30306],{"align":25974},"提供预配置的深度学习与机器人开发环境。",[19,30308,30309,30310,30312,30313,30316],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[30,30311,26815],{},"加不加",[30,30314,30315],{},"sudo -E","都无所谓。",[19,30318,30319,30320,30322,30323,30325,30326,30329,30330,30332],{},"用户已经被加到docker组了，不用",[30,30321,26815],{},"也行跑，其次，",[30,30324,26815],{},"运行的话，你的",[30,30327,30328],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[30,30331,30328],{},"更不可能变了。",[23,30334,30336],{"className":26060,"code":30335,"language":26062,"meta":28,"style":28},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[30,30337,30338,30351,30361,30371,30383,30390,30397,30404,30414,30423,30432,30446,30458,30470,30479,30489,30498,30513,30546,30573,30584,30591],{"__ignoreMap":28},[33,30339,30340,30342,30344,30346,30349],{"class":35,"line":36},[33,30341,26815],{"class":43},[33,30343,28558],{"class":60},[33,30345,29468],{"class":60},[33,30347,30348],{"class":72}," --name=ros_opencv_cuda",[33,30350,26917],{"class":72},[33,30352,30353,30356,30359],{"class":35,"line":51},[33,30354,30355],{"class":47},"--gpus ",[33,30357,30358],{"class":60},"all",[33,30360,26917],{"class":72},[33,30362,30363,30366,30369],{"class":35,"line":64},[33,30364,30365],{"class":47},"-e ",[33,30367,30368],{"class":60},"NVIDIA_DRIVER_CAPABILITIES=all",[33,30370,26917],{"class":72},[33,30372,30373,30375,30378,30381],{"class":35,"line":76},[33,30374,30365],{"class":47},[33,30376,30377],{"class":60},"DISPLAY=",[33,30379,30380],{"class":47},"$DISPLAY ",[33,30382,28413],{"class":72},[33,30384,30385,30388],{"class":35,"line":87},[33,30386,30387],{"class":47},"-dit ",[33,30389,28413],{"class":72},[33,30391,30392,30395],{"class":35,"line":96},[33,30393,30394],{"class":47},"--privileged ",[33,30396,28413],{"class":72},[33,30398,30399,30402],{"class":35,"line":103},[33,30400,30401],{"class":47},"--net=host ",[33,30403,28413],{"class":72},[33,30405,30406,30409,30412],{"class":35,"line":108},[33,30407,30408],{"class":47},"--group-add ",[33,30410,30411],{"class":60},"audio",[33,30413,26917],{"class":72},[33,30415,30416,30418,30421],{"class":35,"line":119},[33,30417,30408],{"class":47},[33,30419,30420],{"class":60},"video",[33,30422,26917],{"class":72},[33,30424,30425,30427,30430],{"class":35,"line":128},[33,30426,30408],{"class":47},[33,30428,30429],{"class":60},"dialout",[33,30431,26917],{"class":72},[33,30433,30434,30436,30439,30441,30444],{"class":35,"line":1753},[33,30435,30365],{"class":47},[33,30437,30438],{"class":60},"XAUTHORITY=",[33,30440,30328],{"class":47},[33,30442,30443],{"class":60},"\u002F.Xauthority",[33,30445,26917],{"class":72},[33,30447,30448,30450,30453,30456],{"class":35,"line":1763},[33,30449,30365],{"class":47},[33,30451,30452],{"class":60},"WAYLAND_DISPLAY=",[33,30454,30455],{"class":47},"$WAYLAND_DISPLAY ",[33,30457,28413],{"class":72},[33,30459,30460,30462,30465,30468],{"class":35,"line":1775},[33,30461,30365],{"class":47},[33,30463,30464],{"class":60},"XDG_RUNTIME_DIR=",[33,30466,30467],{"class":47},"$XDG_RUNTIME_DIR ",[33,30469,28413],{"class":72},[33,30471,30472,30474,30477],{"class":35,"line":1780},[33,30473,30365],{"class":47},[33,30475,30476],{"class":60},"QT_QPA_PLATFORM=xcb",[33,30478,26917],{"class":72},[33,30480,30481,30484,30487],{"class":35,"line":1785},[33,30482,30483],{"class":47},"-v ",[33,30485,30486],{"class":60},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[33,30488,26917],{"class":72},[33,30490,30491,30493,30496],{"class":35,"line":1940},[33,30492,30483],{"class":47},[33,30494,30495],{"class":60},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[33,30497,26917],{"class":72},[33,30499,30500,30503,30506,30508,30511],{"class":35,"line":2183},[33,30501,30502],{"class":47},"-v $HOME",[33,30504,30505],{"class":60},"\u002F.Xauthority:",[33,30507,30328],{"class":47},[33,30509,30510],{"class":60},"\u002F.Xauthority:ro",[33,30512,26917],{"class":72},[33,30514,30515,30517,30520,30522,30525,30528,30530,30533,30535,30537,30539,30541,30544],{"class":35,"line":2208},[33,30516,30483],{"class":47},[33,30518,30519],{"class":60},"\u002Frun\u002Fuser\u002F",[33,30521,27338],{"class":47},[33,30523,30524],{"class":43},"id",[33,30526,30527],{"class":72}," -u",[33,30529,2849],{"class":47},[33,30531,30532],{"class":60},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[33,30534,27338],{"class":47},[33,30536,30524],{"class":43},[33,30538,30527],{"class":72},[33,30540,2849],{"class":47},[33,30542,30543],{"class":60},"\u002Fwayland-0",[33,30545,26917],{"class":72},[33,30547,30548,30550,30552,30554,30556,30558,30560,30563,30565,30567,30569,30571],{"class":35,"line":2234},[33,30549,30483],{"class":47},[33,30551,30519],{"class":60},[33,30553,27338],{"class":47},[33,30555,30524],{"class":43},[33,30557,30527],{"class":72},[33,30559,2849],{"class":47},[33,30561,30562],{"class":60},":\u002Frun\u002Fuser\u002F",[33,30564,27338],{"class":47},[33,30566,30524],{"class":43},[33,30568,30527],{"class":72},[33,30570,15954],{"class":47},[33,30572,28413],{"class":72},[33,30574,30575,30577,30579,30582],{"class":35,"line":2239},[33,30576,30502],{"class":47},[33,30578,387],{"class":60},[33,30580,30581],{"class":47},"$HOME ",[33,30583,28413],{"class":72},[33,30585,30586,30589],{"class":35,"line":2247},[33,30587,30588],{"class":47},"-w $HOME ",[33,30590,28413],{"class":72},[33,30592,30593],{"class":35,"line":2255},[33,30594,30595],{"class":47},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30597,11271],{},[328,30599,30600,30608,30611,30614],{},[331,30601,30602,16035,30604,30607],{},[30,30603,30368],{},[30,30605,30606],{},"--gpus all","没有英伟达显卡请注释。",[331,30609,30610],{},"--name后面请自己为容器起名。",[331,30612,30613],{},"最后一行仓库名称请你自己找对应的镜像填上。",[331,30615,30616,30617,30622],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25791,30618,30619],{},[2575,30620,30621],{},"请不要加","。",[23,30624,30626],{"className":26060,"code":30625,"language":26062,"meta":28,"style":28},"--ulimit nofile=1024:524288 \\\n",[30,30627,30628],{"__ignoreMap":28},[33,30629,30630,30633,30636],{"class":35,"line":36},[33,30631,30632],{"class":43},"--ulimit",[33,30634,30635],{"class":60}," nofile=1024:524288",[33,30637,26917],{"class":72},[19,30639,30640,30641,30646],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25791,30642,30643],{},[2575,30644,30645],{},"不建议","**.**",[23,30648,30650],{"className":26060,"code":30649,"language":26062,"meta":28,"style":28},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[30,30651,30652,30679,30688],{"__ignoreMap":28},[33,30653,30654,30657,30660,30662,30664,30666,30668,30670,30672,30675,30677],{"class":35,"line":36},[33,30655,30656],{"class":43},"--user",[33,30658,30659],{"class":47}," $(",[33,30661,30524],{"class":43},[33,30663,30527],{"class":72},[33,30665,2849],{"class":47},[33,30667,387],{"class":60},[33,30669,27338],{"class":47},[33,30671,30524],{"class":43},[33,30673,30674],{"class":72}," -g",[33,30676,15954],{"class":47},[33,30678,28413],{"class":72},[33,30680,30681,30683,30686],{"class":35,"line":51},[33,30682,30483],{"class":47},[33,30684,30685],{"class":60},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[33,30687,26917],{"class":72},[33,30689,30690,30692,30695],{"class":35,"line":64},[33,30691,30483],{"class":47},[33,30693,30694],{"class":60},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[33,30696,26917],{"class":72},[2331,30698,30699],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":28,"searchDepth":51,"depth":51,"links":30701},[30702,30703,30704],{"id":29700,"depth":64,"text":29701},{"id":29710,"depth":64,"text":29711},{"id":30121,"depth":64,"text":30124},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29692,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30711,"title":30712,"body":30713,"description":28,"extension":2360,"meta":32336,"navigation":99,"path":32337,"seo":32338,"stem":32339,"__hash__":32340},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30714,"toc":32331},[30715,30718,30722,30725,30947,30951,30955,30958,31064,31069,31072,31077,31080,31085,31088,31093,31096,31108,31111,31116,31123,31151,31158,31234,31239,31242,31265,31267,31342,31347,31350,31354,31362,31367,31372,31376,31387,31393,31396,31399,31423,31426,31429,31457,31460,31463,31928,31931,31936,31941,31945,31968,31973,31977,31981,31984,31987,31990,32017,32020,32023,32041,32044,32047,32069,32077,32082,32087,32091,32094,32097,32100,32103,32148,32151,32169,32172,32177,32180,32201,32204,32260,32263,32268,32272,32275,32282,32285,32288,32293,32296,32312,32315,32328],[10,30716,30712],{"id":30717},"_6手动创建docker镜像",[631,30719,30721],{"id":30720},"_61dockerfile","6.1.DockerFile",[19,30723,30724],{},"常用命令：",[2563,30726,30727,30738],{},[2566,30728,30729],{},[2569,30730,30731,30734,30736],{},[2572,30732,30733],{"align":25974},"指令",[2572,30735,28108],{"align":25974},[2572,30737,29729],{"align":25974},[2610,30739,30740,30750,30766,30777,30788,30799,30810,30821,30832,30846,30860,30871,30885,30896,30907,30921,30936],{},[2569,30741,30742,30744,30747],{},[2615,30743,29608],{"align":25974},[2615,30745,30746],{"align":25974},"指定基础镜像，是 Dockerfile 的起点",[2615,30748,30749],{"align":25974},"FROM ubuntu:22.04",[2569,30751,30752,30755,30758],{},[2615,30753,30754],{"align":25974},"LABEL",[2615,30756,30757],{"align":25974},"添加元数据（如作者、版本等）",[2615,30759,30760,30761,30765],{"align":25974},"LABEL maintainer=”",[2663,30762,30764],{"href":30763},"mailto:you@example.com","you@example.com","”",[2569,30767,30768,30771,30774],{},[2615,30769,30770],{"align":25974},"ENV",[2615,30772,30773],{"align":25974},"设置环境变量",[2615,30775,30776],{"align":25974},"ENV PORT=8080",[2569,30778,30779,30782,30785],{},[2615,30780,30781],{"align":25974},"ARG",[2615,30783,30784],{"align":25974},"构建参数，只在构建期间可用",[2615,30786,30787],{"align":25974},"ARG VERSION=1.0",[2569,30789,30790,30793,30796],{},[2615,30791,30792],{"align":25974},"RUN",[2615,30794,30795],{"align":25974},"构建镜像时运行命令",[2615,30797,30798],{"align":25974},"RUN apt-get update && apt-get install -y curl",[2569,30800,30801,30804,30807],{},[2615,30802,30803],{"align":25974},"COPY",[2615,30805,30806],{"align":25974},"复制文件到镜像中",[2615,30808,30809],{"align":25974},"COPY . \u002Fapp",[2569,30811,30812,30815,30818],{},[2615,30813,30814],{"align":25974},"ADD",[2615,30816,30817],{"align":25974},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2615,30819,30820],{"align":25974},"ADD archive.tar.gz \u002Fdata\u002F",[2569,30822,30823,30826,30829],{},[2615,30824,30825],{"align":25974},"WORKDIR",[2615,30827,30828],{"align":25974},"设置工作目录",[2615,30830,30831],{"align":25974},"WORKDIR \u002Fopt",[2569,30833,30834,30837,30840],{},[2615,30835,30836],{"align":25974},"CMD",[2615,30838,30839],{"align":25974},"设置容器启动时默认命令（可被 docker run 覆盖）",[2615,30841,30842,30843],{"align":25974},"CMD ",[33,30844,30845],{},"“node”, “index.js”",[2569,30847,30848,30851,30854],{},[2615,30849,30850],{"align":25974},"ENTRYPOINT",[2615,30852,30853],{"align":25974},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2615,30855,30856,30857],{"align":25974},"ENTRYPOINT ",[33,30858,30859],{},"“python3”",[2569,30861,30862,30865,30868],{},[2615,30863,30864],{"align":25974},"EXPOSE",[2615,30866,30867],{"align":25974},"声明镜像内服务监听的端口（不会自动映射）",[2615,30869,30870],{"align":25974},"EXPOSE 80",[2569,30872,30873,30876,30879],{},[2615,30874,30875],{"align":25974},"VOLUME",[2615,30877,30878],{"align":25974},"声明数据卷挂载点",[2615,30880,30881,30882],{"align":25974},"VOLUME ",[33,30883,30884],{},"“\u002Fdata”",[2569,30886,30887,30890,30893],{},[2615,30888,30889],{"align":25974},"USER",[2615,30891,30892],{"align":25974},"设置后续命令执行的用户",[2615,30894,30895],{"align":25974},"USER appuser",[2569,30897,30898,30901,30904],{},[2615,30899,30900],{"align":25974},"ONBUILD",[2615,30902,30903],{"align":25974},"当镜像作为其他镜像基础镜像时触发的构建指令",[2615,30905,30906],{"align":25974},"ONBUILD COPY . \u002Fsrc",[2569,30908,30909,30912,30915],{},[2615,30910,30911],{"align":25974},"SHELL",[2615,30913,30914],{"align":25974},"更改默认 shell，比如将 sh -c 改为 bash -c",[2615,30916,30917,30918],{"align":25974},"SHELL ",[33,30919,30920],{},"“\u002Fbin\u002Fbash”, “-c”",[2569,30922,30923,30926,30929],{},[2615,30924,30925],{"align":25974},"HEALTHCHECK",[2615,30927,30928],{"align":25974},"定义容器运行时的健康检查命令",[2615,30930,30931,30932],{"align":25974},"`HEALTHCHECK CMD curl –fail ",[2663,30933,30934],{"href":30934,"rel":30935},"http:\u002F\u002Flocalhost:8080",[26103],[2569,30937,30938,30941,30944],{},[2615,30939,30940],{"align":25974},"STOPSIGNAL",[2615,30942,30943],{"align":25974},"容器停止时发送的信号",[2615,30945,30946],{"align":25974},"STOPSIGNAL SIGKILL",[631,30948,30950],{"id":30949},"_62自己创建容器","6.2.自己创建容器",[24236,30952,30954],{"id":30953},"_621手动创建","6.2.1.手动创建",[19,30956,30957],{},"在x86电脑上编译x86的：",[23,30959,30961],{"className":26060,"code":30960,"language":26062,"meta":28,"style":28},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[30,30962,30963,30979,30983,30996,31000,31013,31017,31030,31034,31047,31051],{"__ignoreMap":28},[33,30964,30965,30967,30970,30973,30976],{"class":35,"line":36},[33,30966,28791],{"class":43},[33,30968,30969],{"class":60}," build",[33,30971,30972],{"class":72}," -t",[33,30974,30975],{"class":60}," ros-melodic-cuda118-cudnn8-bionic:latest",[33,30977,30978],{"class":60}," .\n",[33,30980,30981],{"class":35,"line":51},[33,30982,100],{"emptyLinePlaceholder":99},[33,30984,30985,30987,30989,30991,30994],{"class":35,"line":64},[33,30986,28791],{"class":43},[33,30988,30969],{"class":60},[33,30990,30972],{"class":72},[33,30992,30993],{"class":60}," ros-noetic-focal:latest",[33,30995,30978],{"class":60},[33,30997,30998],{"class":35,"line":76},[33,30999,100],{"emptyLinePlaceholder":99},[33,31001,31002,31004,31006,31008,31011],{"class":35,"line":87},[33,31003,28791],{"class":43},[33,31005,30969],{"class":60},[33,31007,30972],{"class":72},[33,31009,31010],{"class":60}," ros-humble-jammy:latest",[33,31012,30978],{"class":60},[33,31014,31015],{"class":35,"line":96},[33,31016,100],{"emptyLinePlaceholder":99},[33,31018,31019,31021,31023,31025,31028],{"class":35,"line":103},[33,31020,28791],{"class":43},[33,31022,30969],{"class":60},[33,31024,30972],{"class":72},[33,31026,31027],{"class":60}," ros-jazzy-noble:latest",[33,31029,30978],{"class":60},[33,31031,31032],{"class":35,"line":108},[33,31033,100],{"emptyLinePlaceholder":99},[33,31035,31036,31038,31040,31042,31045],{"class":35,"line":119},[33,31037,28791],{"class":43},[33,31039,30969],{"class":60},[33,31041,30972],{"class":72},[33,31043,31044],{"class":60}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[33,31046,30978],{"class":60},[33,31048,31049],{"class":35,"line":128},[33,31050,100],{"emptyLinePlaceholder":99},[33,31052,31053,31055,31057,31059,31062],{"class":35,"line":1753},[33,31054,28791],{"class":43},[33,31056,30969],{"class":60},[33,31058,30972],{"class":72},[33,31060,31061],{"class":60}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[33,31063,30978],{"class":60},[19,31065,31066],{},[3736,31067],{"alt":28,"src":31068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,31070,31071],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,31073,31074],{},[3736,31075],{"alt":28,"src":31076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,31078,31079],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[328,31081,31082],{},[331,31083,31084],{},"创建 Docker Hub 账户",[19,31086,31087],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[328,31089,31090],{"start":51},[331,31091,31092],{},"登录 Docker Hub",[19,31094,31095],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[23,31097,31099],{"className":26060,"code":31098,"language":26062,"meta":28,"style":28},"docker login\n",[30,31100,31101],{"__ignoreMap":28},[33,31102,31103,31105],{"class":35,"line":36},[33,31104,28791],{"class":43},[33,31106,31107],{"class":60}," login\n",[19,31109,31110],{},"输入你的 Docker Hub 用户名和密码进行验证。",[328,31112,31113],{},[331,31114,31115],{},"为你的镜像打标签",[19,31117,31118,31119,31122],{},"Docker Hub 使用 ",[30,31120,31121],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[23,31124,31126],{"className":26060,"code":31125,"language":26062,"meta":28,"style":28},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[30,31127,31128],{"__ignoreMap":28},[33,31129,31130,31132,31135,31137,31140,31143,31146,31148],{"class":35,"line":36},[33,31131,28791],{"class":43},[33,31133,31134],{"class":60}," tag",[33,31136,31027],{"class":60},[33,31138,31139],{"class":39}," \u003C",[33,31141,31142],{"class":60},"你的用户",[33,31144,31145],{"class":47},"名",[33,31147,3367],{"class":39},[33,31149,31150],{"class":60},"\u002Fros-jazzy-noble:latest\n",[19,31152,31153,31154,31157],{},"例如，如果你的 Docker Hub 用户名是 ",[30,31155,31156],{},"tungchiahui","，你应该执行：",[23,31159,31161],{"className":26060,"code":31160,"language":26062,"meta":28,"style":28},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[30,31162,31163,31174,31178,31189,31193,31204,31208,31219,31223],{"__ignoreMap":28},[33,31164,31165,31167,31169,31171],{"class":35,"line":36},[33,31166,28791],{"class":43},[33,31168,31134],{"class":60},[33,31170,30993],{"class":60},[33,31172,31173],{"class":60}," tungchiahui\u002Fros-noetic-focal:latest\n",[33,31175,31176],{"class":35,"line":51},[33,31177,100],{"emptyLinePlaceholder":99},[33,31179,31180,31182,31184,31186],{"class":35,"line":64},[33,31181,28791],{"class":43},[33,31183,31134],{"class":60},[33,31185,31010],{"class":60},[33,31187,31188],{"class":60}," tungchiahui\u002Fros-humble-jammy:latest\n",[33,31190,31191],{"class":35,"line":76},[33,31192,100],{"emptyLinePlaceholder":99},[33,31194,31195,31197,31199,31201],{"class":35,"line":87},[33,31196,28791],{"class":43},[33,31198,31134],{"class":60},[33,31200,31027],{"class":60},[33,31202,31203],{"class":60}," tungchiahui\u002Fros-jazzy-noble:latest\n",[33,31205,31206],{"class":35,"line":96},[33,31207,100],{"emptyLinePlaceholder":99},[33,31209,31210,31212,31214,31216],{"class":35,"line":103},[33,31211,28791],{"class":43},[33,31213,31134],{"class":60},[33,31215,31044],{"class":60},[33,31217,31218],{"class":60}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,31220,31221],{"class":35,"line":108},[33,31222,100],{"emptyLinePlaceholder":99},[33,31224,31225,31227,31229,31231],{"class":35,"line":119},[33,31226,28791],{"class":43},[33,31228,31134],{"class":60},[33,31230,31061],{"class":60},[33,31232,31233],{"class":60}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[328,31235,31236],{"start":51},[331,31237,31238],{},"推送镜像到 Docker Hub",[19,31240,31241],{},"使用以下命令将镜像推送到 Docker Hub：",[23,31243,31245],{"className":26060,"code":31244,"language":26062,"meta":28,"style":28},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[30,31246,31247],{"__ignoreMap":28},[33,31248,31249,31251,31254,31256,31258,31260,31262],{"class":35,"line":36},[33,31250,28791],{"class":43},[33,31252,31253],{"class":60}," push",[33,31255,31139],{"class":39},[33,31257,31142],{"class":60},[33,31259,31145],{"class":47},[33,31261,3367],{"class":39},[33,31263,31264],{"class":60},"\u002Fros-noetic-jazzy-noble:latest\n",[19,31266,16873],{},[23,31268,31270],{"className":26060,"code":31269,"language":26062,"meta":28,"style":28},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[30,31271,31272,31280,31284,31292,31296,31304,31308,31317,31321,31329,31333],{"__ignoreMap":28},[33,31273,31274,31276,31278],{"class":35,"line":36},[33,31275,28791],{"class":43},[33,31277,31253],{"class":60},[33,31279,31173],{"class":60},[33,31281,31282],{"class":35,"line":51},[33,31283,100],{"emptyLinePlaceholder":99},[33,31285,31286,31288,31290],{"class":35,"line":64},[33,31287,28791],{"class":43},[33,31289,31253],{"class":60},[33,31291,31188],{"class":60},[33,31293,31294],{"class":35,"line":76},[33,31295,100],{"emptyLinePlaceholder":99},[33,31297,31298,31300,31302],{"class":35,"line":87},[33,31299,28791],{"class":43},[33,31301,31253],{"class":60},[33,31303,31203],{"class":60},[33,31305,31306],{"class":35,"line":96},[33,31307,100],{"emptyLinePlaceholder":99},[33,31309,31310,31312,31314],{"class":35,"line":103},[33,31311,28791],{"class":43},[33,31313,31253],{"class":60},[33,31315,31316],{"class":60}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,31318,31319],{"class":35,"line":108},[33,31320,100],{"emptyLinePlaceholder":99},[33,31322,31323,31325,31327],{"class":35,"line":119},[33,31324,28791],{"class":43},[33,31326,31253],{"class":60},[33,31328,31233],{"class":60},[33,31330,31331],{"class":35,"line":128},[33,31332,100],{"emptyLinePlaceholder":99},[33,31334,31335,31337,31339],{"class":35,"line":1753},[33,31336,28791],{"class":43},[33,31338,31253],{"class":60},[33,31340,31341],{"class":60}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[328,31343,31344],{"start":64},[331,31345,31346],{},"验证推送成功",[19,31348,31349],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31351,31352],{},[2575,31353,6038],{},[3413,31355,31356,31359],{},[331,31357,31358],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[331,31360,31361],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31363,31364],{},[3736,31365],{"alt":28,"src":31366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31368,31369],{},[3736,31370],{"alt":28,"src":31371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[24236,31373,31375],{"id":31374},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31377,31378,31379,31382,31383,31386],{},"如果您想在 ",[2575,31380,31381],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2575,31384,31385],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31388,31389,31390],{},"1. ",[2575,31391,31392],{},"启用 Docker 跨平台构建",[19,31394,31395],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31397,31398],{},"第一步：启用 buildx（只需执行一次）",[23,31400,31402],{"className":26060,"code":31401,"language":26062,"meta":28,"style":28},"docker buildx create --name multiarch_builder --use\n",[30,31403,31404],{"__ignoreMap":28},[33,31405,31406,31408,31411,31414,31417,31420],{"class":35,"line":36},[33,31407,28791],{"class":43},[33,31409,31410],{"class":60}," buildx",[33,31412,31413],{"class":60}," create",[33,31415,31416],{"class":72}," --name",[33,31418,31419],{"class":60}," multiarch_builder",[33,31421,31422],{"class":72}," --use\n",[19,31424,31425],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31427,31428],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[23,31430,31432],{"className":26060,"code":31431,"language":26062,"meta":28,"style":28},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[30,31433,31434],{"__ignoreMap":28},[33,31435,31436,31438,31440,31442,31445,31448,31451,31454],{"class":35,"line":36},[33,31437,28791],{"class":43},[33,31439,29468],{"class":60},[33,31441,29471],{"class":72},[33,31443,31444],{"class":72}," --privileged",[33,31446,31447],{"class":60}," multiarch\u002Fqemu-user-static",[33,31449,31450],{"class":72}," --reset",[33,31452,31453],{"class":72}," -p",[33,31455,31456],{"class":60}," yes\n",[19,31458,31459],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31461,31462],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[23,31464,31466],{"className":26060,"code":31465,"language":26062,"meta":28,"style":28},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[30,31467,31468,31510,31514,31519,31529,31539,31548,31554,31558,31562,31572,31580,31589,31595,31599,31603,31613,31621,31630,31636,31640,31644,31654,31662,31671,31677,31681,31685,31695,31703,31712,31718,31722,31726,31736,31744,31753,31759,31763,31767,31777,31785,31794,31800,31804,31808,31818,31826,31835,31841,31845,31849,31859,31867,31876,31882,31886,31890,31901,31909,31918,31924],{"__ignoreMap":28},[33,31469,31470,31472,31474,31476,31479,31482,31484,31486,31489,31491,31493,31495,31497,31500,31503,31505,31508],{"class":35,"line":36},[33,31471,28791],{"class":43},[33,31473,31410],{"class":60},[33,31475,30969],{"class":60},[33,31477,31478],{"class":72}," --platform",[33,31480,31481],{"class":60}," linux\u002Famd64,linux\u002Farm64",[33,31483,30972],{"class":72},[33,31485,31139],{"class":39},[33,31487,31488],{"class":60},"你的镜像",[33,31490,31145],{"class":47},[33,31492,3367],{"class":39},[33,31494,387],{"class":60},[33,31496,2226],{"class":39},[33,31498,31499],{"class":60},"标",[33,31501,31502],{"class":47},"签",[33,31504,3367],{"class":39},[33,31506,31507],{"class":72}," --push",[33,31509,30978],{"class":60},[33,31511,31512],{"class":35,"line":51},[33,31513,100],{"emptyLinePlaceholder":99},[33,31515,31516],{"class":35,"line":64},[33,31517,31518],{"class":2487},"# 例子：\n",[33,31520,31521,31523,31525,31527],{"class":35,"line":76},[33,31522,28791],{"class":43},[33,31524,31410],{"class":60},[33,31526,30969],{"class":60},[33,31528,26917],{"class":72},[33,31530,31531,31534,31537],{"class":35,"line":87},[33,31532,31533],{"class":47},"--platform ",[33,31535,31536],{"class":60},"linux\u002Famd64,linux\u002Farm64",[33,31538,26917],{"class":72},[33,31540,31541,31543,31546],{"class":35,"line":96},[33,31542,30972],{"class":72},[33,31544,31545],{"class":60}," tungchiahui\u002Fros:noetic-focal",[33,31547,26917],{"class":72},[33,31549,31550,31552],{"class":35,"line":103},[33,31551,31507],{"class":72},[33,31553,26917],{"class":72},[33,31555,31556],{"class":35,"line":108},[33,31557,30978],{"class":60},[33,31559,31560],{"class":35,"line":119},[33,31561,100],{"emptyLinePlaceholder":99},[33,31563,31564,31566,31568,31570],{"class":35,"line":128},[33,31565,28791],{"class":43},[33,31567,31410],{"class":60},[33,31569,30969],{"class":60},[33,31571,26917],{"class":72},[33,31573,31574,31576,31578],{"class":35,"line":1753},[33,31575,31533],{"class":47},[33,31577,31536],{"class":60},[33,31579,26917],{"class":72},[33,31581,31582,31584,31587],{"class":35,"line":1763},[33,31583,30972],{"class":72},[33,31585,31586],{"class":60}," tungchiahui\u002Fros:humble-jammy",[33,31588,26917],{"class":72},[33,31590,31591,31593],{"class":35,"line":1775},[33,31592,31507],{"class":72},[33,31594,26917],{"class":72},[33,31596,31597],{"class":35,"line":1780},[33,31598,30978],{"class":60},[33,31600,31601],{"class":35,"line":1785},[33,31602,100],{"emptyLinePlaceholder":99},[33,31604,31605,31607,31609,31611],{"class":35,"line":1940},[33,31606,28791],{"class":43},[33,31608,31410],{"class":60},[33,31610,30969],{"class":60},[33,31612,26917],{"class":72},[33,31614,31615,31617,31619],{"class":35,"line":2183},[33,31616,31533],{"class":47},[33,31618,31536],{"class":60},[33,31620,26917],{"class":72},[33,31622,31623,31625,31628],{"class":35,"line":2208},[33,31624,30972],{"class":72},[33,31626,31627],{"class":60}," tungchiahui\u002Fros:jazzy-noble",[33,31629,26917],{"class":72},[33,31631,31632,31634],{"class":35,"line":2234},[33,31633,31507],{"class":72},[33,31635,26917],{"class":72},[33,31637,31638],{"class":35,"line":2239},[33,31639,30978],{"class":60},[33,31641,31642],{"class":35,"line":2247},[33,31643,100],{"emptyLinePlaceholder":99},[33,31645,31646,31648,31650,31652],{"class":35,"line":2255},[33,31647,28558],{"class":43},[33,31649,31410],{"class":60},[33,31651,30969],{"class":60},[33,31653,26917],{"class":72},[33,31655,31656,31658,31660],{"class":35,"line":3992},[33,31657,31533],{"class":47},[33,31659,31536],{"class":60},[33,31661,26917],{"class":72},[33,31663,31664,31666,31669],{"class":35,"line":4009},[33,31665,30972],{"class":72},[33,31667,31668],{"class":60}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[33,31670,26917],{"class":72},[33,31672,31673,31675],{"class":35,"line":4014},[33,31674,31507],{"class":72},[33,31676,26917],{"class":72},[33,31678,31679],{"class":35,"line":4019},[33,31680,30978],{"class":60},[33,31682,31683],{"class":35,"line":4024},[33,31684,100],{"emptyLinePlaceholder":99},[33,31686,31687,31689,31691,31693],{"class":35,"line":4038},[33,31688,28791],{"class":43},[33,31690,31410],{"class":60},[33,31692,30969],{"class":60},[33,31694,26917],{"class":72},[33,31696,31697,31699,31701],{"class":35,"line":4043},[33,31698,31533],{"class":47},[33,31700,31536],{"class":60},[33,31702,26917],{"class":72},[33,31704,31705,31707,31710],{"class":35,"line":4834},[33,31706,30972],{"class":72},[33,31708,31709],{"class":60}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[33,31711,26917],{"class":72},[33,31713,31714,31716],{"class":35,"line":4848},[33,31715,31507],{"class":72},[33,31717,26917],{"class":72},[33,31719,31720],{"class":35,"line":4856},[33,31721,30978],{"class":60},[33,31723,31724],{"class":35,"line":4861},[33,31725,100],{"emptyLinePlaceholder":99},[33,31727,31728,31730,31732,31734],{"class":35,"line":4867},[33,31729,28558],{"class":43},[33,31731,31410],{"class":60},[33,31733,30969],{"class":60},[33,31735,26917],{"class":72},[33,31737,31738,31740,31742],{"class":35,"line":4873},[33,31739,31533],{"class":47},[33,31741,31536],{"class":60},[33,31743,26917],{"class":72},[33,31745,31746,31748,31751],{"class":35,"line":4878},[33,31747,30972],{"class":72},[33,31749,31750],{"class":60}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[33,31752,26917],{"class":72},[33,31754,31755,31757],{"class":35,"line":10194},[33,31756,31507],{"class":72},[33,31758,26917],{"class":72},[33,31760,31761],{"class":35,"line":10218},[33,31762,30978],{"class":60},[33,31764,31765],{"class":35,"line":10223},[33,31766,100],{"emptyLinePlaceholder":99},[33,31768,31769,31771,31773,31775],{"class":35,"line":10229},[33,31770,28791],{"class":43},[33,31772,31410],{"class":60},[33,31774,30969],{"class":60},[33,31776,26917],{"class":72},[33,31778,31779,31781,31783],{"class":35,"line":10256},[33,31780,31533],{"class":47},[33,31782,31536],{"class":60},[33,31784,26917],{"class":72},[33,31786,31787,31789,31792],{"class":35,"line":10261},[33,31788,30972],{"class":72},[33,31790,31791],{"class":60}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[33,31793,26917],{"class":72},[33,31795,31796,31798],{"class":35,"line":10267},[33,31797,31507],{"class":72},[33,31799,26917],{"class":72},[33,31801,31802],{"class":35,"line":10279},[33,31803,30978],{"class":60},[33,31805,31806],{"class":35,"line":10291},[33,31807,100],{"emptyLinePlaceholder":99},[33,31809,31810,31812,31814,31816],{"class":35,"line":10303},[33,31811,28791],{"class":43},[33,31813,31410],{"class":60},[33,31815,30969],{"class":60},[33,31817,26917],{"class":72},[33,31819,31820,31822,31824],{"class":35,"line":11961},[33,31821,31533],{"class":47},[33,31823,31536],{"class":60},[33,31825,26917],{"class":72},[33,31827,31828,31830,31833],{"class":35,"line":11986},[33,31829,30972],{"class":72},[33,31831,31832],{"class":60}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,31834,26917],{"class":72},[33,31836,31837,31839],{"class":35,"line":12009},[33,31838,31507],{"class":72},[33,31840,26917],{"class":72},[33,31842,31843],{"class":35,"line":12033},[33,31844,30978],{"class":60},[33,31846,31847],{"class":35,"line":12038},[33,31848,100],{"emptyLinePlaceholder":99},[33,31850,31851,31853,31855,31857],{"class":35,"line":12043},[33,31852,28558],{"class":43},[33,31854,31410],{"class":60},[33,31856,30969],{"class":60},[33,31858,26917],{"class":72},[33,31860,31861,31863,31865],{"class":35,"line":12048},[33,31862,31533],{"class":47},[33,31864,31536],{"class":60},[33,31866,26917],{"class":72},[33,31868,31869,31871,31874],{"class":35,"line":12057},[33,31870,30972],{"class":72},[33,31872,31873],{"class":60}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[33,31875,26917],{"class":72},[33,31877,31878,31880],{"class":35,"line":12062},[33,31879,31507],{"class":72},[33,31881,26917],{"class":72},[33,31883,31884],{"class":35,"line":12068},[33,31885,30978],{"class":60},[33,31887,31888],{"class":35,"line":12089},[33,31889,100],{"emptyLinePlaceholder":99},[33,31891,31892,31895,31897,31899],{"class":35,"line":12095},[33,31893,31894],{"class":43},"  docker",[33,31896,31410],{"class":60},[33,31898,30969],{"class":60},[33,31900,26917],{"class":72},[33,31902,31903,31905,31907],{"class":35,"line":12109},[33,31904,31533],{"class":47},[33,31906,31536],{"class":60},[33,31908,26917],{"class":72},[33,31910,31911,31913,31916],{"class":35,"line":12115},[33,31912,30972],{"class":72},[33,31914,31915],{"class":60}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,31917,26917],{"class":72},[33,31919,31920,31922],{"class":35,"line":12142},[33,31921,31507],{"class":72},[33,31923,26917],{"class":72},[33,31925,31926],{"class":35,"line":12151},[33,31927,30978],{"class":60},[19,31929,31930],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31932,31933],{},[3736,31934],{"alt":28,"src":31935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31937,31938],{},[3736,31939],{"alt":28,"src":31940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[24236,31942,31944],{"id":31943},"_623清除构建缓存","6.2.3.清除构建缓存",[23,31946,31948],{"className":26060,"code":31947,"language":26062,"meta":28,"style":28},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[30,31949,31950,31955],{"__ignoreMap":28},[33,31951,31952],{"class":35,"line":36},[33,31953,31954],{"class":2487},"# 清理BuildKit构建缓存\n",[33,31956,31957,31959,31962,31965],{"class":35,"line":51},[33,31958,28791],{"class":43},[33,31960,31961],{"class":60}," builder",[33,31963,31964],{"class":60}," prune",[33,31966,31967],{"class":72}," -f\n",[19,31969,31970],{},[3736,31971],{"alt":28,"src":31972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[631,31974,31976],{"id":31975},"_63补充","6.3.补充",[24236,31978,31980],{"id":31979},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31982,31983],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31985,31986],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31988,31989],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[23,31991,31993],{"className":26060,"code":31992,"language":26062,"meta":28,"style":28},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[30,31994,31995,32002],{"__ignoreMap":28},[33,31996,31997,31999],{"class":35,"line":36},[33,31998,29608],{"class":43},[33,32000,32001],{"class":60}," nginx\n",[33,32003,32004,32006,32009,32012,32014],{"class":35,"line":51},[33,32005,30792],{"class":43},[33,32007,32008],{"class":60}," echo",[33,32010,32011],{"class":60}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[33,32013,28460],{"class":39},[33,32015,32016],{"class":60}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,32018,32019],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,32021,32022],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[23,32024,32026],{"className":26060,"code":32025,"language":26062,"meta":28,"style":28},"docker build -t nginx:tuling .\n",[30,32027,32028],{"__ignoreMap":28},[33,32029,32030,32032,32034,32036,32039],{"class":35,"line":36},[33,32031,28791],{"class":43},[33,32033,30969],{"class":60},[33,32035,30972],{"class":72},[33,32037,32038],{"class":60}," nginx:tuling",[33,32040,30978],{"class":60},[19,32042,32043],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,32045,32046],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[23,32048,32050],{"className":26060,"code":32049,"language":26062,"meta":28,"style":28},"docker run -d -p 92:80 nginx:tuling\n",[30,32051,32052],{"__ignoreMap":28},[33,32053,32054,32056,32058,32061,32063,32066],{"class":35,"line":36},[33,32055,28791],{"class":43},[33,32057,29468],{"class":60},[33,32059,32060],{"class":72}," -d",[33,32062,31453],{"class":72},[33,32064,32065],{"class":60}," 92:80",[33,32067,32068],{"class":60}," nginx:tuling\n",[19,32070,32071,32072],{},"4、访问 ",[2663,32073,32076],{"href":32074,"rel":32075},"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",[26103],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,32078,32079],{},[3736,32080],{"alt":28,"src":32081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,32083,32084],{},[3736,32085],{"alt":28,"src":32086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[24236,32088,32090],{"id":32089},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,32092,32093],{},"只需要知道大体流程即可",[19,32095,32096],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,32098,32099],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,32101,32102],{},"2、在Dockerfile中添加以下内容",[23,32104,32106],{"className":28329,"code":32105,"language":28331,"meta":28,"style":28},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[30,32107,32108,32113,32118,32123,32128,32133,32138,32143],{"__ignoreMap":28},[33,32109,32110],{"class":35,"line":36},[33,32111,32112],{},"# 基于哪个镜像\n",[33,32114,32115],{"class":35,"line":51},[33,32116,32117],{},"From java:8\n",[33,32119,32120],{"class":35,"line":64},[33,32121,32122],{},"# 复制文件到容器\n",[33,32124,32125],{"class":35,"line":76},[33,32126,32127],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[33,32129,32130],{"class":35,"line":87},[33,32131,32132],{},"# 声明需要暴露的端口\n",[33,32134,32135],{"class":35,"line":96},[33,32136,32137],{},"EXPOSE 8877\n",[33,32139,32140],{"class":35,"line":103},[33,32141,32142],{},"# 配置容器启动后执行的命令\n",[33,32144,32145],{"class":35,"line":108},[33,32146,32147],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,32149,32150],{},"3、使用docker build命令构建镜像",[23,32152,32154],{"className":26060,"code":32153,"language":26062,"meta":28,"style":28},"docker build -t tulingmall-member:0.0.5 .\n",[30,32155,32156],{"__ignoreMap":28},[33,32157,32158,32160,32162,32164,32167],{"class":35,"line":36},[33,32159,28791],{"class":43},[33,32161,30969],{"class":60},[33,32163,30972],{"class":72},[33,32165,32166],{"class":60}," tulingmall-member:0.0.5",[33,32168,30978],{"class":60},[19,32170,32171],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,32173,32174],{},[3736,32175],{"alt":28,"src":32176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,32178,32179],{},"4、启动镜像，加-d可在后台启动",[23,32181,32183],{"className":26060,"code":32182,"language":26062,"meta":28,"style":28},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[30,32184,32185],{"__ignoreMap":28},[33,32186,32187,32189,32191,32193,32195,32198],{"class":35,"line":36},[33,32188,28791],{"class":43},[33,32190,29468],{"class":60},[33,32192,32060],{"class":72},[33,32194,31453],{"class":72},[33,32196,32197],{"class":60}," 8877:8877",[33,32199,32200],{"class":60}," tulingmall-member:0.0.5\n",[19,32202,32203],{},"加上JVM参数：",[23,32205,32207],{"className":26060,"code":32206,"language":26062,"meta":28,"style":28},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[30,32208,32209,32214,32229,32239,32248,32255],{"__ignoreMap":28},[33,32210,32211],{"class":35,"line":36},[33,32212,32213],{"class":2487},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[33,32215,32216,32218,32220,32223,32225,32227],{"class":35,"line":51},[33,32217,28791],{"class":43},[33,32219,29468],{"class":60},[33,32221,32222],{"class":72},"  -d",[33,32224,31453],{"class":72},[33,32226,32197],{"class":60},[33,32228,26917],{"class":72},[33,32230,32231,32233,32236],{"class":35,"line":64},[33,32232,30365],{"class":47},[33,32234,32235],{"class":60},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[33,32237,32238],{"class":72},"  \\\n",[33,32240,32241,32243,32246],{"class":35,"line":76},[33,32242,30365],{"class":47},[33,32244,32245],{"class":60},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[33,32247,32238],{"class":72},[33,32249,32250,32253],{"class":35,"line":87},[33,32251,32252],{"class":47},"--cap-add=SYS_PTRACE  ",[33,32254,28413],{"class":72},[33,32256,32257],{"class":35,"line":96},[33,32258,32259],{"class":47},"tulingmall-member:0.0.5\n",[19,32261,32262],{},"5、访问会员服务接口",[19,32264,32265],{},[3736,32266],{"alt":28,"src":32267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[24236,32269,32271],{"id":32270},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,32273,32274],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,32276,32277,32278],{},"阿里云docker镜像仓库：",[2663,32279,32280],{"href":32280,"rel":32281},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[26103],[19,32283,32284],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,32286,32287],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,32289,32290],{},[3736,32291],{"alt":28,"src":32292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32294,32295],{},"要把镜像推送到镜像仓库",[23,32297,32299],{"className":26060,"code":32298,"language":26062,"meta":28,"style":28},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,32300,32301],{"__ignoreMap":28},[33,32302,32303,32305,32307,32309],{"class":35,"line":36},[33,32304,28791],{"class":43},[33,32306,31134],{"class":60},[33,32308,32166],{"class":60},[33,32310,32311],{"class":60}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32313,32314],{},"最后将镜像推送到远程仓库",[23,32316,32318],{"className":26060,"code":32317,"language":26062,"meta":28,"style":28},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,32319,32320],{"__ignoreMap":28},[33,32321,32322,32324,32326],{"class":35,"line":36},[33,32323,28791],{"class":43},[33,32325,31253],{"class":60},[33,32327,32311],{"class":60},[2331,32329,32330],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":32332},[32333,32334,32335],{"id":30720,"depth":64,"text":30721},{"id":30949,"depth":64,"text":30950},{"id":31975,"depth":64,"text":31976},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30712,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32342,"title":32343,"body":32344,"description":28,"extension":2360,"meta":32487,"navigation":99,"path":32488,"seo":32489,"stem":32490,"__hash__":32491},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32345,"toc":32485},[32346,32349,32354,32359,32362,32367,32372,32375,32380,32385,32388,32393,32396,32399,32402,32405,32408,32411,32431,32453,32456,32459,32479,32482],[10,32347,32343],{"id":32348},"_7vscode远程开发",[328,32350,32351],{},[331,32352,32353],{},"插件1：微软Docker工具",[19,32355,32356],{},[3736,32357],{"alt":28,"src":32358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32360,32361],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32363,32364],{},[3736,32365],{"alt":28,"src":32366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[328,32368,32369],{"start":51},[331,32370,32371],{},"插件2：微软Docker远程开发工具",[19,32373,32374],{},"下面这是远程开发的插件。",[19,32376,32377],{},[3736,32378],{"alt":28,"src":32379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32381,32382],{},[3736,32383],{"alt":28,"src":32384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32386,32387],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32389,32390],{},[3736,32391],{"alt":28,"src":32392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32394,32395],{},"安装完拓展之后，vscode进行链接：",[19,32397,32398],{},"1.按ctrl+shift+p",[19,32400,32401],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32403,32404],{},"3.选择目前运行的容器",[19,32406,32407],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32409,32410],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[23,32412,32414],{"className":26060,"code":32413,"language":26062,"meta":28,"style":28},"docker run -v 主机目录:容器目录 image-name\n",[30,32415,32416],{"__ignoreMap":28},[33,32417,32418,32420,32422,32425,32428],{"class":35,"line":36},[33,32419,28791],{"class":43},[33,32421,29468],{"class":60},[33,32423,32424],{"class":72}," -v",[33,32426,32427],{"class":60}," 主机目录:容器目录",[33,32429,32430],{"class":60}," image-name\n",[23,32432,32434],{"className":26060,"code":32433,"language":26062,"meta":28,"style":28},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[30,32435,32436],{"__ignoreMap":28},[33,32437,32438,32440,32442,32445,32447,32450],{"class":35,"line":36},[33,32439,28791],{"class":43},[33,32441,29468],{"class":60},[33,32443,32444],{"class":72}," -it",[33,32446,32424],{"class":72},[33,32448,32449],{"class":60}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[33,32451,32452],{"class":60}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32454,32455],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32457,32458],{},"查看挂载情况：",[23,32460,32462],{"className":26060,"code":32461,"language":26062,"meta":28,"style":28},"mount | grep -i project\n",[30,32463,32464],{"__ignoreMap":28},[33,32465,32466,32469,32471,32474,32476],{"class":35,"line":36},[33,32467,32468],{"class":43},"mount",[33,32470,27348],{"class":39},[33,32472,32473],{"class":43}," grep",[33,32475,28668],{"class":72},[33,32477,32478],{"class":60}," project\n",[19,32480,32481],{},"也可以通过ls来进行查看",[2331,32483,32484],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":32486},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32343,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32493,"title":32494,"body":32495,"description":2359,"extension":2360,"meta":32499,"navigation":99,"path":32501,"seo":32502,"stem":32503,"__hash__":32504},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32496,"toc":32497},[],{"title":28,"searchDepth":51,"depth":51,"links":32498},[],{"category":32500},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32494,"description":2359},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32506,"title":32507,"body":32508,"description":2359,"extension":2360,"meta":32512,"navigation":99,"path":32513,"seo":32514,"stem":32515,"__hash__":32516},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32509,"toc":32510},[],{"title":28,"searchDepth":51,"depth":51,"links":32511},[],{"category":32500},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32507,"description":2359},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32518,"title":32519,"body":32520,"description":2359,"extension":2360,"meta":32809,"navigation":99,"path":32810,"seo":32811,"stem":32812,"__hash__":32813},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32521,"toc":32807},[32522,32525,32533,32548,32553,32604,32607,32613,32796,32801,32804],[10,32523,32519],{"id":32524},"_1验证深度学习环境",[19,32526,32527,32528],{},"关于环境的安装，看",[2663,32529,32532],{"href":32530,"rel":32531},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[26103],"Pytorch-->深度学习",[19,32534,32535,32536,32539,32540,32543,32544,32547],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[30,32537,32538],{},"pytorch-cuda=12.4"," 是一个“ ",[2575,32541,32542],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2575,32545,32546],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32549,32550],{},[3736,32551],{"alt":28,"src":32552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[23,32554,32556],{"className":26060,"code":32555,"language":26062,"meta":28,"style":28},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[30,32557,32558,32563],{"__ignoreMap":28},[33,32559,32560],{"class":35,"line":36},[33,32561,32562],{"class":2487},"# CUDA 12.4\n",[33,32564,32565,32568,32570,32573,32576,32579,32582,32585,32587,32590,32593,32596,32599,32601],{"class":35,"line":51},[33,32566,32567],{"class":43},"conda",[33,32569,26072],{"class":60},[33,32571,32572],{"class":60}," pytorch==",[33,32574,32575],{"class":72},"2.5.1",[33,32577,32578],{"class":60}," torchvision==",[33,32580,32581],{"class":72},"0.20.1",[33,32583,32584],{"class":60}," torchaudio==",[33,32586,32575],{"class":72},[33,32588,32589],{"class":60}," pytorch-cuda=",[33,32591,32592],{"class":72},"12.4",[33,32594,32595],{"class":72}," -c",[33,32597,32598],{"class":60}," pytorch",[33,32600,32595],{"class":72},[33,32602,32603],{"class":60}," nvidia\n",[19,32605,32606],{},"）：",[19,32608,32609],{},[2663,32610,32611],{"href":32611,"rel":32612},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[26103],[23,32614,32616],{"className":25,"code":32615,"language":27,"meta":28,"style":28},"# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n",[30,32617,32618,32623,32631,32636,32646,32661,32666,32676,32713,32720,32731,32747,32752,32762,32774,32784],{"__ignoreMap":28},[33,32619,32620],{"class":35,"line":36},[33,32621,32622],{"class":2487},"# 对深度学习环境进行测试\n",[33,32624,32625,32628],{"class":35,"line":51},[33,32626,32627],{"class":39},"import",[33,32629,32630],{"class":47}," torch\n",[33,32632,32633],{"class":35,"line":64},[33,32634,32635],{"class":2487},"# 查看cuda是否被激活\n",[33,32637,32638,32641,32643],{"class":35,"line":76},[33,32639,32640],{"class":47},"flag",[33,32642,57],{"class":39},[33,32644,32645],{"class":47},"torch.cuda.is_available()\n",[33,32647,32648,32650,32652,32655,32658],{"class":35,"line":87},[33,32649,122],{"class":72},[33,32651,133],{"class":47},[33,32653,32654],{"class":60},"\"cuda:\"",[33,32656,32657],{"class":47},", flag)   ",[33,32659,32660],{"class":2487},"#返回true的话说明被激活\n",[33,32662,32663],{"class":35,"line":96},[33,32664,32665],{"class":2487},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[33,32667,32668,32671,32673],{"class":35,"line":103},[33,32669,32670],{"class":47},"ngpu",[33,32672,57],{"class":39},[33,32674,32675],{"class":72},"1\n",[33,32677,32678,32681,32683,32686,32689,32691,32694,32697,32700,32702,32704,32706,32708,32711],{"class":35,"line":108},[33,32679,32680],{"class":47},"device",[33,32682,57],{"class":39},[33,32684,32685],{"class":47},"torch.device(",[33,32687,32688],{"class":60},"\"cuda:0\"",[33,32690,3966],{"class":39},[33,32692,32693],{"class":47},"(torch.cuda.is_available() ",[33,32695,32696],{"class":39},"and",[33,32698,32699],{"class":47}," ngpu",[33,32701,3367],{"class":39},[33,32703,2617],{"class":72},[33,32705,15954],{"class":47},[33,32707,3963],{"class":39},[33,32709,32710],{"class":60}," \"cpu\"",[33,32712,226],{"class":47},[33,32714,32715,32717],{"class":35,"line":119},[33,32716,122],{"class":72},[33,32718,32719],{"class":47},"(device)\n",[33,32721,32722,32724,32727,32729],{"class":35,"line":128},[33,32723,122],{"class":72},[33,32725,32726],{"class":47},"(torch.cuda.get_device_name(",[33,32728,2617],{"class":72},[33,32730,551],{"class":47},[33,32732,32733,32735,32738,32740,32742,32744],{"class":35,"line":1753},[33,32734,122],{"class":72},[33,32736,32737],{"class":47},"(torch.rand(",[33,32739,730],{"class":72},[33,32741,2799],{"class":47},[33,32743,730],{"class":72},[33,32745,32746],{"class":47},").cuda())\n",[33,32748,32749],{"class":35,"line":1763},[33,32750,32751],{"class":2487},"# 查看cuda和cudnn的版本\n",[33,32753,32754,32757,32759],{"class":35,"line":1775},[33,32755,32756],{"class":47},"cuda_version",[33,32758,57],{"class":39},[33,32760,32761],{"class":47},"torch.version.cuda\n",[33,32763,32764,32766,32768,32771],{"class":35,"line":1780},[33,32765,122],{"class":72},[33,32767,133],{"class":47},[33,32769,32770],{"class":60},"\"cuda version\"",[33,32772,32773],{"class":47},",cuda_version)\n",[33,32775,32776,32779,32781],{"class":35,"line":1785},[33,32777,32778],{"class":47},"cudnn_version",[33,32780,57],{"class":39},[33,32782,32783],{"class":47},"torch.backends.cudnn.version()\n",[33,32785,32786,32788,32790,32793],{"class":35,"line":1940},[33,32787,122],{"class":72},[33,32789,133],{"class":47},[33,32791,32792],{"class":60},"\"cudnn version\"",[33,32794,32795],{"class":47},",cudnn_version)\n",[19,32797,32798],{},[3736,32799],{"alt":28,"src":32800},"\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,32802,32803],{},"cuda:0 指的是一块显卡",[2331,32805,32806],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":28,"searchDepth":51,"depth":51,"links":32808},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32519,"description":2359},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32815,"title":32816,"body":32817,"description":2359,"extension":2360,"meta":52610,"navigation":99,"path":52611,"seo":52612,"stem":52613,"__hash__":52614},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32818,"toc":52604},[32819,32822,32826,32830,32833,32838,32843,32846,32851,32856,32861,32864,32868,32873,32877,32882,32885,32890,32893,32896,32899,32902,32907,32910,32915,32920,32925,32930,32933,32937,32940,32945,33546,33551,33554,33559,33562,33565,34028,34031,34034,34037,34040,36087,36090,36095,36100,36895,36898,36903,37681,37685,39344,39348,40062,40066,40070,40075,40080,40085,40088,40093,40098,40103,40108,40113,40117,40122,41402,41407,41410,41413,41416,41571,41574,41577,42793,42798,43493,43497,43501,43506,43511,43514,43519,43524,43529,43534,43539,43544,43549,43554,43559,43564,43569,43574,43579,43584,43589,43594,43599,43604,43609,43614,43619,43624,43629,43634,43639,43644,43649,43654,43659,43664,43668,43672,43675,45153,45157,46804,46808,47502,47506,47509,47512,48056,48059,48063,48066,49463,49467,49470,50047,51834,51838,51841,52601],[10,32820,32816],{"id":32821},"_2经典神经网络",[631,32823,32825],{"id":32824},"_21lenet与alexnet","2.1.LeNet与AlexNet",[24236,32827,32829],{"id":32828},"_211原理介绍","2.1.1.原理介绍",[19,32831,32832],{},"LeNet-5",[328,32834,32835],{},[331,32836,32837],{},"原理",[19,32839,32840],{},[3736,32841],{"alt":28,"src":32842},"\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,32844,32845],{},"B是batch批次；C是channel通道",[328,32847,32848],{"start":51},[331,32849,32850],{},"网络参数详细",[19,32852,32853],{},[3736,32854],{"alt":28,"src":32855},"\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,32857,32858],{},[3736,32859],{"alt":28,"src":32860},"\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,32862,32863],{},"AlexNet",[328,32865,32866],{},[331,32867,32837],{},[19,32869,32870],{},[3736,32871],{"alt":28,"src":32872},"\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",[328,32874,32875],{"start":51},[331,32876,32850],{},[19,32878,32879],{},[3736,32880],{"alt":28,"src":32881},"\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,32883,32884],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32886,32887],{},[3736,32888],{"alt":28,"src":32889},"\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,32891,32892],{},"数据处理中的图像增强操作:",[19,32894,32895],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32897,32898],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32900,32901],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32903,32904],{},[3736,32905],{"alt":28,"src":32906},"\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,32908,32909],{},"提升网络精确度的方法：LRN正则化",[19,32911,32912],{},[3736,32913],{"alt":28,"src":32914},"\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,32916,32917],{},[3736,32918],{"alt":28,"src":32919},"\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",[328,32921,32922],{"start":64},[331,32923,32924],{},"AlexNet的总结",[19,32926,32927],{},[3736,32928],{"alt":28,"src":32929},"\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,32931,32932],{},"比LeNet模型要深一丢丢",[24236,32934,32936],{"id":32935},"_212代码实现","2.1.2.代码实现",[19,32938,32939],{},"（1）LeNet",[328,32941,32942],{},[331,32943,32944],{},"模型搭建",[23,32946,32948],{"className":25,"code":32947,"language":27,"meta":28,"style":28},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[30,32949,32950,32955,32961,32966,32979,32984,32996,33000,33019,33024,33029,33039,33044,33063,33067,33072,33121,33133,33138,33167,33202,33229,33234,33246,33251,33271,33290,33309,33313,33318,33328,33345,33356,33371,33382,33393,33408,33423,33434,33441,33445,33459,33464,33487,33492,33497,33502,33506,33511,33516,33526],{"__ignoreMap":28},[33,32951,32952],{"class":35,"line":36},[33,32953,32954],{"class":2487},"# 导入库\n",[33,32956,32957,32959],{"class":35,"line":51},[33,32958,32627],{"class":39},[33,32960,32630],{"class":47},[33,32962,32963],{"class":35,"line":64},[33,32964,32965],{"class":2487},"# 导入神经网络层\n",[33,32967,32968,32971,32974,32976],{"class":35,"line":76},[33,32969,32970],{"class":39},"from",[33,32972,32973],{"class":47}," torch ",[33,32975,32627],{"class":39},[33,32977,32978],{"class":47}," nn\n",[33,32980,32981],{"class":35,"line":87},[33,32982,32983],{"class":2487},"# 导入展示神经网络参数的包\n",[33,32985,32986,32988,32991,32993],{"class":35,"line":96},[33,32987,32970],{"class":39},[33,32989,32990],{"class":47}," torchsummary ",[33,32992,32627],{"class":39},[33,32994,32995],{"class":47}," summary\n",[33,32997,32998],{"class":35,"line":103},[33,32999,100],{"emptyLinePlaceholder":99},[33,33001,33002,33004,33007,33009,33012,33014,33017],{"class":35,"line":108},[33,33003,16934],{"class":39},[33,33005,33006],{"class":43}," LeNet",[33,33008,133],{"class":47},[33,33010,33011],{"class":43},"nn",[33,33013,2975],{"class":47},[33,33015,33016],{"class":43},"Module",[33,33018,366],{"class":47},[33,33020,33021],{"class":35,"line":119},[33,33022,33023],{"class":2487},"    # 模型初始化:\n",[33,33025,33026],{"class":35,"line":128},[33,33027,33028],{"class":2487},"    # 定义一些网络层和激活函数\n",[33,33030,33031,33033,33036],{"class":35,"line":1753},[33,33032,1603],{"class":39},[33,33034,33035],{"class":72}," __init__",[33,33037,33038],{"class":47},"(self):\n",[33,33040,33041],{"class":35,"line":1763},[33,33042,33043],{"class":2487},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[33,33045,33046,33049,33052,33055,33058,33061],{"class":35,"line":1775},[33,33047,33048],{"class":72},"        super",[33,33050,33051],{"class":47},"(LeNet,",[33,33053,33054],{"class":72},"self",[33,33056,33057],{"class":47},").",[33,33059,33060],{"class":72},"__init__",[33,33062,4235],{"class":47},[33,33064,33065],{"class":35,"line":1780},[33,33066,100],{"emptyLinePlaceholder":99},[33,33068,33069],{"class":35,"line":1785},[33,33070,33071],{"class":2487},"        # 定义网络层\n",[33,33073,33074,33077,33080,33082,33085,33088,33090,33092,33094,33097,33099,33101,33103,33106,33108,33110,33112,33115,33117,33119],{"class":35,"line":1940},[33,33075,33076],{"class":72},"        self",[33,33078,33079],{"class":47},".c1",[33,33081,57],{"class":39},[33,33083,33084],{"class":47},"nn.Conv2d(",[33,33086,33087],{"class":289},"in_channels",[33,33089,57],{"class":39},[33,33091,720],{"class":72},[33,33093,2799],{"class":47},[33,33095,33096],{"class":289},"out_channels",[33,33098,57],{"class":39},[33,33100,2765],{"class":72},[33,33102,2799],{"class":47},[33,33104,33105],{"class":289},"kernel_size",[33,33107,57],{"class":39},[33,33109,758],{"class":72},[33,33111,2799],{"class":47},[33,33113,33114],{"class":289},"padding",[33,33116,57],{"class":39},[33,33118,725],{"class":72},[33,33120,226],{"class":47},[33,33122,33123,33125,33128,33130],{"class":35,"line":2183},[33,33124,33076],{"class":72},[33,33126,33127],{"class":47},".sig",[33,33129,57],{"class":39},[33,33131,33132],{"class":47},"nn.Sigmoid()\n",[33,33134,33135],{"class":35,"line":2208},[33,33136,33137],{"class":2487},"        # 定义池化\n",[33,33139,33140,33142,33145,33147,33150,33152,33154,33156,33158,33161,33163,33165],{"class":35,"line":2234},[33,33141,33076],{"class":72},[33,33143,33144],{"class":47},".s2",[33,33146,57],{"class":39},[33,33148,33149],{"class":47},"nn.AvgPool2d(",[33,33151,33105],{"class":289},[33,33153,57],{"class":39},[33,33155,725],{"class":72},[33,33157,2799],{"class":47},[33,33159,33160],{"class":289},"stride",[33,33162,57],{"class":39},[33,33164,725],{"class":72},[33,33166,226],{"class":47},[33,33168,33169,33171,33174,33176,33178,33180,33182,33184,33186,33188,33190,33192,33194,33196,33198,33200],{"class":35,"line":2239},[33,33170,33076],{"class":72},[33,33172,33173],{"class":47},".c3",[33,33175,57],{"class":39},[33,33177,33084],{"class":47},[33,33179,33087],{"class":289},[33,33181,57],{"class":39},[33,33183,2765],{"class":72},[33,33185,2799],{"class":47},[33,33187,33096],{"class":289},[33,33189,57],{"class":39},[33,33191,3018],{"class":72},[33,33193,2799],{"class":47},[33,33195,33105],{"class":289},[33,33197,57],{"class":39},[33,33199,758],{"class":72},[33,33201,226],{"class":47},[33,33203,33204,33206,33209,33211,33213,33215,33217,33219,33221,33223,33225,33227],{"class":35,"line":2247},[33,33205,33076],{"class":72},[33,33207,33208],{"class":47},".s4",[33,33210,57],{"class":39},[33,33212,33149],{"class":47},[33,33214,33105],{"class":289},[33,33216,57],{"class":39},[33,33218,725],{"class":72},[33,33220,2799],{"class":47},[33,33222,33160],{"class":289},[33,33224,57],{"class":39},[33,33226,725],{"class":72},[33,33228,226],{"class":47},[33,33230,33231],{"class":35,"line":2255},[33,33232,33233],{"class":2487},"        # 定义平展层\n",[33,33235,33236,33238,33241,33243],{"class":35,"line":3992},[33,33237,33076],{"class":72},[33,33239,33240],{"class":47},".flatten",[33,33242,57],{"class":39},[33,33244,33245],{"class":47},"nn.Flatten()\n",[33,33247,33248],{"class":35,"line":4009},[33,33249,33250],{"class":2487},"        # 定义全连接层\n",[33,33252,33253,33255,33258,33260,33263,33265,33267,33269],{"class":35,"line":4014},[33,33254,33076],{"class":72},[33,33256,33257],{"class":47},".f5",[33,33259,57],{"class":39},[33,33261,33262],{"class":47},"nn.Linear(",[33,33264,6241],{"class":72},[33,33266,2799],{"class":47},[33,33268,3229],{"class":72},[33,33270,226],{"class":47},[33,33272,33273,33275,33278,33280,33282,33284,33286,33288],{"class":35,"line":4019},[33,33274,33076],{"class":72},[33,33276,33277],{"class":47},".f6",[33,33279,57],{"class":39},[33,33281,33262],{"class":47},[33,33283,3229],{"class":72},[33,33285,2799],{"class":47},[33,33287,3124],{"class":72},[33,33289,226],{"class":47},[33,33291,33292,33294,33297,33299,33301,33303,33305,33307],{"class":35,"line":4024},[33,33293,33076],{"class":72},[33,33295,33296],{"class":47},".f7",[33,33298,57],{"class":39},[33,33300,33262],{"class":47},[33,33302,3124],{"class":72},[33,33304,2799],{"class":47},[33,33306,1279],{"class":72},[33,33308,226],{"class":47},[33,33310,33311],{"class":35,"line":4038},[33,33312,100],{"emptyLinePlaceholder":99},[33,33314,33315],{"class":35,"line":4043},[33,33316,33317],{"class":2487},"    # 写工具->写前向传播\n",[33,33319,33320,33322,33325],{"class":35,"line":4834},[33,33321,1603],{"class":39},[33,33323,33324],{"class":43}," forward",[33,33326,33327],{"class":47},"(self,x):\n",[33,33329,33330,33333,33335,33337,33340,33342],{"class":35,"line":4848},[33,33331,33332],{"class":47},"        x",[33,33334,57],{"class":39},[33,33336,33054],{"class":72},[33,33338,33339],{"class":47},".sig(",[33,33341,33054],{"class":72},[33,33343,33344],{"class":47},".c1(x))\n",[33,33346,33347,33349,33351,33353],{"class":35,"line":4856},[33,33348,33332],{"class":47},[33,33350,57],{"class":39},[33,33352,33054],{"class":72},[33,33354,33355],{"class":47},".s2(x)\n",[33,33357,33358,33360,33362,33364,33366,33368],{"class":35,"line":4861},[33,33359,33332],{"class":47},[33,33361,57],{"class":39},[33,33363,33054],{"class":72},[33,33365,33339],{"class":47},[33,33367,33054],{"class":72},[33,33369,33370],{"class":47},".c3(x))\n",[33,33372,33373,33375,33377,33379],{"class":35,"line":4867},[33,33374,33332],{"class":47},[33,33376,57],{"class":39},[33,33378,33054],{"class":72},[33,33380,33381],{"class":47},".s4(x)\n",[33,33383,33384,33386,33388,33390],{"class":35,"line":4873},[33,33385,33332],{"class":47},[33,33387,57],{"class":39},[33,33389,33054],{"class":72},[33,33391,33392],{"class":47},".flatten(x)\n",[33,33394,33395,33397,33399,33401,33403,33405],{"class":35,"line":4878},[33,33396,33332],{"class":47},[33,33398,57],{"class":39},[33,33400,33054],{"class":72},[33,33402,33339],{"class":47},[33,33404,33054],{"class":72},[33,33406,33407],{"class":47},".f5(x))\n",[33,33409,33410,33412,33414,33416,33418,33420],{"class":35,"line":10194},[33,33411,33332],{"class":47},[33,33413,57],{"class":39},[33,33415,33054],{"class":72},[33,33417,33339],{"class":47},[33,33419,33054],{"class":72},[33,33421,33422],{"class":47},".f6(x))\n",[33,33424,33425,33427,33429,33431],{"class":35,"line":10218},[33,33426,33332],{"class":47},[33,33428,57],{"class":39},[33,33430,33054],{"class":72},[33,33432,33433],{"class":47},".f7(x)\n",[33,33435,33436,33438],{"class":35,"line":10223},[33,33437,1614],{"class":39},[33,33439,33440],{"class":47}," x\n",[33,33442,33443],{"class":35,"line":10229},[33,33444,100],{"emptyLinePlaceholder":99},[33,33446,33447,33449,33452,33454,33457],{"class":35,"line":10256},[33,33448,3805],{"class":39},[33,33450,33451],{"class":72}," __name__",[33,33453,5206],{"class":39},[33,33455,33456],{"class":60},"\"__main__\"",[33,33458,605],{"class":47},[33,33460,33461],{"class":35,"line":10261},[33,33462,33463],{"class":2487},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[33,33465,33466,33469,33471,33473,33476,33478,33481,33483,33485],{"class":35,"line":10267},[33,33467,33468],{"class":47},"    device",[33,33470,57],{"class":39},[33,33472,32685],{"class":47},[33,33474,33475],{"class":60},"\"cuda\"",[33,33477,3966],{"class":39},[33,33479,33480],{"class":47}," torch.cuda.is_available() ",[33,33482,3963],{"class":39},[33,33484,32710],{"class":60},[33,33486,226],{"class":47},[33,33488,33489],{"class":35,"line":10279},[33,33490,33491],{"class":2487},"    # 如果就是想指定用cpu用下方代码:\n",[33,33493,33494],{"class":35,"line":10291},[33,33495,33496],{"class":2487},"    # device=\"cpu\"\n",[33,33498,33499],{"class":35,"line":10303},[33,33500,33501],{"class":2487},"    # print(device)\n",[33,33503,33504],{"class":35,"line":11961},[33,33505,100],{"emptyLinePlaceholder":99},[33,33507,33508],{"class":35,"line":11986},[33,33509,33510],{"class":2487},"    # 实例化模型\n",[33,33512,33513],{"class":35,"line":12009},[33,33514,33515],{"class":2487},"    # 将模型放到设备中去运行\n",[33,33517,33518,33521,33523],{"class":35,"line":12033},[33,33519,33520],{"class":47},"    model",[33,33522,57],{"class":39},[33,33524,33525],{"class":47},"LeNet().to(device)\n",[33,33527,33528,33530,33533,33535,33537,33539,33541,33543],{"class":35,"line":12038},[33,33529,193],{"class":72},[33,33531,33532],{"class":47},"(summary(model,(",[33,33534,720],{"class":72},[33,33536,2799],{"class":47},[33,33538,3310],{"class":72},[33,33540,2799],{"class":47},[33,33542,3310],{"class":72},[33,33544,33545],{"class":47},")))\n",[19,33547,33548],{},[3736,33549],{"alt":28,"src":33550},"\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,33552,33553],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[328,33555,33556],{"start":51},[331,33557,33558],{},"训练",[19,33560,33561],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33563,33564],{},"在训练之前可以将数据展示看一下",[23,33566,33568],{"className":25,"code":33567,"language":27,"meta":28,"style":28},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[30,33569,33570,33575,33580,33592,33604,33617,33622,33634,33639,33651,33656,33668,33672,33676,33697,33708,33713,33734,33745,33749,33754,33772,33783,33788,33799,33804,33815,33819,33824,33839,33852,33857,33862,33875,33888,33901,33906,33910,33915,33935,33952,33972,33985,33998,34008,34023],{"__ignoreMap":28},[33,33571,33572],{"class":35,"line":36},[33,33573,33574],{"class":2487},"# 建立画图的函数，用于展示数据\n",[33,33576,33577],{"class":35,"line":51},[33,33578,33579],{"class":2487},"# torchvision中包含很多内置的数据集\n",[33,33581,33582,33584,33587,33589],{"class":35,"line":64},[33,33583,32970],{"class":39},[33,33585,33586],{"class":47}," sklearn.externals.array_api_compat.torch ",[33,33588,32627],{"class":39},[33,33590,33591],{"class":47}," squeeze\n",[33,33593,33594,33596,33599,33601],{"class":35,"line":76},[33,33595,32970],{"class":39},[33,33597,33598],{"class":47}," torchvision.datasets ",[33,33600,32627],{"class":39},[33,33602,33603],{"class":47}," FashionMNIST\n",[33,33605,33606,33608,33611,33614],{"class":35,"line":87},[33,33607,32627],{"class":39},[33,33609,33610],{"class":47}," numpy ",[33,33612,33613],{"class":39},"as",[33,33615,33616],{"class":47}," np\n",[33,33618,33619],{"class":35,"line":96},[33,33620,33621],{"class":2487},"# 引入处理数据集的包\n",[33,33623,33624,33626,33629,33631],{"class":35,"line":103},[33,33625,32970],{"class":39},[33,33627,33628],{"class":47}," torchvision ",[33,33630,32627],{"class":39},[33,33632,33633],{"class":47}," transforms\n",[33,33635,33636],{"class":35,"line":108},[33,33637,33638],{"class":2487},"# 从torch库中引入数据处理的包\n",[33,33640,33641,33643,33646,33648],{"class":35,"line":119},[33,33642,32627],{"class":39},[33,33644,33645],{"class":47}," torch.utils.data ",[33,33647,33613],{"class":39},[33,33649,33650],{"class":47}," Data\n",[33,33652,33653],{"class":35,"line":128},[33,33654,33655],{"class":2487},"# 导入画图的库\n",[33,33657,33658,33660,33663,33665],{"class":35,"line":1753},[33,33659,32627],{"class":39},[33,33661,33662],{"class":47}," matplotlib.pyplot ",[33,33664,33613],{"class":39},[33,33666,33667],{"class":47}," plt\n",[33,33669,33670],{"class":35,"line":1763},[33,33671,100],{"emptyLinePlaceholder":99},[33,33673,33674],{"class":35,"line":1775},[33,33675,100],{"emptyLinePlaceholder":99},[33,33677,33678,33681,33683,33686,33689,33691,33694],{"class":35,"line":1780},[33,33679,33680],{"class":47},"train_data",[33,33682,57],{"class":39},[33,33684,33685],{"class":47},"FashionMNIST(",[33,33687,33688],{"class":289},"root",[33,33690,57],{"class":39},[33,33692,33693],{"class":60},"'.\u002Fdata'",[33,33695,33696],{"class":47},",\n",[33,33698,33699,33702,33704,33706],{"class":35,"line":1785},[33,33700,33701],{"class":289},"                        train",[33,33703,57],{"class":39},[33,33705,1190],{"class":72},[33,33707,33696],{"class":47},[33,33709,33710],{"class":35,"line":1940},[33,33711,33712],{"class":2487},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[33,33714,33715,33718,33720,33723,33726,33728,33731],{"class":35,"line":2183},[33,33716,33717],{"class":289},"                        transform",[33,33719,57],{"class":39},[33,33721,33722],{"class":47},"transforms.Compose([transforms.Resize(",[33,33724,33725],{"class":289},"size",[33,33727,57],{"class":39},[33,33729,33730],{"class":72},"224",[33,33732,33733],{"class":47},"),transforms.ToTensor()]),\n",[33,33735,33736,33739,33741,33743],{"class":35,"line":2208},[33,33737,33738],{"class":289},"                        download",[33,33740,57],{"class":39},[33,33742,1190],{"class":72},[33,33744,226],{"class":47},[33,33746,33747],{"class":35,"line":2234},[33,33748,100],{"emptyLinePlaceholder":99},[33,33750,33751],{"class":35,"line":2239},[33,33752,33753],{"class":2487},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[33,33755,33756,33759,33761,33764,33767,33769],{"class":35,"line":2247},[33,33757,33758],{"class":47},"train_loader",[33,33760,57],{"class":39},[33,33762,33763],{"class":47},"Data.DataLoader(",[33,33765,33766],{"class":289},"dataset",[33,33768,57],{"class":39},[33,33770,33771],{"class":47},"train_data,\n",[33,33773,33774,33777,33779,33781],{"class":35,"line":2255},[33,33775,33776],{"class":289},"                             batch_size",[33,33778,57],{"class":39},[33,33780,2629],{"class":72},[33,33782,33696],{"class":47},[33,33784,33785],{"class":35,"line":3992},[33,33786,33787],{"class":2487},"                             # 数据是否打乱\n",[33,33789,33790,33793,33795,33797],{"class":35,"line":4009},[33,33791,33792],{"class":289},"                             shuffle",[33,33794,57],{"class":39},[33,33796,1190],{"class":72},[33,33798,33696],{"class":47},[33,33800,33801],{"class":35,"line":4014},[33,33802,33803],{"class":2487},"                             # 规定加载数据的进程\n",[33,33805,33806,33809,33811,33813],{"class":35,"line":4019},[33,33807,33808],{"class":289},"                             num_workers",[33,33810,57],{"class":39},[33,33812,2617],{"class":72},[33,33814,226],{"class":47},[33,33816,33817],{"class":35,"line":4024},[33,33818,100],{"emptyLinePlaceholder":99},[33,33820,33821],{"class":35,"line":4038},[33,33822,33823],{"class":2487},"# 获得一个batch的数据\n",[33,33825,33826,33828,33831,33833,33836],{"class":35,"line":4043},[33,33827,5282],{"class":39},[33,33829,33830],{"class":47}," step,(b_x,b_y) ",[33,33832,681],{"class":39},[33,33834,33835],{"class":72}," enumerate",[33,33837,33838],{"class":47},"(train_loader):\n",[33,33840,33841,33843,33846,33848,33850],{"class":35,"line":4834},[33,33842,593],{"class":39},[33,33844,33845],{"class":47}," step ",[33,33847,3367],{"class":39},[33,33849,1437],{"class":72},[33,33851,605],{"class":47},[33,33853,33854],{"class":35,"line":4848},[33,33855,33856],{"class":39},"        break\n",[33,33858,33859],{"class":35,"line":4856},[33,33860,33861],{"class":2487},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[33,33863,33864,33867,33869,33872],{"class":35,"line":4861},[33,33865,33866],{"class":47},"batch_x",[33,33868,57],{"class":39},[33,33870,33871],{"class":47},"b_x.squeeze().numpy()  ",[33,33873,33874],{"class":2487},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[33,33876,33877,33880,33882,33885],{"class":35,"line":4867},[33,33878,33879],{"class":47},"batch_y",[33,33881,57],{"class":39},[33,33883,33884],{"class":47},"b_y.numpy()   ",[33,33886,33887],{"class":2487},"#将张量转换成功numpy数组\n",[33,33889,33890,33893,33895,33898],{"class":35,"line":4873},[33,33891,33892],{"class":47},"class_label",[33,33894,57],{"class":39},[33,33896,33897],{"class":47},"train_data.classes  ",[33,33899,33900],{"class":2487},"#训练集标签\n",[33,33902,33903],{"class":35,"line":4878},[33,33904,33905],{"class":2487},"# print(class_label)\n",[33,33907,33908],{"class":35,"line":10194},[33,33909,100],{"emptyLinePlaceholder":99},[33,33911,33912],{"class":35,"line":10218},[33,33913,33914],{"class":2487},"# 可视化一个batch的图像\n",[33,33916,33917,33920,33923,33925,33927,33929,33931,33933],{"class":35,"line":10223},[33,33918,33919],{"class":47},"plt.figure(",[33,33921,33922],{"class":289},"figsize",[33,33924,57],{"class":39},[33,33926,133],{"class":47},[33,33928,2915],{"class":72},[33,33930,2799],{"class":47},[33,33932,758],{"class":72},[33,33934,551],{"class":47},[33,33936,33937,33939,33942,33944,33947,33949],{"class":35,"line":10229},[33,33938,5282],{"class":39},[33,33940,33941],{"class":47}," ii ",[33,33943,681],{"class":39},[33,33945,33946],{"class":47}," np.arange(",[33,33948,9604],{"class":72},[33,33950,33951],{"class":47},"(batch_y)):\n",[33,33953,33954,33957,33959,33961,33963,33966,33968,33970],{"class":35,"line":10256},[33,33955,33956],{"class":47},"    plt.subplot(",[33,33958,753],{"class":72},[33,33960,2799],{"class":47},[33,33962,3018],{"class":72},[33,33964,33965],{"class":47},",ii ",[33,33967,880],{"class":39},[33,33969,27357],{"class":72},[33,33971,226],{"class":47},[33,33973,33974,33977,33980,33982],{"class":35,"line":10261},[33,33975,33976],{"class":47},"    plt.imshow(batch_x[ii,:,:],",[33,33978,33979],{"class":289},"cmap",[33,33981,57],{"class":39},[33,33983,33984],{"class":47},"plt.cm.gray)\n",[33,33986,33987,33990,33992,33994,33996],{"class":35,"line":10267},[33,33988,33989],{"class":47},"    plt.title(class_label[batch_y[ii]],",[33,33991,33725],{"class":289},[33,33993,57],{"class":39},[33,33995,1279],{"class":72},[33,33997,226],{"class":47},[33,33999,34000,34003,34006],{"class":35,"line":10279},[33,34001,34002],{"class":47},"    plt.axis(",[33,34004,34005],{"class":60},"\"off\"",[33,34007,226],{"class":47},[33,34009,34010,34013,34016,34018,34021],{"class":35,"line":10291},[33,34011,34012],{"class":47},"    plt.subplots_adjust(",[33,34014,34015],{"class":289},"wspace",[33,34017,57],{"class":39},[33,34019,34020],{"class":72},"0.05",[33,34022,226],{"class":47},[33,34024,34025],{"class":35,"line":10303},[33,34026,34027],{"class":47},"plt.show()\n",[19,34029,34030],{},"用matplotlib进行展示的过程可以后续再补",[19,34032,34033],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,34035,34036],{},"训练次数就是按照批次过整个训练集数据的次数",[19,34038,34039],{},"模型训练：",[23,34041,34043],{"className":25,"code":34042,"language":27,"meta":28,"style":28},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[30,34044,34045,34052,34059,34063,34075,34081,34092,34102,34112,34122,34132,34137,34149,34159,34163,34167,34172,34181,34194,34205,34222,34233,34272,34288,34300,34311,34316,34327,34343,34354,34365,34376,34383,34387,34392,34397,34401,34406,34416,34437,34441,34445,34450,34455,34460,34480,34484,34489,34499,34503,34508,34517,34522,34527,34532,34542,34546,34550,34555,34560,34570,34575,34585,34590,34599,34604,34613,34618,34627,34631,34636,34646,34650,34654,34659,34674,34701,34716,34720,34725,34730,34739,34744,34753,34758,34767,34772,34781,34786,34795,34800,34809,34814,34827,34832,34842,34847,34857,34863,34869,34875,34881,34892,34898,34918,34924,34935,34941,34947,34953,34959,34965,34971,34977,34997,35003,35019,35025,35039,35045,35060,35066,35075,35081,35090,35096,35102,35111,35117,35128,35134,35153,35159,35170,35176,35196,35212,35218,35232,35238,35244,35255,35261,35267,35277,35283,35294,35300,35310,35315,35321,35370,35417,35422,35428,35447,35453,35472,35478,35484,35494,35499,35505,35521,35566,35572,35578,35584,35595,35601,35607,35613,35631,35645,35654,35663,35672,35681,35687,35693,35701,35706,35712,35723,35729,35749,35755,35761,35767,35784,35790,35796,35802,35808,35814,35841,35865,35871,35877,35883,35894,35905,35911,35928,35951,35974,35980,35985,35994,36004,36010,36015,36021,36034,36040,36051,36062,36081],{"__ignoreMap":28},[33,34046,34047,34049],{"class":35,"line":36},[33,34048,32627],{"class":39},[33,34050,34051],{"class":47}," copy\n",[33,34053,34054,34056],{"class":35,"line":51},[33,34055,32627],{"class":39},[33,34057,34058],{"class":47}," time\n",[33,34060,34061],{"class":35,"line":64},[33,34062,100],{"emptyLinePlaceholder":99},[33,34064,34065,34067,34070,34072],{"class":35,"line":76},[33,34066,32627],{"class":39},[33,34068,34069],{"class":47}," pandas ",[33,34071,33613],{"class":39},[33,34073,34074],{"class":47}," pd\n",[33,34076,34077,34079],{"class":35,"line":87},[33,34078,32627],{"class":39},[33,34080,32630],{"class":47},[33,34082,34083,34085,34087,34089],{"class":35,"line":96},[33,34084,32970],{"class":39},[33,34086,33645],{"class":47},[33,34088,32627],{"class":39},[33,34090,34091],{"class":47}," Dataset\n",[33,34093,34094,34096,34098,34100],{"class":35,"line":103},[33,34095,32970],{"class":39},[33,34097,33598],{"class":47},[33,34099,32627],{"class":39},[33,34101,33603],{"class":47},[33,34103,34104,34106,34108,34110],{"class":35,"line":108},[33,34105,32970],{"class":39},[33,34107,33628],{"class":47},[33,34109,32627],{"class":39},[33,34111,33633],{"class":47},[33,34113,34114,34116,34118,34120],{"class":35,"line":119},[33,34115,32627],{"class":39},[33,34117,33645],{"class":47},[33,34119,33613],{"class":39},[33,34121,33650],{"class":47},[33,34123,34124,34126,34128,34130],{"class":35,"line":128},[33,34125,32627],{"class":39},[33,34127,33662],{"class":47},[33,34129,33613],{"class":39},[33,34131,33667],{"class":47},[33,34133,34134],{"class":35,"line":1753},[33,34135,34136],{"class":2487},"# 导入模型\n",[33,34138,34139,34141,34144,34146],{"class":35,"line":1763},[33,34140,32970],{"class":39},[33,34142,34143],{"class":47}," model ",[33,34145,32627],{"class":39},[33,34147,34148],{"class":47}," LeNet\n",[33,34150,34151,34153,34155,34157],{"class":35,"line":1775},[33,34152,32970],{"class":39},[33,34154,32973],{"class":47},[33,34156,32627],{"class":39},[33,34158,32978],{"class":47},[33,34160,34161],{"class":35,"line":1780},[33,34162,100],{"emptyLinePlaceholder":99},[33,34164,34165],{"class":35,"line":1785},[33,34166,100],{"emptyLinePlaceholder":99},[33,34168,34169],{"class":35,"line":1940},[33,34170,34171],{"class":2487},"# 处理训练集与验证集函数--->划分数据集\n",[33,34173,34174,34176,34179],{"class":35,"line":2183},[33,34175,40],{"class":39},[33,34177,34178],{"class":43}," train_val_data_process",[33,34180,48],{"class":47},[33,34182,34183,34186,34188,34190,34192],{"class":35,"line":2208},[33,34184,34185],{"class":47},"    train_data",[33,34187,57],{"class":39},[33,34189,33685],{"class":47},[33,34191,33693],{"class":60},[33,34193,33696],{"class":47},[33,34195,34196,34199,34201,34203],{"class":35,"line":2234},[33,34197,34198],{"class":289},"                            train",[33,34200,57],{"class":39},[33,34202,1190],{"class":72},[33,34204,33696],{"class":47},[33,34206,34207,34210,34212,34214,34216,34218,34220],{"class":35,"line":2239},[33,34208,34209],{"class":289},"                            transform",[33,34211,57],{"class":39},[33,34213,33722],{"class":47},[33,34215,33725],{"class":289},[33,34217,57],{"class":39},[33,34219,3310],{"class":72},[33,34221,33733],{"class":47},[33,34223,34224,34227,34229,34231],{"class":35,"line":2247},[33,34225,34226],{"class":289},"                            download",[33,34228,57],{"class":39},[33,34230,1190],{"class":72},[33,34232,226],{"class":47},[33,34234,34235,34238,34240,34243,34246,34248,34251,34253,34255,34258,34260,34262,34265,34267,34269],{"class":35,"line":2255},[33,34236,34237],{"class":47},"    train_data,val_data",[33,34239,57],{"class":39},[33,34241,34242],{"class":47},"Data.random_split(train_data,[",[33,34244,34245],{"class":72},"round",[33,34247,133],{"class":47},[33,34249,34250],{"class":72},"0.8",[33,34252,657],{"class":39},[33,34254,9604],{"class":72},[33,34256,34257],{"class":47},"(train_data)),",[33,34259,34245],{"class":72},[33,34261,133],{"class":47},[33,34263,34264],{"class":72},"0.2",[33,34266,657],{"class":39},[33,34268,9604],{"class":72},[33,34270,34271],{"class":47},"(train_data))])\n",[33,34273,34274,34277,34279,34282,34284,34286],{"class":35,"line":3992},[33,34275,34276],{"class":47},"    train_dataloader ",[33,34278,57],{"class":39},[33,34280,34281],{"class":47}," Data.DataLoader(",[33,34283,33766],{"class":289},[33,34285,57],{"class":39},[33,34287,33771],{"class":47},[33,34289,34290,34293,34295,34298],{"class":35,"line":4009},[33,34291,34292],{"class":289},"                                       batch_size",[33,34294,57],{"class":39},[33,34296,34297],{"class":72},"128",[33,34299,33696],{"class":47},[33,34301,34302,34305,34307,34309],{"class":35,"line":4014},[33,34303,34304],{"class":289},"                                       shuffle",[33,34306,57],{"class":39},[33,34308,1190],{"class":72},[33,34310,33696],{"class":47},[33,34312,34313],{"class":35,"line":4019},[33,34314,34315],{"class":2487},"                                       # 规定8个进程\n",[33,34317,34318,34321,34323,34325],{"class":35,"line":4024},[33,34319,34320],{"class":289},"                                       num_workers",[33,34322,57],{"class":39},[33,34324,2816],{"class":72},[33,34326,226],{"class":47},[33,34328,34329,34332,34334,34336,34338,34340],{"class":35,"line":4038},[33,34330,34331],{"class":47},"    val_dataloader",[33,34333,57],{"class":39},[33,34335,33763],{"class":47},[33,34337,33766],{"class":289},[33,34339,57],{"class":39},[33,34341,34342],{"class":47},"val_data,\n",[33,34344,34345,34348,34350,34352],{"class":35,"line":4043},[33,34346,34347],{"class":289},"                                   batch_size",[33,34349,57],{"class":39},[33,34351,34297],{"class":72},[33,34353,33696],{"class":47},[33,34355,34356,34359,34361,34363],{"class":35,"line":4834},[33,34357,34358],{"class":289},"                                   shuffle",[33,34360,57],{"class":39},[33,34362,1190],{"class":72},[33,34364,33696],{"class":47},[33,34366,34367,34370,34372,34374],{"class":35,"line":4848},[33,34368,34369],{"class":289},"                                   num_workers",[33,34371,57],{"class":39},[33,34373,2816],{"class":72},[33,34375,226],{"class":47},[33,34377,34378,34380],{"class":35,"line":4856},[33,34379,90],{"class":39},[33,34381,34382],{"class":47}," train_dataloader,val_dataloader\n",[33,34384,34385],{"class":35,"line":4861},[33,34386,100],{"emptyLinePlaceholder":99},[33,34388,34389],{"class":35,"line":4867},[33,34390,34391],{"class":2487},"# 验证是否出错\n",[33,34393,34394],{"class":35,"line":4873},[33,34395,34396],{"class":2487},"# train_val_data_process()\n",[33,34398,34399],{"class":35,"line":4878},[33,34400,100],{"emptyLinePlaceholder":99},[33,34402,34403],{"class":35,"line":10194},[33,34404,34405],{"class":2487},"# 定义模型训练函数\n",[33,34407,34408,34410,34413],{"class":35,"line":10218},[33,34409,40],{"class":39},[33,34411,34412],{"class":43}," train_model_process",[33,34414,34415],{"class":47},"(model,train_dataloader,val_dataloader,num_epochs):\n",[33,34417,34418,34420,34422,34424,34426,34428,34430,34432,34435],{"class":35,"line":10223},[33,34419,33468],{"class":47},[33,34421,57],{"class":39},[33,34423,32685],{"class":47},[33,34425,33475],{"class":60},[33,34427,3966],{"class":39},[33,34429,33480],{"class":47},[33,34431,3963],{"class":39},[33,34433,34434],{"class":60}," 'cpu'",[33,34436,226],{"class":47},[33,34438,34439],{"class":35,"line":10229},[33,34440,100],{"emptyLinePlaceholder":99},[33,34442,34443],{"class":35,"line":10256},[33,34444,100],{"emptyLinePlaceholder":99},[33,34446,34447],{"class":35,"line":10261},[33,34448,34449],{"class":2487},"    # 定义优化器\n",[33,34451,34452],{"class":35,"line":10267},[33,34453,34454],{"class":2487},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[33,34456,34457],{"class":35,"line":10279},[33,34458,34459],{"class":2487},"    # lr为学习率\n",[33,34461,34462,34465,34467,34470,34473,34475,34478],{"class":35,"line":10291},[33,34463,34464],{"class":47},"    optimizer",[33,34466,57],{"class":39},[33,34468,34469],{"class":47},"torch.optim.Adam(model.parameters(),",[33,34471,34472],{"class":289},"lr",[33,34474,57],{"class":39},[33,34476,34477],{"class":72},"0.001",[33,34479,226],{"class":47},[33,34481,34482],{"class":35,"line":10303},[33,34483,100],{"emptyLinePlaceholder":99},[33,34485,34486],{"class":35,"line":11961},[33,34487,34488],{"class":2487},"    # 定义损失函数使用交叉熵损失函数\n",[33,34490,34491,34494,34496],{"class":35,"line":11986},[33,34492,34493],{"class":47},"    criterion",[33,34495,57],{"class":39},[33,34497,34498],{"class":47},"nn.CrossEntropyLoss()\n",[33,34500,34501],{"class":35,"line":12009},[33,34502,100],{"emptyLinePlaceholder":99},[33,34504,34505],{"class":35,"line":12033},[33,34506,34507],{"class":2487},"    # 将模型放到GPU中进行训练\n",[33,34509,34510,34512,34514],{"class":35,"line":12038},[33,34511,33520],{"class":47},[33,34513,57],{"class":39},[33,34515,34516],{"class":47},"model.to(device)\n",[33,34518,34519],{"class":35,"line":12043},[33,34520,34521],{"class":2487},"    # 复制当前模型的参数\n",[33,34523,34524],{"class":35,"line":12048},[33,34525,34526],{"class":2487},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[33,34528,34529],{"class":35,"line":12057},[33,34530,34531],{"class":2487},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[33,34533,34534,34537,34539],{"class":35,"line":12062},[33,34535,34536],{"class":47},"    best_model_wts",[33,34538,57],{"class":39},[33,34540,34541],{"class":47},"copy.deepcopy(model.state_dict())\n",[33,34543,34544],{"class":35,"line":12068},[33,34545,100],{"emptyLinePlaceholder":99},[33,34547,34548],{"class":35,"line":12089},[33,34549,100],{"emptyLinePlaceholder":99},[33,34551,34552],{"class":35,"line":12095},[33,34553,34554],{"class":2487},"    # 初始化参数\n",[33,34556,34557],{"class":35,"line":12109},[33,34558,34559],{"class":2487},"    # 最高准确度\n",[33,34561,34562,34565,34567],{"class":35,"line":12115},[33,34563,34564],{"class":47},"    best_acc",[33,34566,57],{"class":39},[33,34568,34569],{"class":72},"0.0\n",[33,34571,34572],{"class":35,"line":12142},[33,34573,34574],{"class":2487},"    # 训练集损失列表\n",[33,34576,34577,34580,34582],{"class":35,"line":12151},[33,34578,34579],{"class":47},"    train_loss_all",[33,34581,57],{"class":39},[33,34583,34584],{"class":47},"[]\n",[33,34586,34587],{"class":35,"line":12157},[33,34588,34589],{"class":2487},"    # 验证集函数列表\n",[33,34591,34592,34595,34597],{"class":35,"line":12165},[33,34593,34594],{"class":47},"    val_loss_all",[33,34596,57],{"class":39},[33,34598,34584],{"class":47},[33,34600,34601],{"class":35,"line":12170},[33,34602,34603],{"class":2487},"    # 训练集准确度列表\n",[33,34605,34606,34609,34611],{"class":35,"line":18842},[33,34607,34608],{"class":47},"    train_acc_all",[33,34610,57],{"class":39},[33,34612,34584],{"class":47},[33,34614,34615],{"class":35,"line":18848},[33,34616,34617],{"class":2487},"    # 验证集准确度列表\n",[33,34619,34620,34623,34625],{"class":35,"line":18871},[33,34621,34622],{"class":47},"    val_acc_all",[33,34624,57],{"class":39},[33,34626,34584],{"class":47},[33,34628,34629],{"class":35,"line":18877},[33,34630,100],{"emptyLinePlaceholder":99},[33,34632,34633],{"class":35,"line":18900},[33,34634,34635],{"class":2487},"    # 保存当前时间--->方便看每轮训练的时间\n",[33,34637,34638,34641,34643],{"class":35,"line":18914},[33,34639,34640],{"class":47},"    since",[33,34642,57],{"class":39},[33,34644,34645],{"class":47},"time.time()\n",[33,34647,34648],{"class":35,"line":18934},[33,34649,100],{"emptyLinePlaceholder":99},[33,34651,34652],{"class":35,"line":18940},[33,34653,100],{"emptyLinePlaceholder":99},[33,34655,34656],{"class":35,"line":18951},[33,34657,34658],{"class":2487},"    # 准备工作完成--->开始训练模型\n",[33,34660,34661,34663,34666,34668,34671],{"class":35,"line":18974},[33,34662,675],{"class":39},[33,34664,34665],{"class":47}," epoch ",[33,34667,681],{"class":39},[33,34669,34670],{"class":72}," range",[33,34672,34673],{"class":47},"(num_epochs):\n",[33,34675,34676,34678,34680,34683,34686,34688,34690,34692,34695,34697,34699],{"class":35,"line":18996},[33,34677,807],{"class":72},[33,34679,133],{"class":47},[33,34681,34682],{"class":60},"\"Epoch ",[33,34684,34685],{"class":72},"{}",[33,34687,3001],{"class":60},[33,34689,34685],{"class":72},[33,34691,397],{"class":60},[33,34693,34694],{"class":47},".format(epoch,num_epochs",[33,34696,2949],{"class":39},[33,34698,720],{"class":72},[33,34700,551],{"class":47},[33,34702,34703,34705,34707,34710,34712,34714],{"class":35,"line":19001},[33,34704,807],{"class":72},[33,34706,133],{"class":47},[33,34708,34709],{"class":60},"\"-\"",[33,34711,657],{"class":39},[33,34713,1279],{"class":72},[33,34715,226],{"class":47},[33,34717,34718],{"class":35,"line":19007},[33,34719,100],{"emptyLinePlaceholder":99},[33,34721,34722],{"class":35,"line":19021},[33,34723,34724],{"class":2487},"        # 初始化参数\n",[33,34726,34727],{"class":35,"line":19034},[33,34728,34729],{"class":2487},"        # 训练集损失函数\n",[33,34731,34732,34735,34737],{"class":35,"line":19039},[33,34733,34734],{"class":47},"        train_loss",[33,34736,57],{"class":39},[33,34738,34569],{"class":72},[33,34740,34741],{"class":35,"line":19053},[33,34742,34743],{"class":2487},"        # 训练集准确度\n",[33,34745,34746,34749,34751],{"class":35,"line":19058},[33,34747,34748],{"class":47},"        train_corrects",[33,34750,57],{"class":39},[33,34752,5342],{"class":72},[33,34754,34755],{"class":35,"line":19064},[33,34756,34757],{"class":2487},"        # 验证集损失函数\n",[33,34759,34760,34763,34765],{"class":35,"line":19069},[33,34761,34762],{"class":47},"        val_loss",[33,34764,57],{"class":39},[33,34766,34569],{"class":72},[33,34768,34769],{"class":35,"line":19083},[33,34770,34771],{"class":2487},"        # 验证集准确度\n",[33,34773,34774,34777,34779],{"class":35,"line":19088},[33,34775,34776],{"class":47},"        val_corrects",[33,34778,57],{"class":39},[33,34780,5342],{"class":72},[33,34782,34783],{"class":35,"line":19093},[33,34784,34785],{"class":2487},"        # 训练集样本数量\n",[33,34787,34788,34791,34793],{"class":35,"line":19107},[33,34789,34790],{"class":47},"        train_num",[33,34792,57],{"class":39},[33,34794,5342],{"class":72},[33,34796,34797],{"class":35,"line":19119},[33,34798,34799],{"class":2487},"        # 验证集样本数量\n",[33,34801,34802,34805,34807],{"class":35,"line":19124},[33,34803,34804],{"class":47},"        val_num",[33,34806,57],{"class":39},[33,34808,5342],{"class":72},[33,34810,34811],{"class":35,"line":19137},[33,34812,34813],{"class":2487},"        # 将数据放到设备,并开始训练\n",[33,34815,34816,34818,34820,34822,34824],{"class":35,"line":19142},[33,34817,5658],{"class":39},[33,34819,33830],{"class":47},[33,34821,681],{"class":39},[33,34823,33835],{"class":72},[33,34825,34826],{"class":47},"(train_dataloader):\n",[33,34828,34829],{"class":35,"line":19147},[33,34830,34831],{"class":2487},"            # 将特征放入到训练设备\n",[33,34833,34834,34837,34839],{"class":35,"line":19152},[33,34835,34836],{"class":47},"            b_x",[33,34838,57],{"class":39},[33,34840,34841],{"class":47},"b_x.to(device)\n",[33,34843,34844],{"class":35,"line":19165},[33,34845,34846],{"class":2487},"            # 将标签放入到训练设备当中\n",[33,34848,34849,34852,34854],{"class":35,"line":19170},[33,34850,34851],{"class":47},"            b_y",[33,34853,57],{"class":39},[33,34855,34856],{"class":47},"b_y.to(device)\n",[33,34858,34860],{"class":35,"line":34859},98,[33,34861,34862],{"class":2487},"            # 设置模型为训练模式\n",[33,34864,34866],{"class":35,"line":34865},99,[33,34867,34868],{"class":47},"            model.train()\n",[33,34870,34872],{"class":35,"line":34871},100,[33,34873,34874],{"class":2487},"            # 将数据放到模型当中,开始前向传播\n",[33,34876,34878],{"class":35,"line":34877},101,[33,34879,34880],{"class":2487},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[33,34882,34884,34887,34889],{"class":35,"line":34883},102,[33,34885,34886],{"class":47},"            output",[33,34888,57],{"class":39},[33,34890,34891],{"class":47},"model(b_x)\n",[33,34893,34895],{"class":35,"line":34894},103,[33,34896,34897],{"class":2487},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[33,34899,34901,34904,34906,34909,34912,34914,34916],{"class":35,"line":34900},104,[33,34902,34903],{"class":47},"            pre_lab",[33,34905,57],{"class":39},[33,34907,34908],{"class":47},"torch.argmax(output,",[33,34910,34911],{"class":289},"dim",[33,34913,57],{"class":39},[33,34915,720],{"class":72},[33,34917,226],{"class":47},[33,34919,34921],{"class":35,"line":34920},105,[33,34922,34923],{"class":2487},"            # 计算每一个batch的损失函数\n",[33,34925,34927,34930,34932],{"class":35,"line":34926},106,[33,34928,34929],{"class":47},"            loss",[33,34931,57],{"class":39},[33,34933,34934],{"class":47},"criterion(output,b_y)\n",[33,34936,34938],{"class":35,"line":34937},107,[33,34939,34940],{"class":2487},"            # 将梯度初始化为0\n",[33,34942,34944],{"class":35,"line":34943},108,[33,34945,34946],{"class":47},"            optimizer.zero_grad()\n",[33,34948,34950],{"class":35,"line":34949},109,[33,34951,34952],{"class":2487},"            # 梯度置为0后再进行反向传播\n",[33,34954,34956],{"class":35,"line":34955},110,[33,34957,34958],{"class":47},"            loss.backward()\n",[33,34960,34962],{"class":35,"line":34961},111,[33,34963,34964],{"class":2487},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[33,34966,34968],{"class":35,"line":34967},112,[33,34969,34970],{"class":47},"            optimizer.step()\n",[33,34972,34974],{"class":35,"line":34973},113,[33,34975,34976],{"class":2487},"            # loss.item()指的是batch的平均损失\n",[33,34978,34980,34983,34985,34988,34990,34993,34995],{"class":35,"line":34979},114,[33,34981,34982],{"class":47},"            train_loss",[33,34984,692],{"class":39},[33,34986,34987],{"class":47},"loss.item()",[33,34989,657],{"class":39},[33,34991,34992],{"class":47},"b_x.size(",[33,34994,2617],{"class":72},[33,34996,226],{"class":47},[33,34998,35000],{"class":35,"line":34999},115,[33,35001,35002],{"class":2487},"            # 计算每个批次中正确预测的数量\n",[33,35004,35006,35009,35011,35014,35016],{"class":35,"line":35005},116,[33,35007,35008],{"class":47},"            train_corrects",[33,35010,692],{"class":39},[33,35012,35013],{"class":47},"torch.sum(pre_lab",[33,35015,5206],{"class":39},[33,35017,35018],{"class":47},"b_y.data)\n",[33,35020,35022],{"class":35,"line":35021},117,[33,35023,35024],{"class":2487},"            # 计算目前为止一共处理了多少样本\n",[33,35026,35028,35031,35033,35035,35037],{"class":35,"line":35027},118,[33,35029,35030],{"class":47},"            train_num",[33,35032,692],{"class":39},[33,35034,34992],{"class":47},[33,35036,2617],{"class":72},[33,35038,226],{"class":47},[33,35040,35042],{"class":35,"line":35041},119,[33,35043,35044],{"class":2487},"        # 验证数据\n",[33,35046,35048,35050,35053,35055,35057],{"class":35,"line":35047},120,[33,35049,5658],{"class":39},[33,35051,35052],{"class":47}," step ,(b_x,b_y) ",[33,35054,681],{"class":39},[33,35056,33835],{"class":72},[33,35058,35059],{"class":47},"(val_dataloader):\n",[33,35061,35063],{"class":35,"line":35062},121,[33,35064,35065],{"class":2487},"            # 将特征放到验证设备当中\n",[33,35067,35069,35071,35073],{"class":35,"line":35068},122,[33,35070,34836],{"class":47},[33,35072,57],{"class":39},[33,35074,34841],{"class":47},[33,35076,35078],{"class":35,"line":35077},123,[33,35079,35080],{"class":2487},"            # 将标签放到放到训练设备当中\n",[33,35082,35084,35086,35088],{"class":35,"line":35083},124,[33,35085,34851],{"class":47},[33,35087,57],{"class":39},[33,35089,34856],{"class":47},[33,35091,35093],{"class":35,"line":35092},125,[33,35094,35095],{"class":2487},"            # 开启验证模式，设置模型为评估模式\n",[33,35097,35099],{"class":35,"line":35098},126,[33,35100,35101],{"class":47},"            model.eval()\n",[33,35103,35105,35108],{"class":35,"line":35104},127,[33,35106,35107],{"class":39},"            with",[33,35109,35110],{"class":47}," torch.no_grad():\n",[33,35112,35114],{"class":35,"line":35113},128,[33,35115,35116],{"class":2487},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[33,35118,35120,35123,35125],{"class":35,"line":35119},129,[33,35121,35122],{"class":47},"                output ",[33,35124,57],{"class":39},[33,35126,35127],{"class":47}," model(b_x)\n",[33,35129,35131],{"class":35,"line":35130},130,[33,35132,35133],{"class":2487},"                # 查找每一行中最大值对应的下标\n",[33,35135,35137,35140,35142,35145,35147,35149,35151],{"class":35,"line":35136},131,[33,35138,35139],{"class":47},"                pre_lab ",[33,35141,57],{"class":39},[33,35143,35144],{"class":47}," torch.argmax(output, ",[33,35146,34911],{"class":289},[33,35148,57],{"class":39},[33,35150,720],{"class":72},[33,35152,226],{"class":47},[33,35154,35156],{"class":35,"line":35155},132,[33,35157,35158],{"class":2487},"                # 计算验证集上的当前 batch 损失\n",[33,35160,35162,35165,35167],{"class":35,"line":35161},133,[33,35163,35164],{"class":47},"                val_batch_loss ",[33,35166,57],{"class":39},[33,35168,35169],{"class":47}," criterion(output, b_y)\n",[33,35171,35173],{"class":35,"line":35172},134,[33,35174,35175],{"class":2487},"                # 对损失函数进行累加（按样本数加权）\n",[33,35177,35179,35182,35184,35187,35189,35192,35194],{"class":35,"line":35178},135,[33,35180,35181],{"class":47},"                val_loss ",[33,35183,692],{"class":39},[33,35185,35186],{"class":47}," val_batch_loss.item() ",[33,35188,657],{"class":39},[33,35190,35191],{"class":47}," b_x.size(",[33,35193,2617],{"class":72},[33,35195,226],{"class":47},[33,35197,35199,35202,35204,35207,35209],{"class":35,"line":35198},136,[33,35200,35201],{"class":47},"                val_corrects ",[33,35203,692],{"class":39},[33,35205,35206],{"class":47}," torch.sum(pre_lab ",[33,35208,5206],{"class":39},[33,35210,35211],{"class":47}," b_y.data)\n",[33,35213,35215],{"class":35,"line":35214},137,[33,35216,35217],{"class":2487},"                # 当前用于验证的样本数量\n",[33,35219,35221,35224,35226,35228,35230],{"class":35,"line":35220},138,[33,35222,35223],{"class":47},"            val_num ",[33,35225,692],{"class":39},[33,35227,35191],{"class":47},[33,35229,2617],{"class":72},[33,35231,226],{"class":47},[33,35233,35235],{"class":35,"line":35234},139,[33,35236,35237],{"class":2487},"        # 计算并保存每一次迭代的loss值和准确率\n",[33,35239,35241],{"class":35,"line":35240},140,[33,35242,35243],{"class":2487},"        # 计算并保存训练集的loss值\n",[33,35245,35247,35250,35252],{"class":35,"line":35246},141,[33,35248,35249],{"class":47},"        train_loss_all.append(train_loss",[33,35251,3001],{"class":39},[33,35253,35254],{"class":47},"train_num)\n",[33,35256,35258],{"class":35,"line":35257},142,[33,35259,35260],{"class":2487},"        # 取双精度\n",[33,35262,35264],{"class":35,"line":35263},143,[33,35265,35266],{"class":2487},"        # 计算并保存训练集的准确率\n",[33,35268,35270,35273,35275],{"class":35,"line":35269},144,[33,35271,35272],{"class":47},"        train_acc_all.append(train_corrects.double().item()",[33,35274,3001],{"class":39},[33,35276,35254],{"class":47},[33,35278,35280],{"class":35,"line":35279},145,[33,35281,35282],{"class":2487},"        # 计算并保存验证集的loss值\n",[33,35284,35286,35289,35291],{"class":35,"line":35285},146,[33,35287,35288],{"class":47},"        val_loss_all.append(val_loss",[33,35290,3001],{"class":39},[33,35292,35293],{"class":47},"val_num)\n",[33,35295,35297],{"class":35,"line":35296},147,[33,35298,35299],{"class":2487},"        # 计算并保存验证集的准确率\n",[33,35301,35303,35306,35308],{"class":35,"line":35302},148,[33,35304,35305],{"class":47},"        val_acc_all.append(val_corrects.double().item()",[33,35307,3001],{"class":39},[33,35309,35293],{"class":47},[33,35311,35313],{"class":35,"line":35312},149,[33,35314,100],{"emptyLinePlaceholder":99},[33,35316,35318],{"class":35,"line":35317},150,[33,35319,35320],{"class":2487},"        # 打印训练一轮的loss值和准确率\n",[33,35322,35324,35326,35328,35330,35332,35335,35337,35340,35342,35345,35347,35349,35351,35353,35356,35358,35360,35363,35365,35367],{"class":35,"line":35323},151,[33,35325,807],{"class":72},[33,35327,133],{"class":47},[33,35329,5847],{"class":60},[33,35331,34685],{"class":72},[33,35333,35334],{"class":60},"train loss:",[33,35336,204],{"class":72},[33,35338,35339],{"class":39},":.4f",[33,35341,210],{"class":72},[33,35343,35344],{"class":60}," train acc:",[33,35346,204],{"class":72},[33,35348,35339],{"class":39},[33,35350,210],{"class":72},[33,35352,5847],{"class":60},[33,35354,35355],{"class":47},".format(epoch,train_loss_all[",[33,35357,2949],{"class":39},[33,35359,720],{"class":72},[33,35361,35362],{"class":47},"],train_acc_all[",[33,35364,2949],{"class":39},[33,35366,720],{"class":72},[33,35368,35369],{"class":47},"]))\n",[33,35371,35373,35375,35377,35379,35381,35384,35386,35388,35390,35393,35395,35397,35399,35401,35404,35406,35408,35411,35413,35415],{"class":35,"line":35372},152,[33,35374,807],{"class":72},[33,35376,133],{"class":47},[33,35378,5847],{"class":60},[33,35380,34685],{"class":72},[33,35382,35383],{"class":60},"val loss:",[33,35385,204],{"class":72},[33,35387,35339],{"class":39},[33,35389,210],{"class":72},[33,35391,35392],{"class":60}," val acc:",[33,35394,204],{"class":72},[33,35396,35339],{"class":39},[33,35398,210],{"class":72},[33,35400,5847],{"class":60},[33,35402,35403],{"class":47},".format(epoch,val_loss_all[",[33,35405,2949],{"class":39},[33,35407,720],{"class":72},[33,35409,35410],{"class":47},"],val_acc_all[",[33,35412,2949],{"class":39},[33,35414,720],{"class":72},[33,35416,35369],{"class":47},[33,35418,35420],{"class":35,"line":35419},153,[33,35421,100],{"emptyLinePlaceholder":99},[33,35423,35425],{"class":35,"line":35424},154,[33,35426,35427],{"class":2487},"        # 判断准确度--->保存最优模型\n",[33,35429,35431,35433,35436,35438,35440,35442,35444],{"class":35,"line":35430},155,[33,35432,2130],{"class":39},[33,35434,35435],{"class":47}," val_acc_all[",[33,35437,2949],{"class":39},[33,35439,720],{"class":72},[33,35441,3348],{"class":47},[33,35443,3367],{"class":39},[33,35445,35446],{"class":47},"best_acc:\n",[33,35448,35450],{"class":35,"line":35449},156,[33,35451,35452],{"class":2487},"            # 保存当前模型准确度\n",[33,35454,35456,35459,35461,35463,35466,35468,35470],{"class":35,"line":35455},157,[33,35457,35458],{"class":47},"            best_acc:",[33,35460,2471],{"class":72},[33,35462,57],{"class":39},[33,35464,35465],{"class":47},"val_acc_all[",[33,35467,2949],{"class":39},[33,35469,720],{"class":72},[33,35471,919],{"class":47},[33,35473,35475],{"class":35,"line":35474},158,[33,35476,35477],{"class":2487},"            # 保存当前的准确度\n",[33,35479,35481],{"class":35,"line":35480},159,[33,35482,35483],{"class":2487},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[33,35485,35487,35490,35492],{"class":35,"line":35486},160,[33,35488,35489],{"class":47},"            best_model_wts",[33,35491,57],{"class":39},[33,35493,34541],{"class":47},[33,35495,35497],{"class":35,"line":35496},161,[33,35498,100],{"emptyLinePlaceholder":99},[33,35500,35502],{"class":35,"line":35501},162,[33,35503,35504],{"class":2487},"        # 计算耗时\n",[33,35506,35508,35511,35513,35516,35518],{"class":35,"line":35507},163,[33,35509,35510],{"class":47},"        time_use",[33,35512,57],{"class":39},[33,35514,35515],{"class":47},"time.time()",[33,35517,2949],{"class":39},[33,35519,35520],{"class":47},"since\n",[33,35522,35524,35526,35528,35531,35533,35536,35538,35540,35542,35544,35546,35549,35552,35555,35557,35560,35562,35564],{"class":35,"line":35523},164,[33,35525,807],{"class":72},[33,35527,133],{"class":47},[33,35529,35530],{"class":60},"'训练和验证耗费的时间",[33,35532,204],{"class":72},[33,35534,35535],{"class":39},":.0f",[33,35537,210],{"class":72},[33,35539,2961],{"class":60},[33,35541,204],{"class":72},[33,35543,35535],{"class":39},[33,35545,210],{"class":72},[33,35547,35548],{"class":60},"s'",[33,35550,35551],{"class":47},".format(time_use",[33,35553,35554],{"class":39},"\u002F\u002F",[33,35556,3316],{"class":72},[33,35558,35559],{"class":47},",time_use",[33,35561,1429],{"class":39},[33,35563,3316],{"class":72},[33,35565,551],{"class":47},[33,35567,35569],{"class":35,"line":35568},165,[33,35570,35571],{"class":2487},"    # 选择最优参数\n",[33,35573,35575],{"class":35,"line":35574},166,[33,35576,35577],{"class":2487},"    # 加载最高准确率下的模型参数\n",[33,35579,35581],{"class":35,"line":35580},167,[33,35582,35583],{"class":2487},"    # model.load_state_dict(best_model_wts)\n",[33,35585,35587,35590,35593],{"class":35,"line":35586},168,[33,35588,35589],{"class":47},"    torch.save(model.state_dict(best_model_wts), ",[33,35591,35592],{"class":60},"'.\u002Fbest_model.pth'",[33,35594,226],{"class":47},[33,35596,35598],{"class":35,"line":35597},169,[33,35599,35600],{"class":2487},"    # 或者写成\n",[33,35602,35604],{"class":35,"line":35603},170,[33,35605,35606],{"class":2487},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[33,35608,35610],{"class":35,"line":35609},171,[33,35611,35612],{"class":2487},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[33,35614,35616,35619,35621,35624,35627,35629],{"class":35,"line":35615},172,[33,35617,35618],{"class":47},"    train_process",[33,35620,57],{"class":39},[33,35622,35623],{"class":47},"pd.DataFrame(",[33,35625,35626],{"class":289},"data",[33,35628,57],{"class":39},[33,35630,3820],{"class":47},[33,35632,35634,35637,35639,35642],{"class":35,"line":35633},173,[33,35635,35636],{"class":60},"        \"epoch\"",[33,35638,387],{"class":47},[33,35640,35641],{"class":72},"range",[33,35643,35644],{"class":47},"(num_epochs),\n",[33,35646,35648,35651],{"class":35,"line":35647},174,[33,35649,35650],{"class":60},"        \"train_loss_all\"",[33,35652,35653],{"class":47},":train_loss_all,\n",[33,35655,35657,35660],{"class":35,"line":35656},175,[33,35658,35659],{"class":60},"        \"val_loss_all\"",[33,35661,35662],{"class":47},":val_loss_all,\n",[33,35664,35666,35669],{"class":35,"line":35665},176,[33,35667,35668],{"class":60},"        \"train_acc_all\"",[33,35670,35671],{"class":47},":train_acc_all,\n",[33,35673,35675,35678],{"class":35,"line":35674},177,[33,35676,35677],{"class":60},"        \"val_acc_all\"",[33,35679,35680],{"class":47},":val_acc_all\n",[33,35682,35684],{"class":35,"line":35683},178,[33,35685,35686],{"class":47},"    })\n",[33,35688,35690],{"class":35,"line":35689},179,[33,35691,35692],{"class":2487},"    # 返回训练保存的过程\n",[33,35694,35696,35698],{"class":35,"line":35695},180,[33,35697,90],{"class":39},[33,35699,35700],{"class":47}," train_process\n",[33,35702,35704],{"class":35,"line":35703},181,[33,35705,100],{"emptyLinePlaceholder":99},[33,35707,35709],{"class":35,"line":35708},182,[33,35710,35711],{"class":2487},"# 将loss值和精度按照图片的形式展示出来\n",[33,35713,35715,35717,35720],{"class":35,"line":35714},183,[33,35716,40],{"class":39},[33,35718,35719],{"class":43}," matplot_acc_loss",[33,35721,35722],{"class":47},"(train_process):\n",[33,35724,35726],{"class":35,"line":35725},184,[33,35727,35728],{"class":2487},"    # 设置图的大小\n",[33,35730,35732,35735,35737,35739,35741,35743,35745,35747],{"class":35,"line":35731},185,[33,35733,35734],{"class":47},"    plt.figure(",[33,35736,33922],{"class":289},[33,35738,57],{"class":39},[33,35740,133],{"class":47},[33,35742,2915],{"class":72},[33,35744,2799],{"class":47},[33,35746,753],{"class":72},[33,35748,551],{"class":47},[33,35750,35752],{"class":35,"line":35751},186,[33,35753,35754],{"class":2487},"    # 设置图中有几张图\n",[33,35756,35758],{"class":35,"line":35757},187,[33,35759,35760],{"class":2487},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[33,35762,35764],{"class":35,"line":35763},188,[33,35765,35766],{"class":2487},"    # ①loss图\n",[33,35768,35770,35772,35774,35776,35778,35780,35782],{"class":35,"line":35769},189,[33,35771,33956],{"class":47},[33,35773,720],{"class":72},[33,35775,2799],{"class":47},[33,35777,725],{"class":72},[33,35779,2799],{"class":47},[33,35781,720],{"class":72},[33,35783,226],{"class":47},[33,35785,35787],{"class":35,"line":35786},190,[33,35788,35789],{"class":2487},"    # 补充:\n",[33,35791,35793],{"class":35,"line":35792},191,[33,35794,35795],{"class":2487},"    # plt.subplot(nrows, ncols, index)\n",[33,35797,35799],{"class":35,"line":35798},192,[33,35800,35801],{"class":2487},"    # nrows：行数\n",[33,35803,35805],{"class":35,"line":35804},193,[33,35806,35807],{"class":2487},"    # ncols：列数\n",[33,35809,35811],{"class":35,"line":35810},194,[33,35812,35813],{"class":2487},"    # index：目前选中第几个子图（从1开始）\n",[33,35815,35817,35820,35823,35826,35829,35831,35834,35836,35839],{"class":35,"line":35816},195,[33,35818,35819],{"class":47},"    plt.plot(train_process[",[33,35821,35822],{"class":60},"\"epoch\"",[33,35824,35825],{"class":47},"],train_process.train_loss_all,",[33,35827,35828],{"class":60},"'ro-'",[33,35830,2799],{"class":47},[33,35832,35833],{"class":289},"label",[33,35835,57],{"class":39},[33,35837,35838],{"class":60},"'train loss'",[33,35840,226],{"class":47},[33,35842,35844,35846,35848,35851,35854,35856,35858,35860,35863],{"class":35,"line":35843},196,[33,35845,35819],{"class":47},[33,35847,35822],{"class":60},[33,35849,35850],{"class":47},"],train_process.val_loss_all,",[33,35852,35853],{"class":60},"'bs--'",[33,35855,2799],{"class":47},[33,35857,35833],{"class":289},[33,35859,57],{"class":39},[33,35861,35862],{"class":60},"'val loss'",[33,35864,226],{"class":47},[33,35866,35868],{"class":35,"line":35867},197,[33,35869,35870],{"class":2487},"    # 添加一个图例\n",[33,35872,35874],{"class":35,"line":35873},198,[33,35875,35876],{"class":47},"    plt.legend()\n",[33,35878,35880],{"class":35,"line":35879},199,[33,35881,35882],{"class":2487},"    # 给轴添加标签\n",[33,35884,35886,35889,35892],{"class":35,"line":35885},200,[33,35887,35888],{"class":47},"    plt.xlabel(",[33,35890,35891],{"class":60},"'epoch'",[33,35893,226],{"class":47},[33,35895,35897,35900,35903],{"class":35,"line":35896},201,[33,35898,35899],{"class":47},"    plt.ylabel(",[33,35901,35902],{"class":60},"'loss'",[33,35904,226],{"class":47},[33,35906,35908],{"class":35,"line":35907},202,[33,35909,35910],{"class":2487},"    # ②准确度图\n",[33,35912,35914,35916,35918,35920,35922,35924,35926],{"class":35,"line":35913},203,[33,35915,33956],{"class":47},[33,35917,720],{"class":72},[33,35919,2799],{"class":47},[33,35921,725],{"class":72},[33,35923,2799],{"class":47},[33,35925,725],{"class":72},[33,35927,226],{"class":47},[33,35929,35931,35933,35935,35938,35940,35942,35944,35946,35949],{"class":35,"line":35930},204,[33,35932,35819],{"class":47},[33,35934,35822],{"class":60},[33,35936,35937],{"class":47},"],train_process.train_acc_all,",[33,35939,35828],{"class":60},[33,35941,2799],{"class":47},[33,35943,35833],{"class":289},[33,35945,57],{"class":39},[33,35947,35948],{"class":60},"'train acc'",[33,35950,226],{"class":47},[33,35952,35954,35956,35958,35961,35963,35965,35967,35969,35972],{"class":35,"line":35953},205,[33,35955,35819],{"class":47},[33,35957,35822],{"class":60},[33,35959,35960],{"class":47},"],train_process.val_acc_all,",[33,35962,35853],{"class":60},[33,35964,2799],{"class":47},[33,35966,35833],{"class":289},[33,35968,57],{"class":39},[33,35970,35971],{"class":60},"'val acc'",[33,35973,226],{"class":47},[33,35975,35977],{"class":35,"line":35976},206,[33,35978,35979],{"class":2487},"    # 添加图例\n",[33,35981,35983],{"class":35,"line":35982},207,[33,35984,35876],{"class":47},[33,35986,35988,35990,35992],{"class":35,"line":35987},208,[33,35989,35888],{"class":47},[33,35991,35822],{"class":60},[33,35993,226],{"class":47},[33,35995,35997,35999,36002],{"class":35,"line":35996},209,[33,35998,35899],{"class":47},[33,36000,36001],{"class":60},"\"acc\"",[33,36003,226],{"class":47},[33,36005,36007],{"class":35,"line":36006},210,[33,36008,36009],{"class":47},"    plt.show()\n",[33,36011,36013],{"class":35,"line":36012},211,[33,36014,100],{"emptyLinePlaceholder":99},[33,36016,36018],{"class":35,"line":36017},212,[33,36019,36020],{"class":2487},"# 正式开始训练:\n",[33,36022,36024,36026,36028,36030,36032],{"class":35,"line":36023},213,[33,36025,3805],{"class":39},[33,36027,33451],{"class":72},[33,36029,5206],{"class":39},[33,36031,33456],{"class":60},[33,36033,605],{"class":47},[33,36035,36037],{"class":35,"line":36036},214,[33,36038,36039],{"class":2487},"    # 将模型实例化\n",[33,36041,36043,36046,36048],{"class":35,"line":36042},215,[33,36044,36045],{"class":47},"    LeNet",[33,36047,57],{"class":39},[33,36049,36050],{"class":47},"LeNet()\n",[33,36052,36054,36057,36059],{"class":35,"line":36053},216,[33,36055,36056],{"class":47},"    train_dataloader,val_dataloader",[33,36058,57],{"class":39},[33,36060,36061],{"class":47},"train_val_data_process()\n",[33,36063,36065,36067,36069,36072,36075,36077,36079],{"class":35,"line":36064},217,[33,36066,35618],{"class":47},[33,36068,57],{"class":39},[33,36070,36071],{"class":47},"train_model_process(LeNet,train_dataloader,val_dataloader,",[33,36073,36074],{"class":289},"num_epochs",[33,36076,57],{"class":39},[33,36078,1284],{"class":72},[33,36080,226],{"class":47},[33,36082,36084],{"class":35,"line":36083},218,[33,36085,36086],{"class":47},"    matplot_acc_loss(train_process)\n",[19,36088,36089],{},"画图的补充点学习：",[19,36091,36092],{},[3736,36093],{"alt":28,"src":36094},"\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",[328,36096,36097],{"start":64},[331,36098,36099],{},"测试",[23,36101,36103],{"className":25,"code":36102,"language":27,"meta":28,"style":28},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[30,36104,36105,36111,36121,36133,36143,36148,36158,36168,36172,36177,36186,36203,36215,36232,36243,36259,36264,36275,36286,36297,36304,36308,36313,36323,36328,36345,36353,36357,36362,36371,36380,36384,36389,36394,36399,36406,36411,36423,36433,36443,36448,36452,36457,36466,36471,36487,36492,36497,36502,36516,36521,36535,36539,36544,36559,36564,36576,36580,36585,36597,36602,36610,36615,36620,36630,36635,36644,36649,36654,36658,36663,36668,36684,36692,36697,36702,36761,36767,36772,36783,36791,36799,36803,36808,36812,36817,36825,36830,36846,36851,36861,36871],{"__ignoreMap":28},[33,36106,36107,36109],{"class":35,"line":36},[33,36108,32627],{"class":39},[33,36110,32630],{"class":47},[33,36112,36113,36115,36117,36119],{"class":35,"line":51},[33,36114,32627],{"class":39},[33,36116,33645],{"class":47},[33,36118,33613],{"class":39},[33,36120,33650],{"class":47},[33,36122,36123,36125,36128,36130],{"class":35,"line":64},[33,36124,32970],{"class":39},[33,36126,36127],{"class":47}," jupyter_client.consoleapp ",[33,36129,32627],{"class":39},[33,36131,36132],{"class":47}," classes\n",[33,36134,36135,36137,36139,36141],{"class":35,"line":76},[33,36136,32970],{"class":39},[33,36138,33628],{"class":47},[33,36140,32627],{"class":39},[33,36142,33633],{"class":47},[33,36144,36145],{"class":35,"line":87},[33,36146,36147],{"class":2487},"# 导入数据集\n",[33,36149,36150,36152,36154,36156],{"class":35,"line":96},[33,36151,32970],{"class":39},[33,36153,33598],{"class":47},[33,36155,32627],{"class":39},[33,36157,33603],{"class":47},[33,36159,36160,36162,36164,36166],{"class":35,"line":103},[33,36161,32970],{"class":39},[33,36163,34143],{"class":47},[33,36165,32627],{"class":39},[33,36167,34148],{"class":47},[33,36169,36170],{"class":35,"line":108},[33,36171,100],{"emptyLinePlaceholder":99},[33,36173,36174],{"class":35,"line":119},[33,36175,36176],{"class":2487},"# 测试数据处理\n",[33,36178,36179,36181,36184],{"class":35,"line":128},[33,36180,40],{"class":39},[33,36182,36183],{"class":43}," test_data_process",[33,36185,48],{"class":47},[33,36187,36188,36191,36193,36195,36197,36199,36201],{"class":35,"line":1753},[33,36189,36190],{"class":47},"    test_data",[33,36192,57],{"class":39},[33,36194,33685],{"class":47},[33,36196,33688],{"class":289},[33,36198,57],{"class":39},[33,36200,33693],{"class":60},[33,36202,33696],{"class":47},[33,36204,36205,36208,36210,36213],{"class":35,"line":1763},[33,36206,36207],{"class":289},"                           train",[33,36209,57],{"class":39},[33,36211,36212],{"class":72},"False",[33,36214,33696],{"class":47},[33,36216,36217,36220,36222,36224,36226,36228,36230],{"class":35,"line":1775},[33,36218,36219],{"class":289},"                           transform",[33,36221,57],{"class":39},[33,36223,33722],{"class":47},[33,36225,33725],{"class":289},[33,36227,57],{"class":39},[33,36229,3310],{"class":72},[33,36231,33733],{"class":47},[33,36233,36234,36237,36239,36241],{"class":35,"line":1780},[33,36235,36236],{"class":289},"                           download",[33,36238,57],{"class":39},[33,36240,1190],{"class":72},[33,36242,226],{"class":47},[33,36244,36245,36248,36250,36252,36254,36256],{"class":35,"line":1785},[33,36246,36247],{"class":47},"    test_dataloader",[33,36249,57],{"class":39},[33,36251,33763],{"class":47},[33,36253,33766],{"class":289},[33,36255,57],{"class":39},[33,36257,36258],{"class":47},"test_data,\n",[33,36260,36261],{"class":35,"line":1940},[33,36262,36263],{"class":2487},"                                    # 这里是一张一张进行测试\n",[33,36265,36266,36269,36271,36273],{"class":35,"line":2183},[33,36267,36268],{"class":289},"                                    batch_size",[33,36270,57],{"class":39},[33,36272,720],{"class":72},[33,36274,33696],{"class":47},[33,36276,36277,36280,36282,36284],{"class":35,"line":2208},[33,36278,36279],{"class":289},"                                    shuffle",[33,36281,57],{"class":39},[33,36283,1190],{"class":72},[33,36285,33696],{"class":47},[33,36287,36288,36291,36293,36295],{"class":35,"line":2234},[33,36289,36290],{"class":289},"                                    num_workers",[33,36292,57],{"class":39},[33,36294,2617],{"class":72},[33,36296,226],{"class":47},[33,36298,36299,36301],{"class":35,"line":2239},[33,36300,90],{"class":39},[33,36302,36303],{"class":47}," test_dataloader\n",[33,36305,36306],{"class":35,"line":2247},[33,36307,100],{"emptyLinePlaceholder":99},[33,36309,36310],{"class":35,"line":2255},[33,36311,36312],{"class":2487},"# 定义模型测试函数\n",[33,36314,36315,36317,36320],{"class":35,"line":3992},[33,36316,40],{"class":39},[33,36318,36319],{"class":43}," test_model_process",[33,36321,36322],{"class":47},"(model,test_dataloader):\n",[33,36324,36325],{"class":35,"line":4009},[33,36326,36327],{"class":2487},"    # 将模型放到设备当中，先进行判断\n",[33,36329,36330,36332,36334,36336,36338,36340,36342],{"class":35,"line":4014},[33,36331,33468],{"class":47},[33,36333,57],{"class":39},[33,36335,33475],{"class":60},[33,36337,3966],{"class":39},[33,36339,33480],{"class":47},[33,36341,3963],{"class":39},[33,36343,36344],{"class":60}," \"cpu\"\n",[33,36346,36347,36349,36351],{"class":35,"line":4019},[33,36348,33520],{"class":47},[33,36350,57],{"class":39},[33,36352,34516],{"class":47},[33,36354,36355],{"class":35,"line":4024},[33,36356,100],{"emptyLinePlaceholder":99},[33,36358,36359],{"class":35,"line":4038},[33,36360,36361],{"class":2487},"    # 设置初始化参数\n",[33,36363,36364,36367,36369],{"class":35,"line":4043},[33,36365,36366],{"class":47},"    test_corrects",[33,36368,57],{"class":39},[33,36370,34569],{"class":72},[33,36372,36373,36376,36378],{"class":35,"line":4834},[33,36374,36375],{"class":47},"    test_num",[33,36377,57],{"class":39},[33,36379,5342],{"class":72},[33,36381,36382],{"class":35,"line":4848},[33,36383,100],{"emptyLinePlaceholder":99},[33,36385,36386],{"class":35,"line":4856},[33,36387,36388],{"class":2487},"    # 进行模型测试\n",[33,36390,36391],{"class":35,"line":4861},[33,36392,36393],{"class":2487},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[33,36395,36396],{"class":35,"line":4867},[33,36397,36398],{"class":2487},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[33,36400,36401,36404],{"class":35,"line":4873},[33,36402,36403],{"class":39},"    with",[33,36405,35110],{"class":47},[33,36407,36408],{"class":35,"line":4878},[33,36409,36410],{"class":2487},"        # 从数据中进行\n",[33,36412,36413,36415,36418,36420],{"class":35,"line":10194},[33,36414,5658],{"class":39},[33,36416,36417],{"class":47}," test_data_x,test_data_y ",[33,36419,681],{"class":39},[33,36421,36422],{"class":47}," test_dataloader:\n",[33,36424,36425,36428,36430],{"class":35,"line":10218},[33,36426,36427],{"class":47},"            test_data_x",[33,36429,57],{"class":39},[33,36431,36432],{"class":47},"test_data_x.to(device)\n",[33,36434,36435,36438,36440],{"class":35,"line":10223},[33,36436,36437],{"class":47},"            test_data_y",[33,36439,57],{"class":39},[33,36441,36442],{"class":47},"test_data_y.to(device)\n",[33,36444,36445],{"class":35,"line":10229},[33,36446,36447],{"class":2487},"            # 设置为验证模式\n",[33,36449,36450],{"class":35,"line":10256},[33,36451,35101],{"class":47},[33,36453,36454],{"class":35,"line":10261},[33,36455,36456],{"class":2487},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[33,36458,36459,36461,36463],{"class":35,"line":10267},[33,36460,34886],{"class":47},[33,36462,57],{"class":39},[33,36464,36465],{"class":47},"model(test_data_x)\n",[33,36467,36468],{"class":35,"line":10279},[33,36469,36470],{"class":2487},"            # 查找每一行中最大值对应的下标\n",[33,36472,36473,36475,36477,36479,36481,36483,36485],{"class":35,"line":10291},[33,36474,34903],{"class":47},[33,36476,57],{"class":39},[33,36478,34908],{"class":47},[33,36480,34911],{"class":289},[33,36482,57],{"class":39},[33,36484,720],{"class":72},[33,36486,226],{"class":47},[33,36488,36489],{"class":35,"line":10303},[33,36490,36491],{"class":2487},"            # 计算正确率\n",[33,36493,36494],{"class":35,"line":11961},[33,36495,36496],{"class":2487},"            # .data表示是一个不带梯度信息的tensor\n",[33,36498,36499],{"class":35,"line":11986},[33,36500,36501],{"class":2487},"            # 如果预测正确，则准确度test_corrects加1\n",[33,36503,36504,36507,36509,36511,36513],{"class":35,"line":12009},[33,36505,36506],{"class":47},"            test_corrects",[33,36508,692],{"class":39},[33,36510,35013],{"class":47},[33,36512,5206],{"class":39},[33,36514,36515],{"class":47},"test_data_y.data)\n",[33,36517,36518],{"class":35,"line":12033},[33,36519,36520],{"class":2487},"            # 将所有的测试样本进行累计\n",[33,36522,36523,36526,36528,36531,36533],{"class":35,"line":12038},[33,36524,36525],{"class":47},"            test_num",[33,36527,692],{"class":39},[33,36529,36530],{"class":47},"test_data_x.size(",[33,36532,2617],{"class":72},[33,36534,226],{"class":47},[33,36536,36537],{"class":35,"line":12043},[33,36538,100],{"emptyLinePlaceholder":99},[33,36540,36541],{"class":35,"line":12048},[33,36542,36543],{"class":2487},"        # 计算准确度\n",[33,36545,36546,36549,36551,36554,36556],{"class":35,"line":12057},[33,36547,36548],{"class":47},"        test_acc",[33,36550,57],{"class":39},[33,36552,36553],{"class":47},"test_corrects.double().item()",[33,36555,3001],{"class":39},[33,36557,36558],{"class":47},"test_num\n",[33,36560,36561],{"class":35,"line":12062},[33,36562,36563],{"class":2487},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[33,36565,36566,36568,36570,36573],{"class":35,"line":12068},[33,36567,807],{"class":72},[33,36569,133],{"class":47},[33,36571,36572],{"class":60},"\"测试的准确率：\"",[33,36574,36575],{"class":47},",test_acc)\n",[33,36577,36578],{"class":35,"line":12089},[33,36579,100],{"emptyLinePlaceholder":99},[33,36581,36582],{"class":35,"line":12095},[33,36583,36584],{"class":2487},"# 实现模型的测试功能\n",[33,36586,36587,36589,36591,36593,36595],{"class":35,"line":12109},[33,36588,3805],{"class":39},[33,36590,33451],{"class":72},[33,36592,5206],{"class":39},[33,36594,33456],{"class":60},[33,36596,605],{"class":47},[33,36598,36599],{"class":35,"line":12115},[33,36600,36601],{"class":2487},"    # 加载模型\n",[33,36603,36604,36606,36608],{"class":35,"line":12142},[33,36605,33520],{"class":47},[33,36607,57],{"class":39},[33,36609,36050],{"class":47},[33,36611,36612],{"class":35,"line":12151},[33,36613,36614],{"class":2487},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[33,36616,36617],{"class":35,"line":12157},[33,36618,36619],{"class":2487},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[33,36621,36622,36625,36628],{"class":35,"line":12165},[33,36623,36624],{"class":47},"    model.load_state_dict(torch.load(",[33,36626,36627],{"class":60},"'best_model.pth'",[33,36629,551],{"class":47},[33,36631,36632],{"class":35,"line":12170},[33,36633,36634],{"class":2487},"    # 数据加载\n",[33,36636,36637,36639,36641],{"class":35,"line":18842},[33,36638,36247],{"class":47},[33,36640,57],{"class":39},[33,36642,36643],{"class":47},"test_data_process()\n",[33,36645,36646],{"class":35,"line":18848},[33,36647,36648],{"class":2487},"    # 加载模型测试的函数\n",[33,36650,36651],{"class":35,"line":18871},[33,36652,36653],{"class":47},"    test_model_process(model,test_dataloader)\n",[33,36655,36656],{"class":35,"line":18877},[33,36657,100],{"emptyLinePlaceholder":99},[33,36659,36660],{"class":35,"line":18900},[33,36661,36662],{"class":2487},"    # 验证集推理实现：\n",[33,36664,36665],{"class":35,"line":18914},[33,36666,36667],{"class":2487},"    # 加载数据加载的更详细一些\n",[33,36669,36670,36672,36674,36676,36678,36680,36682],{"class":35,"line":18934},[33,36671,33468],{"class":47},[33,36673,57],{"class":39},[33,36675,33475],{"class":60},[33,36677,3966],{"class":39},[33,36679,33480],{"class":47},[33,36681,3963],{"class":39},[33,36683,36344],{"class":60},[33,36685,36686,36688,36690],{"class":35,"line":18940},[33,36687,33520],{"class":47},[33,36689,57],{"class":39},[33,36691,34516],{"class":47},[33,36693,36694],{"class":35,"line":18951},[33,36695,36696],{"class":2487},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[33,36698,36699],{"class":35,"line":18974},[33,36700,36701],{"class":2487},"    # 顺序不可改变\n",[33,36703,36704,36707,36709,36711,36714,36716,36719,36721,36724,36726,36729,36731,36734,36736,36739,36741,36744,36746,36749,36751,36754,36756,36759],{"class":35,"line":18996},[33,36705,36706],{"class":47},"    classes",[33,36708,57],{"class":39},[33,36710,3300],{"class":47},[33,36712,36713],{"class":60},"'T-shirt\u002Ftop'",[33,36715,2799],{"class":47},[33,36717,36718],{"class":60},"'Trouser'",[33,36720,2799],{"class":47},[33,36722,36723],{"class":60},"'Pullover'",[33,36725,2799],{"class":47},[33,36727,36728],{"class":60},"'Dress'",[33,36730,2799],{"class":47},[33,36732,36733],{"class":60},"'Coat'",[33,36735,2799],{"class":47},[33,36737,36738],{"class":60},"'Sandal'",[33,36740,2799],{"class":47},[33,36742,36743],{"class":60},"'Shirt'",[33,36745,2799],{"class":47},[33,36747,36748],{"class":60},"'Sneaker'",[33,36750,2799],{"class":47},[33,36752,36753],{"class":60},"'Bag'",[33,36755,2799],{"class":47},[33,36757,36758],{"class":60},"'Ankle boot'",[33,36760,919],{"class":47},[33,36762,36763,36765],{"class":35,"line":19001},[33,36764,36403],{"class":39},[33,36766,35110],{"class":47},[33,36768,36769],{"class":35,"line":19007},[33,36770,36771],{"class":2487},"        # 将数据和标签都放到设备当中\n",[33,36773,36774,36776,36779,36781],{"class":35,"line":19021},[33,36775,5658],{"class":39},[33,36777,36778],{"class":47}," b_x,b_y ",[33,36780,681],{"class":39},[33,36782,36422],{"class":47},[33,36784,36785,36787,36789],{"class":35,"line":19034},[33,36786,34836],{"class":47},[33,36788,57],{"class":39},[33,36790,34841],{"class":47},[33,36792,36793,36795,36797],{"class":35,"line":19039},[33,36794,34851],{"class":47},[33,36796,57],{"class":39},[33,36798,34856],{"class":47},[33,36800,36801],{"class":35,"line":19053},[33,36802,100],{"emptyLinePlaceholder":99},[33,36804,36805],{"class":35,"line":19058},[33,36806,36807],{"class":2487},"            # 设置模型为验证模式\n",[33,36809,36810],{"class":35,"line":19064},[33,36811,35101],{"class":47},[33,36813,36814],{"class":35,"line":19069},[33,36815,36816],{"class":2487},"            # 模型推理结果\n",[33,36818,36819,36821,36823],{"class":35,"line":19083},[33,36820,34886],{"class":47},[33,36822,57],{"class":39},[33,36824,34891],{"class":47},[33,36826,36827],{"class":35,"line":19088},[33,36828,36829],{"class":2487},"            # 获取最大下标，最大下标就是类别号\n",[33,36831,36832,36834,36836,36838,36840,36842,36844],{"class":35,"line":19093},[33,36833,34903],{"class":47},[33,36835,57],{"class":39},[33,36837,34908],{"class":47},[33,36839,34911],{"class":289},[33,36841,57],{"class":39},[33,36843,720],{"class":72},[33,36845,226],{"class":47},[33,36847,36848],{"class":35,"line":19107},[33,36849,36850],{"class":2487},"            # 取出张量中的数值\n",[33,36852,36853,36856,36858],{"class":35,"line":19119},[33,36854,36855],{"class":47},"            result",[33,36857,57],{"class":39},[33,36859,36860],{"class":47},"pre_lab.item()\n",[33,36862,36863,36866,36868],{"class":35,"line":19124},[33,36864,36865],{"class":47},"            label",[33,36867,57],{"class":39},[33,36869,36870],{"class":47},"b_y.item()\n",[33,36872,36873,36876,36878,36881,36884,36887,36889,36892],{"class":35,"line":19137},[33,36874,36875],{"class":72},"            print",[33,36877,133],{"class":47},[33,36879,36880],{"class":60},"\"预测值：\"",[33,36882,36883],{"class":47},",classes[result],",[33,36885,36886],{"class":60},"\"------\"",[33,36888,2799],{"class":47},[33,36890,36891],{"class":60},"\"真实值：\"",[33,36893,36894],{"class":47},",classes[label])\n",[19,36896,36897],{},"（2）AlexNet",[328,36899,36900],{},[331,36901,36902],{},"神经网络构建",[23,36904,36906],{"className":25,"code":36905,"language":27,"meta":28,"style":28},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[30,36907,36908,36914,36924,36934,36946,36950,36967,36975,36990,37002,37044,37071,37114,37140,37184,37227,37270,37297,37301,37311,37316,37344,37363,37382,37386,37391,37399,37414,37424,37438,37448,37463,37478,37493,37504,37508,37513,37523,37538,37543,37557,37572,37584,37589,37600,37605,37611,37616,37628,37648,37653,37662],{"__ignoreMap":28},[33,36909,36910,36912],{"class":35,"line":36},[33,36911,32627],{"class":39},[33,36913,32630],{"class":47},[33,36915,36916,36918,36920,36922],{"class":35,"line":51},[33,36917,32970],{"class":39},[33,36919,32973],{"class":47},[33,36921,32627],{"class":39},[33,36923,32978],{"class":47},[33,36925,36926,36928,36930,36932],{"class":35,"line":64},[33,36927,32970],{"class":39},[33,36929,32990],{"class":47},[33,36931,32627],{"class":39},[33,36933,32995],{"class":47},[33,36935,36936,36938,36941,36943],{"class":35,"line":76},[33,36937,32627],{"class":39},[33,36939,36940],{"class":47}," torch.nn.functional ",[33,36942,33613],{"class":39},[33,36944,36945],{"class":47}," F\n",[33,36947,36948],{"class":35,"line":87},[33,36949,100],{"emptyLinePlaceholder":99},[33,36951,36952,36954,36957,36959,36961,36963,36965],{"class":35,"line":96},[33,36953,16934],{"class":39},[33,36955,36956],{"class":43}," AlexNet",[33,36958,133],{"class":47},[33,36960,33011],{"class":43},[33,36962,2975],{"class":47},[33,36964,33016],{"class":43},[33,36966,366],{"class":47},[33,36968,36969,36971,36973],{"class":35,"line":103},[33,36970,1603],{"class":39},[33,36972,33035],{"class":72},[33,36974,33038],{"class":47},[33,36976,36977,36979,36982,36984,36986,36988],{"class":35,"line":108},[33,36978,33048],{"class":72},[33,36980,36981],{"class":47},"(AlexNet,",[33,36983,33054],{"class":72},[33,36985,33057],{"class":47},[33,36987,33060],{"class":72},[33,36989,4235],{"class":47},[33,36991,36992,36994,36997,36999],{"class":35,"line":119},[33,36993,33076],{"class":72},[33,36995,36996],{"class":47},".ReLu",[33,36998,57],{"class":39},[33,37000,37001],{"class":47},"nn.ReLU()\n",[33,37003,37004,37006,37008,37010,37012,37014,37016,37018,37020,37022,37024,37026,37028,37030,37032,37034,37036,37038,37040,37042],{"class":35,"line":128},[33,37005,33076],{"class":72},[33,37007,33079],{"class":47},[33,37009,57],{"class":39},[33,37011,33084],{"class":47},[33,37013,33087],{"class":289},[33,37015,57],{"class":39},[33,37017,720],{"class":72},[33,37019,2799],{"class":47},[33,37021,33096],{"class":289},[33,37023,57],{"class":39},[33,37025,2635],{"class":72},[33,37027,2799],{"class":47},[33,37029,33105],{"class":289},[33,37031,57],{"class":39},[33,37033,2890],{"class":72},[33,37035,2799],{"class":47},[33,37037,33160],{"class":289},[33,37039,57],{"class":39},[33,37041,753],{"class":72},[33,37043,226],{"class":47},[33,37045,37046,37048,37050,37052,37055,37057,37059,37061,37063,37065,37067,37069],{"class":35,"line":1753},[33,37047,33076],{"class":72},[33,37049,33144],{"class":47},[33,37051,57],{"class":39},[33,37053,37054],{"class":47},"nn.MaxPool2d(",[33,37056,33105],{"class":289},[33,37058,57],{"class":39},[33,37060,730],{"class":72},[33,37062,2799],{"class":47},[33,37064,33160],{"class":289},[33,37066,57],{"class":39},[33,37068,725],{"class":72},[33,37070,226],{"class":47},[33,37072,37073,37075,37077,37079,37081,37083,37085,37087,37089,37091,37093,37096,37098,37100,37102,37104,37106,37108,37110,37112],{"class":35,"line":1763},[33,37074,33076],{"class":72},[33,37076,33173],{"class":47},[33,37078,57],{"class":39},[33,37080,33084],{"class":47},[33,37082,33087],{"class":289},[33,37084,57],{"class":39},[33,37086,2635],{"class":72},[33,37088,2799],{"class":47},[33,37090,33096],{"class":289},[33,37092,57],{"class":39},[33,37094,37095],{"class":72},"256",[33,37097,2799],{"class":47},[33,37099,33105],{"class":289},[33,37101,57],{"class":39},[33,37103,758],{"class":72},[33,37105,2799],{"class":47},[33,37107,33114],{"class":289},[33,37109,57],{"class":39},[33,37111,725],{"class":72},[33,37113,226],{"class":47},[33,37115,37116,37118,37120,37122,37124,37126,37128,37130,37132,37134,37136,37138],{"class":35,"line":1775},[33,37117,33076],{"class":72},[33,37119,33208],{"class":47},[33,37121,57],{"class":39},[33,37123,37054],{"class":47},[33,37125,33105],{"class":289},[33,37127,57],{"class":39},[33,37129,730],{"class":72},[33,37131,2799],{"class":47},[33,37133,33160],{"class":289},[33,37135,57],{"class":39},[33,37137,725],{"class":72},[33,37139,226],{"class":47},[33,37141,37142,37144,37147,37149,37151,37153,37155,37157,37159,37161,37163,37166,37168,37170,37172,37174,37176,37178,37180,37182],{"class":35,"line":1780},[33,37143,33076],{"class":72},[33,37145,37146],{"class":47},".c5",[33,37148,57],{"class":39},[33,37150,33084],{"class":47},[33,37152,33087],{"class":289},[33,37154,57],{"class":39},[33,37156,37095],{"class":72},[33,37158,2799],{"class":47},[33,37160,33096],{"class":289},[33,37162,57],{"class":39},[33,37164,37165],{"class":72},"384",[33,37167,2799],{"class":47},[33,37169,33105],{"class":289},[33,37171,57],{"class":39},[33,37173,730],{"class":72},[33,37175,2799],{"class":47},[33,37177,33114],{"class":289},[33,37179,57],{"class":39},[33,37181,720],{"class":72},[33,37183,226],{"class":47},[33,37185,37186,37188,37191,37193,37195,37197,37199,37201,37203,37205,37207,37209,37211,37213,37215,37217,37219,37221,37223,37225],{"class":35,"line":1785},[33,37187,33076],{"class":72},[33,37189,37190],{"class":47},".c6",[33,37192,57],{"class":39},[33,37194,33084],{"class":47},[33,37196,33087],{"class":289},[33,37198,57],{"class":39},[33,37200,37165],{"class":72},[33,37202,2799],{"class":47},[33,37204,33096],{"class":289},[33,37206,57],{"class":39},[33,37208,37165],{"class":72},[33,37210,2799],{"class":47},[33,37212,33105],{"class":289},[33,37214,57],{"class":39},[33,37216,730],{"class":72},[33,37218,2799],{"class":47},[33,37220,33114],{"class":289},[33,37222,57],{"class":39},[33,37224,720],{"class":72},[33,37226,226],{"class":47},[33,37228,37229,37231,37234,37236,37238,37240,37242,37244,37246,37248,37250,37252,37254,37256,37258,37260,37262,37264,37266,37268],{"class":35,"line":1940},[33,37230,33076],{"class":72},[33,37232,37233],{"class":47},".c7",[33,37235,57],{"class":39},[33,37237,33084],{"class":47},[33,37239,33087],{"class":289},[33,37241,57],{"class":39},[33,37243,37165],{"class":72},[33,37245,2799],{"class":47},[33,37247,33096],{"class":289},[33,37249,57],{"class":39},[33,37251,37095],{"class":72},[33,37253,2799],{"class":47},[33,37255,33105],{"class":289},[33,37257,57],{"class":39},[33,37259,730],{"class":72},[33,37261,2799],{"class":47},[33,37263,33114],{"class":289},[33,37265,57],{"class":39},[33,37267,720],{"class":72},[33,37269,226],{"class":47},[33,37271,37272,37274,37277,37279,37281,37283,37285,37287,37289,37291,37293,37295],{"class":35,"line":2183},[33,37273,33076],{"class":72},[33,37275,37276],{"class":47},".s8",[33,37278,57],{"class":39},[33,37280,37054],{"class":47},[33,37282,33105],{"class":289},[33,37284,57],{"class":39},[33,37286,730],{"class":72},[33,37288,2799],{"class":47},[33,37290,33160],{"class":289},[33,37292,57],{"class":39},[33,37294,725],{"class":72},[33,37296,226],{"class":47},[33,37298,37299],{"class":35,"line":2208},[33,37300,33233],{"class":2487},[33,37302,37303,37305,37307,37309],{"class":35,"line":2234},[33,37304,33076],{"class":72},[33,37306,33240],{"class":47},[33,37308,57],{"class":39},[33,37310,33245],{"class":47},[33,37312,37313],{"class":35,"line":2239},[33,37314,37315],{"class":2487},"       # 定义全连接层\n",[33,37317,37318,37320,37323,37325,37327,37329,37331,37333,37335,37337,37339,37342],{"class":35,"line":2247},[33,37319,33076],{"class":72},[33,37321,37322],{"class":47},".f1",[33,37324,57],{"class":39},[33,37326,33262],{"class":47},[33,37328,2765],{"class":72},[33,37330,657],{"class":39},[33,37332,2765],{"class":72},[33,37334,657],{"class":39},[33,37336,37095],{"class":72},[33,37338,2799],{"class":47},[33,37340,37341],{"class":72},"4096",[33,37343,226],{"class":47},[33,37345,37346,37348,37351,37353,37355,37357,37359,37361],{"class":35,"line":2255},[33,37347,33076],{"class":72},[33,37349,37350],{"class":47},".f2",[33,37352,57],{"class":39},[33,37354,33262],{"class":47},[33,37356,37341],{"class":72},[33,37358,2799],{"class":47},[33,37360,37341],{"class":72},[33,37362,226],{"class":47},[33,37364,37365,37367,37370,37372,37374,37376,37378,37380],{"class":35,"line":3992},[33,37366,33076],{"class":72},[33,37368,37369],{"class":47},".f3",[33,37371,57],{"class":39},[33,37373,33262],{"class":47},[33,37375,37341],{"class":72},[33,37377,2799],{"class":47},[33,37379,1279],{"class":72},[33,37381,226],{"class":47},[33,37383,37384],{"class":35,"line":4009},[33,37385,100],{"emptyLinePlaceholder":99},[33,37387,37388],{"class":35,"line":4014},[33,37389,37390],{"class":2487},"    # 定义前向传播\n",[33,37392,37393,37395,37397],{"class":35,"line":4019},[33,37394,1603],{"class":39},[33,37396,33324],{"class":43},[33,37398,33327],{"class":47},[33,37400,37401,37403,37405,37407,37410,37412],{"class":35,"line":4024},[33,37402,33332],{"class":47},[33,37404,57],{"class":39},[33,37406,33054],{"class":72},[33,37408,37409],{"class":47},".ReLu(",[33,37411,33054],{"class":72},[33,37413,33344],{"class":47},[33,37415,37416,37418,37420,37422],{"class":35,"line":4038},[33,37417,33332],{"class":47},[33,37419,57],{"class":39},[33,37421,33054],{"class":72},[33,37423,33355],{"class":47},[33,37425,37426,37428,37430,37432,37434,37436],{"class":35,"line":4043},[33,37427,33332],{"class":47},[33,37429,57],{"class":39},[33,37431,33054],{"class":72},[33,37433,37409],{"class":47},[33,37435,33054],{"class":72},[33,37437,33370],{"class":47},[33,37439,37440,37442,37444,37446],{"class":35,"line":4834},[33,37441,33332],{"class":47},[33,37443,57],{"class":39},[33,37445,33054],{"class":72},[33,37447,33381],{"class":47},[33,37449,37450,37452,37454,37456,37458,37460],{"class":35,"line":4848},[33,37451,33332],{"class":47},[33,37453,57],{"class":39},[33,37455,33054],{"class":72},[33,37457,37409],{"class":47},[33,37459,33054],{"class":72},[33,37461,37462],{"class":47},".c5(x))\n",[33,37464,37465,37467,37469,37471,37473,37475],{"class":35,"line":4856},[33,37466,33332],{"class":47},[33,37468,57],{"class":39},[33,37470,33054],{"class":72},[33,37472,37409],{"class":47},[33,37474,33054],{"class":72},[33,37476,37477],{"class":47},".c6(x))\n",[33,37479,37480,37482,37484,37486,37488,37490],{"class":35,"line":4861},[33,37481,33332],{"class":47},[33,37483,57],{"class":39},[33,37485,33054],{"class":72},[33,37487,37409],{"class":47},[33,37489,33054],{"class":72},[33,37491,37492],{"class":47},".c7(x))\n",[33,37494,37495,37497,37499,37501],{"class":35,"line":4867},[33,37496,33332],{"class":47},[33,37498,57],{"class":39},[33,37500,33054],{"class":72},[33,37502,37503],{"class":47},".s8(x)\n",[33,37505,37506],{"class":35,"line":4873},[33,37507,100],{"emptyLinePlaceholder":99},[33,37509,37510],{"class":35,"line":4878},[33,37511,37512],{"class":2487},"        # 展平加线性全连接层\n",[33,37514,37515,37517,37519,37521],{"class":35,"line":10194},[33,37516,33332],{"class":47},[33,37518,57],{"class":39},[33,37520,33054],{"class":72},[33,37522,33392],{"class":47},[33,37524,37525,37527,37529,37531,37533,37535],{"class":35,"line":10218},[33,37526,33332],{"class":47},[33,37528,57],{"class":39},[33,37530,33054],{"class":72},[33,37532,37409],{"class":47},[33,37534,33054],{"class":72},[33,37536,37537],{"class":47},".f1(x))\n",[33,37539,37540],{"class":35,"line":10223},[33,37541,37542],{"class":2487},"        # 还需要dropout对神经元随机进行失活\n",[33,37544,37545,37547,37549,37552,37555],{"class":35,"line":10229},[33,37546,33332],{"class":47},[33,37548,57],{"class":39},[33,37550,37551],{"class":47},"F.dropout(x,",[33,37553,37554],{"class":72},"0.5",[33,37556,226],{"class":47},[33,37558,37559,37561,37563,37565,37567,37569],{"class":35,"line":10256},[33,37560,33332],{"class":47},[33,37562,57],{"class":39},[33,37564,33054],{"class":72},[33,37566,37409],{"class":47},[33,37568,33054],{"class":72},[33,37570,37571],{"class":47},".f2(x))\n",[33,37573,37574,37576,37578,37580,37582],{"class":35,"line":10261},[33,37575,33332],{"class":47},[33,37577,57],{"class":39},[33,37579,37551],{"class":47},[33,37581,37554],{"class":72},[33,37583,226],{"class":47},[33,37585,37586],{"class":35,"line":10267},[33,37587,37588],{"class":2487},"        # 直接输出\n",[33,37590,37591,37593,37595,37597],{"class":35,"line":10279},[33,37592,33332],{"class":47},[33,37594,57],{"class":39},[33,37596,33054],{"class":72},[33,37598,37599],{"class":47},".f3(x)\n",[33,37601,37602],{"class":35,"line":10291},[33,37603,37604],{"class":2487},"        # 前向传播输出\n",[33,37606,37607,37609],{"class":35,"line":10303},[33,37608,1614],{"class":39},[33,37610,33440],{"class":47},[33,37612,37613],{"class":35,"line":11961},[33,37614,37615],{"class":2487},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[33,37617,37618,37620,37622,37624,37626],{"class":35,"line":11986},[33,37619,3805],{"class":39},[33,37621,33451],{"class":72},[33,37623,5206],{"class":39},[33,37625,33456],{"class":60},[33,37627,605],{"class":47},[33,37629,37630,37632,37634,37636,37638,37640,37642,37644,37646],{"class":35,"line":12009},[33,37631,33468],{"class":47},[33,37633,57],{"class":39},[33,37635,32685],{"class":47},[33,37637,33475],{"class":60},[33,37639,3966],{"class":39},[33,37641,33480],{"class":47},[33,37643,3963],{"class":39},[33,37645,32710],{"class":60},[33,37647,226],{"class":47},[33,37649,37650],{"class":35,"line":12033},[33,37651,37652],{"class":2487},"    # 模型实例化，然后将实例化的模型放到设备中\n",[33,37654,37655,37657,37659],{"class":35,"line":12038},[33,37656,33520],{"class":47},[33,37658,57],{"class":39},[33,37660,37661],{"class":47},"AlexNet().to(device)\n",[33,37663,37664,37666,37668,37670,37672,37675,37677,37679],{"class":35,"line":12043},[33,37665,193],{"class":72},[33,37667,33532],{"class":47},[33,37669,720],{"class":72},[33,37671,2799],{"class":47},[33,37673,37674],{"class":72},"227",[33,37676,2799],{"class":47},[33,37678,37674],{"class":72},[33,37680,33545],{"class":47},[328,37682,37683],{"start":51},[331,37684,33558],{},[23,37686,37688],{"className":25,"code":37687,"language":27,"meta":28,"style":28},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[30,37689,37690,37696,37702,37712,37718,37728,37738,37748,37758,37768,37772,37783,37793,37797,37801,37805,37813,37825,37835,37851,37861,37893,37907,37917,37927,37931,37941,37955,37965,37975,37985,37991,37995,37999,38003,38007,38011,38019,38039,38043,38047,38051,38055,38059,38075,38079,38083,38091,38095,38099,38107,38111,38115,38119,38127,38131,38135,38139,38143,38151,38155,38163,38167,38175,38179,38187,38191,38199,38203,38207,38215,38219,38223,38227,38239,38263,38277,38281,38285,38289,38297,38301,38309,38313,38321,38325,38333,38337,38345,38349,38357,38361,38373,38377,38385,38389,38397,38401,38405,38409,38413,38421,38425,38441,38445,38453,38457,38461,38465,38469,38473,38477,38481,38497,38501,38513,38517,38529,38533,38545,38549,38557,38561,38569,38573,38577,38582,38588,38592,38601,38605,38622,38626,38635,38639,38657,38670,38675,38688,38692,38696,38704,38708,38712,38720,38724,38732,38736,38744,38748,38752,38794,38836,38840,38844,38860,38864,38880,38884,38888,38896,38900,38904,38916,38954,38959,38964,38973,38977,38991,39001,39007,39013,39019,39025,39029,39033,39039,39043,39047,39055,39059,39077,39081,39085,39089,39105,39109,39113,39117,39121,39125,39145,39165,39169,39173,39177,39185,39193,39197,39213,39233,39253,39257,39261,39269,39277,39281,39285,39289,39301,39305,39315,39323,39340],{"__ignoreMap":28},[33,37691,37692,37694],{"class":35,"line":36},[33,37693,32627],{"class":39},[33,37695,34051],{"class":47},[33,37697,37698,37700],{"class":35,"line":51},[33,37699,32627],{"class":39},[33,37701,34058],{"class":47},[33,37703,37704,37706,37708,37710],{"class":35,"line":64},[33,37705,32627],{"class":39},[33,37707,34069],{"class":47},[33,37709,33613],{"class":39},[33,37711,34074],{"class":47},[33,37713,37714,37716],{"class":35,"line":76},[33,37715,32627],{"class":39},[33,37717,32630],{"class":47},[33,37719,37720,37722,37724,37726],{"class":35,"line":87},[33,37721,32970],{"class":39},[33,37723,33645],{"class":47},[33,37725,32627],{"class":39},[33,37727,34091],{"class":47},[33,37729,37730,37732,37734,37736],{"class":35,"line":96},[33,37731,32970],{"class":39},[33,37733,33598],{"class":47},[33,37735,32627],{"class":39},[33,37737,33603],{"class":47},[33,37739,37740,37742,37744,37746],{"class":35,"line":103},[33,37741,32970],{"class":39},[33,37743,33628],{"class":47},[33,37745,32627],{"class":39},[33,37747,33633],{"class":47},[33,37749,37750,37752,37754,37756],{"class":35,"line":108},[33,37751,32627],{"class":39},[33,37753,33645],{"class":47},[33,37755,33613],{"class":39},[33,37757,33650],{"class":47},[33,37759,37760,37762,37764,37766],{"class":35,"line":119},[33,37761,32627],{"class":39},[33,37763,33662],{"class":47},[33,37765,33613],{"class":39},[33,37767,33667],{"class":47},[33,37769,37770],{"class":35,"line":128},[33,37771,34136],{"class":2487},[33,37773,37774,37776,37778,37780],{"class":35,"line":1753},[33,37775,32970],{"class":39},[33,37777,34143],{"class":47},[33,37779,32627],{"class":39},[33,37781,37782],{"class":47}," AlexNet\n",[33,37784,37785,37787,37789,37791],{"class":35,"line":1763},[33,37786,32970],{"class":39},[33,37788,32973],{"class":47},[33,37790,32627],{"class":39},[33,37792,32978],{"class":47},[33,37794,37795],{"class":35,"line":1775},[33,37796,100],{"emptyLinePlaceholder":99},[33,37798,37799],{"class":35,"line":1780},[33,37800,100],{"emptyLinePlaceholder":99},[33,37802,37803],{"class":35,"line":1785},[33,37804,34171],{"class":2487},[33,37806,37807,37809,37811],{"class":35,"line":1940},[33,37808,40],{"class":39},[33,37810,34178],{"class":43},[33,37812,48],{"class":47},[33,37814,37815,37817,37819,37821,37823],{"class":35,"line":2183},[33,37816,34185],{"class":47},[33,37818,57],{"class":39},[33,37820,33685],{"class":47},[33,37822,33693],{"class":60},[33,37824,33696],{"class":47},[33,37826,37827,37829,37831,37833],{"class":35,"line":2208},[33,37828,34198],{"class":289},[33,37830,57],{"class":39},[33,37832,1190],{"class":72},[33,37834,33696],{"class":47},[33,37836,37837,37839,37841,37843,37845,37847,37849],{"class":35,"line":2234},[33,37838,34209],{"class":289},[33,37840,57],{"class":39},[33,37842,33722],{"class":47},[33,37844,33725],{"class":289},[33,37846,57],{"class":39},[33,37848,37674],{"class":72},[33,37850,33733],{"class":47},[33,37852,37853,37855,37857,37859],{"class":35,"line":2239},[33,37854,34226],{"class":289},[33,37856,57],{"class":39},[33,37858,1190],{"class":72},[33,37860,226],{"class":47},[33,37862,37863,37865,37867,37869,37871,37873,37875,37877,37879,37881,37883,37885,37887,37889,37891],{"class":35,"line":2247},[33,37864,34237],{"class":47},[33,37866,57],{"class":39},[33,37868,34242],{"class":47},[33,37870,34245],{"class":72},[33,37872,133],{"class":47},[33,37874,34250],{"class":72},[33,37876,657],{"class":39},[33,37878,9604],{"class":72},[33,37880,34257],{"class":47},[33,37882,34245],{"class":72},[33,37884,133],{"class":47},[33,37886,34264],{"class":72},[33,37888,657],{"class":39},[33,37890,9604],{"class":72},[33,37892,34271],{"class":47},[33,37894,37895,37897,37899,37901,37903,37905],{"class":35,"line":2255},[33,37896,34276],{"class":47},[33,37898,57],{"class":39},[33,37900,34281],{"class":47},[33,37902,33766],{"class":289},[33,37904,57],{"class":39},[33,37906,33771],{"class":47},[33,37908,37909,37911,37913,37915],{"class":35,"line":3992},[33,37910,34292],{"class":289},[33,37912,57],{"class":39},[33,37914,34297],{"class":72},[33,37916,33696],{"class":47},[33,37918,37919,37921,37923,37925],{"class":35,"line":4009},[33,37920,34304],{"class":289},[33,37922,57],{"class":39},[33,37924,1190],{"class":72},[33,37926,33696],{"class":47},[33,37928,37929],{"class":35,"line":4014},[33,37930,34315],{"class":2487},[33,37932,37933,37935,37937,37939],{"class":35,"line":4019},[33,37934,34320],{"class":289},[33,37936,57],{"class":39},[33,37938,2816],{"class":72},[33,37940,226],{"class":47},[33,37942,37943,37945,37947,37949,37951,37953],{"class":35,"line":4024},[33,37944,34331],{"class":47},[33,37946,57],{"class":39},[33,37948,33763],{"class":47},[33,37950,33766],{"class":289},[33,37952,57],{"class":39},[33,37954,34342],{"class":47},[33,37956,37957,37959,37961,37963],{"class":35,"line":4038},[33,37958,34347],{"class":289},[33,37960,57],{"class":39},[33,37962,34297],{"class":72},[33,37964,33696],{"class":47},[33,37966,37967,37969,37971,37973],{"class":35,"line":4043},[33,37968,34358],{"class":289},[33,37970,57],{"class":39},[33,37972,1190],{"class":72},[33,37974,33696],{"class":47},[33,37976,37977,37979,37981,37983],{"class":35,"line":4834},[33,37978,34369],{"class":289},[33,37980,57],{"class":39},[33,37982,2816],{"class":72},[33,37984,226],{"class":47},[33,37986,37987,37989],{"class":35,"line":4848},[33,37988,90],{"class":39},[33,37990,34382],{"class":47},[33,37992,37993],{"class":35,"line":4856},[33,37994,100],{"emptyLinePlaceholder":99},[33,37996,37997],{"class":35,"line":4861},[33,37998,34391],{"class":2487},[33,38000,38001],{"class":35,"line":4867},[33,38002,34396],{"class":2487},[33,38004,38005],{"class":35,"line":4873},[33,38006,100],{"emptyLinePlaceholder":99},[33,38008,38009],{"class":35,"line":4878},[33,38010,34405],{"class":2487},[33,38012,38013,38015,38017],{"class":35,"line":10194},[33,38014,40],{"class":39},[33,38016,34412],{"class":43},[33,38018,34415],{"class":47},[33,38020,38021,38023,38025,38027,38029,38031,38033,38035,38037],{"class":35,"line":10218},[33,38022,33468],{"class":47},[33,38024,57],{"class":39},[33,38026,32685],{"class":47},[33,38028,33475],{"class":60},[33,38030,3966],{"class":39},[33,38032,33480],{"class":47},[33,38034,3963],{"class":39},[33,38036,34434],{"class":60},[33,38038,226],{"class":47},[33,38040,38041],{"class":35,"line":10223},[33,38042,100],{"emptyLinePlaceholder":99},[33,38044,38045],{"class":35,"line":10229},[33,38046,100],{"emptyLinePlaceholder":99},[33,38048,38049],{"class":35,"line":10256},[33,38050,34449],{"class":2487},[33,38052,38053],{"class":35,"line":10261},[33,38054,34454],{"class":2487},[33,38056,38057],{"class":35,"line":10267},[33,38058,34459],{"class":2487},[33,38060,38061,38063,38065,38067,38069,38071,38073],{"class":35,"line":10279},[33,38062,34464],{"class":47},[33,38064,57],{"class":39},[33,38066,34469],{"class":47},[33,38068,34472],{"class":289},[33,38070,57],{"class":39},[33,38072,34477],{"class":72},[33,38074,226],{"class":47},[33,38076,38077],{"class":35,"line":10291},[33,38078,100],{"emptyLinePlaceholder":99},[33,38080,38081],{"class":35,"line":10303},[33,38082,34488],{"class":2487},[33,38084,38085,38087,38089],{"class":35,"line":11961},[33,38086,34493],{"class":47},[33,38088,57],{"class":39},[33,38090,34498],{"class":47},[33,38092,38093],{"class":35,"line":11986},[33,38094,100],{"emptyLinePlaceholder":99},[33,38096,38097],{"class":35,"line":12009},[33,38098,34507],{"class":2487},[33,38100,38101,38103,38105],{"class":35,"line":12033},[33,38102,33520],{"class":47},[33,38104,57],{"class":39},[33,38106,34516],{"class":47},[33,38108,38109],{"class":35,"line":12038},[33,38110,34521],{"class":2487},[33,38112,38113],{"class":35,"line":12043},[33,38114,34526],{"class":2487},[33,38116,38117],{"class":35,"line":12048},[33,38118,34531],{"class":2487},[33,38120,38121,38123,38125],{"class":35,"line":12057},[33,38122,34536],{"class":47},[33,38124,57],{"class":39},[33,38126,34541],{"class":47},[33,38128,38129],{"class":35,"line":12062},[33,38130,100],{"emptyLinePlaceholder":99},[33,38132,38133],{"class":35,"line":12068},[33,38134,100],{"emptyLinePlaceholder":99},[33,38136,38137],{"class":35,"line":12089},[33,38138,34554],{"class":2487},[33,38140,38141],{"class":35,"line":12095},[33,38142,34559],{"class":2487},[33,38144,38145,38147,38149],{"class":35,"line":12109},[33,38146,34564],{"class":47},[33,38148,57],{"class":39},[33,38150,34569],{"class":72},[33,38152,38153],{"class":35,"line":12115},[33,38154,34574],{"class":2487},[33,38156,38157,38159,38161],{"class":35,"line":12142},[33,38158,34579],{"class":47},[33,38160,57],{"class":39},[33,38162,34584],{"class":47},[33,38164,38165],{"class":35,"line":12151},[33,38166,34589],{"class":2487},[33,38168,38169,38171,38173],{"class":35,"line":12157},[33,38170,34594],{"class":47},[33,38172,57],{"class":39},[33,38174,34584],{"class":47},[33,38176,38177],{"class":35,"line":12165},[33,38178,34603],{"class":2487},[33,38180,38181,38183,38185],{"class":35,"line":12170},[33,38182,34608],{"class":47},[33,38184,57],{"class":39},[33,38186,34584],{"class":47},[33,38188,38189],{"class":35,"line":18842},[33,38190,34617],{"class":2487},[33,38192,38193,38195,38197],{"class":35,"line":18848},[33,38194,34622],{"class":47},[33,38196,57],{"class":39},[33,38198,34584],{"class":47},[33,38200,38201],{"class":35,"line":18871},[33,38202,100],{"emptyLinePlaceholder":99},[33,38204,38205],{"class":35,"line":18877},[33,38206,34635],{"class":2487},[33,38208,38209,38211,38213],{"class":35,"line":18900},[33,38210,34640],{"class":47},[33,38212,57],{"class":39},[33,38214,34645],{"class":47},[33,38216,38217],{"class":35,"line":18914},[33,38218,100],{"emptyLinePlaceholder":99},[33,38220,38221],{"class":35,"line":18934},[33,38222,100],{"emptyLinePlaceholder":99},[33,38224,38225],{"class":35,"line":18940},[33,38226,34658],{"class":2487},[33,38228,38229,38231,38233,38235,38237],{"class":35,"line":18951},[33,38230,675],{"class":39},[33,38232,34665],{"class":47},[33,38234,681],{"class":39},[33,38236,34670],{"class":72},[33,38238,34673],{"class":47},[33,38240,38241,38243,38245,38247,38249,38251,38253,38255,38257,38259,38261],{"class":35,"line":18974},[33,38242,807],{"class":72},[33,38244,133],{"class":47},[33,38246,34682],{"class":60},[33,38248,34685],{"class":72},[33,38250,3001],{"class":60},[33,38252,34685],{"class":72},[33,38254,397],{"class":60},[33,38256,34694],{"class":47},[33,38258,2949],{"class":39},[33,38260,720],{"class":72},[33,38262,551],{"class":47},[33,38264,38265,38267,38269,38271,38273,38275],{"class":35,"line":18996},[33,38266,807],{"class":72},[33,38268,133],{"class":47},[33,38270,34709],{"class":60},[33,38272,657],{"class":39},[33,38274,1279],{"class":72},[33,38276,226],{"class":47},[33,38278,38279],{"class":35,"line":19001},[33,38280,100],{"emptyLinePlaceholder":99},[33,38282,38283],{"class":35,"line":19007},[33,38284,34724],{"class":2487},[33,38286,38287],{"class":35,"line":19021},[33,38288,34729],{"class":2487},[33,38290,38291,38293,38295],{"class":35,"line":19034},[33,38292,34734],{"class":47},[33,38294,57],{"class":39},[33,38296,34569],{"class":72},[33,38298,38299],{"class":35,"line":19039},[33,38300,34743],{"class":2487},[33,38302,38303,38305,38307],{"class":35,"line":19053},[33,38304,34748],{"class":47},[33,38306,57],{"class":39},[33,38308,5342],{"class":72},[33,38310,38311],{"class":35,"line":19058},[33,38312,34757],{"class":2487},[33,38314,38315,38317,38319],{"class":35,"line":19064},[33,38316,34762],{"class":47},[33,38318,57],{"class":39},[33,38320,34569],{"class":72},[33,38322,38323],{"class":35,"line":19069},[33,38324,34771],{"class":2487},[33,38326,38327,38329,38331],{"class":35,"line":19083},[33,38328,34776],{"class":47},[33,38330,57],{"class":39},[33,38332,5342],{"class":72},[33,38334,38335],{"class":35,"line":19088},[33,38336,34785],{"class":2487},[33,38338,38339,38341,38343],{"class":35,"line":19093},[33,38340,34790],{"class":47},[33,38342,57],{"class":39},[33,38344,5342],{"class":72},[33,38346,38347],{"class":35,"line":19107},[33,38348,34799],{"class":2487},[33,38350,38351,38353,38355],{"class":35,"line":19119},[33,38352,34804],{"class":47},[33,38354,57],{"class":39},[33,38356,5342],{"class":72},[33,38358,38359],{"class":35,"line":19124},[33,38360,34813],{"class":2487},[33,38362,38363,38365,38367,38369,38371],{"class":35,"line":19137},[33,38364,5658],{"class":39},[33,38366,33830],{"class":47},[33,38368,681],{"class":39},[33,38370,33835],{"class":72},[33,38372,34826],{"class":47},[33,38374,38375],{"class":35,"line":19142},[33,38376,34831],{"class":2487},[33,38378,38379,38381,38383],{"class":35,"line":19147},[33,38380,34836],{"class":47},[33,38382,57],{"class":39},[33,38384,34841],{"class":47},[33,38386,38387],{"class":35,"line":19152},[33,38388,34846],{"class":2487},[33,38390,38391,38393,38395],{"class":35,"line":19165},[33,38392,34851],{"class":47},[33,38394,57],{"class":39},[33,38396,34856],{"class":47},[33,38398,38399],{"class":35,"line":19170},[33,38400,34862],{"class":2487},[33,38402,38403],{"class":35,"line":34859},[33,38404,34868],{"class":47},[33,38406,38407],{"class":35,"line":34865},[33,38408,34874],{"class":2487},[33,38410,38411],{"class":35,"line":34871},[33,38412,34880],{"class":2487},[33,38414,38415,38417,38419],{"class":35,"line":34877},[33,38416,34886],{"class":47},[33,38418,57],{"class":39},[33,38420,34891],{"class":47},[33,38422,38423],{"class":35,"line":34883},[33,38424,34897],{"class":2487},[33,38426,38427,38429,38431,38433,38435,38437,38439],{"class":35,"line":34894},[33,38428,34903],{"class":47},[33,38430,57],{"class":39},[33,38432,34908],{"class":47},[33,38434,34911],{"class":289},[33,38436,57],{"class":39},[33,38438,720],{"class":72},[33,38440,226],{"class":47},[33,38442,38443],{"class":35,"line":34900},[33,38444,34923],{"class":2487},[33,38446,38447,38449,38451],{"class":35,"line":34920},[33,38448,34929],{"class":47},[33,38450,57],{"class":39},[33,38452,34934],{"class":47},[33,38454,38455],{"class":35,"line":34926},[33,38456,34940],{"class":2487},[33,38458,38459],{"class":35,"line":34937},[33,38460,34946],{"class":47},[33,38462,38463],{"class":35,"line":34943},[33,38464,34952],{"class":2487},[33,38466,38467],{"class":35,"line":34949},[33,38468,34958],{"class":47},[33,38470,38471],{"class":35,"line":34955},[33,38472,34964],{"class":2487},[33,38474,38475],{"class":35,"line":34961},[33,38476,34970],{"class":47},[33,38478,38479],{"class":35,"line":34967},[33,38480,34976],{"class":2487},[33,38482,38483,38485,38487,38489,38491,38493,38495],{"class":35,"line":34973},[33,38484,34982],{"class":47},[33,38486,692],{"class":39},[33,38488,34987],{"class":47},[33,38490,657],{"class":39},[33,38492,34992],{"class":47},[33,38494,2617],{"class":72},[33,38496,226],{"class":47},[33,38498,38499],{"class":35,"line":34979},[33,38500,35002],{"class":2487},[33,38502,38503,38505,38507,38509,38511],{"class":35,"line":34999},[33,38504,35008],{"class":47},[33,38506,692],{"class":39},[33,38508,35013],{"class":47},[33,38510,5206],{"class":39},[33,38512,35018],{"class":47},[33,38514,38515],{"class":35,"line":35005},[33,38516,35024],{"class":2487},[33,38518,38519,38521,38523,38525,38527],{"class":35,"line":35021},[33,38520,35030],{"class":47},[33,38522,692],{"class":39},[33,38524,34992],{"class":47},[33,38526,2617],{"class":72},[33,38528,226],{"class":47},[33,38530,38531],{"class":35,"line":35027},[33,38532,35044],{"class":2487},[33,38534,38535,38537,38539,38541,38543],{"class":35,"line":35041},[33,38536,5658],{"class":39},[33,38538,35052],{"class":47},[33,38540,681],{"class":39},[33,38542,33835],{"class":72},[33,38544,35059],{"class":47},[33,38546,38547],{"class":35,"line":35047},[33,38548,35065],{"class":2487},[33,38550,38551,38553,38555],{"class":35,"line":35062},[33,38552,34836],{"class":47},[33,38554,57],{"class":39},[33,38556,34841],{"class":47},[33,38558,38559],{"class":35,"line":35068},[33,38560,35080],{"class":2487},[33,38562,38563,38565,38567],{"class":35,"line":35077},[33,38564,34851],{"class":47},[33,38566,57],{"class":39},[33,38568,34856],{"class":47},[33,38570,38571],{"class":35,"line":35083},[33,38572,35095],{"class":2487},[33,38574,38575],{"class":35,"line":35092},[33,38576,35101],{"class":47},[33,38578,38579],{"class":35,"line":35098},[33,38580,38581],{"class":2487},"            # 验证时不计算梯度以节省内存\u002F计算\n",[33,38583,38584,38586],{"class":35,"line":35104},[33,38585,35107],{"class":39},[33,38587,35110],{"class":47},[33,38589,38590],{"class":35,"line":35113},[33,38591,35116],{"class":2487},[33,38593,38594,38597,38599],{"class":35,"line":35119},[33,38595,38596],{"class":47},"                output",[33,38598,57],{"class":39},[33,38600,34891],{"class":47},[33,38602,38603],{"class":35,"line":35130},[33,38604,35133],{"class":2487},[33,38606,38607,38610,38612,38614,38616,38618,38620],{"class":35,"line":35136},[33,38608,38609],{"class":47},"                pre_lab",[33,38611,57],{"class":39},[33,38613,34908],{"class":47},[33,38615,34911],{"class":289},[33,38617,57],{"class":39},[33,38619,720],{"class":72},[33,38621,226],{"class":47},[33,38623,38624],{"class":35,"line":35155},[33,38625,35158],{"class":2487},[33,38627,38628,38631,38633],{"class":35,"line":35161},[33,38629,38630],{"class":47},"                val_batch_loss",[33,38632,57],{"class":39},[33,38634,34934],{"class":47},[33,38636,38637],{"class":35,"line":35172},[33,38638,35175],{"class":2487},[33,38640,38641,38644,38646,38649,38651,38653,38655],{"class":35,"line":35178},[33,38642,38643],{"class":47},"                val_loss",[33,38645,692],{"class":39},[33,38647,38648],{"class":47},"val_batch_loss.item()",[33,38650,657],{"class":39},[33,38652,34992],{"class":47},[33,38654,2617],{"class":72},[33,38656,226],{"class":47},[33,38658,38659,38662,38664,38666,38668],{"class":35,"line":35198},[33,38660,38661],{"class":47},"                val_corrects",[33,38663,692],{"class":39},[33,38665,35013],{"class":47},[33,38667,5206],{"class":39},[33,38669,35018],{"class":47},[33,38671,38672],{"class":35,"line":35214},[33,38673,38674],{"class":2487},"            # 当前用于验证的样本数量\n",[33,38676,38677,38680,38682,38684,38686],{"class":35,"line":35220},[33,38678,38679],{"class":47},"            val_num",[33,38681,692],{"class":39},[33,38683,34992],{"class":47},[33,38685,2617],{"class":72},[33,38687,226],{"class":47},[33,38689,38690],{"class":35,"line":35234},[33,38691,35237],{"class":2487},[33,38693,38694],{"class":35,"line":35240},[33,38695,35243],{"class":2487},[33,38697,38698,38700,38702],{"class":35,"line":35246},[33,38699,35249],{"class":47},[33,38701,3001],{"class":39},[33,38703,35254],{"class":47},[33,38705,38706],{"class":35,"line":35257},[33,38707,35260],{"class":2487},[33,38709,38710],{"class":35,"line":35263},[33,38711,35266],{"class":2487},[33,38713,38714,38716,38718],{"class":35,"line":35269},[33,38715,35272],{"class":47},[33,38717,3001],{"class":39},[33,38719,35254],{"class":47},[33,38721,38722],{"class":35,"line":35279},[33,38723,35282],{"class":2487},[33,38725,38726,38728,38730],{"class":35,"line":35285},[33,38727,35288],{"class":47},[33,38729,3001],{"class":39},[33,38731,35293],{"class":47},[33,38733,38734],{"class":35,"line":35296},[33,38735,35299],{"class":2487},[33,38737,38738,38740,38742],{"class":35,"line":35302},[33,38739,35305],{"class":47},[33,38741,3001],{"class":39},[33,38743,35293],{"class":47},[33,38745,38746],{"class":35,"line":35312},[33,38747,100],{"emptyLinePlaceholder":99},[33,38749,38750],{"class":35,"line":35317},[33,38751,35320],{"class":2487},[33,38753,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782,38784,38786,38788,38790,38792],{"class":35,"line":35323},[33,38755,807],{"class":72},[33,38757,133],{"class":47},[33,38759,5847],{"class":60},[33,38761,34685],{"class":72},[33,38763,35334],{"class":60},[33,38765,204],{"class":72},[33,38767,35339],{"class":39},[33,38769,210],{"class":72},[33,38771,35344],{"class":60},[33,38773,204],{"class":72},[33,38775,35339],{"class":39},[33,38777,210],{"class":72},[33,38779,5847],{"class":60},[33,38781,35355],{"class":47},[33,38783,2949],{"class":39},[33,38785,720],{"class":72},[33,38787,35362],{"class":47},[33,38789,2949],{"class":39},[33,38791,720],{"class":72},[33,38793,35369],{"class":47},[33,38795,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834],{"class":35,"line":35372},[33,38797,807],{"class":72},[33,38799,133],{"class":47},[33,38801,5847],{"class":60},[33,38803,34685],{"class":72},[33,38805,35383],{"class":60},[33,38807,204],{"class":72},[33,38809,35339],{"class":39},[33,38811,210],{"class":72},[33,38813,35392],{"class":60},[33,38815,204],{"class":72},[33,38817,35339],{"class":39},[33,38819,210],{"class":72},[33,38821,5847],{"class":60},[33,38823,35403],{"class":47},[33,38825,2949],{"class":39},[33,38827,720],{"class":72},[33,38829,35410],{"class":47},[33,38831,2949],{"class":39},[33,38833,720],{"class":72},[33,38835,35369],{"class":47},[33,38837,38838],{"class":35,"line":35419},[33,38839,100],{"emptyLinePlaceholder":99},[33,38841,38842],{"class":35,"line":35424},[33,38843,35427],{"class":2487},[33,38845,38846,38848,38850,38852,38854,38856,38858],{"class":35,"line":35430},[33,38847,2130],{"class":39},[33,38849,35435],{"class":47},[33,38851,2949],{"class":39},[33,38853,720],{"class":72},[33,38855,3348],{"class":47},[33,38857,3367],{"class":39},[33,38859,35446],{"class":47},[33,38861,38862],{"class":35,"line":35449},[33,38863,35452],{"class":2487},[33,38865,38866,38868,38870,38872,38874,38876,38878],{"class":35,"line":35455},[33,38867,35458],{"class":47},[33,38869,2471],{"class":72},[33,38871,57],{"class":39},[33,38873,35465],{"class":47},[33,38875,2949],{"class":39},[33,38877,720],{"class":72},[33,38879,919],{"class":47},[33,38881,38882],{"class":35,"line":35474},[33,38883,35477],{"class":2487},[33,38885,38886],{"class":35,"line":35480},[33,38887,35483],{"class":2487},[33,38889,38890,38892,38894],{"class":35,"line":35486},[33,38891,35489],{"class":47},[33,38893,57],{"class":39},[33,38895,34541],{"class":47},[33,38897,38898],{"class":35,"line":35496},[33,38899,100],{"emptyLinePlaceholder":99},[33,38901,38902],{"class":35,"line":35501},[33,38903,35504],{"class":2487},[33,38905,38906,38908,38910,38912,38914],{"class":35,"line":35507},[33,38907,35510],{"class":47},[33,38909,57],{"class":39},[33,38911,35515],{"class":47},[33,38913,2949],{"class":39},[33,38915,35520],{"class":47},[33,38917,38918,38920,38922,38924,38926,38928,38930,38932,38934,38936,38938,38940,38942,38944,38946,38948,38950,38952],{"class":35,"line":35523},[33,38919,807],{"class":72},[33,38921,133],{"class":47},[33,38923,35530],{"class":60},[33,38925,204],{"class":72},[33,38927,35535],{"class":39},[33,38929,210],{"class":72},[33,38931,2961],{"class":60},[33,38933,204],{"class":72},[33,38935,35535],{"class":39},[33,38937,210],{"class":72},[33,38939,35548],{"class":60},[33,38941,35551],{"class":47},[33,38943,35554],{"class":39},[33,38945,3316],{"class":72},[33,38947,35559],{"class":47},[33,38949,1429],{"class":39},[33,38951,3316],{"class":72},[33,38953,551],{"class":47},[33,38955,38956],{"class":35,"line":35568},[33,38957,38958],{"class":2487},"    # 选择最优参数并保存\n",[33,38960,38961],{"class":35,"line":35574},[33,38962,38963],{"class":2487},"    # 保存最佳模型权重字典\n",[33,38965,38966,38969,38971],{"class":35,"line":35580},[33,38967,38968],{"class":47},"    torch.save(best_model_wts,",[33,38970,35592],{"class":60},[33,38972,226],{"class":47},[33,38974,38975],{"class":35,"line":35586},[33,38976,35612],{"class":2487},[33,38978,38979,38981,38983,38985,38987,38989],{"class":35,"line":35597},[33,38980,35618],{"class":47},[33,38982,57],{"class":39},[33,38984,35623],{"class":47},[33,38986,35626],{"class":289},[33,38988,57],{"class":39},[33,38990,3820],{"class":47},[33,38992,38993,38995,38997,38999],{"class":35,"line":35603},[33,38994,35636],{"class":60},[33,38996,387],{"class":47},[33,38998,35641],{"class":72},[33,39000,35644],{"class":47},[33,39002,39003,39005],{"class":35,"line":35609},[33,39004,35650],{"class":60},[33,39006,35653],{"class":47},[33,39008,39009,39011],{"class":35,"line":35615},[33,39010,35659],{"class":60},[33,39012,35662],{"class":47},[33,39014,39015,39017],{"class":35,"line":35633},[33,39016,35668],{"class":60},[33,39018,35671],{"class":47},[33,39020,39021,39023],{"class":35,"line":35647},[33,39022,35677],{"class":60},[33,39024,35680],{"class":47},[33,39026,39027],{"class":35,"line":35656},[33,39028,35686],{"class":47},[33,39030,39031],{"class":35,"line":35665},[33,39032,35692],{"class":2487},[33,39034,39035,39037],{"class":35,"line":35674},[33,39036,90],{"class":39},[33,39038,35700],{"class":47},[33,39040,39041],{"class":35,"line":35683},[33,39042,100],{"emptyLinePlaceholder":99},[33,39044,39045],{"class":35,"line":35689},[33,39046,35711],{"class":2487},[33,39048,39049,39051,39053],{"class":35,"line":35695},[33,39050,40],{"class":39},[33,39052,35719],{"class":43},[33,39054,35722],{"class":47},[33,39056,39057],{"class":35,"line":35703},[33,39058,35728],{"class":2487},[33,39060,39061,39063,39065,39067,39069,39071,39073,39075],{"class":35,"line":35708},[33,39062,35734],{"class":47},[33,39064,33922],{"class":289},[33,39066,57],{"class":39},[33,39068,133],{"class":47},[33,39070,2915],{"class":72},[33,39072,2799],{"class":47},[33,39074,753],{"class":72},[33,39076,551],{"class":47},[33,39078,39079],{"class":35,"line":35714},[33,39080,35754],{"class":2487},[33,39082,39083],{"class":35,"line":35725},[33,39084,35760],{"class":2487},[33,39086,39087],{"class":35,"line":35731},[33,39088,35766],{"class":2487},[33,39090,39091,39093,39095,39097,39099,39101,39103],{"class":35,"line":35751},[33,39092,33956],{"class":47},[33,39094,720],{"class":72},[33,39096,2799],{"class":47},[33,39098,725],{"class":72},[33,39100,2799],{"class":47},[33,39102,720],{"class":72},[33,39104,226],{"class":47},[33,39106,39107],{"class":35,"line":35757},[33,39108,35789],{"class":2487},[33,39110,39111],{"class":35,"line":35763},[33,39112,35795],{"class":2487},[33,39114,39115],{"class":35,"line":35769},[33,39116,35801],{"class":2487},[33,39118,39119],{"class":35,"line":35786},[33,39120,35807],{"class":2487},[33,39122,39123],{"class":35,"line":35792},[33,39124,35813],{"class":2487},[33,39126,39127,39129,39131,39133,39135,39137,39139,39141,39143],{"class":35,"line":35798},[33,39128,35819],{"class":47},[33,39130,35822],{"class":60},[33,39132,35825],{"class":47},[33,39134,35828],{"class":60},[33,39136,2799],{"class":47},[33,39138,35833],{"class":289},[33,39140,57],{"class":39},[33,39142,35838],{"class":60},[33,39144,226],{"class":47},[33,39146,39147,39149,39151,39153,39155,39157,39159,39161,39163],{"class":35,"line":35804},[33,39148,35819],{"class":47},[33,39150,35822],{"class":60},[33,39152,35850],{"class":47},[33,39154,35853],{"class":60},[33,39156,2799],{"class":47},[33,39158,35833],{"class":289},[33,39160,57],{"class":39},[33,39162,35862],{"class":60},[33,39164,226],{"class":47},[33,39166,39167],{"class":35,"line":35810},[33,39168,35870],{"class":2487},[33,39170,39171],{"class":35,"line":35816},[33,39172,35876],{"class":47},[33,39174,39175],{"class":35,"line":35843},[33,39176,35882],{"class":2487},[33,39178,39179,39181,39183],{"class":35,"line":35867},[33,39180,35888],{"class":47},[33,39182,35891],{"class":60},[33,39184,226],{"class":47},[33,39186,39187,39189,39191],{"class":35,"line":35873},[33,39188,35899],{"class":47},[33,39190,35902],{"class":60},[33,39192,226],{"class":47},[33,39194,39195],{"class":35,"line":35879},[33,39196,35910],{"class":2487},[33,39198,39199,39201,39203,39205,39207,39209,39211],{"class":35,"line":35885},[33,39200,33956],{"class":47},[33,39202,720],{"class":72},[33,39204,2799],{"class":47},[33,39206,725],{"class":72},[33,39208,2799],{"class":47},[33,39210,725],{"class":72},[33,39212,226],{"class":47},[33,39214,39215,39217,39219,39221,39223,39225,39227,39229,39231],{"class":35,"line":35896},[33,39216,35819],{"class":47},[33,39218,35822],{"class":60},[33,39220,35937],{"class":47},[33,39222,35828],{"class":60},[33,39224,2799],{"class":47},[33,39226,35833],{"class":289},[33,39228,57],{"class":39},[33,39230,35948],{"class":60},[33,39232,226],{"class":47},[33,39234,39235,39237,39239,39241,39243,39245,39247,39249,39251],{"class":35,"line":35907},[33,39236,35819],{"class":47},[33,39238,35822],{"class":60},[33,39240,35960],{"class":47},[33,39242,35853],{"class":60},[33,39244,2799],{"class":47},[33,39246,35833],{"class":289},[33,39248,57],{"class":39},[33,39250,35971],{"class":60},[33,39252,226],{"class":47},[33,39254,39255],{"class":35,"line":35913},[33,39256,35979],{"class":2487},[33,39258,39259],{"class":35,"line":35930},[33,39260,35876],{"class":47},[33,39262,39263,39265,39267],{"class":35,"line":35953},[33,39264,35888],{"class":47},[33,39266,35822],{"class":60},[33,39268,226],{"class":47},[33,39270,39271,39273,39275],{"class":35,"line":35976},[33,39272,35899],{"class":47},[33,39274,36001],{"class":60},[33,39276,226],{"class":47},[33,39278,39279],{"class":35,"line":35982},[33,39280,36009],{"class":47},[33,39282,39283],{"class":35,"line":35987},[33,39284,100],{"emptyLinePlaceholder":99},[33,39286,39287],{"class":35,"line":35996},[33,39288,36020],{"class":2487},[33,39290,39291,39293,39295,39297,39299],{"class":35,"line":36006},[33,39292,3805],{"class":39},[33,39294,33451],{"class":72},[33,39296,5206],{"class":39},[33,39298,33456],{"class":60},[33,39300,605],{"class":47},[33,39302,39303],{"class":35,"line":36012},[33,39304,36039],{"class":2487},[33,39306,39307,39310,39312],{"class":35,"line":36017},[33,39308,39309],{"class":47},"    AlexNet",[33,39311,57],{"class":39},[33,39313,39314],{"class":47},"AlexNet()\n",[33,39316,39317,39319,39321],{"class":35,"line":36023},[33,39318,36056],{"class":47},[33,39320,57],{"class":39},[33,39322,36061],{"class":47},[33,39324,39325,39327,39329,39332,39334,39336,39338],{"class":35,"line":36036},[33,39326,35618],{"class":47},[33,39328,57],{"class":39},[33,39330,39331],{"class":47},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[33,39333,36074],{"class":289},[33,39335,57],{"class":39},[33,39337,1284],{"class":72},[33,39339,226],{"class":47},[33,39341,39342],{"class":35,"line":36042},[33,39343,36086],{"class":47},[328,39345,39346],{"start":64},[331,39347,36099],{},[23,39349,39351],{"className":25,"code":39350,"language":27,"meta":28,"style":28},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[30,39352,39353,39359,39369,39379,39389,39393,39403,39413,39424,39428,39432,39436,39444,39460,39470,39486,39496,39510,39514,39524,39534,39544,39550,39554,39558,39566,39570,39586,39594,39598,39602,39610,39618,39622,39626,39630,39634,39640,39644,39654,39662,39670,39674,39678,39682,39690,39694,39710,39714,39718,39722,39734,39738,39750,39754,39758,39770,39774,39784,39788,39792,39804,39808,39816,39820,39824,39832,39836,39844,39848,39852,39856,39860,39864,39880,39888,39892,39896,39944,39950,39954,39964,39972,39980,39984,39988,39992,39996,40004,40008,40024,40028,40036,40044],{"__ignoreMap":28},[33,39354,39355,39357],{"class":35,"line":36},[33,39356,32627],{"class":39},[33,39358,32630],{"class":47},[33,39360,39361,39363,39365,39367],{"class":35,"line":51},[33,39362,32627],{"class":39},[33,39364,33645],{"class":47},[33,39366,33613],{"class":39},[33,39368,33650],{"class":47},[33,39370,39371,39373,39375,39377],{"class":35,"line":64},[33,39372,32970],{"class":39},[33,39374,36127],{"class":47},[33,39376,32627],{"class":39},[33,39378,36132],{"class":47},[33,39380,39381,39383,39385,39387],{"class":35,"line":76},[33,39382,32970],{"class":39},[33,39384,33628],{"class":47},[33,39386,32627],{"class":39},[33,39388,33633],{"class":47},[33,39390,39391],{"class":35,"line":87},[33,39392,36147],{"class":2487},[33,39394,39395,39397,39399,39401],{"class":35,"line":96},[33,39396,32970],{"class":39},[33,39398,33598],{"class":47},[33,39400,32627],{"class":39},[33,39402,33603],{"class":47},[33,39404,39405,39407,39409,39411],{"class":35,"line":103},[33,39406,32970],{"class":39},[33,39408,34143],{"class":47},[33,39410,32627],{"class":39},[33,39412,37782],{"class":47},[33,39414,39415,39417,39420,39422],{"class":35,"line":108},[33,39416,32970],{"class":39},[33,39418,39419],{"class":47}," 练习.AlexNet.model ",[33,39421,32627],{"class":39},[33,39423,37782],{"class":47},[33,39425,39426],{"class":35,"line":119},[33,39427,100],{"emptyLinePlaceholder":99},[33,39429,39430],{"class":35,"line":128},[33,39431,100],{"emptyLinePlaceholder":99},[33,39433,39434],{"class":35,"line":1753},[33,39435,36176],{"class":2487},[33,39437,39438,39440,39442],{"class":35,"line":1763},[33,39439,40],{"class":39},[33,39441,36183],{"class":43},[33,39443,48],{"class":47},[33,39445,39446,39448,39450,39452,39454,39456,39458],{"class":35,"line":1775},[33,39447,36190],{"class":47},[33,39449,57],{"class":39},[33,39451,33685],{"class":47},[33,39453,33688],{"class":289},[33,39455,57],{"class":39},[33,39457,33693],{"class":60},[33,39459,33696],{"class":47},[33,39461,39462,39464,39466,39468],{"class":35,"line":1780},[33,39463,36207],{"class":289},[33,39465,57],{"class":39},[33,39467,36212],{"class":72},[33,39469,33696],{"class":47},[33,39471,39472,39474,39476,39478,39480,39482,39484],{"class":35,"line":1785},[33,39473,36219],{"class":289},[33,39475,57],{"class":39},[33,39477,33722],{"class":47},[33,39479,33725],{"class":289},[33,39481,57],{"class":39},[33,39483,37674],{"class":72},[33,39485,33733],{"class":47},[33,39487,39488,39490,39492,39494],{"class":35,"line":1940},[33,39489,36236],{"class":289},[33,39491,57],{"class":39},[33,39493,1190],{"class":72},[33,39495,226],{"class":47},[33,39497,39498,39500,39502,39504,39506,39508],{"class":35,"line":2183},[33,39499,36247],{"class":47},[33,39501,57],{"class":39},[33,39503,33763],{"class":47},[33,39505,33766],{"class":289},[33,39507,57],{"class":39},[33,39509,36258],{"class":47},[33,39511,39512],{"class":35,"line":2208},[33,39513,36263],{"class":2487},[33,39515,39516,39518,39520,39522],{"class":35,"line":2234},[33,39517,36268],{"class":289},[33,39519,57],{"class":39},[33,39521,720],{"class":72},[33,39523,33696],{"class":47},[33,39525,39526,39528,39530,39532],{"class":35,"line":2239},[33,39527,36279],{"class":289},[33,39529,57],{"class":39},[33,39531,1190],{"class":72},[33,39533,33696],{"class":47},[33,39535,39536,39538,39540,39542],{"class":35,"line":2247},[33,39537,36290],{"class":289},[33,39539,57],{"class":39},[33,39541,2617],{"class":72},[33,39543,226],{"class":47},[33,39545,39546,39548],{"class":35,"line":2255},[33,39547,90],{"class":39},[33,39549,36303],{"class":47},[33,39551,39552],{"class":35,"line":3992},[33,39553,100],{"emptyLinePlaceholder":99},[33,39555,39556],{"class":35,"line":4009},[33,39557,36312],{"class":2487},[33,39559,39560,39562,39564],{"class":35,"line":4014},[33,39561,40],{"class":39},[33,39563,36319],{"class":43},[33,39565,36322],{"class":47},[33,39567,39568],{"class":35,"line":4019},[33,39569,36327],{"class":2487},[33,39571,39572,39574,39576,39578,39580,39582,39584],{"class":35,"line":4024},[33,39573,33468],{"class":47},[33,39575,57],{"class":39},[33,39577,33475],{"class":60},[33,39579,3966],{"class":39},[33,39581,33480],{"class":47},[33,39583,3963],{"class":39},[33,39585,36344],{"class":60},[33,39587,39588,39590,39592],{"class":35,"line":4038},[33,39589,33520],{"class":47},[33,39591,57],{"class":39},[33,39593,34516],{"class":47},[33,39595,39596],{"class":35,"line":4043},[33,39597,100],{"emptyLinePlaceholder":99},[33,39599,39600],{"class":35,"line":4834},[33,39601,36361],{"class":2487},[33,39603,39604,39606,39608],{"class":35,"line":4848},[33,39605,36366],{"class":47},[33,39607,57],{"class":39},[33,39609,34569],{"class":72},[33,39611,39612,39614,39616],{"class":35,"line":4856},[33,39613,36375],{"class":47},[33,39615,57],{"class":39},[33,39617,5342],{"class":72},[33,39619,39620],{"class":35,"line":4861},[33,39621,100],{"emptyLinePlaceholder":99},[33,39623,39624],{"class":35,"line":4867},[33,39625,36388],{"class":2487},[33,39627,39628],{"class":35,"line":4873},[33,39629,36393],{"class":2487},[33,39631,39632],{"class":35,"line":4878},[33,39633,36398],{"class":2487},[33,39635,39636,39638],{"class":35,"line":10194},[33,39637,36403],{"class":39},[33,39639,35110],{"class":47},[33,39641,39642],{"class":35,"line":10218},[33,39643,36410],{"class":2487},[33,39645,39646,39648,39650,39652],{"class":35,"line":10223},[33,39647,5658],{"class":39},[33,39649,36417],{"class":47},[33,39651,681],{"class":39},[33,39653,36422],{"class":47},[33,39655,39656,39658,39660],{"class":35,"line":10229},[33,39657,36427],{"class":47},[33,39659,57],{"class":39},[33,39661,36432],{"class":47},[33,39663,39664,39666,39668],{"class":35,"line":10256},[33,39665,36437],{"class":47},[33,39667,57],{"class":39},[33,39669,36442],{"class":47},[33,39671,39672],{"class":35,"line":10261},[33,39673,36447],{"class":2487},[33,39675,39676],{"class":35,"line":10267},[33,39677,35101],{"class":47},[33,39679,39680],{"class":35,"line":10279},[33,39681,36456],{"class":2487},[33,39683,39684,39686,39688],{"class":35,"line":10291},[33,39685,34886],{"class":47},[33,39687,57],{"class":39},[33,39689,36465],{"class":47},[33,39691,39692],{"class":35,"line":10303},[33,39693,36470],{"class":2487},[33,39695,39696,39698,39700,39702,39704,39706,39708],{"class":35,"line":11961},[33,39697,34903],{"class":47},[33,39699,57],{"class":39},[33,39701,34908],{"class":47},[33,39703,34911],{"class":289},[33,39705,57],{"class":39},[33,39707,720],{"class":72},[33,39709,226],{"class":47},[33,39711,39712],{"class":35,"line":11986},[33,39713,36491],{"class":2487},[33,39715,39716],{"class":35,"line":12009},[33,39717,36496],{"class":2487},[33,39719,39720],{"class":35,"line":12033},[33,39721,36501],{"class":2487},[33,39723,39724,39726,39728,39730,39732],{"class":35,"line":12038},[33,39725,36506],{"class":47},[33,39727,692],{"class":39},[33,39729,35013],{"class":47},[33,39731,5206],{"class":39},[33,39733,36515],{"class":47},[33,39735,39736],{"class":35,"line":12043},[33,39737,36520],{"class":2487},[33,39739,39740,39742,39744,39746,39748],{"class":35,"line":12048},[33,39741,36525],{"class":47},[33,39743,692],{"class":39},[33,39745,36530],{"class":47},[33,39747,2617],{"class":72},[33,39749,226],{"class":47},[33,39751,39752],{"class":35,"line":12057},[33,39753,100],{"emptyLinePlaceholder":99},[33,39755,39756],{"class":35,"line":12062},[33,39757,36543],{"class":2487},[33,39759,39760,39762,39764,39766,39768],{"class":35,"line":12068},[33,39761,36548],{"class":47},[33,39763,57],{"class":39},[33,39765,36553],{"class":47},[33,39767,3001],{"class":39},[33,39769,36558],{"class":47},[33,39771,39772],{"class":35,"line":12089},[33,39773,36563],{"class":2487},[33,39775,39776,39778,39780,39782],{"class":35,"line":12095},[33,39777,807],{"class":72},[33,39779,133],{"class":47},[33,39781,36572],{"class":60},[33,39783,36575],{"class":47},[33,39785,39786],{"class":35,"line":12109},[33,39787,100],{"emptyLinePlaceholder":99},[33,39789,39790],{"class":35,"line":12115},[33,39791,36584],{"class":2487},[33,39793,39794,39796,39798,39800,39802],{"class":35,"line":12142},[33,39795,3805],{"class":39},[33,39797,33451],{"class":72},[33,39799,5206],{"class":39},[33,39801,33456],{"class":60},[33,39803,605],{"class":47},[33,39805,39806],{"class":35,"line":12151},[33,39807,36601],{"class":2487},[33,39809,39810,39812,39814],{"class":35,"line":12157},[33,39811,33520],{"class":47},[33,39813,57],{"class":39},[33,39815,39314],{"class":47},[33,39817,39818],{"class":35,"line":12165},[33,39819,36614],{"class":2487},[33,39821,39822],{"class":35,"line":12170},[33,39823,36619],{"class":2487},[33,39825,39826,39828,39830],{"class":35,"line":18842},[33,39827,36624],{"class":47},[33,39829,36627],{"class":60},[33,39831,551],{"class":47},[33,39833,39834],{"class":35,"line":18848},[33,39835,36634],{"class":2487},[33,39837,39838,39840,39842],{"class":35,"line":18871},[33,39839,36247],{"class":47},[33,39841,57],{"class":39},[33,39843,36643],{"class":47},[33,39845,39846],{"class":35,"line":18877},[33,39847,36648],{"class":2487},[33,39849,39850],{"class":35,"line":18900},[33,39851,36653],{"class":47},[33,39853,39854],{"class":35,"line":18914},[33,39855,100],{"emptyLinePlaceholder":99},[33,39857,39858],{"class":35,"line":18934},[33,39859,36662],{"class":2487},[33,39861,39862],{"class":35,"line":18940},[33,39863,36667],{"class":2487},[33,39865,39866,39868,39870,39872,39874,39876,39878],{"class":35,"line":18951},[33,39867,33468],{"class":47},[33,39869,57],{"class":39},[33,39871,33475],{"class":60},[33,39873,3966],{"class":39},[33,39875,33480],{"class":47},[33,39877,3963],{"class":39},[33,39879,36344],{"class":60},[33,39881,39882,39884,39886],{"class":35,"line":18974},[33,39883,33520],{"class":47},[33,39885,57],{"class":39},[33,39887,34516],{"class":47},[33,39889,39890],{"class":35,"line":18996},[33,39891,36696],{"class":2487},[33,39893,39894],{"class":35,"line":19001},[33,39895,36701],{"class":2487},[33,39897,39898,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942],{"class":35,"line":19007},[33,39899,36706],{"class":47},[33,39901,57],{"class":39},[33,39903,3300],{"class":47},[33,39905,36713],{"class":60},[33,39907,2799],{"class":47},[33,39909,36718],{"class":60},[33,39911,2799],{"class":47},[33,39913,36723],{"class":60},[33,39915,2799],{"class":47},[33,39917,36728],{"class":60},[33,39919,2799],{"class":47},[33,39921,36733],{"class":60},[33,39923,2799],{"class":47},[33,39925,36738],{"class":60},[33,39927,2799],{"class":47},[33,39929,36743],{"class":60},[33,39931,2799],{"class":47},[33,39933,36748],{"class":60},[33,39935,2799],{"class":47},[33,39937,36753],{"class":60},[33,39939,2799],{"class":47},[33,39941,36758],{"class":60},[33,39943,919],{"class":47},[33,39945,39946,39948],{"class":35,"line":19021},[33,39947,36403],{"class":39},[33,39949,35110],{"class":47},[33,39951,39952],{"class":35,"line":19034},[33,39953,36771],{"class":2487},[33,39955,39956,39958,39960,39962],{"class":35,"line":19039},[33,39957,5658],{"class":39},[33,39959,36778],{"class":47},[33,39961,681],{"class":39},[33,39963,36422],{"class":47},[33,39965,39966,39968,39970],{"class":35,"line":19053},[33,39967,34836],{"class":47},[33,39969,57],{"class":39},[33,39971,34841],{"class":47},[33,39973,39974,39976,39978],{"class":35,"line":19058},[33,39975,34851],{"class":47},[33,39977,57],{"class":39},[33,39979,34856],{"class":47},[33,39981,39982],{"class":35,"line":19064},[33,39983,100],{"emptyLinePlaceholder":99},[33,39985,39986],{"class":35,"line":19069},[33,39987,36807],{"class":2487},[33,39989,39990],{"class":35,"line":19083},[33,39991,35101],{"class":47},[33,39993,39994],{"class":35,"line":19088},[33,39995,36816],{"class":2487},[33,39997,39998,40000,40002],{"class":35,"line":19093},[33,39999,34886],{"class":47},[33,40001,57],{"class":39},[33,40003,34891],{"class":47},[33,40005,40006],{"class":35,"line":19107},[33,40007,36829],{"class":2487},[33,40009,40010,40012,40014,40016,40018,40020,40022],{"class":35,"line":19119},[33,40011,34903],{"class":47},[33,40013,57],{"class":39},[33,40015,34908],{"class":47},[33,40017,34911],{"class":289},[33,40019,57],{"class":39},[33,40021,720],{"class":72},[33,40023,226],{"class":47},[33,40025,40026],{"class":35,"line":19124},[33,40027,36850],{"class":2487},[33,40029,40030,40032,40034],{"class":35,"line":19137},[33,40031,36855],{"class":47},[33,40033,57],{"class":39},[33,40035,36860],{"class":47},[33,40037,40038,40040,40042],{"class":35,"line":19142},[33,40039,36865],{"class":47},[33,40041,57],{"class":39},[33,40043,36870],{"class":47},[33,40045,40046,40048,40050,40052,40054,40056,40058,40060],{"class":35,"line":19147},[33,40047,36875],{"class":72},[33,40049,133],{"class":47},[33,40051,36880],{"class":60},[33,40053,36883],{"class":47},[33,40055,36886],{"class":60},[33,40057,2799],{"class":47},[33,40059,36891],{"class":60},[33,40061,36894],{"class":47},[631,40063,40065],{"id":40064},"_22vgg","2.2.VGG",[24236,40067,40069],{"id":40068},"_221原理","2.2.1.原理",[19,40071,40072],{},[3736,40073],{"alt":28,"src":40074},"\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,40076,40077],{},[3736,40078],{"alt":28,"src":40079},"\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,40081,40082],{},[3736,40083],{"alt":28,"src":40084},"\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,40086,40087],{},"参数详细描述：",[19,40089,40090],{},[3736,40091],{"alt":28,"src":40092},"\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,40094,40095],{},[3736,40096],{"alt":28,"src":40097},"\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,40099,40100],{},[3736,40101],{"alt":28,"src":40102},"\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,40104,40105],{},[3736,40106],{"alt":28,"src":40107},"\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,40109,40110],{},[3736,40111],{"alt":28,"src":40112},"\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",[24236,40114,40116],{"id":40115},"_222代码实现","2.2.2.代码实现",[328,40118,40119],{},[331,40120,40121],{},"网络搭建",[23,40123,40125],{"className":25,"code":40124,"language":27,"meta":28,"style":28},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[30,40126,40127,40133,40145,40155,40165,40169,40186,40194,40213,40218,40223,40235,40273,40278,40314,40318,40347,40352,40357,40368,40404,40408,40444,40448,40476,40480,40485,40496,40532,40536,40572,40576,40612,40616,40644,40648,40653,40664,40701,40705,40741,40745,40781,40785,40813,40817,40822,40833,40869,40873,40909,40913,40949,40953,40981,40985,40990,41001,41006,41011,41016,41037,41041,41053,41057,41069,41073,41077,41082,41087,41102,41107,41117,41122,41137,41142,41159,41164,41173,41178,41188,41193,41198,41212,41217,41231,41239,41243,41247,41255,41266,41277,41288,41299,41310,41321,41327,41331,41336,41349,41369,41375,41384],{"__ignoreMap":28},[33,40128,40129,40131],{"class":35,"line":36},[33,40130,32627],{"class":39},[33,40132,32630],{"class":47},[33,40134,40135,40137,40140,40142],{"class":35,"line":51},[33,40136,32970],{"class":39},[33,40138,40139],{"class":47}," sympy.core.sympify ",[33,40141,32627],{"class":39},[33,40143,40144],{"class":47}," kernS\n",[33,40146,40147,40149,40151,40153],{"class":35,"line":64},[33,40148,32970],{"class":39},[33,40150,32973],{"class":47},[33,40152,32627],{"class":39},[33,40154,32978],{"class":47},[33,40156,40157,40159,40161,40163],{"class":35,"line":76},[33,40158,32970],{"class":39},[33,40160,32990],{"class":47},[33,40162,32627],{"class":39},[33,40164,32995],{"class":47},[33,40166,40167],{"class":35,"line":87},[33,40168,100],{"emptyLinePlaceholder":99},[33,40170,40171,40173,40176,40178,40180,40182,40184],{"class":35,"line":96},[33,40172,16934],{"class":39},[33,40174,40175],{"class":43}," VGG16",[33,40177,133],{"class":47},[33,40179,33011],{"class":43},[33,40181,2975],{"class":47},[33,40183,33016],{"class":43},[33,40185,366],{"class":47},[33,40187,40188,40190,40192],{"class":35,"line":103},[33,40189,1603],{"class":39},[33,40191,33035],{"class":72},[33,40193,33038],{"class":47},[33,40195,40196,40198,40200,40203,40205,40207,40209,40211],{"class":35,"line":108},[33,40197,33048],{"class":72},[33,40199,133],{"class":47},[33,40201,40202],{"class":72},"VGG16",[33,40204,245],{"class":47},[33,40206,33054],{"class":72},[33,40208,33057],{"class":47},[33,40210,33060],{"class":72},[33,40212,4235],{"class":47},[33,40214,40215],{"class":35,"line":119},[33,40216,40217],{"class":2487},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[33,40219,40220],{"class":35,"line":128},[33,40221,40222],{"class":2487},"        # 这里用的是灰度图\n",[33,40224,40225,40227,40230,40232],{"class":35,"line":1753},[33,40226,33076],{"class":72},[33,40228,40229],{"class":47},".block1",[33,40231,57],{"class":39},[33,40233,40234],{"class":47},"nn.Sequential(\n",[33,40236,40237,40240,40242,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262,40264,40266,40268,40270],{"class":35,"line":1763},[33,40238,40239],{"class":47},"            nn.Conv2d(",[33,40241,33087],{"class":289},[33,40243,57],{"class":39},[33,40245,720],{"class":72},[33,40247,2799],{"class":47},[33,40249,33096],{"class":289},[33,40251,57],{"class":39},[33,40253,2629],{"class":72},[33,40255,2799],{"class":47},[33,40257,33105],{"class":289},[33,40259,57],{"class":39},[33,40261,730],{"class":72},[33,40263,2799],{"class":47},[33,40265,33114],{"class":289},[33,40267,57],{"class":39},[33,40269,720],{"class":72},[33,40271,40272],{"class":47},"),\n",[33,40274,40275],{"class":35,"line":1775},[33,40276,40277],{"class":47},"            nn.ReLU(),\n",[33,40279,40280,40282,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302,40304,40306,40308,40310,40312],{"class":35,"line":1780},[33,40281,40239],{"class":47},[33,40283,33087],{"class":289},[33,40285,57],{"class":39},[33,40287,2629],{"class":72},[33,40289,2799],{"class":47},[33,40291,33096],{"class":289},[33,40293,57],{"class":39},[33,40295,2629],{"class":72},[33,40297,2799],{"class":47},[33,40299,33105],{"class":289},[33,40301,57],{"class":39},[33,40303,730],{"class":72},[33,40305,2799],{"class":47},[33,40307,33114],{"class":289},[33,40309,57],{"class":39},[33,40311,720],{"class":72},[33,40313,40272],{"class":47},[33,40315,40316],{"class":35,"line":1785},[33,40317,40277],{"class":47},[33,40319,40320,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345],{"class":35,"line":1940},[33,40321,40322],{"class":47},"            nn.MaxPool2d(",[33,40324,33105],{"class":289},[33,40326,57],{"class":39},[33,40328,725],{"class":72},[33,40330,2799],{"class":47},[33,40332,33160],{"class":289},[33,40334,57],{"class":39},[33,40336,725],{"class":72},[33,40338,2799],{"class":47},[33,40340,33114],{"class":289},[33,40342,57],{"class":39},[33,40344,2617],{"class":72},[33,40346,226],{"class":47},[33,40348,40349],{"class":35,"line":2183},[33,40350,40351],{"class":47},"        )\n",[33,40353,40354],{"class":35,"line":2208},[33,40355,40356],{"class":2487},"        # 第二层\n",[33,40358,40359,40361,40364,40366],{"class":35,"line":2234},[33,40360,33076],{"class":72},[33,40362,40363],{"class":47},".block2",[33,40365,57],{"class":39},[33,40367,40234],{"class":47},[33,40369,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402],{"class":35,"line":2239},[33,40371,40239],{"class":47},[33,40373,33087],{"class":289},[33,40375,57],{"class":39},[33,40377,2629],{"class":72},[33,40379,2799],{"class":47},[33,40381,33096],{"class":289},[33,40383,57],{"class":39},[33,40385,34297],{"class":72},[33,40387,2799],{"class":47},[33,40389,33105],{"class":289},[33,40391,57],{"class":39},[33,40393,730],{"class":72},[33,40395,2799],{"class":47},[33,40397,33114],{"class":289},[33,40399,57],{"class":39},[33,40401,720],{"class":72},[33,40403,40272],{"class":47},[33,40405,40406],{"class":35,"line":2247},[33,40407,40277],{"class":47},[33,40409,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442],{"class":35,"line":2255},[33,40411,40239],{"class":47},[33,40413,33087],{"class":289},[33,40415,57],{"class":39},[33,40417,34297],{"class":72},[33,40419,2799],{"class":47},[33,40421,33096],{"class":289},[33,40423,57],{"class":39},[33,40425,34297],{"class":72},[33,40427,2799],{"class":47},[33,40429,33105],{"class":289},[33,40431,57],{"class":39},[33,40433,730],{"class":72},[33,40435,2799],{"class":47},[33,40437,33114],{"class":289},[33,40439,57],{"class":39},[33,40441,720],{"class":72},[33,40443,40272],{"class":47},[33,40445,40446],{"class":35,"line":3992},[33,40447,40277],{"class":47},[33,40449,40450,40452,40454,40456,40458,40460,40462,40464,40466,40468,40470,40472,40474],{"class":35,"line":4009},[33,40451,40322],{"class":47},[33,40453,33105],{"class":289},[33,40455,57],{"class":39},[33,40457,725],{"class":72},[33,40459,2799],{"class":47},[33,40461,33160],{"class":289},[33,40463,57],{"class":39},[33,40465,725],{"class":72},[33,40467,2799],{"class":47},[33,40469,33114],{"class":289},[33,40471,57],{"class":39},[33,40473,2617],{"class":72},[33,40475,226],{"class":47},[33,40477,40478],{"class":35,"line":4014},[33,40479,40351],{"class":47},[33,40481,40482],{"class":35,"line":4019},[33,40483,40484],{"class":2487},"        # 第三层\n",[33,40486,40487,40489,40492,40494],{"class":35,"line":4024},[33,40488,33076],{"class":72},[33,40490,40491],{"class":47},".block3",[33,40493,57],{"class":39},[33,40495,40234],{"class":47},[33,40497,40498,40500,40502,40504,40506,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530],{"class":35,"line":4038},[33,40499,40239],{"class":47},[33,40501,33087],{"class":289},[33,40503,57],{"class":39},[33,40505,34297],{"class":72},[33,40507,2799],{"class":47},[33,40509,33096],{"class":289},[33,40511,57],{"class":39},[33,40513,37095],{"class":72},[33,40515,2799],{"class":47},[33,40517,33105],{"class":289},[33,40519,57],{"class":39},[33,40521,730],{"class":72},[33,40523,2799],{"class":47},[33,40525,33114],{"class":289},[33,40527,57],{"class":39},[33,40529,720],{"class":72},[33,40531,40272],{"class":47},[33,40533,40534],{"class":35,"line":4043},[33,40535,40277],{"class":47},[33,40537,40538,40540,40542,40544,40546,40548,40550,40552,40554,40556,40558,40560,40562,40564,40566,40568,40570],{"class":35,"line":4834},[33,40539,40239],{"class":47},[33,40541,33087],{"class":289},[33,40543,57],{"class":39},[33,40545,37095],{"class":72},[33,40547,2799],{"class":47},[33,40549,33096],{"class":289},[33,40551,57],{"class":39},[33,40553,37095],{"class":72},[33,40555,2799],{"class":47},[33,40557,33105],{"class":289},[33,40559,57],{"class":39},[33,40561,730],{"class":72},[33,40563,2799],{"class":47},[33,40565,33114],{"class":289},[33,40567,57],{"class":39},[33,40569,720],{"class":72},[33,40571,40272],{"class":47},[33,40573,40574],{"class":35,"line":4848},[33,40575,40277],{"class":47},[33,40577,40578,40580,40582,40584,40586,40588,40590,40592,40594,40596,40598,40600,40602,40604,40606,40608,40610],{"class":35,"line":4856},[33,40579,40239],{"class":47},[33,40581,33087],{"class":289},[33,40583,57],{"class":39},[33,40585,37095],{"class":72},[33,40587,2799],{"class":47},[33,40589,33096],{"class":289},[33,40591,57],{"class":39},[33,40593,37095],{"class":72},[33,40595,2799],{"class":47},[33,40597,33105],{"class":289},[33,40599,57],{"class":39},[33,40601,730],{"class":72},[33,40603,2799],{"class":47},[33,40605,33114],{"class":289},[33,40607,57],{"class":39},[33,40609,720],{"class":72},[33,40611,40272],{"class":47},[33,40613,40614],{"class":35,"line":4861},[33,40615,40277],{"class":47},[33,40617,40618,40620,40622,40624,40626,40628,40630,40632,40634,40636,40638,40640,40642],{"class":35,"line":4867},[33,40619,40322],{"class":47},[33,40621,33105],{"class":289},[33,40623,57],{"class":39},[33,40625,725],{"class":72},[33,40627,2799],{"class":47},[33,40629,33160],{"class":289},[33,40631,57],{"class":39},[33,40633,725],{"class":72},[33,40635,2799],{"class":47},[33,40637,33114],{"class":289},[33,40639,57],{"class":39},[33,40641,2617],{"class":72},[33,40643,226],{"class":47},[33,40645,40646],{"class":35,"line":4873},[33,40647,40351],{"class":47},[33,40649,40650],{"class":35,"line":4878},[33,40651,40652],{"class":2487},"        # 第四层\n",[33,40654,40655,40657,40660,40662],{"class":35,"line":10194},[33,40656,33076],{"class":72},[33,40658,40659],{"class":47},".block4",[33,40661,57],{"class":39},[33,40663,40234],{"class":47},[33,40665,40666,40668,40670,40672,40674,40676,40678,40680,40683,40685,40687,40689,40691,40693,40695,40697,40699],{"class":35,"line":10218},[33,40667,40239],{"class":47},[33,40669,33087],{"class":289},[33,40671,57],{"class":39},[33,40673,37095],{"class":72},[33,40675,2799],{"class":47},[33,40677,33096],{"class":289},[33,40679,57],{"class":39},[33,40681,40682],{"class":72},"512",[33,40684,2799],{"class":47},[33,40686,33105],{"class":289},[33,40688,57],{"class":39},[33,40690,730],{"class":72},[33,40692,2799],{"class":47},[33,40694,33114],{"class":289},[33,40696,57],{"class":39},[33,40698,720],{"class":72},[33,40700,40272],{"class":47},[33,40702,40703],{"class":35,"line":10223},[33,40704,40277],{"class":47},[33,40706,40707,40709,40711,40713,40715,40717,40719,40721,40723,40725,40727,40729,40731,40733,40735,40737,40739],{"class":35,"line":10229},[33,40708,40239],{"class":47},[33,40710,33087],{"class":289},[33,40712,57],{"class":39},[33,40714,40682],{"class":72},[33,40716,2799],{"class":47},[33,40718,33096],{"class":289},[33,40720,57],{"class":39},[33,40722,40682],{"class":72},[33,40724,2799],{"class":47},[33,40726,33105],{"class":289},[33,40728,57],{"class":39},[33,40730,730],{"class":72},[33,40732,2799],{"class":47},[33,40734,33114],{"class":289},[33,40736,57],{"class":39},[33,40738,720],{"class":72},[33,40740,40272],{"class":47},[33,40742,40743],{"class":35,"line":10256},[33,40744,40277],{"class":47},[33,40746,40747,40749,40751,40753,40755,40757,40759,40761,40763,40765,40767,40769,40771,40773,40775,40777,40779],{"class":35,"line":10261},[33,40748,40239],{"class":47},[33,40750,33087],{"class":289},[33,40752,57],{"class":39},[33,40754,40682],{"class":72},[33,40756,2799],{"class":47},[33,40758,33096],{"class":289},[33,40760,57],{"class":39},[33,40762,40682],{"class":72},[33,40764,2799],{"class":47},[33,40766,33105],{"class":289},[33,40768,57],{"class":39},[33,40770,730],{"class":72},[33,40772,2799],{"class":47},[33,40774,33114],{"class":289},[33,40776,57],{"class":39},[33,40778,720],{"class":72},[33,40780,40272],{"class":47},[33,40782,40783],{"class":35,"line":10267},[33,40784,40277],{"class":47},[33,40786,40787,40789,40791,40793,40795,40797,40799,40801,40803,40805,40807,40809,40811],{"class":35,"line":10279},[33,40788,40322],{"class":47},[33,40790,33105],{"class":289},[33,40792,57],{"class":39},[33,40794,725],{"class":72},[33,40796,2799],{"class":47},[33,40798,33160],{"class":289},[33,40800,57],{"class":39},[33,40802,725],{"class":72},[33,40804,2799],{"class":47},[33,40806,33114],{"class":289},[33,40808,57],{"class":39},[33,40810,2617],{"class":72},[33,40812,226],{"class":47},[33,40814,40815],{"class":35,"line":10291},[33,40816,40351],{"class":47},[33,40818,40819],{"class":35,"line":10303},[33,40820,40821],{"class":2487},"        # 第五层\n",[33,40823,40824,40826,40829,40831],{"class":35,"line":11961},[33,40825,33076],{"class":72},[33,40827,40828],{"class":47},".block5",[33,40830,57],{"class":39},[33,40832,40234],{"class":47},[33,40834,40835,40837,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865,40867],{"class":35,"line":11986},[33,40836,40239],{"class":47},[33,40838,33087],{"class":289},[33,40840,57],{"class":39},[33,40842,40682],{"class":72},[33,40844,2799],{"class":47},[33,40846,33096],{"class":289},[33,40848,57],{"class":39},[33,40850,40682],{"class":72},[33,40852,2799],{"class":47},[33,40854,33105],{"class":289},[33,40856,57],{"class":39},[33,40858,730],{"class":72},[33,40860,2799],{"class":47},[33,40862,33114],{"class":289},[33,40864,57],{"class":39},[33,40866,720],{"class":72},[33,40868,40272],{"class":47},[33,40870,40871],{"class":35,"line":12009},[33,40872,40277],{"class":47},[33,40874,40875,40877,40879,40881,40883,40885,40887,40889,40891,40893,40895,40897,40899,40901,40903,40905,40907],{"class":35,"line":12033},[33,40876,40239],{"class":47},[33,40878,33087],{"class":289},[33,40880,57],{"class":39},[33,40882,40682],{"class":72},[33,40884,2799],{"class":47},[33,40886,33096],{"class":289},[33,40888,57],{"class":39},[33,40890,40682],{"class":72},[33,40892,2799],{"class":47},[33,40894,33105],{"class":289},[33,40896,57],{"class":39},[33,40898,730],{"class":72},[33,40900,2799],{"class":47},[33,40902,33114],{"class":289},[33,40904,57],{"class":39},[33,40906,720],{"class":72},[33,40908,40272],{"class":47},[33,40910,40911],{"class":35,"line":12038},[33,40912,40277],{"class":47},[33,40914,40915,40917,40919,40921,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943,40945,40947],{"class":35,"line":12043},[33,40916,40239],{"class":47},[33,40918,33087],{"class":289},[33,40920,57],{"class":39},[33,40922,40682],{"class":72},[33,40924,2799],{"class":47},[33,40926,33096],{"class":289},[33,40928,57],{"class":39},[33,40930,40682],{"class":72},[33,40932,2799],{"class":47},[33,40934,33105],{"class":289},[33,40936,57],{"class":39},[33,40938,730],{"class":72},[33,40940,2799],{"class":47},[33,40942,33114],{"class":289},[33,40944,57],{"class":39},[33,40946,720],{"class":72},[33,40948,40272],{"class":47},[33,40950,40951],{"class":35,"line":12048},[33,40952,40277],{"class":47},[33,40954,40955,40957,40959,40961,40963,40965,40967,40969,40971,40973,40975,40977,40979],{"class":35,"line":12057},[33,40956,40322],{"class":47},[33,40958,33105],{"class":289},[33,40960,57],{"class":39},[33,40962,725],{"class":72},[33,40964,2799],{"class":47},[33,40966,33160],{"class":289},[33,40968,57],{"class":39},[33,40970,725],{"class":72},[33,40972,2799],{"class":47},[33,40974,33114],{"class":289},[33,40976,57],{"class":39},[33,40978,2617],{"class":72},[33,40980,226],{"class":47},[33,40982,40983],{"class":35,"line":12062},[33,40984,40351],{"class":47},[33,40986,40987],{"class":35,"line":12068},[33,40988,40989],{"class":2487},"        # 全连接层\n",[33,40991,40992,40994,40997,40999],{"class":35,"line":12089},[33,40993,33076],{"class":72},[33,40995,40996],{"class":47},".block6",[33,40998,57],{"class":39},[33,41000,40234],{"class":47},[33,41002,41003],{"class":35,"line":12095},[33,41004,41005],{"class":2487},"            # 平展操作\n",[33,41007,41008],{"class":35,"line":12109},[33,41009,41010],{"class":2487},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[33,41012,41013],{"class":35,"line":12115},[33,41014,41015],{"class":47},"            nn.Flatten(),\n",[33,41017,41018,41021,41023,41025,41027,41029,41031,41033,41035],{"class":35,"line":12142},[33,41019,41020],{"class":47},"            nn.Linear(",[33,41022,2790],{"class":72},[33,41024,657],{"class":39},[33,41026,2790],{"class":72},[33,41028,657],{"class":39},[33,41030,40682],{"class":72},[33,41032,2799],{"class":47},[33,41034,37095],{"class":72},[33,41036,40272],{"class":47},[33,41038,41039],{"class":35,"line":12151},[33,41040,40277],{"class":47},[33,41042,41043,41045,41047,41049,41051],{"class":35,"line":12157},[33,41044,41020],{"class":47},[33,41046,37095],{"class":72},[33,41048,2799],{"class":47},[33,41050,34297],{"class":72},[33,41052,40272],{"class":47},[33,41054,41055],{"class":35,"line":12165},[33,41056,40277],{"class":47},[33,41058,41059,41061,41063,41065,41067],{"class":35,"line":12170},[33,41060,41020],{"class":47},[33,41062,34297],{"class":72},[33,41064,2799],{"class":47},[33,41066,1279],{"class":72},[33,41068,226],{"class":47},[33,41070,41071],{"class":35,"line":18842},[33,41072,40351],{"class":47},[33,41074,41075],{"class":35,"line":18848},[33,41076,100],{"emptyLinePlaceholder":99},[33,41078,41079],{"class":35,"line":18871},[33,41080,41081],{"class":2487},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,41083,41084],{"class":35,"line":18877},[33,41085,41086],{"class":2487},"        # 循环遍历模型\n",[33,41088,41089,41091,41094,41096,41099],{"class":35,"line":18900},[33,41090,5658],{"class":39},[33,41092,41093],{"class":47}," m ",[33,41095,681],{"class":39},[33,41097,41098],{"class":72}," self",[33,41100,41101],{"class":47},".modules():\n",[33,41103,41104],{"class":35,"line":18914},[33,41105,41106],{"class":2487},"            # print(m)\n",[33,41108,41109,41111,41114],{"class":35,"line":18934},[33,41110,6892],{"class":39},[33,41112,41113],{"class":72}," isinstance",[33,41115,41116],{"class":47},"(m,nn.Conv2d):\n",[33,41118,41119],{"class":35,"line":18940},[33,41120,41121],{"class":2487},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,41123,41124,41127,41130,41132,41135],{"class":35,"line":18951},[33,41125,41126],{"class":47},"                nn.init.kaiming_normal_(m.weight,",[33,41128,41129],{"class":289},"nonlinearity",[33,41131,57],{"class":39},[33,41133,41134],{"class":60},"'relu'",[33,41136,226],{"class":47},[33,41138,41139],{"class":35,"line":18974},[33,41140,41141],{"class":2487},"                # 判断b参数是否存在\n",[33,41143,41144,41147,41150,41152,41155,41157],{"class":35,"line":18996},[33,41145,41146],{"class":39},"                if",[33,41148,41149],{"class":47}," m.bias ",[33,41151,599],{"class":39},[33,41153,41154],{"class":39}," not",[33,41156,602],{"class":72},[33,41158,605],{"class":47},[33,41160,41161],{"class":35,"line":19001},[33,41162,41163],{"class":2487},"                    # 如果参数不存在的化初始化b=0\n",[33,41165,41166,41169,41171],{"class":35,"line":19007},[33,41167,41168],{"class":47},"                    nn.init.constant_(m.bias,",[33,41170,2617],{"class":72},[33,41172,226],{"class":47},[33,41174,41175],{"class":35,"line":19021},[33,41176,41177],{"class":2487},"            # 全连接层初始化\n",[33,41179,41180,41183,41185],{"class":35,"line":19034},[33,41181,41182],{"class":39},"            elif",[33,41184,41113],{"class":72},[33,41186,41187],{"class":47},"(m,nn.Linear):\n",[33,41189,41190],{"class":35,"line":19039},[33,41191,41192],{"class":2487},"                # 这个初始化方法是利用的是正太分布的方式\n",[33,41194,41195],{"class":35,"line":19053},[33,41196,41197],{"class":2487},"                # 均值为0，方差为0.01\n",[33,41199,41200,41203,41205,41207,41210],{"class":35,"line":19058},[33,41201,41202],{"class":47},"                nn.init.normal_(m.weight,",[33,41204,2617],{"class":72},[33,41206,2799],{"class":47},[33,41208,41209],{"class":72},"0.01",[33,41211,226],{"class":47},[33,41213,41214],{"class":35,"line":19064},[33,41215,41216],{"class":2487},"                # 初始化b参数\n",[33,41218,41219,41221,41223,41225,41227,41229],{"class":35,"line":19069},[33,41220,41146],{"class":39},[33,41222,41149],{"class":47},[33,41224,599],{"class":39},[33,41226,41154],{"class":39},[33,41228,602],{"class":72},[33,41230,605],{"class":47},[33,41232,41233,41235,41237],{"class":35,"line":19083},[33,41234,41168],{"class":47},[33,41236,2617],{"class":72},[33,41238,226],{"class":47},[33,41240,41241],{"class":35,"line":19088},[33,41242,100],{"emptyLinePlaceholder":99},[33,41244,41245],{"class":35,"line":19093},[33,41246,37390],{"class":2487},[33,41248,41249,41251,41253],{"class":35,"line":19107},[33,41250,1603],{"class":39},[33,41252,33324],{"class":43},[33,41254,33327],{"class":47},[33,41256,41257,41259,41261,41263],{"class":35,"line":19119},[33,41258,33332],{"class":47},[33,41260,57],{"class":39},[33,41262,33054],{"class":72},[33,41264,41265],{"class":47},".block1(x)\n",[33,41267,41268,41270,41272,41274],{"class":35,"line":19124},[33,41269,33332],{"class":47},[33,41271,57],{"class":39},[33,41273,33054],{"class":72},[33,41275,41276],{"class":47},".block2(x)\n",[33,41278,41279,41281,41283,41285],{"class":35,"line":19137},[33,41280,33332],{"class":47},[33,41282,57],{"class":39},[33,41284,33054],{"class":72},[33,41286,41287],{"class":47},".block3(x)\n",[33,41289,41290,41292,41294,41296],{"class":35,"line":19142},[33,41291,33332],{"class":47},[33,41293,57],{"class":39},[33,41295,33054],{"class":72},[33,41297,41298],{"class":47},".block4(x)\n",[33,41300,41301,41303,41305,41307],{"class":35,"line":19147},[33,41302,33332],{"class":47},[33,41304,57],{"class":39},[33,41306,33054],{"class":72},[33,41308,41309],{"class":47},".block5(x)\n",[33,41311,41312,41314,41316,41318],{"class":35,"line":19152},[33,41313,33332],{"class":47},[33,41315,57],{"class":39},[33,41317,33054],{"class":72},[33,41319,41320],{"class":47},".block6(x)\n",[33,41322,41323,41325],{"class":35,"line":19165},[33,41324,1614],{"class":39},[33,41326,33440],{"class":47},[33,41328,41329],{"class":35,"line":19170},[33,41330,100],{"emptyLinePlaceholder":99},[33,41332,41333],{"class":35,"line":34859},[33,41334,41335],{"class":2487},"# 验证模型\n",[33,41337,41338,41340,41342,41344,41347],{"class":35,"line":34865},[33,41339,3805],{"class":39},[33,41341,33451],{"class":72},[33,41343,5206],{"class":39},[33,41345,41346],{"class":60},"'__main__'",[33,41348,605],{"class":47},[33,41350,41351,41353,41355,41357,41359,41361,41363,41365,41367],{"class":35,"line":34871},[33,41352,33468],{"class":47},[33,41354,57],{"class":39},[33,41356,32685],{"class":47},[33,41358,33475],{"class":60},[33,41360,3966],{"class":39},[33,41362,33480],{"class":47},[33,41364,3963],{"class":39},[33,41366,32710],{"class":60},[33,41368,226],{"class":47},[33,41370,41371,41373],{"class":35,"line":34877},[33,41372,193],{"class":72},[33,41374,32719],{"class":47},[33,41376,41377,41379,41381],{"class":35,"line":34883},[33,41378,33520],{"class":47},[33,41380,57],{"class":39},[33,41382,41383],{"class":47},"VGG16().to(device)\n",[33,41385,41386,41388,41390,41392,41394,41396,41398,41400],{"class":35,"line":34894},[33,41387,193],{"class":72},[33,41389,33532],{"class":47},[33,41391,720],{"class":72},[33,41393,2799],{"class":47},[33,41395,33730],{"class":72},[33,41397,2799],{"class":47},[33,41399,33730],{"class":72},[33,41401,33545],{"class":47},[328,41403,41404],{"start":51},[331,41405,41406],{},"训练代码",[19,41408,41409],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41411,41412],{},"解决方式:",[19,41414,41415],{},"①权重初始化",[23,41417,41419],{"className":25,"code":41418,"language":27,"meta":28,"style":28},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[30,41420,41421,41426,41431,41443,41448,41456,41461,41474,41479,41493,41498,41507,41512,41521,41526,41531,41544,41549,41563],{"__ignoreMap":28},[33,41422,41423],{"class":35,"line":36},[33,41424,41425],{"class":2487},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,41427,41428],{"class":35,"line":51},[33,41429,41430],{"class":2487},"# 循环遍历模型\n",[33,41432,41433,41435,41437,41439,41441],{"class":35,"line":64},[33,41434,5282],{"class":39},[33,41436,41093],{"class":47},[33,41438,681],{"class":39},[33,41440,41098],{"class":72},[33,41442,41101],{"class":47},[33,41444,41445],{"class":35,"line":76},[33,41446,41447],{"class":2487},"    # print(m)\n",[33,41449,41450,41452,41454],{"class":35,"line":87},[33,41451,593],{"class":39},[33,41453,41113],{"class":72},[33,41455,41116],{"class":47},[33,41457,41458],{"class":35,"line":96},[33,41459,41460],{"class":2487},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,41462,41463,41466,41468,41470,41472],{"class":35,"line":103},[33,41464,41465],{"class":47},"        nn.init.kaiming_normal_(m.weight,",[33,41467,41129],{"class":289},[33,41469,57],{"class":39},[33,41471,41134],{"class":60},[33,41473,226],{"class":47},[33,41475,41476],{"class":35,"line":108},[33,41477,41478],{"class":2487},"        # 判断b参数是否存在\n",[33,41480,41481,41483,41485,41487,41489,41491],{"class":35,"line":119},[33,41482,2130],{"class":39},[33,41484,41149],{"class":47},[33,41486,599],{"class":39},[33,41488,41154],{"class":39},[33,41490,602],{"class":72},[33,41492,605],{"class":47},[33,41494,41495],{"class":35,"line":128},[33,41496,41497],{"class":2487},"            # 如果参数不存在的化初始化b=0\n",[33,41499,41500,41503,41505],{"class":35,"line":1753},[33,41501,41502],{"class":47},"            nn.init.constant_(m.bias,",[33,41504,2617],{"class":72},[33,41506,226],{"class":47},[33,41508,41509],{"class":35,"line":1763},[33,41510,41511],{"class":2487},"    # 全连接层初始化\n",[33,41513,41514,41517,41519],{"class":35,"line":1775},[33,41515,41516],{"class":39},"    elif",[33,41518,41113],{"class":72},[33,41520,41187],{"class":47},[33,41522,41523],{"class":35,"line":1780},[33,41524,41525],{"class":2487},"        # 这个初始化方法是利用的是正太分布的方式\n",[33,41527,41528],{"class":35,"line":1785},[33,41529,41530],{"class":2487},"        # 均值为0，方差为0.01\n",[33,41532,41533,41536,41538,41540,41542],{"class":35,"line":1940},[33,41534,41535],{"class":47},"        nn.init.normal_(m.weight,",[33,41537,2617],{"class":72},[33,41539,2799],{"class":47},[33,41541,41209],{"class":72},[33,41543,226],{"class":47},[33,41545,41546],{"class":35,"line":2183},[33,41547,41548],{"class":2487},"        # 初始化b参数\n",[33,41550,41551,41553,41555,41557,41559,41561],{"class":35,"line":2208},[33,41552,2130],{"class":39},[33,41554,41149],{"class":47},[33,41556,599],{"class":39},[33,41558,41154],{"class":39},[33,41560,602],{"class":72},[33,41562,605],{"class":47},[33,41564,41565,41567,41569],{"class":35,"line":2234},[33,41566,41502],{"class":47},[33,41568,2617],{"class":72},[33,41570,226],{"class":47},[19,41572,41573],{},"②尽可能地增加批次",[19,41575,41576],{},"训练完整代码：",[23,41578,41579],{"className":25,"code":40124,"language":27,"meta":28,"style":28},[30,41580,41581,41587,41597,41607,41617,41621,41637,41645,41663,41667,41671,41681,41717,41721,41757,41761,41789,41793,41797,41807,41843,41847,41883,41887,41915,41919,41923,41933,41969,41973,42009,42013,42049,42053,42081,42085,42089,42099,42135,42139,42175,42179,42215,42219,42247,42251,42255,42265,42301,42305,42341,42345,42381,42385,42413,42417,42421,42431,42435,42439,42443,42463,42467,42479,42483,42495,42499,42503,42507,42511,42523,42527,42535,42539,42551,42555,42569,42573,42581,42585,42593,42597,42601,42613,42617,42631,42639,42643,42647,42655,42665,42675,42685,42695,42705,42715,42721,42725,42729,42741,42761,42767,42775],{"__ignoreMap":28},[33,41582,41583,41585],{"class":35,"line":36},[33,41584,32627],{"class":39},[33,41586,32630],{"class":47},[33,41588,41589,41591,41593,41595],{"class":35,"line":51},[33,41590,32970],{"class":39},[33,41592,40139],{"class":47},[33,41594,32627],{"class":39},[33,41596,40144],{"class":47},[33,41598,41599,41601,41603,41605],{"class":35,"line":64},[33,41600,32970],{"class":39},[33,41602,32973],{"class":47},[33,41604,32627],{"class":39},[33,41606,32978],{"class":47},[33,41608,41609,41611,41613,41615],{"class":35,"line":76},[33,41610,32970],{"class":39},[33,41612,32990],{"class":47},[33,41614,32627],{"class":39},[33,41616,32995],{"class":47},[33,41618,41619],{"class":35,"line":87},[33,41620,100],{"emptyLinePlaceholder":99},[33,41622,41623,41625,41627,41629,41631,41633,41635],{"class":35,"line":96},[33,41624,16934],{"class":39},[33,41626,40175],{"class":43},[33,41628,133],{"class":47},[33,41630,33011],{"class":43},[33,41632,2975],{"class":47},[33,41634,33016],{"class":43},[33,41636,366],{"class":47},[33,41638,41639,41641,41643],{"class":35,"line":103},[33,41640,1603],{"class":39},[33,41642,33035],{"class":72},[33,41644,33038],{"class":47},[33,41646,41647,41649,41651,41653,41655,41657,41659,41661],{"class":35,"line":108},[33,41648,33048],{"class":72},[33,41650,133],{"class":47},[33,41652,40202],{"class":72},[33,41654,245],{"class":47},[33,41656,33054],{"class":72},[33,41658,33057],{"class":47},[33,41660,33060],{"class":72},[33,41662,4235],{"class":47},[33,41664,41665],{"class":35,"line":119},[33,41666,40217],{"class":2487},[33,41668,41669],{"class":35,"line":128},[33,41670,40222],{"class":2487},[33,41672,41673,41675,41677,41679],{"class":35,"line":1753},[33,41674,33076],{"class":72},[33,41676,40229],{"class":47},[33,41678,57],{"class":39},[33,41680,40234],{"class":47},[33,41682,41683,41685,41687,41689,41691,41693,41695,41697,41699,41701,41703,41705,41707,41709,41711,41713,41715],{"class":35,"line":1763},[33,41684,40239],{"class":47},[33,41686,33087],{"class":289},[33,41688,57],{"class":39},[33,41690,720],{"class":72},[33,41692,2799],{"class":47},[33,41694,33096],{"class":289},[33,41696,57],{"class":39},[33,41698,2629],{"class":72},[33,41700,2799],{"class":47},[33,41702,33105],{"class":289},[33,41704,57],{"class":39},[33,41706,730],{"class":72},[33,41708,2799],{"class":47},[33,41710,33114],{"class":289},[33,41712,57],{"class":39},[33,41714,720],{"class":72},[33,41716,40272],{"class":47},[33,41718,41719],{"class":35,"line":1775},[33,41720,40277],{"class":47},[33,41722,41723,41725,41727,41729,41731,41733,41735,41737,41739,41741,41743,41745,41747,41749,41751,41753,41755],{"class":35,"line":1780},[33,41724,40239],{"class":47},[33,41726,33087],{"class":289},[33,41728,57],{"class":39},[33,41730,2629],{"class":72},[33,41732,2799],{"class":47},[33,41734,33096],{"class":289},[33,41736,57],{"class":39},[33,41738,2629],{"class":72},[33,41740,2799],{"class":47},[33,41742,33105],{"class":289},[33,41744,57],{"class":39},[33,41746,730],{"class":72},[33,41748,2799],{"class":47},[33,41750,33114],{"class":289},[33,41752,57],{"class":39},[33,41754,720],{"class":72},[33,41756,40272],{"class":47},[33,41758,41759],{"class":35,"line":1785},[33,41760,40277],{"class":47},[33,41762,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781,41783,41785,41787],{"class":35,"line":1940},[33,41764,40322],{"class":47},[33,41766,33105],{"class":289},[33,41768,57],{"class":39},[33,41770,725],{"class":72},[33,41772,2799],{"class":47},[33,41774,33160],{"class":289},[33,41776,57],{"class":39},[33,41778,725],{"class":72},[33,41780,2799],{"class":47},[33,41782,33114],{"class":289},[33,41784,57],{"class":39},[33,41786,2617],{"class":72},[33,41788,226],{"class":47},[33,41790,41791],{"class":35,"line":2183},[33,41792,40351],{"class":47},[33,41794,41795],{"class":35,"line":2208},[33,41796,40356],{"class":2487},[33,41798,41799,41801,41803,41805],{"class":35,"line":2234},[33,41800,33076],{"class":72},[33,41802,40363],{"class":47},[33,41804,57],{"class":39},[33,41806,40234],{"class":47},[33,41808,41809,41811,41813,41815,41817,41819,41821,41823,41825,41827,41829,41831,41833,41835,41837,41839,41841],{"class":35,"line":2239},[33,41810,40239],{"class":47},[33,41812,33087],{"class":289},[33,41814,57],{"class":39},[33,41816,2629],{"class":72},[33,41818,2799],{"class":47},[33,41820,33096],{"class":289},[33,41822,57],{"class":39},[33,41824,34297],{"class":72},[33,41826,2799],{"class":47},[33,41828,33105],{"class":289},[33,41830,57],{"class":39},[33,41832,730],{"class":72},[33,41834,2799],{"class":47},[33,41836,33114],{"class":289},[33,41838,57],{"class":39},[33,41840,720],{"class":72},[33,41842,40272],{"class":47},[33,41844,41845],{"class":35,"line":2247},[33,41846,40277],{"class":47},[33,41848,41849,41851,41853,41855,41857,41859,41861,41863,41865,41867,41869,41871,41873,41875,41877,41879,41881],{"class":35,"line":2255},[33,41850,40239],{"class":47},[33,41852,33087],{"class":289},[33,41854,57],{"class":39},[33,41856,34297],{"class":72},[33,41858,2799],{"class":47},[33,41860,33096],{"class":289},[33,41862,57],{"class":39},[33,41864,34297],{"class":72},[33,41866,2799],{"class":47},[33,41868,33105],{"class":289},[33,41870,57],{"class":39},[33,41872,730],{"class":72},[33,41874,2799],{"class":47},[33,41876,33114],{"class":289},[33,41878,57],{"class":39},[33,41880,720],{"class":72},[33,41882,40272],{"class":47},[33,41884,41885],{"class":35,"line":3992},[33,41886,40277],{"class":47},[33,41888,41889,41891,41893,41895,41897,41899,41901,41903,41905,41907,41909,41911,41913],{"class":35,"line":4009},[33,41890,40322],{"class":47},[33,41892,33105],{"class":289},[33,41894,57],{"class":39},[33,41896,725],{"class":72},[33,41898,2799],{"class":47},[33,41900,33160],{"class":289},[33,41902,57],{"class":39},[33,41904,725],{"class":72},[33,41906,2799],{"class":47},[33,41908,33114],{"class":289},[33,41910,57],{"class":39},[33,41912,2617],{"class":72},[33,41914,226],{"class":47},[33,41916,41917],{"class":35,"line":4014},[33,41918,40351],{"class":47},[33,41920,41921],{"class":35,"line":4019},[33,41922,40484],{"class":2487},[33,41924,41925,41927,41929,41931],{"class":35,"line":4024},[33,41926,33076],{"class":72},[33,41928,40491],{"class":47},[33,41930,57],{"class":39},[33,41932,40234],{"class":47},[33,41934,41935,41937,41939,41941,41943,41945,41947,41949,41951,41953,41955,41957,41959,41961,41963,41965,41967],{"class":35,"line":4038},[33,41936,40239],{"class":47},[33,41938,33087],{"class":289},[33,41940,57],{"class":39},[33,41942,34297],{"class":72},[33,41944,2799],{"class":47},[33,41946,33096],{"class":289},[33,41948,57],{"class":39},[33,41950,37095],{"class":72},[33,41952,2799],{"class":47},[33,41954,33105],{"class":289},[33,41956,57],{"class":39},[33,41958,730],{"class":72},[33,41960,2799],{"class":47},[33,41962,33114],{"class":289},[33,41964,57],{"class":39},[33,41966,720],{"class":72},[33,41968,40272],{"class":47},[33,41970,41971],{"class":35,"line":4043},[33,41972,40277],{"class":47},[33,41974,41975,41977,41979,41981,41983,41985,41987,41989,41991,41993,41995,41997,41999,42001,42003,42005,42007],{"class":35,"line":4834},[33,41976,40239],{"class":47},[33,41978,33087],{"class":289},[33,41980,57],{"class":39},[33,41982,37095],{"class":72},[33,41984,2799],{"class":47},[33,41986,33096],{"class":289},[33,41988,57],{"class":39},[33,41990,37095],{"class":72},[33,41992,2799],{"class":47},[33,41994,33105],{"class":289},[33,41996,57],{"class":39},[33,41998,730],{"class":72},[33,42000,2799],{"class":47},[33,42002,33114],{"class":289},[33,42004,57],{"class":39},[33,42006,720],{"class":72},[33,42008,40272],{"class":47},[33,42010,42011],{"class":35,"line":4848},[33,42012,40277],{"class":47},[33,42014,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045,42047],{"class":35,"line":4856},[33,42016,40239],{"class":47},[33,42018,33087],{"class":289},[33,42020,57],{"class":39},[33,42022,37095],{"class":72},[33,42024,2799],{"class":47},[33,42026,33096],{"class":289},[33,42028,57],{"class":39},[33,42030,37095],{"class":72},[33,42032,2799],{"class":47},[33,42034,33105],{"class":289},[33,42036,57],{"class":39},[33,42038,730],{"class":72},[33,42040,2799],{"class":47},[33,42042,33114],{"class":289},[33,42044,57],{"class":39},[33,42046,720],{"class":72},[33,42048,40272],{"class":47},[33,42050,42051],{"class":35,"line":4861},[33,42052,40277],{"class":47},[33,42054,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079],{"class":35,"line":4867},[33,42056,40322],{"class":47},[33,42058,33105],{"class":289},[33,42060,57],{"class":39},[33,42062,725],{"class":72},[33,42064,2799],{"class":47},[33,42066,33160],{"class":289},[33,42068,57],{"class":39},[33,42070,725],{"class":72},[33,42072,2799],{"class":47},[33,42074,33114],{"class":289},[33,42076,57],{"class":39},[33,42078,2617],{"class":72},[33,42080,226],{"class":47},[33,42082,42083],{"class":35,"line":4873},[33,42084,40351],{"class":47},[33,42086,42087],{"class":35,"line":4878},[33,42088,40652],{"class":2487},[33,42090,42091,42093,42095,42097],{"class":35,"line":10194},[33,42092,33076],{"class":72},[33,42094,40659],{"class":47},[33,42096,57],{"class":39},[33,42098,40234],{"class":47},[33,42100,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131,42133],{"class":35,"line":10218},[33,42102,40239],{"class":47},[33,42104,33087],{"class":289},[33,42106,57],{"class":39},[33,42108,37095],{"class":72},[33,42110,2799],{"class":47},[33,42112,33096],{"class":289},[33,42114,57],{"class":39},[33,42116,40682],{"class":72},[33,42118,2799],{"class":47},[33,42120,33105],{"class":289},[33,42122,57],{"class":39},[33,42124,730],{"class":72},[33,42126,2799],{"class":47},[33,42128,33114],{"class":289},[33,42130,57],{"class":39},[33,42132,720],{"class":72},[33,42134,40272],{"class":47},[33,42136,42137],{"class":35,"line":10223},[33,42138,40277],{"class":47},[33,42140,42141,42143,42145,42147,42149,42151,42153,42155,42157,42159,42161,42163,42165,42167,42169,42171,42173],{"class":35,"line":10229},[33,42142,40239],{"class":47},[33,42144,33087],{"class":289},[33,42146,57],{"class":39},[33,42148,40682],{"class":72},[33,42150,2799],{"class":47},[33,42152,33096],{"class":289},[33,42154,57],{"class":39},[33,42156,40682],{"class":72},[33,42158,2799],{"class":47},[33,42160,33105],{"class":289},[33,42162,57],{"class":39},[33,42164,730],{"class":72},[33,42166,2799],{"class":47},[33,42168,33114],{"class":289},[33,42170,57],{"class":39},[33,42172,720],{"class":72},[33,42174,40272],{"class":47},[33,42176,42177],{"class":35,"line":10256},[33,42178,40277],{"class":47},[33,42180,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205,42207,42209,42211,42213],{"class":35,"line":10261},[33,42182,40239],{"class":47},[33,42184,33087],{"class":289},[33,42186,57],{"class":39},[33,42188,40682],{"class":72},[33,42190,2799],{"class":47},[33,42192,33096],{"class":289},[33,42194,57],{"class":39},[33,42196,40682],{"class":72},[33,42198,2799],{"class":47},[33,42200,33105],{"class":289},[33,42202,57],{"class":39},[33,42204,730],{"class":72},[33,42206,2799],{"class":47},[33,42208,33114],{"class":289},[33,42210,57],{"class":39},[33,42212,720],{"class":72},[33,42214,40272],{"class":47},[33,42216,42217],{"class":35,"line":10267},[33,42218,40277],{"class":47},[33,42220,42221,42223,42225,42227,42229,42231,42233,42235,42237,42239,42241,42243,42245],{"class":35,"line":10279},[33,42222,40322],{"class":47},[33,42224,33105],{"class":289},[33,42226,57],{"class":39},[33,42228,725],{"class":72},[33,42230,2799],{"class":47},[33,42232,33160],{"class":289},[33,42234,57],{"class":39},[33,42236,725],{"class":72},[33,42238,2799],{"class":47},[33,42240,33114],{"class":289},[33,42242,57],{"class":39},[33,42244,2617],{"class":72},[33,42246,226],{"class":47},[33,42248,42249],{"class":35,"line":10291},[33,42250,40351],{"class":47},[33,42252,42253],{"class":35,"line":10303},[33,42254,40821],{"class":2487},[33,42256,42257,42259,42261,42263],{"class":35,"line":11961},[33,42258,33076],{"class":72},[33,42260,40828],{"class":47},[33,42262,57],{"class":39},[33,42264,40234],{"class":47},[33,42266,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289,42291,42293,42295,42297,42299],{"class":35,"line":11986},[33,42268,40239],{"class":47},[33,42270,33087],{"class":289},[33,42272,57],{"class":39},[33,42274,40682],{"class":72},[33,42276,2799],{"class":47},[33,42278,33096],{"class":289},[33,42280,57],{"class":39},[33,42282,40682],{"class":72},[33,42284,2799],{"class":47},[33,42286,33105],{"class":289},[33,42288,57],{"class":39},[33,42290,730],{"class":72},[33,42292,2799],{"class":47},[33,42294,33114],{"class":289},[33,42296,57],{"class":39},[33,42298,720],{"class":72},[33,42300,40272],{"class":47},[33,42302,42303],{"class":35,"line":12009},[33,42304,40277],{"class":47},[33,42306,42307,42309,42311,42313,42315,42317,42319,42321,42323,42325,42327,42329,42331,42333,42335,42337,42339],{"class":35,"line":12033},[33,42308,40239],{"class":47},[33,42310,33087],{"class":289},[33,42312,57],{"class":39},[33,42314,40682],{"class":72},[33,42316,2799],{"class":47},[33,42318,33096],{"class":289},[33,42320,57],{"class":39},[33,42322,40682],{"class":72},[33,42324,2799],{"class":47},[33,42326,33105],{"class":289},[33,42328,57],{"class":39},[33,42330,730],{"class":72},[33,42332,2799],{"class":47},[33,42334,33114],{"class":289},[33,42336,57],{"class":39},[33,42338,720],{"class":72},[33,42340,40272],{"class":47},[33,42342,42343],{"class":35,"line":12038},[33,42344,40277],{"class":47},[33,42346,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379],{"class":35,"line":12043},[33,42348,40239],{"class":47},[33,42350,33087],{"class":289},[33,42352,57],{"class":39},[33,42354,40682],{"class":72},[33,42356,2799],{"class":47},[33,42358,33096],{"class":289},[33,42360,57],{"class":39},[33,42362,40682],{"class":72},[33,42364,2799],{"class":47},[33,42366,33105],{"class":289},[33,42368,57],{"class":39},[33,42370,730],{"class":72},[33,42372,2799],{"class":47},[33,42374,33114],{"class":289},[33,42376,57],{"class":39},[33,42378,720],{"class":72},[33,42380,40272],{"class":47},[33,42382,42383],{"class":35,"line":12048},[33,42384,40277],{"class":47},[33,42386,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411],{"class":35,"line":12057},[33,42388,40322],{"class":47},[33,42390,33105],{"class":289},[33,42392,57],{"class":39},[33,42394,725],{"class":72},[33,42396,2799],{"class":47},[33,42398,33160],{"class":289},[33,42400,57],{"class":39},[33,42402,725],{"class":72},[33,42404,2799],{"class":47},[33,42406,33114],{"class":289},[33,42408,57],{"class":39},[33,42410,2617],{"class":72},[33,42412,226],{"class":47},[33,42414,42415],{"class":35,"line":12062},[33,42416,40351],{"class":47},[33,42418,42419],{"class":35,"line":12068},[33,42420,40989],{"class":2487},[33,42422,42423,42425,42427,42429],{"class":35,"line":12089},[33,42424,33076],{"class":72},[33,42426,40996],{"class":47},[33,42428,57],{"class":39},[33,42430,40234],{"class":47},[33,42432,42433],{"class":35,"line":12095},[33,42434,41005],{"class":2487},[33,42436,42437],{"class":35,"line":12109},[33,42438,41010],{"class":2487},[33,42440,42441],{"class":35,"line":12115},[33,42442,41015],{"class":47},[33,42444,42445,42447,42449,42451,42453,42455,42457,42459,42461],{"class":35,"line":12142},[33,42446,41020],{"class":47},[33,42448,2790],{"class":72},[33,42450,657],{"class":39},[33,42452,2790],{"class":72},[33,42454,657],{"class":39},[33,42456,40682],{"class":72},[33,42458,2799],{"class":47},[33,42460,37095],{"class":72},[33,42462,40272],{"class":47},[33,42464,42465],{"class":35,"line":12151},[33,42466,40277],{"class":47},[33,42468,42469,42471,42473,42475,42477],{"class":35,"line":12157},[33,42470,41020],{"class":47},[33,42472,37095],{"class":72},[33,42474,2799],{"class":47},[33,42476,34297],{"class":72},[33,42478,40272],{"class":47},[33,42480,42481],{"class":35,"line":12165},[33,42482,40277],{"class":47},[33,42484,42485,42487,42489,42491,42493],{"class":35,"line":12170},[33,42486,41020],{"class":47},[33,42488,34297],{"class":72},[33,42490,2799],{"class":47},[33,42492,1279],{"class":72},[33,42494,226],{"class":47},[33,42496,42497],{"class":35,"line":18842},[33,42498,40351],{"class":47},[33,42500,42501],{"class":35,"line":18848},[33,42502,100],{"emptyLinePlaceholder":99},[33,42504,42505],{"class":35,"line":18871},[33,42506,41081],{"class":2487},[33,42508,42509],{"class":35,"line":18877},[33,42510,41086],{"class":2487},[33,42512,42513,42515,42517,42519,42521],{"class":35,"line":18900},[33,42514,5658],{"class":39},[33,42516,41093],{"class":47},[33,42518,681],{"class":39},[33,42520,41098],{"class":72},[33,42522,41101],{"class":47},[33,42524,42525],{"class":35,"line":18914},[33,42526,41106],{"class":2487},[33,42528,42529,42531,42533],{"class":35,"line":18934},[33,42530,6892],{"class":39},[33,42532,41113],{"class":72},[33,42534,41116],{"class":47},[33,42536,42537],{"class":35,"line":18940},[33,42538,41121],{"class":2487},[33,42540,42541,42543,42545,42547,42549],{"class":35,"line":18951},[33,42542,41126],{"class":47},[33,42544,41129],{"class":289},[33,42546,57],{"class":39},[33,42548,41134],{"class":60},[33,42550,226],{"class":47},[33,42552,42553],{"class":35,"line":18974},[33,42554,41141],{"class":2487},[33,42556,42557,42559,42561,42563,42565,42567],{"class":35,"line":18996},[33,42558,41146],{"class":39},[33,42560,41149],{"class":47},[33,42562,599],{"class":39},[33,42564,41154],{"class":39},[33,42566,602],{"class":72},[33,42568,605],{"class":47},[33,42570,42571],{"class":35,"line":19001},[33,42572,41163],{"class":2487},[33,42574,42575,42577,42579],{"class":35,"line":19007},[33,42576,41168],{"class":47},[33,42578,2617],{"class":72},[33,42580,226],{"class":47},[33,42582,42583],{"class":35,"line":19021},[33,42584,41177],{"class":2487},[33,42586,42587,42589,42591],{"class":35,"line":19034},[33,42588,41182],{"class":39},[33,42590,41113],{"class":72},[33,42592,41187],{"class":47},[33,42594,42595],{"class":35,"line":19039},[33,42596,41192],{"class":2487},[33,42598,42599],{"class":35,"line":19053},[33,42600,41197],{"class":2487},[33,42602,42603,42605,42607,42609,42611],{"class":35,"line":19058},[33,42604,41202],{"class":47},[33,42606,2617],{"class":72},[33,42608,2799],{"class":47},[33,42610,41209],{"class":72},[33,42612,226],{"class":47},[33,42614,42615],{"class":35,"line":19064},[33,42616,41216],{"class":2487},[33,42618,42619,42621,42623,42625,42627,42629],{"class":35,"line":19069},[33,42620,41146],{"class":39},[33,42622,41149],{"class":47},[33,42624,599],{"class":39},[33,42626,41154],{"class":39},[33,42628,602],{"class":72},[33,42630,605],{"class":47},[33,42632,42633,42635,42637],{"class":35,"line":19083},[33,42634,41168],{"class":47},[33,42636,2617],{"class":72},[33,42638,226],{"class":47},[33,42640,42641],{"class":35,"line":19088},[33,42642,100],{"emptyLinePlaceholder":99},[33,42644,42645],{"class":35,"line":19093},[33,42646,37390],{"class":2487},[33,42648,42649,42651,42653],{"class":35,"line":19107},[33,42650,1603],{"class":39},[33,42652,33324],{"class":43},[33,42654,33327],{"class":47},[33,42656,42657,42659,42661,42663],{"class":35,"line":19119},[33,42658,33332],{"class":47},[33,42660,57],{"class":39},[33,42662,33054],{"class":72},[33,42664,41265],{"class":47},[33,42666,42667,42669,42671,42673],{"class":35,"line":19124},[33,42668,33332],{"class":47},[33,42670,57],{"class":39},[33,42672,33054],{"class":72},[33,42674,41276],{"class":47},[33,42676,42677,42679,42681,42683],{"class":35,"line":19137},[33,42678,33332],{"class":47},[33,42680,57],{"class":39},[33,42682,33054],{"class":72},[33,42684,41287],{"class":47},[33,42686,42687,42689,42691,42693],{"class":35,"line":19142},[33,42688,33332],{"class":47},[33,42690,57],{"class":39},[33,42692,33054],{"class":72},[33,42694,41298],{"class":47},[33,42696,42697,42699,42701,42703],{"class":35,"line":19147},[33,42698,33332],{"class":47},[33,42700,57],{"class":39},[33,42702,33054],{"class":72},[33,42704,41309],{"class":47},[33,42706,42707,42709,42711,42713],{"class":35,"line":19152},[33,42708,33332],{"class":47},[33,42710,57],{"class":39},[33,42712,33054],{"class":72},[33,42714,41320],{"class":47},[33,42716,42717,42719],{"class":35,"line":19165},[33,42718,1614],{"class":39},[33,42720,33440],{"class":47},[33,42722,42723],{"class":35,"line":19170},[33,42724,100],{"emptyLinePlaceholder":99},[33,42726,42727],{"class":35,"line":34859},[33,42728,41335],{"class":2487},[33,42730,42731,42733,42735,42737,42739],{"class":35,"line":34865},[33,42732,3805],{"class":39},[33,42734,33451],{"class":72},[33,42736,5206],{"class":39},[33,42738,41346],{"class":60},[33,42740,605],{"class":47},[33,42742,42743,42745,42747,42749,42751,42753,42755,42757,42759],{"class":35,"line":34871},[33,42744,33468],{"class":47},[33,42746,57],{"class":39},[33,42748,32685],{"class":47},[33,42750,33475],{"class":60},[33,42752,3966],{"class":39},[33,42754,33480],{"class":47},[33,42756,3963],{"class":39},[33,42758,32710],{"class":60},[33,42760,226],{"class":47},[33,42762,42763,42765],{"class":35,"line":34877},[33,42764,193],{"class":72},[33,42766,32719],{"class":47},[33,42768,42769,42771,42773],{"class":35,"line":34883},[33,42770,33520],{"class":47},[33,42772,57],{"class":39},[33,42774,41383],{"class":47},[33,42776,42777,42779,42781,42783,42785,42787,42789,42791],{"class":35,"line":34894},[33,42778,193],{"class":72},[33,42780,33532],{"class":47},[33,42782,720],{"class":72},[33,42784,2799],{"class":47},[33,42786,33730],{"class":72},[33,42788,2799],{"class":47},[33,42790,33730],{"class":72},[33,42792,33545],{"class":47},[328,42794,42795],{"start":64},[331,42796,42797],{},"测试代码",[23,42799,42801],{"className":25,"code":42800,"language":27,"meta":28,"style":28},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[30,42802,42803,42809,42819,42829,42833,42843,42854,42858,42862,42866,42874,42890,42900,42916,42926,42940,42944,42954,42964,42974,42980,42984,42988,42996,43000,43016,43024,43028,43032,43040,43048,43052,43056,43060,43064,43070,43074,43084,43092,43100,43104,43108,43112,43120,43124,43140,43144,43148,43152,43164,43168,43180,43184,43188,43200,43204,43214,43218,43222,43234,43238,43247,43251,43255,43263,43267,43275,43279,43283,43287,43291,43295,43311,43319,43323,43327,43375,43381,43385,43395,43403,43411,43415,43419,43423,43427,43435,43439,43455,43459,43467,43475],{"__ignoreMap":28},[33,42804,42805,42807],{"class":35,"line":36},[33,42806,32627],{"class":39},[33,42808,32630],{"class":47},[33,42810,42811,42813,42815,42817],{"class":35,"line":51},[33,42812,32627],{"class":39},[33,42814,33645],{"class":47},[33,42816,33613],{"class":39},[33,42818,33650],{"class":47},[33,42820,42821,42823,42825,42827],{"class":35,"line":64},[33,42822,32970],{"class":39},[33,42824,33628],{"class":47},[33,42826,32627],{"class":39},[33,42828,33633],{"class":47},[33,42830,42831],{"class":35,"line":76},[33,42832,36147],{"class":2487},[33,42834,42835,42837,42839,42841],{"class":35,"line":87},[33,42836,32970],{"class":39},[33,42838,33598],{"class":47},[33,42840,32627],{"class":39},[33,42842,33603],{"class":47},[33,42844,42845,42847,42849,42851],{"class":35,"line":96},[33,42846,32970],{"class":39},[33,42848,34143],{"class":47},[33,42850,32627],{"class":39},[33,42852,42853],{"class":72}," VGG16\n",[33,42855,42856],{"class":35,"line":103},[33,42857,100],{"emptyLinePlaceholder":99},[33,42859,42860],{"class":35,"line":108},[33,42861,100],{"emptyLinePlaceholder":99},[33,42863,42864],{"class":35,"line":119},[33,42865,36176],{"class":2487},[33,42867,42868,42870,42872],{"class":35,"line":128},[33,42869,40],{"class":39},[33,42871,36183],{"class":43},[33,42873,48],{"class":47},[33,42875,42876,42878,42880,42882,42884,42886,42888],{"class":35,"line":1753},[33,42877,36190],{"class":47},[33,42879,57],{"class":39},[33,42881,33685],{"class":47},[33,42883,33688],{"class":289},[33,42885,57],{"class":39},[33,42887,33693],{"class":60},[33,42889,33696],{"class":47},[33,42891,42892,42894,42896,42898],{"class":35,"line":1763},[33,42893,36207],{"class":289},[33,42895,57],{"class":39},[33,42897,36212],{"class":72},[33,42899,33696],{"class":47},[33,42901,42902,42904,42906,42908,42910,42912,42914],{"class":35,"line":1775},[33,42903,36219],{"class":289},[33,42905,57],{"class":39},[33,42907,33722],{"class":47},[33,42909,33725],{"class":289},[33,42911,57],{"class":39},[33,42913,33730],{"class":72},[33,42915,33733],{"class":47},[33,42917,42918,42920,42922,42924],{"class":35,"line":1780},[33,42919,36236],{"class":289},[33,42921,57],{"class":39},[33,42923,1190],{"class":72},[33,42925,226],{"class":47},[33,42927,42928,42930,42932,42934,42936,42938],{"class":35,"line":1785},[33,42929,36247],{"class":47},[33,42931,57],{"class":39},[33,42933,33763],{"class":47},[33,42935,33766],{"class":289},[33,42937,57],{"class":39},[33,42939,36258],{"class":47},[33,42941,42942],{"class":35,"line":1940},[33,42943,36263],{"class":2487},[33,42945,42946,42948,42950,42952],{"class":35,"line":2183},[33,42947,36268],{"class":289},[33,42949,57],{"class":39},[33,42951,720],{"class":72},[33,42953,33696],{"class":47},[33,42955,42956,42958,42960,42962],{"class":35,"line":2208},[33,42957,36279],{"class":289},[33,42959,57],{"class":39},[33,42961,1190],{"class":72},[33,42963,33696],{"class":47},[33,42965,42966,42968,42970,42972],{"class":35,"line":2234},[33,42967,36290],{"class":289},[33,42969,57],{"class":39},[33,42971,2617],{"class":72},[33,42973,226],{"class":47},[33,42975,42976,42978],{"class":35,"line":2239},[33,42977,90],{"class":39},[33,42979,36303],{"class":47},[33,42981,42982],{"class":35,"line":2247},[33,42983,100],{"emptyLinePlaceholder":99},[33,42985,42986],{"class":35,"line":2255},[33,42987,36312],{"class":2487},[33,42989,42990,42992,42994],{"class":35,"line":3992},[33,42991,40],{"class":39},[33,42993,36319],{"class":43},[33,42995,36322],{"class":47},[33,42997,42998],{"class":35,"line":4009},[33,42999,36327],{"class":2487},[33,43001,43002,43004,43006,43008,43010,43012,43014],{"class":35,"line":4014},[33,43003,33468],{"class":47},[33,43005,57],{"class":39},[33,43007,33475],{"class":60},[33,43009,3966],{"class":39},[33,43011,33480],{"class":47},[33,43013,3963],{"class":39},[33,43015,36344],{"class":60},[33,43017,43018,43020,43022],{"class":35,"line":4019},[33,43019,33520],{"class":47},[33,43021,57],{"class":39},[33,43023,34516],{"class":47},[33,43025,43026],{"class":35,"line":4024},[33,43027,100],{"emptyLinePlaceholder":99},[33,43029,43030],{"class":35,"line":4038},[33,43031,36361],{"class":2487},[33,43033,43034,43036,43038],{"class":35,"line":4043},[33,43035,36366],{"class":47},[33,43037,57],{"class":39},[33,43039,34569],{"class":72},[33,43041,43042,43044,43046],{"class":35,"line":4834},[33,43043,36375],{"class":47},[33,43045,57],{"class":39},[33,43047,5342],{"class":72},[33,43049,43050],{"class":35,"line":4848},[33,43051,100],{"emptyLinePlaceholder":99},[33,43053,43054],{"class":35,"line":4856},[33,43055,36388],{"class":2487},[33,43057,43058],{"class":35,"line":4861},[33,43059,36393],{"class":2487},[33,43061,43062],{"class":35,"line":4867},[33,43063,36398],{"class":2487},[33,43065,43066,43068],{"class":35,"line":4873},[33,43067,36403],{"class":39},[33,43069,35110],{"class":47},[33,43071,43072],{"class":35,"line":4878},[33,43073,36410],{"class":2487},[33,43075,43076,43078,43080,43082],{"class":35,"line":10194},[33,43077,5658],{"class":39},[33,43079,36417],{"class":47},[33,43081,681],{"class":39},[33,43083,36422],{"class":47},[33,43085,43086,43088,43090],{"class":35,"line":10218},[33,43087,36427],{"class":47},[33,43089,57],{"class":39},[33,43091,36432],{"class":47},[33,43093,43094,43096,43098],{"class":35,"line":10223},[33,43095,36437],{"class":47},[33,43097,57],{"class":39},[33,43099,36442],{"class":47},[33,43101,43102],{"class":35,"line":10229},[33,43103,36447],{"class":2487},[33,43105,43106],{"class":35,"line":10256},[33,43107,35101],{"class":47},[33,43109,43110],{"class":35,"line":10261},[33,43111,36456],{"class":2487},[33,43113,43114,43116,43118],{"class":35,"line":10267},[33,43115,34886],{"class":47},[33,43117,57],{"class":39},[33,43119,36465],{"class":47},[33,43121,43122],{"class":35,"line":10279},[33,43123,36470],{"class":2487},[33,43125,43126,43128,43130,43132,43134,43136,43138],{"class":35,"line":10291},[33,43127,34903],{"class":47},[33,43129,57],{"class":39},[33,43131,34908],{"class":47},[33,43133,34911],{"class":289},[33,43135,57],{"class":39},[33,43137,720],{"class":72},[33,43139,226],{"class":47},[33,43141,43142],{"class":35,"line":10303},[33,43143,36491],{"class":2487},[33,43145,43146],{"class":35,"line":11961},[33,43147,36496],{"class":2487},[33,43149,43150],{"class":35,"line":11986},[33,43151,36501],{"class":2487},[33,43153,43154,43156,43158,43160,43162],{"class":35,"line":12009},[33,43155,36506],{"class":47},[33,43157,692],{"class":39},[33,43159,35013],{"class":47},[33,43161,5206],{"class":39},[33,43163,36515],{"class":47},[33,43165,43166],{"class":35,"line":12033},[33,43167,36520],{"class":2487},[33,43169,43170,43172,43174,43176,43178],{"class":35,"line":12038},[33,43171,36525],{"class":47},[33,43173,692],{"class":39},[33,43175,36530],{"class":47},[33,43177,2617],{"class":72},[33,43179,226],{"class":47},[33,43181,43182],{"class":35,"line":12043},[33,43183,100],{"emptyLinePlaceholder":99},[33,43185,43186],{"class":35,"line":12048},[33,43187,36543],{"class":2487},[33,43189,43190,43192,43194,43196,43198],{"class":35,"line":12057},[33,43191,36548],{"class":47},[33,43193,57],{"class":39},[33,43195,36553],{"class":47},[33,43197,3001],{"class":39},[33,43199,36558],{"class":47},[33,43201,43202],{"class":35,"line":12062},[33,43203,36563],{"class":2487},[33,43205,43206,43208,43210,43212],{"class":35,"line":12068},[33,43207,807],{"class":72},[33,43209,133],{"class":47},[33,43211,36572],{"class":60},[33,43213,36575],{"class":47},[33,43215,43216],{"class":35,"line":12089},[33,43217,100],{"emptyLinePlaceholder":99},[33,43219,43220],{"class":35,"line":12095},[33,43221,36584],{"class":2487},[33,43223,43224,43226,43228,43230,43232],{"class":35,"line":12109},[33,43225,3805],{"class":39},[33,43227,33451],{"class":72},[33,43229,5206],{"class":39},[33,43231,33456],{"class":60},[33,43233,605],{"class":47},[33,43235,43236],{"class":35,"line":12115},[33,43237,36601],{"class":2487},[33,43239,43240,43242,43244],{"class":35,"line":12142},[33,43241,33520],{"class":47},[33,43243,57],{"class":39},[33,43245,43246],{"class":47},"VGG16()\n",[33,43248,43249],{"class":35,"line":12151},[33,43250,36614],{"class":2487},[33,43252,43253],{"class":35,"line":12157},[33,43254,36619],{"class":2487},[33,43256,43257,43259,43261],{"class":35,"line":12165},[33,43258,36624],{"class":47},[33,43260,36627],{"class":60},[33,43262,551],{"class":47},[33,43264,43265],{"class":35,"line":12170},[33,43266,36634],{"class":2487},[33,43268,43269,43271,43273],{"class":35,"line":18842},[33,43270,36247],{"class":47},[33,43272,57],{"class":39},[33,43274,36643],{"class":47},[33,43276,43277],{"class":35,"line":18848},[33,43278,36648],{"class":2487},[33,43280,43281],{"class":35,"line":18871},[33,43282,36653],{"class":47},[33,43284,43285],{"class":35,"line":18877},[33,43286,100],{"emptyLinePlaceholder":99},[33,43288,43289],{"class":35,"line":18900},[33,43290,36662],{"class":2487},[33,43292,43293],{"class":35,"line":18914},[33,43294,36667],{"class":2487},[33,43296,43297,43299,43301,43303,43305,43307,43309],{"class":35,"line":18934},[33,43298,33468],{"class":47},[33,43300,57],{"class":39},[33,43302,33475],{"class":60},[33,43304,3966],{"class":39},[33,43306,33480],{"class":47},[33,43308,3963],{"class":39},[33,43310,36344],{"class":60},[33,43312,43313,43315,43317],{"class":35,"line":18940},[33,43314,33520],{"class":47},[33,43316,57],{"class":39},[33,43318,34516],{"class":47},[33,43320,43321],{"class":35,"line":18951},[33,43322,36696],{"class":2487},[33,43324,43325],{"class":35,"line":18974},[33,43326,36701],{"class":2487},[33,43328,43329,43331,43333,43335,43337,43339,43341,43343,43345,43347,43349,43351,43353,43355,43357,43359,43361,43363,43365,43367,43369,43371,43373],{"class":35,"line":18996},[33,43330,36706],{"class":47},[33,43332,57],{"class":39},[33,43334,3300],{"class":47},[33,43336,36713],{"class":60},[33,43338,2799],{"class":47},[33,43340,36718],{"class":60},[33,43342,2799],{"class":47},[33,43344,36723],{"class":60},[33,43346,2799],{"class":47},[33,43348,36728],{"class":60},[33,43350,2799],{"class":47},[33,43352,36733],{"class":60},[33,43354,2799],{"class":47},[33,43356,36738],{"class":60},[33,43358,2799],{"class":47},[33,43360,36743],{"class":60},[33,43362,2799],{"class":47},[33,43364,36748],{"class":60},[33,43366,2799],{"class":47},[33,43368,36753],{"class":60},[33,43370,2799],{"class":47},[33,43372,36758],{"class":60},[33,43374,919],{"class":47},[33,43376,43377,43379],{"class":35,"line":19001},[33,43378,36403],{"class":39},[33,43380,35110],{"class":47},[33,43382,43383],{"class":35,"line":19007},[33,43384,36771],{"class":2487},[33,43386,43387,43389,43391,43393],{"class":35,"line":19021},[33,43388,5658],{"class":39},[33,43390,36778],{"class":47},[33,43392,681],{"class":39},[33,43394,36422],{"class":47},[33,43396,43397,43399,43401],{"class":35,"line":19034},[33,43398,34836],{"class":47},[33,43400,57],{"class":39},[33,43402,34841],{"class":47},[33,43404,43405,43407,43409],{"class":35,"line":19039},[33,43406,34851],{"class":47},[33,43408,57],{"class":39},[33,43410,34856],{"class":47},[33,43412,43413],{"class":35,"line":19053},[33,43414,100],{"emptyLinePlaceholder":99},[33,43416,43417],{"class":35,"line":19058},[33,43418,36807],{"class":2487},[33,43420,43421],{"class":35,"line":19064},[33,43422,35101],{"class":47},[33,43424,43425],{"class":35,"line":19069},[33,43426,36816],{"class":2487},[33,43428,43429,43431,43433],{"class":35,"line":19083},[33,43430,34886],{"class":47},[33,43432,57],{"class":39},[33,43434,34891],{"class":47},[33,43436,43437],{"class":35,"line":19088},[33,43438,36829],{"class":2487},[33,43440,43441,43443,43445,43447,43449,43451,43453],{"class":35,"line":19093},[33,43442,34903],{"class":47},[33,43444,57],{"class":39},[33,43446,34908],{"class":47},[33,43448,34911],{"class":289},[33,43450,57],{"class":39},[33,43452,720],{"class":72},[33,43454,226],{"class":47},[33,43456,43457],{"class":35,"line":19107},[33,43458,36850],{"class":2487},[33,43460,43461,43463,43465],{"class":35,"line":19119},[33,43462,36855],{"class":47},[33,43464,57],{"class":39},[33,43466,36860],{"class":47},[33,43468,43469,43471,43473],{"class":35,"line":19124},[33,43470,36865],{"class":47},[33,43472,57],{"class":39},[33,43474,36870],{"class":47},[33,43476,43477,43479,43481,43483,43485,43487,43489,43491],{"class":35,"line":19137},[33,43478,36875],{"class":72},[33,43480,133],{"class":47},[33,43482,36880],{"class":60},[33,43484,36883],{"class":47},[33,43486,36886],{"class":60},[33,43488,2799],{"class":47},[33,43490,36891],{"class":60},[33,43492,36894],{"class":47},[631,43494,43496],{"id":43495},"_23googlenet","2.3.GoogLeNet",[24236,43498,43500],{"id":43499},"_231原理","2.3.1.原理",[328,43502,43503],{},[331,43504,43505],{},"网络结构",[19,43507,43508],{},[3736,43509],{"alt":28,"src":43510},"\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,43512,43513],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43515,43516],{},[3736,43517],{"alt":28,"src":43518},"\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,43520,43521],{},[3736,43522],{"alt":28,"src":43523},"\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,43525,43526],{},[3736,43527],{"alt":28,"src":43528},"\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",[328,43530,43531],{"start":51},[331,43532,43533],{},"1x1卷积的优点",[19,43535,43536],{},[3736,43537],{"alt":28,"src":43538},"\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",[328,43540,43541],{"start":64},[331,43542,43543],{},"全局平均池化层优点",[19,43545,43546],{},[3736,43547],{"alt":28,"src":43548},"\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,43550,43551],{},[3736,43552],{"alt":28,"src":43553},"\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",[328,43555,43556],{"start":76},[331,43557,43558],{},"参数详细描述",[19,43560,43561],{},[3736,43562],{"alt":28,"src":43563},"\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,43565,43566],{},[3736,43567],{"alt":28,"src":43568},"\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,43570,43571],{},[3736,43572],{"alt":28,"src":43573},"\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,43575,43576],{},[3736,43577],{"alt":28,"src":43578},"\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,43580,43581],{},[3736,43582],{"alt":28,"src":43583},"\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,43585,43586],{},[3736,43587],{"alt":28,"src":43588},"\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,43590,43591],{},[3736,43592],{"alt":28,"src":43593},"\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,43595,43596],{},[3736,43597],{"alt":28,"src":43598},"\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,43600,43601],{},[3736,43602],{"alt":28,"src":43603},"\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,43605,43606],{},[3736,43607],{"alt":28,"src":43608},"\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,43610,43611],{},[3736,43612],{"alt":28,"src":43613},"\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,43615,43616],{},[3736,43617],{"alt":28,"src":43618},"\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,43620,43621],{},[3736,43622],{"alt":28,"src":43623},"\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,43625,43626],{},[3736,43627],{"alt":28,"src":43628},"\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,43630,43631],{},[3736,43632],{"alt":28,"src":43633},"\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,43635,43636],{},[3736,43637],{"alt":28,"src":43638},"\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,43640,43641],{},[3736,43642],{"alt":28,"src":43643},"\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,43645,43646],{},[3736,43647],{"alt":28,"src":43648},"\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,43650,43651],{},[3736,43652],{"alt":28,"src":43653},"\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,43655,43656],{},[3736,43657],{"alt":28,"src":43658},"\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,43660,43661],{},[3736,43662],{"alt":28,"src":43663},"\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",[24236,43665,43667],{"id":43666},"_232代码实现","2.3.2.代码实现",[328,43669,43670],{},[331,43671,32944],{},[19,43673,43674],{},"根据原理一步一步搭建即可",[23,43676,43678],{"className":25,"code":43677,"language":27,"meta":28,"style":28},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[30,43679,43680,43686,43696,43706,43710,43727,43736,43751,43761,43766,43799,43804,43841,43888,43893,43929,43976,43981,43986,44021,44053,44057,44065,44081,44105,44130,44151,44156,44171,44175,44179,44184,44201,44206,44215,44230,44241,44285,44289,44317,44321,44332,44360,44364,44401,44405,44433,44437,44448,44484,44516,44544,44548,44559,44593,44625,44657,44690,44724,44752,44756,44767,44800,44832,44846,44850,44863,44867,44872,44884,44892,44914,44919,44924,44929,44934,44939,44944,44958,44966,44975,44988,45003,45012,45016,45024,45035,45046,45057,45068,45079,45085,45089,45094,45106,45126,45135],{"__ignoreMap":28},[33,43681,43682,43684],{"class":35,"line":36},[33,43683,32627],{"class":39},[33,43685,32630],{"class":47},[33,43687,43688,43690,43692,43694],{"class":35,"line":51},[33,43689,32970],{"class":39},[33,43691,32973],{"class":47},[33,43693,32627],{"class":39},[33,43695,32978],{"class":47},[33,43697,43698,43700,43702,43704],{"class":35,"line":64},[33,43699,32970],{"class":39},[33,43701,32990],{"class":47},[33,43703,32627],{"class":39},[33,43705,32995],{"class":47},[33,43707,43708],{"class":35,"line":76},[33,43709,100],{"emptyLinePlaceholder":99},[33,43711,43712,43714,43717,43719,43721,43723,43725],{"class":35,"line":87},[33,43713,16934],{"class":39},[33,43715,43716],{"class":43}," Inception",[33,43718,133],{"class":47},[33,43720,33011],{"class":43},[33,43722,2975],{"class":47},[33,43724,33016],{"class":43},[33,43726,366],{"class":47},[33,43728,43729,43731,43733],{"class":35,"line":96},[33,43730,1603],{"class":39},[33,43732,33035],{"class":72},[33,43734,43735],{"class":47},"(self,in_channels,c1,c2,c3,c4):\n",[33,43737,43738,43740,43743,43745,43747,43749],{"class":35,"line":103},[33,43739,33048],{"class":72},[33,43741,43742],{"class":47},"(Inception,",[33,43744,33054],{"class":72},[33,43746,33057],{"class":47},[33,43748,33060],{"class":72},[33,43750,4235],{"class":47},[33,43752,43753,43755,43757,43759],{"class":35,"line":108},[33,43754,33076],{"class":72},[33,43756,36996],{"class":47},[33,43758,57],{"class":39},[33,43760,37001],{"class":47},[33,43762,43763],{"class":35,"line":119},[33,43764,43765],{"class":2487},"        # 路线1：定义1*1卷积\n",[33,43767,43768,43770,43773,43775,43777,43779,43781,43784,43786,43788,43791,43793,43795,43797],{"class":35,"line":128},[33,43769,33076],{"class":72},[33,43771,43772],{"class":47},".p1_1",[33,43774,57],{"class":39},[33,43776,33084],{"class":47},[33,43778,33087],{"class":289},[33,43780,57],{"class":39},[33,43782,43783],{"class":47},"in_channels,",[33,43785,33096],{"class":289},[33,43787,57],{"class":39},[33,43789,43790],{"class":47},"c1,",[33,43792,33105],{"class":289},[33,43794,57],{"class":39},[33,43796,720],{"class":72},[33,43798,226],{"class":47},[33,43800,43801],{"class":35,"line":1753},[33,43802,43803],{"class":2487},"        # 路线2：定义1*1卷积和3*3\n",[33,43805,43806,43808,43811,43813,43815,43817,43819,43821,43823,43825,43828,43830,43833,43835,43837,43839],{"class":35,"line":1763},[33,43807,33076],{"class":72},[33,43809,43810],{"class":47},".p2_1",[33,43812,57],{"class":39},[33,43814,33084],{"class":47},[33,43816,33087],{"class":289},[33,43818,57],{"class":39},[33,43820,43783],{"class":47},[33,43822,33096],{"class":289},[33,43824,57],{"class":39},[33,43826,43827],{"class":47},"c2[",[33,43829,2617],{"class":72},[33,43831,43832],{"class":47},"],",[33,43834,33105],{"class":289},[33,43836,57],{"class":39},[33,43838,720],{"class":72},[33,43840,226],{"class":47},[33,43842,43843,43845,43848,43850,43852,43854,43856,43858,43860,43862,43864,43866,43868,43870,43872,43874,43876,43878,43880,43882,43884,43886],{"class":35,"line":1775},[33,43844,33076],{"class":72},[33,43846,43847],{"class":47},".p2_2",[33,43849,57],{"class":39},[33,43851,33084],{"class":47},[33,43853,33087],{"class":289},[33,43855,57],{"class":39},[33,43857,43827],{"class":47},[33,43859,2617],{"class":72},[33,43861,43832],{"class":47},[33,43863,33096],{"class":289},[33,43865,57],{"class":39},[33,43867,43827],{"class":47},[33,43869,720],{"class":72},[33,43871,43832],{"class":47},[33,43873,33105],{"class":289},[33,43875,57],{"class":39},[33,43877,730],{"class":72},[33,43879,2799],{"class":47},[33,43881,33114],{"class":289},[33,43883,57],{"class":39},[33,43885,720],{"class":72},[33,43887,226],{"class":47},[33,43889,43890],{"class":35,"line":1780},[33,43891,43892],{"class":2487},"        # 路线3：定义1*1卷积和5*5\n",[33,43894,43895,43897,43900,43902,43904,43906,43908,43910,43912,43914,43917,43919,43921,43923,43925,43927],{"class":35,"line":1785},[33,43896,33076],{"class":72},[33,43898,43899],{"class":47},".p3_1",[33,43901,57],{"class":39},[33,43903,33084],{"class":47},[33,43905,33087],{"class":289},[33,43907,57],{"class":39},[33,43909,43783],{"class":47},[33,43911,33096],{"class":289},[33,43913,57],{"class":39},[33,43915,43916],{"class":47},"c3[",[33,43918,2617],{"class":72},[33,43920,43832],{"class":47},[33,43922,33105],{"class":289},[33,43924,57],{"class":39},[33,43926,720],{"class":72},[33,43928,226],{"class":47},[33,43930,43931,43933,43936,43938,43940,43942,43944,43946,43948,43950,43952,43954,43956,43958,43960,43962,43964,43966,43968,43970,43972,43974],{"class":35,"line":1940},[33,43932,33076],{"class":72},[33,43934,43935],{"class":47},".p3_2",[33,43937,57],{"class":39},[33,43939,33084],{"class":47},[33,43941,33087],{"class":289},[33,43943,57],{"class":39},[33,43945,43916],{"class":47},[33,43947,2617],{"class":72},[33,43949,43832],{"class":47},[33,43951,33096],{"class":289},[33,43953,57],{"class":39},[33,43955,43916],{"class":47},[33,43957,720],{"class":72},[33,43959,43832],{"class":47},[33,43961,33105],{"class":289},[33,43963,57],{"class":39},[33,43965,758],{"class":72},[33,43967,2799],{"class":47},[33,43969,33114],{"class":289},[33,43971,57],{"class":39},[33,43973,725],{"class":72},[33,43975,226],{"class":47},[33,43977,43978],{"class":35,"line":2183},[33,43979,43980],{"class":2487},"        # 路线4：定义3*3最大池化和1*1卷积\n",[33,43982,43983],{"class":35,"line":2208},[33,43984,43985],{"class":2487},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[33,43987,43988,43990,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019],{"class":35,"line":2234},[33,43989,33076],{"class":72},[33,43991,43992],{"class":47},".p4_1",[33,43994,57],{"class":39},[33,43996,37054],{"class":47},[33,43998,33105],{"class":289},[33,44000,57],{"class":39},[33,44002,730],{"class":72},[33,44004,2799],{"class":47},[33,44006,33160],{"class":289},[33,44008,57],{"class":39},[33,44010,720],{"class":72},[33,44012,2799],{"class":47},[33,44014,33114],{"class":289},[33,44016,57],{"class":39},[33,44018,720],{"class":72},[33,44020,226],{"class":47},[33,44022,44023,44025,44028,44030,44032,44034,44036,44038,44040,44042,44045,44047,44049,44051],{"class":35,"line":2239},[33,44024,33076],{"class":72},[33,44026,44027],{"class":47},".p4_2",[33,44029,57],{"class":39},[33,44031,33084],{"class":47},[33,44033,33087],{"class":289},[33,44035,57],{"class":39},[33,44037,43783],{"class":47},[33,44039,33096],{"class":289},[33,44041,57],{"class":39},[33,44043,44044],{"class":47},"c4,",[33,44046,33105],{"class":289},[33,44048,57],{"class":39},[33,44050,720],{"class":72},[33,44052,226],{"class":47},[33,44054,44055],{"class":35,"line":2247},[33,44056,100],{"emptyLinePlaceholder":99},[33,44058,44059,44061,44063],{"class":35,"line":2255},[33,44060,1603],{"class":39},[33,44062,33324],{"class":43},[33,44064,33327],{"class":47},[33,44066,44067,44070,44072,44074,44076,44078],{"class":35,"line":3992},[33,44068,44069],{"class":47},"        p1",[33,44071,57],{"class":39},[33,44073,33054],{"class":72},[33,44075,37409],{"class":47},[33,44077,33054],{"class":72},[33,44079,44080],{"class":47},".p1_1(x))\n",[33,44082,44083,44085,44087,44089,44091,44093,44096,44098,44100,44102],{"class":35,"line":4009},[33,44084,9331],{"class":47},[33,44086,57],{"class":39},[33,44088,33054],{"class":72},[33,44090,37409],{"class":47},[33,44092,33054],{"class":72},[33,44094,44095],{"class":47},".p2_2(",[33,44097,33054],{"class":72},[33,44099,37409],{"class":47},[33,44101,33054],{"class":72},[33,44103,44104],{"class":47},".p2_1(x))))\n",[33,44106,44107,44110,44112,44114,44116,44118,44121,44123,44125,44127],{"class":35,"line":4014},[33,44108,44109],{"class":47},"        p3",[33,44111,57],{"class":39},[33,44113,33054],{"class":72},[33,44115,37409],{"class":47},[33,44117,33054],{"class":72},[33,44119,44120],{"class":47},".p3_2(",[33,44122,33054],{"class":72},[33,44124,37409],{"class":47},[33,44126,33054],{"class":72},[33,44128,44129],{"class":47},".p3_1(x))))\n",[33,44131,44132,44135,44137,44139,44141,44143,44146,44148],{"class":35,"line":4019},[33,44133,44134],{"class":47},"        p4",[33,44136,57],{"class":39},[33,44138,33054],{"class":72},[33,44140,37409],{"class":47},[33,44142,33054],{"class":72},[33,44144,44145],{"class":47},".p4_2(",[33,44147,33054],{"class":72},[33,44149,44150],{"class":47},".p4_1(x)))\n",[33,44152,44153],{"class":35,"line":4024},[33,44154,44155],{"class":2487},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[33,44157,44158,44160,44163,44165,44167,44169],{"class":35,"line":4038},[33,44159,1614],{"class":39},[33,44161,44162],{"class":47}," torch.cat((p1,p2,p3,p4),",[33,44164,34911],{"class":289},[33,44166,57],{"class":39},[33,44168,720],{"class":72},[33,44170,226],{"class":47},[33,44172,44173],{"class":35,"line":4043},[33,44174,100],{"emptyLinePlaceholder":99},[33,44176,44177],{"class":35,"line":4834},[33,44178,100],{"emptyLinePlaceholder":99},[33,44180,44181],{"class":35,"line":4848},[33,44182,44183],{"class":2487},"# 搭建GoogLeNet网络\n",[33,44185,44186,44188,44191,44193,44195,44197,44199],{"class":35,"line":4856},[33,44187,16934],{"class":39},[33,44189,44190],{"class":43}," GoogLeNet",[33,44192,133],{"class":47},[33,44194,33011],{"class":43},[33,44196,2975],{"class":47},[33,44198,33016],{"class":43},[33,44200,366],{"class":47},[33,44202,44203],{"class":35,"line":4861},[33,44204,44205],{"class":2487},"    # 必须把Inception导入到里边\n",[33,44207,44208,44210,44212],{"class":35,"line":4867},[33,44209,1603],{"class":39},[33,44211,33035],{"class":72},[33,44213,44214],{"class":47},"(self,Inception):\n",[33,44216,44217,44219,44222,44224,44226,44228],{"class":35,"line":4873},[33,44218,33048],{"class":72},[33,44220,44221],{"class":47},"(GoogLeNet,",[33,44223,33054],{"class":72},[33,44225,33057],{"class":47},[33,44227,33060],{"class":72},[33,44229,4235],{"class":47},[33,44231,44232,44234,44237,44239],{"class":35,"line":4878},[33,44233,33076],{"class":72},[33,44235,44236],{"class":47},".b1",[33,44238,57],{"class":39},[33,44240,40234],{"class":47},[33,44242,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267,44269,44271,44273,44275,44277,44279,44281,44283],{"class":35,"line":10194},[33,44244,40239],{"class":47},[33,44246,33087],{"class":289},[33,44248,57],{"class":39},[33,44250,720],{"class":72},[33,44252,2799],{"class":47},[33,44254,33096],{"class":289},[33,44256,57],{"class":39},[33,44258,2629],{"class":72},[33,44260,2799],{"class":47},[33,44262,33105],{"class":289},[33,44264,57],{"class":39},[33,44266,2790],{"class":72},[33,44268,2799],{"class":47},[33,44270,33160],{"class":289},[33,44272,57],{"class":39},[33,44274,725],{"class":72},[33,44276,2799],{"class":47},[33,44278,33114],{"class":289},[33,44280,57],{"class":39},[33,44282,730],{"class":72},[33,44284,40272],{"class":47},[33,44286,44287],{"class":35,"line":10218},[33,44288,40277],{"class":47},[33,44290,44291,44293,44295,44297,44299,44301,44303,44305,44307,44309,44311,44313,44315],{"class":35,"line":10223},[33,44292,40322],{"class":47},[33,44294,33105],{"class":289},[33,44296,57],{"class":39},[33,44298,730],{"class":72},[33,44300,2799],{"class":47},[33,44302,33160],{"class":289},[33,44304,57],{"class":39},[33,44306,725],{"class":72},[33,44308,2799],{"class":47},[33,44310,33114],{"class":289},[33,44312,57],{"class":39},[33,44314,720],{"class":72},[33,44316,226],{"class":47},[33,44318,44319],{"class":35,"line":10229},[33,44320,40351],{"class":47},[33,44322,44323,44325,44328,44330],{"class":35,"line":10256},[33,44324,33076],{"class":72},[33,44326,44327],{"class":47},".b2",[33,44329,57],{"class":39},[33,44331,40234],{"class":47},[33,44333,44334,44336,44338,44340,44342,44344,44346,44348,44350,44352,44354,44356,44358],{"class":35,"line":10261},[33,44335,40239],{"class":47},[33,44337,33087],{"class":289},[33,44339,57],{"class":39},[33,44341,2629],{"class":72},[33,44343,2799],{"class":47},[33,44345,33096],{"class":289},[33,44347,57],{"class":39},[33,44349,2629],{"class":72},[33,44351,2799],{"class":47},[33,44353,33105],{"class":289},[33,44355,57],{"class":39},[33,44357,720],{"class":72},[33,44359,40272],{"class":47},[33,44361,44362],{"class":35,"line":10267},[33,44363,40277],{"class":47},[33,44365,44366,44368,44370,44372,44374,44376,44378,44380,44383,44385,44387,44389,44391,44393,44395,44397,44399],{"class":35,"line":10279},[33,44367,40239],{"class":47},[33,44369,33087],{"class":289},[33,44371,57],{"class":39},[33,44373,2629],{"class":72},[33,44375,2799],{"class":47},[33,44377,33096],{"class":289},[33,44379,57],{"class":39},[33,44381,44382],{"class":72},"192",[33,44384,2799],{"class":47},[33,44386,33105],{"class":289},[33,44388,57],{"class":39},[33,44390,730],{"class":72},[33,44392,2799],{"class":47},[33,44394,33114],{"class":289},[33,44396,57],{"class":39},[33,44398,720],{"class":72},[33,44400,40272],{"class":47},[33,44402,44403],{"class":35,"line":10291},[33,44404,40277],{"class":47},[33,44406,44407,44409,44411,44413,44415,44417,44419,44421,44423,44425,44427,44429,44431],{"class":35,"line":10303},[33,44408,40322],{"class":47},[33,44410,33105],{"class":289},[33,44412,57],{"class":39},[33,44414,730],{"class":72},[33,44416,2799],{"class":47},[33,44418,33160],{"class":289},[33,44420,57],{"class":39},[33,44422,725],{"class":72},[33,44424,2799],{"class":47},[33,44426,33114],{"class":289},[33,44428,57],{"class":39},[33,44430,720],{"class":72},[33,44432,226],{"class":47},[33,44434,44435],{"class":35,"line":11961},[33,44436,40351],{"class":47},[33,44438,44439,44441,44444,44446],{"class":35,"line":11986},[33,44440,33076],{"class":72},[33,44442,44443],{"class":47},".b3",[33,44445,57],{"class":39},[33,44447,40234],{"class":47},[33,44449,44450,44453,44455,44457,44459,44462,44464,44466,44468,44471,44473,44475,44477,44480,44482],{"class":35,"line":12009},[33,44451,44452],{"class":47},"            Inception(",[33,44454,44382],{"class":72},[33,44456,2799],{"class":47},[33,44458,2629],{"class":72},[33,44460,44461],{"class":47},",(",[33,44463,2635],{"class":72},[33,44465,2799],{"class":47},[33,44467,34297],{"class":72},[33,44469,44470],{"class":47},"),(",[33,44472,3018],{"class":72},[33,44474,2799],{"class":47},[33,44476,2623],{"class":72},[33,44478,44479],{"class":47},"),",[33,44481,2623],{"class":72},[33,44483,40272],{"class":47},[33,44485,44486,44488,44490,44492,44494,44496,44498,44500,44502,44504,44506,44508,44510,44512,44514],{"class":35,"line":12033},[33,44487,44452],{"class":47},[33,44489,37095],{"class":72},[33,44491,2799],{"class":47},[33,44493,34297],{"class":72},[33,44495,44461],{"class":47},[33,44497,34297],{"class":72},[33,44499,2799],{"class":47},[33,44501,44382],{"class":72},[33,44503,44470],{"class":47},[33,44505,2623],{"class":72},[33,44507,2799],{"class":47},[33,44509,2635],{"class":72},[33,44511,44479],{"class":47},[33,44513,2629],{"class":72},[33,44515,40272],{"class":47},[33,44517,44518,44520,44522,44524,44526,44528,44530,44532,44534,44536,44538,44540,44542],{"class":35,"line":12038},[33,44519,40322],{"class":47},[33,44521,33105],{"class":289},[33,44523,57],{"class":39},[33,44525,730],{"class":72},[33,44527,2799],{"class":47},[33,44529,33160],{"class":289},[33,44531,57],{"class":39},[33,44533,725],{"class":72},[33,44535,2799],{"class":47},[33,44537,33114],{"class":289},[33,44539,57],{"class":39},[33,44541,720],{"class":72},[33,44543,226],{"class":47},[33,44545,44546],{"class":35,"line":12043},[33,44547,40351],{"class":47},[33,44549,44550,44552,44555,44557],{"class":35,"line":12048},[33,44551,33076],{"class":72},[33,44553,44554],{"class":47},".b4",[33,44556,57],{"class":39},[33,44558,40234],{"class":47},[33,44560,44561,44563,44566,44568,44570,44572,44574,44576,44579,44581,44583,44585,44587,44589,44591],{"class":35,"line":12057},[33,44562,44452],{"class":47},[33,44564,44565],{"class":72},"480",[33,44567,2799],{"class":47},[33,44569,44382],{"class":72},[33,44571,44461],{"class":47},[33,44573,2635],{"class":72},[33,44575,2799],{"class":47},[33,44577,44578],{"class":72},"208",[33,44580,44470],{"class":47},[33,44582,3018],{"class":72},[33,44584,2799],{"class":47},[33,44586,3024],{"class":72},[33,44588,44479],{"class":47},[33,44590,2629],{"class":72},[33,44592,40272],{"class":47},[33,44594,44595,44597,44599,44601,44603,44605,44607,44609,44611,44613,44615,44617,44619,44621,44623],{"class":35,"line":12062},[33,44596,44452],{"class":47},[33,44598,40682],{"class":72},[33,44600,2799],{"class":47},[33,44602,23286],{"class":72},[33,44604,44461],{"class":47},[33,44606,3035],{"class":72},[33,44608,2799],{"class":47},[33,44610,33730],{"class":72},[33,44612,44470],{"class":47},[33,44614,3213],{"class":72},[33,44616,2799],{"class":47},[33,44618,2629],{"class":72},[33,44620,44479],{"class":47},[33,44622,2629],{"class":72},[33,44624,40272],{"class":47},[33,44626,44627,44629,44631,44633,44635,44637,44639,44641,44643,44645,44647,44649,44651,44653,44655],{"class":35,"line":12068},[33,44628,44452],{"class":47},[33,44630,40682],{"class":72},[33,44632,2799],{"class":47},[33,44634,34297],{"class":72},[33,44636,44461],{"class":47},[33,44638,34297],{"class":72},[33,44640,2799],{"class":47},[33,44642,37095],{"class":72},[33,44644,44470],{"class":47},[33,44646,3213],{"class":72},[33,44648,2799],{"class":47},[33,44650,2629],{"class":72},[33,44652,44479],{"class":47},[33,44654,2629],{"class":72},[33,44656,40272],{"class":47},[33,44658,44659,44661,44663,44665,44667,44669,44671,44673,44676,44678,44680,44682,44684,44686,44688],{"class":35,"line":12089},[33,44660,44452],{"class":47},[33,44662,40682],{"class":72},[33,44664,2799],{"class":47},[33,44666,3035],{"class":72},[33,44668,44461],{"class":47},[33,44670,34297],{"class":72},[33,44672,2799],{"class":47},[33,44674,44675],{"class":72},"288",[33,44677,44470],{"class":47},[33,44679,2623],{"class":72},[33,44681,2799],{"class":47},[33,44683,2629],{"class":72},[33,44685,44479],{"class":47},[33,44687,2629],{"class":72},[33,44689,40272],{"class":47},[33,44691,44692,44694,44697,44699,44701,44703,44705,44707,44710,44712,44714,44716,44718,44720,44722],{"class":35,"line":12095},[33,44693,44452],{"class":47},[33,44695,44696],{"class":72},"528",[33,44698,2799],{"class":47},[33,44700,37095],{"class":72},[33,44702,44461],{"class":47},[33,44704,23286],{"class":72},[33,44706,2799],{"class":47},[33,44708,44709],{"class":72},"320",[33,44711,44470],{"class":47},[33,44713,2623],{"class":72},[33,44715,2799],{"class":47},[33,44717,34297],{"class":72},[33,44719,44479],{"class":47},[33,44721,34297],{"class":72},[33,44723,40272],{"class":47},[33,44725,44726,44728,44730,44732,44734,44736,44738,44740,44742,44744,44746,44748,44750],{"class":35,"line":12109},[33,44727,40322],{"class":47},[33,44729,33105],{"class":289},[33,44731,57],{"class":39},[33,44733,730],{"class":72},[33,44735,2799],{"class":47},[33,44737,33160],{"class":289},[33,44739,57],{"class":39},[33,44741,725],{"class":72},[33,44743,2799],{"class":47},[33,44745,33114],{"class":289},[33,44747,57],{"class":39},[33,44749,720],{"class":72},[33,44751,226],{"class":47},[33,44753,44754],{"class":35,"line":12115},[33,44755,40351],{"class":47},[33,44757,44758,44760,44763,44765],{"class":35,"line":12142},[33,44759,33076],{"class":72},[33,44761,44762],{"class":47},".b5",[33,44764,57],{"class":39},[33,44766,40234],{"class":47},[33,44768,44769,44771,44774,44776,44778,44780,44782,44784,44786,44788,44790,44792,44794,44796,44798],{"class":35,"line":12151},[33,44770,44452],{"class":47},[33,44772,44773],{"class":72},"832",[33,44775,2799],{"class":47},[33,44777,37095],{"class":72},[33,44779,44461],{"class":47},[33,44781,23286],{"class":72},[33,44783,2799],{"class":47},[33,44785,44709],{"class":72},[33,44787,44470],{"class":47},[33,44789,2623],{"class":72},[33,44791,2799],{"class":47},[33,44793,34297],{"class":72},[33,44795,44479],{"class":47},[33,44797,34297],{"class":72},[33,44799,40272],{"class":47},[33,44801,44802,44804,44806,44808,44810,44812,44814,44816,44818,44820,44822,44824,44826,44828,44830],{"class":35,"line":12157},[33,44803,44452],{"class":47},[33,44805,44773],{"class":72},[33,44807,2799],{"class":47},[33,44809,37165],{"class":72},[33,44811,44461],{"class":47},[33,44813,44382],{"class":72},[33,44815,2799],{"class":47},[33,44817,37165],{"class":72},[33,44819,44470],{"class":47},[33,44821,3024],{"class":72},[33,44823,2799],{"class":47},[33,44825,34297],{"class":72},[33,44827,44479],{"class":47},[33,44829,34297],{"class":72},[33,44831,40272],{"class":47},[33,44833,44834,44837,44839,44841,44843],{"class":35,"line":12165},[33,44835,44836],{"class":47},"            nn.AdaptiveAvgPool2d((",[33,44838,720],{"class":72},[33,44840,2799],{"class":47},[33,44842,720],{"class":72},[33,44844,44845],{"class":47},")),\n",[33,44847,44848],{"class":35,"line":12170},[33,44849,41015],{"class":47},[33,44851,44852,44854,44857,44859,44861],{"class":35,"line":18842},[33,44853,41020],{"class":47},[33,44855,44856],{"class":72},"1024",[33,44858,2799],{"class":47},[33,44860,1279],{"class":72},[33,44862,226],{"class":47},[33,44864,44865],{"class":35,"line":18848},[33,44866,40351],{"class":47},[33,44868,44869],{"class":35,"line":18871},[33,44870,44871],{"class":2487},"        # 对模型参数初始化\n",[33,44873,44874,44876,44878,44880,44882],{"class":35,"line":18877},[33,44875,5658],{"class":39},[33,44877,41093],{"class":47},[33,44879,681],{"class":39},[33,44881,41098],{"class":72},[33,44883,41101],{"class":47},[33,44885,44886,44888,44890],{"class":35,"line":18900},[33,44887,6892],{"class":39},[33,44889,41113],{"class":72},[33,44891,41116],{"class":47},[33,44893,44894,44896,44899,44901,44904,44906,44908,44910,44912],{"class":35,"line":18914},[33,44895,41126],{"class":47},[33,44897,44898],{"class":289},"mode",[33,44900,57],{"class":39},[33,44902,44903],{"class":60},"'fan_out'",[33,44905,2799],{"class":47},[33,44907,41129],{"class":289},[33,44909,57],{"class":39},[33,44911,41134],{"class":60},[33,44913,226],{"class":47},[33,44915,44916],{"class":35,"line":18934},[33,44917,44918],{"class":2487},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[33,44920,44921],{"class":35,"line":18940},[33,44922,44923],{"class":2487},"                # ② mode = 'fan_out'决定使用的fan值：\n",[33,44925,44926],{"class":35,"line":18951},[33,44927,44928],{"class":2487},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[33,44930,44931],{"class":35,"line":18974},[33,44932,44933],{"class":2487},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[33,44935,44936],{"class":35,"line":18996},[33,44937,44938],{"class":2487},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[33,44940,44941],{"class":35,"line":19001},[33,44942,44943],{"class":2487},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[33,44945,44946,44948,44950,44952,44954,44956],{"class":35,"line":19007},[33,44947,41146],{"class":39},[33,44949,41149],{"class":47},[33,44951,599],{"class":39},[33,44953,41154],{"class":39},[33,44955,602],{"class":72},[33,44957,605],{"class":47},[33,44959,44960,44962,44964],{"class":35,"line":19021},[33,44961,41168],{"class":47},[33,44963,2617],{"class":72},[33,44965,226],{"class":47},[33,44967,44968,44971,44973],{"class":35,"line":19034},[33,44969,44970],{"class":39},"                elif",[33,44972,41113],{"class":72},[33,44974,41187],{"class":47},[33,44976,44977,44980,44982,44984,44986],{"class":35,"line":19039},[33,44978,44979],{"class":47},"                    nn.init.normal_(m.weight,",[33,44981,2617],{"class":72},[33,44983,2799],{"class":47},[33,44985,41209],{"class":72},[33,44987,226],{"class":47},[33,44989,44990,44993,44995,44997,44999,45001],{"class":35,"line":19053},[33,44991,44992],{"class":39},"                    if",[33,44994,41149],{"class":47},[33,44996,599],{"class":39},[33,44998,41154],{"class":39},[33,45000,602],{"class":72},[33,45002,605],{"class":47},[33,45004,45005,45008,45010],{"class":35,"line":19058},[33,45006,45007],{"class":47},"                        nn.init.constant_(m.bias,",[33,45009,2617],{"class":72},[33,45011,226],{"class":47},[33,45013,45014],{"class":35,"line":19064},[33,45015,37390],{"class":2487},[33,45017,45018,45020,45022],{"class":35,"line":19069},[33,45019,1603],{"class":39},[33,45021,33324],{"class":43},[33,45023,33327],{"class":47},[33,45025,45026,45028,45030,45032],{"class":35,"line":19083},[33,45027,33332],{"class":47},[33,45029,57],{"class":39},[33,45031,33054],{"class":72},[33,45033,45034],{"class":47},".b1(x)\n",[33,45036,45037,45039,45041,45043],{"class":35,"line":19088},[33,45038,33332],{"class":47},[33,45040,57],{"class":39},[33,45042,33054],{"class":72},[33,45044,45045],{"class":47},".b2(x)\n",[33,45047,45048,45050,45052,45054],{"class":35,"line":19093},[33,45049,33332],{"class":47},[33,45051,57],{"class":39},[33,45053,33054],{"class":72},[33,45055,45056],{"class":47},".b3(x)\n",[33,45058,45059,45061,45063,45065],{"class":35,"line":19107},[33,45060,33332],{"class":47},[33,45062,57],{"class":39},[33,45064,33054],{"class":72},[33,45066,45067],{"class":47},".b4(x)\n",[33,45069,45070,45072,45074,45076],{"class":35,"line":19119},[33,45071,33332],{"class":47},[33,45073,57],{"class":39},[33,45075,33054],{"class":72},[33,45077,45078],{"class":47},".b5(x)\n",[33,45080,45081,45083],{"class":35,"line":19124},[33,45082,1614],{"class":39},[33,45084,33440],{"class":47},[33,45086,45087],{"class":35,"line":19137},[33,45088,100],{"emptyLinePlaceholder":99},[33,45090,45091],{"class":35,"line":19142},[33,45092,45093],{"class":2487},"# 模型展示\n",[33,45095,45096,45098,45100,45102,45104],{"class":35,"line":19147},[33,45097,3805],{"class":39},[33,45099,33451],{"class":72},[33,45101,5206],{"class":39},[33,45103,33456],{"class":60},[33,45105,605],{"class":47},[33,45107,45108,45110,45112,45114,45116,45118,45120,45122,45124],{"class":35,"line":19152},[33,45109,33468],{"class":47},[33,45111,57],{"class":39},[33,45113,32685],{"class":47},[33,45115,33475],{"class":60},[33,45117,3966],{"class":39},[33,45119,33480],{"class":47},[33,45121,3963],{"class":39},[33,45123,32710],{"class":60},[33,45125,226],{"class":47},[33,45127,45128,45130,45132],{"class":35,"line":19165},[33,45129,33520],{"class":47},[33,45131,57],{"class":39},[33,45133,45134],{"class":47},"GoogLeNet(Inception).to(device)\n",[33,45136,45137,45139,45141,45143,45145,45147,45149,45151],{"class":35,"line":19170},[33,45138,193],{"class":72},[33,45140,33532],{"class":47},[33,45142,720],{"class":72},[33,45144,2799],{"class":47},[33,45146,33730],{"class":72},[33,45148,2799],{"class":47},[33,45150,33730],{"class":72},[33,45152,33545],{"class":47},[328,45154,45155],{"start":51},[331,45156,41406],{},[23,45158,45160],{"className":25,"code":45159,"language":27,"meta":28,"style":28},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[30,45161,45162,45168,45174,45184,45190,45200,45210,45220,45230,45240,45244,45255,45265,45269,45273,45277,45285,45297,45307,45323,45333,45365,45379,45389,45399,45403,45413,45427,45437,45447,45457,45463,45467,45471,45475,45479,45483,45491,45511,45515,45519,45523,45527,45531,45547,45551,45555,45563,45567,45571,45579,45583,45587,45591,45599,45603,45607,45611,45615,45623,45627,45635,45639,45647,45651,45659,45663,45671,45675,45679,45687,45691,45695,45699,45711,45735,45749,45753,45757,45761,45769,45773,45781,45785,45793,45797,45805,45809,45817,45821,45829,45833,45845,45849,45857,45861,45869,45873,45877,45881,45885,45893,45897,45913,45917,45925,45929,45933,45937,45941,45945,45949,45953,45969,45973,45985,45989,46001,46005,46017,46021,46029,46033,46041,46045,46049,46053,46059,46063,46071,46075,46091,46095,46103,46107,46123,46135,46139,46151,46155,46159,46167,46171,46175,46183,46187,46195,46199,46207,46211,46215,46257,46299,46303,46307,46323,46327,46343,46347,46351,46359,46363,46367,46379,46417,46421,46425,46433,46437,46451,46461,46467,46473,46479,46485,46489,46493,46499,46503,46507,46515,46519,46537,46541,46545,46549,46565,46569,46573,46577,46581,46585,46605,46625,46629,46633,46637,46645,46653,46657,46673,46693,46713,46717,46721,46729,46737,46741,46745,46749,46761,46765,46775,46783,46800],{"__ignoreMap":28},[33,45163,45164,45166],{"class":35,"line":36},[33,45165,32627],{"class":39},[33,45167,34051],{"class":47},[33,45169,45170,45172],{"class":35,"line":51},[33,45171,32627],{"class":39},[33,45173,34058],{"class":47},[33,45175,45176,45178,45180,45182],{"class":35,"line":64},[33,45177,32627],{"class":39},[33,45179,34069],{"class":47},[33,45181,33613],{"class":39},[33,45183,34074],{"class":47},[33,45185,45186,45188],{"class":35,"line":76},[33,45187,32627],{"class":39},[33,45189,32630],{"class":47},[33,45191,45192,45194,45196,45198],{"class":35,"line":87},[33,45193,32970],{"class":39},[33,45195,33645],{"class":47},[33,45197,32627],{"class":39},[33,45199,34091],{"class":47},[33,45201,45202,45204,45206,45208],{"class":35,"line":96},[33,45203,32970],{"class":39},[33,45205,33598],{"class":47},[33,45207,32627],{"class":39},[33,45209,33603],{"class":47},[33,45211,45212,45214,45216,45218],{"class":35,"line":103},[33,45213,32970],{"class":39},[33,45215,33628],{"class":47},[33,45217,32627],{"class":39},[33,45219,33633],{"class":47},[33,45221,45222,45224,45226,45228],{"class":35,"line":108},[33,45223,32627],{"class":39},[33,45225,33645],{"class":47},[33,45227,33613],{"class":39},[33,45229,33650],{"class":47},[33,45231,45232,45234,45236,45238],{"class":35,"line":119},[33,45233,32627],{"class":39},[33,45235,33662],{"class":47},[33,45237,33613],{"class":39},[33,45239,33667],{"class":47},[33,45241,45242],{"class":35,"line":128},[33,45243,34136],{"class":2487},[33,45245,45246,45248,45250,45252],{"class":35,"line":1753},[33,45247,32970],{"class":39},[33,45249,34143],{"class":47},[33,45251,32627],{"class":39},[33,45253,45254],{"class":47}," GoogLeNet, Inception\n",[33,45256,45257,45259,45261,45263],{"class":35,"line":1763},[33,45258,32970],{"class":39},[33,45260,32973],{"class":47},[33,45262,32627],{"class":39},[33,45264,32978],{"class":47},[33,45266,45267],{"class":35,"line":1775},[33,45268,100],{"emptyLinePlaceholder":99},[33,45270,45271],{"class":35,"line":1780},[33,45272,100],{"emptyLinePlaceholder":99},[33,45274,45275],{"class":35,"line":1785},[33,45276,34171],{"class":2487},[33,45278,45279,45281,45283],{"class":35,"line":1940},[33,45280,40],{"class":39},[33,45282,34178],{"class":43},[33,45284,48],{"class":47},[33,45286,45287,45289,45291,45293,45295],{"class":35,"line":2183},[33,45288,34185],{"class":47},[33,45290,57],{"class":39},[33,45292,33685],{"class":47},[33,45294,33693],{"class":60},[33,45296,33696],{"class":47},[33,45298,45299,45301,45303,45305],{"class":35,"line":2208},[33,45300,34198],{"class":289},[33,45302,57],{"class":39},[33,45304,1190],{"class":72},[33,45306,33696],{"class":47},[33,45308,45309,45311,45313,45315,45317,45319,45321],{"class":35,"line":2234},[33,45310,34209],{"class":289},[33,45312,57],{"class":39},[33,45314,33722],{"class":47},[33,45316,33725],{"class":289},[33,45318,57],{"class":39},[33,45320,37674],{"class":72},[33,45322,33733],{"class":47},[33,45324,45325,45327,45329,45331],{"class":35,"line":2239},[33,45326,34226],{"class":289},[33,45328,57],{"class":39},[33,45330,1190],{"class":72},[33,45332,226],{"class":47},[33,45334,45335,45337,45339,45341,45343,45345,45347,45349,45351,45353,45355,45357,45359,45361,45363],{"class":35,"line":2247},[33,45336,34237],{"class":47},[33,45338,57],{"class":39},[33,45340,34242],{"class":47},[33,45342,34245],{"class":72},[33,45344,133],{"class":47},[33,45346,34250],{"class":72},[33,45348,657],{"class":39},[33,45350,9604],{"class":72},[33,45352,34257],{"class":47},[33,45354,34245],{"class":72},[33,45356,133],{"class":47},[33,45358,34264],{"class":72},[33,45360,657],{"class":39},[33,45362,9604],{"class":72},[33,45364,34271],{"class":47},[33,45366,45367,45369,45371,45373,45375,45377],{"class":35,"line":2255},[33,45368,34276],{"class":47},[33,45370,57],{"class":39},[33,45372,34281],{"class":47},[33,45374,33766],{"class":289},[33,45376,57],{"class":39},[33,45378,33771],{"class":47},[33,45380,45381,45383,45385,45387],{"class":35,"line":3992},[33,45382,34292],{"class":289},[33,45384,57],{"class":39},[33,45386,2623],{"class":72},[33,45388,33696],{"class":47},[33,45390,45391,45393,45395,45397],{"class":35,"line":4009},[33,45392,34304],{"class":289},[33,45394,57],{"class":39},[33,45396,1190],{"class":72},[33,45398,33696],{"class":47},[33,45400,45401],{"class":35,"line":4014},[33,45402,34315],{"class":2487},[33,45404,45405,45407,45409,45411],{"class":35,"line":4019},[33,45406,34320],{"class":289},[33,45408,57],{"class":39},[33,45410,2816],{"class":72},[33,45412,226],{"class":47},[33,45414,45415,45417,45419,45421,45423,45425],{"class":35,"line":4024},[33,45416,34331],{"class":47},[33,45418,57],{"class":39},[33,45420,33763],{"class":47},[33,45422,33766],{"class":289},[33,45424,57],{"class":39},[33,45426,34342],{"class":47},[33,45428,45429,45431,45433,45435],{"class":35,"line":4038},[33,45430,34347],{"class":289},[33,45432,57],{"class":39},[33,45434,2623],{"class":72},[33,45436,33696],{"class":47},[33,45438,45439,45441,45443,45445],{"class":35,"line":4043},[33,45440,34358],{"class":289},[33,45442,57],{"class":39},[33,45444,1190],{"class":72},[33,45446,33696],{"class":47},[33,45448,45449,45451,45453,45455],{"class":35,"line":4834},[33,45450,34369],{"class":289},[33,45452,57],{"class":39},[33,45454,2816],{"class":72},[33,45456,226],{"class":47},[33,45458,45459,45461],{"class":35,"line":4848},[33,45460,90],{"class":39},[33,45462,34382],{"class":47},[33,45464,45465],{"class":35,"line":4856},[33,45466,100],{"emptyLinePlaceholder":99},[33,45468,45469],{"class":35,"line":4861},[33,45470,34391],{"class":2487},[33,45472,45473],{"class":35,"line":4867},[33,45474,34396],{"class":2487},[33,45476,45477],{"class":35,"line":4873},[33,45478,100],{"emptyLinePlaceholder":99},[33,45480,45481],{"class":35,"line":4878},[33,45482,34405],{"class":2487},[33,45484,45485,45487,45489],{"class":35,"line":10194},[33,45486,40],{"class":39},[33,45488,34412],{"class":43},[33,45490,34415],{"class":47},[33,45492,45493,45495,45497,45499,45501,45503,45505,45507,45509],{"class":35,"line":10218},[33,45494,33468],{"class":47},[33,45496,57],{"class":39},[33,45498,32685],{"class":47},[33,45500,33475],{"class":60},[33,45502,3966],{"class":39},[33,45504,33480],{"class":47},[33,45506,3963],{"class":39},[33,45508,34434],{"class":60},[33,45510,226],{"class":47},[33,45512,45513],{"class":35,"line":10223},[33,45514,100],{"emptyLinePlaceholder":99},[33,45516,45517],{"class":35,"line":10229},[33,45518,100],{"emptyLinePlaceholder":99},[33,45520,45521],{"class":35,"line":10256},[33,45522,34449],{"class":2487},[33,45524,45525],{"class":35,"line":10261},[33,45526,34454],{"class":2487},[33,45528,45529],{"class":35,"line":10267},[33,45530,34459],{"class":2487},[33,45532,45533,45535,45537,45539,45541,45543,45545],{"class":35,"line":10279},[33,45534,34464],{"class":47},[33,45536,57],{"class":39},[33,45538,34469],{"class":47},[33,45540,34472],{"class":289},[33,45542,57],{"class":39},[33,45544,34477],{"class":72},[33,45546,226],{"class":47},[33,45548,45549],{"class":35,"line":10291},[33,45550,100],{"emptyLinePlaceholder":99},[33,45552,45553],{"class":35,"line":10303},[33,45554,34488],{"class":2487},[33,45556,45557,45559,45561],{"class":35,"line":11961},[33,45558,34493],{"class":47},[33,45560,57],{"class":39},[33,45562,34498],{"class":47},[33,45564,45565],{"class":35,"line":11986},[33,45566,100],{"emptyLinePlaceholder":99},[33,45568,45569],{"class":35,"line":12009},[33,45570,34507],{"class":2487},[33,45572,45573,45575,45577],{"class":35,"line":12033},[33,45574,33520],{"class":47},[33,45576,57],{"class":39},[33,45578,34516],{"class":47},[33,45580,45581],{"class":35,"line":12038},[33,45582,34521],{"class":2487},[33,45584,45585],{"class":35,"line":12043},[33,45586,34526],{"class":2487},[33,45588,45589],{"class":35,"line":12048},[33,45590,34531],{"class":2487},[33,45592,45593,45595,45597],{"class":35,"line":12057},[33,45594,34536],{"class":47},[33,45596,57],{"class":39},[33,45598,34541],{"class":47},[33,45600,45601],{"class":35,"line":12062},[33,45602,100],{"emptyLinePlaceholder":99},[33,45604,45605],{"class":35,"line":12068},[33,45606,100],{"emptyLinePlaceholder":99},[33,45608,45609],{"class":35,"line":12089},[33,45610,34554],{"class":2487},[33,45612,45613],{"class":35,"line":12095},[33,45614,34559],{"class":2487},[33,45616,45617,45619,45621],{"class":35,"line":12109},[33,45618,34564],{"class":47},[33,45620,57],{"class":39},[33,45622,34569],{"class":72},[33,45624,45625],{"class":35,"line":12115},[33,45626,34574],{"class":2487},[33,45628,45629,45631,45633],{"class":35,"line":12142},[33,45630,34579],{"class":47},[33,45632,57],{"class":39},[33,45634,34584],{"class":47},[33,45636,45637],{"class":35,"line":12151},[33,45638,34589],{"class":2487},[33,45640,45641,45643,45645],{"class":35,"line":12157},[33,45642,34594],{"class":47},[33,45644,57],{"class":39},[33,45646,34584],{"class":47},[33,45648,45649],{"class":35,"line":12165},[33,45650,34603],{"class":2487},[33,45652,45653,45655,45657],{"class":35,"line":12170},[33,45654,34608],{"class":47},[33,45656,57],{"class":39},[33,45658,34584],{"class":47},[33,45660,45661],{"class":35,"line":18842},[33,45662,34617],{"class":2487},[33,45664,45665,45667,45669],{"class":35,"line":18848},[33,45666,34622],{"class":47},[33,45668,57],{"class":39},[33,45670,34584],{"class":47},[33,45672,45673],{"class":35,"line":18871},[33,45674,100],{"emptyLinePlaceholder":99},[33,45676,45677],{"class":35,"line":18877},[33,45678,34635],{"class":2487},[33,45680,45681,45683,45685],{"class":35,"line":18900},[33,45682,34640],{"class":47},[33,45684,57],{"class":39},[33,45686,34645],{"class":47},[33,45688,45689],{"class":35,"line":18914},[33,45690,100],{"emptyLinePlaceholder":99},[33,45692,45693],{"class":35,"line":18934},[33,45694,100],{"emptyLinePlaceholder":99},[33,45696,45697],{"class":35,"line":18940},[33,45698,34658],{"class":2487},[33,45700,45701,45703,45705,45707,45709],{"class":35,"line":18951},[33,45702,675],{"class":39},[33,45704,34665],{"class":47},[33,45706,681],{"class":39},[33,45708,34670],{"class":72},[33,45710,34673],{"class":47},[33,45712,45713,45715,45717,45719,45721,45723,45725,45727,45729,45731,45733],{"class":35,"line":18974},[33,45714,807],{"class":72},[33,45716,133],{"class":47},[33,45718,34682],{"class":60},[33,45720,34685],{"class":72},[33,45722,3001],{"class":60},[33,45724,34685],{"class":72},[33,45726,397],{"class":60},[33,45728,34694],{"class":47},[33,45730,2949],{"class":39},[33,45732,720],{"class":72},[33,45734,551],{"class":47},[33,45736,45737,45739,45741,45743,45745,45747],{"class":35,"line":18996},[33,45738,807],{"class":72},[33,45740,133],{"class":47},[33,45742,34709],{"class":60},[33,45744,657],{"class":39},[33,45746,1279],{"class":72},[33,45748,226],{"class":47},[33,45750,45751],{"class":35,"line":19001},[33,45752,100],{"emptyLinePlaceholder":99},[33,45754,45755],{"class":35,"line":19007},[33,45756,34724],{"class":2487},[33,45758,45759],{"class":35,"line":19021},[33,45760,34729],{"class":2487},[33,45762,45763,45765,45767],{"class":35,"line":19034},[33,45764,34734],{"class":47},[33,45766,57],{"class":39},[33,45768,34569],{"class":72},[33,45770,45771],{"class":35,"line":19039},[33,45772,34743],{"class":2487},[33,45774,45775,45777,45779],{"class":35,"line":19053},[33,45776,34748],{"class":47},[33,45778,57],{"class":39},[33,45780,5342],{"class":72},[33,45782,45783],{"class":35,"line":19058},[33,45784,34757],{"class":2487},[33,45786,45787,45789,45791],{"class":35,"line":19064},[33,45788,34762],{"class":47},[33,45790,57],{"class":39},[33,45792,34569],{"class":72},[33,45794,45795],{"class":35,"line":19069},[33,45796,34771],{"class":2487},[33,45798,45799,45801,45803],{"class":35,"line":19083},[33,45800,34776],{"class":47},[33,45802,57],{"class":39},[33,45804,5342],{"class":72},[33,45806,45807],{"class":35,"line":19088},[33,45808,34785],{"class":2487},[33,45810,45811,45813,45815],{"class":35,"line":19093},[33,45812,34790],{"class":47},[33,45814,57],{"class":39},[33,45816,5342],{"class":72},[33,45818,45819],{"class":35,"line":19107},[33,45820,34799],{"class":2487},[33,45822,45823,45825,45827],{"class":35,"line":19119},[33,45824,34804],{"class":47},[33,45826,57],{"class":39},[33,45828,5342],{"class":72},[33,45830,45831],{"class":35,"line":19124},[33,45832,34813],{"class":2487},[33,45834,45835,45837,45839,45841,45843],{"class":35,"line":19137},[33,45836,5658],{"class":39},[33,45838,33830],{"class":47},[33,45840,681],{"class":39},[33,45842,33835],{"class":72},[33,45844,34826],{"class":47},[33,45846,45847],{"class":35,"line":19142},[33,45848,34831],{"class":2487},[33,45850,45851,45853,45855],{"class":35,"line":19147},[33,45852,34836],{"class":47},[33,45854,57],{"class":39},[33,45856,34841],{"class":47},[33,45858,45859],{"class":35,"line":19152},[33,45860,34846],{"class":2487},[33,45862,45863,45865,45867],{"class":35,"line":19165},[33,45864,34851],{"class":47},[33,45866,57],{"class":39},[33,45868,34856],{"class":47},[33,45870,45871],{"class":35,"line":19170},[33,45872,34862],{"class":2487},[33,45874,45875],{"class":35,"line":34859},[33,45876,34868],{"class":47},[33,45878,45879],{"class":35,"line":34865},[33,45880,34874],{"class":2487},[33,45882,45883],{"class":35,"line":34871},[33,45884,34880],{"class":2487},[33,45886,45887,45889,45891],{"class":35,"line":34877},[33,45888,34886],{"class":47},[33,45890,57],{"class":39},[33,45892,34891],{"class":47},[33,45894,45895],{"class":35,"line":34883},[33,45896,34897],{"class":2487},[33,45898,45899,45901,45903,45905,45907,45909,45911],{"class":35,"line":34894},[33,45900,34903],{"class":47},[33,45902,57],{"class":39},[33,45904,34908],{"class":47},[33,45906,34911],{"class":289},[33,45908,57],{"class":39},[33,45910,720],{"class":72},[33,45912,226],{"class":47},[33,45914,45915],{"class":35,"line":34900},[33,45916,34923],{"class":2487},[33,45918,45919,45921,45923],{"class":35,"line":34920},[33,45920,34929],{"class":47},[33,45922,57],{"class":39},[33,45924,34934],{"class":47},[33,45926,45927],{"class":35,"line":34926},[33,45928,34940],{"class":2487},[33,45930,45931],{"class":35,"line":34937},[33,45932,34946],{"class":47},[33,45934,45935],{"class":35,"line":34943},[33,45936,34952],{"class":2487},[33,45938,45939],{"class":35,"line":34949},[33,45940,34958],{"class":47},[33,45942,45943],{"class":35,"line":34955},[33,45944,34964],{"class":2487},[33,45946,45947],{"class":35,"line":34961},[33,45948,34970],{"class":47},[33,45950,45951],{"class":35,"line":34967},[33,45952,34976],{"class":2487},[33,45954,45955,45957,45959,45961,45963,45965,45967],{"class":35,"line":34973},[33,45956,34982],{"class":47},[33,45958,692],{"class":39},[33,45960,34987],{"class":47},[33,45962,657],{"class":39},[33,45964,34992],{"class":47},[33,45966,2617],{"class":72},[33,45968,226],{"class":47},[33,45970,45971],{"class":35,"line":34979},[33,45972,35002],{"class":2487},[33,45974,45975,45977,45979,45981,45983],{"class":35,"line":34999},[33,45976,35008],{"class":47},[33,45978,692],{"class":39},[33,45980,35013],{"class":47},[33,45982,5206],{"class":39},[33,45984,35018],{"class":47},[33,45986,45987],{"class":35,"line":35005},[33,45988,35024],{"class":2487},[33,45990,45991,45993,45995,45997,45999],{"class":35,"line":35021},[33,45992,35030],{"class":47},[33,45994,692],{"class":39},[33,45996,34992],{"class":47},[33,45998,2617],{"class":72},[33,46000,226],{"class":47},[33,46002,46003],{"class":35,"line":35027},[33,46004,35044],{"class":2487},[33,46006,46007,46009,46011,46013,46015],{"class":35,"line":35041},[33,46008,5658],{"class":39},[33,46010,35052],{"class":47},[33,46012,681],{"class":39},[33,46014,33835],{"class":72},[33,46016,35059],{"class":47},[33,46018,46019],{"class":35,"line":35047},[33,46020,35065],{"class":2487},[33,46022,46023,46025,46027],{"class":35,"line":35062},[33,46024,34836],{"class":47},[33,46026,57],{"class":39},[33,46028,34841],{"class":47},[33,46030,46031],{"class":35,"line":35068},[33,46032,35080],{"class":2487},[33,46034,46035,46037,46039],{"class":35,"line":35077},[33,46036,34851],{"class":47},[33,46038,57],{"class":39},[33,46040,34856],{"class":47},[33,46042,46043],{"class":35,"line":35083},[33,46044,35095],{"class":2487},[33,46046,46047],{"class":35,"line":35092},[33,46048,35101],{"class":47},[33,46050,46051],{"class":35,"line":35098},[33,46052,38581],{"class":2487},[33,46054,46055,46057],{"class":35,"line":35104},[33,46056,35107],{"class":39},[33,46058,35110],{"class":47},[33,46060,46061],{"class":35,"line":35113},[33,46062,35116],{"class":2487},[33,46064,46065,46067,46069],{"class":35,"line":35119},[33,46066,38596],{"class":47},[33,46068,57],{"class":39},[33,46070,34891],{"class":47},[33,46072,46073],{"class":35,"line":35130},[33,46074,35133],{"class":2487},[33,46076,46077,46079,46081,46083,46085,46087,46089],{"class":35,"line":35136},[33,46078,38609],{"class":47},[33,46080,57],{"class":39},[33,46082,34908],{"class":47},[33,46084,34911],{"class":289},[33,46086,57],{"class":39},[33,46088,720],{"class":72},[33,46090,226],{"class":47},[33,46092,46093],{"class":35,"line":35155},[33,46094,35158],{"class":2487},[33,46096,46097,46099,46101],{"class":35,"line":35161},[33,46098,38630],{"class":47},[33,46100,57],{"class":39},[33,46102,34934],{"class":47},[33,46104,46105],{"class":35,"line":35172},[33,46106,35175],{"class":2487},[33,46108,46109,46111,46113,46115,46117,46119,46121],{"class":35,"line":35178},[33,46110,38643],{"class":47},[33,46112,692],{"class":39},[33,46114,38648],{"class":47},[33,46116,657],{"class":39},[33,46118,34992],{"class":47},[33,46120,2617],{"class":72},[33,46122,226],{"class":47},[33,46124,46125,46127,46129,46131,46133],{"class":35,"line":35198},[33,46126,38661],{"class":47},[33,46128,692],{"class":39},[33,46130,35013],{"class":47},[33,46132,5206],{"class":39},[33,46134,35018],{"class":47},[33,46136,46137],{"class":35,"line":35214},[33,46138,38674],{"class":2487},[33,46140,46141,46143,46145,46147,46149],{"class":35,"line":35220},[33,46142,38679],{"class":47},[33,46144,692],{"class":39},[33,46146,34992],{"class":47},[33,46148,2617],{"class":72},[33,46150,226],{"class":47},[33,46152,46153],{"class":35,"line":35234},[33,46154,35237],{"class":2487},[33,46156,46157],{"class":35,"line":35240},[33,46158,35243],{"class":2487},[33,46160,46161,46163,46165],{"class":35,"line":35246},[33,46162,35249],{"class":47},[33,46164,3001],{"class":39},[33,46166,35254],{"class":47},[33,46168,46169],{"class":35,"line":35257},[33,46170,35260],{"class":2487},[33,46172,46173],{"class":35,"line":35263},[33,46174,35266],{"class":2487},[33,46176,46177,46179,46181],{"class":35,"line":35269},[33,46178,35272],{"class":47},[33,46180,3001],{"class":39},[33,46182,35254],{"class":47},[33,46184,46185],{"class":35,"line":35279},[33,46186,35282],{"class":2487},[33,46188,46189,46191,46193],{"class":35,"line":35285},[33,46190,35288],{"class":47},[33,46192,3001],{"class":39},[33,46194,35293],{"class":47},[33,46196,46197],{"class":35,"line":35296},[33,46198,35299],{"class":2487},[33,46200,46201,46203,46205],{"class":35,"line":35302},[33,46202,35305],{"class":47},[33,46204,3001],{"class":39},[33,46206,35293],{"class":47},[33,46208,46209],{"class":35,"line":35312},[33,46210,100],{"emptyLinePlaceholder":99},[33,46212,46213],{"class":35,"line":35317},[33,46214,35320],{"class":2487},[33,46216,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253,46255],{"class":35,"line":35323},[33,46218,807],{"class":72},[33,46220,133],{"class":47},[33,46222,5847],{"class":60},[33,46224,34685],{"class":72},[33,46226,35334],{"class":60},[33,46228,204],{"class":72},[33,46230,35339],{"class":39},[33,46232,210],{"class":72},[33,46234,35344],{"class":60},[33,46236,204],{"class":72},[33,46238,35339],{"class":39},[33,46240,210],{"class":72},[33,46242,5847],{"class":60},[33,46244,35355],{"class":47},[33,46246,2949],{"class":39},[33,46248,720],{"class":72},[33,46250,35362],{"class":47},[33,46252,2949],{"class":39},[33,46254,720],{"class":72},[33,46256,35369],{"class":47},[33,46258,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297],{"class":35,"line":35372},[33,46260,807],{"class":72},[33,46262,133],{"class":47},[33,46264,5847],{"class":60},[33,46266,34685],{"class":72},[33,46268,35383],{"class":60},[33,46270,204],{"class":72},[33,46272,35339],{"class":39},[33,46274,210],{"class":72},[33,46276,35392],{"class":60},[33,46278,204],{"class":72},[33,46280,35339],{"class":39},[33,46282,210],{"class":72},[33,46284,5847],{"class":60},[33,46286,35403],{"class":47},[33,46288,2949],{"class":39},[33,46290,720],{"class":72},[33,46292,35410],{"class":47},[33,46294,2949],{"class":39},[33,46296,720],{"class":72},[33,46298,35369],{"class":47},[33,46300,46301],{"class":35,"line":35419},[33,46302,100],{"emptyLinePlaceholder":99},[33,46304,46305],{"class":35,"line":35424},[33,46306,35427],{"class":2487},[33,46308,46309,46311,46313,46315,46317,46319,46321],{"class":35,"line":35430},[33,46310,2130],{"class":39},[33,46312,35435],{"class":47},[33,46314,2949],{"class":39},[33,46316,720],{"class":72},[33,46318,3348],{"class":47},[33,46320,3367],{"class":39},[33,46322,35446],{"class":47},[33,46324,46325],{"class":35,"line":35449},[33,46326,35452],{"class":2487},[33,46328,46329,46331,46333,46335,46337,46339,46341],{"class":35,"line":35455},[33,46330,35458],{"class":47},[33,46332,2471],{"class":72},[33,46334,57],{"class":39},[33,46336,35465],{"class":47},[33,46338,2949],{"class":39},[33,46340,720],{"class":72},[33,46342,919],{"class":47},[33,46344,46345],{"class":35,"line":35474},[33,46346,35477],{"class":2487},[33,46348,46349],{"class":35,"line":35480},[33,46350,35483],{"class":2487},[33,46352,46353,46355,46357],{"class":35,"line":35486},[33,46354,35489],{"class":47},[33,46356,57],{"class":39},[33,46358,34541],{"class":47},[33,46360,46361],{"class":35,"line":35496},[33,46362,100],{"emptyLinePlaceholder":99},[33,46364,46365],{"class":35,"line":35501},[33,46366,35504],{"class":2487},[33,46368,46369,46371,46373,46375,46377],{"class":35,"line":35507},[33,46370,35510],{"class":47},[33,46372,57],{"class":39},[33,46374,35515],{"class":47},[33,46376,2949],{"class":39},[33,46378,35520],{"class":47},[33,46380,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415],{"class":35,"line":35523},[33,46382,807],{"class":72},[33,46384,133],{"class":47},[33,46386,35530],{"class":60},[33,46388,204],{"class":72},[33,46390,35535],{"class":39},[33,46392,210],{"class":72},[33,46394,2961],{"class":60},[33,46396,204],{"class":72},[33,46398,35535],{"class":39},[33,46400,210],{"class":72},[33,46402,35548],{"class":60},[33,46404,35551],{"class":47},[33,46406,35554],{"class":39},[33,46408,3316],{"class":72},[33,46410,35559],{"class":47},[33,46412,1429],{"class":39},[33,46414,3316],{"class":72},[33,46416,551],{"class":47},[33,46418,46419],{"class":35,"line":35568},[33,46420,38958],{"class":2487},[33,46422,46423],{"class":35,"line":35574},[33,46424,38963],{"class":2487},[33,46426,46427,46429,46431],{"class":35,"line":35580},[33,46428,38968],{"class":47},[33,46430,35592],{"class":60},[33,46432,226],{"class":47},[33,46434,46435],{"class":35,"line":35586},[33,46436,35612],{"class":2487},[33,46438,46439,46441,46443,46445,46447,46449],{"class":35,"line":35597},[33,46440,35618],{"class":47},[33,46442,57],{"class":39},[33,46444,35623],{"class":47},[33,46446,35626],{"class":289},[33,46448,57],{"class":39},[33,46450,3820],{"class":47},[33,46452,46453,46455,46457,46459],{"class":35,"line":35603},[33,46454,35636],{"class":60},[33,46456,387],{"class":47},[33,46458,35641],{"class":72},[33,46460,35644],{"class":47},[33,46462,46463,46465],{"class":35,"line":35609},[33,46464,35650],{"class":60},[33,46466,35653],{"class":47},[33,46468,46469,46471],{"class":35,"line":35615},[33,46470,35659],{"class":60},[33,46472,35662],{"class":47},[33,46474,46475,46477],{"class":35,"line":35633},[33,46476,35668],{"class":60},[33,46478,35671],{"class":47},[33,46480,46481,46483],{"class":35,"line":35647},[33,46482,35677],{"class":60},[33,46484,35680],{"class":47},[33,46486,46487],{"class":35,"line":35656},[33,46488,35686],{"class":47},[33,46490,46491],{"class":35,"line":35665},[33,46492,35692],{"class":2487},[33,46494,46495,46497],{"class":35,"line":35674},[33,46496,90],{"class":39},[33,46498,35700],{"class":47},[33,46500,46501],{"class":35,"line":35683},[33,46502,100],{"emptyLinePlaceholder":99},[33,46504,46505],{"class":35,"line":35689},[33,46506,35711],{"class":2487},[33,46508,46509,46511,46513],{"class":35,"line":35695},[33,46510,40],{"class":39},[33,46512,35719],{"class":43},[33,46514,35722],{"class":47},[33,46516,46517],{"class":35,"line":35703},[33,46518,35728],{"class":2487},[33,46520,46521,46523,46525,46527,46529,46531,46533,46535],{"class":35,"line":35708},[33,46522,35734],{"class":47},[33,46524,33922],{"class":289},[33,46526,57],{"class":39},[33,46528,133],{"class":47},[33,46530,2915],{"class":72},[33,46532,2799],{"class":47},[33,46534,753],{"class":72},[33,46536,551],{"class":47},[33,46538,46539],{"class":35,"line":35714},[33,46540,35754],{"class":2487},[33,46542,46543],{"class":35,"line":35725},[33,46544,35760],{"class":2487},[33,46546,46547],{"class":35,"line":35731},[33,46548,35766],{"class":2487},[33,46550,46551,46553,46555,46557,46559,46561,46563],{"class":35,"line":35751},[33,46552,33956],{"class":47},[33,46554,720],{"class":72},[33,46556,2799],{"class":47},[33,46558,725],{"class":72},[33,46560,2799],{"class":47},[33,46562,720],{"class":72},[33,46564,226],{"class":47},[33,46566,46567],{"class":35,"line":35757},[33,46568,35789],{"class":2487},[33,46570,46571],{"class":35,"line":35763},[33,46572,35795],{"class":2487},[33,46574,46575],{"class":35,"line":35769},[33,46576,35801],{"class":2487},[33,46578,46579],{"class":35,"line":35786},[33,46580,35807],{"class":2487},[33,46582,46583],{"class":35,"line":35792},[33,46584,35813],{"class":2487},[33,46586,46587,46589,46591,46593,46595,46597,46599,46601,46603],{"class":35,"line":35798},[33,46588,35819],{"class":47},[33,46590,35822],{"class":60},[33,46592,35825],{"class":47},[33,46594,35828],{"class":60},[33,46596,2799],{"class":47},[33,46598,35833],{"class":289},[33,46600,57],{"class":39},[33,46602,35838],{"class":60},[33,46604,226],{"class":47},[33,46606,46607,46609,46611,46613,46615,46617,46619,46621,46623],{"class":35,"line":35804},[33,46608,35819],{"class":47},[33,46610,35822],{"class":60},[33,46612,35850],{"class":47},[33,46614,35853],{"class":60},[33,46616,2799],{"class":47},[33,46618,35833],{"class":289},[33,46620,57],{"class":39},[33,46622,35862],{"class":60},[33,46624,226],{"class":47},[33,46626,46627],{"class":35,"line":35810},[33,46628,35870],{"class":2487},[33,46630,46631],{"class":35,"line":35816},[33,46632,35876],{"class":47},[33,46634,46635],{"class":35,"line":35843},[33,46636,35882],{"class":2487},[33,46638,46639,46641,46643],{"class":35,"line":35867},[33,46640,35888],{"class":47},[33,46642,35891],{"class":60},[33,46644,226],{"class":47},[33,46646,46647,46649,46651],{"class":35,"line":35873},[33,46648,35899],{"class":47},[33,46650,35902],{"class":60},[33,46652,226],{"class":47},[33,46654,46655],{"class":35,"line":35879},[33,46656,35910],{"class":2487},[33,46658,46659,46661,46663,46665,46667,46669,46671],{"class":35,"line":35885},[33,46660,33956],{"class":47},[33,46662,720],{"class":72},[33,46664,2799],{"class":47},[33,46666,725],{"class":72},[33,46668,2799],{"class":47},[33,46670,725],{"class":72},[33,46672,226],{"class":47},[33,46674,46675,46677,46679,46681,46683,46685,46687,46689,46691],{"class":35,"line":35896},[33,46676,35819],{"class":47},[33,46678,35822],{"class":60},[33,46680,35937],{"class":47},[33,46682,35828],{"class":60},[33,46684,2799],{"class":47},[33,46686,35833],{"class":289},[33,46688,57],{"class":39},[33,46690,35948],{"class":60},[33,46692,226],{"class":47},[33,46694,46695,46697,46699,46701,46703,46705,46707,46709,46711],{"class":35,"line":35907},[33,46696,35819],{"class":47},[33,46698,35822],{"class":60},[33,46700,35960],{"class":47},[33,46702,35853],{"class":60},[33,46704,2799],{"class":47},[33,46706,35833],{"class":289},[33,46708,57],{"class":39},[33,46710,35971],{"class":60},[33,46712,226],{"class":47},[33,46714,46715],{"class":35,"line":35913},[33,46716,35979],{"class":2487},[33,46718,46719],{"class":35,"line":35930},[33,46720,35876],{"class":47},[33,46722,46723,46725,46727],{"class":35,"line":35953},[33,46724,35888],{"class":47},[33,46726,35822],{"class":60},[33,46728,226],{"class":47},[33,46730,46731,46733,46735],{"class":35,"line":35976},[33,46732,35899],{"class":47},[33,46734,36001],{"class":60},[33,46736,226],{"class":47},[33,46738,46739],{"class":35,"line":35982},[33,46740,36009],{"class":47},[33,46742,46743],{"class":35,"line":35987},[33,46744,100],{"emptyLinePlaceholder":99},[33,46746,46747],{"class":35,"line":35996},[33,46748,36020],{"class":2487},[33,46750,46751,46753,46755,46757,46759],{"class":35,"line":36006},[33,46752,3805],{"class":39},[33,46754,33451],{"class":72},[33,46756,5206],{"class":39},[33,46758,33456],{"class":60},[33,46760,605],{"class":47},[33,46762,46763],{"class":35,"line":36012},[33,46764,36039],{"class":2487},[33,46766,46767,46770,46772],{"class":35,"line":36017},[33,46768,46769],{"class":47},"    GoogLeNet",[33,46771,57],{"class":39},[33,46773,46774],{"class":47},"GoogLeNet(Inception)\n",[33,46776,46777,46779,46781],{"class":35,"line":36023},[33,46778,36056],{"class":47},[33,46780,57],{"class":39},[33,46782,36061],{"class":47},[33,46784,46785,46787,46789,46792,46794,46796,46798],{"class":35,"line":36036},[33,46786,35618],{"class":47},[33,46788,57],{"class":39},[33,46790,46791],{"class":47},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[33,46793,36074],{"class":289},[33,46795,57],{"class":39},[33,46797,3358],{"class":72},[33,46799,226],{"class":47},[33,46801,46802],{"class":35,"line":36042},[33,46803,36086],{"class":47},[328,46805,46806],{"start":64},[331,46807,42797],{},[23,46809,46811],{"className":25,"code":46810,"language":27,"meta":28,"style":28},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[30,46812,46813,46819,46829,46839,46843,46853,46864,46868,46872,46876,46884,46900,46910,46926,46936,46950,46954,46964,46974,46984,46990,46994,46998,47006,47010,47026,47034,47038,47042,47050,47058,47062,47066,47070,47074,47080,47084,47094,47102,47110,47114,47118,47122,47130,47134,47150,47154,47158,47162,47174,47178,47190,47194,47198,47210,47214,47224,47228,47232,47244,47248,47256,47260,47264,47272,47276,47284,47288,47292,47296,47300,47304,47320,47328,47332,47336,47384,47390,47394,47404,47412,47420,47424,47428,47432,47436,47444,47448,47464,47468,47476,47484],{"__ignoreMap":28},[33,46814,46815,46817],{"class":35,"line":36},[33,46816,32627],{"class":39},[33,46818,32630],{"class":47},[33,46820,46821,46823,46825,46827],{"class":35,"line":51},[33,46822,32627],{"class":39},[33,46824,33645],{"class":47},[33,46826,33613],{"class":39},[33,46828,33650],{"class":47},[33,46830,46831,46833,46835,46837],{"class":35,"line":64},[33,46832,32970],{"class":39},[33,46834,33628],{"class":47},[33,46836,32627],{"class":39},[33,46838,33633],{"class":47},[33,46840,46841],{"class":35,"line":76},[33,46842,36147],{"class":2487},[33,46844,46845,46847,46849,46851],{"class":35,"line":87},[33,46846,32970],{"class":39},[33,46848,33598],{"class":47},[33,46850,32627],{"class":39},[33,46852,33603],{"class":47},[33,46854,46855,46857,46859,46861],{"class":35,"line":96},[33,46856,32970],{"class":39},[33,46858,34143],{"class":47},[33,46860,32627],{"class":39},[33,46862,46863],{"class":47}," GoogLeNet,Inception\n",[33,46865,46866],{"class":35,"line":103},[33,46867,100],{"emptyLinePlaceholder":99},[33,46869,46870],{"class":35,"line":108},[33,46871,100],{"emptyLinePlaceholder":99},[33,46873,46874],{"class":35,"line":119},[33,46875,36176],{"class":2487},[33,46877,46878,46880,46882],{"class":35,"line":128},[33,46879,40],{"class":39},[33,46881,36183],{"class":43},[33,46883,48],{"class":47},[33,46885,46886,46888,46890,46892,46894,46896,46898],{"class":35,"line":1753},[33,46887,36190],{"class":47},[33,46889,57],{"class":39},[33,46891,33685],{"class":47},[33,46893,33688],{"class":289},[33,46895,57],{"class":39},[33,46897,33693],{"class":60},[33,46899,33696],{"class":47},[33,46901,46902,46904,46906,46908],{"class":35,"line":1763},[33,46903,36207],{"class":289},[33,46905,57],{"class":39},[33,46907,36212],{"class":72},[33,46909,33696],{"class":47},[33,46911,46912,46914,46916,46918,46920,46922,46924],{"class":35,"line":1775},[33,46913,36219],{"class":289},[33,46915,57],{"class":39},[33,46917,33722],{"class":47},[33,46919,33725],{"class":289},[33,46921,57],{"class":39},[33,46923,37674],{"class":72},[33,46925,33733],{"class":47},[33,46927,46928,46930,46932,46934],{"class":35,"line":1780},[33,46929,36236],{"class":289},[33,46931,57],{"class":39},[33,46933,1190],{"class":72},[33,46935,226],{"class":47},[33,46937,46938,46940,46942,46944,46946,46948],{"class":35,"line":1785},[33,46939,36247],{"class":47},[33,46941,57],{"class":39},[33,46943,33763],{"class":47},[33,46945,33766],{"class":289},[33,46947,57],{"class":39},[33,46949,36258],{"class":47},[33,46951,46952],{"class":35,"line":1940},[33,46953,36263],{"class":2487},[33,46955,46956,46958,46960,46962],{"class":35,"line":2183},[33,46957,36268],{"class":289},[33,46959,57],{"class":39},[33,46961,720],{"class":72},[33,46963,33696],{"class":47},[33,46965,46966,46968,46970,46972],{"class":35,"line":2208},[33,46967,36279],{"class":289},[33,46969,57],{"class":39},[33,46971,1190],{"class":72},[33,46973,33696],{"class":47},[33,46975,46976,46978,46980,46982],{"class":35,"line":2234},[33,46977,36290],{"class":289},[33,46979,57],{"class":39},[33,46981,2617],{"class":72},[33,46983,226],{"class":47},[33,46985,46986,46988],{"class":35,"line":2239},[33,46987,90],{"class":39},[33,46989,36303],{"class":47},[33,46991,46992],{"class":35,"line":2247},[33,46993,100],{"emptyLinePlaceholder":99},[33,46995,46996],{"class":35,"line":2255},[33,46997,36312],{"class":2487},[33,46999,47000,47002,47004],{"class":35,"line":3992},[33,47001,40],{"class":39},[33,47003,36319],{"class":43},[33,47005,36322],{"class":47},[33,47007,47008],{"class":35,"line":4009},[33,47009,36327],{"class":2487},[33,47011,47012,47014,47016,47018,47020,47022,47024],{"class":35,"line":4014},[33,47013,33468],{"class":47},[33,47015,57],{"class":39},[33,47017,33475],{"class":60},[33,47019,3966],{"class":39},[33,47021,33480],{"class":47},[33,47023,3963],{"class":39},[33,47025,36344],{"class":60},[33,47027,47028,47030,47032],{"class":35,"line":4019},[33,47029,33520],{"class":47},[33,47031,57],{"class":39},[33,47033,34516],{"class":47},[33,47035,47036],{"class":35,"line":4024},[33,47037,100],{"emptyLinePlaceholder":99},[33,47039,47040],{"class":35,"line":4038},[33,47041,36361],{"class":2487},[33,47043,47044,47046,47048],{"class":35,"line":4043},[33,47045,36366],{"class":47},[33,47047,57],{"class":39},[33,47049,34569],{"class":72},[33,47051,47052,47054,47056],{"class":35,"line":4834},[33,47053,36375],{"class":47},[33,47055,57],{"class":39},[33,47057,5342],{"class":72},[33,47059,47060],{"class":35,"line":4848},[33,47061,100],{"emptyLinePlaceholder":99},[33,47063,47064],{"class":35,"line":4856},[33,47065,36388],{"class":2487},[33,47067,47068],{"class":35,"line":4861},[33,47069,36393],{"class":2487},[33,47071,47072],{"class":35,"line":4867},[33,47073,36398],{"class":2487},[33,47075,47076,47078],{"class":35,"line":4873},[33,47077,36403],{"class":39},[33,47079,35110],{"class":47},[33,47081,47082],{"class":35,"line":4878},[33,47083,36410],{"class":2487},[33,47085,47086,47088,47090,47092],{"class":35,"line":10194},[33,47087,5658],{"class":39},[33,47089,36417],{"class":47},[33,47091,681],{"class":39},[33,47093,36422],{"class":47},[33,47095,47096,47098,47100],{"class":35,"line":10218},[33,47097,36427],{"class":47},[33,47099,57],{"class":39},[33,47101,36432],{"class":47},[33,47103,47104,47106,47108],{"class":35,"line":10223},[33,47105,36437],{"class":47},[33,47107,57],{"class":39},[33,47109,36442],{"class":47},[33,47111,47112],{"class":35,"line":10229},[33,47113,36447],{"class":2487},[33,47115,47116],{"class":35,"line":10256},[33,47117,35101],{"class":47},[33,47119,47120],{"class":35,"line":10261},[33,47121,36456],{"class":2487},[33,47123,47124,47126,47128],{"class":35,"line":10267},[33,47125,34886],{"class":47},[33,47127,57],{"class":39},[33,47129,36465],{"class":47},[33,47131,47132],{"class":35,"line":10279},[33,47133,36470],{"class":2487},[33,47135,47136,47138,47140,47142,47144,47146,47148],{"class":35,"line":10291},[33,47137,34903],{"class":47},[33,47139,57],{"class":39},[33,47141,34908],{"class":47},[33,47143,34911],{"class":289},[33,47145,57],{"class":39},[33,47147,720],{"class":72},[33,47149,226],{"class":47},[33,47151,47152],{"class":35,"line":10303},[33,47153,36491],{"class":2487},[33,47155,47156],{"class":35,"line":11961},[33,47157,36496],{"class":2487},[33,47159,47160],{"class":35,"line":11986},[33,47161,36501],{"class":2487},[33,47163,47164,47166,47168,47170,47172],{"class":35,"line":12009},[33,47165,36506],{"class":47},[33,47167,692],{"class":39},[33,47169,35013],{"class":47},[33,47171,5206],{"class":39},[33,47173,36515],{"class":47},[33,47175,47176],{"class":35,"line":12033},[33,47177,36520],{"class":2487},[33,47179,47180,47182,47184,47186,47188],{"class":35,"line":12038},[33,47181,36525],{"class":47},[33,47183,692],{"class":39},[33,47185,36530],{"class":47},[33,47187,2617],{"class":72},[33,47189,226],{"class":47},[33,47191,47192],{"class":35,"line":12043},[33,47193,100],{"emptyLinePlaceholder":99},[33,47195,47196],{"class":35,"line":12048},[33,47197,36543],{"class":2487},[33,47199,47200,47202,47204,47206,47208],{"class":35,"line":12057},[33,47201,36548],{"class":47},[33,47203,57],{"class":39},[33,47205,36553],{"class":47},[33,47207,3001],{"class":39},[33,47209,36558],{"class":47},[33,47211,47212],{"class":35,"line":12062},[33,47213,36563],{"class":2487},[33,47215,47216,47218,47220,47222],{"class":35,"line":12068},[33,47217,807],{"class":72},[33,47219,133],{"class":47},[33,47221,36572],{"class":60},[33,47223,36575],{"class":47},[33,47225,47226],{"class":35,"line":12089},[33,47227,100],{"emptyLinePlaceholder":99},[33,47229,47230],{"class":35,"line":12095},[33,47231,36584],{"class":2487},[33,47233,47234,47236,47238,47240,47242],{"class":35,"line":12109},[33,47235,3805],{"class":39},[33,47237,33451],{"class":72},[33,47239,5206],{"class":39},[33,47241,33456],{"class":60},[33,47243,605],{"class":47},[33,47245,47246],{"class":35,"line":12115},[33,47247,36601],{"class":2487},[33,47249,47250,47252,47254],{"class":35,"line":12142},[33,47251,33520],{"class":47},[33,47253,57],{"class":39},[33,47255,46774],{"class":47},[33,47257,47258],{"class":35,"line":12151},[33,47259,36614],{"class":2487},[33,47261,47262],{"class":35,"line":12157},[33,47263,36619],{"class":2487},[33,47265,47266,47268,47270],{"class":35,"line":12165},[33,47267,36624],{"class":47},[33,47269,36627],{"class":60},[33,47271,551],{"class":47},[33,47273,47274],{"class":35,"line":12170},[33,47275,36634],{"class":2487},[33,47277,47278,47280,47282],{"class":35,"line":18842},[33,47279,36247],{"class":47},[33,47281,57],{"class":39},[33,47283,36643],{"class":47},[33,47285,47286],{"class":35,"line":18848},[33,47287,36648],{"class":2487},[33,47289,47290],{"class":35,"line":18871},[33,47291,36653],{"class":47},[33,47293,47294],{"class":35,"line":18877},[33,47295,100],{"emptyLinePlaceholder":99},[33,47297,47298],{"class":35,"line":18900},[33,47299,36662],{"class":2487},[33,47301,47302],{"class":35,"line":18914},[33,47303,36667],{"class":2487},[33,47305,47306,47308,47310,47312,47314,47316,47318],{"class":35,"line":18934},[33,47307,33468],{"class":47},[33,47309,57],{"class":39},[33,47311,33475],{"class":60},[33,47313,3966],{"class":39},[33,47315,33480],{"class":47},[33,47317,3963],{"class":39},[33,47319,36344],{"class":60},[33,47321,47322,47324,47326],{"class":35,"line":18940},[33,47323,33520],{"class":47},[33,47325,57],{"class":39},[33,47327,34516],{"class":47},[33,47329,47330],{"class":35,"line":18951},[33,47331,36696],{"class":2487},[33,47333,47334],{"class":35,"line":18974},[33,47335,36701],{"class":2487},[33,47337,47338,47340,47342,47344,47346,47348,47350,47352,47354,47356,47358,47360,47362,47364,47366,47368,47370,47372,47374,47376,47378,47380,47382],{"class":35,"line":18996},[33,47339,36706],{"class":47},[33,47341,57],{"class":39},[33,47343,3300],{"class":47},[33,47345,36713],{"class":60},[33,47347,2799],{"class":47},[33,47349,36718],{"class":60},[33,47351,2799],{"class":47},[33,47353,36723],{"class":60},[33,47355,2799],{"class":47},[33,47357,36728],{"class":60},[33,47359,2799],{"class":47},[33,47361,36733],{"class":60},[33,47363,2799],{"class":47},[33,47365,36738],{"class":60},[33,47367,2799],{"class":47},[33,47369,36743],{"class":60},[33,47371,2799],{"class":47},[33,47373,36748],{"class":60},[33,47375,2799],{"class":47},[33,47377,36753],{"class":60},[33,47379,2799],{"class":47},[33,47381,36758],{"class":60},[33,47383,919],{"class":47},[33,47385,47386,47388],{"class":35,"line":19001},[33,47387,36403],{"class":39},[33,47389,35110],{"class":47},[33,47391,47392],{"class":35,"line":19007},[33,47393,36771],{"class":2487},[33,47395,47396,47398,47400,47402],{"class":35,"line":19021},[33,47397,5658],{"class":39},[33,47399,36778],{"class":47},[33,47401,681],{"class":39},[33,47403,36422],{"class":47},[33,47405,47406,47408,47410],{"class":35,"line":19034},[33,47407,34836],{"class":47},[33,47409,57],{"class":39},[33,47411,34841],{"class":47},[33,47413,47414,47416,47418],{"class":35,"line":19039},[33,47415,34851],{"class":47},[33,47417,57],{"class":39},[33,47419,34856],{"class":47},[33,47421,47422],{"class":35,"line":19053},[33,47423,100],{"emptyLinePlaceholder":99},[33,47425,47426],{"class":35,"line":19058},[33,47427,36807],{"class":2487},[33,47429,47430],{"class":35,"line":19064},[33,47431,35101],{"class":47},[33,47433,47434],{"class":35,"line":19069},[33,47435,36816],{"class":2487},[33,47437,47438,47440,47442],{"class":35,"line":19083},[33,47439,34886],{"class":47},[33,47441,57],{"class":39},[33,47443,34891],{"class":47},[33,47445,47446],{"class":35,"line":19088},[33,47447,36829],{"class":2487},[33,47449,47450,47452,47454,47456,47458,47460,47462],{"class":35,"line":19093},[33,47451,34903],{"class":47},[33,47453,57],{"class":39},[33,47455,34908],{"class":47},[33,47457,34911],{"class":289},[33,47459,57],{"class":39},[33,47461,720],{"class":72},[33,47463,226],{"class":47},[33,47465,47466],{"class":35,"line":19107},[33,47467,36850],{"class":2487},[33,47469,47470,47472,47474],{"class":35,"line":19119},[33,47471,36855],{"class":47},[33,47473,57],{"class":39},[33,47475,36860],{"class":47},[33,47477,47478,47480,47482],{"class":35,"line":19124},[33,47479,36865],{"class":47},[33,47481,57],{"class":39},[33,47483,36870],{"class":47},[33,47485,47486,47488,47490,47492,47494,47496,47498,47500],{"class":35,"line":19137},[33,47487,36875],{"class":72},[33,47489,133],{"class":47},[33,47491,36880],{"class":60},[33,47493,36883],{"class":47},[33,47495,36886],{"class":60},[33,47497,2799],{"class":47},[33,47499,36891],{"class":60},[33,47501,36894],{"class":47},[631,47503,47505],{"id":47504},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47507,47508],{},"猫狗分类任务",[19,47510,47511],{},"划分数据集和验证集",[23,47513,47515],{"className":25,"code":47514,"language":27,"meta":28,"style":28},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[30,47516,47517,47522,47529,47534,47545,47552,47556,47566,47580,47589,47593,47598,47608,47628,47632,47637,47647,47658,47671,47675,47680,47689,47699,47710,47714,47719,47729,47733,47738,47743,47748,47753,47758,47762,47772,47799,47812,47824,47851,47856,47861,47875,47880,47892,47907,47922,47930,47934,47939,47945,47957,47970,47975,47980,47985,48035,48041,48045],{"__ignoreMap":28},[33,47518,47519],{"class":35,"line":36},[33,47520,47521],{"class":2487},"# 创建脚本，用于划分数据集和验证集\n",[33,47523,47524,47526],{"class":35,"line":51},[33,47525,32627],{"class":39},[33,47527,47528],{"class":47}," os\n",[33,47530,47531],{"class":35,"line":64},[33,47532,47533],{"class":2487},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[33,47535,47536,47538,47541,47543],{"class":35,"line":76},[33,47537,32970],{"class":39},[33,47539,47540],{"class":47}," shutil ",[33,47542,32627],{"class":39},[33,47544,34051],{"class":47},[33,47546,47547,47549],{"class":35,"line":87},[33,47548,32627],{"class":39},[33,47550,47551],{"class":47}," random\n",[33,47553,47554],{"class":35,"line":96},[33,47555,100],{"emptyLinePlaceholder":99},[33,47557,47558,47560,47563],{"class":35,"line":103},[33,47559,40],{"class":39},[33,47561,47562],{"class":43}," mkfile",[33,47564,47565],{"class":47},"(file):\n",[33,47567,47568,47570,47572,47575,47578],{"class":35,"line":108},[33,47569,593],{"class":39},[33,47571,41154],{"class":39},[33,47573,47574],{"class":47}," os.path.exists(",[33,47576,47577],{"class":289},"file",[33,47579,366],{"class":47},[33,47581,47582,47585,47587],{"class":35,"line":119},[33,47583,47584],{"class":47},"        os.makedirs(",[33,47586,47577],{"class":289},[33,47588,226],{"class":47},[33,47590,47591],{"class":35,"line":128},[33,47592,100],{"emptyLinePlaceholder":99},[33,47594,47595],{"class":35,"line":1753},[33,47596,47597],{"class":2487},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[33,47599,47600,47603,47605],{"class":35,"line":1763},[33,47601,47602],{"class":47},"file_path",[33,47604,57],{"class":39},[33,47606,47607],{"class":60},"'data_cat_dog'\n",[33,47609,47610,47613,47615,47618,47620,47623,47625],{"class":35,"line":1775},[33,47611,47612],{"class":47},"flower_class",[33,47614,57],{"class":39},[33,47616,47617],{"class":47},"[cla ",[33,47619,5282],{"class":39},[33,47621,47622],{"class":47}," cla ",[33,47624,681],{"class":39},[33,47626,47627],{"class":47}," os.listdir(file_path)]\n",[33,47629,47630],{"class":35,"line":1780},[33,47631,100],{"emptyLinePlaceholder":99},[33,47633,47634],{"class":35,"line":1785},[33,47635,47636],{"class":2487},"# 创建训练集train文件夹\n",[33,47638,47639,47642,47645],{"class":35,"line":1940},[33,47640,47641],{"class":47},"mkfile(",[33,47643,47644],{"class":60},"'data\u002Ftrain'",[33,47646,226],{"class":47},[33,47648,47649,47651,47653,47655],{"class":35,"line":2183},[33,47650,5282],{"class":39},[33,47652,47622],{"class":47},[33,47654,681],{"class":39},[33,47656,47657],{"class":47}," flower_class:\n",[33,47659,47660,47663,47666,47668],{"class":35,"line":2208},[33,47661,47662],{"class":47},"    mkfile(",[33,47664,47665],{"class":60},"'data\u002Ftrain\u002F'",[33,47667,880],{"class":39},[33,47669,47670],{"class":47},"cla)\n",[33,47672,47673],{"class":35,"line":2234},[33,47674,100],{"emptyLinePlaceholder":99},[33,47676,47677],{"class":35,"line":2239},[33,47678,47679],{"class":2487},"# 创建验证集val文件夹\n",[33,47681,47682,47684,47687],{"class":35,"line":2247},[33,47683,47641],{"class":47},[33,47685,47686],{"class":60},"'data\u002Ftest'",[33,47688,226],{"class":47},[33,47690,47691,47693,47695,47697],{"class":35,"line":2255},[33,47692,5282],{"class":39},[33,47694,47622],{"class":47},[33,47696,681],{"class":39},[33,47698,47657],{"class":47},[33,47700,47701,47703,47706,47708],{"class":35,"line":3992},[33,47702,47662],{"class":47},[33,47704,47705],{"class":60},"'data\u002Ftest\u002F'",[33,47707,880],{"class":39},[33,47709,47670],{"class":47},[33,47711,47712],{"class":35,"line":4009},[33,47713,100],{"emptyLinePlaceholder":99},[33,47715,47716],{"class":35,"line":4014},[33,47717,47718],{"class":2487},"# 划分比例，训练集：测试集=9：1\n",[33,47720,47721,47724,47726],{"class":35,"line":4019},[33,47722,47723],{"class":47},"split_rate",[33,47725,57],{"class":39},[33,47727,47728],{"class":72},"0.1\n",[33,47730,47731],{"class":35,"line":4024},[33,47732,100],{"emptyLinePlaceholder":99},[33,47734,47735],{"class":35,"line":4038},[33,47736,47737],{"class":2487},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[33,47739,47740],{"class":35,"line":4043},[33,47741,47742],{"class":2487},"# cla_path：当前类别的原始图片路径\n",[33,47744,47745],{"class":35,"line":4834},[33,47746,47747],{"class":2487},"# images：当前类别下所有图片的文件名列表\n",[33,47749,47750],{"class":35,"line":4848},[33,47751,47752],{"class":2487},"# num：该类别图片总数\n",[33,47754,47755],{"class":35,"line":4856},[33,47756,47757],{"class":2487},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[33,47759,47760],{"class":35,"line":4861},[33,47761,100],{"emptyLinePlaceholder":99},[33,47763,47764,47766,47768,47770],{"class":35,"line":4867},[33,47765,5282],{"class":39},[33,47767,47622],{"class":47},[33,47769,681],{"class":39},[33,47771,47657],{"class":47},[33,47773,47774,47777,47779,47782,47784,47787,47790,47792,47794,47796],{"class":35,"line":4873},[33,47775,47776],{"class":47},"    cla_path ",[33,47778,57],{"class":39},[33,47780,47781],{"class":47}," file_path ",[33,47783,880],{"class":39},[33,47785,47786],{"class":60}," '\u002F'",[33,47788,47789],{"class":39}," +",[33,47791,47622],{"class":47},[33,47793,880],{"class":39},[33,47795,47786],{"class":60},[33,47797,47798],{"class":2487},"  # 某一类别的子目录\n",[33,47800,47801,47804,47806,47809],{"class":35,"line":4878},[33,47802,47803],{"class":47},"    images ",[33,47805,57],{"class":39},[33,47807,47808],{"class":47}," os.listdir(cla_path)  ",[33,47810,47811],{"class":2487},"# iamges 列表存储了该目录下所有图像的名称\n",[33,47813,47814,47817,47819,47821],{"class":35,"line":10194},[33,47815,47816],{"class":47},"    num ",[33,47818,57],{"class":39},[33,47820,9577],{"class":72},[33,47822,47823],{"class":47},"(images)\n",[33,47825,47826,47829,47831,47834,47836,47838,47840,47843,47845,47848],{"class":35,"line":10218},[33,47827,47828],{"class":47},"    eval_index ",[33,47830,57],{"class":39},[33,47832,47833],{"class":47}," random.sample(images, ",[33,47835,2910],{"class":289},[33,47837,57],{"class":39},[33,47839,2436],{"class":72},[33,47841,47842],{"class":47},"(num ",[33,47844,657],{"class":39},[33,47846,47847],{"class":47}," split_rate))  ",[33,47849,47850],{"class":2487},"# 从images列表中随机抽取 k 个图像名称\n",[33,47852,47853],{"class":35,"line":10223},[33,47854,47855],{"class":2487},"    # 遍历该类别下的所有图片\n",[33,47857,47858],{"class":35,"line":10229},[33,47859,47860],{"class":2487},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[33,47862,47863,47865,47868,47870,47872],{"class":35,"line":10256},[33,47864,675],{"class":39},[33,47866,47867],{"class":47}," index, image ",[33,47869,681],{"class":39},[33,47871,33835],{"class":72},[33,47873,47874],{"class":47},"(images):\n",[33,47876,47877],{"class":35,"line":10261},[33,47878,47879],{"class":2487},"        # eval_index 中保存验证集val的图像名称\n",[33,47881,47882,47884,47887,47889],{"class":35,"line":10267},[33,47883,2130],{"class":39},[33,47885,47886],{"class":47}," image ",[33,47888,681],{"class":39},[33,47890,47891],{"class":47}," eval_index:\n",[33,47893,47894,47897,47899,47902,47904],{"class":35,"line":10279},[33,47895,47896],{"class":47},"            image_path ",[33,47898,57],{"class":39},[33,47900,47901],{"class":47}," cla_path ",[33,47903,880],{"class":39},[33,47905,47906],{"class":47}," image\n",[33,47908,47909,47912,47914,47917,47919],{"class":35,"line":10291},[33,47910,47911],{"class":47},"            new_path ",[33,47913,57],{"class":39},[33,47915,47916],{"class":60}," 'data\u002Ftest\u002F'",[33,47918,47789],{"class":39},[33,47920,47921],{"class":47}," cla\n",[33,47923,47924,47927],{"class":35,"line":10303},[33,47925,47926],{"class":47},"            copy(image_path, new_path)  ",[33,47928,47929],{"class":2487},"# 将选中的图像复制到新路径\n",[33,47931,47932],{"class":35,"line":11961},[33,47933,100],{"emptyLinePlaceholder":99},[33,47935,47936],{"class":35,"line":11986},[33,47937,47938],{"class":2487},"        # 其余的图像保存在训练集train中\n",[33,47940,47941,47943],{"class":35,"line":12009},[33,47942,4791],{"class":39},[33,47944,605],{"class":47},[33,47946,47947,47949,47951,47953,47955],{"class":35,"line":12033},[33,47948,47896],{"class":47},[33,47950,57],{"class":39},[33,47952,47901],{"class":47},[33,47954,880],{"class":39},[33,47956,47906],{"class":47},[33,47958,47959,47961,47963,47966,47968],{"class":35,"line":12038},[33,47960,47911],{"class":47},[33,47962,57],{"class":39},[33,47964,47965],{"class":60}," 'data\u002Ftrain\u002F'",[33,47967,47789],{"class":39},[33,47969,47921],{"class":47},[33,47971,47972],{"class":35,"line":12043},[33,47973,47974],{"class":47},"            copy(image_path, new_path)\n",[33,47976,47977],{"class":35,"line":12048},[33,47978,47979],{"class":2487},"            # 打印进度条信息\n",[33,47981,47982],{"class":35,"line":12057},[33,47983,47984],{"class":2487},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[33,47986,47987,47989,47991,47993,47996,47998,48000,48003,48005,48007,48009,48012,48015,48017,48019,48022,48025,48027,48029,48032],{"class":35,"line":12062},[33,47988,807],{"class":72},[33,47990,133],{"class":47},[33,47992,397],{"class":60},[33,47994,47995],{"class":72},"\\r",[33,47997,3300],{"class":60},[33,47999,34685],{"class":72},[33,48001,48002],{"class":60},"] processing [",[33,48004,34685],{"class":72},[33,48006,3001],{"class":60},[33,48008,34685],{"class":72},[33,48010,48011],{"class":60},"]\"",[33,48013,48014],{"class":47},".format(cla, index ",[33,48016,880],{"class":39},[33,48018,27357],{"class":72},[33,48020,48021],{"class":47},", num), ",[33,48023,48024],{"class":289},"end",[33,48026,57],{"class":39},[33,48028,9898],{"class":60},[33,48030,48031],{"class":47},")  ",[33,48033,48034],{"class":2487},"# processing bar\n",[33,48036,48037,48039],{"class":35,"line":12068},[33,48038,193],{"class":72},[33,48040,4235],{"class":47},[33,48042,48043],{"class":35,"line":12089},[33,48044,100],{"emptyLinePlaceholder":99},[33,48046,48047,48049,48051,48054],{"class":35,"line":12095},[33,48048,122],{"class":72},[33,48050,133],{"class":47},[33,48052,48053],{"class":60},"\"processing done!\"",[33,48055,226],{"class":47},[19,48057,48058],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[24236,48060,48062],{"id":48061},"_242模型代码","2.4.2.模型代码",[19,48064,48065],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[23,48067,48069],{"className":25,"code":48068,"language":27,"meta":28,"style":28},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[30,48070,48071,48077,48087,48097,48101,48117,48125,48139,48149,48153,48183,48187,48221,48267,48271,48305,48351,48355,48359,48393,48423,48427,48435,48449,48471,48493,48511,48515,48529,48533,48537,48553,48557,48565,48579,48589,48633,48637,48665,48669,48679,48707,48711,48747,48751,48779,48783,48793,48825,48857,48885,48889,48899,48931,48963,48995,49027,49059,49087,49091,49101,49133,49165,49177,49181,49193,49197,49201,49213,49221,49241,49245,49249,49253,49257,49261,49265,49279,49287,49295,49307,49321,49329,49333,49341,49351,49361,49371,49381,49391,49397,49401,49405,49417,49437,49445],{"__ignoreMap":28},[33,48072,48073,48075],{"class":35,"line":36},[33,48074,32627],{"class":39},[33,48076,32630],{"class":47},[33,48078,48079,48081,48083,48085],{"class":35,"line":51},[33,48080,32970],{"class":39},[33,48082,32973],{"class":47},[33,48084,32627],{"class":39},[33,48086,32978],{"class":47},[33,48088,48089,48091,48093,48095],{"class":35,"line":64},[33,48090,32970],{"class":39},[33,48092,32990],{"class":47},[33,48094,32627],{"class":39},[33,48096,32995],{"class":47},[33,48098,48099],{"class":35,"line":76},[33,48100,100],{"emptyLinePlaceholder":99},[33,48102,48103,48105,48107,48109,48111,48113,48115],{"class":35,"line":87},[33,48104,16934],{"class":39},[33,48106,43716],{"class":43},[33,48108,133],{"class":47},[33,48110,33011],{"class":43},[33,48112,2975],{"class":47},[33,48114,33016],{"class":43},[33,48116,366],{"class":47},[33,48118,48119,48121,48123],{"class":35,"line":96},[33,48120,1603],{"class":39},[33,48122,33035],{"class":72},[33,48124,43735],{"class":47},[33,48126,48127,48129,48131,48133,48135,48137],{"class":35,"line":103},[33,48128,33048],{"class":72},[33,48130,43742],{"class":47},[33,48132,33054],{"class":72},[33,48134,33057],{"class":47},[33,48136,33060],{"class":72},[33,48138,4235],{"class":47},[33,48140,48141,48143,48145,48147],{"class":35,"line":108},[33,48142,33076],{"class":72},[33,48144,36996],{"class":47},[33,48146,57],{"class":39},[33,48148,37001],{"class":47},[33,48150,48151],{"class":35,"line":119},[33,48152,43765],{"class":2487},[33,48154,48155,48157,48159,48161,48163,48165,48167,48169,48171,48173,48175,48177,48179,48181],{"class":35,"line":128},[33,48156,33076],{"class":72},[33,48158,43772],{"class":47},[33,48160,57],{"class":39},[33,48162,33084],{"class":47},[33,48164,33087],{"class":289},[33,48166,57],{"class":39},[33,48168,43783],{"class":47},[33,48170,33096],{"class":289},[33,48172,57],{"class":39},[33,48174,43790],{"class":47},[33,48176,33105],{"class":289},[33,48178,57],{"class":39},[33,48180,720],{"class":72},[33,48182,226],{"class":47},[33,48184,48185],{"class":35,"line":1753},[33,48186,43803],{"class":2487},[33,48188,48189,48191,48193,48195,48197,48199,48201,48203,48205,48207,48209,48211,48213,48215,48217,48219],{"class":35,"line":1763},[33,48190,33076],{"class":72},[33,48192,43810],{"class":47},[33,48194,57],{"class":39},[33,48196,33084],{"class":47},[33,48198,33087],{"class":289},[33,48200,57],{"class":39},[33,48202,43783],{"class":47},[33,48204,33096],{"class":289},[33,48206,57],{"class":39},[33,48208,43827],{"class":47},[33,48210,2617],{"class":72},[33,48212,43832],{"class":47},[33,48214,33105],{"class":289},[33,48216,57],{"class":39},[33,48218,720],{"class":72},[33,48220,226],{"class":47},[33,48222,48223,48225,48227,48229,48231,48233,48235,48237,48239,48241,48243,48245,48247,48249,48251,48253,48255,48257,48259,48261,48263,48265],{"class":35,"line":1775},[33,48224,33076],{"class":72},[33,48226,43847],{"class":47},[33,48228,57],{"class":39},[33,48230,33084],{"class":47},[33,48232,33087],{"class":289},[33,48234,57],{"class":39},[33,48236,43827],{"class":47},[33,48238,2617],{"class":72},[33,48240,43832],{"class":47},[33,48242,33096],{"class":289},[33,48244,57],{"class":39},[33,48246,43827],{"class":47},[33,48248,720],{"class":72},[33,48250,43832],{"class":47},[33,48252,33105],{"class":289},[33,48254,57],{"class":39},[33,48256,730],{"class":72},[33,48258,2799],{"class":47},[33,48260,33114],{"class":289},[33,48262,57],{"class":39},[33,48264,720],{"class":72},[33,48266,226],{"class":47},[33,48268,48269],{"class":35,"line":1780},[33,48270,43892],{"class":2487},[33,48272,48273,48275,48277,48279,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299,48301,48303],{"class":35,"line":1785},[33,48274,33076],{"class":72},[33,48276,43899],{"class":47},[33,48278,57],{"class":39},[33,48280,33084],{"class":47},[33,48282,33087],{"class":289},[33,48284,57],{"class":39},[33,48286,43783],{"class":47},[33,48288,33096],{"class":289},[33,48290,57],{"class":39},[33,48292,43916],{"class":47},[33,48294,2617],{"class":72},[33,48296,43832],{"class":47},[33,48298,33105],{"class":289},[33,48300,57],{"class":39},[33,48302,720],{"class":72},[33,48304,226],{"class":47},[33,48306,48307,48309,48311,48313,48315,48317,48319,48321,48323,48325,48327,48329,48331,48333,48335,48337,48339,48341,48343,48345,48347,48349],{"class":35,"line":1940},[33,48308,33076],{"class":72},[33,48310,43935],{"class":47},[33,48312,57],{"class":39},[33,48314,33084],{"class":47},[33,48316,33087],{"class":289},[33,48318,57],{"class":39},[33,48320,43916],{"class":47},[33,48322,2617],{"class":72},[33,48324,43832],{"class":47},[33,48326,33096],{"class":289},[33,48328,57],{"class":39},[33,48330,43916],{"class":47},[33,48332,720],{"class":72},[33,48334,43832],{"class":47},[33,48336,33105],{"class":289},[33,48338,57],{"class":39},[33,48340,758],{"class":72},[33,48342,2799],{"class":47},[33,48344,33114],{"class":289},[33,48346,57],{"class":39},[33,48348,725],{"class":72},[33,48350,226],{"class":47},[33,48352,48353],{"class":35,"line":2183},[33,48354,43980],{"class":2487},[33,48356,48357],{"class":35,"line":2208},[33,48358,43985],{"class":2487},[33,48360,48361,48363,48365,48367,48369,48371,48373,48375,48377,48379,48381,48383,48385,48387,48389,48391],{"class":35,"line":2234},[33,48362,33076],{"class":72},[33,48364,43992],{"class":47},[33,48366,57],{"class":39},[33,48368,37054],{"class":47},[33,48370,33105],{"class":289},[33,48372,57],{"class":39},[33,48374,730],{"class":72},[33,48376,2799],{"class":47},[33,48378,33160],{"class":289},[33,48380,57],{"class":39},[33,48382,720],{"class":72},[33,48384,2799],{"class":47},[33,48386,33114],{"class":289},[33,48388,57],{"class":39},[33,48390,720],{"class":72},[33,48392,226],{"class":47},[33,48394,48395,48397,48399,48401,48403,48405,48407,48409,48411,48413,48415,48417,48419,48421],{"class":35,"line":2239},[33,48396,33076],{"class":72},[33,48398,44027],{"class":47},[33,48400,57],{"class":39},[33,48402,33084],{"class":47},[33,48404,33087],{"class":289},[33,48406,57],{"class":39},[33,48408,43783],{"class":47},[33,48410,33096],{"class":289},[33,48412,57],{"class":39},[33,48414,44044],{"class":47},[33,48416,33105],{"class":289},[33,48418,57],{"class":39},[33,48420,720],{"class":72},[33,48422,226],{"class":47},[33,48424,48425],{"class":35,"line":2247},[33,48426,100],{"emptyLinePlaceholder":99},[33,48428,48429,48431,48433],{"class":35,"line":2255},[33,48430,1603],{"class":39},[33,48432,33324],{"class":43},[33,48434,33327],{"class":47},[33,48436,48437,48439,48441,48443,48445,48447],{"class":35,"line":3992},[33,48438,44069],{"class":47},[33,48440,57],{"class":39},[33,48442,33054],{"class":72},[33,48444,37409],{"class":47},[33,48446,33054],{"class":72},[33,48448,44080],{"class":47},[33,48450,48451,48453,48455,48457,48459,48461,48463,48465,48467,48469],{"class":35,"line":4009},[33,48452,9331],{"class":47},[33,48454,57],{"class":39},[33,48456,33054],{"class":72},[33,48458,37409],{"class":47},[33,48460,33054],{"class":72},[33,48462,44095],{"class":47},[33,48464,33054],{"class":72},[33,48466,37409],{"class":47},[33,48468,33054],{"class":72},[33,48470,44104],{"class":47},[33,48472,48473,48475,48477,48479,48481,48483,48485,48487,48489,48491],{"class":35,"line":4014},[33,48474,44109],{"class":47},[33,48476,57],{"class":39},[33,48478,33054],{"class":72},[33,48480,37409],{"class":47},[33,48482,33054],{"class":72},[33,48484,44120],{"class":47},[33,48486,33054],{"class":72},[33,48488,37409],{"class":47},[33,48490,33054],{"class":72},[33,48492,44129],{"class":47},[33,48494,48495,48497,48499,48501,48503,48505,48507,48509],{"class":35,"line":4019},[33,48496,44134],{"class":47},[33,48498,57],{"class":39},[33,48500,33054],{"class":72},[33,48502,37409],{"class":47},[33,48504,33054],{"class":72},[33,48506,44145],{"class":47},[33,48508,33054],{"class":72},[33,48510,44150],{"class":47},[33,48512,48513],{"class":35,"line":4024},[33,48514,44155],{"class":2487},[33,48516,48517,48519,48521,48523,48525,48527],{"class":35,"line":4038},[33,48518,1614],{"class":39},[33,48520,44162],{"class":47},[33,48522,34911],{"class":289},[33,48524,57],{"class":39},[33,48526,720],{"class":72},[33,48528,226],{"class":47},[33,48530,48531],{"class":35,"line":4043},[33,48532,100],{"emptyLinePlaceholder":99},[33,48534,48535],{"class":35,"line":4834},[33,48536,44183],{"class":2487},[33,48538,48539,48541,48543,48545,48547,48549,48551],{"class":35,"line":4848},[33,48540,16934],{"class":39},[33,48542,44190],{"class":43},[33,48544,133],{"class":47},[33,48546,33011],{"class":43},[33,48548,2975],{"class":47},[33,48550,33016],{"class":43},[33,48552,366],{"class":47},[33,48554,48555],{"class":35,"line":4856},[33,48556,44205],{"class":2487},[33,48558,48559,48561,48563],{"class":35,"line":4861},[33,48560,1603],{"class":39},[33,48562,33035],{"class":72},[33,48564,44214],{"class":47},[33,48566,48567,48569,48571,48573,48575,48577],{"class":35,"line":4867},[33,48568,33048],{"class":72},[33,48570,44221],{"class":47},[33,48572,33054],{"class":72},[33,48574,33057],{"class":47},[33,48576,33060],{"class":72},[33,48578,4235],{"class":47},[33,48580,48581,48583,48585,48587],{"class":35,"line":4873},[33,48582,33076],{"class":72},[33,48584,44236],{"class":47},[33,48586,57],{"class":39},[33,48588,40234],{"class":47},[33,48590,48591,48593,48595,48597,48599,48601,48603,48605,48607,48609,48611,48613,48615,48617,48619,48621,48623,48625,48627,48629,48631],{"class":35,"line":4878},[33,48592,40239],{"class":47},[33,48594,33087],{"class":289},[33,48596,57],{"class":39},[33,48598,730],{"class":72},[33,48600,2799],{"class":47},[33,48602,33096],{"class":289},[33,48604,57],{"class":39},[33,48606,2629],{"class":72},[33,48608,2799],{"class":47},[33,48610,33105],{"class":289},[33,48612,57],{"class":39},[33,48614,2790],{"class":72},[33,48616,2799],{"class":47},[33,48618,33160],{"class":289},[33,48620,57],{"class":39},[33,48622,725],{"class":72},[33,48624,2799],{"class":47},[33,48626,33114],{"class":289},[33,48628,57],{"class":39},[33,48630,730],{"class":72},[33,48632,40272],{"class":47},[33,48634,48635],{"class":35,"line":10194},[33,48636,40277],{"class":47},[33,48638,48639,48641,48643,48645,48647,48649,48651,48653,48655,48657,48659,48661,48663],{"class":35,"line":10218},[33,48640,40322],{"class":47},[33,48642,33105],{"class":289},[33,48644,57],{"class":39},[33,48646,730],{"class":72},[33,48648,2799],{"class":47},[33,48650,33160],{"class":289},[33,48652,57],{"class":39},[33,48654,725],{"class":72},[33,48656,2799],{"class":47},[33,48658,33114],{"class":289},[33,48660,57],{"class":39},[33,48662,720],{"class":72},[33,48664,226],{"class":47},[33,48666,48667],{"class":35,"line":10223},[33,48668,40351],{"class":47},[33,48670,48671,48673,48675,48677],{"class":35,"line":10229},[33,48672,33076],{"class":72},[33,48674,44327],{"class":47},[33,48676,57],{"class":39},[33,48678,40234],{"class":47},[33,48680,48681,48683,48685,48687,48689,48691,48693,48695,48697,48699,48701,48703,48705],{"class":35,"line":10256},[33,48682,40239],{"class":47},[33,48684,33087],{"class":289},[33,48686,57],{"class":39},[33,48688,2629],{"class":72},[33,48690,2799],{"class":47},[33,48692,33096],{"class":289},[33,48694,57],{"class":39},[33,48696,2629],{"class":72},[33,48698,2799],{"class":47},[33,48700,33105],{"class":289},[33,48702,57],{"class":39},[33,48704,720],{"class":72},[33,48706,40272],{"class":47},[33,48708,48709],{"class":35,"line":10261},[33,48710,40277],{"class":47},[33,48712,48713,48715,48717,48719,48721,48723,48725,48727,48729,48731,48733,48735,48737,48739,48741,48743,48745],{"class":35,"line":10267},[33,48714,40239],{"class":47},[33,48716,33087],{"class":289},[33,48718,57],{"class":39},[33,48720,2629],{"class":72},[33,48722,2799],{"class":47},[33,48724,33096],{"class":289},[33,48726,57],{"class":39},[33,48728,44382],{"class":72},[33,48730,2799],{"class":47},[33,48732,33105],{"class":289},[33,48734,57],{"class":39},[33,48736,730],{"class":72},[33,48738,2799],{"class":47},[33,48740,33114],{"class":289},[33,48742,57],{"class":39},[33,48744,720],{"class":72},[33,48746,40272],{"class":47},[33,48748,48749],{"class":35,"line":10279},[33,48750,40277],{"class":47},[33,48752,48753,48755,48757,48759,48761,48763,48765,48767,48769,48771,48773,48775,48777],{"class":35,"line":10291},[33,48754,40322],{"class":47},[33,48756,33105],{"class":289},[33,48758,57],{"class":39},[33,48760,730],{"class":72},[33,48762,2799],{"class":47},[33,48764,33160],{"class":289},[33,48766,57],{"class":39},[33,48768,725],{"class":72},[33,48770,2799],{"class":47},[33,48772,33114],{"class":289},[33,48774,57],{"class":39},[33,48776,720],{"class":72},[33,48778,226],{"class":47},[33,48780,48781],{"class":35,"line":10303},[33,48782,40351],{"class":47},[33,48784,48785,48787,48789,48791],{"class":35,"line":11961},[33,48786,33076],{"class":72},[33,48788,44443],{"class":47},[33,48790,57],{"class":39},[33,48792,40234],{"class":47},[33,48794,48795,48797,48799,48801,48803,48805,48807,48809,48811,48813,48815,48817,48819,48821,48823],{"class":35,"line":11986},[33,48796,44452],{"class":47},[33,48798,44382],{"class":72},[33,48800,2799],{"class":47},[33,48802,2629],{"class":72},[33,48804,44461],{"class":47},[33,48806,2635],{"class":72},[33,48808,2799],{"class":47},[33,48810,34297],{"class":72},[33,48812,44470],{"class":47},[33,48814,3018],{"class":72},[33,48816,2799],{"class":47},[33,48818,2623],{"class":72},[33,48820,44479],{"class":47},[33,48822,2623],{"class":72},[33,48824,40272],{"class":47},[33,48826,48827,48829,48831,48833,48835,48837,48839,48841,48843,48845,48847,48849,48851,48853,48855],{"class":35,"line":12009},[33,48828,44452],{"class":47},[33,48830,37095],{"class":72},[33,48832,2799],{"class":47},[33,48834,34297],{"class":72},[33,48836,44461],{"class":47},[33,48838,34297],{"class":72},[33,48840,2799],{"class":47},[33,48842,44382],{"class":72},[33,48844,44470],{"class":47},[33,48846,2623],{"class":72},[33,48848,2799],{"class":47},[33,48850,2635],{"class":72},[33,48852,44479],{"class":47},[33,48854,2629],{"class":72},[33,48856,40272],{"class":47},[33,48858,48859,48861,48863,48865,48867,48869,48871,48873,48875,48877,48879,48881,48883],{"class":35,"line":12033},[33,48860,40322],{"class":47},[33,48862,33105],{"class":289},[33,48864,57],{"class":39},[33,48866,730],{"class":72},[33,48868,2799],{"class":47},[33,48870,33160],{"class":289},[33,48872,57],{"class":39},[33,48874,725],{"class":72},[33,48876,2799],{"class":47},[33,48878,33114],{"class":289},[33,48880,57],{"class":39},[33,48882,720],{"class":72},[33,48884,226],{"class":47},[33,48886,48887],{"class":35,"line":12038},[33,48888,40351],{"class":47},[33,48890,48891,48893,48895,48897],{"class":35,"line":12043},[33,48892,33076],{"class":72},[33,48894,44554],{"class":47},[33,48896,57],{"class":39},[33,48898,40234],{"class":47},[33,48900,48901,48903,48905,48907,48909,48911,48913,48915,48917,48919,48921,48923,48925,48927,48929],{"class":35,"line":12048},[33,48902,44452],{"class":47},[33,48904,44565],{"class":72},[33,48906,2799],{"class":47},[33,48908,44382],{"class":72},[33,48910,44461],{"class":47},[33,48912,2635],{"class":72},[33,48914,2799],{"class":47},[33,48916,44578],{"class":72},[33,48918,44470],{"class":47},[33,48920,3018],{"class":72},[33,48922,2799],{"class":47},[33,48924,3024],{"class":72},[33,48926,44479],{"class":47},[33,48928,2629],{"class":72},[33,48930,40272],{"class":47},[33,48932,48933,48935,48937,48939,48941,48943,48945,48947,48949,48951,48953,48955,48957,48959,48961],{"class":35,"line":12057},[33,48934,44452],{"class":47},[33,48936,40682],{"class":72},[33,48938,2799],{"class":47},[33,48940,23286],{"class":72},[33,48942,44461],{"class":47},[33,48944,3035],{"class":72},[33,48946,2799],{"class":47},[33,48948,33730],{"class":72},[33,48950,44470],{"class":47},[33,48952,3213],{"class":72},[33,48954,2799],{"class":47},[33,48956,2629],{"class":72},[33,48958,44479],{"class":47},[33,48960,2629],{"class":72},[33,48962,40272],{"class":47},[33,48964,48965,48967,48969,48971,48973,48975,48977,48979,48981,48983,48985,48987,48989,48991,48993],{"class":35,"line":12062},[33,48966,44452],{"class":47},[33,48968,40682],{"class":72},[33,48970,2799],{"class":47},[33,48972,34297],{"class":72},[33,48974,44461],{"class":47},[33,48976,34297],{"class":72},[33,48978,2799],{"class":47},[33,48980,37095],{"class":72},[33,48982,44470],{"class":47},[33,48984,3213],{"class":72},[33,48986,2799],{"class":47},[33,48988,2629],{"class":72},[33,48990,44479],{"class":47},[33,48992,2629],{"class":72},[33,48994,40272],{"class":47},[33,48996,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025],{"class":35,"line":12068},[33,48998,44452],{"class":47},[33,49000,40682],{"class":72},[33,49002,2799],{"class":47},[33,49004,3035],{"class":72},[33,49006,44461],{"class":47},[33,49008,34297],{"class":72},[33,49010,2799],{"class":47},[33,49012,44675],{"class":72},[33,49014,44470],{"class":47},[33,49016,2623],{"class":72},[33,49018,2799],{"class":47},[33,49020,2629],{"class":72},[33,49022,44479],{"class":47},[33,49024,2629],{"class":72},[33,49026,40272],{"class":47},[33,49028,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057],{"class":35,"line":12089},[33,49030,44452],{"class":47},[33,49032,44696],{"class":72},[33,49034,2799],{"class":47},[33,49036,37095],{"class":72},[33,49038,44461],{"class":47},[33,49040,23286],{"class":72},[33,49042,2799],{"class":47},[33,49044,44709],{"class":72},[33,49046,44470],{"class":47},[33,49048,2623],{"class":72},[33,49050,2799],{"class":47},[33,49052,34297],{"class":72},[33,49054,44479],{"class":47},[33,49056,34297],{"class":72},[33,49058,40272],{"class":47},[33,49060,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085],{"class":35,"line":12095},[33,49062,40322],{"class":47},[33,49064,33105],{"class":289},[33,49066,57],{"class":39},[33,49068,730],{"class":72},[33,49070,2799],{"class":47},[33,49072,33160],{"class":289},[33,49074,57],{"class":39},[33,49076,725],{"class":72},[33,49078,2799],{"class":47},[33,49080,33114],{"class":289},[33,49082,57],{"class":39},[33,49084,720],{"class":72},[33,49086,226],{"class":47},[33,49088,49089],{"class":35,"line":12109},[33,49090,40351],{"class":47},[33,49092,49093,49095,49097,49099],{"class":35,"line":12115},[33,49094,33076],{"class":72},[33,49096,44762],{"class":47},[33,49098,57],{"class":39},[33,49100,40234],{"class":47},[33,49102,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125,49127,49129,49131],{"class":35,"line":12142},[33,49104,44452],{"class":47},[33,49106,44773],{"class":72},[33,49108,2799],{"class":47},[33,49110,37095],{"class":72},[33,49112,44461],{"class":47},[33,49114,23286],{"class":72},[33,49116,2799],{"class":47},[33,49118,44709],{"class":72},[33,49120,44470],{"class":47},[33,49122,2623],{"class":72},[33,49124,2799],{"class":47},[33,49126,34297],{"class":72},[33,49128,44479],{"class":47},[33,49130,34297],{"class":72},[33,49132,40272],{"class":47},[33,49134,49135,49137,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157,49159,49161,49163],{"class":35,"line":12151},[33,49136,44452],{"class":47},[33,49138,44773],{"class":72},[33,49140,2799],{"class":47},[33,49142,37165],{"class":72},[33,49144,44461],{"class":47},[33,49146,44382],{"class":72},[33,49148,2799],{"class":47},[33,49150,37165],{"class":72},[33,49152,44470],{"class":47},[33,49154,3024],{"class":72},[33,49156,2799],{"class":47},[33,49158,34297],{"class":72},[33,49160,44479],{"class":47},[33,49162,34297],{"class":72},[33,49164,40272],{"class":47},[33,49166,49167,49169,49171,49173,49175],{"class":35,"line":12157},[33,49168,44836],{"class":47},[33,49170,720],{"class":72},[33,49172,2799],{"class":47},[33,49174,720],{"class":72},[33,49176,44845],{"class":47},[33,49178,49179],{"class":35,"line":12165},[33,49180,41015],{"class":47},[33,49182,49183,49185,49187,49189,49191],{"class":35,"line":12170},[33,49184,41020],{"class":47},[33,49186,44856],{"class":72},[33,49188,2799],{"class":47},[33,49190,725],{"class":72},[33,49192,226],{"class":47},[33,49194,49195],{"class":35,"line":18842},[33,49196,40351],{"class":47},[33,49198,49199],{"class":35,"line":18848},[33,49200,44871],{"class":2487},[33,49202,49203,49205,49207,49209,49211],{"class":35,"line":18871},[33,49204,5658],{"class":39},[33,49206,41093],{"class":47},[33,49208,681],{"class":39},[33,49210,41098],{"class":72},[33,49212,41101],{"class":47},[33,49214,49215,49217,49219],{"class":35,"line":18877},[33,49216,6892],{"class":39},[33,49218,41113],{"class":72},[33,49220,41116],{"class":47},[33,49222,49223,49225,49227,49229,49231,49233,49235,49237,49239],{"class":35,"line":18900},[33,49224,41126],{"class":47},[33,49226,44898],{"class":289},[33,49228,57],{"class":39},[33,49230,44903],{"class":60},[33,49232,2799],{"class":47},[33,49234,41129],{"class":289},[33,49236,57],{"class":39},[33,49238,41134],{"class":60},[33,49240,226],{"class":47},[33,49242,49243],{"class":35,"line":18914},[33,49244,44918],{"class":2487},[33,49246,49247],{"class":35,"line":18934},[33,49248,44923],{"class":2487},[33,49250,49251],{"class":35,"line":18940},[33,49252,44928],{"class":2487},[33,49254,49255],{"class":35,"line":18951},[33,49256,44933],{"class":2487},[33,49258,49259],{"class":35,"line":18974},[33,49260,44938],{"class":2487},[33,49262,49263],{"class":35,"line":18996},[33,49264,44943],{"class":2487},[33,49266,49267,49269,49271,49273,49275,49277],{"class":35,"line":19001},[33,49268,41146],{"class":39},[33,49270,41149],{"class":47},[33,49272,599],{"class":39},[33,49274,41154],{"class":39},[33,49276,602],{"class":72},[33,49278,605],{"class":47},[33,49280,49281,49283,49285],{"class":35,"line":19007},[33,49282,41168],{"class":47},[33,49284,2617],{"class":72},[33,49286,226],{"class":47},[33,49288,49289,49291,49293],{"class":35,"line":19021},[33,49290,44970],{"class":39},[33,49292,41113],{"class":72},[33,49294,41187],{"class":47},[33,49296,49297,49299,49301,49303,49305],{"class":35,"line":19034},[33,49298,44979],{"class":47},[33,49300,2617],{"class":72},[33,49302,2799],{"class":47},[33,49304,41209],{"class":72},[33,49306,226],{"class":47},[33,49308,49309,49311,49313,49315,49317,49319],{"class":35,"line":19039},[33,49310,44992],{"class":39},[33,49312,41149],{"class":47},[33,49314,599],{"class":39},[33,49316,41154],{"class":39},[33,49318,602],{"class":72},[33,49320,605],{"class":47},[33,49322,49323,49325,49327],{"class":35,"line":19053},[33,49324,45007],{"class":47},[33,49326,2617],{"class":72},[33,49328,226],{"class":47},[33,49330,49331],{"class":35,"line":19058},[33,49332,37390],{"class":2487},[33,49334,49335,49337,49339],{"class":35,"line":19064},[33,49336,1603],{"class":39},[33,49338,33324],{"class":43},[33,49340,33327],{"class":47},[33,49342,49343,49345,49347,49349],{"class":35,"line":19069},[33,49344,33332],{"class":47},[33,49346,57],{"class":39},[33,49348,33054],{"class":72},[33,49350,45034],{"class":47},[33,49352,49353,49355,49357,49359],{"class":35,"line":19083},[33,49354,33332],{"class":47},[33,49356,57],{"class":39},[33,49358,33054],{"class":72},[33,49360,45045],{"class":47},[33,49362,49363,49365,49367,49369],{"class":35,"line":19088},[33,49364,33332],{"class":47},[33,49366,57],{"class":39},[33,49368,33054],{"class":72},[33,49370,45056],{"class":47},[33,49372,49373,49375,49377,49379],{"class":35,"line":19093},[33,49374,33332],{"class":47},[33,49376,57],{"class":39},[33,49378,33054],{"class":72},[33,49380,45067],{"class":47},[33,49382,49383,49385,49387,49389],{"class":35,"line":19107},[33,49384,33332],{"class":47},[33,49386,57],{"class":39},[33,49388,33054],{"class":72},[33,49390,45078],{"class":47},[33,49392,49393,49395],{"class":35,"line":19119},[33,49394,1614],{"class":39},[33,49396,33440],{"class":47},[33,49398,49399],{"class":35,"line":19124},[33,49400,100],{"emptyLinePlaceholder":99},[33,49402,49403],{"class":35,"line":19137},[33,49404,45093],{"class":2487},[33,49406,49407,49409,49411,49413,49415],{"class":35,"line":19142},[33,49408,3805],{"class":39},[33,49410,33451],{"class":72},[33,49412,5206],{"class":39},[33,49414,33456],{"class":60},[33,49416,605],{"class":47},[33,49418,49419,49421,49423,49425,49427,49429,49431,49433,49435],{"class":35,"line":19147},[33,49420,33468],{"class":47},[33,49422,57],{"class":39},[33,49424,32685],{"class":47},[33,49426,33475],{"class":60},[33,49428,3966],{"class":39},[33,49430,33480],{"class":47},[33,49432,3963],{"class":39},[33,49434,32710],{"class":60},[33,49436,226],{"class":47},[33,49438,49439,49441,49443],{"class":35,"line":19152},[33,49440,33520],{"class":47},[33,49442,57],{"class":39},[33,49444,45134],{"class":47},[33,49446,49447,49449,49451,49453,49455,49457,49459,49461],{"class":35,"line":19165},[33,49448,193],{"class":72},[33,49450,33532],{"class":47},[33,49452,720],{"class":72},[33,49454,2799],{"class":47},[33,49456,33730],{"class":72},[33,49458,2799],{"class":47},[33,49460,33730],{"class":72},[33,49462,33545],{"class":47},[24236,49464,49466],{"id":49465},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49468,49469],{},"计算图片的均值与方差，用于训练中归一化处理操作",[23,49471,49473],{"className":25,"code":49472,"language":27,"meta":28,"style":28},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[30,49474,49475,49480,49493,49498,49504,49509,49519,49523,49528,49538,49542,49547,49556,49573,49577,49582,49594,49606,49637,49646,49656,49666,49670,49675,49690,49694,49699,49704,49709,49719,49724,49749,49753,49758,49773,49777,49790,49794,49799,49804,49809,49814,49819,49829,49839,49862,49870,49878,49886,49890,49902,49906,49911,49915,49919,49926,49946,49970,49977,49991,49996,50001,50005,50019,50023,50035],{"__ignoreMap":28},[33,49476,49477],{"class":35,"line":36},[33,49478,49479],{"class":2487},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[33,49481,49482,49484,49487,49490],{"class":35,"line":51},[33,49483,32970],{"class":39},[33,49485,49486],{"class":72}," PIL",[33,49488,49489],{"class":39}," import",[33,49491,49492],{"class":47}," Image\n",[33,49494,49495],{"class":35,"line":64},[33,49496,49497],{"class":2487},"# os 用来处理文件夹和文件路径\n",[33,49499,49500,49502],{"class":35,"line":76},[33,49501,32627],{"class":39},[33,49503,47528],{"class":47},[33,49505,49506],{"class":35,"line":87},[33,49507,49508],{"class":2487},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[33,49510,49511,49513,49515,49517],{"class":35,"line":96},[33,49512,32627],{"class":39},[33,49514,33610],{"class":47},[33,49516,33613],{"class":39},[33,49518,33616],{"class":47},[33,49520,49521],{"class":35,"line":103},[33,49522,100],{"emptyLinePlaceholder":99},[33,49524,49525],{"class":35,"line":108},[33,49526,49527],{"class":2487},"# 文件夹路径，包含所有图片文件\n",[33,49529,49530,49533,49535],{"class":35,"line":119},[33,49531,49532],{"class":47},"folder_path ",[33,49534,57],{"class":39},[33,49536,49537],{"class":60}," 'data_cat_dog'\n",[33,49539,49540],{"class":35,"line":128},[33,49541,100],{"emptyLinePlaceholder":99},[33,49543,49544],{"class":35,"line":1753},[33,49545,49546],{"class":2487},"# 初始化累积变量\n",[33,49548,49549,49552,49554],{"class":35,"line":1763},[33,49550,49551],{"class":47},"total_pixels ",[33,49553,57],{"class":39},[33,49555,670],{"class":72},[33,49557,49558,49561,49563,49566,49568,49570],{"class":35,"line":1775},[33,49559,49560],{"class":47},"sum_normalized_pixel_values ",[33,49562,57],{"class":39},[33,49564,49565],{"class":47}," np.zeros(",[33,49567,730],{"class":72},[33,49569,48031],{"class":47},[33,49571,49572],{"class":2487},"# 如果是RGB图像，需要三个通道的均值和方差\n",[33,49574,49575],{"class":35,"line":1780},[33,49576,100],{"emptyLinePlaceholder":99},[33,49578,49579],{"class":35,"line":1785},[33,49580,49581],{"class":2487},"# 遍历文件夹中的图片文件\n",[33,49583,49584,49586,49589,49591],{"class":35,"line":1940},[33,49585,5282],{"class":39},[33,49587,49588],{"class":47}," root, dirs, files ",[33,49590,681],{"class":39},[33,49592,49593],{"class":47}," os.walk(folder_path):\n",[33,49595,49596,49598,49601,49603],{"class":35,"line":2183},[33,49597,675],{"class":39},[33,49599,49600],{"class":47}," filename ",[33,49602,681],{"class":39},[33,49604,49605],{"class":47}," files:\n",[33,49607,49608,49610,49613,49616,49618,49621,49623,49626,49628,49631,49634],{"class":35,"line":2208},[33,49609,2130],{"class":39},[33,49611,49612],{"class":47}," filename.endswith((",[33,49614,49615],{"class":60},"'.jpg'",[33,49617,245],{"class":47},[33,49619,49620],{"class":60},"'.jpeg'",[33,49622,245],{"class":47},[33,49624,49625],{"class":60},"'.png'",[33,49627,245],{"class":47},[33,49629,49630],{"class":60},"'.bmp'",[33,49632,49633],{"class":47},")):  ",[33,49635,49636],{"class":2487},"# 可根据实际情况添加其他格式\n",[33,49638,49639,49641,49643],{"class":35,"line":2234},[33,49640,47896],{"class":47},[33,49642,57],{"class":39},[33,49644,49645],{"class":47}," os.path.join(root, filename)\n",[33,49647,49648,49651,49653],{"class":35,"line":2239},[33,49649,49650],{"class":47},"            image ",[33,49652,57],{"class":39},[33,49654,49655],{"class":47}," Image.open(image_path)\n",[33,49657,49658,49661,49663],{"class":35,"line":2247},[33,49659,49660],{"class":47},"            image_array ",[33,49662,57],{"class":39},[33,49664,49665],{"class":47}," np.array(image)\n",[33,49667,49668],{"class":35,"line":2255},[33,49669,100],{"emptyLinePlaceholder":99},[33,49671,49672],{"class":35,"line":3992},[33,49673,49674],{"class":2487},"            # 归一化像素值到0-1之间\n",[33,49676,49677,49680,49682,49685,49687],{"class":35,"line":4009},[33,49678,49679],{"class":47},"            normalized_image_array ",[33,49681,57],{"class":39},[33,49683,49684],{"class":47}," image_array ",[33,49686,3001],{"class":39},[33,49688,49689],{"class":72}," 255.0\n",[33,49691,49692],{"class":35,"line":4014},[33,49693,100],{"emptyLinePlaceholder":99},[33,49695,49696],{"class":35,"line":4019},[33,49697,49698],{"class":2487},"            # print(image_path)\n",[33,49700,49701],{"class":35,"line":4024},[33,49702,49703],{"class":2487},"            # print(normalized_image_array.shape)\n",[33,49705,49706],{"class":35,"line":4038},[33,49707,49708],{"class":2487},"            # 累积归一化后的像素值和像素数量\n",[33,49710,49711,49714,49716],{"class":35,"line":4043},[33,49712,49713],{"class":47},"            total_pixels ",[33,49715,692],{"class":39},[33,49717,49718],{"class":47}," normalized_image_array.size\n",[33,49720,49721],{"class":35,"line":4834},[33,49722,49723],{"class":2487},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[33,49725,49726,49729,49731,49734,49737,49739,49741,49743,49745,49747],{"class":35,"line":4848},[33,49727,49728],{"class":47},"            sum_normalized_pixel_values ",[33,49730,692],{"class":39},[33,49732,49733],{"class":47}," np.sum(normalized_image_array, ",[33,49735,49736],{"class":289},"axis",[33,49738,57],{"class":39},[33,49740,133],{"class":47},[33,49742,2617],{"class":72},[33,49744,245],{"class":47},[33,49746,720],{"class":72},[33,49748,551],{"class":47},[33,49750,49751],{"class":35,"line":4856},[33,49752,100],{"emptyLinePlaceholder":99},[33,49754,49755],{"class":35,"line":4861},[33,49756,49757],{"class":2487},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[33,49759,49760,49763,49765,49768,49770],{"class":35,"line":4867},[33,49761,49762],{"class":47},"mean ",[33,49764,57],{"class":39},[33,49766,49767],{"class":47}," sum_normalized_pixel_values ",[33,49769,3001],{"class":39},[33,49771,49772],{"class":47}," total_pixels\n",[33,49774,49775],{"class":35,"line":4873},[33,49776,100],{"emptyLinePlaceholder":99},[33,49778,49779,49782,49784,49786,49788],{"class":35,"line":4878},[33,49780,49781],{"class":47},"sum_squared_diff ",[33,49783,57],{"class":39},[33,49785,49565],{"class":47},[33,49787,730],{"class":72},[33,49789,226],{"class":47},[33,49791,49792],{"class":35,"line":10194},[33,49793,100],{"emptyLinePlaceholder":99},[33,49795,49796],{"class":35,"line":10218},[33,49797,49798],{"class":2487},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[33,49800,49801],{"class":35,"line":10223},[33,49802,49803],{"class":2487},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[33,49805,49806],{"class":35,"line":10229},[33,49807,49808],{"class":2487},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[33,49810,49811],{"class":35,"line":10256},[33,49812,49813],{"class":2487},"# Image.open(image_path)：打开图片\n",[33,49815,49816],{"class":35,"line":10261},[33,49817,49818],{"class":2487},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[33,49820,49821,49823,49825,49827],{"class":35,"line":10267},[33,49822,5282],{"class":39},[33,49824,49588],{"class":47},[33,49826,681],{"class":39},[33,49828,49593],{"class":47},[33,49830,49831,49833,49835,49837],{"class":35,"line":10279},[33,49832,675],{"class":39},[33,49834,49600],{"class":47},[33,49836,681],{"class":39},[33,49838,49605],{"class":47},[33,49840,49841,49843,49845,49847,49849,49851,49853,49855,49857,49859],{"class":35,"line":10291},[33,49842,2130],{"class":39},[33,49844,49612],{"class":47},[33,49846,49615],{"class":60},[33,49848,245],{"class":47},[33,49850,49620],{"class":60},[33,49852,245],{"class":47},[33,49854,49625],{"class":60},[33,49856,245],{"class":47},[33,49858,49630],{"class":60},[33,49860,49861],{"class":47},")):\n",[33,49863,49864,49866,49868],{"class":35,"line":10303},[33,49865,47896],{"class":47},[33,49867,57],{"class":39},[33,49869,49645],{"class":47},[33,49871,49872,49874,49876],{"class":35,"line":11961},[33,49873,49650],{"class":47},[33,49875,57],{"class":39},[33,49877,49655],{"class":47},[33,49879,49880,49882,49884],{"class":35,"line":11986},[33,49881,49660],{"class":47},[33,49883,57],{"class":39},[33,49885,49665],{"class":47},[33,49887,49888],{"class":35,"line":12009},[33,49889,49674],{"class":2487},[33,49891,49892,49894,49896,49898,49900],{"class":35,"line":12033},[33,49893,49679],{"class":47},[33,49895,57],{"class":39},[33,49897,49684],{"class":47},[33,49899,3001],{"class":39},[33,49901,49689],{"class":72},[33,49903,49904],{"class":35,"line":12038},[33,49905,49703],{"class":2487},[33,49907,49908],{"class":35,"line":12043},[33,49909,49910],{"class":2487},"            # print(mean.shape)\n",[33,49912,49913],{"class":35,"line":12048},[33,49914,49698],{"class":2487},[33,49916,49917],{"class":35,"line":12057},[33,49918,100],{"emptyLinePlaceholder":99},[33,49920,49921,49924],{"class":35,"line":12062},[33,49922,49923],{"class":39},"            try",[33,49925,605],{"class":47},[33,49927,49928,49931,49933,49936,49938,49941,49943],{"class":35,"line":12068},[33,49929,49930],{"class":47},"                diff ",[33,49932,57],{"class":39},[33,49934,49935],{"class":47}," (normalized_image_array ",[33,49937,2949],{"class":39},[33,49939,49940],{"class":47}," mean) ",[33,49942,787],{"class":39},[33,49944,49945],{"class":72}," 2\n",[33,49947,49948,49951,49953,49956,49958,49960,49962,49964,49966,49968],{"class":35,"line":12089},[33,49949,49950],{"class":47},"                sum_squared_diff ",[33,49952,692],{"class":39},[33,49954,49955],{"class":47}," np.sum(diff, ",[33,49957,49736],{"class":289},[33,49959,57],{"class":39},[33,49961,133],{"class":47},[33,49963,2617],{"class":72},[33,49965,245],{"class":47},[33,49967,720],{"class":72},[33,49969,551],{"class":47},[33,49971,49972,49975],{"class":35,"line":12095},[33,49973,49974],{"class":39},"            except",[33,49976,605],{"class":47},[33,49978,49979,49982,49984,49986,49989],{"class":35,"line":12109},[33,49980,49981],{"class":72},"                print",[33,49983,133],{"class":47},[33,49985,198],{"class":39},[33,49987,49988],{"class":60},"\"捕获到自定义异常\"",[33,49990,226],{"class":47},[33,49992,49993],{"class":35,"line":12115},[33,49994,49995],{"class":2487},"            # diff = (normalized_image_array - mean) ** 2\n",[33,49997,49998],{"class":35,"line":12142},[33,49999,50000],{"class":2487},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[33,50002,50003],{"class":35,"line":12151},[33,50004,100],{"emptyLinePlaceholder":99},[33,50006,50007,50010,50012,50015,50017],{"class":35,"line":12157},[33,50008,50009],{"class":47},"variance ",[33,50011,57],{"class":39},[33,50013,50014],{"class":47}," sum_squared_diff ",[33,50016,3001],{"class":39},[33,50018,49772],{"class":47},[33,50020,50021],{"class":35,"line":12165},[33,50022,100],{"emptyLinePlaceholder":99},[33,50024,50025,50027,50029,50032],{"class":35,"line":12170},[33,50026,122],{"class":72},[33,50028,133],{"class":47},[33,50030,50031],{"class":60},"\"Mean:\"",[33,50033,50034],{"class":47},", mean)\n",[33,50036,50037,50039,50041,50044],{"class":35,"line":18842},[33,50038,122],{"class":72},[33,50040,133],{"class":47},[33,50042,50043],{"class":60},"\"Variance:\"",[33,50045,50046],{"class":47},", variance)\n",[23,50048,50050],{"className":25,"code":50049,"language":27,"meta":28,"style":28},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[30,50051,50052,50058,50064,50074,50080,50090,50104,50114,50124,50134,50138,50148,50158,50162,50166,50174,50179,50184,50203,50207,50212,50217,50222,50227,50268,50273,50283,50288,50301,50306,50311,50316,50321,50326,50330,50335,50340,50362,50366,50398,50412,50422,50432,50436,50446,50460,50470,50480,50490,50496,50500,50504,50508,50512,50516,50524,50544,50548,50552,50556,50560,50576,50580,50584,50592,50596,50600,50608,50612,50616,50620,50628,50632,50636,50640,50648,50652,50660,50664,50672,50676,50684,50688,50696,50700,50704,50712,50716,50720,50732,50756,50770,50774,50778,50782,50790,50794,50802,50806,50814,50818,50826,50830,50838,50842,50850,50854,50866,50870,50878,50882,50890,50894,50898,50902,50906,50914,50918,50934,50938,50946,50950,50954,50958,50962,50966,50970,50974,50990,50994,51006,51010,51022,51026,51038,51042,51050,51054,51062,51066,51070,51074,51080,51084,51092,51096,51112,51116,51124,51128,51144,51156,51160,51172,51176,51180,51188,51192,51196,51204,51208,51216,51220,51228,51232,51236,51278,51320,51324,51328,51344,51348,51364,51368,51372,51380,51384,51388,51400,51438,51442,51446,51454,51458,51472,51482,51488,51494,51500,51506,51510,51514,51520,51524,51528,51536,51540,51558,51562,51566,51570,51586,51590,51594,51598,51602,51606,51626,51646,51650,51654,51658,51666,51674,51678,51694,51714,51734,51738,51743,51752,51761,51766,51771,51776,51789,51794,51803,51812,51829],{"__ignoreMap":28},[33,50053,50054,50056],{"class":35,"line":36},[33,50055,32627],{"class":39},[33,50057,34051],{"class":47},[33,50059,50060,50062],{"class":35,"line":51},[33,50061,32627],{"class":39},[33,50063,34058],{"class":47},[33,50065,50066,50068,50070,50072],{"class":35,"line":64},[33,50067,32627],{"class":39},[33,50069,34069],{"class":47},[33,50071,33613],{"class":39},[33,50073,34074],{"class":47},[33,50075,50076,50078],{"class":35,"line":76},[33,50077,32627],{"class":39},[33,50079,32630],{"class":47},[33,50081,50082,50084,50086,50088],{"class":35,"line":87},[33,50083,32970],{"class":39},[33,50085,33645],{"class":47},[33,50087,32627],{"class":39},[33,50089,34091],{"class":47},[33,50091,50092,50094,50096,50098,50101],{"class":35,"line":96},[33,50093,32970],{"class":39},[33,50095,33598],{"class":47},[33,50097,32627],{"class":39},[33,50099,50100],{"class":47}," ImageFolder ",[33,50102,50103],{"class":2487},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[33,50105,50106,50108,50110,50112],{"class":35,"line":103},[33,50107,32970],{"class":39},[33,50109,33628],{"class":47},[33,50111,32627],{"class":39},[33,50113,33633],{"class":47},[33,50115,50116,50118,50120,50122],{"class":35,"line":108},[33,50117,32627],{"class":39},[33,50119,33645],{"class":47},[33,50121,33613],{"class":39},[33,50123,33650],{"class":47},[33,50125,50126,50128,50130,50132],{"class":35,"line":119},[33,50127,32627],{"class":39},[33,50129,33662],{"class":47},[33,50131,33613],{"class":39},[33,50133,33667],{"class":47},[33,50135,50136],{"class":35,"line":128},[33,50137,34136],{"class":2487},[33,50139,50140,50142,50144,50146],{"class":35,"line":1753},[33,50141,32970],{"class":39},[33,50143,34143],{"class":47},[33,50145,32627],{"class":39},[33,50147,45254],{"class":47},[33,50149,50150,50152,50154,50156],{"class":35,"line":1763},[33,50151,32970],{"class":39},[33,50153,32973],{"class":47},[33,50155,32627],{"class":39},[33,50157,32978],{"class":47},[33,50159,50160],{"class":35,"line":1775},[33,50161,100],{"emptyLinePlaceholder":99},[33,50163,50164],{"class":35,"line":1780},[33,50165,34171],{"class":2487},[33,50167,50168,50170,50172],{"class":35,"line":1785},[33,50169,40],{"class":39},[33,50171,34178],{"class":43},[33,50173,48],{"class":47},[33,50175,50176],{"class":35,"line":1940},[33,50177,50178],{"class":2487},"    # 导入自己的数据集，并进行数据处理\n",[33,50180,50181],{"class":35,"line":2183},[33,50182,50183],{"class":2487},"    # 定义数据集的路径\n",[33,50185,50186,50189,50191,50193,50195,50197,50201],{"class":35,"line":2208},[33,50187,50188],{"class":72},"    ROOT_PATH",[33,50190,57],{"class":39},[33,50192,3085],{"class":39},[33,50194,397],{"class":60},[33,50196,2975],{"class":72},[33,50198,50200],{"class":50199},"sA_wV","\u002Fdata\u002Ftrain",[33,50202,27372],{"class":60},[33,50204,50205],{"class":35,"line":2234},[33,50206,100],{"emptyLinePlaceholder":99},[33,50208,50209],{"class":35,"line":2239},[33,50210,50211],{"class":2487},"    # 定义归一化方法\n",[33,50213,50214],{"class":35,"line":2247},[33,50215,50216],{"class":2487},"    # 这里需要先计算一下数据集的均值和方差\n",[33,50218,50219],{"class":35,"line":2255},[33,50220,50221],{"class":2487},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[33,50223,50224],{"class":35,"line":3992},[33,50225,50226],{"class":2487},"    # 第一个参数是均值，第二个参数是方差\n",[33,50228,50229,50232,50234,50237,50240,50242,50245,50247,50250,50253,50256,50258,50261,50263,50266],{"class":35,"line":4009},[33,50230,50231],{"class":47},"    normalize",[33,50233,57],{"class":39},[33,50235,50236],{"class":47},"transforms.Normalize([",[33,50238,50239],{"class":72},"0.162",[33,50241,2799],{"class":47},[33,50243,50244],{"class":72},"0.151",[33,50246,2799],{"class":47},[33,50248,50249],{"class":72},"0.138",[33,50251,50252],{"class":47},"],[",[33,50254,50255],{"class":72},"0.058",[33,50257,2799],{"class":47},[33,50259,50260],{"class":72},"0.052",[33,50262,2799],{"class":47},[33,50264,50265],{"class":72},"0.048",[33,50267,6907],{"class":47},[33,50269,50270],{"class":35,"line":4014},[33,50271,50272],{"class":2487},"    # 定义数据集处理方法变量\n",[33,50274,50275,50278,50280],{"class":35,"line":4019},[33,50276,50277],{"class":47},"    train_transform",[33,50279,57],{"class":39},[33,50281,50282],{"class":47},"transforms.Compose([\n",[33,50284,50285],{"class":35,"line":4024},[33,50286,50287],{"class":2487},"        # 调整图像大小为224*224\n",[33,50289,50290,50293,50295,50297,50299],{"class":35,"line":4038},[33,50291,50292],{"class":47},"        transforms.Resize((",[33,50294,33730],{"class":72},[33,50296,2799],{"class":47},[33,50298,33730],{"class":72},[33,50300,44845],{"class":47},[33,50302,50303],{"class":35,"line":4043},[33,50304,50305],{"class":2487},"        # 将图像转换为张量\n",[33,50307,50308],{"class":35,"line":4834},[33,50309,50310],{"class":47},"        transforms.ToTensor(),\n",[33,50312,50313],{"class":35,"line":4848},[33,50314,50315],{"class":47},"        normalize])\n",[33,50317,50318],{"class":35,"line":4856},[33,50319,50320],{"class":2487},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[33,50322,50323],{"class":35,"line":4861},[33,50324,50325],{"class":2487},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[33,50327,50328],{"class":35,"line":4867},[33,50329,100],{"emptyLinePlaceholder":99},[33,50331,50332],{"class":35,"line":4873},[33,50333,50334],{"class":2487},"    # 加载数据集\n",[33,50336,50337],{"class":35,"line":4878},[33,50338,50339],{"class":2487},"    # 传入数据集路径与处理方法\n",[33,50341,50342,50344,50346,50349,50352,50354,50357,50359],{"class":35,"line":10194},[33,50343,34185],{"class":47},[33,50345,57],{"class":39},[33,50347,50348],{"class":47},"ImageFolder(",[33,50350,50351],{"class":72},"ROOT_PATH",[33,50353,2799],{"class":47},[33,50355,50356],{"class":289},"transform",[33,50358,57],{"class":39},[33,50360,50361],{"class":47},"train_transform)\n",[33,50363,50364],{"class":35,"line":10218},[33,50365,100],{"emptyLinePlaceholder":99},[33,50367,50368,50370,50372,50374,50376,50378,50380,50382,50384,50386,50388,50390,50392,50394,50396],{"class":35,"line":10223},[33,50369,34237],{"class":47},[33,50371,57],{"class":39},[33,50373,34242],{"class":47},[33,50375,34245],{"class":72},[33,50377,133],{"class":47},[33,50379,34250],{"class":72},[33,50381,657],{"class":39},[33,50383,9604],{"class":72},[33,50385,34257],{"class":47},[33,50387,34245],{"class":72},[33,50389,133],{"class":47},[33,50391,34264],{"class":72},[33,50393,657],{"class":39},[33,50395,9604],{"class":72},[33,50397,34271],{"class":47},[33,50399,50400,50402,50404,50406,50408,50410],{"class":35,"line":10229},[33,50401,34276],{"class":47},[33,50403,57],{"class":39},[33,50405,34281],{"class":47},[33,50407,33766],{"class":289},[33,50409,57],{"class":39},[33,50411,33771],{"class":47},[33,50413,50414,50416,50418,50420],{"class":35,"line":10256},[33,50415,34292],{"class":289},[33,50417,57],{"class":39},[33,50419,2623],{"class":72},[33,50421,33696],{"class":47},[33,50423,50424,50426,50428,50430],{"class":35,"line":10261},[33,50425,34304],{"class":289},[33,50427,57],{"class":39},[33,50429,1190],{"class":72},[33,50431,33696],{"class":47},[33,50433,50434],{"class":35,"line":10267},[33,50435,34315],{"class":2487},[33,50437,50438,50440,50442,50444],{"class":35,"line":10279},[33,50439,34320],{"class":289},[33,50441,57],{"class":39},[33,50443,2816],{"class":72},[33,50445,226],{"class":47},[33,50447,50448,50450,50452,50454,50456,50458],{"class":35,"line":10291},[33,50449,34331],{"class":47},[33,50451,57],{"class":39},[33,50453,33763],{"class":47},[33,50455,33766],{"class":289},[33,50457,57],{"class":39},[33,50459,34342],{"class":47},[33,50461,50462,50464,50466,50468],{"class":35,"line":10303},[33,50463,34347],{"class":289},[33,50465,57],{"class":39},[33,50467,2623],{"class":72},[33,50469,33696],{"class":47},[33,50471,50472,50474,50476,50478],{"class":35,"line":11961},[33,50473,34358],{"class":289},[33,50475,57],{"class":39},[33,50477,1190],{"class":72},[33,50479,33696],{"class":47},[33,50481,50482,50484,50486,50488],{"class":35,"line":11986},[33,50483,34369],{"class":289},[33,50485,57],{"class":39},[33,50487,2816],{"class":72},[33,50489,226],{"class":47},[33,50491,50492,50494],{"class":35,"line":12009},[33,50493,90],{"class":39},[33,50495,34382],{"class":47},[33,50497,50498],{"class":35,"line":12033},[33,50499,100],{"emptyLinePlaceholder":99},[33,50501,50502],{"class":35,"line":12038},[33,50503,34391],{"class":2487},[33,50505,50506],{"class":35,"line":12043},[33,50507,34396],{"class":2487},[33,50509,50510],{"class":35,"line":12048},[33,50511,100],{"emptyLinePlaceholder":99},[33,50513,50514],{"class":35,"line":12057},[33,50515,34405],{"class":2487},[33,50517,50518,50520,50522],{"class":35,"line":12062},[33,50519,40],{"class":39},[33,50521,34412],{"class":43},[33,50523,34415],{"class":47},[33,50525,50526,50528,50530,50532,50534,50536,50538,50540,50542],{"class":35,"line":12068},[33,50527,33468],{"class":47},[33,50529,57],{"class":39},[33,50531,32685],{"class":47},[33,50533,33475],{"class":60},[33,50535,3966],{"class":39},[33,50537,33480],{"class":47},[33,50539,3963],{"class":39},[33,50541,34434],{"class":60},[33,50543,226],{"class":47},[33,50545,50546],{"class":35,"line":12089},[33,50547,100],{"emptyLinePlaceholder":99},[33,50549,50550],{"class":35,"line":12095},[33,50551,34449],{"class":2487},[33,50553,50554],{"class":35,"line":12109},[33,50555,34454],{"class":2487},[33,50557,50558],{"class":35,"line":12115},[33,50559,34459],{"class":2487},[33,50561,50562,50564,50566,50568,50570,50572,50574],{"class":35,"line":12142},[33,50563,34464],{"class":47},[33,50565,57],{"class":39},[33,50567,34469],{"class":47},[33,50569,34472],{"class":289},[33,50571,57],{"class":39},[33,50573,34477],{"class":72},[33,50575,226],{"class":47},[33,50577,50578],{"class":35,"line":12151},[33,50579,100],{"emptyLinePlaceholder":99},[33,50581,50582],{"class":35,"line":12157},[33,50583,34488],{"class":2487},[33,50585,50586,50588,50590],{"class":35,"line":12165},[33,50587,34493],{"class":47},[33,50589,57],{"class":39},[33,50591,34498],{"class":47},[33,50593,50594],{"class":35,"line":12170},[33,50595,100],{"emptyLinePlaceholder":99},[33,50597,50598],{"class":35,"line":18842},[33,50599,34507],{"class":2487},[33,50601,50602,50604,50606],{"class":35,"line":18848},[33,50603,33520],{"class":47},[33,50605,57],{"class":39},[33,50607,34516],{"class":47},[33,50609,50610],{"class":35,"line":18871},[33,50611,34521],{"class":2487},[33,50613,50614],{"class":35,"line":18877},[33,50615,34526],{"class":2487},[33,50617,50618],{"class":35,"line":18900},[33,50619,34531],{"class":2487},[33,50621,50622,50624,50626],{"class":35,"line":18914},[33,50623,34536],{"class":47},[33,50625,57],{"class":39},[33,50627,34541],{"class":47},[33,50629,50630],{"class":35,"line":18934},[33,50631,100],{"emptyLinePlaceholder":99},[33,50633,50634],{"class":35,"line":18940},[33,50635,34554],{"class":2487},[33,50637,50638],{"class":35,"line":18951},[33,50639,34559],{"class":2487},[33,50641,50642,50644,50646],{"class":35,"line":18974},[33,50643,34564],{"class":47},[33,50645,57],{"class":39},[33,50647,34569],{"class":72},[33,50649,50650],{"class":35,"line":18996},[33,50651,34574],{"class":2487},[33,50653,50654,50656,50658],{"class":35,"line":19001},[33,50655,34579],{"class":47},[33,50657,57],{"class":39},[33,50659,34584],{"class":47},[33,50661,50662],{"class":35,"line":19007},[33,50663,34589],{"class":2487},[33,50665,50666,50668,50670],{"class":35,"line":19021},[33,50667,34594],{"class":47},[33,50669,57],{"class":39},[33,50671,34584],{"class":47},[33,50673,50674],{"class":35,"line":19034},[33,50675,34603],{"class":2487},[33,50677,50678,50680,50682],{"class":35,"line":19039},[33,50679,34608],{"class":47},[33,50681,57],{"class":39},[33,50683,34584],{"class":47},[33,50685,50686],{"class":35,"line":19053},[33,50687,34617],{"class":2487},[33,50689,50690,50692,50694],{"class":35,"line":19058},[33,50691,34622],{"class":47},[33,50693,57],{"class":39},[33,50695,34584],{"class":47},[33,50697,50698],{"class":35,"line":19064},[33,50699,100],{"emptyLinePlaceholder":99},[33,50701,50702],{"class":35,"line":19069},[33,50703,34635],{"class":2487},[33,50705,50706,50708,50710],{"class":35,"line":19083},[33,50707,34640],{"class":47},[33,50709,57],{"class":39},[33,50711,34645],{"class":47},[33,50713,50714],{"class":35,"line":19088},[33,50715,100],{"emptyLinePlaceholder":99},[33,50717,50718],{"class":35,"line":19093},[33,50719,34658],{"class":2487},[33,50721,50722,50724,50726,50728,50730],{"class":35,"line":19107},[33,50723,675],{"class":39},[33,50725,34665],{"class":47},[33,50727,681],{"class":39},[33,50729,34670],{"class":72},[33,50731,34673],{"class":47},[33,50733,50734,50736,50738,50740,50742,50744,50746,50748,50750,50752,50754],{"class":35,"line":19119},[33,50735,807],{"class":72},[33,50737,133],{"class":47},[33,50739,34682],{"class":60},[33,50741,34685],{"class":72},[33,50743,3001],{"class":60},[33,50745,34685],{"class":72},[33,50747,397],{"class":60},[33,50749,34694],{"class":47},[33,50751,2949],{"class":39},[33,50753,720],{"class":72},[33,50755,551],{"class":47},[33,50757,50758,50760,50762,50764,50766,50768],{"class":35,"line":19124},[33,50759,807],{"class":72},[33,50761,133],{"class":47},[33,50763,34709],{"class":60},[33,50765,657],{"class":39},[33,50767,1279],{"class":72},[33,50769,226],{"class":47},[33,50771,50772],{"class":35,"line":19137},[33,50773,100],{"emptyLinePlaceholder":99},[33,50775,50776],{"class":35,"line":19142},[33,50777,34724],{"class":2487},[33,50779,50780],{"class":35,"line":19147},[33,50781,34729],{"class":2487},[33,50783,50784,50786,50788],{"class":35,"line":19152},[33,50785,34734],{"class":47},[33,50787,57],{"class":39},[33,50789,34569],{"class":72},[33,50791,50792],{"class":35,"line":19165},[33,50793,34743],{"class":2487},[33,50795,50796,50798,50800],{"class":35,"line":19170},[33,50797,34748],{"class":47},[33,50799,57],{"class":39},[33,50801,5342],{"class":72},[33,50803,50804],{"class":35,"line":34859},[33,50805,34757],{"class":2487},[33,50807,50808,50810,50812],{"class":35,"line":34865},[33,50809,34762],{"class":47},[33,50811,57],{"class":39},[33,50813,34569],{"class":72},[33,50815,50816],{"class":35,"line":34871},[33,50817,34771],{"class":2487},[33,50819,50820,50822,50824],{"class":35,"line":34877},[33,50821,34776],{"class":47},[33,50823,57],{"class":39},[33,50825,5342],{"class":72},[33,50827,50828],{"class":35,"line":34883},[33,50829,34785],{"class":2487},[33,50831,50832,50834,50836],{"class":35,"line":34894},[33,50833,34790],{"class":47},[33,50835,57],{"class":39},[33,50837,5342],{"class":72},[33,50839,50840],{"class":35,"line":34900},[33,50841,34799],{"class":2487},[33,50843,50844,50846,50848],{"class":35,"line":34920},[33,50845,34804],{"class":47},[33,50847,57],{"class":39},[33,50849,5342],{"class":72},[33,50851,50852],{"class":35,"line":34926},[33,50853,34813],{"class":2487},[33,50855,50856,50858,50860,50862,50864],{"class":35,"line":34937},[33,50857,5658],{"class":39},[33,50859,33830],{"class":47},[33,50861,681],{"class":39},[33,50863,33835],{"class":72},[33,50865,34826],{"class":47},[33,50867,50868],{"class":35,"line":34943},[33,50869,34831],{"class":2487},[33,50871,50872,50874,50876],{"class":35,"line":34949},[33,50873,34836],{"class":47},[33,50875,57],{"class":39},[33,50877,34841],{"class":47},[33,50879,50880],{"class":35,"line":34955},[33,50881,34846],{"class":2487},[33,50883,50884,50886,50888],{"class":35,"line":34961},[33,50885,34851],{"class":47},[33,50887,57],{"class":39},[33,50889,34856],{"class":47},[33,50891,50892],{"class":35,"line":34967},[33,50893,34862],{"class":2487},[33,50895,50896],{"class":35,"line":34973},[33,50897,34868],{"class":47},[33,50899,50900],{"class":35,"line":34979},[33,50901,34874],{"class":2487},[33,50903,50904],{"class":35,"line":34999},[33,50905,34880],{"class":2487},[33,50907,50908,50910,50912],{"class":35,"line":35005},[33,50909,34886],{"class":47},[33,50911,57],{"class":39},[33,50913,34891],{"class":47},[33,50915,50916],{"class":35,"line":35021},[33,50917,34897],{"class":2487},[33,50919,50920,50922,50924,50926,50928,50930,50932],{"class":35,"line":35027},[33,50921,34903],{"class":47},[33,50923,57],{"class":39},[33,50925,34908],{"class":47},[33,50927,34911],{"class":289},[33,50929,57],{"class":39},[33,50931,720],{"class":72},[33,50933,226],{"class":47},[33,50935,50936],{"class":35,"line":35041},[33,50937,34923],{"class":2487},[33,50939,50940,50942,50944],{"class":35,"line":35047},[33,50941,34929],{"class":47},[33,50943,57],{"class":39},[33,50945,34934],{"class":47},[33,50947,50948],{"class":35,"line":35062},[33,50949,34940],{"class":2487},[33,50951,50952],{"class":35,"line":35068},[33,50953,34946],{"class":47},[33,50955,50956],{"class":35,"line":35077},[33,50957,34952],{"class":2487},[33,50959,50960],{"class":35,"line":35083},[33,50961,34958],{"class":47},[33,50963,50964],{"class":35,"line":35092},[33,50965,34964],{"class":2487},[33,50967,50968],{"class":35,"line":35098},[33,50969,34970],{"class":47},[33,50971,50972],{"class":35,"line":35104},[33,50973,34976],{"class":2487},[33,50975,50976,50978,50980,50982,50984,50986,50988],{"class":35,"line":35113},[33,50977,34982],{"class":47},[33,50979,692],{"class":39},[33,50981,34987],{"class":47},[33,50983,657],{"class":39},[33,50985,34992],{"class":47},[33,50987,2617],{"class":72},[33,50989,226],{"class":47},[33,50991,50992],{"class":35,"line":35119},[33,50993,35002],{"class":2487},[33,50995,50996,50998,51000,51002,51004],{"class":35,"line":35130},[33,50997,35008],{"class":47},[33,50999,692],{"class":39},[33,51001,35013],{"class":47},[33,51003,5206],{"class":39},[33,51005,35018],{"class":47},[33,51007,51008],{"class":35,"line":35136},[33,51009,35024],{"class":2487},[33,51011,51012,51014,51016,51018,51020],{"class":35,"line":35155},[33,51013,35030],{"class":47},[33,51015,692],{"class":39},[33,51017,34992],{"class":47},[33,51019,2617],{"class":72},[33,51021,226],{"class":47},[33,51023,51024],{"class":35,"line":35161},[33,51025,35044],{"class":2487},[33,51027,51028,51030,51032,51034,51036],{"class":35,"line":35172},[33,51029,5658],{"class":39},[33,51031,35052],{"class":47},[33,51033,681],{"class":39},[33,51035,33835],{"class":72},[33,51037,35059],{"class":47},[33,51039,51040],{"class":35,"line":35178},[33,51041,35065],{"class":2487},[33,51043,51044,51046,51048],{"class":35,"line":35198},[33,51045,34836],{"class":47},[33,51047,57],{"class":39},[33,51049,34841],{"class":47},[33,51051,51052],{"class":35,"line":35214},[33,51053,35080],{"class":2487},[33,51055,51056,51058,51060],{"class":35,"line":35220},[33,51057,34851],{"class":47},[33,51059,57],{"class":39},[33,51061,34856],{"class":47},[33,51063,51064],{"class":35,"line":35234},[33,51065,35095],{"class":2487},[33,51067,51068],{"class":35,"line":35240},[33,51069,35101],{"class":47},[33,51071,51072],{"class":35,"line":35246},[33,51073,38581],{"class":2487},[33,51075,51076,51078],{"class":35,"line":35257},[33,51077,35107],{"class":39},[33,51079,35110],{"class":47},[33,51081,51082],{"class":35,"line":35263},[33,51083,35116],{"class":2487},[33,51085,51086,51088,51090],{"class":35,"line":35269},[33,51087,38596],{"class":47},[33,51089,57],{"class":39},[33,51091,34891],{"class":47},[33,51093,51094],{"class":35,"line":35279},[33,51095,35133],{"class":2487},[33,51097,51098,51100,51102,51104,51106,51108,51110],{"class":35,"line":35285},[33,51099,38609],{"class":47},[33,51101,57],{"class":39},[33,51103,34908],{"class":47},[33,51105,34911],{"class":289},[33,51107,57],{"class":39},[33,51109,720],{"class":72},[33,51111,226],{"class":47},[33,51113,51114],{"class":35,"line":35296},[33,51115,35158],{"class":2487},[33,51117,51118,51120,51122],{"class":35,"line":35302},[33,51119,38630],{"class":47},[33,51121,57],{"class":39},[33,51123,34934],{"class":47},[33,51125,51126],{"class":35,"line":35312},[33,51127,35175],{"class":2487},[33,51129,51130,51132,51134,51136,51138,51140,51142],{"class":35,"line":35317},[33,51131,38643],{"class":47},[33,51133,692],{"class":39},[33,51135,38648],{"class":47},[33,51137,657],{"class":39},[33,51139,34992],{"class":47},[33,51141,2617],{"class":72},[33,51143,226],{"class":47},[33,51145,51146,51148,51150,51152,51154],{"class":35,"line":35323},[33,51147,38661],{"class":47},[33,51149,692],{"class":39},[33,51151,35013],{"class":47},[33,51153,5206],{"class":39},[33,51155,35018],{"class":47},[33,51157,51158],{"class":35,"line":35372},[33,51159,38674],{"class":2487},[33,51161,51162,51164,51166,51168,51170],{"class":35,"line":35419},[33,51163,38679],{"class":47},[33,51165,692],{"class":39},[33,51167,34992],{"class":47},[33,51169,2617],{"class":72},[33,51171,226],{"class":47},[33,51173,51174],{"class":35,"line":35424},[33,51175,35237],{"class":2487},[33,51177,51178],{"class":35,"line":35430},[33,51179,35243],{"class":2487},[33,51181,51182,51184,51186],{"class":35,"line":35449},[33,51183,35249],{"class":47},[33,51185,3001],{"class":39},[33,51187,35254],{"class":47},[33,51189,51190],{"class":35,"line":35455},[33,51191,35260],{"class":2487},[33,51193,51194],{"class":35,"line":35474},[33,51195,35266],{"class":2487},[33,51197,51198,51200,51202],{"class":35,"line":35480},[33,51199,35272],{"class":47},[33,51201,3001],{"class":39},[33,51203,35254],{"class":47},[33,51205,51206],{"class":35,"line":35486},[33,51207,35282],{"class":2487},[33,51209,51210,51212,51214],{"class":35,"line":35496},[33,51211,35288],{"class":47},[33,51213,3001],{"class":39},[33,51215,35293],{"class":47},[33,51217,51218],{"class":35,"line":35501},[33,51219,35299],{"class":2487},[33,51221,51222,51224,51226],{"class":35,"line":35507},[33,51223,35305],{"class":47},[33,51225,3001],{"class":39},[33,51227,35293],{"class":47},[33,51229,51230],{"class":35,"line":35523},[33,51231,100],{"emptyLinePlaceholder":99},[33,51233,51234],{"class":35,"line":35568},[33,51235,35320],{"class":2487},[33,51237,51238,51240,51242,51244,51246,51248,51250,51252,51254,51256,51258,51260,51262,51264,51266,51268,51270,51272,51274,51276],{"class":35,"line":35574},[33,51239,807],{"class":72},[33,51241,133],{"class":47},[33,51243,5847],{"class":60},[33,51245,34685],{"class":72},[33,51247,35334],{"class":60},[33,51249,204],{"class":72},[33,51251,35339],{"class":39},[33,51253,210],{"class":72},[33,51255,35344],{"class":60},[33,51257,204],{"class":72},[33,51259,35339],{"class":39},[33,51261,210],{"class":72},[33,51263,5847],{"class":60},[33,51265,35355],{"class":47},[33,51267,2949],{"class":39},[33,51269,720],{"class":72},[33,51271,35362],{"class":47},[33,51273,2949],{"class":39},[33,51275,720],{"class":72},[33,51277,35369],{"class":47},[33,51279,51280,51282,51284,51286,51288,51290,51292,51294,51296,51298,51300,51302,51304,51306,51308,51310,51312,51314,51316,51318],{"class":35,"line":35580},[33,51281,807],{"class":72},[33,51283,133],{"class":47},[33,51285,5847],{"class":60},[33,51287,34685],{"class":72},[33,51289,35383],{"class":60},[33,51291,204],{"class":72},[33,51293,35339],{"class":39},[33,51295,210],{"class":72},[33,51297,35392],{"class":60},[33,51299,204],{"class":72},[33,51301,35339],{"class":39},[33,51303,210],{"class":72},[33,51305,5847],{"class":60},[33,51307,35403],{"class":47},[33,51309,2949],{"class":39},[33,51311,720],{"class":72},[33,51313,35410],{"class":47},[33,51315,2949],{"class":39},[33,51317,720],{"class":72},[33,51319,35369],{"class":47},[33,51321,51322],{"class":35,"line":35586},[33,51323,100],{"emptyLinePlaceholder":99},[33,51325,51326],{"class":35,"line":35597},[33,51327,35427],{"class":2487},[33,51329,51330,51332,51334,51336,51338,51340,51342],{"class":35,"line":35603},[33,51331,2130],{"class":39},[33,51333,35435],{"class":47},[33,51335,2949],{"class":39},[33,51337,720],{"class":72},[33,51339,3348],{"class":47},[33,51341,3367],{"class":39},[33,51343,35446],{"class":47},[33,51345,51346],{"class":35,"line":35609},[33,51347,35452],{"class":2487},[33,51349,51350,51352,51354,51356,51358,51360,51362],{"class":35,"line":35615},[33,51351,35458],{"class":47},[33,51353,2471],{"class":72},[33,51355,57],{"class":39},[33,51357,35465],{"class":47},[33,51359,2949],{"class":39},[33,51361,720],{"class":72},[33,51363,919],{"class":47},[33,51365,51366],{"class":35,"line":35633},[33,51367,35477],{"class":2487},[33,51369,51370],{"class":35,"line":35647},[33,51371,35483],{"class":2487},[33,51373,51374,51376,51378],{"class":35,"line":35656},[33,51375,35489],{"class":47},[33,51377,57],{"class":39},[33,51379,34541],{"class":47},[33,51381,51382],{"class":35,"line":35665},[33,51383,100],{"emptyLinePlaceholder":99},[33,51385,51386],{"class":35,"line":35674},[33,51387,35504],{"class":2487},[33,51389,51390,51392,51394,51396,51398],{"class":35,"line":35683},[33,51391,35510],{"class":47},[33,51393,57],{"class":39},[33,51395,35515],{"class":47},[33,51397,2949],{"class":39},[33,51399,35520],{"class":47},[33,51401,51402,51404,51406,51408,51410,51412,51414,51416,51418,51420,51422,51424,51426,51428,51430,51432,51434,51436],{"class":35,"line":35689},[33,51403,807],{"class":72},[33,51405,133],{"class":47},[33,51407,35530],{"class":60},[33,51409,204],{"class":72},[33,51411,35535],{"class":39},[33,51413,210],{"class":72},[33,51415,2961],{"class":60},[33,51417,204],{"class":72},[33,51419,35535],{"class":39},[33,51421,210],{"class":72},[33,51423,35548],{"class":60},[33,51425,35551],{"class":47},[33,51427,35554],{"class":39},[33,51429,3316],{"class":72},[33,51431,35559],{"class":47},[33,51433,1429],{"class":39},[33,51435,3316],{"class":72},[33,51437,551],{"class":47},[33,51439,51440],{"class":35,"line":35695},[33,51441,38958],{"class":2487},[33,51443,51444],{"class":35,"line":35703},[33,51445,38963],{"class":2487},[33,51447,51448,51450,51452],{"class":35,"line":35708},[33,51449,38968],{"class":47},[33,51451,35592],{"class":60},[33,51453,226],{"class":47},[33,51455,51456],{"class":35,"line":35714},[33,51457,35612],{"class":2487},[33,51459,51460,51462,51464,51466,51468,51470],{"class":35,"line":35725},[33,51461,35618],{"class":47},[33,51463,57],{"class":39},[33,51465,35623],{"class":47},[33,51467,35626],{"class":289},[33,51469,57],{"class":39},[33,51471,3820],{"class":47},[33,51473,51474,51476,51478,51480],{"class":35,"line":35731},[33,51475,35636],{"class":60},[33,51477,387],{"class":47},[33,51479,35641],{"class":72},[33,51481,35644],{"class":47},[33,51483,51484,51486],{"class":35,"line":35751},[33,51485,35650],{"class":60},[33,51487,35653],{"class":47},[33,51489,51490,51492],{"class":35,"line":35757},[33,51491,35659],{"class":60},[33,51493,35662],{"class":47},[33,51495,51496,51498],{"class":35,"line":35763},[33,51497,35668],{"class":60},[33,51499,35671],{"class":47},[33,51501,51502,51504],{"class":35,"line":35769},[33,51503,35677],{"class":60},[33,51505,35680],{"class":47},[33,51507,51508],{"class":35,"line":35786},[33,51509,35686],{"class":47},[33,51511,51512],{"class":35,"line":35792},[33,51513,35692],{"class":2487},[33,51515,51516,51518],{"class":35,"line":35798},[33,51517,90],{"class":39},[33,51519,35700],{"class":47},[33,51521,51522],{"class":35,"line":35804},[33,51523,100],{"emptyLinePlaceholder":99},[33,51525,51526],{"class":35,"line":35810},[33,51527,35711],{"class":2487},[33,51529,51530,51532,51534],{"class":35,"line":35816},[33,51531,40],{"class":39},[33,51533,35719],{"class":43},[33,51535,35722],{"class":47},[33,51537,51538],{"class":35,"line":35843},[33,51539,35728],{"class":2487},[33,51541,51542,51544,51546,51548,51550,51552,51554,51556],{"class":35,"line":35867},[33,51543,35734],{"class":47},[33,51545,33922],{"class":289},[33,51547,57],{"class":39},[33,51549,133],{"class":47},[33,51551,2915],{"class":72},[33,51553,2799],{"class":47},[33,51555,753],{"class":72},[33,51557,551],{"class":47},[33,51559,51560],{"class":35,"line":35873},[33,51561,35754],{"class":2487},[33,51563,51564],{"class":35,"line":35879},[33,51565,35760],{"class":2487},[33,51567,51568],{"class":35,"line":35885},[33,51569,35766],{"class":2487},[33,51571,51572,51574,51576,51578,51580,51582,51584],{"class":35,"line":35896},[33,51573,33956],{"class":47},[33,51575,720],{"class":72},[33,51577,2799],{"class":47},[33,51579,725],{"class":72},[33,51581,2799],{"class":47},[33,51583,720],{"class":72},[33,51585,226],{"class":47},[33,51587,51588],{"class":35,"line":35907},[33,51589,35789],{"class":2487},[33,51591,51592],{"class":35,"line":35913},[33,51593,35795],{"class":2487},[33,51595,51596],{"class":35,"line":35930},[33,51597,35801],{"class":2487},[33,51599,51600],{"class":35,"line":35953},[33,51601,35807],{"class":2487},[33,51603,51604],{"class":35,"line":35976},[33,51605,35813],{"class":2487},[33,51607,51608,51610,51612,51614,51616,51618,51620,51622,51624],{"class":35,"line":35982},[33,51609,35819],{"class":47},[33,51611,35822],{"class":60},[33,51613,35825],{"class":47},[33,51615,35828],{"class":60},[33,51617,2799],{"class":47},[33,51619,35833],{"class":289},[33,51621,57],{"class":39},[33,51623,35838],{"class":60},[33,51625,226],{"class":47},[33,51627,51628,51630,51632,51634,51636,51638,51640,51642,51644],{"class":35,"line":35987},[33,51629,35819],{"class":47},[33,51631,35822],{"class":60},[33,51633,35850],{"class":47},[33,51635,35853],{"class":60},[33,51637,2799],{"class":47},[33,51639,35833],{"class":289},[33,51641,57],{"class":39},[33,51643,35862],{"class":60},[33,51645,226],{"class":47},[33,51647,51648],{"class":35,"line":35996},[33,51649,35870],{"class":2487},[33,51651,51652],{"class":35,"line":36006},[33,51653,35876],{"class":47},[33,51655,51656],{"class":35,"line":36012},[33,51657,35882],{"class":2487},[33,51659,51660,51662,51664],{"class":35,"line":36017},[33,51661,35888],{"class":47},[33,51663,35891],{"class":60},[33,51665,226],{"class":47},[33,51667,51668,51670,51672],{"class":35,"line":36023},[33,51669,35899],{"class":47},[33,51671,35902],{"class":60},[33,51673,226],{"class":47},[33,51675,51676],{"class":35,"line":36036},[33,51677,35910],{"class":2487},[33,51679,51680,51682,51684,51686,51688,51690,51692],{"class":35,"line":36042},[33,51681,33956],{"class":47},[33,51683,720],{"class":72},[33,51685,2799],{"class":47},[33,51687,725],{"class":72},[33,51689,2799],{"class":47},[33,51691,725],{"class":72},[33,51693,226],{"class":47},[33,51695,51696,51698,51700,51702,51704,51706,51708,51710,51712],{"class":35,"line":36053},[33,51697,35819],{"class":47},[33,51699,35822],{"class":60},[33,51701,35937],{"class":47},[33,51703,35828],{"class":60},[33,51705,2799],{"class":47},[33,51707,35833],{"class":289},[33,51709,57],{"class":39},[33,51711,35948],{"class":60},[33,51713,226],{"class":47},[33,51715,51716,51718,51720,51722,51724,51726,51728,51730,51732],{"class":35,"line":36064},[33,51717,35819],{"class":47},[33,51719,35822],{"class":60},[33,51721,35960],{"class":47},[33,51723,35853],{"class":60},[33,51725,2799],{"class":47},[33,51727,35833],{"class":289},[33,51729,57],{"class":39},[33,51731,35971],{"class":60},[33,51733,226],{"class":47},[33,51735,51736],{"class":35,"line":36083},[33,51737,35979],{"class":2487},[33,51739,51741],{"class":35,"line":51740},219,[33,51742,35876],{"class":47},[33,51744,51746,51748,51750],{"class":35,"line":51745},220,[33,51747,35888],{"class":47},[33,51749,35822],{"class":60},[33,51751,226],{"class":47},[33,51753,51755,51757,51759],{"class":35,"line":51754},221,[33,51756,35899],{"class":47},[33,51758,36001],{"class":60},[33,51760,226],{"class":47},[33,51762,51764],{"class":35,"line":51763},222,[33,51765,36009],{"class":47},[33,51767,51769],{"class":35,"line":51768},223,[33,51770,100],{"emptyLinePlaceholder":99},[33,51772,51774],{"class":35,"line":51773},224,[33,51775,36020],{"class":2487},[33,51777,51779,51781,51783,51785,51787],{"class":35,"line":51778},225,[33,51780,3805],{"class":39},[33,51782,33451],{"class":72},[33,51784,5206],{"class":39},[33,51786,33456],{"class":60},[33,51788,605],{"class":47},[33,51790,51792],{"class":35,"line":51791},226,[33,51793,36039],{"class":2487},[33,51795,51797,51799,51801],{"class":35,"line":51796},227,[33,51798,46769],{"class":47},[33,51800,57],{"class":39},[33,51802,46774],{"class":47},[33,51804,51806,51808,51810],{"class":35,"line":51805},228,[33,51807,36056],{"class":47},[33,51809,57],{"class":39},[33,51811,36061],{"class":47},[33,51813,51815,51817,51819,51821,51823,51825,51827],{"class":35,"line":51814},229,[33,51816,35618],{"class":47},[33,51818,57],{"class":39},[33,51820,46791],{"class":47},[33,51822,36074],{"class":289},[33,51824,57],{"class":39},[33,51826,3316],{"class":72},[33,51828,226],{"class":47},[33,51830,51832],{"class":35,"line":51831},230,[33,51833,36086],{"class":47},[24236,51835,51837],{"id":51836},"_242测试代码","2.4.2.测试代码",[19,51839,51840],{},"使用测试集进行测试与推理",[23,51842,51844],{"className":25,"code":51843,"language":27,"meta":28,"style":28},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[30,51845,51846,51852,51862,51872,51883,51893,51897,51901,51909,51914,51918,51935,51939,51943,51947,51951,51955,51987,51991,51999,52003,52015,52019,52023,52027,52031,52035,52039,52043,52047,52065,52079,52083,52093,52103,52113,52119,52123,52127,52135,52139,52155,52163,52167,52171,52179,52187,52191,52195,52199,52203,52209,52213,52223,52231,52239,52243,52247,52251,52259,52263,52279,52283,52287,52291,52303,52307,52319,52323,52327,52339,52343,52353,52357,52361,52373,52377,52385,52389,52393,52401,52405,52413,52417,52421,52425,52429,52433,52449,52457,52461,52465,52483,52489,52493,52503,52511,52519,52523,52527,52531,52535,52543,52547,52563,52567,52575,52583],{"__ignoreMap":28},[33,51847,51848,51850],{"class":35,"line":36},[33,51849,32627],{"class":39},[33,51851,32630],{"class":47},[33,51853,51854,51856,51858,51860],{"class":35,"line":51},[33,51855,32627],{"class":39},[33,51857,33645],{"class":47},[33,51859,33613],{"class":39},[33,51861,33650],{"class":47},[33,51863,51864,51866,51868,51870],{"class":35,"line":64},[33,51865,32970],{"class":39},[33,51867,33628],{"class":47},[33,51869,32627],{"class":39},[33,51871,33633],{"class":47},[33,51873,51874,51876,51878,51880],{"class":35,"line":76},[33,51875,32970],{"class":39},[33,51877,33598],{"class":47},[33,51879,32627],{"class":39},[33,51881,51882],{"class":47}," ImageFolder\n",[33,51884,51885,51887,51889,51891],{"class":35,"line":87},[33,51886,32970],{"class":39},[33,51888,34143],{"class":47},[33,51890,32627],{"class":39},[33,51892,46863],{"class":47},[33,51894,51895],{"class":35,"line":96},[33,51896,100],{"emptyLinePlaceholder":99},[33,51898,51899],{"class":35,"line":103},[33,51900,36176],{"class":2487},[33,51902,51903,51905,51907],{"class":35,"line":108},[33,51904,40],{"class":39},[33,51906,36183],{"class":43},[33,51908,48],{"class":47},[33,51910,51911],{"class":35,"line":119},[33,51912,51913],{"class":2487},"   # 导入自己的数据集，并进行数据处理\n",[33,51915,51916],{"class":35,"line":128},[33,51917,50183],{"class":2487},[33,51919,51920,51922,51924,51926,51928,51930,51933],{"class":35,"line":1753},[33,51921,50188],{"class":72},[33,51923,57],{"class":39},[33,51925,3085],{"class":39},[33,51927,397],{"class":60},[33,51929,2975],{"class":72},[33,51931,51932],{"class":50199},"\u002Fdata\u002Ftest",[33,51934,27372],{"class":60},[33,51936,51937],{"class":35,"line":1763},[33,51938,100],{"emptyLinePlaceholder":99},[33,51940,51941],{"class":35,"line":1775},[33,51942,50211],{"class":2487},[33,51944,51945],{"class":35,"line":1780},[33,51946,50216],{"class":2487},[33,51948,51949],{"class":35,"line":1785},[33,51950,50221],{"class":2487},[33,51952,51953],{"class":35,"line":1940},[33,51954,50226],{"class":2487},[33,51956,51957,51959,51961,51963,51965,51967,51969,51971,51973,51975,51977,51979,51981,51983,51985],{"class":35,"line":2183},[33,51958,50231],{"class":47},[33,51960,57],{"class":39},[33,51962,50236],{"class":47},[33,51964,50239],{"class":72},[33,51966,2799],{"class":47},[33,51968,50244],{"class":72},[33,51970,2799],{"class":47},[33,51972,50249],{"class":72},[33,51974,50252],{"class":47},[33,51976,50255],{"class":72},[33,51978,2799],{"class":47},[33,51980,50260],{"class":72},[33,51982,2799],{"class":47},[33,51984,50265],{"class":72},[33,51986,6907],{"class":47},[33,51988,51989],{"class":35,"line":2208},[33,51990,50272],{"class":2487},[33,51992,51993,51995,51997],{"class":35,"line":2234},[33,51994,50277],{"class":47},[33,51996,57],{"class":39},[33,51998,50282],{"class":47},[33,52000,52001],{"class":35,"line":2239},[33,52002,50287],{"class":2487},[33,52004,52005,52007,52009,52011,52013],{"class":35,"line":2247},[33,52006,50292],{"class":47},[33,52008,33730],{"class":72},[33,52010,2799],{"class":47},[33,52012,33730],{"class":72},[33,52014,44845],{"class":47},[33,52016,52017],{"class":35,"line":2255},[33,52018,50305],{"class":2487},[33,52020,52021],{"class":35,"line":3992},[33,52022,50310],{"class":47},[33,52024,52025],{"class":35,"line":4009},[33,52026,50315],{"class":47},[33,52028,52029],{"class":35,"line":4014},[33,52030,50320],{"class":2487},[33,52032,52033],{"class":35,"line":4019},[33,52034,50325],{"class":2487},[33,52036,52037],{"class":35,"line":4024},[33,52038,100],{"emptyLinePlaceholder":99},[33,52040,52041],{"class":35,"line":4038},[33,52042,50334],{"class":2487},[33,52044,52045],{"class":35,"line":4043},[33,52046,50339],{"class":2487},[33,52048,52049,52051,52053,52055,52057,52059,52061,52063],{"class":35,"line":4834},[33,52050,36190],{"class":47},[33,52052,57],{"class":39},[33,52054,50348],{"class":47},[33,52056,50351],{"class":72},[33,52058,2799],{"class":47},[33,52060,50356],{"class":289},[33,52062,57],{"class":39},[33,52064,50361],{"class":47},[33,52066,52067,52069,52071,52073,52075,52077],{"class":35,"line":4848},[33,52068,36247],{"class":47},[33,52070,57],{"class":39},[33,52072,33763],{"class":47},[33,52074,33766],{"class":289},[33,52076,57],{"class":39},[33,52078,36258],{"class":47},[33,52080,52081],{"class":35,"line":4856},[33,52082,36263],{"class":2487},[33,52084,52085,52087,52089,52091],{"class":35,"line":4861},[33,52086,36268],{"class":289},[33,52088,57],{"class":39},[33,52090,720],{"class":72},[33,52092,33696],{"class":47},[33,52094,52095,52097,52099,52101],{"class":35,"line":4867},[33,52096,36279],{"class":289},[33,52098,57],{"class":39},[33,52100,1190],{"class":72},[33,52102,33696],{"class":47},[33,52104,52105,52107,52109,52111],{"class":35,"line":4873},[33,52106,36290],{"class":289},[33,52108,57],{"class":39},[33,52110,2617],{"class":72},[33,52112,226],{"class":47},[33,52114,52115,52117],{"class":35,"line":4878},[33,52116,90],{"class":39},[33,52118,36303],{"class":47},[33,52120,52121],{"class":35,"line":10194},[33,52122,100],{"emptyLinePlaceholder":99},[33,52124,52125],{"class":35,"line":10218},[33,52126,36312],{"class":2487},[33,52128,52129,52131,52133],{"class":35,"line":10223},[33,52130,40],{"class":39},[33,52132,36319],{"class":43},[33,52134,36322],{"class":47},[33,52136,52137],{"class":35,"line":10229},[33,52138,36327],{"class":2487},[33,52140,52141,52143,52145,52147,52149,52151,52153],{"class":35,"line":10256},[33,52142,33468],{"class":47},[33,52144,57],{"class":39},[33,52146,33475],{"class":60},[33,52148,3966],{"class":39},[33,52150,33480],{"class":47},[33,52152,3963],{"class":39},[33,52154,36344],{"class":60},[33,52156,52157,52159,52161],{"class":35,"line":10261},[33,52158,33520],{"class":47},[33,52160,57],{"class":39},[33,52162,34516],{"class":47},[33,52164,52165],{"class":35,"line":10267},[33,52166,100],{"emptyLinePlaceholder":99},[33,52168,52169],{"class":35,"line":10279},[33,52170,36361],{"class":2487},[33,52172,52173,52175,52177],{"class":35,"line":10291},[33,52174,36366],{"class":47},[33,52176,57],{"class":39},[33,52178,34569],{"class":72},[33,52180,52181,52183,52185],{"class":35,"line":10303},[33,52182,36375],{"class":47},[33,52184,57],{"class":39},[33,52186,5342],{"class":72},[33,52188,52189],{"class":35,"line":11961},[33,52190,100],{"emptyLinePlaceholder":99},[33,52192,52193],{"class":35,"line":11986},[33,52194,36388],{"class":2487},[33,52196,52197],{"class":35,"line":12009},[33,52198,36393],{"class":2487},[33,52200,52201],{"class":35,"line":12033},[33,52202,36398],{"class":2487},[33,52204,52205,52207],{"class":35,"line":12038},[33,52206,36403],{"class":39},[33,52208,35110],{"class":47},[33,52210,52211],{"class":35,"line":12043},[33,52212,36410],{"class":2487},[33,52214,52215,52217,52219,52221],{"class":35,"line":12048},[33,52216,5658],{"class":39},[33,52218,36417],{"class":47},[33,52220,681],{"class":39},[33,52222,36422],{"class":47},[33,52224,52225,52227,52229],{"class":35,"line":12057},[33,52226,36427],{"class":47},[33,52228,57],{"class":39},[33,52230,36432],{"class":47},[33,52232,52233,52235,52237],{"class":35,"line":12062},[33,52234,36437],{"class":47},[33,52236,57],{"class":39},[33,52238,36442],{"class":47},[33,52240,52241],{"class":35,"line":12068},[33,52242,36447],{"class":2487},[33,52244,52245],{"class":35,"line":12089},[33,52246,35101],{"class":47},[33,52248,52249],{"class":35,"line":12095},[33,52250,36456],{"class":2487},[33,52252,52253,52255,52257],{"class":35,"line":12109},[33,52254,34886],{"class":47},[33,52256,57],{"class":39},[33,52258,36465],{"class":47},[33,52260,52261],{"class":35,"line":12115},[33,52262,36470],{"class":2487},[33,52264,52265,52267,52269,52271,52273,52275,52277],{"class":35,"line":12142},[33,52266,34903],{"class":47},[33,52268,57],{"class":39},[33,52270,34908],{"class":47},[33,52272,34911],{"class":289},[33,52274,57],{"class":39},[33,52276,720],{"class":72},[33,52278,226],{"class":47},[33,52280,52281],{"class":35,"line":12151},[33,52282,36491],{"class":2487},[33,52284,52285],{"class":35,"line":12157},[33,52286,36496],{"class":2487},[33,52288,52289],{"class":35,"line":12165},[33,52290,36501],{"class":2487},[33,52292,52293,52295,52297,52299,52301],{"class":35,"line":12170},[33,52294,36506],{"class":47},[33,52296,692],{"class":39},[33,52298,35013],{"class":47},[33,52300,5206],{"class":39},[33,52302,36515],{"class":47},[33,52304,52305],{"class":35,"line":18842},[33,52306,36520],{"class":2487},[33,52308,52309,52311,52313,52315,52317],{"class":35,"line":18848},[33,52310,36525],{"class":47},[33,52312,692],{"class":39},[33,52314,36530],{"class":47},[33,52316,2617],{"class":72},[33,52318,226],{"class":47},[33,52320,52321],{"class":35,"line":18871},[33,52322,100],{"emptyLinePlaceholder":99},[33,52324,52325],{"class":35,"line":18877},[33,52326,36543],{"class":2487},[33,52328,52329,52331,52333,52335,52337],{"class":35,"line":18900},[33,52330,36548],{"class":47},[33,52332,57],{"class":39},[33,52334,36553],{"class":47},[33,52336,3001],{"class":39},[33,52338,36558],{"class":47},[33,52340,52341],{"class":35,"line":18914},[33,52342,36563],{"class":2487},[33,52344,52345,52347,52349,52351],{"class":35,"line":18934},[33,52346,807],{"class":72},[33,52348,133],{"class":47},[33,52350,36572],{"class":60},[33,52352,36575],{"class":47},[33,52354,52355],{"class":35,"line":18940},[33,52356,100],{"emptyLinePlaceholder":99},[33,52358,52359],{"class":35,"line":18951},[33,52360,36584],{"class":2487},[33,52362,52363,52365,52367,52369,52371],{"class":35,"line":18974},[33,52364,3805],{"class":39},[33,52366,33451],{"class":72},[33,52368,5206],{"class":39},[33,52370,33456],{"class":60},[33,52372,605],{"class":47},[33,52374,52375],{"class":35,"line":18996},[33,52376,36601],{"class":2487},[33,52378,52379,52381,52383],{"class":35,"line":19001},[33,52380,33520],{"class":47},[33,52382,57],{"class":39},[33,52384,46774],{"class":47},[33,52386,52387],{"class":35,"line":19007},[33,52388,36614],{"class":2487},[33,52390,52391],{"class":35,"line":19021},[33,52392,36619],{"class":2487},[33,52394,52395,52397,52399],{"class":35,"line":19034},[33,52396,36624],{"class":47},[33,52398,36627],{"class":60},[33,52400,551],{"class":47},[33,52402,52403],{"class":35,"line":19039},[33,52404,36634],{"class":2487},[33,52406,52407,52409,52411],{"class":35,"line":19053},[33,52408,36247],{"class":47},[33,52410,57],{"class":39},[33,52412,36643],{"class":47},[33,52414,52415],{"class":35,"line":19058},[33,52416,36648],{"class":2487},[33,52418,52419],{"class":35,"line":19064},[33,52420,36653],{"class":47},[33,52422,52423],{"class":35,"line":19069},[33,52424,100],{"emptyLinePlaceholder":99},[33,52426,52427],{"class":35,"line":19083},[33,52428,36662],{"class":2487},[33,52430,52431],{"class":35,"line":19088},[33,52432,36667],{"class":2487},[33,52434,52435,52437,52439,52441,52443,52445,52447],{"class":35,"line":19093},[33,52436,33468],{"class":47},[33,52438,57],{"class":39},[33,52440,33475],{"class":60},[33,52442,3966],{"class":39},[33,52444,33480],{"class":47},[33,52446,3963],{"class":39},[33,52448,36344],{"class":60},[33,52450,52451,52453,52455],{"class":35,"line":19107},[33,52452,33520],{"class":47},[33,52454,57],{"class":39},[33,52456,34516],{"class":47},[33,52458,52459],{"class":35,"line":19119},[33,52460,36696],{"class":2487},[33,52462,52463],{"class":35,"line":19124},[33,52464,36701],{"class":2487},[33,52466,52467,52469,52471,52473,52476,52478,52481],{"class":35,"line":19137},[33,52468,36706],{"class":47},[33,52470,57],{"class":39},[33,52472,3300],{"class":47},[33,52474,52475],{"class":60},"'猫'",[33,52477,2799],{"class":47},[33,52479,52480],{"class":60},"'狗'",[33,52482,919],{"class":47},[33,52484,52485,52487],{"class":35,"line":19142},[33,52486,36403],{"class":39},[33,52488,35110],{"class":47},[33,52490,52491],{"class":35,"line":19147},[33,52492,36771],{"class":2487},[33,52494,52495,52497,52499,52501],{"class":35,"line":19152},[33,52496,5658],{"class":39},[33,52498,36778],{"class":47},[33,52500,681],{"class":39},[33,52502,36422],{"class":47},[33,52504,52505,52507,52509],{"class":35,"line":19165},[33,52506,34836],{"class":47},[33,52508,57],{"class":39},[33,52510,34841],{"class":47},[33,52512,52513,52515,52517],{"class":35,"line":19170},[33,52514,34851],{"class":47},[33,52516,57],{"class":39},[33,52518,34856],{"class":47},[33,52520,52521],{"class":35,"line":34859},[33,52522,100],{"emptyLinePlaceholder":99},[33,52524,52525],{"class":35,"line":34865},[33,52526,36807],{"class":2487},[33,52528,52529],{"class":35,"line":34871},[33,52530,35101],{"class":47},[33,52532,52533],{"class":35,"line":34877},[33,52534,36816],{"class":2487},[33,52536,52537,52539,52541],{"class":35,"line":34883},[33,52538,34886],{"class":47},[33,52540,57],{"class":39},[33,52542,34891],{"class":47},[33,52544,52545],{"class":35,"line":34894},[33,52546,36829],{"class":2487},[33,52548,52549,52551,52553,52555,52557,52559,52561],{"class":35,"line":34900},[33,52550,34903],{"class":47},[33,52552,57],{"class":39},[33,52554,34908],{"class":47},[33,52556,34911],{"class":289},[33,52558,57],{"class":39},[33,52560,720],{"class":72},[33,52562,226],{"class":47},[33,52564,52565],{"class":35,"line":34920},[33,52566,36850],{"class":2487},[33,52568,52569,52571,52573],{"class":35,"line":34926},[33,52570,36855],{"class":47},[33,52572,57],{"class":39},[33,52574,36860],{"class":47},[33,52576,52577,52579,52581],{"class":35,"line":34937},[33,52578,36865],{"class":47},[33,52580,57],{"class":39},[33,52582,36870],{"class":47},[33,52584,52585,52587,52589,52591,52593,52595,52597,52599],{"class":35,"line":34943},[33,52586,36875],{"class":72},[33,52588,133],{"class":47},[33,52590,36880],{"class":60},[33,52592,36883],{"class":47},[33,52594,36886],{"class":60},[33,52596,2799],{"class":47},[33,52598,36891],{"class":60},[33,52600,36894],{"class":47},[2331,52602,52603],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":28,"searchDepth":51,"depth":51,"links":52605},[52606,52607,52608,52609],{"id":32824,"depth":64,"text":32825},{"id":40064,"depth":64,"text":40065},{"id":43495,"depth":64,"text":43496},{"id":47504,"depth":64,"text":47505},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32816,"description":2359},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52616,"title":52617,"body":52618,"description":2359,"extension":2360,"meta":52625,"navigation":99,"path":52626,"seo":52627,"stem":52628,"__hash__":52629},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52619,"toc":52623},[52620],[10,52621,52617],{"id":52622},"_3yolo模型学习",{"title":28,"searchDepth":51,"depth":51,"links":52624},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52617,"description":2359},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52631,"title":52632,"body":52633,"description":52640,"extension":2360,"meta":52641,"navigation":99,"path":52643,"seo":52644,"stem":52645,"__hash__":52646},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52634,"toc":52638},[52635],[19,52636,52637],{},"yolo模型还未补充",{"title":28,"searchDepth":51,"depth":51,"links":52639},[],"深度学习学习",{"category":52642},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52632,"description":52640},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52648,"title":52649,"body":52650,"description":2359,"extension":2360,"meta":52675,"navigation":99,"path":52676,"seo":52677,"stem":52678,"__hash__":52679},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52651,"toc":52673},[52652,52655,52658,52663,52670],[10,52653,52649],{"id":52654},"_1工具",[19,52656,52657],{},"提示错误插件：有问题会提前报错",[19,52659,52660],{},[3736,52661],{"alt":28,"src":52662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52664,52665],{},[2663,52666,52669],{"href":52667,"rel":52668},"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",[26103],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52671,52672],{},"alt键加上下箭头可以实现语句的移动",{"title":28,"searchDepth":51,"depth":51,"links":52674},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52649,"description":2359},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52681,"title":52682,"body":52683,"description":2359,"extension":2360,"meta":55544,"navigation":99,"path":55545,"seo":55546,"stem":55547,"__hash__":55548},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52684,"toc":55495},[52685,52688,52692,52696,52701,52704,52709,52713,52720,52725,52732,52737,52744,52749,52753,52758,52761,52765,52770,52774,52779,52782,52785,52788,52791,52794,52797,52800,52803,52808,52813,52818,52822,52825,52828,52832,52837,52840,52848,52853,52870,52878,52883,52888,52893,52898,52903,52906,52911,52916,52920,52929,52934,52939,52943,52948,52951,52955,52960,52968,52973,52978,52981,52986,52991,52996,52999,53002,53005,53010,53015,53018,53023,53026,53031,53034,53037,53040,53045,53048,53051,53066,53071,53076,53081,53084,53087,53090,53104,53107,53112,53117,53120,53123,53126,53129,53132,53135,53138,53142,53146,53151,53155,53158,53163,53168,53171,53176,53179,53183,53188,53191,53194,53197,53200,53203,53206,53209,53212,53215,53219,53224,53229,53234,53237,53240,53244,53249,53252,53256,53259,53262,53267,53270,53273,53277,53281,53284,53289,53294,53297,53326,53331,53336,53341,53346,53350,53355,53359,53364,53367,53371,53375,53380,53384,53389,53394,53398,53403,53406,53408,53411,53416,53420,53425,53429,53433,53438,53443,53448,53453,53457,53462,53467,53472,53475,53478,53483,53486,53491,53496,53501,53506,53510,54315,54319,54661,54666,54669,54672,54675,54678,54681,54684,54687,54690,54692,54695,54697,54700,54704,54709,54712,54715,54718,54722,54727,54732,54752,54755,54759,54764,54769,54786,54790,54819,54823,54845,54847,54886,54894,54900,54904,54907,54910,54915,54920,54923,54926,54929,54934,54939,54942,54945,54948,54951,54954,54957,54960,54963,54966,54969,54972,54974,54977,54980,54983,54986,54989,54992,54995,54998,55002,55007,55010,55015,55018,55021,55024,55027,55030,55033,55036,55038,55041,55044,55047,55050,55053,55056,55060,55063,55072,55075,55080,55083,55088,55091,55094,55097,55100,55103,55106,55109,55113,55117,55120,55123,55128,55133,55138,55142,55147,55152,55155,55158,55161,55164,55167,55172,55175,55180,55182,55187,55190,55194,55199,55202,55205,55210,55214,55217,55222,55225,55228,55257,55262,55265,55268,55271,55274,55277,55281,55284,55370,55374,55377,55382,55387,55394,55397,55400,55403,55406,55409,55414,55419,55422,55425,55428,55431,55434,55437,55440,55443,55446,55448,55451,55455,55460,55465,55470,55473,55478,55483,55486,55489,55492],[10,52686,52682],{"id":52687},"_2基础语法",[14,52689,52691],{"id":52690},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[631,52693,52695],{"id":52694},"_211-js组成","2.1.1 js组成",[328,52697,52698],{},[331,52699,52700],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52702,52703],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[328,52705,52706],{"start":51},[331,52707,52708],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[631,52710,52712],{"id":52711},"_212-js书写位置","2.1.2 js书写位置",[328,52714,52715],{},[331,52716,52717],{},[2575,52718,52719],{},"内部 JavaScript",[19,52721,52722],{},[3736,52723],{"alt":28,"src":52724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[328,52726,52727],{"start":51},[331,52728,52729],{},[2575,52730,52731],{},"外部 JavaScript",[19,52733,52734],{},[3736,52735],{"alt":28,"src":52736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[328,52738,52739],{"start":64},[331,52740,52741],{},[2575,52742,52743],{},"内联 JavaScript",[19,52745,52746],{},[3736,52747],{"alt":28,"src":52748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[631,52750,52752],{"id":52751},"_213-javascript注释","2.1.3 JavaScript注释",[19,52754,52755],{},[3736,52756],{"alt":28,"src":52757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52759,52760],{},"alt+shift+a一定要记住！",[631,52762,52764],{"id":52763},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52766,52767],{},[3736,52768],{"alt":28,"src":52769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[631,52771,52773],{"id":52772},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[328,52775,52776],{},[331,52777,52778],{},"输出语法：",[19,52780,52781],{},"①document.write('要出的内容')",[19,52783,52784],{},"向body内输出内容；",[19,52786,52787],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52789,52790],{},"②alert('要出的内容')",[19,52792,52793],{},"页面弹出警告对话框",[19,52795,52796],{},"③console.log('控制台打印')",[19,52798,52799],{},"控制台输出语法，程序员调试使用",[19,52801,52802],{},"输入log就行，自动生成：",[19,52804,52805],{},[3736,52806],{"alt":28,"src":52807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[328,52809,52810],{"start":51},[331,52811,52812],{},"输入语法：",[19,52814,52815],{},[3736,52816],{"alt":28,"src":52817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[631,52819,52821],{"id":52820},"_2116-字面量","21.1.6 字面量",[19,52823,52824],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52826,52827],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52829,52831],{"id":52830},"_22-变量","2.2 变量",[328,52833,52834],{},[331,52835,52836],{},"变量声明",[19,52838,52839],{},"let 变量名",[3413,52841,52842,52845],{},[331,52843,52844],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[331,52846,52847],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[328,52849,52850],{"start":51},[331,52851,52852],{},"变量赋值",[23,52854,52858],{"className":52855,"code":52856,"language":52857,"meta":28,"style":28},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[30,52859,52860,52865],{"__ignoreMap":28},[33,52861,52862],{"class":35,"line":36},[33,52863,52864],{"class":47},"let age\n",[33,52866,52867],{"class":35,"line":51},[33,52868,52869],{"class":47},"age=18\n",[328,52871,52872,52875],{"start":64},[331,52873,52874],{},"连这些（变量的初始化）：let age=18",[331,52876,52877],{},"更新变量",[19,52879,52880],{},[3736,52881],{"alt":28,"src":52882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[328,52884,52885],{"start":87},[331,52886,52887],{},"声明多个变量",[19,52889,52890],{},[3736,52891],{"alt":28,"src":52892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[328,52894,52895],{"start":96},[331,52896,52897],{},"变量命名规则与规范",[19,52899,52900],{},[3736,52901],{"alt":28,"src":52902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52904,52905],{},"遵守小驼峰！",[328,52907,52908],{"start":103},[331,52909,52910],{},"变量拓展-let和var的区别",[19,52912,52913],{},[3736,52914],{"alt":28,"src":52915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52917,52919],{"id":52918},"_23-数组","2.3 数组",[23,52921,52923],{"className":52855,"code":52922,"language":52857,"meta":28,"style":28},"let arr = []\n",[30,52924,52925],{"__ignoreMap":28},[33,52926,52927],{"class":35,"line":36},[33,52928,52922],{"class":47},[19,52930,52931],{},[3736,52932],{"alt":28,"src":52933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52935,52936],{},[3736,52937],{"alt":28,"src":52938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52940,52942],{"id":52941},"_24-常量","2.4 常量",[19,52944,52945],{},[3736,52946],{"alt":28,"src":52947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52949,52950],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52952,52954],{"id":52953},"_25-数据类型","2.5 数据类型",[19,52956,52957],{},[3736,52958],{"alt":28,"src":52959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[328,52961,52962,52965],{},[331,52963,52964],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[331,52966,52967],{},"算数运算符：",[19,52969,52970],{},[3736,52971],{"alt":28,"src":52972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[328,52974,52975],{"start":64},[331,52976,52977],{},"数字类型（Number）",[19,52979,52980],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52982,52983],{},[3736,52984],{"alt":28,"src":52985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[328,52987,52988],{"start":76},[331,52989,52990],{},"字符串类型（string）",[19,52992,52993],{},[3736,52994],{"alt":28,"src":52995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52997,52998],{},"反引号也是可以使用的",[19,53000,53001],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,53003,53004],{},"例如：document.write(\"我今年\"+age+\"岁\")",[328,53006,53007],{"start":87},[331,53008,53009],{},"模板字符串",[19,53011,53012],{},[3736,53013],{"alt":28,"src":53014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,53016,53017],{},"类似于python的字符串格式化",[328,53019,53020],{"start":96},[331,53021,53022],{},"布尔类型",[19,53024,53025],{},"true 和 false",[328,53027,53028],{"start":103},[331,53029,53030],{},"未定义类型（underfined）",[19,53032,53033],{},"表示没有赋值",[19,53035,53036],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,53038,53039],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[328,53041,53042],{"start":108},[331,53043,53044],{},"null（空类型）",[19,53046,53047],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,53049,53050],{},"赋值了，但是内容为空",[23,53052,53054],{"className":52855,"code":53053,"language":52857,"meta":28,"style":28},"typeof null\n输出的是'object'，是一个对象数据类型\n",[30,53055,53056,53061],{"__ignoreMap":28},[33,53057,53058],{"class":35,"line":36},[33,53059,53060],{"class":47},"typeof null\n",[33,53062,53063],{"class":35,"line":51},[33,53064,53065],{"class":47},"输出的是'object'，是一个对象数据类型\n",[328,53067,53068],{"start":119},[331,53069,53070],{},"控制台检测数据类型",[19,53072,53073],{},[3736,53074],{"alt":28,"src":53075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[328,53077,53078],{"start":128},[331,53079,53080],{},"类型转换",[19,53082,53083],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,53085,53086],{},"转换方式：隐式转换和显示转换",[19,53088,53089],{},"①隐式转换",[3413,53091,53092,53095,53098,53101],{},[331,53093,53094],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[331,53096,53097],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[331,53099,53100],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[331,53102,53103],{},"任何数据和字符串相加结果都是字符串",[19,53105,53106],{},"②显示转换",[19,53108,53109],{},[3736,53110],{"alt":28,"src":53111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,53113,53114],{},[3736,53115],{"alt":28,"src":53116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,53118,53119],{},"在输入的时候要用好隐式转换，简单写起来",[19,53121,53122],{},"let num = +prompt(’请输入数字：‘)",[19,53124,53125],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,53127,53128],{},"console.log(parseInt('12.333px'))",[19,53130,53131],{},"输出为：12",[19,53133,53134],{},"console.log(parseInt('a'a'a12.333px'))",[19,53136,53137],{},"输出：NaN",[14,53139,53141],{"id":53140},"_26-运算符","2.6 运算符",[631,53143,53145],{"id":53144},"_261-赋值运算符","2.6.1 赋值运算符",[19,53147,53148],{},[3736,53149],{"alt":28,"src":53150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[631,53152,53154],{"id":53153},"_262-一元运算符","2.6.2 一元运算符",[19,53156,53157],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,53159,53160],{},[3736,53161],{"alt":28,"src":53162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,53164,53165],{},[3736,53166],{"alt":28,"src":53167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,53169,53170],{},"两者的区别：",[19,53172,53173],{},[3736,53174],{"alt":28,"src":53175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,53177,53178],{},"前置先自加；后置后加，代码执行完之后再加",[631,53180,53182],{"id":53181},"_263-比较运算符","2.6.3 比较运算符",[19,53184,53185],{},[3736,53186],{"alt":28,"src":53187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,53189,53190],{},"比较运算符也有隐式转换",[19,53192,53193],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,53195,53196],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,53198,53199],{},"要使用三等，开发的时候",[19,53201,53202],{},"NaN不等于任何人，包括它自己",[19,53204,53205],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,53207,53208],{},"7\u002F10=0.7",[19,53210,53211],{},"最后：0.5+0.2=0.7",[19,53213,53214],{},"字符串比较，比较的是字符对应的ASCII码",[631,53216,53218],{"id":53217},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,53220,53221],{},[3736,53222],{"alt":28,"src":53223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,53225,53226],{},[3736,53227],{"alt":28,"src":53228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,53230,53231],{},[3736,53232],{"alt":28,"src":53233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,53235,53236],{},"上述题目选D",[19,53238,53239],{},"与真2假1；或真1假2",[631,53241,53243],{"id":53242},"_265-运算符优先级","2.6.5 运算符优先级",[19,53245,53246],{},[3736,53247],{"alt":28,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,53250,53251],{},"先算逻辑与，后算逻辑或",[14,53253,53255],{"id":53254},"_27-语句","2.7 语句",[19,53257,53258],{},"表达式：是可以被求值的代码，会有结果给我们",[19,53260,53261],{},"语句：语句是可以被执行的代码，例如prompt()",[19,53263,53264],{},[3736,53265],{"alt":28,"src":53266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,53268,53269],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,53271,53272],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[631,53274,53276],{"id":53275},"_271-分支语句","2.7.1 分支语句",[24236,53278,53280],{"id":53279},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53282,53283],{},"if语句单行简单的话，可以不写{}，写在一行就行",[328,53285,53286],{},[331,53287,53288],{},"单分支语句",[19,53290,53291],{},[3736,53292],{"alt":28,"src":53293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53295,53296],{},"除了0，所有数字都为真",[23,53298,53300],{"className":52855,"code":53299,"language":52857,"meta":28,"style":28},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[30,53301,53302,53307,53312,53317,53321],{"__ignoreMap":28},[33,53303,53304],{"class":35,"line":36},[33,53305,53306],{"class":47},"if（0) {\n",[33,53308,53309],{"class":35,"line":51},[33,53310,53311],{"class":47},"    let a=1\n",[33,53313,53314],{"class":35,"line":64},[33,53315,53316],{"class":47},"    alert(typeof a)\n",[33,53318,53319],{"class":35,"line":76},[33,53320,1010],{"class":47},[33,53322,53323],{"class":35,"line":87},[33,53324,53325],{"class":47},"不输出，括号为假\n",[328,53327,53328],{"start":51},[331,53329,53330],{},"双分支语句",[19,53332,53333],{},[3736,53334],{"alt":28,"src":53335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[328,53337,53338],{"start":64},[331,53339,53340],{},"多分支语句",[19,53342,53343],{},[3736,53344],{"alt":28,"src":53345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[24236,53347,53349],{"id":53348},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53351,53352],{},[3736,53353],{"alt":28,"src":53354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[24236,53356,53358],{"id":53357},"_2713-switch语句","2.7.1.3 switch语句",[19,53360,53361],{},[3736,53362],{"alt":28,"src":53363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53365,53366],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[631,53368,53370],{"id":53369},"_272-循环语句","2.7.2 循环语句",[24236,53372,53374],{"id":53373},"_2721-断点演示","2.7.2.1 断点演示",[19,53376,53377],{},[3736,53378],{"alt":28,"src":53379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[24236,53381,53383],{"id":53382},"_2722-while循环","2.7.2.2 while循环",[19,53385,53386],{},[3736,53387],{"alt":28,"src":53388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53390,53391],{},[3736,53392],{"alt":28,"src":53393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[24236,53395,53397],{"id":53396},"_2723-for循环","2.7.2.3 for循环",[19,53399,53400],{},[3736,53401],{"alt":28,"src":53402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53404,53405],{},"for(;;) {",[19,53407,210],{},[19,53409,53410],{},"表示无限循环",[19,53412,53413],{},[3736,53414],{"alt":28,"src":53415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[24236,53417,53419],{"id":53418},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53421,53422],{},[3736,53423],{"alt":28,"src":53424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53426,53428],{"id":53427},"_28-数组","2.8 数组",[631,53430,53432],{"id":53431},"_281-基础认识","2.8.1 基础认识",[19,53434,53435],{},[3736,53436],{"alt":28,"src":53437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53439,53440],{},[3736,53441],{"alt":28,"src":53442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53444,53445],{},[3736,53446],{"alt":28,"src":53447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53449,53450],{},[3736,53451],{"alt":28,"src":53452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[631,53454,53456],{"id":53455},"_282-操作数组","2.8.2 操作数组",[19,53458,53459],{},[3736,53460],{"alt":28,"src":53461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[328,53463,53464],{},[331,53465,53466],{},"添加元素",[19,53468,53469],{},[3736,53470],{"alt":28,"src":53471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53473,53474],{},"console.log(arr.push('green'))",[19,53476,53477],{},"输出结果：为新数组的长度",[19,53479,53480],{},[3736,53481],{"alt":28,"src":53482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53484,53485],{},"push用的非常多，一定要记住",[328,53487,53488],{},[331,53489,53490],{},"删除元素",[19,53492,53493],{},[3736,53494],{"alt":28,"src":53495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53497,53498],{},[3736,53499],{"alt":28,"src":53500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53502,53503],{},[3736,53504],{"alt":28,"src":53505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[631,53507,53509],{"id":53508},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[23,53511,53513],{"className":52855,"code":53512,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,53514,53515,53530,53546,53550,53559,53577,53601,53623,53637,53645,53652,53663,53674,53678,53682,53689,53701,53716,53729,53748,53765,53780,53792,53804,53816,53820,53824,53835,53845,53857,53869,53881,53892,53896,53900,53912,53916,53930,53934,53938,53949,53963,53975,53989,53993,54002,54011,54015,54024,54028,54037,54042,54047,54059,54087,54092,54097,54122,54127,54131,54136,54141,54156,54160,54165,54195,54207,54223,54239,54253,54258,54265,54269,54274,54287,54295,54303,54307],{"__ignoreMap":28},[33,53516,53517,53520,53524,53527],{"class":35,"line":36},[33,53518,53519],{"class":47},"\u003C!",[33,53521,53523],{"class":53522},"s9eBZ","DOCTYPE",[33,53525,53526],{"class":43}," html",[33,53528,53529],{"class":47},">\n",[33,53531,53532,53534,53536,53539,53541,53544],{"class":35,"line":51},[33,53533,2226],{"class":47},[33,53535,52857],{"class":53522},[33,53537,53538],{"class":43}," lang",[33,53540,57],{"class":47},[33,53542,53543],{"class":60},"\"en\"",[33,53545,53529],{"class":47},[33,53547,53548],{"class":35,"line":64},[33,53549,100],{"emptyLinePlaceholder":99},[33,53551,53552,53554,53557],{"class":35,"line":76},[33,53553,2226],{"class":47},[33,53555,53556],{"class":53522},"head",[33,53558,53529],{"class":47},[33,53560,53561,53564,53567,53570,53572,53575],{"class":35,"line":87},[33,53562,53563],{"class":47},"    \u003C",[33,53565,53566],{"class":53522},"meta",[33,53568,53569],{"class":43}," charset",[33,53571,57],{"class":47},[33,53573,53574],{"class":60},"\"UTF-8\"",[33,53576,53529],{"class":47},[33,53578,53579,53581,53583,53586,53588,53591,53594,53596,53599],{"class":35,"line":96},[33,53580,53563],{"class":47},[33,53582,53566],{"class":53522},[33,53584,53585],{"class":43}," http-equiv",[33,53587,57],{"class":47},[33,53589,53590],{"class":60},"\"X-UA-Compatible\"",[33,53592,53593],{"class":43}," content",[33,53595,57],{"class":47},[33,53597,53598],{"class":60},"\"IE=edge\"",[33,53600,53529],{"class":47},[33,53602,53603,53605,53607,53609,53611,53614,53616,53618,53621],{"class":35,"line":103},[33,53604,53563],{"class":47},[33,53606,53566],{"class":53522},[33,53608,17158],{"class":43},[33,53610,57],{"class":47},[33,53612,53613],{"class":60},"\"viewport\"",[33,53615,53593],{"class":43},[33,53617,57],{"class":47},[33,53619,53620],{"class":60},"\"width=device-width, initial-scale=1.0\"",[33,53622,53529],{"class":47},[33,53624,53625,53627,53630,53633,53635],{"class":35,"line":108},[33,53626,53563],{"class":47},[33,53628,53629],{"class":53522},"title",[33,53631,53632],{"class":47},">Document\u003C\u002F",[33,53634,53629],{"class":53522},[33,53636,53529],{"class":47},[33,53638,53639,53641,53643],{"class":35,"line":119},[33,53640,53563],{"class":47},[33,53642,2331],{"class":53522},[33,53644,53529],{"class":47},[33,53646,53647,53650],{"class":35,"line":128},[33,53648,53649],{"class":53522},"        *",[33,53651,17810],{"class":47},[33,53653,53654,53657,53659,53661],{"class":35,"line":1753},[33,53655,53656],{"class":72},"            margin",[33,53658,996],{"class":47},[33,53660,2617],{"class":72},[33,53662,3567],{"class":47},[33,53664,53665,53668,53670,53672],{"class":35,"line":1763},[33,53666,53667],{"class":72},"            padding",[33,53669,996],{"class":47},[33,53671,2617],{"class":72},[33,53673,3567],{"class":47},[33,53675,53676],{"class":35,"line":1775},[33,53677,4786],{"class":47},[33,53679,53680],{"class":35,"line":1780},[33,53681,100],{"emptyLinePlaceholder":99},[33,53683,53684,53687],{"class":35,"line":1785},[33,53685,53686],{"class":43},"        .box",[33,53688,17810],{"class":47},[33,53690,53691,53694,53696,53699],{"class":35,"line":1940},[33,53692,53693],{"class":72},"            display",[33,53695,996],{"class":47},[33,53697,53698],{"class":72},"flex",[33,53700,3567],{"class":47},[33,53702,53703,53706,53708,53711,53714],{"class":35,"line":2183},[33,53704,53705],{"class":72},"            width",[33,53707,996],{"class":47},[33,53709,53710],{"class":72},"700",[33,53712,53713],{"class":39},"px",[33,53715,3567],{"class":47},[33,53717,53718,53721,53723,53725,53727],{"class":35,"line":2208},[33,53719,53720],{"class":72},"            height",[33,53722,996],{"class":47},[33,53724,6227],{"class":72},[33,53726,53713],{"class":39},[33,53728,3567],{"class":47},[33,53730,53731,53734,53736,53738,53740,53743,53746],{"class":35,"line":2234},[33,53732,53733],{"class":72},"            border-left",[33,53735,996],{"class":47},[33,53737,720],{"class":72},[33,53739,53713],{"class":39},[33,53741,53742],{"class":72}," solid",[33,53744,53745],{"class":72}," pink",[33,53747,3567],{"class":47},[33,53749,53750,53753,53755,53757,53759,53761,53763],{"class":35,"line":2239},[33,53751,53752],{"class":72},"            border-bottom",[33,53754,996],{"class":47},[33,53756,720],{"class":72},[33,53758,53713],{"class":39},[33,53760,53742],{"class":72},[33,53762,53745],{"class":72},[33,53764,3567],{"class":47},[33,53766,53767,53769,53771,53773,53775,53778],{"class":35,"line":2247},[33,53768,53656],{"class":72},[33,53770,996],{"class":47},[33,53772,3071],{"class":72},[33,53774,53713],{"class":39},[33,53776,53777],{"class":72}," auto",[33,53779,3567],{"class":47},[33,53781,53782,53785,53787,53790],{"class":35,"line":2255},[33,53783,53784],{"class":72},"            justify-content",[33,53786,996],{"class":47},[33,53788,53789],{"class":72},"space-around",[33,53791,3567],{"class":47},[33,53793,53794,53797,53799,53802],{"class":35,"line":3992},[33,53795,53796],{"class":72},"            align-items",[33,53798,996],{"class":47},[33,53800,53801],{"class":72},"flex-end",[33,53803,3567],{"class":47},[33,53805,53806,53809,53811,53814],{"class":35,"line":4009},[33,53807,53808],{"class":72},"            text-align",[33,53810,996],{"class":47},[33,53812,53813],{"class":72},"center",[33,53815,3567],{"class":47},[33,53817,53818],{"class":35,"line":4014},[33,53819,4786],{"class":47},[33,53821,53822],{"class":35,"line":4019},[33,53823,100],{"emptyLinePlaceholder":99},[33,53825,53826,53828,53830,53833],{"class":35,"line":4024},[33,53827,53686],{"class":43},[33,53829,3367],{"class":39},[33,53831,53832],{"class":53522},"div",[33,53834,17810],{"class":47},[33,53836,53837,53839,53841,53843],{"class":35,"line":4038},[33,53838,53693],{"class":72},[33,53840,996],{"class":47},[33,53842,53698],{"class":72},[33,53844,3567],{"class":47},[33,53846,53847,53849,53851,53853,53855],{"class":35,"line":4043},[33,53848,53705],{"class":72},[33,53850,996],{"class":47},[33,53852,3071],{"class":72},[33,53854,53713],{"class":39},[33,53856,3567],{"class":47},[33,53858,53859,53862,53864,53867],{"class":35,"line":4834},[33,53860,53861],{"class":72},"            background-color",[33,53863,996],{"class":47},[33,53865,53866],{"class":72},"pink",[33,53868,3567],{"class":47},[33,53870,53871,53874,53876,53879],{"class":35,"line":4848},[33,53872,53873],{"class":72},"            flex-direction",[33,53875,996],{"class":47},[33,53877,53878],{"class":72},"column",[33,53880,3567],{"class":47},[33,53882,53883,53885,53887,53890],{"class":35,"line":4856},[33,53884,53784],{"class":72},[33,53886,996],{"class":47},[33,53888,53889],{"class":72},"space-between",[33,53891,3567],{"class":47},[33,53893,53894],{"class":35,"line":4861},[33,53895,4786],{"class":47},[33,53897,53898],{"class":35,"line":4867},[33,53899,100],{"emptyLinePlaceholder":99},[33,53901,53902,53904,53907,53910],{"class":35,"line":4873},[33,53903,53686],{"class":43},[33,53905,53906],{"class":53522}," div",[33,53908,53909],{"class":53522}," span",[33,53911,17810],{"class":47},[33,53913,53914],{"class":35,"line":4878},[33,53915,100],{"emptyLinePlaceholder":99},[33,53917,53918,53921,53923,53926,53928],{"class":35,"line":10194},[33,53919,53920],{"class":72},"            margin-top",[33,53922,996],{"class":47},[33,53924,53925],{"class":72},"-20",[33,53927,53713],{"class":39},[33,53929,3567],{"class":47},[33,53931,53932],{"class":35,"line":10218},[33,53933,4786],{"class":47},[33,53935,53936],{"class":35,"line":10223},[33,53937,100],{"emptyLinePlaceholder":99},[33,53939,53940,53942,53944,53947],{"class":35,"line":10229},[33,53941,53686],{"class":43},[33,53943,53906],{"class":53522},[33,53945,53946],{"class":53522}," h4",[33,53948,17810],{"class":47},[33,53950,53951,53954,53956,53959,53961],{"class":35,"line":10256},[33,53952,53953],{"class":72},"            margin-bottom",[33,53955,996],{"class":47},[33,53957,53958],{"class":72},"-35",[33,53960,53713],{"class":39},[33,53962,3567],{"class":47},[33,53964,53965,53967,53969,53971,53973],{"class":35,"line":10261},[33,53966,53705],{"class":72},[33,53968,996],{"class":47},[33,53970,2777],{"class":72},[33,53972,53713],{"class":39},[33,53974,3567],{"class":47},[33,53976,53977,53980,53982,53985,53987],{"class":35,"line":10267},[33,53978,53979],{"class":72},"            margin-left",[33,53981,996],{"class":47},[33,53983,53984],{"class":72},"-10",[33,53986,53713],{"class":39},[33,53988,3567],{"class":47},[33,53990,53991],{"class":35,"line":10279},[33,53992,4786],{"class":47},[33,53994,53995,53998,54000],{"class":35,"line":10291},[33,53996,53997],{"class":47},"    \u003C\u002F",[33,53999,2331],{"class":53522},[33,54001,53529],{"class":47},[33,54003,54004,54007,54009],{"class":35,"line":10303},[33,54005,54006],{"class":47},"\u003C\u002F",[33,54008,53556],{"class":53522},[33,54010,53529],{"class":47},[33,54012,54013],{"class":35,"line":11961},[33,54014,100],{"emptyLinePlaceholder":99},[33,54016,54017,54019,54022],{"class":35,"line":11986},[33,54018,2226],{"class":47},[33,54020,54021],{"class":53522},"body",[33,54023,53529],{"class":47},[33,54025,54026],{"class":35,"line":12009},[33,54027,100],{"emptyLinePlaceholder":99},[33,54029,54030,54032,54035],{"class":35,"line":12033},[33,54031,53563],{"class":47},[33,54033,54034],{"class":53522},"script",[33,54036,53529],{"class":47},[33,54038,54039],{"class":35,"line":12038},[33,54040,54041],{"class":2487},"        \u002F\u002F 1. 四次弹框效果\n",[33,54043,54044],{"class":35,"line":12043},[33,54045,54046],{"class":2487},"        \u002F\u002F 声明一个新的数组\n",[33,54048,54049,54052,54055,54057],{"class":35,"line":12048},[33,54050,54051],{"class":39},"        let",[33,54053,54054],{"class":47}," arr ",[33,54056,57],{"class":39},[33,54058,615],{"class":47},[33,54060,54061,54063,54065,54068,54070,54072,54074,54076,54078,54081,54083,54085],{"class":35,"line":12057},[33,54062,5658],{"class":39},[33,54064,3924],{"class":47},[33,54066,54067],{"class":39},"let",[33,54069,11684],{"class":47},[33,54071,57],{"class":39},[33,54073,27357],{"class":72},[33,54075,11691],{"class":47},[33,54077,3861],{"class":39},[33,54079,54080],{"class":72}," 4",[33,54082,5469],{"class":47},[33,54084,4551],{"class":39},[33,54086,14682],{"class":47},[33,54088,54089],{"class":35,"line":12062},[33,54090,54091],{"class":2487},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[33,54093,54094],{"class":35,"line":12068},[33,54095,54096],{"class":2487},"            \u002F\u002F arr.push(num)\n",[33,54098,54099,54102,54105,54107,54110,54112,54115,54117,54120],{"class":35,"line":12089},[33,54100,54101],{"class":47},"            arr.",[33,54103,54104],{"class":43},"push",[33,54106,133],{"class":47},[33,54108,54109],{"class":43},"prompt",[33,54111,133],{"class":47},[33,54113,54114],{"class":60},"`请输入第${",[33,54116,2861],{"class":47},[33,54118,54119],{"class":60},"}季度的数据:`",[33,54121,551],{"class":47},[33,54123,54124],{"class":35,"line":12095},[33,54125,54126],{"class":2487},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[33,54128,54129],{"class":35,"line":12109},[33,54130,4786],{"class":47},[33,54132,54133],{"class":35,"line":12115},[33,54134,54135],{"class":2487},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[33,54137,54138],{"class":35,"line":12142},[33,54139,54140],{"class":2487},"        \u002F\u002F 盒子开头\n",[33,54142,54143,54146,54149,54151,54154],{"class":35,"line":12151},[33,54144,54145],{"class":47},"        document.",[33,54147,54148],{"class":43},"write",[33,54150,133],{"class":47},[33,54152,54153],{"class":60},"` \u003Cdiv class=\"box\">`",[33,54155,226],{"class":47},[33,54157,54158],{"class":35,"line":12157},[33,54159,100],{"emptyLinePlaceholder":99},[33,54161,54162],{"class":35,"line":12165},[33,54163,54164],{"class":2487},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[33,54166,54167,54169,54171,54173,54175,54177,54179,54181,54183,54186,54189,54191,54193],{"class":35,"line":12170},[33,54168,5658],{"class":39},[33,54170,3924],{"class":47},[33,54172,54067],{"class":39},[33,54174,11684],{"class":47},[33,54176,57],{"class":39},[33,54178,1437],{"class":72},[33,54180,11691],{"class":47},[33,54182,2226],{"class":39},[33,54184,54185],{"class":47}," arr.",[33,54187,54188],{"class":72},"length",[33,54190,5469],{"class":47},[33,54192,4551],{"class":39},[33,54194,14682],{"class":47},[33,54196,54197,54200,54202,54204],{"class":35,"line":18842},[33,54198,54199],{"class":47},"            document.",[33,54201,54148],{"class":43},[33,54203,133],{"class":47},[33,54205,54206],{"class":60},"`\n",[33,54208,54209,54212,54214,54216,54218,54220],{"class":35,"line":18848},[33,54210,54211],{"class":60},"              \u003Cdiv style=\"height: ${",[33,54213,6134],{"class":47},[33,54215,3300],{"class":60},[33,54217,2861],{"class":47},[33,54219,3348],{"class":60},[33,54221,54222],{"class":60},"}px;\">\n",[33,54224,54225,54228,54230,54232,54234,54236],{"class":35,"line":18871},[33,54226,54227],{"class":60},"                \u003Cspan>${",[33,54229,6134],{"class":47},[33,54231,3300],{"class":60},[33,54233,2861],{"class":47},[33,54235,3348],{"class":60},[33,54237,54238],{"class":60},"}\u003C\u002Fspan>\n",[33,54240,54241,54244,54246,54248,54250],{"class":35,"line":18877},[33,54242,54243],{"class":60},"                \u003Ch4>第${",[33,54245,2861],{"class":47},[33,54247,47789],{"class":39},[33,54249,27357],{"class":72},[33,54251,54252],{"class":60},"}季度\u003C\u002Fh4>\n",[33,54254,54255],{"class":35,"line":18900},[33,54256,54257],{"class":60},"              \u003C\u002Fdiv>          \n",[33,54259,54260,54263],{"class":35,"line":18914},[33,54261,54262],{"class":60},"            `",[33,54264,226],{"class":47},[33,54266,54267],{"class":35,"line":18934},[33,54268,4786],{"class":47},[33,54270,54271],{"class":35,"line":18940},[33,54272,54273],{"class":2487},"        \u002F\u002F 盒子结尾\n",[33,54275,54276,54278,54280,54282,54285],{"class":35,"line":18951},[33,54277,54145],{"class":47},[33,54279,54148],{"class":43},[33,54281,133],{"class":47},[33,54283,54284],{"class":60},"` \u003C\u002Fdiv>`",[33,54286,226],{"class":47},[33,54288,54289,54291,54293],{"class":35,"line":18974},[33,54290,53997],{"class":47},[33,54292,54034],{"class":53522},[33,54294,53529],{"class":47},[33,54296,54297,54299,54301],{"class":35,"line":18996},[33,54298,54006],{"class":47},[33,54300,54021],{"class":53522},[33,54302,53529],{"class":47},[33,54304,54305],{"class":35,"line":19001},[33,54306,100],{"emptyLinePlaceholder":99},[33,54308,54309,54311,54313],{"class":35,"line":19007},[33,54310,54006],{"class":47},[33,54312,52857],{"class":53522},[33,54314,53529],{"class":47},[631,54316,54318],{"id":54317},"_284-冒泡排序","2.8.4 冒泡排序",[23,54320,54322],{"className":52855,"code":54321,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,54323,54324,54334,54348,54352,54360,54375,54395,54407,54415,54419,54427,54435,54466,54499,54536,54541,54560,54565,54578,54593,54609,54613,54618,54622,54632,54641,54649,54653],{"__ignoreMap":28},[33,54325,54326,54328,54330,54332],{"class":35,"line":36},[33,54327,53519],{"class":47},[33,54329,53523],{"class":53522},[33,54331,53526],{"class":43},[33,54333,53529],{"class":47},[33,54335,54336,54338,54340,54342,54344,54346],{"class":35,"line":51},[33,54337,2226],{"class":47},[33,54339,52857],{"class":53522},[33,54341,53538],{"class":43},[33,54343,57],{"class":47},[33,54345,53543],{"class":60},[33,54347,53529],{"class":47},[33,54349,54350],{"class":35,"line":64},[33,54351,100],{"emptyLinePlaceholder":99},[33,54353,54354,54356,54358],{"class":35,"line":76},[33,54355,2226],{"class":47},[33,54357,53556],{"class":53522},[33,54359,53529],{"class":47},[33,54361,54362,54365,54367,54369,54371,54373],{"class":35,"line":87},[33,54363,54364],{"class":47},"  \u003C",[33,54366,53566],{"class":53522},[33,54368,53569],{"class":43},[33,54370,57],{"class":47},[33,54372,53574],{"class":60},[33,54374,53529],{"class":47},[33,54376,54377,54379,54381,54383,54385,54387,54389,54391,54393],{"class":35,"line":96},[33,54378,54364],{"class":47},[33,54380,53566],{"class":53522},[33,54382,17158],{"class":43},[33,54384,57],{"class":47},[33,54386,53613],{"class":60},[33,54388,53593],{"class":43},[33,54390,57],{"class":47},[33,54392,53620],{"class":60},[33,54394,53529],{"class":47},[33,54396,54397,54399,54401,54403,54405],{"class":35,"line":103},[33,54398,54364],{"class":47},[33,54400,53629],{"class":53522},[33,54402,53632],{"class":47},[33,54404,53629],{"class":53522},[33,54406,53529],{"class":47},[33,54408,54409,54411,54413],{"class":35,"line":108},[33,54410,54006],{"class":47},[33,54412,53556],{"class":53522},[33,54414,53529],{"class":47},[33,54416,54417],{"class":35,"line":119},[33,54418,100],{"emptyLinePlaceholder":99},[33,54420,54421,54423,54425],{"class":35,"line":128},[33,54422,2226],{"class":47},[33,54424,54021],{"class":53522},[33,54426,53529],{"class":47},[33,54428,54429,54431,54433],{"class":35,"line":1753},[33,54430,54364],{"class":47},[33,54432,54034],{"class":53522},[33,54434,53529],{"class":47},[33,54436,54437,54440,54442,54444,54446,54448,54450,54452,54454,54456,54458,54460,54462,54464],{"class":35,"line":1763},[33,54438,54439],{"class":39},"    let",[33,54441,54054],{"class":47},[33,54443,57],{"class":39},[33,54445,906],{"class":47},[33,54447,758],{"class":72},[33,54449,245],{"class":47},[33,54451,753],{"class":72},[33,54453,245],{"class":47},[33,54455,730],{"class":72},[33,54457,245],{"class":47},[33,54459,725],{"class":72},[33,54461,245],{"class":47},[33,54463,720],{"class":72},[33,54465,919],{"class":47},[33,54467,54468,54470,54472,54474,54476,54478,54480,54482,54484,54486,54488,54491,54493,54495,54497],{"class":35,"line":1775},[33,54469,675],{"class":39},[33,54471,3924],{"class":47},[33,54473,54067],{"class":39},[33,54475,11684],{"class":47},[33,54477,57],{"class":39},[33,54479,1437],{"class":72},[33,54481,11691],{"class":47},[33,54483,2226],{"class":39},[33,54485,54185],{"class":47},[33,54487,54188],{"class":72},[33,54489,54490],{"class":39}," -",[33,54492,27357],{"class":72},[33,54494,5469],{"class":47},[33,54496,4551],{"class":39},[33,54498,14682],{"class":47},[33,54500,54501,54504,54506,54508,54510,54512,54514,54516,54518,54520,54522,54524,54526,54528,54530,54532,54534],{"class":35,"line":1780},[33,54502,54503],{"class":39},"      for",[33,54505,3924],{"class":47},[33,54507,54067],{"class":39},[33,54509,11745],{"class":47},[33,54511,57],{"class":39},[33,54513,1437],{"class":72},[33,54515,11752],{"class":47},[33,54517,2226],{"class":39},[33,54519,54185],{"class":47},[33,54521,54188],{"class":72},[33,54523,54490],{"class":39},[33,54525,11684],{"class":47},[33,54527,2949],{"class":39},[33,54529,27357],{"class":72},[33,54531,11759],{"class":47},[33,54533,4551],{"class":39},[33,54535,14682],{"class":47},[33,54537,54538],{"class":35,"line":1785},[33,54539,54540],{"class":2487},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[33,54542,54543,54545,54548,54550,54553,54555,54557],{"class":35,"line":1940},[33,54544,2130],{"class":39},[33,54546,54547],{"class":47}," (arr[j] ",[33,54549,3367],{"class":39},[33,54551,54552],{"class":47}," arr[j ",[33,54554,880],{"class":39},[33,54556,27357],{"class":72},[33,54558,54559],{"class":47},"]) {\n",[33,54561,54562],{"class":35,"line":2183},[33,54563,54564],{"class":2487},"          \u002F\u002F 交换两个变量\n",[33,54566,54567,54570,54573,54575],{"class":35,"line":2208},[33,54568,54569],{"class":39},"          let",[33,54571,54572],{"class":47}," tmp ",[33,54574,57],{"class":39},[33,54576,54577],{"class":47}," arr[j]\n",[33,54579,54580,54583,54585,54587,54589,54591],{"class":35,"line":2234},[33,54581,54582],{"class":47},"          arr[j] ",[33,54584,57],{"class":39},[33,54586,54552],{"class":47},[33,54588,880],{"class":39},[33,54590,27357],{"class":72},[33,54592,919],{"class":47},[33,54594,54595,54598,54600,54602,54604,54606],{"class":35,"line":2239},[33,54596,54597],{"class":47},"          arr[j ",[33,54599,880],{"class":39},[33,54601,27357],{"class":72},[33,54603,2172],{"class":47},[33,54605,57],{"class":39},[33,54607,54608],{"class":47}," tmp\n",[33,54610,54611],{"class":35,"line":2247},[33,54612,4786],{"class":47},[33,54614,54615],{"class":35,"line":2255},[33,54616,54617],{"class":47},"      }\n",[33,54619,54620],{"class":35,"line":3992},[33,54621,4446],{"class":47},[33,54623,54624,54627,54629],{"class":35,"line":4009},[33,54625,54626],{"class":47},"    document.",[33,54628,54148],{"class":43},[33,54630,54631],{"class":47},"(arr)\n",[33,54633,54634,54637,54639],{"class":35,"line":4014},[33,54635,54636],{"class":47},"  \u003C\u002F",[33,54638,54034],{"class":53522},[33,54640,53529],{"class":47},[33,54642,54643,54645,54647],{"class":35,"line":4019},[33,54644,54006],{"class":47},[33,54646,54021],{"class":53522},[33,54648,53529],{"class":47},[33,54650,54651],{"class":35,"line":4024},[33,54652,100],{"emptyLinePlaceholder":99},[33,54654,54655,54657,54659],{"class":35,"line":4038},[33,54656,54006],{"class":47},[33,54658,52857],{"class":53522},[33,54660,53529],{"class":47},[19,54662,54663],{},[3736,54664],{"alt":28,"src":54665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54667,54668],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54670,54671],{},"let arr = [4, 2, 5, 1, 3]",[19,54673,54674],{},"\u002F\u002F 1.升序排列写法",[19,54676,54677],{},"arr.sort(function (a, b) {",[19,54679,54680],{},"return a - b",[19,54682,54683],{},"})",[19,54685,54686],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54688,54689],{},"\u002F\u002F 降序排列写法",[19,54691,54677],{},[19,54693,54694],{},"return b - a",[19,54696,54683],{},[19,54698,54699],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54701,54703],{"id":54702},"_29-函数","2.9 函数",[19,54705,54706],{},[3736,54707],{"alt":28,"src":54708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54710,54711],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54713,54714],{},"函数的声明用function",[19,54716,54717],{},"函数里边可以嵌套函数",[631,54719,54721],{"id":54720},"_291-函数传参","2.9.1 函数传参",[19,54723,54724],{},[3736,54725],{"alt":28,"src":54726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54728,54729],{},[3736,54730],{"alt":28,"src":54731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3413,54733,54734,54737,54740,54743,54746,54749],{},[331,54735,54736],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[331,54738,54739],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[331,54741,54742],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[331,54744,54745],{},"开发中尽量保持形参和实参个数一致",[331,54747,54748],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[331,54750,54751],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54753,54754],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[631,54756,54758],{"id":54757},"_292-函数的返回值","2.9.2 函数的返回值",[19,54760,54761],{},[3736,54762],{"alt":28,"src":54763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54765,54766],{},[3736,54767],{"alt":28,"src":54768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3413,54770,54771,54774,54777,54780,54783],{},[331,54772,54773],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[331,54775,54776],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[331,54778,54779],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[331,54781,54782],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[331,54784,54785],{},"断点调试:进入函数内部看执行过程F11",[631,54787,54789],{"id":54788},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[23,54791,54793],{"className":52855,"code":54792,"language":52857,"meta":28,"style":28},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[30,54794,54795,54800,54805,54809,54814],{"__ignoreMap":28},[33,54796,54797],{"class":35,"line":36},[33,54798,54799],{"class":47},"    function fn(a, b) {\n",[33,54801,54802],{"class":35,"line":51},[33,54803,54804],{"class":47},"      console.log(a + b);\n",[33,54806,54807],{"class":35,"line":64},[33,54808,4446],{"class":47},[33,54810,54811],{"class":35,"line":76},[33,54812,54813],{"class":47},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[33,54815,54816],{"class":35,"line":87},[33,54817,54818],{"class":47},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[631,54820,54822],{"id":54821},"_294-作用域","2.9.4 作用域",[3413,54824,54825,54831,54836,54839,54842],{},[331,54826,54827,54828],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2575,54829,54830],{},"作用域",[331,54832,54833],{},[2575,54834,54835],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[331,54837,54838],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[331,54840,54841],{},"函数内部可以直接所使用全局变量",[331,54843,54844],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54846,16873],{},[23,54848,54850],{"className":52855,"code":54849,"language":52857,"meta":28,"style":28},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[30,54851,54852,54857,54862,54866,54871,54876,54881],{"__ignoreMap":28},[33,54853,54854],{"class":35,"line":36},[33,54855,54856],{"class":47},"    function fun() {\n",[33,54858,54859],{"class":35,"line":51},[33,54860,54861],{"class":47},"      num = 10\n",[33,54863,54864],{"class":35,"line":64},[33,54865,4446],{"class":47},[33,54867,54868],{"class":35,"line":76},[33,54869,54870],{"class":47},"    fun()\n",[33,54872,54873],{"class":35,"line":87},[33,54874,54875],{"class":47},"    console.log(num)\n",[33,54877,54878],{"class":35,"line":96},[33,54879,54880],{"class":47},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[33,54882,54883],{"class":35,"line":103},[33,54884,54885],{"class":47},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3413,54887,54888,54891],{},[331,54889,54890],{},"函数内部的形参可以看做是局部变量",[331,54892,54893],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54895,54896,54897],{},"变量访问原则： ",[2575,54898,54899],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[631,54901,54903],{"id":54902},"_295-匿名函数","2.9.5 匿名函数",[19,54905,54906],{},"函数可以分为具名函数和匿名函数",[19,54908,54909],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[328,54911,54912],{},[331,54913,54914],{},"函数表达式",[19,54916,54917],{},[3736,54918],{"alt":28,"src":54919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54921,54922],{},"里边也可以写参数",[19,54924,54925],{},"具名函数调用位置可以随意调整；",[19,54927,54928],{},"匿名函数函数表达式形式只能在声明后才可以使用",[328,54930,54931],{"start":51},[331,54932,54933],{},"立即执行函数",[19,54935,54936],{},[3736,54937],{"alt":28,"src":54938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54940,54941],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54943,54944],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54946,54947],{},"(function () {})();",[19,54949,54950],{},"不要落下最后的;",[19,54952,54953],{},"立即执行函数必须要加;",[19,54955,54956],{},"分号写前写后都没问题",[19,54958,54959],{},"写前：",[19,54961,54962],{},"(function() {})()",[19,54964,54965],{},";(function () {})();",[19,54967,54968],{},"写后:",[19,54970,54971],{},"(function() {})();",[19,54973,54947],{},[19,54975,54976],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54978,54979],{},"还有一种写法：",[19,54981,54982],{},"(function(){}());",[19,54984,54985],{},"或者:",[19,54987,54988],{},"!function(){}();",[19,54990,54991],{},"立即执行函数有时候也是可以加名字的：",[19,54993,54994],{},"(function flexible(window,document) {}(window,document));",[19,54996,54997],{},"省一些调用方法",[631,54999,55001],{"id":55000},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,55003,55004],{},[3736,55005],{"alt":28,"src":55006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,55008,55009],{},"这样就不用非得给x,y初始化了",[19,55011,55012],{},[3736,55013],{"alt":28,"src":55014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,55016,55017],{},"代码执行时先看左边",[19,55019,55020],{},"例如：console.log(false && 3+5)",[19,55022,55023],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,55025,55026],{},"&&都是真时，就返回最后一个真值",[19,55028,55029],{},"console.log(11 && 22)",[19,55031,55032],{},"输出22",[19,55034,55035],{},"逻辑与：遇真则真",[19,55037,16873],{},[19,55039,55040],{},"let age=1",[19,55042,55043],{},"console.log(11 || age++)",[19,55045,55046],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,55048,55049],{},"console.log(11 || 22)",[19,55051,55052],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,55054,55055],{},"||如果都是假的话，就取最后一个假的值了",[631,55057,55059],{"id":55058},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,55061,55062],{},"显示转换：",[19,55064,55065,55068,55069],{},[2575,55066,55067],{},"记忆","： ",[2575,55070,55071],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,55073,55074],{},"空字符串为假，其他字符串全为真",[19,55076,55077],{},[3736,55078],{"alt":28,"src":55079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,55081,55082],{},"隐式转换：",[19,55084,55085],{},[3736,55086],{"alt":28,"src":55087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,55089,55090],{},"隐式转换:",[19,55092,55093],{},"null+3=3",[19,55095,55096],{},"undefined+3=NaN",[19,55098,55099],{},"null==undefined 输出true,他两个都当0看",[19,55101,55102],{},"null===undefined 输出false",[19,55104,55105],{},"undefined做任何操作都是NaN",[19,55107,55108],{},"NaN不等于NaN，NaN表示计算错误",[14,55110,55112],{"id":55111},"_210-对象","2.10 对象",[631,55114,55116],{"id":55115},"_2101-对象的介绍","2.10.1 对象的介绍",[19,55118,55119],{},"对象也是一种数据类型，里边的数据是无序的",[19,55121,55122],{},"对象由属性和方法组成",[19,55124,55125],{},[3736,55126],{"alt":28,"src":55127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,55129,55130],{},[3736,55131],{"alt":28,"src":55132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,55134,55135],{},[3736,55136],{"alt":28,"src":55137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[631,55139,55141],{"id":55140},"_2102-对象属性","2.10.2 对象属性",[19,55143,55144],{},[3736,55145],{"alt":28,"src":55146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[328,55148,55149],{},[331,55150,55151],{},"查询对象",[19,55153,55154],{},"对象名.属性 goods.uname",[19,55156,55157],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,55159,55160],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,55162,55163],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,55165,55166],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[328,55168,55169],{"start":51},[331,55170,55171],{},"重新赋值",[19,55173,55174],{},"对象名.属性=新值",[328,55176,55177],{"start":64},[331,55178,55179],{},"增加新数据",[19,55181,55174],{},[328,55183,55184],{"start":76},[331,55185,55186],{},"删除对象中的属性",[19,55188,55189],{},"delete 对象名.属性",[631,55191,55193],{"id":55192},"_2103-对象方法","2.10.3 对象方法",[19,55195,55196],{},[3736,55197],{"alt":28,"src":55198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,55200,55201],{},"后边跟的是匿名函数",[19,55203,55204],{},"对象外面的叫函数；对象内部的叫方法",[19,55206,55207],{},[3736,55208],{"alt":28,"src":55209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[631,55211,55213],{"id":55212},"_2104-遍历对象","2.10.4 遍历对象",[19,55215,55216],{},"理解为加括号的python字典遍历",[19,55218,55219],{},[3736,55220],{"alt":28,"src":55221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,55223,55224],{},"k是字符串类型",[19,55226,55227],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[23,55229,55231],{"className":52855,"code":55230,"language":52857,"meta":28,"style":28},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[30,55232,55233,55238,55243,55248,55253],{"__ignoreMap":28},[33,55234,55235],{"class":35,"line":36},[33,55236,55237],{"class":47},"   let arr = [1, 2, 3]\n",[33,55239,55240],{"class":35,"line":51},[33,55241,55242],{"class":47},"    for (let k in arr) {\n",[33,55244,55245],{"class":35,"line":64},[33,55246,55247],{"class":47},"      console.log(k)\n",[33,55249,55250],{"class":35,"line":76},[33,55251,55252],{"class":47},"      console.log(arr[k])\n",[33,55254,55255],{"class":35,"line":87},[33,55256,4446],{"class":47},[19,55258,55259],{},[3736,55260],{"alt":28,"src":55261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,55263,55264],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,55266,55267],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,55269,55270],{},"for in 得到的k是属性名",[54034,55272,55273],{},"\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,55275,55276],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[631,55278,55280],{"id":55279},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,55282,55283],{},"数组中放对象信息",[23,55285,55289],{"className":55286,"code":55287,"language":55288,"meta":28,"style":28},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[30,55290,55291,55299,55304,55309,55314,55319,55324,55329,55334,55339,55344,55349,55354,55358,55362],{"__ignoreMap":28},[33,55292,55293,55295,55297],{"class":35,"line":36},[33,55294,2226],{"class":47},[33,55296,54034],{"class":53522},[33,55298,53529],{"class":47},[33,55300,55301],{"class":35,"line":51},[33,55302,55303],{"class":47},"    let students = [\n",[33,55305,55306],{"class":35,"line":64},[33,55307,55308],{"class":47},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[33,55310,55311],{"class":35,"line":76},[33,55312,55313],{"class":47},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[33,55315,55316],{"class":35,"line":87},[33,55317,55318],{"class":47},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[33,55320,55321],{"class":35,"line":96},[33,55322,55323],{"class":47},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[33,55325,55326],{"class":35,"line":103},[33,55327,55328],{"class":47},"    ]\n",[33,55330,55331],{"class":35,"line":108},[33,55332,55333],{"class":47},"    for (let i = 0; i \u003C students.length; i++) {\n",[33,55335,55336],{"class":35,"line":119},[33,55337,55338],{"class":47},"      for (let k in students[i]) {\n",[33,55340,55341],{"class":35,"line":128},[33,55342,55343],{"class":47},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[33,55345,55346],{"class":35,"line":1753},[33,55347,55348],{"class":47},"        \u002F\u002F输出每个人的名字：\n",[33,55350,55351],{"class":35,"line":1763},[33,55352,55353],{"class":47},"        \u002F\u002Fconsole.log(students[i].name)\n",[33,55355,55356],{"class":35,"line":1775},[33,55357,54617],{"class":47},[33,55359,55360],{"class":35,"line":1780},[33,55361,4446],{"class":47},[33,55363,55364,55366,55368],{"class":35,"line":1785},[33,55365,54636],{"class":47},[33,55367,54034],{"class":53522},[33,55369,53529],{"class":47},[631,55371,55373],{"id":55372},"_2106-内置对象","2.10.6 内置对象",[19,55375,55376],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[328,55378,55379],{},[331,55380,55381],{},"数学对象Math",[19,55383,55384],{},[3736,55385],{"alt":28,"src":55386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55388,55389],{},[2663,55390,55393],{"href":55391,"rel":55392},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[26103],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55395,55396],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55398,55399],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55401,55402],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55404,55405],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55407,55408],{},"null属于对象数据类型",[328,55410,55411],{"start":51},[331,55412,55413],{},"生成任意范围随机数",[19,55415,55416],{},[3736,55417],{"alt":28,"src":55418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55420,55421],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55423,55424],{},"乘以几就取不到几",[19,55426,55427],{},"取数组中的随机元素：",[19,55429,55430],{},"let arr = ['red', 'green', 'blue']",[19,55432,55433],{},"let random = Math.floor(Math.random() * arr.length)",[19,55435,55436],{},"console.log(arr[random])",[19,55438,55439],{},"这个函数得到的是全闭区间",[19,55441,55442],{},"function getRandom(N, M) {",[19,55444,55445],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55447,210],{},[19,55449,55450],{},"console.log(getRandom(4, 8))",[631,55452,55454],{"id":55453},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55456,55457],{},[3736,55458],{"alt":28,"src":55459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55461,55462],{},[3736,55463],{"alt":28,"src":55464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55466,55467],{},[3736,55468],{"alt":28,"src":55469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55471,55472],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55474,55475],{},[3736,55476],{"alt":28,"src":55477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55479,55480],{},[3736,55481],{"alt":28,"src":55482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55484,55485],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55487,55488],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55490,55491],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2331,55493,55494],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":55496},[55497,55505,55506,55507,55508,55509,55516,55520,55526,55535],{"id":52690,"depth":51,"text":52691,"children":55498},[55499,55500,55501,55502,55503,55504],{"id":52694,"depth":64,"text":52695},{"id":52711,"depth":64,"text":52712},{"id":52751,"depth":64,"text":52752},{"id":52763,"depth":64,"text":52764},{"id":52772,"depth":64,"text":52773},{"id":52820,"depth":64,"text":52821},{"id":52830,"depth":51,"text":52831},{"id":52918,"depth":51,"text":52919},{"id":52941,"depth":51,"text":52942},{"id":52953,"depth":51,"text":52954},{"id":53140,"depth":51,"text":53141,"children":55510},[55511,55512,55513,55514,55515],{"id":53144,"depth":64,"text":53145},{"id":53153,"depth":64,"text":53154},{"id":53181,"depth":64,"text":53182},{"id":53217,"depth":64,"text":53218},{"id":53242,"depth":64,"text":53243},{"id":53254,"depth":51,"text":53255,"children":55517},[55518,55519],{"id":53275,"depth":64,"text":53276},{"id":53369,"depth":64,"text":53370},{"id":53427,"depth":51,"text":53428,"children":55521},[55522,55523,55524,55525],{"id":53431,"depth":64,"text":53432},{"id":53455,"depth":64,"text":53456},{"id":53508,"depth":64,"text":53509},{"id":54317,"depth":64,"text":54318},{"id":54702,"depth":51,"text":54703,"children":55527},[55528,55529,55530,55531,55532,55533,55534],{"id":54720,"depth":64,"text":54721},{"id":54757,"depth":64,"text":54758},{"id":54788,"depth":64,"text":54789},{"id":54821,"depth":64,"text":54822},{"id":54902,"depth":64,"text":54903},{"id":55000,"depth":64,"text":55001},{"id":55058,"depth":64,"text":55059},{"id":55111,"depth":51,"text":55112,"children":55536},[55537,55538,55539,55540,55541,55542,55543],{"id":55115,"depth":64,"text":55116},{"id":55140,"depth":64,"text":55141},{"id":55192,"depth":64,"text":55193},{"id":55212,"depth":64,"text":55213},{"id":55279,"depth":64,"text":55280},{"id":55372,"depth":64,"text":55373},{"id":55453,"depth":64,"text":55454},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52682,"description":2359},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55550,"title":55551,"body":55552,"description":2359,"extension":2360,"meta":78884,"navigation":99,"path":78885,"seo":78886,"stem":78887,"__hash__":78888},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55553,"toc":78824},[55554,55557,55560,55563,55568,55571,55574,55577,55581,55585,55591,55596,55604,55611,55614,55618,55623,55628,55633,55636,55639,55650,55653,55657,55660,55663,55668,55673,55678,55681,55684,55776,55779,55784,55787,55792,55795,55798,55803,55806,55811,55815,55818,55832,55836,55841,55844,55847,55851,55856,55859,55863,55867,55872,55876,55881,55884,55887,55890,55893,55896,55899,55904,55909,55937,55940,55943,55946,55951,55954,55957,55960,55963,55967,55996,56000,56005,56010,56013,56016,56019,56024,56139,56144,56149,56310,56315,56318,56322,56327,56332,56335,56338,56341,56344,56347,56350,56353,56356,56359,56362,56365,56368,56371,56374,56376,56379,56382,56385,56390,56394,56791,56794,56800,56804,56809,58090,58095,58098,58101,58104,58109,59305,59309,59315,59320,59323,59328,59333,59337,59341,59346,59349,59354,59357,59360,59364,60272,60275,60279,60500,60503,60506,60509,60735,60738,60962,60965,60969,60974,60977,60980,61208,61211,61244,61247,61251,61256,61260,61263,61266,61269,61272,61275,61278,61281,61286,62566,62570,62573,63666,63670,63673,63676,63679,63682,63686,63689,63692,63694,63702,65182,65186,65189,65192,65195,65404,65407,65411,65415,65420,65425,65428,65431,65436,65440,65445,65448,65557,65561,65566,65571,65574,65577,65581,65586,65591,65596,65599,65602,65613,65616,65621,65626,65629,65632,65705,65709,65714,65717,65719,65730,65734,65739,67065,67068,67071,67074,67076,67079,67082,67085,67088,67091,67094,67097,67100,67103,67106,67109,67112,67114,67116,67119,67123,68217,68220,68223,68239,68253,68256,68261,68267,68272,68276,68280,68285,68289,68294,68736,68741,68744,68748,68753,68756,68759,68763,68768,68772,68777,68782,68786,68791,68796,68799,68804,68809,68813,68818,68823,68927,68930,68934,68939,69305,69308,69311,69314,69317,69320,69323,69326,69329,70625,70629,70634,70639,70642,70645,70648,70651,70653,70658,70663,70666,70670,70675,70680,70685,70688,70691,70694,70697,70700,70705,70708,70712,70717,70722,70726,70731,70734,70739,70742,70745,70748,70751,70754,70759,70762,70765,70768,70771,70775,70780,70783,70787,70792,70795,70798,70802,70831,70834,70838,70842,70847,70851,70856,70859,70862,70865,70868,70871,70874,70877,70880,70883,70886,70889,70892,70895,70898,70902,70907,70912,70915,70919,70923,70928,70931,70935,70938,70941,70946,70951,70956,70961,70966,70969,70972,70977,70982,70986,70991,70994,70999,71002,71005,71008,71011,71016,71019,71028,71032,71037,71040,71043,71047,71050,71055,71059,71062,71068,71074,71078,71104,71107,72664,72667,73163,73166,73171,73176,73181,73185,73190,73195,73200,73204,73209,73212,73215,73218,73221,73225,73228,73233,73236,73241,73245,73250,73253,73258,73263,73268,73271,73274,73279,73284,73287,73290,73294,73297,73302,73305,73310,73313,73318,73323,73328,73331,73336,73401,73404,73415,73419,73424,73596,73600,73605,73608,73611,73614,73618,73629,73633,73636,73641,73646,73649,73652,73655,73658,73661,73663,73666,73669,73672,73677,73680,73685,73688,73692,73695,73698,73712,73716,73719,73774,73779,73782,73785,73790,73793,73797,73802,73932,73936,73941,73946,74027,74032,74036,74039,74044,74049,74055,74058,74061,74064,74068,74073,74076,74087,74091,74108,77154,77158,77161,77164,77167,77188,77192,77195,77203,77206,77211,77214,77217,77222,77227,77231,77252,77256,77261,77264,77267,77270,77273,77277,77282,77285,77289,77294,77297,77302,77305,77310,77313,77318,78521,78525,78530,78533,78538,78821],[10,55555,55551],{"id":55556},"_3web-apis",[19,55558,55559],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55561,55562],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55564,55565],{},[3736,55566],{"alt":28,"src":55567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55569,55570],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55572,55573],{},"建议数组和对象使用 const 来声明",[19,55575,55576],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55578,55580],{"id":55579},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[631,55582,55584],{"id":55583},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55586,55587,55590],{},[30,55588,55589],{},"document"," = HTML 文件解析后的对象化表示；",[19,55592,55593,55595],{},[30,55594,55589],{}," ≠ HTML 文件本身",[19,55597,55598,55603],{},[2575,55599,55600],{},[30,55601,55602],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55605,55606,55610],{},[2575,55607,55608],{},[30,55609,55589],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55612,55613],{},"document实际上为window.document的简写",[631,55615,55617],{"id":55616},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55619,55620],{},[3736,55621],{"alt":28,"src":55622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55624,55625],{},[3736,55626],{"alt":28,"src":55627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55629,55630],{},[3736,55631],{"alt":28,"src":55632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55634,55635],{},"console.dir()",[19,55637,55638],{},"dir用来打印对象",[3413,55640,55641,55644,55647],{},[331,55642,55643],{},"任何一个标签，都是一个对象",[331,55645,55646],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[331,55648,55649],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55651,55652],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[631,55654,55656],{"id":55655},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55658,55659],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55661,55662],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55664,55665],{},[2575,55666,55667],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[328,55669,55670],{},[331,55671,55672],{},"利用CSS选择器来获取标签元素",[19,55674,55675],{},[3736,55676],{"alt":28,"src":55677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55679,55680],{},"里边的选择器必须必须加引号！！！",[19,55682,55683],{},"只选择第一个元素",[23,55685,55687],{"className":55286,"code":55686,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,55688,55689,55697,55718,55737,55745,55750,55755,55760,55768],{"__ignoreMap":28},[33,55690,55691,55693,55695],{"class":35,"line":36},[33,55692,2226],{"class":47},[33,55694,54021],{"class":53522},[33,55696,53529],{"class":47},[33,55698,55699,55701,55703,55706,55708,55711,55714,55716],{"class":35,"line":51},[33,55700,54364],{"class":47},[33,55702,53832],{"class":53522},[33,55704,55705],{"class":43}," class",[33,55707,57],{"class":47},[33,55709,55710],{"class":60},"\"box\"",[33,55712,55713],{"class":47},">123\u003C\u002F",[33,55715,53832],{"class":53522},[33,55717,53529],{"class":47},[33,55719,55720,55722,55724,55726,55728,55730,55733,55735],{"class":35,"line":64},[33,55721,54364],{"class":47},[33,55723,53832],{"class":53522},[33,55725,55705],{"class":43},[33,55727,57],{"class":47},[33,55729,55710],{"class":60},[33,55731,55732],{"class":47},">456\u003C\u002F",[33,55734,53832],{"class":53522},[33,55736,53529],{"class":47},[33,55738,55739,55741,55743],{"class":35,"line":76},[33,55740,54364],{"class":47},[33,55742,54034],{"class":53522},[33,55744,53529],{"class":47},[33,55746,55747],{"class":35,"line":87},[33,55748,55749],{"class":47},"    \u002F\u002F 1.获取匹配的第一个元素\n",[33,55751,55752],{"class":35,"line":96},[33,55753,55754],{"class":47},"    const box = document.querySelector('div')\n",[33,55756,55757],{"class":35,"line":103},[33,55758,55759],{"class":47},"    console.dir(box)\n",[33,55761,55762,55764,55766],{"class":35,"line":108},[33,55763,54636],{"class":47},[33,55765,54034],{"class":53522},[33,55767,53529],{"class":47},[33,55769,55770,55772,55774],{"class":35,"line":119},[33,55771,54006],{"class":47},[33,55773,54021],{"class":53522},[33,55775,53529],{"class":47},[19,55777,55778],{},"只选123，不选456",[19,55780,55781],{},[3736,55782],{"alt":28,"src":55783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55785,55786],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55788,55789],{},[3736,55790],{"alt":28,"src":55791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55793,55794],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55796,55797],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[328,55799,55800],{"start":51},[331,55801,55802],{},"其他方法来获取标签元素",[19,55804,55805],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55807,55808],{},[3736,55809],{"alt":28,"src":55810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[631,55812,55814],{"id":55813},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55816,55817],{},"设置修改DOM元素内容有两种方式：",[3413,55819,55820,55823,55826,55829],{},[331,55821,55822],{},"元素.innerText=''",[331,55824,55825],{},"元素.innerHTML=''",[331,55827,55828],{},"不写字符串输出数字也是可以的",[331,55830,55831],{},"元素.innerHtml=1",[24236,55833,55835],{"id":55834},"_3131-innertext","3.1.3.1 innerText",[19,55837,55838],{},[3736,55839],{"alt":28,"src":55840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55842,55843],{},"思路：实现了修改盒子中的内容！",[19,55845,55846],{},"它只显示纯文本，不解析标签",[24236,55848,55850],{"id":55849},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55852,55853],{},[3736,55854],{"alt":28,"src":55855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55857,55858],{},"相比于innerText，他的强大之处在于可以解析标签",[631,55860,55862],{"id":55861},"_314-操作元素属性","3.1.4 操作元素属性",[24236,55864,55866],{"id":55865},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55868,55869],{},[3736,55870],{"alt":28,"src":55871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[24236,55873,55875],{"id":55874},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55877,55878],{},[3736,55879],{"alt":28,"src":55880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55882,55883],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55885,55886],{},"div.style.backgroundColor = 'hotpink'",[19,55888,55889],{},"如果按照css的写法，-表示减，就会出错",[19,55891,55892],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55894,55895],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55897,55898],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55900,55901],{},[3736,55902],{"alt":28,"src":55903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55905,55906],{},[3736,55907],{"alt":28,"src":55908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[328,55910,55911,55914,55917,55920,55923,55926],{},[331,55912,55913],{},"className这个方式就是修改很多样式的时候来使用的！",[331,55915,55916],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[331,55918,55919],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[331,55921,55922],{},"className为属性名，如果还用class的话就导致与关键字冲突",[331,55924,55925],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[331,55927,55928,55929,55934],{},"解析标签的时候就变为了",[53832,55930],{"className":55931},[55932,55933],"nav","box",[55935,55936],"br",{},[19,55938,55939],{},"例子：",[53832,55941],{"className":55942},[55932],[54034,55944,55945],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55947,55948],{},[3736,55949],{"alt":28,"src":55950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55952,55953],{},"追加和删除类名用classList",[19,55955,55956],{},"常用于类似于开关的操作",[19,55958,55959],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55961,55962],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[24236,55964,55966],{"id":55965},"_3143-牢记点","3.1.4.3 牢记点",[328,55968,55969,55972,55975,55978,55981,55984,55987,55990,55993],{},[331,55970,55971],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[331,55973,55974],{},"使用style属性操作css时不要忘记引号",[331,55976,55977],{},"使用className或者classList时也不要忘记引号",[331,55979,55980],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[331,55982,55983],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[331,55985,55986],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[331,55988,55989],{},"若： let arr=['1','2',3] arr[0]=1",[331,55991,55992],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[331,55994,55995],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[631,55997,55999],{"id":55998},"_315-操作表单元素","3.1.5 操作表单元素",[328,56001,56002],{},[331,56003,56004],{},"天生的属性",[19,56006,56007],{},[3736,56008],{"alt":28,"src":56009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,56011,56012],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,56014,56015],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,56017,56018],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,56020,56021],{},[3736,56022],{"alt":28,"src":56023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[23,56025,56027],{"className":52855,"code":56026,"language":52857,"meta":28,"style":28},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[30,56028,56029,56034,56066,56071,56076,56081,56086,56090,56095,56100,56117,56129,56134],{"__ignoreMap":28},[33,56030,56031],{"class":35,"line":36},[33,56032,56033],{"class":47},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[33,56035,56036,56038,56041,56044,56046,56049,56051,56053,56055,56057,56059,56061,56064],{"class":35,"line":51},[33,56037,2226],{"class":47},[33,56039,56040],{"class":53522},"input",[33,56042,56043],{"class":43}," type",[33,56045,57],{"class":47},[33,56047,56048],{"class":60},"\"checkbox\"",[33,56050,17158],{"class":43},[33,56052,57],{"class":47},[33,56054,9898],{"class":60},[33,56056,17197],{"class":43},[33,56058,57],{"class":47},[33,56060,9898],{"class":60},[33,56062,56063],{"class":43}," checked",[33,56065,53529],{"class":47},[33,56067,56068],{"class":35,"line":64},[33,56069,56070],{"class":47},"不选的话：\n",[33,56072,56073],{"class":35,"line":76},[33,56074,56075],{"class":47},"const input = document.querySelector('input')\n",[33,56077,56078],{"class":35,"line":87},[33,56079,56080],{"class":47},"input.checked=false\n",[33,56082,56083],{"class":35,"line":96},[33,56084,56085],{"class":47},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[33,56087,56088],{"class":35,"line":103},[33,56089,100],{"emptyLinePlaceholder":99},[33,56091,56092],{"class":35,"line":108},[33,56093,56094],{"class":47},"禁用按钮：\n",[33,56096,56097],{"class":35,"line":119},[33,56098,56099],{"class":47},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[33,56101,56102,56104,56107,56110,56113,56115],{"class":35,"line":128},[33,56103,2226],{"class":47},[33,56105,56106],{"class":53522},"button",[33,56108,56109],{"class":43}," disabled",[33,56111,56112],{"class":47},">点击\u003C\u002F",[33,56114,56106],{"class":53522},[33,56116,53529],{"class":47},[33,56118,56119,56121,56123,56125,56127],{"class":35,"line":1753},[33,56120,2226],{"class":47},[33,56122,56106],{"class":53522},[33,56124,56112],{"class":47},[33,56126,56106],{"class":53522},[33,56128,53529],{"class":47},[33,56130,56131],{"class":35,"line":1763},[33,56132,56133],{"class":47},"const bt = document.querySelector('button')\n",[33,56135,56136],{"class":35,"line":1775},[33,56137,56138],{"class":47},"bt.disabled = false\n",[328,56140,56141],{"start":51},[331,56142,56143],{},"自定义属性",[19,56145,56146],{},[3736,56147],{"alt":28,"src":56148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[23,56150,56152],{"className":55286,"code":56151,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,56153,56154,56162,56190,56209,56228,56247,56266,56274,56279,56284,56289,56294,56302],{"__ignoreMap":28},[33,56155,56156,56158,56160],{"class":35,"line":36},[33,56157,2226],{"class":47},[33,56159,54021],{"class":53522},[33,56161,53529],{"class":47},[33,56163,56164,56166,56168,56171,56173,56175,56178,56180,56183,56186,56188],{"class":35,"line":51},[33,56165,54364],{"class":47},[33,56167,53832],{"class":53522},[33,56169,56170],{"class":43}," data-id",[33,56172,57],{"class":47},[33,56174,5933],{"class":60},[33,56176,56177],{"class":43}," data-spm",[33,56179,57],{"class":47},[33,56181,56182],{"class":60},"\"我不知道\"",[33,56184,56185],{"class":47},">1\u003C\u002F",[33,56187,53832],{"class":53522},[33,56189,53529],{"class":47},[33,56191,56192,56194,56196,56198,56200,56202,56205,56207],{"class":35,"line":64},[33,56193,54364],{"class":47},[33,56195,53832],{"class":53522},[33,56197,56170],{"class":43},[33,56199,57],{"class":47},[33,56201,5956],{"class":60},[33,56203,56204],{"class":47},">2\u003C\u002F",[33,56206,53832],{"class":53522},[33,56208,53529],{"class":47},[33,56210,56211,56213,56215,56217,56219,56221,56224,56226],{"class":35,"line":76},[33,56212,54364],{"class":47},[33,56214,53832],{"class":53522},[33,56216,56170],{"class":43},[33,56218,57],{"class":47},[33,56220,5969],{"class":60},[33,56222,56223],{"class":47},">3\u003C\u002F",[33,56225,53832],{"class":53522},[33,56227,53529],{"class":47},[33,56229,56230,56232,56234,56236,56238,56240,56243,56245],{"class":35,"line":87},[33,56231,54364],{"class":47},[33,56233,53832],{"class":53522},[33,56235,56170],{"class":43},[33,56237,57],{"class":47},[33,56239,5982],{"class":60},[33,56241,56242],{"class":47},">4\u003C\u002F",[33,56244,53832],{"class":53522},[33,56246,53529],{"class":47},[33,56248,56249,56251,56253,56255,56257,56259,56262,56264],{"class":35,"line":96},[33,56250,54364],{"class":47},[33,56252,53832],{"class":53522},[33,56254,56170],{"class":43},[33,56256,57],{"class":47},[33,56258,6002],{"class":60},[33,56260,56261],{"class":47},">5\u003C\u002F",[33,56263,53832],{"class":53522},[33,56265,53529],{"class":47},[33,56267,56268,56270,56272],{"class":35,"line":103},[33,56269,54364],{"class":47},[33,56271,54034],{"class":53522},[33,56273,53529],{"class":47},[33,56275,56276],{"class":35,"line":108},[33,56277,56278],{"class":47},"    const one = document.querySelector('div')\n",[33,56280,56281],{"class":35,"line":119},[33,56282,56283],{"class":47},"    console.log(one.dataset)\n",[33,56285,56286],{"class":35,"line":128},[33,56287,56288],{"class":47},"    console.log(one.dataset.id)\n",[33,56290,56291],{"class":35,"line":1753},[33,56292,56293],{"class":47},"    console.log(one.dataset.spm)\n",[33,56295,56296,56298,56300],{"class":35,"line":1763},[33,56297,54636],{"class":47},[33,56299,54034],{"class":53522},[33,56301,53529],{"class":47},[33,56303,56304,56306,56308],{"class":35,"line":1775},[33,56305,54006],{"class":47},[33,56307,54021],{"class":53522},[33,56309,53529],{"class":47},[19,56311,56312],{},[3736,56313],{"alt":28,"src":56314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56316,56317],{},"document.querySelector选择的是第一个对象（元素）",[631,56319,56321],{"id":56320},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56323,56324],{},[3736,56325],{"alt":28,"src":56326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56328,56329],{},[3736,56330],{"alt":28,"src":56331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56333,56334],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[54034,56336,56337],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56339,56340],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[54034,56342,56343],{},"\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,56345,56346],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56348,56349],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56351,56352],{},"单位为毫秒！！！",[19,56354,56355],{},"可以搭配匿名函数来用！！！",[19,56357,56358],{},"setInterval(function () {",[19,56360,56361],{},"alert('两秒执行一次')",[19,56363,56364],{},"}, 2000)",[19,56366,56367],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56369,56370],{},"function fn() {",[19,56372,56373],{},"document.write(1)",[19,56375,210],{},[19,56377,56378],{},"setInterval(fn, 1000)",[19,56380,56381],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56383,56384],{},"setInterval('fn()', 1000)",[19,56386,56387],{},[3736,56388],{"alt":28,"src":56389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[24236,56391,56393],{"id":56392},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[23,56395,56397],{"className":52855,"code":56396,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,56398,56399,56409,56423,56427,56435,56449,56469,56481,56489,56493,56501,56538,56543,56548,56553,56561,56569,56591,56599,56604,56626,56631,56636,56647,56652,56672,56680,56695,56710,56721,56726,56736,56746,56750,56759,56763,56771,56779,56783],{"__ignoreMap":28},[33,56400,56401,56403,56405,56407],{"class":35,"line":36},[33,56402,53519],{"class":47},[33,56404,53523],{"class":53522},[33,56406,53526],{"class":43},[33,56408,53529],{"class":47},[33,56410,56411,56413,56415,56417,56419,56421],{"class":35,"line":51},[33,56412,2226],{"class":47},[33,56414,52857],{"class":53522},[33,56416,53538],{"class":43},[33,56418,57],{"class":47},[33,56420,53543],{"class":60},[33,56422,53529],{"class":47},[33,56424,56425],{"class":35,"line":64},[33,56426,100],{"emptyLinePlaceholder":99},[33,56428,56429,56431,56433],{"class":35,"line":76},[33,56430,2226],{"class":47},[33,56432,53556],{"class":53522},[33,56434,53529],{"class":47},[33,56436,56437,56439,56441,56443,56445,56447],{"class":35,"line":87},[33,56438,54364],{"class":47},[33,56440,53566],{"class":53522},[33,56442,53569],{"class":43},[33,56444,57],{"class":47},[33,56446,53574],{"class":60},[33,56448,53529],{"class":47},[33,56450,56451,56453,56455,56457,56459,56461,56463,56465,56467],{"class":35,"line":96},[33,56452,54364],{"class":47},[33,56454,53566],{"class":53522},[33,56456,17158],{"class":43},[33,56458,57],{"class":47},[33,56460,53613],{"class":60},[33,56462,53593],{"class":43},[33,56464,57],{"class":47},[33,56466,53620],{"class":60},[33,56468,53529],{"class":47},[33,56470,56471,56473,56475,56477,56479],{"class":35,"line":103},[33,56472,54364],{"class":47},[33,56474,53629],{"class":53522},[33,56476,53632],{"class":47},[33,56478,53629],{"class":53522},[33,56480,53529],{"class":47},[33,56482,56483,56485,56487],{"class":35,"line":108},[33,56484,54006],{"class":47},[33,56486,53556],{"class":53522},[33,56488,53529],{"class":47},[33,56490,56491],{"class":35,"line":119},[33,56492,100],{"emptyLinePlaceholder":99},[33,56494,56495,56497,56499],{"class":35,"line":128},[33,56496,2226],{"class":47},[33,56498,54021],{"class":53522},[33,56500,53529],{"class":47},[33,56502,56503,56505,56508,56510,56512,56514,56516,56518,56520,56523,56525,56528,56531,56533,56536],{"class":35,"line":1753},[33,56504,54364],{"class":47},[33,56506,56507],{"class":53522},"textarea",[33,56509,17158],{"class":43},[33,56511,57],{"class":47},[33,56513,9898],{"class":60},[33,56515,17197],{"class":43},[33,56517,57],{"class":47},[33,56519,9898],{"class":60},[33,56521,56522],{"class":43}," cols",[33,56524,57],{"class":47},[33,56526,56527],{"class":60},"\"30\"",[33,56529,56530],{"class":43}," rows",[33,56532,57],{"class":47},[33,56534,56535],{"class":60},"\"10\"",[33,56537,53529],{"class":47},[33,56539,56540],{"class":35,"line":1763},[33,56541,56542],{"class":47},"        用户注册协议\n",[33,56544,56545],{"class":35,"line":1775},[33,56546,56547],{"class":47},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[33,56549,56550],{"class":35,"line":1780},[33,56551,56552],{"class":47},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[33,56554,56555,56557,56559],{"class":35,"line":1785},[33,56556,53997],{"class":47},[33,56558,56507],{"class":53522},[33,56560,53529],{"class":47},[33,56562,56563,56565,56567],{"class":35,"line":1940},[33,56564,54364],{"class":47},[33,56566,55935],{"class":53522},[33,56568,53529],{"class":47},[33,56570,56571,56573,56575,56577,56579,56582,56584,56587,56589],{"class":35,"line":2183},[33,56572,54364],{"class":47},[33,56574,56106],{"class":53522},[33,56576,55705],{"class":43},[33,56578,57],{"class":47},[33,56580,56581],{"class":60},"\"btn\"",[33,56583,56109],{"class":43},[33,56585,56586],{"class":47},">我已经阅读用户协议(5)\u003C\u002F",[33,56588,56106],{"class":53522},[33,56590,53529],{"class":47},[33,56592,56593,56595,56597],{"class":35,"line":2208},[33,56594,54364],{"class":47},[33,56596,54034],{"class":53522},[33,56598,53529],{"class":47},[33,56600,56601],{"class":35,"line":2234},[33,56602,56603],{"class":2487},"    \u002F\u002F 1. 获取元素\n",[33,56605,56606,56608,56611,56613,56616,56619,56621,56624],{"class":35,"line":2239},[33,56607,13462],{"class":39},[33,56609,56610],{"class":72}," btn",[33,56612,15804],{"class":39},[33,56614,56615],{"class":47}," document.",[33,56617,56618],{"class":43},"querySelector",[33,56620,133],{"class":47},[33,56622,56623],{"class":60},"'.btn'",[33,56625,226],{"class":47},[33,56627,56628],{"class":35,"line":2247},[33,56629,56630],{"class":2487},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[33,56632,56633],{"class":35,"line":2255},[33,56634,56635],{"class":2487},"    \u002F\u002F 2. 倒计时\n",[33,56637,56638,56640,56642,56644],{"class":35,"line":3992},[33,56639,54439],{"class":39},[33,56641,11684],{"class":47},[33,56643,57],{"class":39},[33,56645,56646],{"class":72}," 5\n",[33,56648,56649],{"class":35,"line":4009},[33,56650,56651],{"class":2487},"    \u002F\u002F 2.1 开启定时器\n",[33,56653,56654,56656,56659,56661,56664,56666,56669],{"class":35,"line":4014},[33,56655,54439],{"class":39},[33,56657,56658],{"class":47}," n ",[33,56660,57],{"class":39},[33,56662,56663],{"class":43}," setInterval",[33,56665,133],{"class":47},[33,56667,56668],{"class":39},"function",[33,56670,56671],{"class":47}," () {\n",[33,56673,56674,56677],{"class":35,"line":4019},[33,56675,56676],{"class":47},"      i",[33,56678,56679],{"class":39},"--\n",[33,56681,56682,56685,56687,56690,56692],{"class":35,"line":4024},[33,56683,56684],{"class":47},"      btn.innerHTML ",[33,56686,57],{"class":39},[33,56688,56689],{"class":60}," `我已经阅读用户协议(${",[33,56691,2861],{"class":47},[33,56693,56694],{"class":60},"})`\n",[33,56696,56697,56700,56703,56706,56708],{"class":35,"line":4038},[33,56698,56699],{"class":39},"      if",[33,56701,56702],{"class":47}," (i ",[33,56704,56705],{"class":39},"===",[33,56707,1437],{"class":72},[33,56709,14682],{"class":47},[33,56711,56712,56715,56718],{"class":35,"line":4043},[33,56713,56714],{"class":43},"        clearInterval",[33,56716,56717],{"class":47},"(n)  ",[33,56719,56720],{"class":2487},"\u002F\u002F 关闭定时器\n",[33,56722,56723],{"class":35,"line":4834},[33,56724,56725],{"class":2487},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[33,56727,56728,56731,56733],{"class":35,"line":4848},[33,56729,56730],{"class":47},"        btn.disabled ",[33,56732,57],{"class":39},[33,56734,56735],{"class":72}," false\n",[33,56737,56738,56741,56743],{"class":35,"line":4856},[33,56739,56740],{"class":47},"        btn.innerHTML ",[33,56742,57],{"class":39},[33,56744,56745],{"class":60}," '同意'\n",[33,56747,56748],{"class":35,"line":4861},[33,56749,54617],{"class":47},[33,56751,56752,56755,56757],{"class":35,"line":4867},[33,56753,56754],{"class":47},"    }, ",[33,56756,8656],{"class":72},[33,56758,226],{"class":47},[33,56760,56761],{"class":35,"line":4873},[33,56762,100],{"emptyLinePlaceholder":99},[33,56764,56765,56767,56769],{"class":35,"line":4878},[33,56766,54636],{"class":47},[33,56768,54034],{"class":53522},[33,56770,53529],{"class":47},[33,56772,56773,56775,56777],{"class":35,"line":10194},[33,56774,54006],{"class":47},[33,56776,54021],{"class":53522},[33,56778,53529],{"class":47},[33,56780,56781],{"class":35,"line":10218},[33,56782,100],{"emptyLinePlaceholder":99},[33,56784,56785,56787,56789],{"class":35,"line":10223},[33,56786,54006],{"class":47},[33,56788,52857],{"class":53522},[33,56790,53529],{"class":47},[19,56792,56793],{},"不要一直想着用死循环,避免死循环",[19,56795,56796,56799],{},[30,56797,56798],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[24236,56801,56803],{"id":56802},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[328,56805,56806],{},[331,56807,56808],{},"法1",[23,56810,56812],{"className":52855,"code":56811,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,56813,56814,56824,56838,56842,56850,56864,56884,56896,56904,56910,56921,56932,56936,56940,56947,56959,56963,56967,56974,56986,57000,57013,57027,57031,57035,57042,57053,57064,57075,57087,57099,57111,57115,57119,57127,57137,57150,57162,57175,57179,57183,57190,57200,57212,57224,57235,57246,57256,57268,57280,57284,57288,57297,57309,57321,57349,57362,57366,57370,57377,57388,57392,57400,57408,57412,57420,57434,57449,57473,57481,57496,57509,57517,57538,57550,57562,57574,57586,57598,57610,57622,57631,57639,57647,57655,57666,57689,57708,57727,57746,57765,57784,57803,57823,57827,57847,57866,57886,57907,57918,57935,57945,57955,57965,57970,57975,57980,57985,58010,58023,58027,58050,58054,58062,58070,58078,58082],{"__ignoreMap":28},[33,56815,56816,56818,56820,56822],{"class":35,"line":36},[33,56817,53519],{"class":47},[33,56819,53523],{"class":53522},[33,56821,53526],{"class":43},[33,56823,53529],{"class":47},[33,56825,56826,56828,56830,56832,56834,56836],{"class":35,"line":51},[33,56827,2226],{"class":47},[33,56829,52857],{"class":53522},[33,56831,53538],{"class":43},[33,56833,57],{"class":47},[33,56835,53543],{"class":60},[33,56837,53529],{"class":47},[33,56839,56840],{"class":35,"line":64},[33,56841,100],{"emptyLinePlaceholder":99},[33,56843,56844,56846,56848],{"class":35,"line":76},[33,56845,2226],{"class":47},[33,56847,53556],{"class":53522},[33,56849,53529],{"class":47},[33,56851,56852,56854,56856,56858,56860,56862],{"class":35,"line":87},[33,56853,54364],{"class":47},[33,56855,53566],{"class":53522},[33,56857,53569],{"class":43},[33,56859,57],{"class":47},[33,56861,53574],{"class":60},[33,56863,53529],{"class":47},[33,56865,56866,56868,56870,56872,56874,56876,56878,56880,56882],{"class":35,"line":96},[33,56867,54364],{"class":47},[33,56869,53566],{"class":53522},[33,56871,17158],{"class":43},[33,56873,57],{"class":47},[33,56875,53613],{"class":60},[33,56877,53593],{"class":43},[33,56879,57],{"class":47},[33,56881,53620],{"class":60},[33,56883,53529],{"class":47},[33,56885,56886,56888,56890,56892,56894],{"class":35,"line":103},[33,56887,54364],{"class":47},[33,56889,53629],{"class":53522},[33,56891,53632],{"class":47},[33,56893,53629],{"class":53522},[33,56895,53529],{"class":47},[33,56897,56898,56900,56902],{"class":35,"line":108},[33,56899,54364],{"class":47},[33,56901,2331],{"class":53522},[33,56903,53529],{"class":47},[33,56905,56906,56908],{"class":35,"line":119},[33,56907,8649],{"class":53522},[33,56909,17810],{"class":47},[33,56911,56912,56915,56917,56919],{"class":35,"line":128},[33,56913,56914],{"class":72},"      padding",[33,56916,996],{"class":47},[33,56918,2617],{"class":72},[33,56920,3567],{"class":47},[33,56922,56923,56926,56928,56930],{"class":35,"line":1753},[33,56924,56925],{"class":72},"      margin",[33,56927,996],{"class":47},[33,56929,2617],{"class":72},[33,56931,3567],{"class":47},[33,56933,56934],{"class":35,"line":1763},[33,56935,4446],{"class":47},[33,56937,56938],{"class":35,"line":1775},[33,56939,100],{"emptyLinePlaceholder":99},[33,56941,56942,56945],{"class":35,"line":1780},[33,56943,56944],{"class":53522},"    li",[33,56946,17810],{"class":47},[33,56948,56949,56952,56954,56957],{"class":35,"line":1785},[33,56950,56951],{"class":72},"      list-style",[33,56953,996],{"class":47},[33,56955,56956],{"class":72},"none",[33,56958,3567],{"class":47},[33,56960,56961],{"class":35,"line":1940},[33,56962,4446],{"class":47},[33,56964,56965],{"class":35,"line":2183},[33,56966,100],{"emptyLinePlaceholder":99},[33,56968,56969,56972],{"class":35,"line":2208},[33,56970,56971],{"class":43},"    .box",[33,56973,17810],{"class":47},[33,56975,56976,56979,56981,56984],{"class":35,"line":2234},[33,56977,56978],{"class":72},"      position",[33,56980,996],{"class":47},[33,56982,56983],{"class":72},"relative",[33,56985,3567],{"class":47},[33,56987,56988,56991,56993,56996,56998],{"class":35,"line":2239},[33,56989,56990],{"class":72},"      width",[33,56992,996],{"class":47},[33,56994,56995],{"class":72},"976",[33,56997,53713],{"class":39},[33,56999,3567],{"class":47},[33,57001,57002,57005,57007,57009,57011],{"class":35,"line":2247},[33,57003,57004],{"class":72},"      height",[33,57006,996],{"class":47},[33,57008,3813],{"class":72},[33,57010,53713],{"class":39},[33,57012,3567],{"class":47},[33,57014,57015,57017,57019,57021,57023,57025],{"class":35,"line":2255},[33,57016,56925],{"class":72},[33,57018,996],{"class":47},[33,57020,2734],{"class":72},[33,57022,53713],{"class":39},[33,57024,53777],{"class":72},[33,57026,3567],{"class":47},[33,57028,57029],{"class":35,"line":3992},[33,57030,4446],{"class":47},[33,57032,57033],{"class":35,"line":4009},[33,57034,100],{"emptyLinePlaceholder":99},[33,57036,57037,57040],{"class":35,"line":4014},[33,57038,57039],{"class":43},"    .slider-footer",[33,57041,17810],{"class":47},[33,57043,57044,57046,57048,57051],{"class":35,"line":4019},[33,57045,56978],{"class":72},[33,57047,996],{"class":47},[33,57049,57050],{"class":72},"absolute",[33,57052,3567],{"class":47},[33,57054,57055,57058,57060,57062],{"class":35,"line":4024},[33,57056,57057],{"class":72},"      left",[33,57059,996],{"class":47},[33,57061,2617],{"class":72},[33,57063,3567],{"class":47},[33,57065,57066,57069,57071,57073],{"class":35,"line":4038},[33,57067,57068],{"class":72},"      bottom",[33,57070,996],{"class":47},[33,57072,2617],{"class":72},[33,57074,3567],{"class":47},[33,57076,57077,57079,57081,57083,57085],{"class":35,"line":4043},[33,57078,56990],{"class":72},[33,57080,996],{"class":47},[33,57082,2734],{"class":72},[33,57084,1429],{"class":39},[33,57086,3567],{"class":47},[33,57088,57089,57091,57093,57095,57097],{"class":35,"line":4834},[33,57090,57004],{"class":72},[33,57092,996],{"class":47},[33,57094,2992],{"class":72},[33,57096,1429],{"class":39},[33,57098,3567],{"class":47},[33,57100,57101,57104,57106,57109],{"class":35,"line":4848},[33,57102,57103],{"class":72},"      background-color",[33,57105,996],{"class":47},[33,57107,57108],{"class":72},"skyblue",[33,57110,3567],{"class":47},[33,57112,57113],{"class":35,"line":4856},[33,57114,4446],{"class":47},[33,57116,57117],{"class":35,"line":4861},[33,57118,100],{"emptyLinePlaceholder":99},[33,57120,57121,57123,57125],{"class":35,"line":4867},[33,57122,57039],{"class":43},[33,57124,9071],{"class":53522},[33,57126,17810],{"class":47},[33,57128,57129,57131,57133,57135],{"class":35,"line":4873},[33,57130,56978],{"class":72},[33,57132,996],{"class":47},[33,57134,57050],{"class":72},[33,57136,3567],{"class":47},[33,57138,57139,57142,57144,57146,57148],{"class":35,"line":4878},[33,57140,57141],{"class":72},"      font-size",[33,57143,996],{"class":47},[33,57145,3310],{"class":72},[33,57147,53713],{"class":39},[33,57149,3567],{"class":47},[33,57151,57152,57154,57156,57158,57160],{"class":35,"line":10194},[33,57153,57057],{"class":72},[33,57155,996],{"class":47},[33,57157,1284],{"class":72},[33,57159,53713],{"class":39},[33,57161,3567],{"class":47},[33,57163,57164,57167,57169,57171,57173],{"class":35,"line":10218},[33,57165,57166],{"class":72},"      top",[33,57168,996],{"class":47},[33,57170,758],{"class":72},[33,57172,53713],{"class":39},[33,57174,3567],{"class":47},[33,57176,57177],{"class":35,"line":10223},[33,57178,4446],{"class":47},[33,57180,57181],{"class":35,"line":10229},[33,57182,100],{"emptyLinePlaceholder":99},[33,57184,57185,57188],{"class":35,"line":10256},[33,57186,57187],{"class":53522},"    ul",[33,57189,17810],{"class":47},[33,57191,57192,57194,57196,57198],{"class":35,"line":10261},[33,57193,56978],{"class":72},[33,57195,996],{"class":47},[33,57197,57050],{"class":72},[33,57199,3567],{"class":47},[33,57201,57202,57204,57206,57208,57210],{"class":35,"line":10267},[33,57203,57166],{"class":72},[33,57205,996],{"class":47},[33,57207,3194],{"class":72},[33,57209,53713],{"class":39},[33,57211,3567],{"class":47},[33,57213,57214,57216,57218,57220,57222],{"class":35,"line":10279},[33,57215,57057],{"class":72},[33,57217,996],{"class":47},[33,57219,1284],{"class":72},[33,57221,53713],{"class":39},[33,57223,3567],{"class":47},[33,57225,57226,57229,57231,57233],{"class":35,"line":10291},[33,57227,57228],{"class":72},"      display",[33,57230,996],{"class":47},[33,57232,53698],{"class":72},[33,57234,3567],{"class":47},[33,57236,57237,57240,57242,57244],{"class":35,"line":10303},[33,57238,57239],{"class":72},"      justify-content",[33,57241,996],{"class":47},[33,57243,53889],{"class":72},[33,57245,3567],{"class":47},[33,57247,57248,57250,57252,57254],{"class":35,"line":11961},[33,57249,56978],{"class":72},[33,57251,996],{"class":47},[33,57253,57050],{"class":72},[33,57255,3567],{"class":47},[33,57257,57258,57260,57262,57264,57266],{"class":35,"line":11986},[33,57259,56990],{"class":72},[33,57261,996],{"class":47},[33,57263,6246],{"class":72},[33,57265,53713],{"class":39},[33,57267,3567],{"class":47},[33,57269,57270,57272,57274,57276,57278],{"class":35,"line":12009},[33,57271,57004],{"class":72},[33,57273,996],{"class":47},[33,57275,1284],{"class":72},[33,57277,53713],{"class":39},[33,57279,3567],{"class":47},[33,57281,57282],{"class":35,"line":12033},[33,57283,4446],{"class":47},[33,57285,57286],{"class":35,"line":12038},[33,57287,100],{"emptyLinePlaceholder":99},[33,57289,57290,57292,57295],{"class":35,"line":12043},[33,57291,57187],{"class":53522},[33,57293,57294],{"class":53522}," li",[33,57296,17810],{"class":47},[33,57298,57299,57301,57303,57305,57307],{"class":35,"line":12048},[33,57300,56990],{"class":72},[33,57302,996],{"class":47},[33,57304,1284],{"class":72},[33,57306,53713],{"class":39},[33,57308,3567],{"class":47},[33,57310,57311,57313,57315,57317,57319],{"class":35,"line":12057},[33,57312,57004],{"class":72},[33,57314,996],{"class":47},[33,57316,1284],{"class":72},[33,57318,53713],{"class":39},[33,57320,3567],{"class":47},[33,57322,57323,57325,57327,57330,57332,57334,57336,57338,57340,57342,57344,57347],{"class":35,"line":12062},[33,57324,57103],{"class":72},[33,57326,996],{"class":47},[33,57328,57329],{"class":72},"rgba",[33,57331,133],{"class":47},[33,57333,2617],{"class":72},[33,57335,245],{"class":47},[33,57337,2617],{"class":72},[33,57339,245],{"class":47},[33,57341,2617],{"class":72},[33,57343,245],{"class":47},[33,57345,57346],{"class":72},".4",[33,57348,4976],{"class":47},[33,57350,57351,57354,57356,57358,57360],{"class":35,"line":12068},[33,57352,57353],{"class":72},"      border-radius",[33,57355,996],{"class":47},[33,57357,1279],{"class":72},[33,57359,53713],{"class":39},[33,57361,3567],{"class":47},[33,57363,57364],{"class":35,"line":12089},[33,57365,4446],{"class":47},[33,57367,57368],{"class":35,"line":12095},[33,57369,100],{"emptyLinePlaceholder":99},[33,57371,57372,57375],{"class":35,"line":12109},[33,57373,57374],{"class":43},"    .activate",[33,57376,17810],{"class":47},[33,57378,57379,57381,57383,57386],{"class":35,"line":12115},[33,57380,57103],{"class":72},[33,57382,996],{"class":47},[33,57384,57385],{"class":72},"#f7f7f7",[33,57387,3567],{"class":47},[33,57389,57390],{"class":35,"line":12142},[33,57391,4446],{"class":47},[33,57393,57394,57396,57398],{"class":35,"line":12151},[33,57395,54636],{"class":47},[33,57397,2331],{"class":53522},[33,57399,53529],{"class":47},[33,57401,57402,57404,57406],{"class":35,"line":12157},[33,57403,54006],{"class":47},[33,57405,53556],{"class":53522},[33,57407,53529],{"class":47},[33,57409,57410],{"class":35,"line":12165},[33,57411,100],{"emptyLinePlaceholder":99},[33,57413,57414,57416,57418],{"class":35,"line":12170},[33,57415,2226],{"class":47},[33,57417,54021],{"class":53522},[33,57419,53529],{"class":47},[33,57421,57422,57424,57426,57428,57430,57432],{"class":35,"line":18842},[33,57423,54364],{"class":47},[33,57425,53832],{"class":53522},[33,57427,55705],{"class":43},[33,57429,57],{"class":47},[33,57431,55710],{"class":60},[33,57433,53529],{"class":47},[33,57435,57436,57438,57440,57442,57444,57447],{"class":35,"line":18848},[33,57437,53563],{"class":47},[33,57439,53832],{"class":53522},[33,57441,55705],{"class":43},[33,57443,57],{"class":47},[33,57445,57446],{"class":60},"\"slider-wrapper\"",[33,57448,53529],{"class":47},[33,57450,57451,57454,57456,57459,57461,57464,57467,57469,57471],{"class":35,"line":18871},[33,57452,57453],{"class":47},"      \u003C",[33,57455,3736],{"class":53522},[33,57457,57458],{"class":43}," src",[33,57460,57],{"class":47},[33,57462,57463],{"class":60},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,57465,57466],{"class":43}," alt",[33,57468,57],{"class":47},[33,57470,9898],{"class":60},[33,57472,53529],{"class":47},[33,57474,57475,57477,57479],{"class":35,"line":18877},[33,57476,53997],{"class":47},[33,57478,53832],{"class":53522},[33,57480,53529],{"class":47},[33,57482,57483,57485,57487,57489,57491,57494],{"class":35,"line":18900},[33,57484,53563],{"class":47},[33,57486,53832],{"class":53522},[33,57488,55705],{"class":43},[33,57490,57],{"class":47},[33,57492,57493],{"class":60},"\"slider-footer\"",[33,57495,53529],{"class":47},[33,57497,57498,57500,57502,57505,57507],{"class":35,"line":18914},[33,57499,57453],{"class":47},[33,57501,19],{"class":53522},[33,57503,57504],{"class":47},">对人类来说会不会太超前了?\u003C\u002F",[33,57506,19],{"class":53522},[33,57508,53529],{"class":47},[33,57510,57511,57513,57515],{"class":35,"line":18934},[33,57512,57453],{"class":47},[33,57514,3413],{"class":53522},[33,57516,53529],{"class":47},[33,57518,57519,57522,57524,57526,57528,57531,57534,57536],{"class":35,"line":18940},[33,57520,57521],{"class":47},"        \u003C",[33,57523,331],{"class":53522},[33,57525,55705],{"class":43},[33,57527,57],{"class":47},[33,57529,57530],{"class":60},"\"activate\"",[33,57532,57533],{"class":47},">\u003C\u002F",[33,57535,331],{"class":53522},[33,57537,53529],{"class":47},[33,57539,57540,57542,57544,57546,57548],{"class":35,"line":18951},[33,57541,57521],{"class":47},[33,57543,331],{"class":53522},[33,57545,57533],{"class":47},[33,57547,331],{"class":53522},[33,57549,53529],{"class":47},[33,57551,57552,57554,57556,57558,57560],{"class":35,"line":18974},[33,57553,57521],{"class":47},[33,57555,331],{"class":53522},[33,57557,57533],{"class":47},[33,57559,331],{"class":53522},[33,57561,53529],{"class":47},[33,57563,57564,57566,57568,57570,57572],{"class":35,"line":18996},[33,57565,57521],{"class":47},[33,57567,331],{"class":53522},[33,57569,57533],{"class":47},[33,57571,331],{"class":53522},[33,57573,53529],{"class":47},[33,57575,57576,57578,57580,57582,57584],{"class":35,"line":19001},[33,57577,57521],{"class":47},[33,57579,331],{"class":53522},[33,57581,57533],{"class":47},[33,57583,331],{"class":53522},[33,57585,53529],{"class":47},[33,57587,57588,57590,57592,57594,57596],{"class":35,"line":19007},[33,57589,57521],{"class":47},[33,57591,331],{"class":53522},[33,57593,57533],{"class":47},[33,57595,331],{"class":53522},[33,57597,53529],{"class":47},[33,57599,57600,57602,57604,57606,57608],{"class":35,"line":19021},[33,57601,57521],{"class":47},[33,57603,331],{"class":53522},[33,57605,57533],{"class":47},[33,57607,331],{"class":53522},[33,57609,53529],{"class":47},[33,57611,57612,57614,57616,57618,57620],{"class":35,"line":19034},[33,57613,57521],{"class":47},[33,57615,331],{"class":53522},[33,57617,57533],{"class":47},[33,57619,331],{"class":53522},[33,57621,53529],{"class":47},[33,57623,57624,57627,57629],{"class":35,"line":19039},[33,57625,57626],{"class":47},"      \u003C\u002F",[33,57628,3413],{"class":53522},[33,57630,53529],{"class":47},[33,57632,57633,57635,57637],{"class":35,"line":19053},[33,57634,53997],{"class":47},[33,57636,53832],{"class":53522},[33,57638,53529],{"class":47},[33,57640,57641,57643,57645],{"class":35,"line":19058},[33,57642,54636],{"class":47},[33,57644,53832],{"class":53522},[33,57646,53529],{"class":47},[33,57648,57649,57651,57653],{"class":35,"line":19064},[33,57650,54364],{"class":47},[33,57652,54034],{"class":53522},[33,57654,53529],{"class":47},[33,57656,57657,57659,57662,57664],{"class":35,"line":19069},[33,57658,13462],{"class":39},[33,57660,57661],{"class":72}," arrImage",[33,57663,15804],{"class":39},[33,57665,1087],{"class":47},[33,57667,57668,57671,57674,57677,57680,57683,57686],{"class":35,"line":19083},[33,57669,57670],{"class":47},"      { url: ",[33,57672,57673],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[33,57675,57676],{"class":47},", title: ",[33,57678,57679],{"class":60},"'对人类来说会不会太超前了?'",[33,57681,57682],{"class":47},", color: ",[33,57684,57685],{"class":60},"'rgba(100,67,68)'",[33,57687,57688],{"class":47}," },\n",[33,57690,57691,57693,57696,57698,57701,57703,57706],{"class":35,"line":19088},[33,57692,57670],{"class":47},[33,57694,57695],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[33,57697,57676],{"class":47},[33,57699,57700],{"class":60},"'开启剑与雪的黑暗传说!'",[33,57702,57682],{"class":47},[33,57704,57705],{"class":60},"'rgba(43,35,26)'",[33,57707,57688],{"class":47},[33,57709,57710,57712,57715,57717,57720,57722,57725],{"class":35,"line":19093},[33,57711,57670],{"class":47},[33,57713,57714],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[33,57716,57676],{"class":47},[33,57718,57719],{"class":60},"'真正的jo厨出现了!'",[33,57721,57682],{"class":47},[33,57723,57724],{"class":60},"'rgba(36,31,33)'",[33,57726,57688],{"class":47},[33,57728,57729,57731,57734,57736,57739,57741,57744],{"class":35,"line":19107},[33,57730,57670],{"class":47},[33,57732,57733],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[33,57735,57676],{"class":47},[33,57737,57738],{"class":60},"'李玉刚:让世界通过b站看到东方大国文化'",[33,57740,57682],{"class":47},[33,57742,57743],{"class":60},"'rgba(139,98,66)'",[33,57745,57688],{"class":47},[33,57747,57748,57750,57753,57755,57758,57760,57763],{"class":35,"line":19119},[33,57749,57670],{"class":47},[33,57751,57752],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[33,57754,57676],{"class":47},[33,57756,57757],{"class":60},"'快来分享你的寒假日常吧'",[33,57759,57682],{"class":47},[33,57761,57762],{"class":60},"'rgba(67,90,92)'",[33,57764,57688],{"class":47},[33,57766,57767,57769,57772,57774,57777,57779,57782],{"class":35,"line":19124},[33,57768,57670],{"class":47},[33,57770,57771],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[33,57773,57676],{"class":47},[33,57775,57776],{"class":60},"'哔哩哔哩小年YEAR'",[33,57778,57682],{"class":47},[33,57780,57781],{"class":60},"'rgba(166,131,143)'",[33,57783,57688],{"class":47},[33,57785,57786,57788,57791,57793,57796,57798,57801],{"class":35,"line":19137},[33,57787,57670],{"class":47},[33,57789,57790],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[33,57792,57676],{"class":47},[33,57794,57795],{"class":60},"'一站式解决你的电脑配置问题'",[33,57797,57682],{"class":47},[33,57799,57800],{"class":60},"'rgba(53,29,25)'",[33,57802,57688],{"class":47},[33,57804,57805,57807,57810,57812,57815,57817,57820],{"class":35,"line":19142},[33,57806,57670],{"class":47},[33,57808,57809],{"class":60},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[33,57811,57676],{"class":47},[33,57813,57814],{"class":60},"'谁不想和小猫咪贴贴呢?'",[33,57816,57682],{"class":47},[33,57818,57819],{"class":60},"'rgba(99,72,114)'",[33,57821,57822],{"class":47}," }\n",[33,57824,57825],{"class":35,"line":19147},[33,57826,55328],{"class":47},[33,57828,57829,57831,57834,57836,57838,57840,57842,57845],{"class":35,"line":19152},[33,57830,13462],{"class":39},[33,57832,57833],{"class":72}," img",[33,57835,15804],{"class":39},[33,57837,56615],{"class":47},[33,57839,56618],{"class":43},[33,57841,133],{"class":47},[33,57843,57844],{"class":60},"'.slider-wrapper img'",[33,57846,226],{"class":47},[33,57848,57849,57851,57853,57855,57857,57859,57861,57864],{"class":35,"line":19165},[33,57850,13462],{"class":39},[33,57852,9071],{"class":72},[33,57854,15804],{"class":39},[33,57856,56615],{"class":47},[33,57858,56618],{"class":43},[33,57860,133],{"class":47},[33,57862,57863],{"class":60},"'.slider-footer p'",[33,57865,226],{"class":47},[33,57867,57868,57870,57873,57875,57877,57879,57881,57884],{"class":35,"line":19170},[33,57869,13462],{"class":39},[33,57871,57872],{"class":72}," color",[33,57874,15804],{"class":39},[33,57876,56615],{"class":47},[33,57878,56618],{"class":43},[33,57880,133],{"class":47},[33,57882,57883],{"class":60},"'.slider-footer'",[33,57885,226],{"class":47},[33,57887,57888,57890,57893,57895,57897,57900,57902,57905],{"class":35,"line":34859},[33,57889,13462],{"class":39},[33,57891,57892],{"class":72}," lis",[33,57894,15804],{"class":39},[33,57896,56615],{"class":47},[33,57898,57899],{"class":43},"querySelectorAll",[33,57901,133],{"class":47},[33,57903,57904],{"class":60},"'.slider-footer ul li'",[33,57906,226],{"class":47},[33,57908,57909,57911,57913,57915],{"class":35,"line":34865},[33,57910,54439],{"class":39},[33,57912,11684],{"class":47},[33,57914,57],{"class":39},[33,57916,57917],{"class":72}," 1\n",[33,57919,57920,57922,57925,57927,57929,57931,57933],{"class":35,"line":34871},[33,57921,54439],{"class":39},[33,57923,57924],{"class":47}," timer ",[33,57926,57],{"class":39},[33,57928,56663],{"class":43},[33,57930,133],{"class":47},[33,57932,56668],{"class":39},[33,57934,56671],{"class":47},[33,57936,57937,57940,57942],{"class":35,"line":34877},[33,57938,57939],{"class":47},"      img.src ",[33,57941,57],{"class":39},[33,57943,57944],{"class":47}," arrImage[i].url\n",[33,57946,57947,57950,57952],{"class":35,"line":34883},[33,57948,57949],{"class":47},"      p.innerHTML ",[33,57951,57],{"class":39},[33,57953,57954],{"class":47}," arrImage[i].title\n",[33,57956,57957,57960,57962],{"class":35,"line":34894},[33,57958,57959],{"class":47},"      color.style.backgroundColor ",[33,57961,57],{"class":39},[33,57963,57964],{"class":47}," arrImage[i].color\n",[33,57966,57967],{"class":35,"line":34900},[33,57968,57969],{"class":2487},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[33,57971,57972],{"class":35,"line":34920},[33,57973,57974],{"class":2487},"      \u002F\u002F li.classList.add('activate')\n",[33,57976,57977],{"class":35,"line":34926},[33,57978,57979],{"class":2487},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[33,57981,57982],{"class":35,"line":34937},[33,57983,57984],{"class":2487},"      \u002F\u002F lis[i].classList.remove('activate')\n",[33,57986,57987,57990,57992,57994,57997,58000,58003,58005,58008],{"class":35,"line":34943},[33,57988,57989],{"class":47},"      document.",[33,57991,56618],{"class":43},[33,57993,133],{"class":47},[33,57995,57996],{"class":60},"'.activate'",[33,57998,57999],{"class":47},")?.classList.",[33,58001,58002],{"class":43},"toggle",[33,58004,133],{"class":47},[33,58006,58007],{"class":60},"'activate'",[33,58009,226],{"class":47},[33,58011,58012,58015,58017,58019,58021],{"class":35,"line":34949},[33,58013,58014],{"class":47},"      lis[i].classList.",[33,58016,7581],{"class":43},[33,58018,133],{"class":47},[33,58020,58007],{"class":60},[33,58022,226],{"class":47},[33,58024,58025],{"class":35,"line":34955},[33,58026,100],{"emptyLinePlaceholder":99},[33,58028,58029,58032,58034,58036,58038,58040,58042,58044,58047],{"class":35,"line":34961},[33,58030,58031],{"class":47},"      i ",[33,58033,57],{"class":39},[33,58035,56702],{"class":47},[33,58037,880],{"class":39},[33,58039,27357],{"class":72},[33,58041,15954],{"class":47},[33,58043,1429],{"class":39},[33,58045,58046],{"class":47}," arrImage.",[33,58048,58049],{"class":72},"length\n",[33,58051,58052],{"class":35,"line":34967},[33,58053,100],{"emptyLinePlaceholder":99},[33,58055,58056,58058,58060],{"class":35,"line":34973},[33,58057,56754],{"class":47},[33,58059,8656],{"class":72},[33,58061,226],{"class":47},[33,58063,58064,58066,58068],{"class":35,"line":34979},[33,58065,54636],{"class":47},[33,58067,54034],{"class":53522},[33,58069,53529],{"class":47},[33,58071,58072,58074,58076],{"class":35,"line":34999},[33,58073,54006],{"class":47},[33,58075,54021],{"class":53522},[33,58077,53529],{"class":47},[33,58079,58080],{"class":35,"line":35005},[33,58081,100],{"emptyLinePlaceholder":99},[33,58083,58084,58086,58088],{"class":35,"line":35021},[33,58085,54006],{"class":47},[33,58087,52857],{"class":53522},[33,58089,53529],{"class":47},[19,58091,58092],{},[3736,58093],{"alt":28,"src":58094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,58096,58097],{},"?.就是短路保护,确保输出正常进行",[19,58099,58100],{},"不要忘记取余%,有时候可以用",[19,58102,58103],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[328,58105,58106],{"start":51},[331,58107,58108],{},"法2",[23,58110,58112],{"className":52855,"code":58111,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,58113,58114,58124,58138,58142,58150,58164,58184,58196,58204,58210,58220,58230,58234,58238,58244,58254,58258,58262,58268,58278,58290,58302,58316,58320,58324,58330,58340,58350,58360,58372,58384,58394,58398,58402,58410,58420,58432,58444,58456,58460,58464,58470,58480,58492,58504,58514,58524,58534,58546,58558,58562,58566,58574,58586,58598,58624,58636,58640,58644,58650,58660,58664,58672,58680,58684,58692,58706,58720,58740,58748,58762,58774,58782,58800,58812,58824,58836,58848,58860,58872,58884,58892,58900,58908,58916,58927,58943,58959,58975,58991,59007,59023,59039,59055,59059,59064,59082,59100,59110,59115,59120,59131,59137,59152,59161,59165,59170,59179,59184,59193,59198,59203,59208,59231,59261,59265,59273,59277,59285,59293,59297],{"__ignoreMap":28},[33,58115,58116,58118,58120,58122],{"class":35,"line":36},[33,58117,53519],{"class":47},[33,58119,53523],{"class":53522},[33,58121,53526],{"class":43},[33,58123,53529],{"class":47},[33,58125,58126,58128,58130,58132,58134,58136],{"class":35,"line":51},[33,58127,2226],{"class":47},[33,58129,52857],{"class":53522},[33,58131,53538],{"class":43},[33,58133,57],{"class":47},[33,58135,53543],{"class":60},[33,58137,53529],{"class":47},[33,58139,58140],{"class":35,"line":64},[33,58141,100],{"emptyLinePlaceholder":99},[33,58143,58144,58146,58148],{"class":35,"line":76},[33,58145,2226],{"class":47},[33,58147,53556],{"class":53522},[33,58149,53529],{"class":47},[33,58151,58152,58154,58156,58158,58160,58162],{"class":35,"line":87},[33,58153,54364],{"class":47},[33,58155,53566],{"class":53522},[33,58157,53569],{"class":43},[33,58159,57],{"class":47},[33,58161,53574],{"class":60},[33,58163,53529],{"class":47},[33,58165,58166,58168,58170,58172,58174,58176,58178,58180,58182],{"class":35,"line":96},[33,58167,54364],{"class":47},[33,58169,53566],{"class":53522},[33,58171,17158],{"class":43},[33,58173,57],{"class":47},[33,58175,53613],{"class":60},[33,58177,53593],{"class":43},[33,58179,57],{"class":47},[33,58181,53620],{"class":60},[33,58183,53529],{"class":47},[33,58185,58186,58188,58190,58192,58194],{"class":35,"line":103},[33,58187,54364],{"class":47},[33,58189,53629],{"class":53522},[33,58191,53632],{"class":47},[33,58193,53629],{"class":53522},[33,58195,53529],{"class":47},[33,58197,58198,58200,58202],{"class":35,"line":108},[33,58199,54364],{"class":47},[33,58201,2331],{"class":53522},[33,58203,53529],{"class":47},[33,58205,58206,58208],{"class":35,"line":119},[33,58207,8649],{"class":53522},[33,58209,17810],{"class":47},[33,58211,58212,58214,58216,58218],{"class":35,"line":128},[33,58213,56914],{"class":72},[33,58215,996],{"class":47},[33,58217,2617],{"class":72},[33,58219,3567],{"class":47},[33,58221,58222,58224,58226,58228],{"class":35,"line":1753},[33,58223,56925],{"class":72},[33,58225,996],{"class":47},[33,58227,2617],{"class":72},[33,58229,3567],{"class":47},[33,58231,58232],{"class":35,"line":1763},[33,58233,4446],{"class":47},[33,58235,58236],{"class":35,"line":1775},[33,58237,100],{"emptyLinePlaceholder":99},[33,58239,58240,58242],{"class":35,"line":1780},[33,58241,56944],{"class":53522},[33,58243,17810],{"class":47},[33,58245,58246,58248,58250,58252],{"class":35,"line":1785},[33,58247,56951],{"class":72},[33,58249,996],{"class":47},[33,58251,56956],{"class":72},[33,58253,3567],{"class":47},[33,58255,58256],{"class":35,"line":1940},[33,58257,4446],{"class":47},[33,58259,58260],{"class":35,"line":2183},[33,58261,100],{"emptyLinePlaceholder":99},[33,58263,58264,58266],{"class":35,"line":2208},[33,58265,56971],{"class":43},[33,58267,17810],{"class":47},[33,58269,58270,58272,58274,58276],{"class":35,"line":2234},[33,58271,56978],{"class":72},[33,58273,996],{"class":47},[33,58275,56983],{"class":72},[33,58277,3567],{"class":47},[33,58279,58280,58282,58284,58286,58288],{"class":35,"line":2239},[33,58281,56990],{"class":72},[33,58283,996],{"class":47},[33,58285,56995],{"class":72},[33,58287,53713],{"class":39},[33,58289,3567],{"class":47},[33,58291,58292,58294,58296,58298,58300],{"class":35,"line":2247},[33,58293,57004],{"class":72},[33,58295,996],{"class":47},[33,58297,3813],{"class":72},[33,58299,53713],{"class":39},[33,58301,3567],{"class":47},[33,58303,58304,58306,58308,58310,58312,58314],{"class":35,"line":2255},[33,58305,56925],{"class":72},[33,58307,996],{"class":47},[33,58309,2734],{"class":72},[33,58311,53713],{"class":39},[33,58313,53777],{"class":72},[33,58315,3567],{"class":47},[33,58317,58318],{"class":35,"line":3992},[33,58319,4446],{"class":47},[33,58321,58322],{"class":35,"line":4009},[33,58323,100],{"emptyLinePlaceholder":99},[33,58325,58326,58328],{"class":35,"line":4014},[33,58327,57039],{"class":43},[33,58329,17810],{"class":47},[33,58331,58332,58334,58336,58338],{"class":35,"line":4019},[33,58333,56978],{"class":72},[33,58335,996],{"class":47},[33,58337,57050],{"class":72},[33,58339,3567],{"class":47},[33,58341,58342,58344,58346,58348],{"class":35,"line":4024},[33,58343,57057],{"class":72},[33,58345,996],{"class":47},[33,58347,2617],{"class":72},[33,58349,3567],{"class":47},[33,58351,58352,58354,58356,58358],{"class":35,"line":4038},[33,58353,57068],{"class":72},[33,58355,996],{"class":47},[33,58357,2617],{"class":72},[33,58359,3567],{"class":47},[33,58361,58362,58364,58366,58368,58370],{"class":35,"line":4043},[33,58363,56990],{"class":72},[33,58365,996],{"class":47},[33,58367,2734],{"class":72},[33,58369,1429],{"class":39},[33,58371,3567],{"class":47},[33,58373,58374,58376,58378,58380,58382],{"class":35,"line":4834},[33,58375,57004],{"class":72},[33,58377,996],{"class":47},[33,58379,2992],{"class":72},[33,58381,1429],{"class":39},[33,58383,3567],{"class":47},[33,58385,58386,58388,58390,58392],{"class":35,"line":4848},[33,58387,57103],{"class":72},[33,58389,996],{"class":47},[33,58391,57108],{"class":72},[33,58393,3567],{"class":47},[33,58395,58396],{"class":35,"line":4856},[33,58397,4446],{"class":47},[33,58399,58400],{"class":35,"line":4861},[33,58401,100],{"emptyLinePlaceholder":99},[33,58403,58404,58406,58408],{"class":35,"line":4867},[33,58405,57039],{"class":43},[33,58407,9071],{"class":53522},[33,58409,17810],{"class":47},[33,58411,58412,58414,58416,58418],{"class":35,"line":4873},[33,58413,56978],{"class":72},[33,58415,996],{"class":47},[33,58417,57050],{"class":72},[33,58419,3567],{"class":47},[33,58421,58422,58424,58426,58428,58430],{"class":35,"line":4878},[33,58423,57141],{"class":72},[33,58425,996],{"class":47},[33,58427,3310],{"class":72},[33,58429,53713],{"class":39},[33,58431,3567],{"class":47},[33,58433,58434,58436,58438,58440,58442],{"class":35,"line":10194},[33,58435,57057],{"class":72},[33,58437,996],{"class":47},[33,58439,1284],{"class":72},[33,58441,53713],{"class":39},[33,58443,3567],{"class":47},[33,58445,58446,58448,58450,58452,58454],{"class":35,"line":10218},[33,58447,57166],{"class":72},[33,58449,996],{"class":47},[33,58451,758],{"class":72},[33,58453,53713],{"class":39},[33,58455,3567],{"class":47},[33,58457,58458],{"class":35,"line":10223},[33,58459,4446],{"class":47},[33,58461,58462],{"class":35,"line":10229},[33,58463,100],{"emptyLinePlaceholder":99},[33,58465,58466,58468],{"class":35,"line":10256},[33,58467,57187],{"class":53522},[33,58469,17810],{"class":47},[33,58471,58472,58474,58476,58478],{"class":35,"line":10261},[33,58473,56978],{"class":72},[33,58475,996],{"class":47},[33,58477,57050],{"class":72},[33,58479,3567],{"class":47},[33,58481,58482,58484,58486,58488,58490],{"class":35,"line":10267},[33,58483,57166],{"class":72},[33,58485,996],{"class":47},[33,58487,3194],{"class":72},[33,58489,53713],{"class":39},[33,58491,3567],{"class":47},[33,58493,58494,58496,58498,58500,58502],{"class":35,"line":10279},[33,58495,57057],{"class":72},[33,58497,996],{"class":47},[33,58499,1284],{"class":72},[33,58501,53713],{"class":39},[33,58503,3567],{"class":47},[33,58505,58506,58508,58510,58512],{"class":35,"line":10291},[33,58507,57228],{"class":72},[33,58509,996],{"class":47},[33,58511,53698],{"class":72},[33,58513,3567],{"class":47},[33,58515,58516,58518,58520,58522],{"class":35,"line":10303},[33,58517,57239],{"class":72},[33,58519,996],{"class":47},[33,58521,53889],{"class":72},[33,58523,3567],{"class":47},[33,58525,58526,58528,58530,58532],{"class":35,"line":11961},[33,58527,56978],{"class":72},[33,58529,996],{"class":47},[33,58531,57050],{"class":72},[33,58533,3567],{"class":47},[33,58535,58536,58538,58540,58542,58544],{"class":35,"line":11986},[33,58537,56990],{"class":72},[33,58539,996],{"class":47},[33,58541,6246],{"class":72},[33,58543,53713],{"class":39},[33,58545,3567],{"class":47},[33,58547,58548,58550,58552,58554,58556],{"class":35,"line":12009},[33,58549,57004],{"class":72},[33,58551,996],{"class":47},[33,58553,1284],{"class":72},[33,58555,53713],{"class":39},[33,58557,3567],{"class":47},[33,58559,58560],{"class":35,"line":12033},[33,58561,4446],{"class":47},[33,58563,58564],{"class":35,"line":12038},[33,58565,100],{"emptyLinePlaceholder":99},[33,58567,58568,58570,58572],{"class":35,"line":12043},[33,58569,57187],{"class":53522},[33,58571,57294],{"class":53522},[33,58573,17810],{"class":47},[33,58575,58576,58578,58580,58582,58584],{"class":35,"line":12048},[33,58577,56990],{"class":72},[33,58579,996],{"class":47},[33,58581,1284],{"class":72},[33,58583,53713],{"class":39},[33,58585,3567],{"class":47},[33,58587,58588,58590,58592,58594,58596],{"class":35,"line":12057},[33,58589,57004],{"class":72},[33,58591,996],{"class":47},[33,58593,1284],{"class":72},[33,58595,53713],{"class":39},[33,58597,3567],{"class":47},[33,58599,58600,58602,58604,58606,58608,58610,58612,58614,58616,58618,58620,58622],{"class":35,"line":12062},[33,58601,57103],{"class":72},[33,58603,996],{"class":47},[33,58605,57329],{"class":72},[33,58607,133],{"class":47},[33,58609,2617],{"class":72},[33,58611,245],{"class":47},[33,58613,2617],{"class":72},[33,58615,245],{"class":47},[33,58617,2617],{"class":72},[33,58619,245],{"class":47},[33,58621,57346],{"class":72},[33,58623,4976],{"class":47},[33,58625,58626,58628,58630,58632,58634],{"class":35,"line":12068},[33,58627,57353],{"class":72},[33,58629,996],{"class":47},[33,58631,1279],{"class":72},[33,58633,53713],{"class":39},[33,58635,3567],{"class":47},[33,58637,58638],{"class":35,"line":12089},[33,58639,4446],{"class":47},[33,58641,58642],{"class":35,"line":12095},[33,58643,100],{"emptyLinePlaceholder":99},[33,58645,58646,58648],{"class":35,"line":12109},[33,58647,57374],{"class":43},[33,58649,17810],{"class":47},[33,58651,58652,58654,58656,58658],{"class":35,"line":12115},[33,58653,57103],{"class":72},[33,58655,996],{"class":47},[33,58657,57385],{"class":72},[33,58659,3567],{"class":47},[33,58661,58662],{"class":35,"line":12142},[33,58663,4446],{"class":47},[33,58665,58666,58668,58670],{"class":35,"line":12151},[33,58667,54636],{"class":47},[33,58669,2331],{"class":53522},[33,58671,53529],{"class":47},[33,58673,58674,58676,58678],{"class":35,"line":12157},[33,58675,54006],{"class":47},[33,58677,53556],{"class":53522},[33,58679,53529],{"class":47},[33,58681,58682],{"class":35,"line":12165},[33,58683,100],{"emptyLinePlaceholder":99},[33,58685,58686,58688,58690],{"class":35,"line":12170},[33,58687,2226],{"class":47},[33,58689,54021],{"class":53522},[33,58691,53529],{"class":47},[33,58693,58694,58696,58698,58700,58702,58704],{"class":35,"line":18842},[33,58695,54364],{"class":47},[33,58697,53832],{"class":53522},[33,58699,55705],{"class":43},[33,58701,57],{"class":47},[33,58703,55710],{"class":60},[33,58705,53529],{"class":47},[33,58707,58708,58710,58712,58714,58716,58718],{"class":35,"line":18848},[33,58709,53563],{"class":47},[33,58711,53832],{"class":53522},[33,58713,55705],{"class":43},[33,58715,57],{"class":47},[33,58717,57446],{"class":60},[33,58719,53529],{"class":47},[33,58721,58722,58724,58726,58728,58730,58732,58734,58736,58738],{"class":35,"line":18871},[33,58723,57453],{"class":47},[33,58725,3736],{"class":53522},[33,58727,57458],{"class":43},[33,58729,57],{"class":47},[33,58731,57463],{"class":60},[33,58733,57466],{"class":43},[33,58735,57],{"class":47},[33,58737,9898],{"class":60},[33,58739,53529],{"class":47},[33,58741,58742,58744,58746],{"class":35,"line":18877},[33,58743,53997],{"class":47},[33,58745,53832],{"class":53522},[33,58747,53529],{"class":47},[33,58749,58750,58752,58754,58756,58758,58760],{"class":35,"line":18900},[33,58751,53563],{"class":47},[33,58753,53832],{"class":53522},[33,58755,55705],{"class":43},[33,58757,57],{"class":47},[33,58759,57493],{"class":60},[33,58761,53529],{"class":47},[33,58763,58764,58766,58768,58770,58772],{"class":35,"line":18914},[33,58765,57453],{"class":47},[33,58767,19],{"class":53522},[33,58769,57504],{"class":47},[33,58771,19],{"class":53522},[33,58773,53529],{"class":47},[33,58775,58776,58778,58780],{"class":35,"line":18934},[33,58777,57453],{"class":47},[33,58779,3413],{"class":53522},[33,58781,53529],{"class":47},[33,58783,58784,58786,58788,58790,58792,58794,58796,58798],{"class":35,"line":18940},[33,58785,57521],{"class":47},[33,58787,331],{"class":53522},[33,58789,55705],{"class":43},[33,58791,57],{"class":47},[33,58793,57530],{"class":60},[33,58795,57533],{"class":47},[33,58797,331],{"class":53522},[33,58799,53529],{"class":47},[33,58801,58802,58804,58806,58808,58810],{"class":35,"line":18951},[33,58803,57521],{"class":47},[33,58805,331],{"class":53522},[33,58807,57533],{"class":47},[33,58809,331],{"class":53522},[33,58811,53529],{"class":47},[33,58813,58814,58816,58818,58820,58822],{"class":35,"line":18974},[33,58815,57521],{"class":47},[33,58817,331],{"class":53522},[33,58819,57533],{"class":47},[33,58821,331],{"class":53522},[33,58823,53529],{"class":47},[33,58825,58826,58828,58830,58832,58834],{"class":35,"line":18996},[33,58827,57521],{"class":47},[33,58829,331],{"class":53522},[33,58831,57533],{"class":47},[33,58833,331],{"class":53522},[33,58835,53529],{"class":47},[33,58837,58838,58840,58842,58844,58846],{"class":35,"line":19001},[33,58839,57521],{"class":47},[33,58841,331],{"class":53522},[33,58843,57533],{"class":47},[33,58845,331],{"class":53522},[33,58847,53529],{"class":47},[33,58849,58850,58852,58854,58856,58858],{"class":35,"line":19007},[33,58851,57521],{"class":47},[33,58853,331],{"class":53522},[33,58855,57533],{"class":47},[33,58857,331],{"class":53522},[33,58859,53529],{"class":47},[33,58861,58862,58864,58866,58868,58870],{"class":35,"line":19021},[33,58863,57521],{"class":47},[33,58865,331],{"class":53522},[33,58867,57533],{"class":47},[33,58869,331],{"class":53522},[33,58871,53529],{"class":47},[33,58873,58874,58876,58878,58880,58882],{"class":35,"line":19034},[33,58875,57521],{"class":47},[33,58877,331],{"class":53522},[33,58879,57533],{"class":47},[33,58881,331],{"class":53522},[33,58883,53529],{"class":47},[33,58885,58886,58888,58890],{"class":35,"line":19039},[33,58887,57626],{"class":47},[33,58889,3413],{"class":53522},[33,58891,53529],{"class":47},[33,58893,58894,58896,58898],{"class":35,"line":19053},[33,58895,53997],{"class":47},[33,58897,53832],{"class":53522},[33,58899,53529],{"class":47},[33,58901,58902,58904,58906],{"class":35,"line":19058},[33,58903,54636],{"class":47},[33,58905,53832],{"class":53522},[33,58907,53529],{"class":47},[33,58909,58910,58912,58914],{"class":35,"line":19064},[33,58911,54364],{"class":47},[33,58913,54034],{"class":53522},[33,58915,53529],{"class":47},[33,58917,58918,58920,58923,58925],{"class":35,"line":19069},[33,58919,13462],{"class":39},[33,58921,58922],{"class":72}," sliderData",[33,58924,15804],{"class":39},[33,58926,1087],{"class":47},[33,58928,58929,58931,58933,58935,58937,58939,58941],{"class":35,"line":19083},[33,58930,57670],{"class":47},[33,58932,57673],{"class":60},[33,58934,57676],{"class":47},[33,58936,57679],{"class":60},[33,58938,57682],{"class":47},[33,58940,57685],{"class":60},[33,58942,57688],{"class":47},[33,58944,58945,58947,58949,58951,58953,58955,58957],{"class":35,"line":19088},[33,58946,57670],{"class":47},[33,58948,57695],{"class":60},[33,58950,57676],{"class":47},[33,58952,57700],{"class":60},[33,58954,57682],{"class":47},[33,58956,57705],{"class":60},[33,58958,57688],{"class":47},[33,58960,58961,58963,58965,58967,58969,58971,58973],{"class":35,"line":19093},[33,58962,57670],{"class":47},[33,58964,57714],{"class":60},[33,58966,57676],{"class":47},[33,58968,57719],{"class":60},[33,58970,57682],{"class":47},[33,58972,57724],{"class":60},[33,58974,57688],{"class":47},[33,58976,58977,58979,58981,58983,58985,58987,58989],{"class":35,"line":19107},[33,58978,57670],{"class":47},[33,58980,57733],{"class":60},[33,58982,57676],{"class":47},[33,58984,57738],{"class":60},[33,58986,57682],{"class":47},[33,58988,57743],{"class":60},[33,58990,57688],{"class":47},[33,58992,58993,58995,58997,58999,59001,59003,59005],{"class":35,"line":19119},[33,58994,57670],{"class":47},[33,58996,57752],{"class":60},[33,58998,57676],{"class":47},[33,59000,57757],{"class":60},[33,59002,57682],{"class":47},[33,59004,57762],{"class":60},[33,59006,57688],{"class":47},[33,59008,59009,59011,59013,59015,59017,59019,59021],{"class":35,"line":19124},[33,59010,57670],{"class":47},[33,59012,57771],{"class":60},[33,59014,57676],{"class":47},[33,59016,57776],{"class":60},[33,59018,57682],{"class":47},[33,59020,57781],{"class":60},[33,59022,57688],{"class":47},[33,59024,59025,59027,59029,59031,59033,59035,59037],{"class":35,"line":19137},[33,59026,57670],{"class":47},[33,59028,57790],{"class":60},[33,59030,57676],{"class":47},[33,59032,57795],{"class":60},[33,59034,57682],{"class":47},[33,59036,57800],{"class":60},[33,59038,57688],{"class":47},[33,59040,59041,59043,59045,59047,59049,59051,59053],{"class":35,"line":19142},[33,59042,57670],{"class":47},[33,59044,57809],{"class":60},[33,59046,57676],{"class":47},[33,59048,57814],{"class":60},[33,59050,57682],{"class":47},[33,59052,57819],{"class":60},[33,59054,57822],{"class":47},[33,59056,59057],{"class":35,"line":19147},[33,59058,55328],{"class":47},[33,59060,59061],{"class":35,"line":19152},[33,59062,59063],{"class":2487},"    \u002F\u002F 1.获取元素\n",[33,59065,59066,59068,59070,59072,59074,59076,59078,59080],{"class":35,"line":19165},[33,59067,13462],{"class":39},[33,59069,57833],{"class":72},[33,59071,15804],{"class":39},[33,59073,56615],{"class":47},[33,59075,56618],{"class":43},[33,59077,133],{"class":47},[33,59079,57844],{"class":60},[33,59081,226],{"class":47},[33,59083,59084,59086,59088,59090,59092,59094,59096,59098],{"class":35,"line":19170},[33,59085,13462],{"class":39},[33,59087,9071],{"class":72},[33,59089,15804],{"class":39},[33,59091,56615],{"class":47},[33,59093,56618],{"class":43},[33,59095,133],{"class":47},[33,59097,57863],{"class":60},[33,59099,226],{"class":47},[33,59101,59102,59104,59106,59108],{"class":35,"line":34859},[33,59103,54439],{"class":39},[33,59105,11684],{"class":47},[33,59107,57],{"class":39},[33,59109,670],{"class":72},[33,59111,59112],{"class":35,"line":34865},[33,59113,59114],{"class":2487},"    \u002F\u002F 2.开启定时器\n",[33,59116,59117],{"class":35,"line":34871},[33,59118,59119],{"class":2487},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[33,59121,59122,59125,59127,59129],{"class":35,"line":34877},[33,59123,59124],{"class":43},"    setInterval",[33,59126,133],{"class":47},[33,59128,56668],{"class":39},[33,59130,56671],{"class":47},[33,59132,59133,59135],{"class":35,"line":34883},[33,59134,56676],{"class":47},[33,59136,4959],{"class":39},[33,59138,59139,59141,59143,59145,59148,59150],{"class":35,"line":34894},[33,59140,56699],{"class":39},[33,59142,56702],{"class":47},[33,59144,2175],{"class":39},[33,59146,59147],{"class":47}," sliderData.",[33,59149,54188],{"class":72},[33,59151,14682],{"class":47},[33,59153,59154,59157,59159],{"class":35,"line":34900},[33,59155,59156],{"class":47},"        i ",[33,59158,57],{"class":39},[33,59160,670],{"class":72},[33,59162,59163],{"class":35,"line":34920},[33,59164,54617],{"class":47},[33,59166,59167],{"class":35,"line":34926},[33,59168,59169],{"class":2487},"      \u002F\u002F 更换图片路径\n",[33,59171,59172,59174,59176],{"class":35,"line":34937},[33,59173,57939],{"class":47},[33,59175,57],{"class":39},[33,59177,59178],{"class":47}," sliderData[i].url\n",[33,59180,59181],{"class":35,"line":34943},[33,59182,59183],{"class":2487},"      \u002F\u002F 把文字写到p里面\n",[33,59185,59186,59188,59190],{"class":35,"line":34949},[33,59187,57949],{"class":47},[33,59189,57],{"class":39},[33,59191,59192],{"class":47}," sliderData[i].title\n",[33,59194,59195],{"class":35,"line":34955},[33,59196,59197],{"class":2487},"      \u002F\u002F 小圆点\n",[33,59199,59200],{"class":35,"line":34961},[33,59201,59202],{"class":2487},"      \u002F\u002F 先删除以前的active\n",[33,59204,59205],{"class":35,"line":34967},[33,59206,59207],{"class":2487},"      \u002F\u002F 只让当前li添加active\n",[33,59209,59210,59212,59214,59216,59219,59222,59225,59227,59229],{"class":35,"line":34973},[33,59211,57989],{"class":47},[33,59213,56618],{"class":43},[33,59215,133],{"class":47},[33,59217,59218],{"class":60},"'.slider-footer .activate'",[33,59220,59221],{"class":47},").classList.",[33,59223,59224],{"class":43},"remove",[33,59226,133],{"class":47},[33,59228,58007],{"class":60},[33,59230,226],{"class":47},[33,59232,59233,59235,59237,59239,59242,59244,59246,59248,59251,59253,59255,59257,59259],{"class":35,"line":34979},[33,59234,57989],{"class":47},[33,59236,56618],{"class":43},[33,59238,133],{"class":47},[33,59240,59241],{"class":60},"`.slider-footer ul li:nth-child(${",[33,59243,2861],{"class":47},[33,59245,47789],{"class":39},[33,59247,27357],{"class":72},[33,59249,59250],{"class":60},"})`",[33,59252,59221],{"class":47},[33,59254,7581],{"class":43},[33,59256,133],{"class":47},[33,59258,58007],{"class":60},[33,59260,226],{"class":47},[33,59262,59263],{"class":35,"line":34999},[33,59264,100],{"emptyLinePlaceholder":99},[33,59266,59267,59269,59271],{"class":35,"line":35005},[33,59268,56754],{"class":47},[33,59270,8656],{"class":72},[33,59272,226],{"class":47},[33,59274,59275],{"class":35,"line":35021},[33,59276,100],{"emptyLinePlaceholder":99},[33,59278,59279,59281,59283],{"class":35,"line":35027},[33,59280,54636],{"class":47},[33,59282,54034],{"class":53522},[33,59284,53529],{"class":47},[33,59286,59287,59289,59291],{"class":35,"line":35041},[33,59288,54006],{"class":47},[33,59290,54021],{"class":53522},[33,59292,53529],{"class":47},[33,59294,59295],{"class":35,"line":35047},[33,59296,100],{"emptyLinePlaceholder":99},[33,59298,59299,59301,59303],{"class":35,"line":35062},[33,59300,54006],{"class":47},[33,59302,52857],{"class":53522},[33,59304,53529],{"class":47},[631,59306,59308],{"id":59307},"_317-重要知识点","3.1.7 重要知识点",[19,59310,59311,59312],{},"浏览器在渲染文本时， ",[2575,59313,59314],{},"没有空格或换行符就没有“断行点”",[19,59316,59317],{},[3736,59318],{"alt":28,"src":59319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59321,59322],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59324,59325],{},[3736,59326],{"alt":28,"src":59327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59329,59330],{},[3736,59331],{"alt":28,"src":59332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59334,59336],{"id":59335},"_32-dom事件基础","3.2 DOM事件基础",[631,59338,59340],{"id":59339},"_321-事件监听","3.2.1 事件监听",[19,59342,59343],{},[3736,59344],{"alt":28,"src":59345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59347,59348],{},"事件监听有响应的发生",[19,59350,59351],{},[3736,59352],{"alt":28,"src":59353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59355,59356],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59358,59359],{},"对于有名函数,要执行的函数名后边不要加()",[631,59361,59363],{"id":59362},"_322-随机点名案例","3.2.2 随机点名案例",[23,59365,59367],{"className":52855,"code":59366,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,59368,59369,59379,59393,59397,59405,59419,59439,59451,59459,59465,59475,59485,59489,59493,59500,59511,59515,59519,59525,59537,59551,59561,59573,59586,59590,59594,59601,59605,59618,59630,59642,59646,59650,59654,59661,59671,59675,59679,59688,59700,59712,59727,59731,59739,59747,59751,59759,59772,59786,59799,59819,59827,59842,59862,59882,59890,59894,59902,59907,59943,59963,59968,59987,59992,60003,60008,60019,60024,60043,60058,60063,60089,60099,60108,60113,60129,60134,60139,60144,60159,60163,60167,60172,60191,60208,60216,60221,60236,60240,60244,60252,60260,60264],{"__ignoreMap":28},[33,59370,59371,59373,59375,59377],{"class":35,"line":36},[33,59372,53519],{"class":47},[33,59374,53523],{"class":53522},[33,59376,53526],{"class":43},[33,59378,53529],{"class":47},[33,59380,59381,59383,59385,59387,59389,59391],{"class":35,"line":51},[33,59382,2226],{"class":47},[33,59384,52857],{"class":53522},[33,59386,53538],{"class":43},[33,59388,57],{"class":47},[33,59390,53543],{"class":60},[33,59392,53529],{"class":47},[33,59394,59395],{"class":35,"line":64},[33,59396,100],{"emptyLinePlaceholder":99},[33,59398,59399,59401,59403],{"class":35,"line":76},[33,59400,2226],{"class":47},[33,59402,53556],{"class":53522},[33,59404,53529],{"class":47},[33,59406,59407,59409,59411,59413,59415,59417],{"class":35,"line":87},[33,59408,54364],{"class":47},[33,59410,53566],{"class":53522},[33,59412,53569],{"class":43},[33,59414,57],{"class":47},[33,59416,53574],{"class":60},[33,59418,53529],{"class":47},[33,59420,59421,59423,59425,59427,59429,59431,59433,59435,59437],{"class":35,"line":96},[33,59422,54364],{"class":47},[33,59424,53566],{"class":53522},[33,59426,17158],{"class":43},[33,59428,57],{"class":47},[33,59430,53613],{"class":60},[33,59432,53593],{"class":43},[33,59434,57],{"class":47},[33,59436,53620],{"class":60},[33,59438,53529],{"class":47},[33,59440,59441,59443,59445,59447,59449],{"class":35,"line":103},[33,59442,54364],{"class":47},[33,59444,53629],{"class":53522},[33,59446,53632],{"class":47},[33,59448,53629],{"class":53522},[33,59450,53529],{"class":47},[33,59452,59453,59455,59457],{"class":35,"line":108},[33,59454,54364],{"class":47},[33,59456,2331],{"class":53522},[33,59458,53529],{"class":47},[33,59460,59461,59463],{"class":35,"line":119},[33,59462,8649],{"class":53522},[33,59464,17810],{"class":47},[33,59466,59467,59469,59471,59473],{"class":35,"line":128},[33,59468,56925],{"class":72},[33,59470,996],{"class":47},[33,59472,2617],{"class":72},[33,59474,3567],{"class":47},[33,59476,59477,59479,59481,59483],{"class":35,"line":1753},[33,59478,56914],{"class":72},[33,59480,996],{"class":47},[33,59482,2617],{"class":72},[33,59484,3567],{"class":47},[33,59486,59487],{"class":35,"line":1763},[33,59488,4446],{"class":47},[33,59490,59491],{"class":35,"line":1775},[33,59492,100],{"emptyLinePlaceholder":99},[33,59494,59495,59498],{"class":35,"line":1780},[33,59496,59497],{"class":53522},"    h2",[33,59499,17810],{"class":47},[33,59501,59502,59505,59507,59509],{"class":35,"line":1785},[33,59503,59504],{"class":72},"      text-align",[33,59506,996],{"class":47},[33,59508,53813],{"class":72},[33,59510,3567],{"class":47},[33,59512,59513],{"class":35,"line":1940},[33,59514,4446],{"class":47},[33,59516,59517],{"class":35,"line":2183},[33,59518,100],{"emptyLinePlaceholder":99},[33,59520,59521,59523],{"class":35,"line":2208},[33,59522,56971],{"class":43},[33,59524,17810],{"class":47},[33,59526,59527,59529,59531,59533,59535],{"class":35,"line":2234},[33,59528,56990],{"class":72},[33,59530,996],{"class":47},[33,59532,3813],{"class":72},[33,59534,53713],{"class":39},[33,59536,3567],{"class":47},[33,59538,59539,59541,59543,59545,59547,59549],{"class":35,"line":2239},[33,59540,56925],{"class":72},[33,59542,996],{"class":47},[33,59544,3071],{"class":72},[33,59546,53713],{"class":39},[33,59548,53777],{"class":72},[33,59550,3567],{"class":47},[33,59552,59553,59555,59557,59559],{"class":35,"line":2247},[33,59554,57228],{"class":72},[33,59556,996],{"class":47},[33,59558,53698],{"class":72},[33,59560,3567],{"class":47},[33,59562,59563,59565,59567,59569,59571],{"class":35,"line":2255},[33,59564,57141],{"class":72},[33,59566,996],{"class":47},[33,59568,3237],{"class":72},[33,59570,53713],{"class":39},[33,59572,3567],{"class":47},[33,59574,59575,59578,59580,59582,59584],{"class":35,"line":3992},[33,59576,59577],{"class":72},"      line-height",[33,59579,996],{"class":47},[33,59581,2822],{"class":72},[33,59583,53713],{"class":39},[33,59585,3567],{"class":47},[33,59587,59588],{"class":35,"line":4009},[33,59589,4446],{"class":47},[33,59591,59592],{"class":35,"line":4014},[33,59593,100],{"emptyLinePlaceholder":99},[33,59595,59596,59599],{"class":35,"line":4019},[33,59597,59598],{"class":43},"    .qs",[33,59600,17810],{"class":47},[33,59602,59603],{"class":35,"line":4024},[33,59604,100],{"emptyLinePlaceholder":99},[33,59606,59607,59609,59611,59614,59616],{"class":35,"line":4038},[33,59608,56990],{"class":72},[33,59610,996],{"class":47},[33,59612,59613],{"class":72},"450",[33,59615,53713],{"class":39},[33,59617,3567],{"class":47},[33,59619,59620,59622,59624,59626,59628],{"class":35,"line":4043},[33,59621,57004],{"class":72},[33,59623,996],{"class":47},[33,59625,2822],{"class":72},[33,59627,53713],{"class":39},[33,59629,3567],{"class":47},[33,59631,59632,59635,59637,59640],{"class":35,"line":4834},[33,59633,59634],{"class":72},"      color",[33,59636,996],{"class":47},[33,59638,59639],{"class":72},"red",[33,59641,3567],{"class":47},[33,59643,59644],{"class":35,"line":4848},[33,59645,100],{"emptyLinePlaceholder":99},[33,59647,59648],{"class":35,"line":4856},[33,59649,4446],{"class":47},[33,59651,59652],{"class":35,"line":4861},[33,59653,100],{"emptyLinePlaceholder":99},[33,59655,59656,59659],{"class":35,"line":4867},[33,59657,59658],{"class":43},"    .btns",[33,59660,17810],{"class":47},[33,59662,59663,59665,59667,59669],{"class":35,"line":4873},[33,59664,59504],{"class":72},[33,59666,996],{"class":47},[33,59668,53813],{"class":72},[33,59670,3567],{"class":47},[33,59672,59673],{"class":35,"line":4878},[33,59674,4446],{"class":47},[33,59676,59677],{"class":35,"line":10194},[33,59678,100],{"emptyLinePlaceholder":99},[33,59680,59681,59683,59686],{"class":35,"line":10218},[33,59682,59658],{"class":43},[33,59684,59685],{"class":53522}," button",[33,59687,17810],{"class":47},[33,59689,59690,59692,59694,59696,59698],{"class":35,"line":10223},[33,59691,56990],{"class":72},[33,59693,996],{"class":47},[33,59695,3229],{"class":72},[33,59697,53713],{"class":39},[33,59699,3567],{"class":47},[33,59701,59702,59704,59706,59708,59710],{"class":35,"line":10229},[33,59703,57004],{"class":72},[33,59705,996],{"class":47},[33,59707,2697],{"class":72},[33,59709,53713],{"class":39},[33,59711,3567],{"class":47},[33,59713,59714,59716,59718,59720,59723,59725],{"class":35,"line":10256},[33,59715,56925],{"class":72},[33,59717,996],{"class":47},[33,59719,2617],{"class":72},[33,59721,59722],{"class":72}," 50",[33,59724,53713],{"class":39},[33,59726,3567],{"class":47},[33,59728,59729],{"class":35,"line":10261},[33,59730,4446],{"class":47},[33,59732,59733,59735,59737],{"class":35,"line":10267},[33,59734,54636],{"class":47},[33,59736,2331],{"class":53522},[33,59738,53529],{"class":47},[33,59740,59741,59743,59745],{"class":35,"line":10279},[33,59742,54006],{"class":47},[33,59744,53556],{"class":53522},[33,59746,53529],{"class":47},[33,59748,59749],{"class":35,"line":10291},[33,59750,100],{"emptyLinePlaceholder":99},[33,59752,59753,59755,59757],{"class":35,"line":10303},[33,59754,2226],{"class":47},[33,59756,54021],{"class":53522},[33,59758,53529],{"class":47},[33,59760,59761,59763,59765,59768,59770],{"class":35,"line":11961},[33,59762,54364],{"class":47},[33,59764,14],{"class":53522},[33,59766,59767],{"class":47},">随机点名\u003C\u002F",[33,59769,14],{"class":53522},[33,59771,53529],{"class":47},[33,59773,59774,59776,59778,59780,59782,59784],{"class":35,"line":11986},[33,59775,54364],{"class":47},[33,59777,53832],{"class":53522},[33,59779,55705],{"class":43},[33,59781,57],{"class":47},[33,59783,55710],{"class":60},[33,59785,53529],{"class":47},[33,59787,59788,59790,59792,59795,59797],{"class":35,"line":12009},[33,59789,53563],{"class":47},[33,59791,33],{"class":53522},[33,59793,59794],{"class":47},">名字是：\u003C\u002F",[33,59796,33],{"class":53522},[33,59798,53529],{"class":47},[33,59800,59801,59803,59805,59807,59809,59812,59815,59817],{"class":35,"line":12033},[33,59802,53563],{"class":47},[33,59804,53832],{"class":53522},[33,59806,55705],{"class":43},[33,59808,57],{"class":47},[33,59810,59811],{"class":60},"\"qs\"",[33,59813,59814],{"class":47},">这里显示姓名\u003C\u002F",[33,59816,53832],{"class":53522},[33,59818,53529],{"class":47},[33,59820,59821,59823,59825],{"class":35,"line":12038},[33,59822,54636],{"class":47},[33,59824,53832],{"class":53522},[33,59826,53529],{"class":47},[33,59828,59829,59831,59833,59835,59837,59840],{"class":35,"line":12043},[33,59830,54364],{"class":47},[33,59832,53832],{"class":53522},[33,59834,55705],{"class":43},[33,59836,57],{"class":47},[33,59838,59839],{"class":60},"\"btns\"",[33,59841,53529],{"class":47},[33,59843,59844,59846,59848,59850,59852,59855,59858,59860],{"class":35,"line":12048},[33,59845,53563],{"class":47},[33,59847,56106],{"class":53522},[33,59849,55705],{"class":43},[33,59851,57],{"class":47},[33,59853,59854],{"class":60},"\"start\"",[33,59856,59857],{"class":47},">开始\u003C\u002F",[33,59859,56106],{"class":53522},[33,59861,53529],{"class":47},[33,59863,59864,59866,59868,59870,59872,59875,59878,59880],{"class":35,"line":12057},[33,59865,53563],{"class":47},[33,59867,56106],{"class":53522},[33,59869,55705],{"class":43},[33,59871,57],{"class":47},[33,59873,59874],{"class":60},"\"end\"",[33,59876,59877],{"class":47},">结束\u003C\u002F",[33,59879,56106],{"class":53522},[33,59881,53529],{"class":47},[33,59883,59884,59886,59888],{"class":35,"line":12062},[33,59885,54636],{"class":47},[33,59887,53832],{"class":53522},[33,59889,53529],{"class":47},[33,59891,59892],{"class":35,"line":12068},[33,59893,100],{"emptyLinePlaceholder":99},[33,59895,59896,59898,59900],{"class":35,"line":12089},[33,59897,54364],{"class":47},[33,59899,54034],{"class":53522},[33,59901,53529],{"class":47},[33,59903,59904],{"class":35,"line":12095},[33,59905,59906],{"class":2487},"    \u002F\u002F 数据数组\n",[33,59908,59909,59911,59914,59916,59918,59921,59923,59926,59928,59931,59933,59936,59938,59941],{"class":35,"line":12109},[33,59910,13462],{"class":39},[33,59912,59913],{"class":72}," arr",[33,59915,15804],{"class":39},[33,59917,906],{"class":47},[33,59919,59920],{"class":60},"'马超'",[33,59922,245],{"class":47},[33,59924,59925],{"class":60},"'黄忠'",[33,59927,245],{"class":47},[33,59929,59930],{"class":60},"'赵云'",[33,59932,245],{"class":47},[33,59934,59935],{"class":60},"'关羽'",[33,59937,245],{"class":47},[33,59939,59940],{"class":60},"'张飞'",[33,59942,919],{"class":47},[33,59944,59945,59947,59950,59952,59954,59956,59958,59961],{"class":35,"line":12115},[33,59946,13462],{"class":39},[33,59948,59949],{"class":72}," qs",[33,59951,15804],{"class":39},[33,59953,56615],{"class":47},[33,59955,56618],{"class":43},[33,59957,133],{"class":47},[33,59959,59960],{"class":60},"'.qs'",[33,59962,226],{"class":47},[33,59964,59965],{"class":35,"line":12142},[33,59966,59967],{"class":2487},"    \u002F\u002F 1.业务1.开始按钮模块\n",[33,59969,59970,59972,59974,59976,59978,59980,59982,59985],{"class":35,"line":12151},[33,59971,13462],{"class":39},[33,59973,6436],{"class":72},[33,59975,15804],{"class":39},[33,59977,56615],{"class":47},[33,59979,56618],{"class":43},[33,59981,133],{"class":47},[33,59983,59984],{"class":60},"'.start'",[33,59986,226],{"class":47},[33,59988,59989],{"class":35,"line":12157},[33,59990,59991],{"class":2487},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[33,59993,59994,59996,59999,60001],{"class":35,"line":12165},[33,59995,54439],{"class":39},[33,59997,59998],{"class":47}," timerId ",[33,60000,57],{"class":39},[33,60002,670],{"class":72},[33,60004,60005],{"class":35,"line":12170},[33,60006,60007],{"class":2487},"    \u002F\u002F 随机号要全局变量\n",[33,60009,60010,60012,60015,60017],{"class":35,"line":18842},[33,60011,54439],{"class":39},[33,60013,60014],{"class":47}," random ",[33,60016,57],{"class":39},[33,60018,670],{"class":72},[33,60020,60021],{"class":35,"line":18848},[33,60022,60023],{"class":2487},"    \u002F\u002F 1.1 添加点击事件\n",[33,60025,60026,60029,60032,60034,60037,60039,60041],{"class":35,"line":18871},[33,60027,60028],{"class":47},"    start.",[33,60030,60031],{"class":43},"addEventListener",[33,60033,133],{"class":47},[33,60035,60036],{"class":60},"'click'",[33,60038,245],{"class":47},[33,60040,56668],{"class":39},[33,60042,56671],{"class":47},[33,60044,60045,60048,60050,60052,60054,60056],{"class":35,"line":18877},[33,60046,60047],{"class":47},"      timerId ",[33,60049,57],{"class":39},[33,60051,56663],{"class":43},[33,60053,133],{"class":47},[33,60055,56668],{"class":39},[33,60057,56671],{"class":47},[33,60059,60060],{"class":35,"line":18900},[33,60061,60062],{"class":2487},"        \u002F\u002F 随机数\n",[33,60064,60065,60068,60070,60073,60076,60079,60081,60083,60085,60087],{"class":35,"line":18914},[33,60066,60067],{"class":47},"        random ",[33,60069,57],{"class":39},[33,60071,60072],{"class":43}," parseInt",[33,60074,60075],{"class":47},"(Math.",[33,60077,60078],{"class":43},"random",[33,60080,15290],{"class":47},[33,60082,657],{"class":39},[33,60084,54185],{"class":47},[33,60086,54188],{"class":72},[33,60088,226],{"class":47},[33,60090,60091,60094,60096],{"class":35,"line":18934},[33,60092,60093],{"class":47},"        qs.innerHTML ",[33,60095,57],{"class":39},[33,60097,60098],{"class":47}," arr[random]\n",[33,60100,60101,60104,60106],{"class":35,"line":18940},[33,60102,60103],{"class":47},"      }, ",[33,60105,2697],{"class":72},[33,60107,226],{"class":47},[33,60109,60110],{"class":35,"line":18951},[33,60111,60112],{"class":2487},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[33,60114,60115,60117,60120,60122,60125,60127],{"class":35,"line":18974},[33,60116,56699],{"class":39},[33,60118,60119],{"class":47}," (arr.",[33,60121,54188],{"class":72},[33,60123,60124],{"class":39}," ===",[33,60126,27357],{"class":72},[33,60128,14682],{"class":47},[33,60130,60131],{"class":35,"line":18996},[33,60132,60133],{"class":2487},"        \u002F\u002F start.disabled = true\n",[33,60135,60136],{"class":35,"line":19001},[33,60137,60138],{"class":2487},"        \u002F\u002F end.disabled = true\n",[33,60140,60141],{"class":35,"line":19007},[33,60142,60143],{"class":2487},"        \u002F\u002F 可以合起来写\n",[33,60145,60146,60149,60151,60154,60156],{"class":35,"line":19021},[33,60147,60148],{"class":47},"        start.disabled ",[33,60150,57],{"class":39},[33,60152,60153],{"class":47}," end.disabled ",[33,60155,57],{"class":39},[33,60157,60158],{"class":72}," true\n",[33,60160,60161],{"class":35,"line":19034},[33,60162,54617],{"class":47},[33,60164,60165],{"class":35,"line":19039},[33,60166,35686],{"class":47},[33,60168,60169],{"class":35,"line":19053},[33,60170,60171],{"class":2487},"    \u002F\u002F 1.2 关闭按钮模块\n",[33,60173,60174,60176,60178,60180,60182,60184,60186,60189],{"class":35,"line":19058},[33,60175,13462],{"class":39},[33,60177,6452],{"class":72},[33,60179,15804],{"class":39},[33,60181,56615],{"class":47},[33,60183,56618],{"class":43},[33,60185,133],{"class":47},[33,60187,60188],{"class":60},"'.end'",[33,60190,226],{"class":47},[33,60192,60193,60196,60198,60200,60202,60204,60206],{"class":35,"line":19064},[33,60194,60195],{"class":47},"    end.",[33,60197,60031],{"class":43},[33,60199,133],{"class":47},[33,60201,60036],{"class":60},[33,60203,245],{"class":47},[33,60205,56668],{"class":39},[33,60207,56671],{"class":47},[33,60209,60210,60213],{"class":35,"line":19069},[33,60211,60212],{"class":43},"      clearInterval",[33,60214,60215],{"class":47},"(timerId)\n",[33,60217,60218],{"class":35,"line":19083},[33,60219,60220],{"class":2487},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[33,60222,60223,60226,60229,60232,60234],{"class":35,"line":19088},[33,60224,60225],{"class":47},"      arr.",[33,60227,60228],{"class":43},"splice",[33,60230,60231],{"class":47},"(random, ",[33,60233,720],{"class":72},[33,60235,226],{"class":47},[33,60237,60238],{"class":35,"line":19093},[33,60239,35686],{"class":47},[33,60241,60242],{"class":35,"line":19107},[33,60243,100],{"emptyLinePlaceholder":99},[33,60245,60246,60248,60250],{"class":35,"line":19119},[33,60247,54636],{"class":47},[33,60249,54034],{"class":53522},[33,60251,53529],{"class":47},[33,60253,60254,60256,60258],{"class":35,"line":19124},[33,60255,54006],{"class":47},[33,60257,54021],{"class":53522},[33,60259,53529],{"class":47},[33,60261,60262],{"class":35,"line":19137},[33,60263,100],{"emptyLinePlaceholder":99},[33,60265,60266,60268,60270],{"class":35,"line":19142},[33,60267,54006],{"class":47},[33,60269,52857],{"class":53522},[33,60271,53529],{"class":47},[19,60273,60274],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[631,60276,60278],{"id":60277},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[23,60280,60282],{"className":52855,"code":60281,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,60283,60284,60294,60308,60312,60320,60334,60354,60366,60374,60378,60386,60398,60406,60425,60442,60458,60468,60472,60480,60488,60492],{"__ignoreMap":28},[33,60285,60286,60288,60290,60292],{"class":35,"line":36},[33,60287,53519],{"class":47},[33,60289,53523],{"class":53522},[33,60291,53526],{"class":43},[33,60293,53529],{"class":47},[33,60295,60296,60298,60300,60302,60304,60306],{"class":35,"line":51},[33,60297,2226],{"class":47},[33,60299,52857],{"class":53522},[33,60301,53538],{"class":43},[33,60303,57],{"class":47},[33,60305,53543],{"class":60},[33,60307,53529],{"class":47},[33,60309,60310],{"class":35,"line":64},[33,60311,100],{"emptyLinePlaceholder":99},[33,60313,60314,60316,60318],{"class":35,"line":76},[33,60315,2226],{"class":47},[33,60317,53556],{"class":53522},[33,60319,53529],{"class":47},[33,60321,60322,60324,60326,60328,60330,60332],{"class":35,"line":87},[33,60323,54364],{"class":47},[33,60325,53566],{"class":53522},[33,60327,53569],{"class":43},[33,60329,57],{"class":47},[33,60331,53574],{"class":60},[33,60333,53529],{"class":47},[33,60335,60336,60338,60340,60342,60344,60346,60348,60350,60352],{"class":35,"line":96},[33,60337,54364],{"class":47},[33,60339,53566],{"class":53522},[33,60341,17158],{"class":43},[33,60343,57],{"class":47},[33,60345,53613],{"class":60},[33,60347,53593],{"class":43},[33,60349,57],{"class":47},[33,60351,53620],{"class":60},[33,60353,53529],{"class":47},[33,60355,60356,60358,60360,60362,60364],{"class":35,"line":103},[33,60357,54364],{"class":47},[33,60359,53629],{"class":53522},[33,60361,53632],{"class":47},[33,60363,53629],{"class":53522},[33,60365,53529],{"class":47},[33,60367,60368,60370,60372],{"class":35,"line":108},[33,60369,54006],{"class":47},[33,60371,53556],{"class":53522},[33,60373,53529],{"class":47},[33,60375,60376],{"class":35,"line":119},[33,60377,100],{"emptyLinePlaceholder":99},[33,60379,60380,60382,60384],{"class":35,"line":128},[33,60381,2226],{"class":47},[33,60383,54021],{"class":53522},[33,60385,53529],{"class":47},[33,60387,60388,60390,60392,60394,60396],{"class":35,"line":1753},[33,60389,54364],{"class":47},[33,60391,56106],{"class":53522},[33,60393,56112],{"class":47},[33,60395,56106],{"class":53522},[33,60397,53529],{"class":47},[33,60399,60400,60402,60404],{"class":35,"line":1763},[33,60401,54364],{"class":47},[33,60403,54034],{"class":53522},[33,60405,53529],{"class":47},[33,60407,60408,60410,60412,60414,60416,60418,60420,60423],{"class":35,"line":1775},[33,60409,13462],{"class":39},[33,60411,56610],{"class":72},[33,60413,15804],{"class":39},[33,60415,56615],{"class":47},[33,60417,56618],{"class":43},[33,60419,133],{"class":47},[33,60421,60422],{"class":60},"'button'",[33,60424,226],{"class":47},[33,60426,60427,60430,60432,60434,60436,60438,60440],{"class":35,"line":1780},[33,60428,60429],{"class":47},"    btn.",[33,60431,60031],{"class":43},[33,60433,133],{"class":47},[33,60435,60036],{"class":60},[33,60437,245],{"class":47},[33,60439,56668],{"class":39},[33,60441,56671],{"class":47},[33,60443,60444,60447,60449,60451,60454,60456],{"class":35,"line":1785},[33,60445,60446],{"class":39},"      const",[33,60448,4499],{"class":72},[33,60450,15804],{"class":39},[33,60452,60453],{"class":47}," Math.",[33,60455,60078],{"class":43},[33,60457,4235],{"class":47},[33,60459,60460,60463,60466],{"class":35,"line":1940},[33,60461,60462],{"class":47},"      console.",[33,60464,60465],{"class":43},"log",[33,60467,2445],{"class":47},[33,60469,60470],{"class":35,"line":2183},[33,60471,35686],{"class":47},[33,60473,60474,60476,60478],{"class":35,"line":2208},[33,60475,54636],{"class":47},[33,60477,54034],{"class":53522},[33,60479,53529],{"class":47},[33,60481,60482,60484,60486],{"class":35,"line":2234},[33,60483,54006],{"class":47},[33,60485,54021],{"class":53522},[33,60487,53529],{"class":47},[33,60489,60490],{"class":35,"line":2239},[33,60491,100],{"emptyLinePlaceholder":99},[33,60493,60494,60496,60498],{"class":35,"line":2247},[33,60495,54006],{"class":47},[33,60497,52857],{"class":53522},[33,60499,53529],{"class":47},[19,60501,60502],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60504,60505],{},"常量不可以重新赋值",[19,60507,60508],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[23,60510,60512],{"className":52855,"code":60511,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,60513,60514,60524,60538,60542,60550,60564,60584,60596,60604,60608,60616,60628,60636,60647,60665,60681,60695,60703,60707,60715,60723,60727],{"__ignoreMap":28},[33,60515,60516,60518,60520,60522],{"class":35,"line":36},[33,60517,53519],{"class":47},[33,60519,53523],{"class":53522},[33,60521,53526],{"class":43},[33,60523,53529],{"class":47},[33,60525,60526,60528,60530,60532,60534,60536],{"class":35,"line":51},[33,60527,2226],{"class":47},[33,60529,52857],{"class":53522},[33,60531,53538],{"class":43},[33,60533,57],{"class":47},[33,60535,53543],{"class":60},[33,60537,53529],{"class":47},[33,60539,60540],{"class":35,"line":64},[33,60541,100],{"emptyLinePlaceholder":99},[33,60543,60544,60546,60548],{"class":35,"line":76},[33,60545,2226],{"class":47},[33,60547,53556],{"class":53522},[33,60549,53529],{"class":47},[33,60551,60552,60554,60556,60558,60560,60562],{"class":35,"line":87},[33,60553,54364],{"class":47},[33,60555,53566],{"class":53522},[33,60557,53569],{"class":43},[33,60559,57],{"class":47},[33,60561,53574],{"class":60},[33,60563,53529],{"class":47},[33,60565,60566,60568,60570,60572,60574,60576,60578,60580,60582],{"class":35,"line":96},[33,60567,54364],{"class":47},[33,60569,53566],{"class":53522},[33,60571,17158],{"class":43},[33,60573,57],{"class":47},[33,60575,53613],{"class":60},[33,60577,53593],{"class":43},[33,60579,57],{"class":47},[33,60581,53620],{"class":60},[33,60583,53529],{"class":47},[33,60585,60586,60588,60590,60592,60594],{"class":35,"line":103},[33,60587,54364],{"class":47},[33,60589,53629],{"class":53522},[33,60591,53632],{"class":47},[33,60593,53629],{"class":53522},[33,60595,53529],{"class":47},[33,60597,60598,60600,60602],{"class":35,"line":108},[33,60599,54006],{"class":47},[33,60601,53556],{"class":53522},[33,60603,53529],{"class":47},[33,60605,60606],{"class":35,"line":119},[33,60607,100],{"emptyLinePlaceholder":99},[33,60609,60610,60612,60614],{"class":35,"line":128},[33,60611,2226],{"class":47},[33,60613,54021],{"class":53522},[33,60615,53529],{"class":47},[33,60617,60618,60620,60622,60624,60626],{"class":35,"line":1753},[33,60619,54364],{"class":47},[33,60621,56106],{"class":53522},[33,60623,56112],{"class":47},[33,60625,56106],{"class":53522},[33,60627,53529],{"class":47},[33,60629,60630,60632,60634],{"class":35,"line":1763},[33,60631,54364],{"class":47},[33,60633,54034],{"class":53522},[33,60635,53529],{"class":47},[33,60637,60638,60640,60642,60644],{"class":35,"line":1775},[33,60639,13462],{"class":39},[33,60641,4499],{"class":72},[33,60643,15804],{"class":39},[33,60645,60646],{"class":72}," 10\n",[33,60648,60649,60651,60653,60655,60657,60659,60661,60663],{"class":35,"line":1780},[33,60650,13462],{"class":39},[33,60652,56610],{"class":72},[33,60654,15804],{"class":39},[33,60656,56615],{"class":47},[33,60658,56618],{"class":43},[33,60660,133],{"class":47},[33,60662,60422],{"class":60},[33,60664,226],{"class":47},[33,60666,60667,60669,60671,60673,60675,60677,60679],{"class":35,"line":1785},[33,60668,60429],{"class":47},[33,60670,60031],{"class":43},[33,60672,133],{"class":47},[33,60674,60036],{"class":60},[33,60676,245],{"class":47},[33,60678,56668],{"class":39},[33,60680,56671],{"class":47},[33,60682,60683,60685,60687,60689,60691,60693],{"class":35,"line":1940},[33,60684,60446],{"class":39},[33,60686,4499],{"class":72},[33,60688,15804],{"class":39},[33,60690,60453],{"class":47},[33,60692,60078],{"class":43},[33,60694,4235],{"class":47},[33,60696,60697,60699,60701],{"class":35,"line":2183},[33,60698,60462],{"class":47},[33,60700,60465],{"class":43},[33,60702,2445],{"class":47},[33,60704,60705],{"class":35,"line":2208},[33,60706,35686],{"class":47},[33,60708,60709,60711,60713],{"class":35,"line":2234},[33,60710,54636],{"class":47},[33,60712,54034],{"class":53522},[33,60714,53529],{"class":47},[33,60716,60717,60719,60721],{"class":35,"line":2239},[33,60718,54006],{"class":47},[33,60720,54021],{"class":53522},[33,60722,53529],{"class":47},[33,60724,60725],{"class":35,"line":2247},[33,60726,100],{"emptyLinePlaceholder":99},[33,60728,60729,60731,60733],{"class":35,"line":2255},[33,60730,54006],{"class":47},[33,60732,52857],{"class":53522},[33,60734,53529],{"class":47},[19,60736,60737],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[23,60739,60741],{"className":52855,"code":60740,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,60742,60743,60753,60767,60771,60779,60793,60813,60825,60833,60837,60845,60857,60865,60875,60893,60909,60922,60930,60934,60942,60950,60954],{"__ignoreMap":28},[33,60744,60745,60747,60749,60751],{"class":35,"line":36},[33,60746,53519],{"class":47},[33,60748,53523],{"class":53522},[33,60750,53526],{"class":43},[33,60752,53529],{"class":47},[33,60754,60755,60757,60759,60761,60763,60765],{"class":35,"line":51},[33,60756,2226],{"class":47},[33,60758,52857],{"class":53522},[33,60760,53538],{"class":43},[33,60762,57],{"class":47},[33,60764,53543],{"class":60},[33,60766,53529],{"class":47},[33,60768,60769],{"class":35,"line":64},[33,60770,100],{"emptyLinePlaceholder":99},[33,60772,60773,60775,60777],{"class":35,"line":76},[33,60774,2226],{"class":47},[33,60776,53556],{"class":53522},[33,60778,53529],{"class":47},[33,60780,60781,60783,60785,60787,60789,60791],{"class":35,"line":87},[33,60782,54364],{"class":47},[33,60784,53566],{"class":53522},[33,60786,53569],{"class":43},[33,60788,57],{"class":47},[33,60790,53574],{"class":60},[33,60792,53529],{"class":47},[33,60794,60795,60797,60799,60801,60803,60805,60807,60809,60811],{"class":35,"line":96},[33,60796,54364],{"class":47},[33,60798,53566],{"class":53522},[33,60800,17158],{"class":43},[33,60802,57],{"class":47},[33,60804,53613],{"class":60},[33,60806,53593],{"class":43},[33,60808,57],{"class":47},[33,60810,53620],{"class":60},[33,60812,53529],{"class":47},[33,60814,60815,60817,60819,60821,60823],{"class":35,"line":103},[33,60816,54364],{"class":47},[33,60818,53629],{"class":53522},[33,60820,53632],{"class":47},[33,60822,53629],{"class":53522},[33,60824,53529],{"class":47},[33,60826,60827,60829,60831],{"class":35,"line":108},[33,60828,54006],{"class":47},[33,60830,53556],{"class":53522},[33,60832,53529],{"class":47},[33,60834,60835],{"class":35,"line":119},[33,60836,100],{"emptyLinePlaceholder":99},[33,60838,60839,60841,60843],{"class":35,"line":128},[33,60840,2226],{"class":47},[33,60842,54021],{"class":53522},[33,60844,53529],{"class":47},[33,60846,60847,60849,60851,60853,60855],{"class":35,"line":1753},[33,60848,54364],{"class":47},[33,60850,56106],{"class":53522},[33,60852,56112],{"class":47},[33,60854,56106],{"class":53522},[33,60856,53529],{"class":47},[33,60858,60859,60861,60863],{"class":35,"line":1763},[33,60860,54364],{"class":47},[33,60862,54034],{"class":53522},[33,60864,53529],{"class":47},[33,60866,60867,60869,60871,60873],{"class":35,"line":1775},[33,60868,13462],{"class":39},[33,60870,4499],{"class":72},[33,60872,15804],{"class":39},[33,60874,60646],{"class":72},[33,60876,60877,60879,60881,60883,60885,60887,60889,60891],{"class":35,"line":1780},[33,60878,13462],{"class":39},[33,60880,56610],{"class":72},[33,60882,15804],{"class":39},[33,60884,56615],{"class":47},[33,60886,56618],{"class":43},[33,60888,133],{"class":47},[33,60890,60422],{"class":60},[33,60892,226],{"class":47},[33,60894,60895,60897,60899,60901,60903,60905,60907],{"class":35,"line":1785},[33,60896,60429],{"class":47},[33,60898,60031],{"class":43},[33,60900,133],{"class":47},[33,60902,60036],{"class":60},[33,60904,245],{"class":47},[33,60906,56668],{"class":39},[33,60908,56671],{"class":47},[33,60910,60911,60914,60916,60918,60920],{"class":35,"line":1940},[33,60912,60913],{"class":47},"      num ",[33,60915,57],{"class":39},[33,60917,60453],{"class":47},[33,60919,60078],{"class":43},[33,60921,4235],{"class":47},[33,60923,60924,60926,60928],{"class":35,"line":2183},[33,60925,60462],{"class":47},[33,60927,60465],{"class":43},[33,60929,2445],{"class":47},[33,60931,60932],{"class":35,"line":2208},[33,60933,35686],{"class":47},[33,60935,60936,60938,60940],{"class":35,"line":2234},[33,60937,54636],{"class":47},[33,60939,54034],{"class":53522},[33,60941,53529],{"class":47},[33,60943,60944,60946,60948],{"class":35,"line":2239},[33,60945,54006],{"class":47},[33,60947,54021],{"class":53522},[33,60949,53529],{"class":47},[33,60951,60952],{"class":35,"line":2247},[33,60953,100],{"emptyLinePlaceholder":99},[33,60955,60956,60958,60960],{"class":35,"line":2255},[33,60957,54006],{"class":47},[33,60959,52857],{"class":53522},[33,60961,53529],{"class":47},[19,60963,60964],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[631,60966,60968],{"id":60967},"_324-事件监听版本","3.2.4 事件监听版本",[19,60970,60971],{},[3736,60972],{"alt":28,"src":60973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60975,60976],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60978,60979],{},"这种方式会覆盖前边的事件监听:",[23,60981,60983],{"className":52855,"code":60982,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,60984,60985,60995,61009,61013,61021,61035,61055,61067,61075,61079,61087,61099,61107,61125,61139,61150,61154,61166,61176,61180,61188,61196,61200],{"__ignoreMap":28},[33,60986,60987,60989,60991,60993],{"class":35,"line":36},[33,60988,53519],{"class":47},[33,60990,53523],{"class":53522},[33,60992,53526],{"class":43},[33,60994,53529],{"class":47},[33,60996,60997,60999,61001,61003,61005,61007],{"class":35,"line":51},[33,60998,2226],{"class":47},[33,61000,52857],{"class":53522},[33,61002,53538],{"class":43},[33,61004,57],{"class":47},[33,61006,53543],{"class":60},[33,61008,53529],{"class":47},[33,61010,61011],{"class":35,"line":64},[33,61012,100],{"emptyLinePlaceholder":99},[33,61014,61015,61017,61019],{"class":35,"line":76},[33,61016,2226],{"class":47},[33,61018,53556],{"class":53522},[33,61020,53529],{"class":47},[33,61022,61023,61025,61027,61029,61031,61033],{"class":35,"line":87},[33,61024,54364],{"class":47},[33,61026,53566],{"class":53522},[33,61028,53569],{"class":43},[33,61030,57],{"class":47},[33,61032,53574],{"class":60},[33,61034,53529],{"class":47},[33,61036,61037,61039,61041,61043,61045,61047,61049,61051,61053],{"class":35,"line":96},[33,61038,54364],{"class":47},[33,61040,53566],{"class":53522},[33,61042,17158],{"class":43},[33,61044,57],{"class":47},[33,61046,53613],{"class":60},[33,61048,53593],{"class":43},[33,61050,57],{"class":47},[33,61052,53620],{"class":60},[33,61054,53529],{"class":47},[33,61056,61057,61059,61061,61063,61065],{"class":35,"line":103},[33,61058,54364],{"class":47},[33,61060,53629],{"class":53522},[33,61062,53632],{"class":47},[33,61064,53629],{"class":53522},[33,61066,53529],{"class":47},[33,61068,61069,61071,61073],{"class":35,"line":108},[33,61070,54006],{"class":47},[33,61072,53556],{"class":53522},[33,61074,53529],{"class":47},[33,61076,61077],{"class":35,"line":119},[33,61078,100],{"emptyLinePlaceholder":99},[33,61080,61081,61083,61085],{"class":35,"line":128},[33,61082,2226],{"class":47},[33,61084,54021],{"class":53522},[33,61086,53529],{"class":47},[33,61088,61089,61091,61093,61095,61097],{"class":35,"line":1753},[33,61090,54364],{"class":47},[33,61092,56106],{"class":53522},[33,61094,56112],{"class":47},[33,61096,56106],{"class":53522},[33,61098,53529],{"class":47},[33,61100,61101,61103,61105],{"class":35,"line":1763},[33,61102,54364],{"class":47},[33,61104,54034],{"class":53522},[33,61106,53529],{"class":47},[33,61108,61109,61111,61113,61115,61117,61119,61121,61123],{"class":35,"line":1775},[33,61110,13462],{"class":39},[33,61112,56610],{"class":72},[33,61114,15804],{"class":39},[33,61116,56615],{"class":47},[33,61118,56618],{"class":43},[33,61120,133],{"class":47},[33,61122,60422],{"class":60},[33,61124,226],{"class":47},[33,61126,61127,61129,61132,61134,61137],{"class":35,"line":1780},[33,61128,60429],{"class":47},[33,61130,61131],{"class":43},"onclick",[33,61133,15804],{"class":39},[33,61135,61136],{"class":39}," function",[33,61138,56671],{"class":47},[33,61140,61141,61144,61146,61148],{"class":35,"line":1785},[33,61142,61143],{"class":43},"      alert",[33,61145,133],{"class":47},[33,61147,2890],{"class":72},[33,61149,226],{"class":47},[33,61151,61152],{"class":35,"line":1940},[33,61153,4446],{"class":47},[33,61155,61156,61158,61160,61162,61164],{"class":35,"line":2183},[33,61157,60429],{"class":47},[33,61159,61131],{"class":43},[33,61161,15804],{"class":39},[33,61163,61136],{"class":39},[33,61165,56671],{"class":47},[33,61167,61168,61170,61172,61174],{"class":35,"line":2208},[33,61169,61143],{"class":43},[33,61171,133],{"class":47},[33,61173,3163],{"class":72},[33,61175,226],{"class":47},[33,61177,61178],{"class":35,"line":2234},[33,61179,4446],{"class":47},[33,61181,61182,61184,61186],{"class":35,"line":2239},[33,61183,54636],{"class":47},[33,61185,54034],{"class":53522},[33,61187,53529],{"class":47},[33,61189,61190,61192,61194],{"class":35,"line":2247},[33,61191,54006],{"class":47},[33,61193,54021],{"class":53522},[33,61195,53529],{"class":47},[33,61197,61198],{"class":35,"line":2255},[33,61199,100],{"emptyLinePlaceholder":99},[33,61201,61202,61204,61206],{"class":35,"line":3992},[33,61203,54006],{"class":47},[33,61205,52857],{"class":53522},[33,61207,53529],{"class":47},[19,61209,61210],{},"只要点击就输出结果为22,前边11被覆盖了",[23,61212,61214],{"className":52855,"code":61213,"language":52857,"meta":28,"style":28},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[30,61215,61216,61221,61226,61230,61235,61240],{"__ignoreMap":28},[33,61217,61218],{"class":35,"line":36},[33,61219,61220],{"class":47},"  btn.addEventListener('click', function () {\n",[33,61222,61223],{"class":35,"line":51},[33,61224,61225],{"class":47},"      alert(11)\n",[33,61227,61228],{"class":35,"line":64},[33,61229,35686],{"class":47},[33,61231,61232],{"class":35,"line":76},[33,61233,61234],{"class":47},"    btn.addEventListener('click', function () {\n",[33,61236,61237],{"class":35,"line":87},[33,61238,61239],{"class":47},"      alert(22)\n",[33,61241,61242],{"class":35,"line":96},[33,61243,35686],{"class":47},[19,61245,61246],{},"点击第一次输出11,第二次点击为22",[631,61248,61250],{"id":61249},"_325-事件类型","3.2.5 事件类型",[19,61252,61253],{},[3736,61254],{"alt":28,"src":61255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[24236,61257,61259],{"id":61258},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,61261,61262],{},"补充知识:",[19,61264,61265],{},"轮播图自动播放模块,可以使用",[19,61267,61268],{},"let timerId = setInterval(function () {",[19,61270,61271],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,61273,61274],{},"用js方法模拟进行点击事件,click必须加()",[19,61276,61277],{},"next.click()",[19,61279,61280],{},"}, 1000)",[19,61282,61283],{},[3736,61284],{"alt":28,"src":61285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[23,61287,61289],{"className":55286,"code":61288,"language":55288,"meta":28,"style":28},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,61290,61291,61295,61305,61319,61323,61331,61346,61366,61386,61399,61407,61412,61417,61421,61425,61430,61435,61440,61445,61449,61453,61458,61463,61468,61472,61476,61481,61485,61490,61495,61499,61503,61508,61513,61518,61523,61528,61532,61536,61541,61546,61551,61556,61561,61565,61569,61574,61579,61584,61589,61594,61599,61604,61609,61614,61619,61623,61627,61632,61637,61641,61645,61650,61655,61659,61664,61669,61673,61677,61682,61686,61691,61696,61700,61705,61709,61713,61718,61723,61728,61733,61738,61743,61748,61752,61756,61760,61765,61770,61775,61780,61784,61792,61800,61804,61812,61827,61841,61862,61870,61884,61897,61912,61931,61943,61955,61967,61979,61991,62003,62015,62023,62038,62062,62086,62094,62102,62110,62118,62123,62128,62133,62138,62143,62148,62153,62158,62163,62168,62172,62177,62182,62187,62192,62197,62202,62207,62212,62217,62221,62226,62231,62236,62241,62246,62251,62256,62261,62266,62271,62276,62281,62285,62289,62294,62299,62304,62308,62313,62318,62323,62328,62333,62337,62342,62346,62350,62354,62358,62362,62366,62371,62376,62381,62386,62391,62396,62401,62406,62411,62415,62419,62424,62429,62434,62439,62444,62448,62453,62458,62463,62468,62473,62478,62482,62486,62491,62495,62500,62504,62509,62514,62519,62524,62529,62534,62538,62546,62554,62558],{"__ignoreMap":28},[33,61292,61293],{"class":35,"line":36},[33,61294,100],{"emptyLinePlaceholder":99},[33,61296,61297,61299,61301,61303],{"class":35,"line":51},[33,61298,53519],{"class":47},[33,61300,53523],{"class":39},[33,61302,53526],{"class":72},[33,61304,53529],{"class":47},[33,61306,61307,61309,61311,61313,61315,61317],{"class":35,"line":64},[33,61308,2226],{"class":47},[33,61310,52857],{"class":53522},[33,61312,53538],{"class":43},[33,61314,57],{"class":47},[33,61316,53543],{"class":60},[33,61318,53529],{"class":47},[33,61320,61321],{"class":35,"line":76},[33,61322,100],{"emptyLinePlaceholder":99},[33,61324,61325,61327,61329],{"class":35,"line":87},[33,61326,2226],{"class":47},[33,61328,53556],{"class":53522},[33,61330,53529],{"class":47},[33,61332,61333,61335,61337,61339,61341,61343],{"class":35,"line":96},[33,61334,54364],{"class":47},[33,61336,53566],{"class":53522},[33,61338,53569],{"class":43},[33,61340,57],{"class":47},[33,61342,53574],{"class":60},[33,61344,61345],{"class":47}," \u002F>\n",[33,61347,61348,61350,61352,61354,61356,61358,61360,61362,61364],{"class":35,"line":103},[33,61349,54364],{"class":47},[33,61351,53566],{"class":53522},[33,61353,53585],{"class":43},[33,61355,57],{"class":47},[33,61357,53590],{"class":60},[33,61359,53593],{"class":43},[33,61361,57],{"class":47},[33,61363,53598],{"class":60},[33,61365,61345],{"class":47},[33,61367,61368,61370,61372,61374,61376,61378,61380,61382,61384],{"class":35,"line":108},[33,61369,54364],{"class":47},[33,61371,53566],{"class":53522},[33,61373,17158],{"class":43},[33,61375,57],{"class":47},[33,61377,53613],{"class":60},[33,61379,53593],{"class":43},[33,61381,57],{"class":47},[33,61383,53620],{"class":60},[33,61385,61345],{"class":47},[33,61387,61388,61390,61392,61395,61397],{"class":35,"line":119},[33,61389,54364],{"class":47},[33,61391,53629],{"class":53522},[33,61393,61394],{"class":47},">轮播图点击切换\u003C\u002F",[33,61396,53629],{"class":53522},[33,61398,53529],{"class":47},[33,61400,61401,61403,61405],{"class":35,"line":128},[33,61402,54364],{"class":47},[33,61404,2331],{"class":53522},[33,61406,53529],{"class":47},[33,61408,61409],{"class":35,"line":1753},[33,61410,61411],{"class":47},"    * {\n",[33,61413,61414],{"class":35,"line":1763},[33,61415,61416],{"class":47},"      box-sizing: border-box;\n",[33,61418,61419],{"class":35,"line":1775},[33,61420,4446],{"class":47},[33,61422,61423],{"class":35,"line":1780},[33,61424,100],{"emptyLinePlaceholder":99},[33,61426,61427],{"class":35,"line":1785},[33,61428,61429],{"class":47},"    .slider {\n",[33,61431,61432],{"class":35,"line":1940},[33,61433,61434],{"class":47},"      width: 560px;\n",[33,61436,61437],{"class":35,"line":2183},[33,61438,61439],{"class":47},"      height: 400px;\n",[33,61441,61442],{"class":35,"line":2208},[33,61443,61444],{"class":47},"      overflow: hidden;\n",[33,61446,61447],{"class":35,"line":2234},[33,61448,4446],{"class":47},[33,61450,61451],{"class":35,"line":2239},[33,61452,100],{"emptyLinePlaceholder":99},[33,61454,61455],{"class":35,"line":2247},[33,61456,61457],{"class":47},"    .slider-wrapper {\n",[33,61459,61460],{"class":35,"line":2255},[33,61461,61462],{"class":47},"      width: 100%;\n",[33,61464,61465],{"class":35,"line":3992},[33,61466,61467],{"class":47},"      height: 320px;\n",[33,61469,61470],{"class":35,"line":4009},[33,61471,4446],{"class":47},[33,61473,61474],{"class":35,"line":4014},[33,61475,100],{"emptyLinePlaceholder":99},[33,61477,61478],{"class":35,"line":4019},[33,61479,61480],{"class":47},"    .slider-wrapper img {\n",[33,61482,61483],{"class":35,"line":4024},[33,61484,61462],{"class":47},[33,61486,61487],{"class":35,"line":4038},[33,61488,61489],{"class":47},"      height: 100%;\n",[33,61491,61492],{"class":35,"line":4043},[33,61493,61494],{"class":47},"      display: block;\n",[33,61496,61497],{"class":35,"line":4834},[33,61498,4446],{"class":47},[33,61500,61501],{"class":35,"line":4848},[33,61502,100],{"emptyLinePlaceholder":99},[33,61504,61505],{"class":35,"line":4856},[33,61506,61507],{"class":47},"    .slider-footer {\n",[33,61509,61510],{"class":35,"line":4861},[33,61511,61512],{"class":47},"      height: 80px;\n",[33,61514,61515],{"class":35,"line":4867},[33,61516,61517],{"class":47},"      background-color: rgb(100, 67, 68);\n",[33,61519,61520],{"class":35,"line":4873},[33,61521,61522],{"class":47},"      padding: 12px 12px 0 12px;\n",[33,61524,61525],{"class":35,"line":4878},[33,61526,61527],{"class":47},"      position: relative;\n",[33,61529,61530],{"class":35,"line":10194},[33,61531,4446],{"class":47},[33,61533,61534],{"class":35,"line":10218},[33,61535,100],{"emptyLinePlaceholder":99},[33,61537,61538],{"class":35,"line":10223},[33,61539,61540],{"class":47},"    .slider-footer .toggle {\n",[33,61542,61543],{"class":35,"line":10229},[33,61544,61545],{"class":47},"      position: absolute;\n",[33,61547,61548],{"class":35,"line":10256},[33,61549,61550],{"class":47},"      right: 0;\n",[33,61552,61553],{"class":35,"line":10261},[33,61554,61555],{"class":47},"      top: 12px;\n",[33,61557,61558],{"class":35,"line":10267},[33,61559,61560],{"class":47},"      display: flex;\n",[33,61562,61563],{"class":35,"line":10279},[33,61564,4446],{"class":47},[33,61566,61567],{"class":35,"line":10291},[33,61568,100],{"emptyLinePlaceholder":99},[33,61570,61571],{"class":35,"line":10303},[33,61572,61573],{"class":47},"    .slider-footer .toggle button {\n",[33,61575,61576],{"class":35,"line":11961},[33,61577,61578],{"class":47},"      margin-right: 12px;\n",[33,61580,61581],{"class":35,"line":11986},[33,61582,61583],{"class":47},"      width: 28px;\n",[33,61585,61586],{"class":35,"line":12009},[33,61587,61588],{"class":47},"      height: 28px;\n",[33,61590,61591],{"class":35,"line":12033},[33,61592,61593],{"class":47},"      appearance: none;\n",[33,61595,61596],{"class":35,"line":12038},[33,61597,61598],{"class":47},"      border: none;\n",[33,61600,61601],{"class":35,"line":12043},[33,61602,61603],{"class":47},"      background: rgba(255, 255, 255, 0.1);\n",[33,61605,61606],{"class":35,"line":12048},[33,61607,61608],{"class":47},"      color: #fff;\n",[33,61610,61611],{"class":35,"line":12057},[33,61612,61613],{"class":47},"      border-radius: 4px;\n",[33,61615,61616],{"class":35,"line":12062},[33,61617,61618],{"class":47},"      cursor: pointer;\n",[33,61620,61621],{"class":35,"line":12068},[33,61622,4446],{"class":47},[33,61624,61625],{"class":35,"line":12089},[33,61626,100],{"emptyLinePlaceholder":99},[33,61628,61629],{"class":35,"line":12095},[33,61630,61631],{"class":47},"    .slider-footer .toggle button:hover {\n",[33,61633,61634],{"class":35,"line":12109},[33,61635,61636],{"class":47},"      background: rgba(255, 255, 255, 0.2);\n",[33,61638,61639],{"class":35,"line":12115},[33,61640,4446],{"class":47},[33,61642,61643],{"class":35,"line":12142},[33,61644,100],{"emptyLinePlaceholder":99},[33,61646,61647],{"class":35,"line":12151},[33,61648,61649],{"class":47},"    .slider-footer p {\n",[33,61651,61652],{"class":35,"line":12157},[33,61653,61654],{"class":47},"      margin: 0;\n",[33,61656,61657],{"class":35,"line":12165},[33,61658,61608],{"class":47},[33,61660,61661],{"class":35,"line":12170},[33,61662,61663],{"class":47},"      font-size: 18px;\n",[33,61665,61666],{"class":35,"line":18842},[33,61667,61668],{"class":47},"      margin-bottom: 10px;\n",[33,61670,61671],{"class":35,"line":18848},[33,61672,4446],{"class":47},[33,61674,61675],{"class":35,"line":18871},[33,61676,100],{"emptyLinePlaceholder":99},[33,61678,61679],{"class":35,"line":18877},[33,61680,61681],{"class":47},"    .slider-indicator {\n",[33,61683,61684],{"class":35,"line":18900},[33,61685,61654],{"class":47},[33,61687,61688],{"class":35,"line":18914},[33,61689,61690],{"class":47},"      padding: 0;\n",[33,61692,61693],{"class":35,"line":18934},[33,61694,61695],{"class":47},"      list-style: none;\n",[33,61697,61698],{"class":35,"line":18940},[33,61699,61560],{"class":47},[33,61701,61702],{"class":35,"line":18951},[33,61703,61704],{"class":47},"      align-items: center;\n",[33,61706,61707],{"class":35,"line":18974},[33,61708,4446],{"class":47},[33,61710,61711],{"class":35,"line":18996},[33,61712,100],{"emptyLinePlaceholder":99},[33,61714,61715],{"class":35,"line":19001},[33,61716,61717],{"class":47},"    .slider-indicator li {\n",[33,61719,61720],{"class":35,"line":19007},[33,61721,61722],{"class":47},"      width: 8px;\n",[33,61724,61725],{"class":35,"line":19021},[33,61726,61727],{"class":47},"      height: 8px;\n",[33,61729,61730],{"class":35,"line":19034},[33,61731,61732],{"class":47},"      margin: 4px;\n",[33,61734,61735],{"class":35,"line":19039},[33,61736,61737],{"class":47},"      border-radius: 50%;\n",[33,61739,61740],{"class":35,"line":19053},[33,61741,61742],{"class":47},"      background: #fff;\n",[33,61744,61745],{"class":35,"line":19058},[33,61746,61747],{"class":47},"      opacity: 0.4;\n",[33,61749,61750],{"class":35,"line":19064},[33,61751,61618],{"class":47},[33,61753,61754],{"class":35,"line":19069},[33,61755,4446],{"class":47},[33,61757,61758],{"class":35,"line":19083},[33,61759,100],{"emptyLinePlaceholder":99},[33,61761,61762],{"class":35,"line":19088},[33,61763,61764],{"class":47},"    .slider-indicator li.active {\n",[33,61766,61767],{"class":35,"line":19093},[33,61768,61769],{"class":47},"      width: 12px;\n",[33,61771,61772],{"class":35,"line":19107},[33,61773,61774],{"class":47},"      height: 12px;\n",[33,61776,61777],{"class":35,"line":19119},[33,61778,61779],{"class":47},"      opacity: 1;\n",[33,61781,61782],{"class":35,"line":19124},[33,61783,4446],{"class":47},[33,61785,61786,61788,61790],{"class":35,"line":19137},[33,61787,54636],{"class":47},[33,61789,2331],{"class":53522},[33,61791,53529],{"class":47},[33,61793,61794,61796,61798],{"class":35,"line":19142},[33,61795,54006],{"class":47},[33,61797,53556],{"class":53522},[33,61799,53529],{"class":47},[33,61801,61802],{"class":35,"line":19147},[33,61803,100],{"emptyLinePlaceholder":99},[33,61805,61806,61808,61810],{"class":35,"line":19152},[33,61807,2226],{"class":47},[33,61809,54021],{"class":53522},[33,61811,53529],{"class":47},[33,61813,61814,61816,61818,61820,61822,61825],{"class":35,"line":19165},[33,61815,54364],{"class":47},[33,61817,53832],{"class":53522},[33,61819,55705],{"class":43},[33,61821,57],{"class":47},[33,61823,61824],{"class":60},"\"slider\"",[33,61826,53529],{"class":47},[33,61828,61829,61831,61833,61835,61837,61839],{"class":35,"line":19170},[33,61830,53563],{"class":47},[33,61832,53832],{"class":53522},[33,61834,55705],{"class":43},[33,61836,57],{"class":47},[33,61838,57446],{"class":60},[33,61840,53529],{"class":47},[33,61842,61843,61845,61847,61849,61851,61854,61856,61858,61860],{"class":35,"line":34859},[33,61844,57453],{"class":47},[33,61846,3736],{"class":53522},[33,61848,57458],{"class":43},[33,61850,57],{"class":47},[33,61852,61853],{"class":60},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,61855,57466],{"class":43},[33,61857,57],{"class":47},[33,61859,9898],{"class":60},[33,61861,61345],{"class":47},[33,61863,61864,61866,61868],{"class":35,"line":34865},[33,61865,53997],{"class":47},[33,61867,53832],{"class":53522},[33,61869,53529],{"class":47},[33,61871,61872,61874,61876,61878,61880,61882],{"class":35,"line":34871},[33,61873,53563],{"class":47},[33,61875,53832],{"class":53522},[33,61877,55705],{"class":43},[33,61879,57],{"class":47},[33,61881,57493],{"class":60},[33,61883,53529],{"class":47},[33,61885,61886,61888,61890,61893,61895],{"class":35,"line":34877},[33,61887,57453],{"class":47},[33,61889,19],{"class":53522},[33,61891,61892],{"class":47},">对人类来说会不会太超前了？\u003C\u002F",[33,61894,19],{"class":53522},[33,61896,53529],{"class":47},[33,61898,61899,61901,61903,61905,61907,61910],{"class":35,"line":34883},[33,61900,57453],{"class":47},[33,61902,3413],{"class":53522},[33,61904,55705],{"class":43},[33,61906,57],{"class":47},[33,61908,61909],{"class":60},"\"slider-indicator\"",[33,61911,53529],{"class":47},[33,61913,61914,61916,61918,61920,61922,61925,61927,61929],{"class":35,"line":34894},[33,61915,57521],{"class":47},[33,61917,331],{"class":53522},[33,61919,55705],{"class":43},[33,61921,57],{"class":47},[33,61923,61924],{"class":60},"\"active\"",[33,61926,57533],{"class":47},[33,61928,331],{"class":53522},[33,61930,53529],{"class":47},[33,61932,61933,61935,61937,61939,61941],{"class":35,"line":34900},[33,61934,57521],{"class":47},[33,61936,331],{"class":53522},[33,61938,57533],{"class":47},[33,61940,331],{"class":53522},[33,61942,53529],{"class":47},[33,61944,61945,61947,61949,61951,61953],{"class":35,"line":34920},[33,61946,57521],{"class":47},[33,61948,331],{"class":53522},[33,61950,57533],{"class":47},[33,61952,331],{"class":53522},[33,61954,53529],{"class":47},[33,61956,61957,61959,61961,61963,61965],{"class":35,"line":34926},[33,61958,57521],{"class":47},[33,61960,331],{"class":53522},[33,61962,57533],{"class":47},[33,61964,331],{"class":53522},[33,61966,53529],{"class":47},[33,61968,61969,61971,61973,61975,61977],{"class":35,"line":34937},[33,61970,57521],{"class":47},[33,61972,331],{"class":53522},[33,61974,57533],{"class":47},[33,61976,331],{"class":53522},[33,61978,53529],{"class":47},[33,61980,61981,61983,61985,61987,61989],{"class":35,"line":34943},[33,61982,57521],{"class":47},[33,61984,331],{"class":53522},[33,61986,57533],{"class":47},[33,61988,331],{"class":53522},[33,61990,53529],{"class":47},[33,61992,61993,61995,61997,61999,62001],{"class":35,"line":34949},[33,61994,57521],{"class":47},[33,61996,331],{"class":53522},[33,61998,57533],{"class":47},[33,62000,331],{"class":53522},[33,62002,53529],{"class":47},[33,62004,62005,62007,62009,62011,62013],{"class":35,"line":34955},[33,62006,57521],{"class":47},[33,62008,331],{"class":53522},[33,62010,57533],{"class":47},[33,62012,331],{"class":53522},[33,62014,53529],{"class":47},[33,62016,62017,62019,62021],{"class":35,"line":34961},[33,62018,57626],{"class":47},[33,62020,3413],{"class":53522},[33,62022,53529],{"class":47},[33,62024,62025,62027,62029,62031,62033,62036],{"class":35,"line":34967},[33,62026,57453],{"class":47},[33,62028,53832],{"class":53522},[33,62030,55705],{"class":43},[33,62032,57],{"class":47},[33,62034,62035],{"class":60},"\"toggle\"",[33,62037,53529],{"class":47},[33,62039,62040,62042,62044,62046,62048,62051,62053,62056,62058,62060],{"class":35,"line":34973},[33,62041,57521],{"class":47},[33,62043,56106],{"class":53522},[33,62045,55705],{"class":43},[33,62047,57],{"class":47},[33,62049,62050],{"class":60},"\"prev\"",[33,62052,3367],{"class":47},[33,62054,62055],{"class":72},"&lt;",[33,62057,54006],{"class":47},[33,62059,56106],{"class":53522},[33,62061,53529],{"class":47},[33,62063,62064,62066,62068,62070,62072,62075,62077,62080,62082,62084],{"class":35,"line":34979},[33,62065,57521],{"class":47},[33,62067,56106],{"class":53522},[33,62069,55705],{"class":43},[33,62071,57],{"class":47},[33,62073,62074],{"class":60},"\"next\"",[33,62076,3367],{"class":47},[33,62078,62079],{"class":72},"&gt;",[33,62081,54006],{"class":47},[33,62083,56106],{"class":53522},[33,62085,53529],{"class":47},[33,62087,62088,62090,62092],{"class":35,"line":34999},[33,62089,57626],{"class":47},[33,62091,53832],{"class":53522},[33,62093,53529],{"class":47},[33,62095,62096,62098,62100],{"class":35,"line":35005},[33,62097,53997],{"class":47},[33,62099,53832],{"class":53522},[33,62101,53529],{"class":47},[33,62103,62104,62106,62108],{"class":35,"line":35021},[33,62105,54636],{"class":47},[33,62107,53832],{"class":53522},[33,62109,53529],{"class":47},[33,62111,62112,62114,62116],{"class":35,"line":35027},[33,62113,54364],{"class":47},[33,62115,54034],{"class":53522},[33,62117,53529],{"class":47},[33,62119,62120],{"class":35,"line":35041},[33,62121,62122],{"class":47},"    \u002F\u002F 1. 初始数据\n",[33,62124,62125],{"class":35,"line":35047},[33,62126,62127],{"class":47},"    const data = [\n",[33,62129,62130],{"class":35,"line":35062},[33,62131,62132],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[33,62134,62135],{"class":35,"line":35068},[33,62136,62137],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[33,62139,62140],{"class":35,"line":35077},[33,62141,62142],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[33,62144,62145],{"class":35,"line":35083},[33,62146,62147],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[33,62149,62150],{"class":35,"line":35092},[33,62151,62152],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[33,62154,62155],{"class":35,"line":35098},[33,62156,62157],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[33,62159,62160],{"class":35,"line":35104},[33,62161,62162],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[33,62164,62165],{"class":35,"line":35113},[33,62166,62167],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[33,62169,62170],{"class":35,"line":35119},[33,62171,55328],{"class":47},[33,62173,62174],{"class":35,"line":35130},[33,62175,62176],{"class":47},"    \u002F\u002F 获取元素\n",[33,62178,62179],{"class":35,"line":35136},[33,62180,62181],{"class":47},"    const img = document.querySelector('.slider-wrapper img')\n",[33,62183,62184],{"class":35,"line":35155},[33,62185,62186],{"class":47},"    const p = document.querySelector('.slider-footer p')\n",[33,62188,62189],{"class":35,"line":35161},[33,62190,62191],{"class":47},"    const footer = document.querySelector('.slider-footer')\n",[33,62193,62194],{"class":35,"line":35172},[33,62195,62196],{"class":47},"    \u002F\u002F 1. 右按钮业务\n",[33,62198,62199],{"class":35,"line":35178},[33,62200,62201],{"class":47},"    \u002F\u002F 1.1 获取右侧按钮 \n",[33,62203,62204],{"class":35,"line":35198},[33,62205,62206],{"class":47},"    const next = document.querySelector('.next')\n",[33,62208,62209],{"class":35,"line":35214},[33,62210,62211],{"class":47},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[33,62213,62214],{"class":35,"line":35220},[33,62215,62216],{"class":47},"    \u002F\u002F 1.2 注册点击事件\n",[33,62218,62219],{"class":35,"line":35234},[33,62220,100],{"emptyLinePlaceholder":99},[33,62222,62223],{"class":35,"line":35240},[33,62224,62225],{"class":47},"    next.addEventListener('click', function () {\n",[33,62227,62228],{"class":35,"line":35246},[33,62229,62230],{"class":47},"      \u002F\u002F console.log(11)\n",[33,62232,62233],{"class":35,"line":35257},[33,62234,62235],{"class":47},"      i++\n",[33,62237,62238],{"class":35,"line":35263},[33,62239,62240],{"class":47},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[33,62242,62243],{"class":35,"line":35269},[33,62244,62245],{"class":47},"      \u002F\u002F if (i >= 8) {\n",[33,62247,62248],{"class":35,"line":35279},[33,62249,62250],{"class":47},"      \u002F\u002F   i = 0\n",[33,62252,62253],{"class":35,"line":35285},[33,62254,62255],{"class":47},"      \u002F\u002F }\n",[33,62257,62258],{"class":35,"line":35296},[33,62259,62260],{"class":47},"      i = i >= data.length ? 0 : i\n",[33,62262,62263],{"class":35,"line":35302},[33,62264,62265],{"class":47},"      \u002F\u002F 1.3 得到对应的对象\n",[33,62267,62268],{"class":35,"line":35312},[33,62269,62270],{"class":47},"      \u002F\u002F console.log(data[i])\n",[33,62272,62273],{"class":35,"line":35317},[33,62274,62275],{"class":47},"      \u002F\u002F 调用函数\n",[33,62277,62278],{"class":35,"line":35323},[33,62279,62280],{"class":47},"      toggle()\n",[33,62282,62283],{"class":35,"line":35372},[33,62284,35686],{"class":47},[33,62286,62287],{"class":35,"line":35419},[33,62288,100],{"emptyLinePlaceholder":99},[33,62290,62291],{"class":35,"line":35424},[33,62292,62293],{"class":47},"    \u002F\u002F 2. 左侧按钮业务\n",[33,62295,62296],{"class":35,"line":35430},[33,62297,62298],{"class":47},"    \u002F\u002F 2.1 获取左侧按钮 \n",[33,62300,62301],{"class":35,"line":35449},[33,62302,62303],{"class":47},"    const prev = document.querySelector('.prev')\n",[33,62305,62306],{"class":35,"line":35455},[33,62307,62216],{"class":47},[33,62309,62310],{"class":35,"line":35474},[33,62311,62312],{"class":47},"    prev.addEventListener('click', function () {\n",[33,62314,62315],{"class":35,"line":35480},[33,62316,62317],{"class":47},"      i--\n",[33,62319,62320],{"class":35,"line":35486},[33,62321,62322],{"class":47},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[33,62324,62325],{"class":35,"line":35496},[33,62326,62327],{"class":47},"      \u002F\u002F if (i \u003C 0) {\n",[33,62329,62330],{"class":35,"line":35501},[33,62331,62332],{"class":47},"      \u002F\u002F   i = 7\n",[33,62334,62335],{"class":35,"line":35507},[33,62336,62255],{"class":47},[33,62338,62339],{"class":35,"line":35523},[33,62340,62341],{"class":47},"      i = i \u003C 0 ? data.length - 1 : i\n",[33,62343,62344],{"class":35,"line":35568},[33,62345,62265],{"class":47},[33,62347,62348],{"class":35,"line":35574},[33,62349,62270],{"class":47},[33,62351,62352],{"class":35,"line":35580},[33,62353,62275],{"class":47},[33,62355,62356],{"class":35,"line":35586},[33,62357,62280],{"class":47},[33,62359,62360],{"class":35,"line":35597},[33,62361,35686],{"class":47},[33,62363,62364],{"class":35,"line":35603},[33,62365,100],{"emptyLinePlaceholder":99},[33,62367,62368],{"class":35,"line":35609},[33,62369,62370],{"class":47},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[33,62372,62373],{"class":35,"line":35615},[33,62374,62375],{"class":47},"    function toggle() {\n",[33,62377,62378],{"class":35,"line":35633},[33,62379,62380],{"class":47},"      \u002F\u002F 1.4 渲染对应的数据\n",[33,62382,62383],{"class":35,"line":35647},[33,62384,62385],{"class":47},"      img.src = data[i].url\n",[33,62387,62388],{"class":35,"line":35656},[33,62389,62390],{"class":47},"      p.innerHTML = data[i].title\n",[33,62392,62393],{"class":35,"line":35665},[33,62394,62395],{"class":47},"      footer.style.backgroundColor = data[i].color\n",[33,62397,62398],{"class":35,"line":35674},[33,62399,62400],{"class":47},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[33,62402,62403],{"class":35,"line":35683},[33,62404,62405],{"class":47},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[33,62407,62408],{"class":35,"line":35689},[33,62409,62410],{"class":47},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[33,62412,62413],{"class":35,"line":35695},[33,62414,4446],{"class":47},[33,62416,62417],{"class":35,"line":35703},[33,62418,100],{"emptyLinePlaceholder":99},[33,62420,62421],{"class":35,"line":35708},[33,62422,62423],{"class":47},"    \u002F\u002F 3. 自动播放模块\n",[33,62425,62426],{"class":35,"line":35714},[33,62427,62428],{"class":47},"    let timerId = setInterval(function () {\n",[33,62430,62431],{"class":35,"line":35725},[33,62432,62433],{"class":47},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,62435,62436],{"class":35,"line":35731},[33,62437,62438],{"class":47},"      next.click()\n",[33,62440,62441],{"class":35,"line":35751},[33,62442,62443],{"class":47},"    }, 1000)\n",[33,62445,62446],{"class":35,"line":35757},[33,62447,100],{"emptyLinePlaceholder":99},[33,62449,62450],{"class":35,"line":35763},[33,62451,62452],{"class":47},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[33,62454,62455],{"class":35,"line":35769},[33,62456,62457],{"class":47},"    const slider = document.querySelector('.slider')\n",[33,62459,62460],{"class":35,"line":35786},[33,62461,62462],{"class":47},"    \u002F\u002F 注册事件\n",[33,62464,62465],{"class":35,"line":35792},[33,62466,62467],{"class":47},"    slider.addEventListener('mouseenter', function () {\n",[33,62469,62470],{"class":35,"line":35798},[33,62471,62472],{"class":47},"      \u002F\u002F 停止定时器\n",[33,62474,62475],{"class":35,"line":35804},[33,62476,62477],{"class":47},"      clearInterval(timerId)\n",[33,62479,62480],{"class":35,"line":35810},[33,62481,35686],{"class":47},[33,62483,62484],{"class":35,"line":35816},[33,62485,100],{"emptyLinePlaceholder":99},[33,62487,62488],{"class":35,"line":35843},[33,62489,62490],{"class":47},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[33,62492,62493],{"class":35,"line":35867},[33,62494,62462],{"class":47},[33,62496,62497],{"class":35,"line":35873},[33,62498,62499],{"class":47},"    slider.addEventListener('mouseleave', function () {\n",[33,62501,62502],{"class":35,"line":35879},[33,62503,62472],{"class":47},[33,62505,62506],{"class":35,"line":35885},[33,62507,62508],{"class":47},"      if (timerId) clearInterval(timerId)\n",[33,62510,62511],{"class":35,"line":35896},[33,62512,62513],{"class":47},"      \u002F\u002F 开启定时器\n",[33,62515,62516],{"class":35,"line":35907},[33,62517,62518],{"class":47},"      timerId = setInterval(function () {\n",[33,62520,62521],{"class":35,"line":35913},[33,62522,62523],{"class":47},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,62525,62526],{"class":35,"line":35930},[33,62527,62528],{"class":47},"        next.click()\n",[33,62530,62531],{"class":35,"line":35953},[33,62532,62533],{"class":47},"      }, 1000)\n",[33,62535,62536],{"class":35,"line":35976},[33,62537,35686],{"class":47},[33,62539,62540,62542,62544],{"class":35,"line":35982},[33,62541,54636],{"class":47},[33,62543,54034],{"class":53522},[33,62545,53529],{"class":47},[33,62547,62548,62550,62552],{"class":35,"line":35987},[33,62549,54006],{"class":47},[33,62551,54021],{"class":53522},[33,62553,53529],{"class":47},[33,62555,62556],{"class":35,"line":35996},[33,62557,100],{"emptyLinePlaceholder":99},[33,62559,62560,62562,62564],{"class":35,"line":36006},[33,62561,54006],{"class":47},[33,62563,52857],{"class":53522},[33,62565,53529],{"class":47},[24236,62567,62569],{"id":62568},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62571,62572],{},"小米搜索框案例：",[23,62574,62576],{"className":52855,"code":62575,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,62577,62578,62588,62602,62606,62614,62628,62648,62668,62680,62688,62694,62704,62714,62726,62730,62734,62741,62745,62756,62760,62764,62771,62782,62795,62809,62813,62817,62826,62838,62850,62864,62877,62890,62908,62919,62923,62927,62936,62953,62957,62961,62968,62978,62988,62999,63012,63024,63040,63051,63063,63067,63071,63079,63090,63107,63119,63131,63142,63146,63150,63161,63172,63176,63184,63188,63196,63200,63208,63223,63246,63261,63292,63319,63346,63373,63400,63427,63454,63463,63471,63479,63484,63504,63524,63529,63534,63552,63557,63567,63572,63586,63591,63596,63613,63622,63634,63638,63646,63654,63658],{"__ignoreMap":28},[33,62579,62580,62582,62584,62586],{"class":35,"line":36},[33,62581,53519],{"class":47},[33,62583,53523],{"class":53522},[33,62585,53526],{"class":43},[33,62587,53529],{"class":47},[33,62589,62590,62592,62594,62596,62598,62600],{"class":35,"line":51},[33,62591,2226],{"class":47},[33,62593,52857],{"class":53522},[33,62595,53538],{"class":43},[33,62597,57],{"class":47},[33,62599,53543],{"class":60},[33,62601,53529],{"class":47},[33,62603,62604],{"class":35,"line":64},[33,62605,100],{"emptyLinePlaceholder":99},[33,62607,62608,62610,62612],{"class":35,"line":76},[33,62609,2226],{"class":47},[33,62611,53556],{"class":53522},[33,62613,53529],{"class":47},[33,62615,62616,62618,62620,62622,62624,62626],{"class":35,"line":87},[33,62617,53563],{"class":47},[33,62619,53566],{"class":53522},[33,62621,53569],{"class":43},[33,62623,57],{"class":47},[33,62625,53574],{"class":60},[33,62627,53529],{"class":47},[33,62629,62630,62632,62634,62636,62638,62640,62642,62644,62646],{"class":35,"line":96},[33,62631,53563],{"class":47},[33,62633,53566],{"class":53522},[33,62635,53585],{"class":43},[33,62637,57],{"class":47},[33,62639,53590],{"class":60},[33,62641,53593],{"class":43},[33,62643,57],{"class":47},[33,62645,53598],{"class":60},[33,62647,53529],{"class":47},[33,62649,62650,62652,62654,62656,62658,62660,62662,62664,62666],{"class":35,"line":103},[33,62651,53563],{"class":47},[33,62653,53566],{"class":53522},[33,62655,17158],{"class":43},[33,62657,57],{"class":47},[33,62659,53613],{"class":60},[33,62661,53593],{"class":43},[33,62663,57],{"class":47},[33,62665,53620],{"class":60},[33,62667,53529],{"class":47},[33,62669,62670,62672,62674,62676,62678],{"class":35,"line":108},[33,62671,53563],{"class":47},[33,62673,53629],{"class":53522},[33,62675,53632],{"class":47},[33,62677,53629],{"class":53522},[33,62679,53529],{"class":47},[33,62681,62682,62684,62686],{"class":35,"line":119},[33,62683,53563],{"class":47},[33,62685,2331],{"class":53522},[33,62687,53529],{"class":47},[33,62689,62690,62692],{"class":35,"line":128},[33,62691,53649],{"class":53522},[33,62693,17810],{"class":47},[33,62695,62696,62698,62700,62702],{"class":35,"line":1753},[33,62697,53656],{"class":72},[33,62699,996],{"class":47},[33,62701,2617],{"class":72},[33,62703,3567],{"class":47},[33,62705,62706,62708,62710,62712],{"class":35,"line":1763},[33,62707,53667],{"class":72},[33,62709,996],{"class":47},[33,62711,2617],{"class":72},[33,62713,3567],{"class":47},[33,62715,62716,62719,62721,62724],{"class":35,"line":1775},[33,62717,62718],{"class":72},"            box-sizing",[33,62720,996],{"class":47},[33,62722,62723],{"class":72},"border-box",[33,62725,3567],{"class":47},[33,62727,62728],{"class":35,"line":1780},[33,62729,4786],{"class":47},[33,62731,62732],{"class":35,"line":1785},[33,62733,100],{"emptyLinePlaceholder":99},[33,62735,62736,62739],{"class":35,"line":1940},[33,62737,62738],{"class":53522},"        ul",[33,62740,17810],{"class":47},[33,62742,62743],{"class":35,"line":2183},[33,62744,100],{"emptyLinePlaceholder":99},[33,62746,62747,62750,62752,62754],{"class":35,"line":2208},[33,62748,62749],{"class":72},"            list-style",[33,62751,996],{"class":47},[33,62753,56956],{"class":72},[33,62755,3567],{"class":47},[33,62757,62758],{"class":35,"line":2234},[33,62759,4786],{"class":47},[33,62761,62762],{"class":35,"line":2239},[33,62763,100],{"emptyLinePlaceholder":99},[33,62765,62766,62769],{"class":35,"line":2247},[33,62767,62768],{"class":43},"        .mi",[33,62770,17810],{"class":47},[33,62772,62773,62776,62778,62780],{"class":35,"line":2255},[33,62774,62775],{"class":72},"            position",[33,62777,996],{"class":47},[33,62779,56983],{"class":72},[33,62781,3567],{"class":47},[33,62783,62784,62786,62788,62791,62793],{"class":35,"line":3992},[33,62785,53705],{"class":72},[33,62787,996],{"class":47},[33,62789,62790],{"class":72},"223",[33,62792,53713],{"class":39},[33,62794,3567],{"class":47},[33,62796,62797,62799,62801,62803,62805,62807],{"class":35,"line":4009},[33,62798,53656],{"class":72},[33,62800,996],{"class":47},[33,62802,2734],{"class":72},[33,62804,53713],{"class":39},[33,62806,53777],{"class":72},[33,62808,3567],{"class":47},[33,62810,62811],{"class":35,"line":4014},[33,62812,4786],{"class":47},[33,62814,62815],{"class":35,"line":4019},[33,62816,100],{"emptyLinePlaceholder":99},[33,62818,62819,62821,62824],{"class":35,"line":4024},[33,62820,62768],{"class":43},[33,62822,62823],{"class":53522}," input",[33,62825,17810],{"class":47},[33,62827,62828,62830,62832,62834,62836],{"class":35,"line":4038},[33,62829,53705],{"class":72},[33,62831,996],{"class":47},[33,62833,62790],{"class":72},[33,62835,53713],{"class":39},[33,62837,3567],{"class":47},[33,62839,62840,62842,62844,62846,62848],{"class":35,"line":4043},[33,62841,53720],{"class":72},[33,62843,996],{"class":47},[33,62845,3024],{"class":72},[33,62847,53713],{"class":39},[33,62849,3567],{"class":47},[33,62851,62852,62854,62856,62858,62860,62862],{"class":35,"line":4834},[33,62853,53667],{"class":72},[33,62855,996],{"class":47},[33,62857,2617],{"class":72},[33,62859,4297],{"class":72},[33,62861,53713],{"class":39},[33,62863,3567],{"class":47},[33,62865,62866,62869,62871,62873,62875],{"class":35,"line":4848},[33,62867,62868],{"class":72},"            font-size",[33,62870,996],{"class":47},[33,62872,2966],{"class":72},[33,62874,53713],{"class":39},[33,62876,3567],{"class":47},[33,62878,62879,62882,62884,62886,62888],{"class":35,"line":4856},[33,62880,62881],{"class":72},"            line-height",[33,62883,996],{"class":47},[33,62885,3024],{"class":72},[33,62887,53713],{"class":39},[33,62889,3567],{"class":47},[33,62891,62892,62895,62897,62899,62901,62903,62906],{"class":35,"line":4861},[33,62893,62894],{"class":72},"            border",[33,62896,996],{"class":47},[33,62898,720],{"class":72},[33,62900,53713],{"class":39},[33,62902,53742],{"class":72},[33,62904,62905],{"class":72}," #e0e0e0",[33,62907,3567],{"class":47},[33,62909,62910,62913,62915,62917],{"class":35,"line":4867},[33,62911,62912],{"class":72},"            outline",[33,62914,996],{"class":47},[33,62916,56956],{"class":72},[33,62918,3567],{"class":47},[33,62920,62921],{"class":35,"line":4873},[33,62922,4786],{"class":47},[33,62924,62925],{"class":35,"line":4878},[33,62926,100],{"emptyLinePlaceholder":99},[33,62928,62929,62931,62934],{"class":35,"line":10194},[33,62930,62768],{"class":43},[33,62932,62933],{"class":43}," .search",[33,62935,17810],{"class":47},[33,62937,62938,62940,62942,62944,62946,62948,62951],{"class":35,"line":10218},[33,62939,62894],{"class":72},[33,62941,996],{"class":47},[33,62943,720],{"class":72},[33,62945,53713],{"class":39},[33,62947,53742],{"class":72},[33,62949,62950],{"class":72}," #ff6700",[33,62952,3567],{"class":47},[33,62954,62955],{"class":35,"line":10223},[33,62956,4786],{"class":47},[33,62958,62959],{"class":35,"line":10229},[33,62960,100],{"emptyLinePlaceholder":99},[33,62962,62963,62966],{"class":35,"line":10256},[33,62964,62965],{"class":43},"        .result-list",[33,62967,17810],{"class":47},[33,62969,62970,62972,62974,62976],{"class":35,"line":10261},[33,62971,53693],{"class":72},[33,62973,996],{"class":47},[33,62975,56956],{"class":72},[33,62977,3567],{"class":47},[33,62979,62980,62982,62984,62986],{"class":35,"line":10267},[33,62981,62775],{"class":72},[33,62983,996],{"class":47},[33,62985,57050],{"class":72},[33,62987,3567],{"class":47},[33,62989,62990,62993,62995,62997],{"class":35,"line":10279},[33,62991,62992],{"class":72},"            left",[33,62994,996],{"class":47},[33,62996,2617],{"class":72},[33,62998,3567],{"class":47},[33,63000,63001,63004,63006,63008,63010],{"class":35,"line":10291},[33,63002,63003],{"class":72},"            top",[33,63005,996],{"class":47},[33,63007,3024],{"class":72},[33,63009,53713],{"class":39},[33,63011,3567],{"class":47},[33,63013,63014,63016,63018,63020,63022],{"class":35,"line":10303},[33,63015,53705],{"class":72},[33,63017,996],{"class":47},[33,63019,62790],{"class":72},[33,63021,53713],{"class":39},[33,63023,3567],{"class":47},[33,63025,63026,63028,63030,63032,63034,63036,63038],{"class":35,"line":11961},[33,63027,62894],{"class":72},[33,63029,996],{"class":47},[33,63031,720],{"class":72},[33,63033,53713],{"class":39},[33,63035,53742],{"class":72},[33,63037,62950],{"class":72},[33,63039,3567],{"class":47},[33,63041,63042,63045,63047,63049],{"class":35,"line":11986},[33,63043,63044],{"class":72},"            border-top",[33,63046,996],{"class":47},[33,63048,2617],{"class":72},[33,63050,3567],{"class":47},[33,63052,63053,63056,63058,63061],{"class":35,"line":12009},[33,63054,63055],{"class":72},"            background",[33,63057,996],{"class":47},[33,63059,63060],{"class":72},"#fff",[33,63062,3567],{"class":47},[33,63064,63065],{"class":35,"line":12033},[33,63066,4786],{"class":47},[33,63068,63069],{"class":35,"line":12038},[33,63070,100],{"emptyLinePlaceholder":99},[33,63072,63073,63075,63077],{"class":35,"line":12043},[33,63074,62965],{"class":43},[33,63076,3672],{"class":53522},[33,63078,17810],{"class":47},[33,63080,63081,63083,63085,63088],{"class":35,"line":12048},[33,63082,53693],{"class":72},[33,63084,996],{"class":47},[33,63086,63087],{"class":72},"block",[33,63089,3567],{"class":47},[33,63091,63092,63094,63096,63098,63100,63103,63105],{"class":35,"line":12057},[33,63093,53667],{"class":72},[33,63095,996],{"class":47},[33,63097,2765],{"class":72},[33,63099,53713],{"class":39},[33,63101,63102],{"class":72}," 15",[33,63104,53713],{"class":39},[33,63106,3567],{"class":47},[33,63108,63109,63111,63113,63115,63117],{"class":35,"line":12062},[33,63110,62868],{"class":72},[33,63112,996],{"class":47},[33,63114,2915],{"class":72},[33,63116,53713],{"class":39},[33,63118,3567],{"class":47},[33,63120,63121,63124,63126,63129],{"class":35,"line":12068},[33,63122,63123],{"class":72},"            color",[33,63125,996],{"class":47},[33,63127,63128],{"class":72},"#424242",[33,63130,3567],{"class":47},[33,63132,63133,63136,63138,63140],{"class":35,"line":12089},[33,63134,63135],{"class":72},"            text-decoration",[33,63137,996],{"class":47},[33,63139,56956],{"class":72},[33,63141,3567],{"class":47},[33,63143,63144],{"class":35,"line":12095},[33,63145,4786],{"class":47},[33,63147,63148],{"class":35,"line":12109},[33,63149,100],{"emptyLinePlaceholder":99},[33,63151,63152,63154,63156,63159],{"class":35,"line":12115},[33,63153,62965],{"class":43},[33,63155,3672],{"class":53522},[33,63157,63158],{"class":43},":hover",[33,63160,17810],{"class":47},[33,63162,63163,63165,63167,63170],{"class":35,"line":12142},[33,63164,53861],{"class":72},[33,63166,996],{"class":47},[33,63168,63169],{"class":72},"#eee",[33,63171,3567],{"class":47},[33,63173,63174],{"class":35,"line":12151},[33,63175,4786],{"class":47},[33,63177,63178,63180,63182],{"class":35,"line":12157},[33,63179,53997],{"class":47},[33,63181,2331],{"class":53522},[33,63183,53529],{"class":47},[33,63185,63186],{"class":35,"line":12165},[33,63187,100],{"emptyLinePlaceholder":99},[33,63189,63190,63192,63194],{"class":35,"line":12170},[33,63191,54006],{"class":47},[33,63193,53556],{"class":53522},[33,63195,53529],{"class":47},[33,63197,63198],{"class":35,"line":18842},[33,63199,100],{"emptyLinePlaceholder":99},[33,63201,63202,63204,63206],{"class":35,"line":18848},[33,63203,2226],{"class":47},[33,63205,54021],{"class":53522},[33,63207,53529],{"class":47},[33,63209,63210,63212,63214,63216,63218,63221],{"class":35,"line":18871},[33,63211,53563],{"class":47},[33,63213,53832],{"class":53522},[33,63215,55705],{"class":43},[33,63217,57],{"class":47},[33,63219,63220],{"class":60},"\"mi\"",[33,63222,53529],{"class":47},[33,63224,63225,63227,63229,63231,63233,63236,63239,63241,63244],{"class":35,"line":18877},[33,63226,57521],{"class":47},[33,63228,56040],{"class":53522},[33,63230,56043],{"class":43},[33,63232,57],{"class":47},[33,63234,63235],{"class":60},"\"search\"",[33,63237,63238],{"class":43}," placeholder",[33,63240,57],{"class":47},[33,63242,63243],{"class":60},"\"小米笔记本\"",[33,63245,53529],{"class":47},[33,63247,63248,63250,63252,63254,63256,63259],{"class":35,"line":18900},[33,63249,57521],{"class":47},[33,63251,3413],{"class":53522},[33,63253,55705],{"class":43},[33,63255,57],{"class":47},[33,63257,63258],{"class":60},"\"result-list\"",[33,63260,53529],{"class":47},[33,63262,63263,63266,63268,63271,63273,63276,63278,63281,63284,63286,63288,63290],{"class":35,"line":18914},[33,63264,63265],{"class":47},"            \u003C",[33,63267,331],{"class":53522},[33,63269,63270],{"class":47},">\u003C",[33,63272,2663],{"class":53522},[33,63274,63275],{"class":43}," href",[33,63277,57],{"class":47},[33,63279,63280],{"class":60},"\"#\"",[33,63282,63283],{"class":47},">全部商品\u003C\u002F",[33,63285,2663],{"class":53522},[33,63287,57533],{"class":47},[33,63289,331],{"class":53522},[33,63291,53529],{"class":47},[33,63293,63294,63296,63298,63300,63302,63304,63306,63308,63311,63313,63315,63317],{"class":35,"line":18934},[33,63295,63265],{"class":47},[33,63297,331],{"class":53522},[33,63299,63270],{"class":47},[33,63301,2663],{"class":53522},[33,63303,63275],{"class":43},[33,63305,57],{"class":47},[33,63307,63280],{"class":60},[33,63309,63310],{"class":47},">小米11\u003C\u002F",[33,63312,2663],{"class":53522},[33,63314,57533],{"class":47},[33,63316,331],{"class":53522},[33,63318,53529],{"class":47},[33,63320,63321,63323,63325,63327,63329,63331,63333,63335,63338,63340,63342,63344],{"class":35,"line":18940},[33,63322,63265],{"class":47},[33,63324,331],{"class":53522},[33,63326,63270],{"class":47},[33,63328,2663],{"class":53522},[33,63330,63275],{"class":43},[33,63332,57],{"class":47},[33,63334,63280],{"class":60},[33,63336,63337],{"class":47},">小米10S\u003C\u002F",[33,63339,2663],{"class":53522},[33,63341,57533],{"class":47},[33,63343,331],{"class":53522},[33,63345,53529],{"class":47},[33,63347,63348,63350,63352,63354,63356,63358,63360,63362,63365,63367,63369,63371],{"class":35,"line":18951},[33,63349,63265],{"class":47},[33,63351,331],{"class":53522},[33,63353,63270],{"class":47},[33,63355,2663],{"class":53522},[33,63357,63275],{"class":43},[33,63359,57],{"class":47},[33,63361,63280],{"class":60},[33,63363,63364],{"class":47},">小米笔记本\u003C\u002F",[33,63366,2663],{"class":53522},[33,63368,57533],{"class":47},[33,63370,331],{"class":53522},[33,63372,53529],{"class":47},[33,63374,63375,63377,63379,63381,63383,63385,63387,63389,63392,63394,63396,63398],{"class":35,"line":18974},[33,63376,63265],{"class":47},[33,63378,331],{"class":53522},[33,63380,63270],{"class":47},[33,63382,2663],{"class":53522},[33,63384,63275],{"class":43},[33,63386,57],{"class":47},[33,63388,63280],{"class":60},[33,63390,63391],{"class":47},">小米手机\u003C\u002F",[33,63393,2663],{"class":53522},[33,63395,57533],{"class":47},[33,63397,331],{"class":53522},[33,63399,53529],{"class":47},[33,63401,63402,63404,63406,63408,63410,63412,63414,63416,63419,63421,63423,63425],{"class":35,"line":18996},[33,63403,63265],{"class":47},[33,63405,331],{"class":53522},[33,63407,63270],{"class":47},[33,63409,2663],{"class":53522},[33,63411,63275],{"class":43},[33,63413,57],{"class":47},[33,63415,63280],{"class":60},[33,63417,63418],{"class":47},">黑鲨4\u003C\u002F",[33,63420,2663],{"class":53522},[33,63422,57533],{"class":47},[33,63424,331],{"class":53522},[33,63426,53529],{"class":47},[33,63428,63429,63431,63433,63435,63437,63439,63441,63443,63446,63448,63450,63452],{"class":35,"line":19001},[33,63430,63265],{"class":47},[33,63432,331],{"class":53522},[33,63434,63270],{"class":47},[33,63436,2663],{"class":53522},[33,63438,63275],{"class":43},[33,63440,57],{"class":47},[33,63442,63280],{"class":60},[33,63444,63445],{"class":47},">空调\u003C\u002F",[33,63447,2663],{"class":53522},[33,63449,57533],{"class":47},[33,63451,331],{"class":53522},[33,63453,53529],{"class":47},[33,63455,63456,63459,63461],{"class":35,"line":19007},[33,63457,63458],{"class":47},"        \u003C\u002F",[33,63460,3413],{"class":53522},[33,63462,53529],{"class":47},[33,63464,63465,63467,63469],{"class":35,"line":19021},[33,63466,53997],{"class":47},[33,63468,53832],{"class":53522},[33,63470,53529],{"class":47},[33,63472,63473,63475,63477],{"class":35,"line":19034},[33,63474,53563],{"class":47},[33,63476,54034],{"class":53522},[33,63478,53529],{"class":47},[33,63480,63481],{"class":35,"line":19039},[33,63482,63483],{"class":2487},"        \u002F\u002F 1. 获取元素\n",[33,63485,63486,63489,63491,63493,63495,63497,63499,63502],{"class":35,"line":19053},[33,63487,63488],{"class":39},"        const",[33,63490,62823],{"class":72},[33,63492,15804],{"class":39},[33,63494,56615],{"class":47},[33,63496,56618],{"class":43},[33,63498,133],{"class":47},[33,63500,63501],{"class":60},"'[type=search]'",[33,63503,226],{"class":47},[33,63505,63506,63508,63511,63513,63515,63517,63519,63522],{"class":35,"line":19058},[33,63507,63488],{"class":39},[33,63509,63510],{"class":72}," ul",[33,63512,15804],{"class":39},[33,63514,56615],{"class":47},[33,63516,56618],{"class":43},[33,63518,133],{"class":47},[33,63520,63521],{"class":60},"'.result-list'",[33,63523,226],{"class":47},[33,63525,63526],{"class":35,"line":19064},[33,63527,63528],{"class":2487},"        \u002F\u002F console.log(input)\n",[33,63530,63531],{"class":35,"line":19069},[33,63532,63533],{"class":2487},"        \u002F\u002F 2. 监听事件 获得焦点\n",[33,63535,63536,63539,63541,63543,63546,63548,63550],{"class":35,"line":19083},[33,63537,63538],{"class":47},"        input.",[33,63540,60031],{"class":43},[33,63542,133],{"class":47},[33,63544,63545],{"class":60},"'focus'",[33,63547,245],{"class":47},[33,63549,56668],{"class":39},[33,63551,56671],{"class":47},[33,63553,63554],{"class":35,"line":19088},[33,63555,63556],{"class":2487},"            \u002F\u002F ul显示\n",[33,63558,63559,63562,63564],{"class":35,"line":19093},[33,63560,63561],{"class":47},"            ul.style.display ",[33,63563,57],{"class":39},[33,63565,63566],{"class":60}," 'block'\n",[33,63568,63569],{"class":35,"line":19107},[33,63570,63571],{"class":2487},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[33,63573,63574,63577,63579,63581,63584],{"class":35,"line":19119},[33,63575,63576],{"class":47},"            input.classList.",[33,63578,7581],{"class":43},[33,63580,133],{"class":47},[33,63582,63583],{"class":60},"'search'",[33,63585,226],{"class":47},[33,63587,63588],{"class":35,"line":19124},[33,63589,63590],{"class":47},"        })\n",[33,63592,63593],{"class":35,"line":19137},[33,63594,63595],{"class":2487},"        \u002F\u002F 3. 监听事件 失去焦点\n",[33,63597,63598,63600,63602,63604,63607,63609,63611],{"class":35,"line":19142},[33,63599,63538],{"class":47},[33,63601,60031],{"class":43},[33,63603,133],{"class":47},[33,63605,63606],{"class":60},"'blur'",[33,63608,245],{"class":47},[33,63610,56668],{"class":39},[33,63612,56671],{"class":47},[33,63614,63615,63617,63619],{"class":35,"line":19147},[33,63616,63561],{"class":47},[33,63618,57],{"class":39},[33,63620,63621],{"class":60}," 'none'\n",[33,63623,63624,63626,63628,63630,63632],{"class":35,"line":19152},[33,63625,63576],{"class":47},[33,63627,59224],{"class":43},[33,63629,133],{"class":47},[33,63631,63583],{"class":60},[33,63633,226],{"class":47},[33,63635,63636],{"class":35,"line":19165},[33,63637,63590],{"class":47},[33,63639,63640,63642,63644],{"class":35,"line":19170},[33,63641,53997],{"class":47},[33,63643,54034],{"class":53522},[33,63645,53529],{"class":47},[33,63647,63648,63650,63652],{"class":35,"line":34859},[33,63649,54006],{"class":47},[33,63651,54021],{"class":53522},[33,63653,53529],{"class":47},[33,63655,63656],{"class":35,"line":34865},[33,63657,100],{"emptyLinePlaceholder":99},[33,63659,63660,63662,63664],{"class":35,"line":34871},[33,63661,54006],{"class":47},[33,63663,52857],{"class":53522},[33,63665,53529],{"class":47},[24236,63667,63669],{"id":63668},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63671,63672],{},"评论字数统计案例",[19,63674,63675],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63677,63678],{},"牢记focus伪类选择器",[53566,63680],{"charSet":63681},"UTF-8",[53566,63683],{"name":63684,"content":63685},"viewport","width=device-width, initial-scale=1.0",[53629,63687,63688],{},"Document",[2331,63690,63691],{},"\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",[56040,63693],{"type":7436},[3413,63695,63696,63699],{},[331,63697,63698],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[331,63700,63701],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[23,63703,63705],{"className":52855,"code":63704,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,63706,63707,63717,63731,63735,63743,63757,63777,63797,63810,63818,63825,63838,63852,63862,63872,63876,63880,63887,63899,63911,63923,63935,63964,63977,63981,63985,63994,64005,64017,64028,64039,64051,64062,64074,64090,64102,64106,64110,64121,64132,64142,64154,64158,64162,64170,64181,64191,64202,64214,64227,64239,64251,64255,64259,64268,64280,64291,64304,64315,64329,64333,64337,64344,64356,64368,64378,64382,64386,64395,64407,64417,64421,64425,64436,64446,64465,64478,64482,64486,64496,64506,64510,64514,64525,64536,64548,64560,64564,64568,64579,64590,64604,64608,64612,64623,64633,64645,64649,64657,64665,64669,64677,64692,64711,64751,64764,64772,64786,64806,64814,64829,64852,64870,64885,64904,64924,64944,64952,64960,64968,64976,64996,65016,65021,65038,65047,65051,65056,65072,65080,65084,65089,65106,65111,65136,65140,65144,65149,65154,65162,65170,65174],{"__ignoreMap":28},[33,63708,63709,63711,63713,63715],{"class":35,"line":36},[33,63710,53519],{"class":47},[33,63712,53523],{"class":53522},[33,63714,53526],{"class":43},[33,63716,53529],{"class":47},[33,63718,63719,63721,63723,63725,63727,63729],{"class":35,"line":51},[33,63720,2226],{"class":47},[33,63722,52857],{"class":53522},[33,63724,53538],{"class":43},[33,63726,57],{"class":47},[33,63728,53543],{"class":60},[33,63730,53529],{"class":47},[33,63732,63733],{"class":35,"line":64},[33,63734,100],{"emptyLinePlaceholder":99},[33,63736,63737,63739,63741],{"class":35,"line":76},[33,63738,2226],{"class":47},[33,63740,53556],{"class":53522},[33,63742,53529],{"class":47},[33,63744,63745,63747,63749,63751,63753,63755],{"class":35,"line":87},[33,63746,54364],{"class":47},[33,63748,53566],{"class":53522},[33,63750,53569],{"class":43},[33,63752,57],{"class":47},[33,63754,53574],{"class":60},[33,63756,53529],{"class":47},[33,63758,63759,63761,63763,63765,63767,63769,63771,63773,63775],{"class":35,"line":96},[33,63760,54364],{"class":47},[33,63762,53566],{"class":53522},[33,63764,53585],{"class":43},[33,63766,57],{"class":47},[33,63768,53590],{"class":60},[33,63770,53593],{"class":43},[33,63772,57],{"class":47},[33,63774,53598],{"class":60},[33,63776,53529],{"class":47},[33,63778,63779,63781,63783,63785,63787,63789,63791,63793,63795],{"class":35,"line":103},[33,63780,54364],{"class":47},[33,63782,53566],{"class":53522},[33,63784,17158],{"class":43},[33,63786,57],{"class":47},[33,63788,53613],{"class":60},[33,63790,53593],{"class":43},[33,63792,57],{"class":47},[33,63794,53620],{"class":60},[33,63796,53529],{"class":47},[33,63798,63799,63801,63803,63806,63808],{"class":35,"line":108},[33,63800,54364],{"class":47},[33,63802,53629],{"class":53522},[33,63804,63805],{"class":47},">评论回车发布\u003C\u002F",[33,63807,53629],{"class":53522},[33,63809,53529],{"class":47},[33,63811,63812,63814,63816],{"class":35,"line":119},[33,63813,54364],{"class":47},[33,63815,2331],{"class":53522},[33,63817,53529],{"class":47},[33,63819,63820,63823],{"class":35,"line":128},[33,63821,63822],{"class":43},"    .wrapper",[33,63824,17810],{"class":47},[33,63826,63827,63830,63832,63834,63836],{"class":35,"line":1753},[33,63828,63829],{"class":72},"      min-width",[33,63831,996],{"class":47},[33,63833,6241],{"class":72},[33,63835,53713],{"class":39},[33,63837,3567],{"class":47},[33,63839,63840,63843,63845,63848,63850],{"class":35,"line":1763},[33,63841,63842],{"class":72},"      max-width",[33,63844,996],{"class":47},[33,63846,63847],{"class":72},"800",[33,63849,53713],{"class":39},[33,63851,3567],{"class":47},[33,63853,63854,63856,63858,63860],{"class":35,"line":1775},[33,63855,57228],{"class":72},[33,63857,996],{"class":47},[33,63859,53698],{"class":72},[33,63861,3567],{"class":47},[33,63863,63864,63866,63868,63870],{"class":35,"line":1780},[33,63865,57239],{"class":72},[33,63867,996],{"class":47},[33,63869,53801],{"class":72},[33,63871,3567],{"class":47},[33,63873,63874],{"class":35,"line":1785},[33,63875,4446],{"class":47},[33,63877,63878],{"class":35,"line":1940},[33,63879,100],{"emptyLinePlaceholder":99},[33,63881,63882,63885],{"class":35,"line":2183},[33,63883,63884],{"class":43},"    .avatar",[33,63886,17810],{"class":47},[33,63888,63889,63891,63893,63895,63897],{"class":35,"line":2208},[33,63890,56990],{"class":72},[33,63892,996],{"class":47},[33,63894,3024],{"class":72},[33,63896,53713],{"class":39},[33,63898,3567],{"class":47},[33,63900,63901,63903,63905,63907,63909],{"class":35,"line":2234},[33,63902,57004],{"class":72},[33,63904,996],{"class":47},[33,63906,3024],{"class":72},[33,63908,53713],{"class":39},[33,63910,3567],{"class":47},[33,63912,63913,63915,63917,63919,63921],{"class":35,"line":2239},[33,63914,57353],{"class":72},[33,63916,996],{"class":47},[33,63918,3071],{"class":72},[33,63920,1429],{"class":39},[33,63922,3567],{"class":47},[33,63924,63925,63928,63930,63933],{"class":35,"line":2247},[33,63926,63927],{"class":72},"      overflow",[33,63929,996],{"class":47},[33,63931,63932],{"class":72},"hidden",[33,63934,3567],{"class":47},[33,63936,63937,63940,63942,63945,63947,63950,63952,63955,63957,63959,63962],{"class":35,"line":2255},[33,63938,63939],{"class":72},"      background",[33,63941,996],{"class":47},[33,63943,63944],{"class":72},"url",[33,63946,133],{"class":47},[33,63948,63949],{"class":289},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[33,63951,15954],{"class":47},[33,63953,63954],{"class":72},"no-repeat",[33,63956,19382],{"class":72},[33,63958,27217],{"class":47},[33,63960,63961],{"class":72},"cover",[33,63963,3567],{"class":47},[33,63965,63966,63969,63971,63973,63975],{"class":35,"line":3992},[33,63967,63968],{"class":72},"      margin-right",[33,63970,996],{"class":47},[33,63972,1284],{"class":72},[33,63974,53713],{"class":39},[33,63976,3567],{"class":47},[33,63978,63979],{"class":35,"line":4009},[33,63980,4446],{"class":47},[33,63982,63983],{"class":35,"line":4014},[33,63984,100],{"emptyLinePlaceholder":99},[33,63986,63987,63989,63992],{"class":35,"line":4019},[33,63988,63822],{"class":43},[33,63990,63991],{"class":53522}," textarea",[33,63993,17810],{"class":47},[33,63995,63996,63999,64001,64003],{"class":35,"line":4024},[33,63997,63998],{"class":72},"      outline",[33,64000,996],{"class":47},[33,64002,56956],{"class":72},[33,64004,3567],{"class":47},[33,64006,64007,64010,64012,64015],{"class":35,"line":4038},[33,64008,64009],{"class":72},"      border-color",[33,64011,996],{"class":47},[33,64013,64014],{"class":72},"transparent",[33,64016,3567],{"class":47},[33,64018,64019,64022,64024,64026],{"class":35,"line":4043},[33,64020,64021],{"class":72},"      resize",[33,64023,996],{"class":47},[33,64025,56956],{"class":72},[33,64027,3567],{"class":47},[33,64029,64030,64032,64034,64037],{"class":35,"line":4834},[33,64031,63939],{"class":72},[33,64033,996],{"class":47},[33,64035,64036],{"class":72},"#f5f5f5",[33,64038,3567],{"class":47},[33,64040,64041,64043,64045,64047,64049],{"class":35,"line":4848},[33,64042,57353],{"class":72},[33,64044,996],{"class":47},[33,64046,753],{"class":72},[33,64048,53713],{"class":39},[33,64050,3567],{"class":47},[33,64052,64053,64056,64058,64060],{"class":35,"line":4856},[33,64054,64055],{"class":72},"      flex",[33,64057,996],{"class":47},[33,64059,720],{"class":72},[33,64061,3567],{"class":47},[33,64063,64064,64066,64068,64070,64072],{"class":35,"line":4861},[33,64065,56914],{"class":72},[33,64067,996],{"class":47},[33,64069,1279],{"class":72},[33,64071,53713],{"class":39},[33,64073,3567],{"class":47},[33,64075,64076,64079,64081,64083,64086,64088],{"class":35,"line":4867},[33,64077,64078],{"class":72},"      transition",[33,64080,996],{"class":47},[33,64082,30358],{"class":72},[33,64084,64085],{"class":72}," 0.5",[33,64087,3109],{"class":39},[33,64089,3567],{"class":47},[33,64091,64092,64094,64096,64098,64100],{"class":35,"line":4873},[33,64093,57004],{"class":72},[33,64095,996],{"class":47},[33,64097,3358],{"class":72},[33,64099,53713],{"class":39},[33,64101,3567],{"class":47},[33,64103,64104],{"class":35,"line":4878},[33,64105,4446],{"class":47},[33,64107,64108],{"class":35,"line":10194},[33,64109,100],{"emptyLinePlaceholder":99},[33,64111,64112,64114,64116,64119],{"class":35,"line":10218},[33,64113,63822],{"class":43},[33,64115,63991],{"class":53522},[33,64117,64118],{"class":43},":focus",[33,64120,17810],{"class":47},[33,64122,64123,64125,64127,64130],{"class":35,"line":10223},[33,64124,64009],{"class":72},[33,64126,996],{"class":47},[33,64128,64129],{"class":72},"#e4e4e4",[33,64131,3567],{"class":47},[33,64133,64134,64136,64138,64140],{"class":35,"line":10229},[33,64135,63939],{"class":72},[33,64137,996],{"class":47},[33,64139,63060],{"class":72},[33,64141,3567],{"class":47},[33,64143,64144,64146,64148,64150,64152],{"class":35,"line":10256},[33,64145,57004],{"class":72},[33,64147,996],{"class":47},[33,64149,3071],{"class":72},[33,64151,53713],{"class":39},[33,64153,3567],{"class":47},[33,64155,64156],{"class":35,"line":10261},[33,64157,4446],{"class":47},[33,64159,64160],{"class":35,"line":10267},[33,64161,100],{"emptyLinePlaceholder":99},[33,64163,64164,64166,64168],{"class":35,"line":10279},[33,64165,63822],{"class":43},[33,64167,59685],{"class":53522},[33,64169,17810],{"class":47},[33,64171,64172,64174,64176,64179],{"class":35,"line":10291},[33,64173,63939],{"class":72},[33,64175,996],{"class":47},[33,64177,64178],{"class":72},"#00aeec",[33,64180,3567],{"class":47},[33,64182,64183,64185,64187,64189],{"class":35,"line":10303},[33,64184,59634],{"class":72},[33,64186,996],{"class":47},[33,64188,63060],{"class":72},[33,64190,3567],{"class":47},[33,64192,64193,64196,64198,64200],{"class":35,"line":11961},[33,64194,64195],{"class":72},"      border",[33,64197,996],{"class":47},[33,64199,56956],{"class":72},[33,64201,3567],{"class":47},[33,64203,64204,64206,64208,64210,64212],{"class":35,"line":11986},[33,64205,57353],{"class":72},[33,64207,996],{"class":47},[33,64209,753],{"class":72},[33,64211,53713],{"class":39},[33,64213,3567],{"class":47},[33,64215,64216,64219,64221,64223,64225],{"class":35,"line":12009},[33,64217,64218],{"class":72},"      margin-left",[33,64220,996],{"class":47},[33,64222,1279],{"class":72},[33,64224,53713],{"class":39},[33,64226,3567],{"class":47},[33,64228,64229,64231,64233,64235,64237],{"class":35,"line":12033},[33,64230,56990],{"class":72},[33,64232,996],{"class":47},[33,64234,2777],{"class":72},[33,64236,53713],{"class":39},[33,64238,3567],{"class":47},[33,64240,64241,64244,64246,64249],{"class":35,"line":12038},[33,64242,64243],{"class":72},"      cursor",[33,64245,996],{"class":47},[33,64247,64248],{"class":72},"pointer",[33,64250,3567],{"class":47},[33,64252,64253],{"class":35,"line":12043},[33,64254,4446],{"class":47},[33,64256,64257],{"class":35,"line":12048},[33,64258,100],{"emptyLinePlaceholder":99},[33,64260,64261,64263,64266],{"class":35,"line":12057},[33,64262,63822],{"class":43},[33,64264,64265],{"class":43}," .total",[33,64267,17810],{"class":47},[33,64269,64270,64272,64274,64276,64278],{"class":35,"line":12062},[33,64271,63968],{"class":72},[33,64273,996],{"class":47},[33,64275,3029],{"class":72},[33,64277,53713],{"class":39},[33,64279,3567],{"class":47},[33,64281,64282,64284,64286,64289],{"class":35,"line":12068},[33,64283,59634],{"class":72},[33,64285,996],{"class":47},[33,64287,64288],{"class":72},"#999",[33,64290,3567],{"class":47},[33,64292,64293,64296,64298,64300,64302],{"class":35,"line":12089},[33,64294,64295],{"class":72},"      margin-top",[33,64297,996],{"class":47},[33,64299,758],{"class":72},[33,64301,53713],{"class":39},[33,64303,3567],{"class":47},[33,64305,64306,64309,64311,64313],{"class":35,"line":12095},[33,64307,64308],{"class":72},"      opacity",[33,64310,996],{"class":47},[33,64312,2617],{"class":72},[33,64314,3567],{"class":47},[33,64316,64317,64319,64321,64323,64325,64327],{"class":35,"line":12109},[33,64318,64078],{"class":72},[33,64320,996],{"class":47},[33,64322,30358],{"class":72},[33,64324,64085],{"class":72},[33,64326,3109],{"class":39},[33,64328,3567],{"class":47},[33,64330,64331],{"class":35,"line":12115},[33,64332,4446],{"class":47},[33,64334,64335],{"class":35,"line":12142},[33,64336,100],{"emptyLinePlaceholder":99},[33,64338,64339,64342],{"class":35,"line":12151},[33,64340,64341],{"class":43},"    .list",[33,64343,17810],{"class":47},[33,64345,64346,64348,64350,64352,64354],{"class":35,"line":12157},[33,64347,63829],{"class":72},[33,64349,996],{"class":47},[33,64351,6241],{"class":72},[33,64353,53713],{"class":39},[33,64355,3567],{"class":47},[33,64357,64358,64360,64362,64364,64366],{"class":35,"line":12165},[33,64359,63842],{"class":72},[33,64361,996],{"class":47},[33,64363,63847],{"class":72},[33,64365,53713],{"class":39},[33,64367,3567],{"class":47},[33,64369,64370,64372,64374,64376],{"class":35,"line":12170},[33,64371,57228],{"class":72},[33,64373,996],{"class":47},[33,64375,53698],{"class":72},[33,64377,3567],{"class":47},[33,64379,64380],{"class":35,"line":18842},[33,64381,4446],{"class":47},[33,64383,64384],{"class":35,"line":18848},[33,64385,100],{"emptyLinePlaceholder":99},[33,64387,64388,64390,64393],{"class":35,"line":18871},[33,64389,64341],{"class":43},[33,64391,64392],{"class":43}," .item",[33,64394,17810],{"class":47},[33,64396,64397,64399,64401,64403,64405],{"class":35,"line":18877},[33,64398,56990],{"class":72},[33,64400,996],{"class":47},[33,64402,2734],{"class":72},[33,64404,1429],{"class":39},[33,64406,3567],{"class":47},[33,64408,64409,64411,64413,64415],{"class":35,"line":18900},[33,64410,57228],{"class":72},[33,64412,996],{"class":47},[33,64414,53698],{"class":72},[33,64416,3567],{"class":47},[33,64418,64419],{"class":35,"line":18914},[33,64420,4446],{"class":47},[33,64422,64423],{"class":35,"line":18934},[33,64424,100],{"emptyLinePlaceholder":99},[33,64426,64427,64429,64431,64434],{"class":35,"line":18940},[33,64428,64341],{"class":43},[33,64430,64392],{"class":43},[33,64432,64433],{"class":43}," .info",[33,64435,17810],{"class":47},[33,64437,64438,64440,64442,64444],{"class":35,"line":18951},[33,64439,64055],{"class":72},[33,64441,996],{"class":47},[33,64443,720],{"class":72},[33,64445,3567],{"class":47},[33,64447,64448,64451,64453,64455,64457,64460,64463],{"class":35,"line":18974},[33,64449,64450],{"class":72},"      border-bottom",[33,64452,996],{"class":47},[33,64454,720],{"class":72},[33,64456,53713],{"class":39},[33,64458,64459],{"class":72}," dashed",[33,64461,64462],{"class":72}," #e4e4e4",[33,64464,3567],{"class":47},[33,64466,64467,64470,64472,64474,64476],{"class":35,"line":18996},[33,64468,64469],{"class":72},"      padding-bottom",[33,64471,996],{"class":47},[33,64473,1279],{"class":72},[33,64475,53713],{"class":39},[33,64477,3567],{"class":47},[33,64479,64480],{"class":35,"line":19001},[33,64481,4446],{"class":47},[33,64483,64484],{"class":35,"line":19007},[33,64485,100],{"emptyLinePlaceholder":99},[33,64487,64488,64490,64492,64494],{"class":35,"line":19021},[33,64489,64341],{"class":43},[33,64491,64392],{"class":43},[33,64493,9071],{"class":53522},[33,64495,17810],{"class":47},[33,64497,64498,64500,64502,64504],{"class":35,"line":19034},[33,64499,56925],{"class":72},[33,64501,996],{"class":47},[33,64503,2617],{"class":72},[33,64505,3567],{"class":47},[33,64507,64508],{"class":35,"line":19039},[33,64509,4446],{"class":47},[33,64511,64512],{"class":35,"line":19053},[33,64513,100],{"emptyLinePlaceholder":99},[33,64515,64516,64518,64520,64523],{"class":35,"line":19058},[33,64517,64341],{"class":43},[33,64519,64392],{"class":43},[33,64521,64522],{"class":43}," .name",[33,64524,17810],{"class":47},[33,64526,64527,64529,64531,64534],{"class":35,"line":19064},[33,64528,59634],{"class":72},[33,64530,996],{"class":47},[33,64532,64533],{"class":72},"#FB7299",[33,64535,3567],{"class":47},[33,64537,64538,64540,64542,64544,64546],{"class":35,"line":19069},[33,64539,57141],{"class":72},[33,64541,996],{"class":47},[33,64543,2966],{"class":72},[33,64545,53713],{"class":39},[33,64547,3567],{"class":47},[33,64549,64550,64553,64555,64558],{"class":35,"line":19083},[33,64551,64552],{"class":72},"      font-weight",[33,64554,996],{"class":47},[33,64556,64557],{"class":72},"bold",[33,64559,3567],{"class":47},[33,64561,64562],{"class":35,"line":19088},[33,64563,4446],{"class":47},[33,64565,64566],{"class":35,"line":19093},[33,64567,100],{"emptyLinePlaceholder":99},[33,64569,64570,64572,64574,64577],{"class":35,"line":19107},[33,64571,64341],{"class":43},[33,64573,64392],{"class":43},[33,64575,64576],{"class":43}," .text",[33,64578,17810],{"class":47},[33,64580,64581,64583,64585,64588],{"class":35,"line":19119},[33,64582,59634],{"class":72},[33,64584,996],{"class":47},[33,64586,64587],{"class":72},"#333",[33,64589,3567],{"class":47},[33,64591,64592,64594,64596,64598,64600,64602],{"class":35,"line":19124},[33,64593,56914],{"class":72},[33,64595,996],{"class":47},[33,64597,1279],{"class":72},[33,64599,53713],{"class":39},[33,64601,1437],{"class":72},[33,64603,3567],{"class":47},[33,64605,64606],{"class":35,"line":19137},[33,64607,4446],{"class":47},[33,64609,64610],{"class":35,"line":19142},[33,64611,100],{"emptyLinePlaceholder":99},[33,64613,64614,64616,64618,64621],{"class":35,"line":19147},[33,64615,64341],{"class":43},[33,64617,64392],{"class":43},[33,64619,64620],{"class":43}," .time",[33,64622,17810],{"class":47},[33,64624,64625,64627,64629,64631],{"class":35,"line":19152},[33,64626,59634],{"class":72},[33,64628,996],{"class":47},[33,64630,64288],{"class":72},[33,64632,3567],{"class":47},[33,64634,64635,64637,64639,64641,64643],{"class":35,"line":19165},[33,64636,57141],{"class":72},[33,64638,996],{"class":47},[33,64640,2915],{"class":72},[33,64642,53713],{"class":39},[33,64644,3567],{"class":47},[33,64646,64647],{"class":35,"line":19170},[33,64648,4446],{"class":47},[33,64650,64651,64653,64655],{"class":35,"line":34859},[33,64652,54636],{"class":47},[33,64654,2331],{"class":53522},[33,64656,53529],{"class":47},[33,64658,64659,64661,64663],{"class":35,"line":34865},[33,64660,54006],{"class":47},[33,64662,53556],{"class":53522},[33,64664,53529],{"class":47},[33,64666,64667],{"class":35,"line":34871},[33,64668,100],{"emptyLinePlaceholder":99},[33,64670,64671,64673,64675],{"class":35,"line":34877},[33,64672,2226],{"class":47},[33,64674,54021],{"class":53522},[33,64676,53529],{"class":47},[33,64678,64679,64681,64683,64685,64687,64690],{"class":35,"line":34883},[33,64680,54364],{"class":47},[33,64682,53832],{"class":53522},[33,64684,55705],{"class":43},[33,64686,57],{"class":47},[33,64688,64689],{"class":60},"\"wrapper\"",[33,64691,53529],{"class":47},[33,64693,64694,64696,64698,64700,64702,64705,64707,64709],{"class":35,"line":34894},[33,64695,53563],{"class":47},[33,64697,2861],{"class":53522},[33,64699,55705],{"class":43},[33,64701,57],{"class":47},[33,64703,64704],{"class":60},"\"avatar\"",[33,64706,57533],{"class":47},[33,64708,2861],{"class":53522},[33,64710,53529],{"class":47},[33,64712,64713,64715,64717,64719,64721,64724,64726,64728,64731,64733,64735,64737,64740,64742,64745,64747,64749],{"class":35,"line":34900},[33,64714,53563],{"class":47},[33,64716,56507],{"class":53522},[33,64718,17197],{"class":43},[33,64720,57],{"class":47},[33,64722,64723],{"class":60},"\"tx\"",[33,64725,63238],{"class":43},[33,64727,57],{"class":47},[33,64729,64730],{"class":60},"\"发一条友善的评论\"",[33,64732,56530],{"class":43},[33,64734,57],{"class":47},[33,64736,5956],{"class":60},[33,64738,64739],{"class":43}," maxlength",[33,64741,57],{"class":47},[33,64743,64744],{"class":60},"\"200\"",[33,64746,57533],{"class":47},[33,64748,56507],{"class":53522},[33,64750,53529],{"class":47},[33,64752,64753,64755,64757,64760,64762],{"class":35,"line":34920},[33,64754,53563],{"class":47},[33,64756,56106],{"class":53522},[33,64758,64759],{"class":47},">发布\u003C\u002F",[33,64761,56106],{"class":53522},[33,64763,53529],{"class":47},[33,64765,64766,64768,64770],{"class":35,"line":34926},[33,64767,54636],{"class":47},[33,64769,53832],{"class":53522},[33,64771,53529],{"class":47},[33,64773,64774,64776,64778,64780,64782,64784],{"class":35,"line":34937},[33,64775,54364],{"class":47},[33,64777,53832],{"class":53522},[33,64779,55705],{"class":43},[33,64781,57],{"class":47},[33,64783,64689],{"class":60},[33,64785,53529],{"class":47},[33,64787,64788,64790,64792,64794,64796,64799,64802,64804],{"class":35,"line":34943},[33,64789,53563],{"class":47},[33,64791,33],{"class":53522},[33,64793,55705],{"class":43},[33,64795,57],{"class":47},[33,64797,64798],{"class":60},"\"total\"",[33,64800,64801],{"class":47},">0\u002F200字\u003C\u002F",[33,64803,33],{"class":53522},[33,64805,53529],{"class":47},[33,64807,64808,64810,64812],{"class":35,"line":34949},[33,64809,54636],{"class":47},[33,64811,53832],{"class":53522},[33,64813,53529],{"class":47},[33,64815,64816,64818,64820,64822,64824,64827],{"class":35,"line":34955},[33,64817,54364],{"class":47},[33,64819,53832],{"class":53522},[33,64821,55705],{"class":43},[33,64823,57],{"class":47},[33,64825,64826],{"class":60},"\"list\"",[33,64828,53529],{"class":47},[33,64830,64831,64833,64835,64837,64839,64842,64845,64847,64850],{"class":35,"line":34961},[33,64832,53563],{"class":47},[33,64834,53832],{"class":53522},[33,64836,55705],{"class":43},[33,64838,57],{"class":47},[33,64840,64841],{"class":60},"\"item\"",[33,64843,64844],{"class":43}," style",[33,64846,57],{"class":47},[33,64848,64849],{"class":60},"\"display: none;\"",[33,64851,53529],{"class":47},[33,64853,64854,64856,64858,64860,64862,64864,64866,64868],{"class":35,"line":34967},[33,64855,57453],{"class":47},[33,64857,2861],{"class":53522},[33,64859,55705],{"class":43},[33,64861,57],{"class":47},[33,64863,64704],{"class":60},[33,64865,57533],{"class":47},[33,64867,2861],{"class":53522},[33,64869,53529],{"class":47},[33,64871,64872,64874,64876,64878,64880,64883],{"class":35,"line":34973},[33,64873,57453],{"class":47},[33,64875,53832],{"class":53522},[33,64877,55705],{"class":43},[33,64879,57],{"class":47},[33,64881,64882],{"class":60},"\"info\"",[33,64884,53529],{"class":47},[33,64886,64887,64889,64891,64893,64895,64897,64900,64902],{"class":35,"line":34979},[33,64888,57521],{"class":47},[33,64890,19],{"class":53522},[33,64892,55705],{"class":43},[33,64894,57],{"class":47},[33,64896,993],{"class":60},[33,64898,64899],{"class":47},">清风徐来\u003C\u002F",[33,64901,19],{"class":53522},[33,64903,53529],{"class":47},[33,64905,64906,64908,64910,64912,64914,64917,64920,64922],{"class":35,"line":34999},[33,64907,57521],{"class":47},[33,64909,19],{"class":53522},[33,64911,55705],{"class":43},[33,64913,57],{"class":47},[33,64915,64916],{"class":60},"\"text\"",[33,64918,64919],{"class":47},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[33,64921,19],{"class":53522},[33,64923,53529],{"class":47},[33,64925,64926,64928,64930,64932,64934,64937,64940,64942],{"class":35,"line":35005},[33,64927,57521],{"class":47},[33,64929,19],{"class":53522},[33,64931,55705],{"class":43},[33,64933,57],{"class":47},[33,64935,64936],{"class":60},"\"time\"",[33,64938,64939],{"class":47},">2022-10-10 20:29:21\u003C\u002F",[33,64941,19],{"class":53522},[33,64943,53529],{"class":47},[33,64945,64946,64948,64950],{"class":35,"line":35021},[33,64947,57626],{"class":47},[33,64949,53832],{"class":53522},[33,64951,53529],{"class":47},[33,64953,64954,64956,64958],{"class":35,"line":35027},[33,64955,53997],{"class":47},[33,64957,53832],{"class":53522},[33,64959,53529],{"class":47},[33,64961,64962,64964,64966],{"class":35,"line":35041},[33,64963,54636],{"class":47},[33,64965,53832],{"class":53522},[33,64967,53529],{"class":47},[33,64969,64970,64972,64974],{"class":35,"line":35047},[33,64971,54364],{"class":47},[33,64973,54034],{"class":53522},[33,64975,53529],{"class":47},[33,64977,64978,64980,64983,64985,64987,64989,64991,64994],{"class":35,"line":35062},[33,64979,13462],{"class":39},[33,64981,64982],{"class":72}," tx",[33,64984,15804],{"class":39},[33,64986,56615],{"class":47},[33,64988,56618],{"class":43},[33,64990,133],{"class":47},[33,64992,64993],{"class":60},"'#tx'",[33,64995,226],{"class":47},[33,64997,64998,65000,65003,65005,65007,65009,65011,65014],{"class":35,"line":35068},[33,64999,13462],{"class":39},[33,65001,65002],{"class":72}," total",[33,65004,15804],{"class":39},[33,65006,56615],{"class":47},[33,65008,56618],{"class":43},[33,65010,133],{"class":47},[33,65012,65013],{"class":60},"'.total'",[33,65015,226],{"class":47},[33,65017,65018],{"class":35,"line":35077},[33,65019,65020],{"class":2487},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[33,65022,65023,65026,65028,65030,65032,65034,65036],{"class":35,"line":35083},[33,65024,65025],{"class":47},"    tx.",[33,65027,60031],{"class":43},[33,65029,133],{"class":47},[33,65031,63545],{"class":60},[33,65033,245],{"class":47},[33,65035,56668],{"class":39},[33,65037,56671],{"class":47},[33,65039,65040,65043,65045],{"class":35,"line":35092},[33,65041,65042],{"class":47},"      total.style.opacity ",[33,65044,57],{"class":39},[33,65046,57917],{"class":72},[33,65048,65049],{"class":35,"line":35098},[33,65050,35686],{"class":47},[33,65052,65053],{"class":35,"line":35104},[33,65054,65055],{"class":2487},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[33,65057,65058,65060,65062,65064,65066,65068,65070],{"class":35,"line":35113},[33,65059,65025],{"class":47},[33,65061,60031],{"class":43},[33,65063,133],{"class":47},[33,65065,63606],{"class":60},[33,65067,245],{"class":47},[33,65069,56668],{"class":39},[33,65071,56671],{"class":47},[33,65073,65074,65076,65078],{"class":35,"line":35119},[33,65075,65042],{"class":47},[33,65077,57],{"class":39},[33,65079,670],{"class":72},[33,65081,65082],{"class":35,"line":35130},[33,65083,35686],{"class":47},[33,65085,65086],{"class":35,"line":35136},[33,65087,65088],{"class":2487},"    \u002F\u002F 3. 检测用户输入\n",[33,65090,65091,65093,65095,65097,65100,65102,65104],{"class":35,"line":35155},[33,65092,65025],{"class":47},[33,65094,60031],{"class":43},[33,65096,133],{"class":47},[33,65098,65099],{"class":60},"'input'",[33,65101,245],{"class":47},[33,65103,56668],{"class":39},[33,65105,56671],{"class":47},[33,65107,65108],{"class":35,"line":35161},[33,65109,65110],{"class":2487},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[33,65112,65113,65116,65118,65121,65124,65126,65129,65131,65133],{"class":35,"line":35172},[33,65114,65115],{"class":47},"      total.innerHTML ",[33,65117,57],{"class":39},[33,65119,65120],{"class":60}," `${",[33,65122,65123],{"class":47},"tx",[33,65125,2975],{"class":60},[33,65127,65128],{"class":47},"value",[33,65130,2975],{"class":60},[33,65132,54188],{"class":72},[33,65134,65135],{"class":60},"}\u002F200字`\n",[33,65137,65138],{"class":35,"line":35178},[33,65139,35686],{"class":47},[33,65141,65142],{"class":35,"line":35198},[33,65143,100],{"emptyLinePlaceholder":99},[33,65145,65146],{"class":35,"line":35214},[33,65147,65148],{"class":2487},"    \u002F\u002F const str = 'andy'\n",[33,65150,65151],{"class":35,"line":35220},[33,65152,65153],{"class":2487},"    \u002F\u002F console.log(str.length)\n",[33,65155,65156,65158,65160],{"class":35,"line":35234},[33,65157,54636],{"class":47},[33,65159,54034],{"class":53522},[33,65161,53529],{"class":47},[33,65163,65164,65166,65168],{"class":35,"line":35240},[33,65165,54006],{"class":47},[33,65167,54021],{"class":53522},[33,65169,53529],{"class":47},[33,65171,65172],{"class":35,"line":35246},[33,65173,100],{"emptyLinePlaceholder":99},[33,65175,65176,65178,65180],{"class":35,"line":35257},[33,65177,54006],{"class":47},[33,65179,52857],{"class":53522},[33,65181,53529],{"class":47},[24236,65183,65185],{"id":65184},"_3254-change事件","3.2.5.4 change事件",[19,65187,65188],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,65190,65191],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,65193,65194],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[23,65196,65198],{"className":52855,"code":65197,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,65199,65200,65210,65224,65228,65236,65250,65270,65282,65290,65294,65302,65316,65324,65342,65360,65372,65376,65384,65392,65396],{"__ignoreMap":28},[33,65201,65202,65204,65206,65208],{"class":35,"line":36},[33,65203,53519],{"class":47},[33,65205,53523],{"class":53522},[33,65207,53526],{"class":43},[33,65209,53529],{"class":47},[33,65211,65212,65214,65216,65218,65220,65222],{"class":35,"line":51},[33,65213,2226],{"class":47},[33,65215,52857],{"class":53522},[33,65217,53538],{"class":43},[33,65219,57],{"class":47},[33,65221,53543],{"class":60},[33,65223,53529],{"class":47},[33,65225,65226],{"class":35,"line":64},[33,65227,100],{"emptyLinePlaceholder":99},[33,65229,65230,65232,65234],{"class":35,"line":76},[33,65231,2226],{"class":47},[33,65233,53556],{"class":53522},[33,65235,53529],{"class":47},[33,65237,65238,65240,65242,65244,65246,65248],{"class":35,"line":87},[33,65239,54364],{"class":47},[33,65241,53566],{"class":53522},[33,65243,53569],{"class":43},[33,65245,57],{"class":47},[33,65247,53574],{"class":60},[33,65249,53529],{"class":47},[33,65251,65252,65254,65256,65258,65260,65262,65264,65266,65268],{"class":35,"line":96},[33,65253,54364],{"class":47},[33,65255,53566],{"class":53522},[33,65257,17158],{"class":43},[33,65259,57],{"class":47},[33,65261,53613],{"class":60},[33,65263,53593],{"class":43},[33,65265,57],{"class":47},[33,65267,53620],{"class":60},[33,65269,53529],{"class":47},[33,65271,65272,65274,65276,65278,65280],{"class":35,"line":103},[33,65273,54364],{"class":47},[33,65275,53629],{"class":53522},[33,65277,53632],{"class":47},[33,65279,53629],{"class":53522},[33,65281,53529],{"class":47},[33,65283,65284,65286,65288],{"class":35,"line":108},[33,65285,54006],{"class":47},[33,65287,53556],{"class":53522},[33,65289,53529],{"class":47},[33,65291,65292],{"class":35,"line":119},[33,65293,100],{"emptyLinePlaceholder":99},[33,65295,65296,65298,65300],{"class":35,"line":128},[33,65297,2226],{"class":47},[33,65299,54021],{"class":53522},[33,65301,53529],{"class":47},[33,65303,65304,65306,65308,65310,65312,65314],{"class":35,"line":1753},[33,65305,54364],{"class":47},[33,65307,56040],{"class":53522},[33,65309,56043],{"class":43},[33,65311,57],{"class":47},[33,65313,64916],{"class":60},[33,65315,53529],{"class":47},[33,65317,65318,65320,65322],{"class":35,"line":1763},[33,65319,54364],{"class":47},[33,65321,54034],{"class":53522},[33,65323,53529],{"class":47},[33,65325,65326,65328,65330,65332,65334,65336,65338,65340],{"class":35,"line":1775},[33,65327,13462],{"class":39},[33,65329,62823],{"class":72},[33,65331,15804],{"class":39},[33,65333,56615],{"class":47},[33,65335,56618],{"class":43},[33,65337,133],{"class":47},[33,65339,65099],{"class":60},[33,65341,226],{"class":47},[33,65343,65344,65347,65349,65351,65354,65356,65358],{"class":35,"line":1780},[33,65345,65346],{"class":47},"    input.",[33,65348,60031],{"class":43},[33,65350,133],{"class":47},[33,65352,65353],{"class":60},"'change'",[33,65355,245],{"class":47},[33,65357,56668],{"class":39},[33,65359,56671],{"class":47},[33,65361,65362,65364,65366,65368,65370],{"class":35,"line":1785},[33,65363,60462],{"class":47},[33,65365,60465],{"class":43},[33,65367,133],{"class":47},[33,65369,3010],{"class":72},[33,65371,226],{"class":47},[33,65373,65374],{"class":35,"line":1940},[33,65375,35686],{"class":47},[33,65377,65378,65380,65382],{"class":35,"line":2183},[33,65379,54636],{"class":47},[33,65381,54034],{"class":53522},[33,65383,53529],{"class":47},[33,65385,65386,65388,65390],{"class":35,"line":2208},[33,65387,54006],{"class":47},[33,65389,54021],{"class":53522},[33,65391,53529],{"class":47},[33,65393,65394],{"class":35,"line":2234},[33,65395,100],{"emptyLinePlaceholder":99},[33,65397,65398,65400,65402],{"class":35,"line":2239},[33,65399,54006],{"class":47},[33,65401,52857],{"class":53522},[33,65403,53529],{"class":47},[19,65405,65406],{},"总结：内容发生改变才回去触发",[631,65408,65410],{"id":65409},"_326-事件对象","3.2.6 事件对象",[24236,65412,65414],{"id":65413},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65416,65417],{},[3736,65418],{"alt":28,"src":65419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65421,65422],{},[3736,65423],{"alt":28,"src":65424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65426,65427],{},"点击一次，就输出了事件对象，它是个对象",[19,65429,65430],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65432,65433],{},[3736,65434],{"alt":28,"src":65435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[24236,65437,65439],{"id":65438},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65441,65442],{},[3736,65443],{"alt":28,"src":65444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65446,65447],{},"实现按特殊字符才是实现打印输出效果：",[23,65449,65451],{"className":55286,"code":65450,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,65452,65453,65461,65466,65480,65488,65493,65498,65503,65508,65513,65518,65523,65528,65533,65537,65541,65549],{"__ignoreMap":28},[33,65454,65455,65457,65459],{"class":35,"line":36},[33,65456,2226],{"class":47},[33,65458,54021],{"class":53522},[33,65460,53529],{"class":47},[33,65462,65463],{"class":35,"line":51},[33,65464,65465],{"class":2487},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[33,65467,65468,65470,65472,65474,65476,65478],{"class":35,"line":64},[33,65469,54364],{"class":47},[33,65471,56040],{"class":53522},[33,65473,56043],{"class":43},[33,65475,57],{"class":47},[33,65477,64916],{"class":60},[33,65479,53529],{"class":47},[33,65481,65482,65484,65486],{"class":35,"line":76},[33,65483,54364],{"class":47},[33,65485,54034],{"class":53522},[33,65487,53529],{"class":47},[33,65489,65490],{"class":35,"line":87},[33,65491,65492],{"class":47},"    \u002F\u002F const btn = document.querySelector('button')\n",[33,65494,65495],{"class":35,"line":96},[33,65496,65497],{"class":47},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[33,65499,65500],{"class":35,"line":103},[33,65501,65502],{"class":47},"    \u002F\u002F   console.log(e);\n",[33,65504,65505],{"class":35,"line":108},[33,65506,65507],{"class":47},"    \u002F\u002F })\n",[33,65509,65510],{"class":35,"line":119},[33,65511,65512],{"class":47},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[33,65514,65515],{"class":35,"line":128},[33,65516,65517],{"class":47},"    const input = document.querySelector('input')\n",[33,65519,65520],{"class":35,"line":1753},[33,65521,65522],{"class":47},"    input.addEventListener('keyup', function (e) {\n",[33,65524,65525],{"class":35,"line":1763},[33,65526,65527],{"class":47},"      if (e.key === 'Enter') {\n",[33,65529,65530],{"class":35,"line":1775},[33,65531,65532],{"class":47},"        console.log('我按下了回车键')\n",[33,65534,65535],{"class":35,"line":1780},[33,65536,54617],{"class":47},[33,65538,65539],{"class":35,"line":1785},[33,65540,35686],{"class":47},[33,65542,65543,65545,65547],{"class":35,"line":1940},[33,65544,54636],{"class":47},[33,65546,54034],{"class":53522},[33,65548,53529],{"class":47},[33,65550,65551,65553,65555],{"class":35,"line":2183},[33,65552,54006],{"class":47},[33,65554,54021],{"class":53522},[33,65556,53529],{"class":47},[24236,65558,65560],{"id":65559},"_3263-trim方法","3.2.6.3 trim方法",[19,65562,65563],{},[3736,65564],{"alt":28,"src":65565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65567,65568],{},[3736,65569],{"alt":28,"src":65570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65572,65573],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65575,65576],{},"str.trim()",[631,65578,65580],{"id":65579},"_327-环境对象","3.2.7 环境对象",[19,65582,65583],{},[3736,65584],{"alt":28,"src":65585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65587,65588],{},[3736,65589],{"alt":28,"src":65590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65592,65593],{},[3736,65594],{"alt":28,"src":65595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65597,65598],{},"实际函数调用是window.fn()",[19,65600,65601],{},"普通函数里面this指向的是window",[3413,65603,65604,65607,65610],{},[331,65605,65606],{},"在普通函数下，this指向的是window",[331,65608,65609],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[331,65611,65612],{},"箭头函数没有this",[19,65614,65615],{},"粗略记法就是：谁调用，this就指向谁",[19,65617,65618],{},[3736,65619],{"alt":28,"src":65620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65622,65623],{},[3736,65624],{"alt":28,"src":65625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65627,65628],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65630,65631],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[23,65633,65635],{"className":55286,"code":65634,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,65636,65637,65645,65657,65665,65670,65675,65680,65685,65689,65697],{"__ignoreMap":28},[33,65638,65639,65641,65643],{"class":35,"line":36},[33,65640,2226],{"class":47},[33,65642,54021],{"class":53522},[33,65644,53529],{"class":47},[33,65646,65647,65649,65651,65653,65655],{"class":35,"line":51},[33,65648,54364],{"class":47},[33,65650,56106],{"class":53522},[33,65652,56112],{"class":47},[33,65654,56106],{"class":53522},[33,65656,53529],{"class":47},[33,65658,65659,65661,65663],{"class":35,"line":64},[33,65660,54364],{"class":47},[33,65662,54034],{"class":53522},[33,65664,53529],{"class":47},[33,65666,65667],{"class":35,"line":76},[33,65668,65669],{"class":47},"    const button = document.querySelector('button')\n",[33,65671,65672],{"class":35,"line":87},[33,65673,65674],{"class":47},"    button.addEventListener('click', function () {\n",[33,65676,65677],{"class":35,"line":96},[33,65678,65679],{"class":47},"      \u002F\u002F console.log(this);\n",[33,65681,65682],{"class":35,"line":103},[33,65683,65684],{"class":47},"      this.style.color = 'pink'\n",[33,65686,65687],{"class":35,"line":108},[33,65688,35686],{"class":47},[33,65690,65691,65693,65695],{"class":35,"line":119},[33,65692,54636],{"class":47},[33,65694,54034],{"class":53522},[33,65696,53529],{"class":47},[33,65698,65699,65701,65703],{"class":35,"line":128},[33,65700,54006],{"class":47},[33,65702,54021],{"class":53522},[33,65704,53529],{"class":47},[631,65706,65708],{"id":65707},"_328-回调函数","3.2.8 回调函数",[19,65710,65711],{},[3736,65712],{"alt":28,"src":65713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65715,65716],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65718,13573],{},[3413,65720,65721,65724,65727],{},[331,65722,65723],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[331,65725,65726],{},"回调函数本质还是函数，只不过把它当成参数使用",[331,65728,65729],{},"使用匿名函数做为回调函数比较常见",[631,65731,65733],{"id":65732},"_329-tab栏切换","3.2.9 tab栏切换",[19,65735,65736],{},[3736,65737],{"alt":28,"src":65738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[23,65740,65742],{"className":52855,"code":65741,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,65743,65744,65754,65768,65772,65780,65794,65814,65834,65847,65855,65861,65871,65881,65885,65889,65896,65909,65922,65934,65950,65954,65958,65965,65977,65989,66001,66011,66021,66025,66029,66038,66050,66061,66073,66077,66081,66089,66099,66109,66119,66123,66127,66137,66151,66163,66167,66171,66183,66194,66211,66221,66225,66229,66244,66255,66265,66269,66273,66280,66295,66299,66303,66311,66321,66325,66329,66338,66348,66352,66360,66368,66372,66380,66395,66410,66423,66431,66465,66492,66519,66546,66573,66581,66589,66604,66641,66676,66711,66746,66781,66789,66797,66805,66810,66815,66835,66840,66869,66874,66879,66897,66902,66907,66912,66934,66939,66955,66959,66964,66969,66990,66995,67024,67028,67033,67037,67045,67053,67057],{"__ignoreMap":28},[33,65745,65746,65748,65750,65752],{"class":35,"line":36},[33,65747,53519],{"class":47},[33,65749,53523],{"class":53522},[33,65751,53526],{"class":43},[33,65753,53529],{"class":47},[33,65755,65756,65758,65760,65762,65764,65766],{"class":35,"line":51},[33,65757,2226],{"class":47},[33,65759,52857],{"class":53522},[33,65761,53538],{"class":43},[33,65763,57],{"class":47},[33,65765,53543],{"class":60},[33,65767,53529],{"class":47},[33,65769,65770],{"class":35,"line":64},[33,65771,100],{"emptyLinePlaceholder":99},[33,65773,65774,65776,65778],{"class":35,"line":76},[33,65775,2226],{"class":47},[33,65777,53556],{"class":53522},[33,65779,53529],{"class":47},[33,65781,65782,65784,65786,65788,65790,65792],{"class":35,"line":87},[33,65783,54364],{"class":47},[33,65785,53566],{"class":53522},[33,65787,53569],{"class":43},[33,65789,57],{"class":47},[33,65791,53574],{"class":60},[33,65793,61345],{"class":47},[33,65795,65796,65798,65800,65802,65804,65806,65808,65810,65812],{"class":35,"line":96},[33,65797,54364],{"class":47},[33,65799,53566],{"class":53522},[33,65801,53585],{"class":43},[33,65803,57],{"class":47},[33,65805,53590],{"class":60},[33,65807,53593],{"class":43},[33,65809,57],{"class":47},[33,65811,53598],{"class":60},[33,65813,61345],{"class":47},[33,65815,65816,65818,65820,65822,65824,65826,65828,65830,65832],{"class":35,"line":103},[33,65817,54364],{"class":47},[33,65819,53566],{"class":53522},[33,65821,17158],{"class":43},[33,65823,57],{"class":47},[33,65825,53613],{"class":60},[33,65827,53593],{"class":43},[33,65829,57],{"class":47},[33,65831,53620],{"class":60},[33,65833,61345],{"class":47},[33,65835,65836,65838,65840,65843,65845],{"class":35,"line":108},[33,65837,54364],{"class":47},[33,65839,53629],{"class":53522},[33,65841,65842],{"class":47},">tab栏切换\u003C\u002F",[33,65844,53629],{"class":53522},[33,65846,53529],{"class":47},[33,65848,65849,65851,65853],{"class":35,"line":119},[33,65850,54364],{"class":47},[33,65852,2331],{"class":53522},[33,65854,53529],{"class":47},[33,65856,65857,65859],{"class":35,"line":128},[33,65858,8649],{"class":53522},[33,65860,17810],{"class":47},[33,65862,65863,65865,65867,65869],{"class":35,"line":1753},[33,65864,56925],{"class":72},[33,65866,996],{"class":47},[33,65868,2617],{"class":72},[33,65870,3567],{"class":47},[33,65872,65873,65875,65877,65879],{"class":35,"line":1763},[33,65874,56914],{"class":72},[33,65876,996],{"class":47},[33,65878,2617],{"class":72},[33,65880,3567],{"class":47},[33,65882,65883],{"class":35,"line":1775},[33,65884,4446],{"class":47},[33,65886,65887],{"class":35,"line":1780},[33,65888,100],{"emptyLinePlaceholder":99},[33,65890,65891,65894],{"class":35,"line":1785},[33,65892,65893],{"class":43},"    .tab",[33,65895,17810],{"class":47},[33,65897,65898,65900,65902,65905,65907],{"class":35,"line":1940},[33,65899,56990],{"class":72},[33,65901,996],{"class":47},[33,65903,65904],{"class":72},"590",[33,65906,53713],{"class":39},[33,65908,3567],{"class":47},[33,65910,65911,65913,65915,65918,65920],{"class":35,"line":2183},[33,65912,57004],{"class":72},[33,65914,996],{"class":47},[33,65916,65917],{"class":72},"340",[33,65919,53713],{"class":39},[33,65921,3567],{"class":47},[33,65923,65924,65926,65928,65930,65932],{"class":35,"line":2208},[33,65925,56925],{"class":72},[33,65927,996],{"class":47},[33,65929,1284],{"class":72},[33,65931,53713],{"class":39},[33,65933,3567],{"class":47},[33,65935,65936,65938,65940,65942,65944,65946,65948],{"class":35,"line":2234},[33,65937,64195],{"class":72},[33,65939,996],{"class":47},[33,65941,720],{"class":72},[33,65943,53713],{"class":39},[33,65945,53742],{"class":72},[33,65947,64462],{"class":72},[33,65949,3567],{"class":47},[33,65951,65952],{"class":35,"line":2239},[33,65953,4446],{"class":47},[33,65955,65956],{"class":35,"line":2247},[33,65957,100],{"emptyLinePlaceholder":99},[33,65959,65960,65963],{"class":35,"line":2255},[33,65961,65962],{"class":43},"    .tab-nav",[33,65964,17810],{"class":47},[33,65966,65967,65969,65971,65973,65975],{"class":35,"line":3992},[33,65968,56990],{"class":72},[33,65970,996],{"class":47},[33,65972,2734],{"class":72},[33,65974,1429],{"class":39},[33,65976,3567],{"class":47},[33,65978,65979,65981,65983,65985,65987],{"class":35,"line":4009},[33,65980,57004],{"class":72},[33,65982,996],{"class":47},[33,65984,3316],{"class":72},[33,65986,53713],{"class":39},[33,65988,3567],{"class":47},[33,65990,65991,65993,65995,65997,65999],{"class":35,"line":4014},[33,65992,59577],{"class":72},[33,65994,996],{"class":47},[33,65996,3316],{"class":72},[33,65998,53713],{"class":39},[33,66000,3567],{"class":47},[33,66002,66003,66005,66007,66009],{"class":35,"line":4019},[33,66004,57228],{"class":72},[33,66006,996],{"class":47},[33,66008,53698],{"class":72},[33,66010,3567],{"class":47},[33,66012,66013,66015,66017,66019],{"class":35,"line":4024},[33,66014,57239],{"class":72},[33,66016,996],{"class":47},[33,66018,53889],{"class":72},[33,66020,3567],{"class":47},[33,66022,66023],{"class":35,"line":4038},[33,66024,4446],{"class":47},[33,66026,66027],{"class":35,"line":4043},[33,66028,100],{"emptyLinePlaceholder":99},[33,66030,66031,66033,66036],{"class":35,"line":4834},[33,66032,65962],{"class":43},[33,66034,66035],{"class":53522}," h3",[33,66037,17810],{"class":47},[33,66039,66040,66042,66044,66046,66048],{"class":35,"line":4848},[33,66041,57141],{"class":72},[33,66043,996],{"class":47},[33,66045,3213],{"class":72},[33,66047,53713],{"class":39},[33,66049,3567],{"class":47},[33,66051,66052,66054,66056,66059],{"class":35,"line":4856},[33,66053,64552],{"class":72},[33,66055,996],{"class":47},[33,66057,66058],{"class":72},"normal",[33,66060,3567],{"class":47},[33,66062,66063,66065,66067,66069,66071],{"class":35,"line":4861},[33,66064,64218],{"class":72},[33,66066,996],{"class":47},[33,66068,1284],{"class":72},[33,66070,53713],{"class":39},[33,66072,3567],{"class":47},[33,66074,66075],{"class":35,"line":4867},[33,66076,4446],{"class":47},[33,66078,66079],{"class":35,"line":4873},[33,66080,100],{"emptyLinePlaceholder":99},[33,66082,66083,66085,66087],{"class":35,"line":4878},[33,66084,65962],{"class":43},[33,66086,63510],{"class":53522},[33,66088,17810],{"class":47},[33,66090,66091,66093,66095,66097],{"class":35,"line":10194},[33,66092,56951],{"class":72},[33,66094,996],{"class":47},[33,66096,56956],{"class":72},[33,66098,3567],{"class":47},[33,66100,66101,66103,66105,66107],{"class":35,"line":10218},[33,66102,57228],{"class":72},[33,66104,996],{"class":47},[33,66106,53698],{"class":72},[33,66108,3567],{"class":47},[33,66110,66111,66113,66115,66117],{"class":35,"line":10223},[33,66112,57239],{"class":72},[33,66114,996],{"class":47},[33,66116,53801],{"class":72},[33,66118,3567],{"class":47},[33,66120,66121],{"class":35,"line":10229},[33,66122,4446],{"class":47},[33,66124,66125],{"class":35,"line":10256},[33,66126,100],{"emptyLinePlaceholder":99},[33,66128,66129,66131,66133,66135],{"class":35,"line":10261},[33,66130,65962],{"class":43},[33,66132,63510],{"class":53522},[33,66134,57294],{"class":53522},[33,66136,17810],{"class":47},[33,66138,66139,66141,66143,66145,66147,66149],{"class":35,"line":10267},[33,66140,56925],{"class":72},[33,66142,996],{"class":47},[33,66144,2617],{"class":72},[33,66146,11196],{"class":72},[33,66148,53713],{"class":39},[33,66150,3567],{"class":47},[33,66152,66153,66155,66157,66159,66161],{"class":35,"line":10279},[33,66154,57141],{"class":72},[33,66156,996],{"class":47},[33,66158,2966],{"class":72},[33,66160,53713],{"class":39},[33,66162,3567],{"class":47},[33,66164,66165],{"class":35,"line":10291},[33,66166,4446],{"class":47},[33,66168,66169],{"class":35,"line":10303},[33,66170,100],{"emptyLinePlaceholder":99},[33,66172,66173,66175,66177,66179,66181],{"class":35,"line":11961},[33,66174,65962],{"class":43},[33,66176,63510],{"class":53522},[33,66178,57294],{"class":53522},[33,66180,3672],{"class":53522},[33,66182,17810],{"class":47},[33,66184,66185,66188,66190,66192],{"class":35,"line":11986},[33,66186,66187],{"class":72},"      text-decoration",[33,66189,996],{"class":47},[33,66191,56956],{"class":72},[33,66193,3567],{"class":47},[33,66195,66196,66198,66200,66202,66204,66206,66209],{"class":35,"line":12009},[33,66197,64450],{"class":72},[33,66199,996],{"class":47},[33,66201,725],{"class":72},[33,66203,53713],{"class":39},[33,66205,53742],{"class":72},[33,66207,66208],{"class":72}," transparent",[33,66210,3567],{"class":47},[33,66212,66213,66215,66217,66219],{"class":35,"line":12033},[33,66214,59634],{"class":72},[33,66216,996],{"class":47},[33,66218,64587],{"class":72},[33,66220,3567],{"class":47},[33,66222,66223],{"class":35,"line":12038},[33,66224,4446],{"class":47},[33,66226,66227],{"class":35,"line":12043},[33,66228,100],{"emptyLinePlaceholder":99},[33,66230,66231,66233,66235,66237,66239,66242],{"class":35,"line":12048},[33,66232,65962],{"class":43},[33,66234,63510],{"class":53522},[33,66236,57294],{"class":53522},[33,66238,3672],{"class":53522},[33,66240,66241],{"class":43},".active",[33,66243,17810],{"class":47},[33,66245,66246,66248,66250,66253],{"class":35,"line":12057},[33,66247,64009],{"class":72},[33,66249,996],{"class":47},[33,66251,66252],{"class":72},"#e1251b",[33,66254,3567],{"class":47},[33,66256,66257,66259,66261,66263],{"class":35,"line":12062},[33,66258,59634],{"class":72},[33,66260,996],{"class":47},[33,66262,66252],{"class":72},[33,66264,3567],{"class":47},[33,66266,66267],{"class":35,"line":12068},[33,66268,4446],{"class":47},[33,66270,66271],{"class":35,"line":12089},[33,66272,100],{"emptyLinePlaceholder":99},[33,66274,66275,66278],{"class":35,"line":12095},[33,66276,66277],{"class":43},"    .tab-content",[33,66279,17810],{"class":47},[33,66281,66282,66284,66286,66288,66291,66293],{"class":35,"line":12109},[33,66283,56914],{"class":72},[33,66285,996],{"class":47},[33,66287,2617],{"class":72},[33,66289,66290],{"class":72}," 16",[33,66292,53713],{"class":39},[33,66294,3567],{"class":47},[33,66296,66297],{"class":35,"line":12115},[33,66298,4446],{"class":47},[33,66300,66301],{"class":35,"line":12142},[33,66302,100],{"emptyLinePlaceholder":99},[33,66304,66305,66307,66309],{"class":35,"line":12151},[33,66306,66277],{"class":43},[33,66308,64392],{"class":43},[33,66310,17810],{"class":47},[33,66312,66313,66315,66317,66319],{"class":35,"line":12157},[33,66314,57228],{"class":72},[33,66316,996],{"class":47},[33,66318,56956],{"class":72},[33,66320,3567],{"class":47},[33,66322,66323],{"class":35,"line":12165},[33,66324,4446],{"class":47},[33,66326,66327],{"class":35,"line":12170},[33,66328,100],{"emptyLinePlaceholder":99},[33,66330,66331,66333,66336],{"class":35,"line":18842},[33,66332,66277],{"class":43},[33,66334,66335],{"class":43}," .item.active",[33,66337,17810],{"class":47},[33,66339,66340,66342,66344,66346],{"class":35,"line":18848},[33,66341,57228],{"class":72},[33,66343,996],{"class":47},[33,66345,63087],{"class":72},[33,66347,3567],{"class":47},[33,66349,66350],{"class":35,"line":18871},[33,66351,4446],{"class":47},[33,66353,66354,66356,66358],{"class":35,"line":18877},[33,66355,54636],{"class":47},[33,66357,2331],{"class":53522},[33,66359,53529],{"class":47},[33,66361,66362,66364,66366],{"class":35,"line":18900},[33,66363,54006],{"class":47},[33,66365,53556],{"class":53522},[33,66367,53529],{"class":47},[33,66369,66370],{"class":35,"line":18914},[33,66371,100],{"emptyLinePlaceholder":99},[33,66373,66374,66376,66378],{"class":35,"line":18934},[33,66375,2226],{"class":47},[33,66377,54021],{"class":53522},[33,66379,53529],{"class":47},[33,66381,66382,66384,66386,66388,66390,66393],{"class":35,"line":18940},[33,66383,54364],{"class":47},[33,66385,53832],{"class":53522},[33,66387,55705],{"class":43},[33,66389,57],{"class":47},[33,66391,66392],{"class":60},"\"tab\"",[33,66394,53529],{"class":47},[33,66396,66397,66399,66401,66403,66405,66408],{"class":35,"line":18951},[33,66398,53563],{"class":47},[33,66400,53832],{"class":53522},[33,66402,55705],{"class":43},[33,66404,57],{"class":47},[33,66406,66407],{"class":60},"\"tab-nav\"",[33,66409,53529],{"class":47},[33,66411,66412,66414,66416,66419,66421],{"class":35,"line":18974},[33,66413,57453],{"class":47},[33,66415,631],{"class":53522},[33,66417,66418],{"class":47},">每日特价\u003C\u002F",[33,66420,631],{"class":53522},[33,66422,53529],{"class":47},[33,66424,66425,66427,66429],{"class":35,"line":18996},[33,66426,57453],{"class":47},[33,66428,3413],{"class":53522},[33,66430,53529],{"class":47},[33,66432,66433,66435,66437,66439,66441,66443,66445,66447,66449,66451,66454,66457,66459,66461,66463],{"class":35,"line":19001},[33,66434,57521],{"class":47},[33,66436,331],{"class":53522},[33,66438,63270],{"class":47},[33,66440,2663],{"class":53522},[33,66442,55705],{"class":43},[33,66444,57],{"class":47},[33,66446,61924],{"class":60},[33,66448,63275],{"class":43},[33,66450,57],{"class":47},[33,66452,66453],{"class":60},"\"javascript:;\"",[33,66455,66456],{"class":47},">精选\u003C\u002F",[33,66458,2663],{"class":53522},[33,66460,57533],{"class":47},[33,66462,331],{"class":53522},[33,66464,53529],{"class":47},[33,66466,66467,66469,66471,66473,66475,66477,66479,66481,66484,66486,66488,66490],{"class":35,"line":19007},[33,66468,57521],{"class":47},[33,66470,331],{"class":53522},[33,66472,63270],{"class":47},[33,66474,2663],{"class":53522},[33,66476,63275],{"class":43},[33,66478,57],{"class":47},[33,66480,66453],{"class":60},[33,66482,66483],{"class":47},">美食\u003C\u002F",[33,66485,2663],{"class":53522},[33,66487,57533],{"class":47},[33,66489,331],{"class":53522},[33,66491,53529],{"class":47},[33,66493,66494,66496,66498,66500,66502,66504,66506,66508,66511,66513,66515,66517],{"class":35,"line":19021},[33,66495,57521],{"class":47},[33,66497,331],{"class":53522},[33,66499,63270],{"class":47},[33,66501,2663],{"class":53522},[33,66503,63275],{"class":43},[33,66505,57],{"class":47},[33,66507,66453],{"class":60},[33,66509,66510],{"class":47},">百货\u003C\u002F",[33,66512,2663],{"class":53522},[33,66514,57533],{"class":47},[33,66516,331],{"class":53522},[33,66518,53529],{"class":47},[33,66520,66521,66523,66525,66527,66529,66531,66533,66535,66538,66540,66542,66544],{"class":35,"line":19034},[33,66522,57521],{"class":47},[33,66524,331],{"class":53522},[33,66526,63270],{"class":47},[33,66528,2663],{"class":53522},[33,66530,63275],{"class":43},[33,66532,57],{"class":47},[33,66534,66453],{"class":60},[33,66536,66537],{"class":47},">个护\u003C\u002F",[33,66539,2663],{"class":53522},[33,66541,57533],{"class":47},[33,66543,331],{"class":53522},[33,66545,53529],{"class":47},[33,66547,66548,66550,66552,66554,66556,66558,66560,66562,66565,66567,66569,66571],{"class":35,"line":19039},[33,66549,57521],{"class":47},[33,66551,331],{"class":53522},[33,66553,63270],{"class":47},[33,66555,2663],{"class":53522},[33,66557,63275],{"class":43},[33,66559,57],{"class":47},[33,66561,66453],{"class":60},[33,66563,66564],{"class":47},">预告\u003C\u002F",[33,66566,2663],{"class":53522},[33,66568,57533],{"class":47},[33,66570,331],{"class":53522},[33,66572,53529],{"class":47},[33,66574,66575,66577,66579],{"class":35,"line":19053},[33,66576,57626],{"class":47},[33,66578,3413],{"class":53522},[33,66580,53529],{"class":47},[33,66582,66583,66585,66587],{"class":35,"line":19058},[33,66584,53997],{"class":47},[33,66586,53832],{"class":53522},[33,66588,53529],{"class":47},[33,66590,66591,66593,66595,66597,66599,66602],{"class":35,"line":19064},[33,66592,53563],{"class":47},[33,66594,53832],{"class":53522},[33,66596,55705],{"class":43},[33,66598,57],{"class":47},[33,66600,66601],{"class":60},"\"tab-content\"",[33,66603,53529],{"class":47},[33,66605,66606,66608,66610,66612,66614,66617,66619,66621,66623,66625,66628,66630,66632,66634,66637,66639],{"class":35,"line":19069},[33,66607,57453],{"class":47},[33,66609,53832],{"class":53522},[33,66611,55705],{"class":43},[33,66613,57],{"class":47},[33,66615,66616],{"class":60},"\"item active\"",[33,66618,63270],{"class":47},[33,66620,3736],{"class":53522},[33,66622,57458],{"class":43},[33,66624,57],{"class":47},[33,66626,66627],{"class":60},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[33,66629,57466],{"class":43},[33,66631,57],{"class":47},[33,66633,9898],{"class":60},[33,66635,66636],{"class":47}," \u002F>\u003C\u002F",[33,66638,53832],{"class":53522},[33,66640,53529],{"class":47},[33,66642,66643,66645,66647,66649,66651,66653,66655,66657,66659,66661,66664,66666,66668,66670,66672,66674],{"class":35,"line":19083},[33,66644,57453],{"class":47},[33,66646,53832],{"class":53522},[33,66648,55705],{"class":43},[33,66650,57],{"class":47},[33,66652,64841],{"class":60},[33,66654,63270],{"class":47},[33,66656,3736],{"class":53522},[33,66658,57458],{"class":43},[33,66660,57],{"class":47},[33,66662,66663],{"class":60},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[33,66665,57466],{"class":43},[33,66667,57],{"class":47},[33,66669,9898],{"class":60},[33,66671,66636],{"class":47},[33,66673,53832],{"class":53522},[33,66675,53529],{"class":47},[33,66677,66678,66680,66682,66684,66686,66688,66690,66692,66694,66696,66699,66701,66703,66705,66707,66709],{"class":35,"line":19088},[33,66679,57453],{"class":47},[33,66681,53832],{"class":53522},[33,66683,55705],{"class":43},[33,66685,57],{"class":47},[33,66687,64841],{"class":60},[33,66689,63270],{"class":47},[33,66691,3736],{"class":53522},[33,66693,57458],{"class":43},[33,66695,57],{"class":47},[33,66697,66698],{"class":60},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[33,66700,57466],{"class":43},[33,66702,57],{"class":47},[33,66704,9898],{"class":60},[33,66706,66636],{"class":47},[33,66708,53832],{"class":53522},[33,66710,53529],{"class":47},[33,66712,66713,66715,66717,66719,66721,66723,66725,66727,66729,66731,66734,66736,66738,66740,66742,66744],{"class":35,"line":19093},[33,66714,57453],{"class":47},[33,66716,53832],{"class":53522},[33,66718,55705],{"class":43},[33,66720,57],{"class":47},[33,66722,64841],{"class":60},[33,66724,63270],{"class":47},[33,66726,3736],{"class":53522},[33,66728,57458],{"class":43},[33,66730,57],{"class":47},[33,66732,66733],{"class":60},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[33,66735,57466],{"class":43},[33,66737,57],{"class":47},[33,66739,9898],{"class":60},[33,66741,66636],{"class":47},[33,66743,53832],{"class":53522},[33,66745,53529],{"class":47},[33,66747,66748,66750,66752,66754,66756,66758,66760,66762,66764,66766,66769,66771,66773,66775,66777,66779],{"class":35,"line":19107},[33,66749,57453],{"class":47},[33,66751,53832],{"class":53522},[33,66753,55705],{"class":43},[33,66755,57],{"class":47},[33,66757,64841],{"class":60},[33,66759,63270],{"class":47},[33,66761,3736],{"class":53522},[33,66763,57458],{"class":43},[33,66765,57],{"class":47},[33,66767,66768],{"class":60},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[33,66770,57466],{"class":43},[33,66772,57],{"class":47},[33,66774,9898],{"class":60},[33,66776,66636],{"class":47},[33,66778,53832],{"class":53522},[33,66780,53529],{"class":47},[33,66782,66783,66785,66787],{"class":35,"line":19119},[33,66784,53997],{"class":47},[33,66786,53832],{"class":53522},[33,66788,53529],{"class":47},[33,66790,66791,66793,66795],{"class":35,"line":19124},[33,66792,54636],{"class":47},[33,66794,53832],{"class":53522},[33,66796,53529],{"class":47},[33,66798,66799,66801,66803],{"class":35,"line":19137},[33,66800,54364],{"class":47},[33,66802,54034],{"class":53522},[33,66804,53529],{"class":47},[33,66806,66807],{"class":35,"line":19142},[33,66808,66809],{"class":2487},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[33,66811,66812],{"class":35,"line":19147},[33,66813,66814],{"class":2487},"    \u002F\u002F 1.1 获取 a 元素 \n",[33,66816,66817,66819,66822,66824,66826,66828,66830,66833],{"class":35,"line":19152},[33,66818,13462],{"class":39},[33,66820,66821],{"class":72}," as",[33,66823,15804],{"class":39},[33,66825,56615],{"class":47},[33,66827,57899],{"class":43},[33,66829,133],{"class":47},[33,66831,66832],{"class":60},"'.tab-nav a'",[33,66834,226],{"class":47},[33,66836,66837],{"class":35,"line":19165},[33,66838,66839],{"class":2487},"    \u002F\u002F console.log(as) \n",[33,66841,66842,66844,66846,66848,66850,66852,66854,66856,66858,66861,66863,66865,66867],{"class":35,"line":19170},[33,66843,675],{"class":39},[33,66845,3924],{"class":47},[33,66847,54067],{"class":39},[33,66849,11684],{"class":47},[33,66851,57],{"class":39},[33,66853,1437],{"class":72},[33,66855,11691],{"class":47},[33,66857,2226],{"class":39},[33,66859,66860],{"class":47}," as.",[33,66862,54188],{"class":72},[33,66864,5469],{"class":47},[33,66866,4551],{"class":39},[33,66868,14682],{"class":47},[33,66870,66871],{"class":35,"line":34859},[33,66872,66873],{"class":2487},"      \u002F\u002F console.log(as[i])\n",[33,66875,66876],{"class":35,"line":34865},[33,66877,66878],{"class":2487},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[33,66880,66881,66884,66886,66888,66891,66893,66895],{"class":35,"line":34871},[33,66882,66883],{"class":47},"      as[i].",[33,66885,60031],{"class":43},[33,66887,133],{"class":47},[33,66889,66890],{"class":60},"'mouseenter'",[33,66892,245],{"class":47},[33,66894,56668],{"class":39},[33,66896,56671],{"class":47},[33,66898,66899],{"class":35,"line":34877},[33,66900,66901],{"class":2487},"        \u002F\u002F console.log('鼠标经过')\n",[33,66903,66904],{"class":35,"line":34883},[33,66905,66906],{"class":2487},"        \u002F\u002F 排他思想  \n",[33,66908,66909],{"class":35,"line":34894},[33,66910,66911],{"class":2487},"        \u002F\u002F 干掉别人 移除类active\n",[33,66913,66914,66916,66918,66920,66923,66925,66927,66929,66932],{"class":35,"line":34900},[33,66915,54145],{"class":47},[33,66917,56618],{"class":43},[33,66919,133],{"class":47},[33,66921,66922],{"class":60},"'.tab-nav .active'",[33,66924,59221],{"class":47},[33,66926,59224],{"class":43},[33,66928,133],{"class":47},[33,66930,66931],{"class":60},"'active'",[33,66933,226],{"class":47},[33,66935,66936],{"class":35,"line":34920},[33,66937,66938],{"class":2487},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[33,66940,66941,66944,66947,66949,66951,66953],{"class":35,"line":34926},[33,66942,66943],{"class":72},"        this",[33,66945,66946],{"class":47},".classList.",[33,66948,7581],{"class":43},[33,66950,133],{"class":47},[33,66952,66931],{"class":60},[33,66954,226],{"class":47},[33,66956,66957],{"class":35,"line":34937},[33,66958,100],{"emptyLinePlaceholder":99},[33,66960,66961],{"class":35,"line":34943},[33,66962,66963],{"class":2487},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[33,66965,66966],{"class":35,"line":34949},[33,66967,66968],{"class":2487},"        \u002F\u002F 干掉别人\n",[33,66970,66971,66973,66975,66977,66980,66982,66984,66986,66988],{"class":35,"line":34955},[33,66972,54145],{"class":47},[33,66974,56618],{"class":43},[33,66976,133],{"class":47},[33,66978,66979],{"class":60},"'.tab-content .active'",[33,66981,59221],{"class":47},[33,66983,59224],{"class":43},[33,66985,133],{"class":47},[33,66987,66931],{"class":60},[33,66989,226],{"class":47},[33,66991,66992],{"class":35,"line":34961},[33,66993,66994],{"class":2487},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[33,66996,66997,66999,67001,67003,67006,67008,67010,67012,67014,67016,67018,67020,67022],{"class":35,"line":34967},[33,66998,54145],{"class":47},[33,67000,56618],{"class":43},[33,67002,133],{"class":47},[33,67004,67005],{"class":60},"`.tab-content .item:nth-child(${",[33,67007,2861],{"class":47},[33,67009,47789],{"class":39},[33,67011,27357],{"class":72},[33,67013,59250],{"class":60},[33,67015,59221],{"class":47},[33,67017,7581],{"class":43},[33,67019,133],{"class":47},[33,67021,66931],{"class":60},[33,67023,226],{"class":47},[33,67025,67026],{"class":35,"line":34973},[33,67027,100],{"emptyLinePlaceholder":99},[33,67029,67030],{"class":35,"line":34979},[33,67031,67032],{"class":47},"      })\n",[33,67034,67035],{"class":35,"line":34999},[33,67036,4446],{"class":47},[33,67038,67039,67041,67043],{"class":35,"line":35005},[33,67040,54636],{"class":47},[33,67042,54034],{"class":53522},[33,67044,53529],{"class":47},[33,67046,67047,67049,67051],{"class":35,"line":35021},[33,67048,54006],{"class":47},[33,67050,54021],{"class":53522},[33,67052,53529],{"class":47},[33,67054,67055],{"class":35,"line":35027},[33,67056,100],{"emptyLinePlaceholder":99},[33,67058,67059,67061,67063],{"class":35,"line":35041},[33,67060,54006],{"class":47},[33,67062,52857],{"class":53522},[33,67064,53529],{"class":47},[19,67066,67067],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,67069,67070],{},"在监听事件中，this指向的就是他的调用者",[19,67072,67073],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,67075,55939],{},[19,67077,67078],{},"(function () {",[19,67080,67081],{},"const list = document.querySelector('.xtx-elevator-list')",[19,67083,67084],{},"list.addEventListener('click', function (e) {",[19,67086,67087],{},"if (e.target.tagName === 'A') {",[19,67089,67090],{},"\u002F\u002F 排他思想",[19,67092,67093],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,67095,67096],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,67098,67099],{},"\u002F\u002F console.log(old);",[19,67101,67102],{},"\u002F\u002F 判断",[19,67104,67105],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,67107,67108],{},"if (old) old.classList.remove('active')",[19,67110,67111],{},"e.target.classList.add('active')",[19,67113,210],{},[19,67115,54683],{},[19,67117,67118],{},"})();",[631,67120,67122],{"id":67121},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[23,67124,67126],{"className":52855,"code":67125,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,67127,67128,67138,67142,67150,67154,67168,67182,67194,67202,67208,67218,67228,67232,67236,67243,67255,67266,67283,67296,67310,67320,67324,67328,67335,67346,67364,67374,67386,67390,67394,67401,67418,67429,67441,67445,67449,67456,67468,67472,67480,67488,67492,67500,67508,67516,67531,67575,67583,67596,67609,67622,67630,67638,67646,67674,67682,67694,67707,67720,67728,67736,67744,67770,67778,67791,67803,67816,67824,67832,67840,67866,67874,67887,67899,67912,67920,67928,67936,67941,67961,67966,67986,67991,68008,68013,68021,68026,68055,68068,68072,68076,68081,68085,68113,68118,68135,68140,68145,68150,68155,68181,68185,68189,68197,68205,68209],{"__ignoreMap":28},[33,67129,67130,67132,67134,67136],{"class":35,"line":36},[33,67131,53519],{"class":47},[33,67133,53523],{"class":53522},[33,67135,53526],{"class":43},[33,67137,53529],{"class":47},[33,67139,67140],{"class":35,"line":51},[33,67141,100],{"emptyLinePlaceholder":99},[33,67143,67144,67146,67148],{"class":35,"line":64},[33,67145,2226],{"class":47},[33,67147,52857],{"class":53522},[33,67149,53529],{"class":47},[33,67151,67152],{"class":35,"line":76},[33,67153,100],{"emptyLinePlaceholder":99},[33,67155,67156,67158,67160,67162,67164,67166],{"class":35,"line":87},[33,67157,2226],{"class":47},[33,67159,53556],{"class":53522},[33,67161,53538],{"class":43},[33,67163,57],{"class":47},[33,67165,53543],{"class":60},[33,67167,53529],{"class":47},[33,67169,67170,67172,67174,67176,67178,67180],{"class":35,"line":96},[33,67171,54364],{"class":47},[33,67173,53566],{"class":53522},[33,67175,53569],{"class":43},[33,67177,57],{"class":47},[33,67179,53574],{"class":60},[33,67181,53529],{"class":47},[33,67183,67184,67186,67188,67190,67192],{"class":35,"line":103},[33,67185,54364],{"class":47},[33,67187,53629],{"class":53522},[33,67189,57533],{"class":47},[33,67191,53629],{"class":53522},[33,67193,53529],{"class":47},[33,67195,67196,67198,67200],{"class":35,"line":108},[33,67197,54364],{"class":47},[33,67199,2331],{"class":53522},[33,67201,53529],{"class":47},[33,67203,67204,67206],{"class":35,"line":119},[33,67205,8649],{"class":53522},[33,67207,17810],{"class":47},[33,67209,67210,67212,67214,67216],{"class":35,"line":128},[33,67211,56925],{"class":72},[33,67213,996],{"class":47},[33,67215,2617],{"class":72},[33,67217,3567],{"class":47},[33,67219,67220,67222,67224,67226],{"class":35,"line":1753},[33,67221,56914],{"class":72},[33,67223,996],{"class":47},[33,67225,2617],{"class":72},[33,67227,3567],{"class":47},[33,67229,67230],{"class":35,"line":1763},[33,67231,4446],{"class":47},[33,67233,67234],{"class":35,"line":1775},[33,67235,100],{"emptyLinePlaceholder":99},[33,67237,67238,67241],{"class":35,"line":1780},[33,67239,67240],{"class":53522},"    table",[33,67242,17810],{"class":47},[33,67244,67245,67248,67250,67253],{"class":35,"line":1785},[33,67246,67247],{"class":72},"      border-collapse",[33,67249,996],{"class":47},[33,67251,67252],{"class":72},"collapse",[33,67254,3567],{"class":47},[33,67256,67257,67260,67262,67264],{"class":35,"line":1940},[33,67258,67259],{"class":72},"      border-spacing",[33,67261,996],{"class":47},[33,67263,2617],{"class":72},[33,67265,3567],{"class":47},[33,67267,67268,67270,67272,67274,67276,67278,67281],{"class":35,"line":2183},[33,67269,64195],{"class":72},[33,67271,996],{"class":47},[33,67273,720],{"class":72},[33,67275,53713],{"class":39},[33,67277,53742],{"class":72},[33,67279,67280],{"class":72}," #c0c0c0",[33,67282,3567],{"class":47},[33,67284,67285,67287,67289,67292,67294],{"class":35,"line":2208},[33,67286,56990],{"class":72},[33,67288,996],{"class":47},[33,67290,67291],{"class":72},"500",[33,67293,53713],{"class":39},[33,67295,3567],{"class":47},[33,67297,67298,67300,67302,67304,67306,67308],{"class":35,"line":2234},[33,67299,56925],{"class":72},[33,67301,996],{"class":47},[33,67303,2734],{"class":72},[33,67305,53713],{"class":39},[33,67307,53777],{"class":72},[33,67309,3567],{"class":47},[33,67311,67312,67314,67316,67318],{"class":35,"line":2239},[33,67313,59504],{"class":72},[33,67315,996],{"class":47},[33,67317,53813],{"class":72},[33,67319,3567],{"class":47},[33,67321,67322],{"class":35,"line":2247},[33,67323,4446],{"class":47},[33,67325,67326],{"class":35,"line":2255},[33,67327,100],{"emptyLinePlaceholder":99},[33,67329,67330,67333],{"class":35,"line":3992},[33,67331,67332],{"class":53522},"    th",[33,67334,17810],{"class":47},[33,67336,67337,67339,67341,67344],{"class":35,"line":4009},[33,67338,57103],{"class":72},[33,67340,996],{"class":47},[33,67342,67343],{"class":72},"#09c",[33,67345,3567],{"class":47},[33,67347,67348,67351,67353,67355,67357,67359,67362],{"class":35,"line":4014},[33,67349,67350],{"class":72},"      font",[33,67352,996],{"class":47},[33,67354,64557],{"class":72},[33,67356,66290],{"class":72},[33,67358,53713],{"class":39},[33,67360,67361],{"class":60}," \"微软雅黑\"",[33,67363,3567],{"class":47},[33,67365,67366,67368,67370,67372],{"class":35,"line":4019},[33,67367,59634],{"class":72},[33,67369,996],{"class":47},[33,67371,63060],{"class":72},[33,67373,3567],{"class":47},[33,67375,67376,67378,67380,67382,67384],{"class":35,"line":4024},[33,67377,57004],{"class":72},[33,67379,996],{"class":47},[33,67381,3213],{"class":72},[33,67383,53713],{"class":39},[33,67385,3567],{"class":47},[33,67387,67388],{"class":35,"line":4038},[33,67389,4446],{"class":47},[33,67391,67392],{"class":35,"line":4043},[33,67393,100],{"emptyLinePlaceholder":99},[33,67395,67396,67399],{"class":35,"line":4834},[33,67397,67398],{"class":53522},"    td",[33,67400,17810],{"class":47},[33,67402,67403,67405,67407,67409,67411,67413,67416],{"class":35,"line":4848},[33,67404,64195],{"class":72},[33,67406,996],{"class":47},[33,67408,720],{"class":72},[33,67410,53713],{"class":39},[33,67412,53742],{"class":72},[33,67414,67415],{"class":72}," #d0d0d0",[33,67417,3567],{"class":47},[33,67419,67420,67422,67424,67427],{"class":35,"line":4856},[33,67421,59634],{"class":72},[33,67423,996],{"class":47},[33,67425,67426],{"class":72},"#404060",[33,67428,3567],{"class":47},[33,67430,67431,67433,67435,67437,67439],{"class":35,"line":4861},[33,67432,56914],{"class":72},[33,67434,996],{"class":47},[33,67436,1279],{"class":72},[33,67438,53713],{"class":39},[33,67440,3567],{"class":47},[33,67442,67443],{"class":35,"line":4867},[33,67444,4446],{"class":47},[33,67446,67447],{"class":35,"line":4873},[33,67448,100],{"emptyLinePlaceholder":99},[33,67450,67451,67454],{"class":35,"line":4878},[33,67452,67453],{"class":43},"    .allCheck",[33,67455,17810],{"class":47},[33,67457,67458,67460,67462,67464,67466],{"class":35,"line":10194},[33,67459,56990],{"class":72},[33,67461,996],{"class":47},[33,67463,3029],{"class":72},[33,67465,53713],{"class":39},[33,67467,3567],{"class":47},[33,67469,67470],{"class":35,"line":10218},[33,67471,4446],{"class":47},[33,67473,67474,67476,67478],{"class":35,"line":10223},[33,67475,54636],{"class":47},[33,67477,2331],{"class":53522},[33,67479,53529],{"class":47},[33,67481,67482,67484,67486],{"class":35,"line":10229},[33,67483,54006],{"class":47},[33,67485,53556],{"class":53522},[33,67487,53529],{"class":47},[33,67489,67490],{"class":35,"line":10256},[33,67491,100],{"emptyLinePlaceholder":99},[33,67493,67494,67496,67498],{"class":35,"line":10261},[33,67495,2226],{"class":47},[33,67497,54021],{"class":53522},[33,67499,53529],{"class":47},[33,67501,67502,67504,67506],{"class":35,"line":10267},[33,67503,54364],{"class":47},[33,67505,2563],{"class":53522},[33,67507,53529],{"class":47},[33,67509,67510,67512,67514],{"class":35,"line":10279},[33,67511,53563],{"class":47},[33,67513,2569],{"class":53522},[33,67515,53529],{"class":47},[33,67517,67518,67520,67522,67524,67526,67529],{"class":35,"line":10291},[33,67519,57453],{"class":47},[33,67521,2572],{"class":53522},[33,67523,55705],{"class":43},[33,67525,57],{"class":47},[33,67527,67528],{"class":60},"\"allCheck\"",[33,67530,53529],{"class":47},[33,67532,67533,67535,67537,67539,67541,67543,67545,67547,67549,67551,67553,67556,67559,67561,67563,67565,67568,67571,67573],{"class":35,"line":10303},[33,67534,57521],{"class":47},[33,67536,56040],{"class":53522},[33,67538,56043],{"class":43},[33,67540,57],{"class":47},[33,67542,56048],{"class":60},[33,67544,17158],{"class":43},[33,67546,57],{"class":47},[33,67548,9898],{"class":60},[33,67550,17197],{"class":43},[33,67552,57],{"class":47},[33,67554,67555],{"class":60},"\"checkAll\"",[33,67557,67558],{"class":47},"> \u003C",[33,67560,33],{"class":53522},[33,67562,55705],{"class":43},[33,67564,57],{"class":47},[33,67566,67567],{"class":60},"\"all\"",[33,67569,67570],{"class":47},">全选\u003C\u002F",[33,67572,33],{"class":53522},[33,67574,53529],{"class":47},[33,67576,67577,67579,67581],{"class":35,"line":11961},[33,67578,57626],{"class":47},[33,67580,2572],{"class":53522},[33,67582,53529],{"class":47},[33,67584,67585,67587,67589,67592,67594],{"class":35,"line":11986},[33,67586,57453],{"class":47},[33,67588,2572],{"class":53522},[33,67590,67591],{"class":47},">商品\u003C\u002F",[33,67593,2572],{"class":53522},[33,67595,53529],{"class":47},[33,67597,67598,67600,67602,67605,67607],{"class":35,"line":12009},[33,67599,57453],{"class":47},[33,67601,2572],{"class":53522},[33,67603,67604],{"class":47},">商家\u003C\u002F",[33,67606,2572],{"class":53522},[33,67608,53529],{"class":47},[33,67610,67611,67613,67615,67618,67620],{"class":35,"line":12033},[33,67612,57453],{"class":47},[33,67614,2572],{"class":53522},[33,67616,67617],{"class":47},">价格\u003C\u002F",[33,67619,2572],{"class":53522},[33,67621,53529],{"class":47},[33,67623,67624,67626,67628],{"class":35,"line":12038},[33,67625,53997],{"class":47},[33,67627,2569],{"class":53522},[33,67629,53529],{"class":47},[33,67631,67632,67634,67636],{"class":35,"line":12043},[33,67633,53563],{"class":47},[33,67635,2569],{"class":53522},[33,67637,53529],{"class":47},[33,67639,67640,67642,67644],{"class":35,"line":12048},[33,67641,57453],{"class":47},[33,67643,2615],{"class":53522},[33,67645,53529],{"class":47},[33,67647,67648,67650,67652,67654,67656,67658,67660,67662,67665,67667,67669,67672],{"class":35,"line":12057},[33,67649,57521],{"class":47},[33,67651,56040],{"class":53522},[33,67653,56043],{"class":43},[33,67655,57],{"class":47},[33,67657,56048],{"class":60},[33,67659,17158],{"class":43},[33,67661,57],{"class":47},[33,67663,67664],{"class":60},"\"check\"",[33,67666,55705],{"class":43},[33,67668,57],{"class":47},[33,67670,67671],{"class":60},"\"ck\"",[33,67673,53529],{"class":47},[33,67675,67676,67678,67680],{"class":35,"line":12062},[33,67677,57626],{"class":47},[33,67679,2615],{"class":53522},[33,67681,53529],{"class":47},[33,67683,67684,67686,67688,67690,67692],{"class":35,"line":12068},[33,67685,57453],{"class":47},[33,67687,2615],{"class":53522},[33,67689,63391],{"class":47},[33,67691,2615],{"class":53522},[33,67693,53529],{"class":47},[33,67695,67696,67698,67700,67703,67705],{"class":35,"line":12089},[33,67697,57453],{"class":47},[33,67699,2615],{"class":53522},[33,67701,67702],{"class":47},">小米\u003C\u002F",[33,67704,2615],{"class":53522},[33,67706,53529],{"class":47},[33,67708,67709,67711,67713,67716,67718],{"class":35,"line":12095},[33,67710,57453],{"class":47},[33,67712,2615],{"class":53522},[33,67714,67715],{"class":47},">￥1999\u003C\u002F",[33,67717,2615],{"class":53522},[33,67719,53529],{"class":47},[33,67721,67722,67724,67726],{"class":35,"line":12109},[33,67723,53997],{"class":47},[33,67725,2569],{"class":53522},[33,67727,53529],{"class":47},[33,67729,67730,67732,67734],{"class":35,"line":12115},[33,67731,53563],{"class":47},[33,67733,2569],{"class":53522},[33,67735,53529],{"class":47},[33,67737,67738,67740,67742],{"class":35,"line":12142},[33,67739,57453],{"class":47},[33,67741,2615],{"class":53522},[33,67743,53529],{"class":47},[33,67745,67746,67748,67750,67752,67754,67756,67758,67760,67762,67764,67766,67768],{"class":35,"line":12151},[33,67747,57521],{"class":47},[33,67749,56040],{"class":53522},[33,67751,56043],{"class":43},[33,67753,57],{"class":47},[33,67755,56048],{"class":60},[33,67757,17158],{"class":43},[33,67759,57],{"class":47},[33,67761,67664],{"class":60},[33,67763,55705],{"class":43},[33,67765,57],{"class":47},[33,67767,67671],{"class":60},[33,67769,53529],{"class":47},[33,67771,67772,67774,67776],{"class":35,"line":12157},[33,67773,57626],{"class":47},[33,67775,2615],{"class":53522},[33,67777,53529],{"class":47},[33,67779,67780,67782,67784,67787,67789],{"class":35,"line":12165},[33,67781,57453],{"class":47},[33,67783,2615],{"class":53522},[33,67785,67786],{"class":47},">小米净水器\u003C\u002F",[33,67788,2615],{"class":53522},[33,67790,53529],{"class":47},[33,67792,67793,67795,67797,67799,67801],{"class":35,"line":12170},[33,67794,57453],{"class":47},[33,67796,2615],{"class":53522},[33,67798,67702],{"class":47},[33,67800,2615],{"class":53522},[33,67802,53529],{"class":47},[33,67804,67805,67807,67809,67812,67814],{"class":35,"line":18842},[33,67806,57453],{"class":47},[33,67808,2615],{"class":53522},[33,67810,67811],{"class":47},">￥4999\u003C\u002F",[33,67813,2615],{"class":53522},[33,67815,53529],{"class":47},[33,67817,67818,67820,67822],{"class":35,"line":18848},[33,67819,53997],{"class":47},[33,67821,2569],{"class":53522},[33,67823,53529],{"class":47},[33,67825,67826,67828,67830],{"class":35,"line":18871},[33,67827,53563],{"class":47},[33,67829,2569],{"class":53522},[33,67831,53529],{"class":47},[33,67833,67834,67836,67838],{"class":35,"line":18877},[33,67835,57453],{"class":47},[33,67837,2615],{"class":53522},[33,67839,53529],{"class":47},[33,67841,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864],{"class":35,"line":18900},[33,67843,57521],{"class":47},[33,67845,56040],{"class":53522},[33,67847,56043],{"class":43},[33,67849,57],{"class":47},[33,67851,56048],{"class":60},[33,67853,17158],{"class":43},[33,67855,57],{"class":47},[33,67857,67664],{"class":60},[33,67859,55705],{"class":43},[33,67861,57],{"class":47},[33,67863,67671],{"class":60},[33,67865,53529],{"class":47},[33,67867,67868,67870,67872],{"class":35,"line":18914},[33,67869,57626],{"class":47},[33,67871,2615],{"class":53522},[33,67873,53529],{"class":47},[33,67875,67876,67878,67880,67883,67885],{"class":35,"line":18934},[33,67877,57453],{"class":47},[33,67879,2615],{"class":53522},[33,67881,67882],{"class":47},">小米电视\u003C\u002F",[33,67884,2615],{"class":53522},[33,67886,53529],{"class":47},[33,67888,67889,67891,67893,67895,67897],{"class":35,"line":18940},[33,67890,57453],{"class":47},[33,67892,2615],{"class":53522},[33,67894,67702],{"class":47},[33,67896,2615],{"class":53522},[33,67898,53529],{"class":47},[33,67900,67901,67903,67905,67908,67910],{"class":35,"line":18951},[33,67902,57453],{"class":47},[33,67904,2615],{"class":53522},[33,67906,67907],{"class":47},">￥5999\u003C\u002F",[33,67909,2615],{"class":53522},[33,67911,53529],{"class":47},[33,67913,67914,67916,67918],{"class":35,"line":18974},[33,67915,53997],{"class":47},[33,67917,2569],{"class":53522},[33,67919,53529],{"class":47},[33,67921,67922,67924,67926],{"class":35,"line":18996},[33,67923,54636],{"class":47},[33,67925,2563],{"class":53522},[33,67927,53529],{"class":47},[33,67929,67930,67932,67934],{"class":35,"line":19001},[33,67931,54364],{"class":47},[33,67933,54034],{"class":53522},[33,67935,53529],{"class":47},[33,67937,67938],{"class":35,"line":19007},[33,67939,67940],{"class":2487},"    \u002F\u002F 1. 获取大复选框\n",[33,67942,67943,67945,67948,67950,67952,67954,67956,67959],{"class":35,"line":19021},[33,67944,13462],{"class":39},[33,67946,67947],{"class":72}," checkAll",[33,67949,15804],{"class":39},[33,67951,56615],{"class":47},[33,67953,56618],{"class":43},[33,67955,133],{"class":47},[33,67957,67958],{"class":60},"'#checkAll'",[33,67960,226],{"class":47},[33,67962,67963],{"class":35,"line":19034},[33,67964,67965],{"class":2487},"    \u002F\u002F 2. 获取所有的小复选框\n",[33,67967,67968,67970,67973,67975,67977,67979,67981,67984],{"class":35,"line":19039},[33,67969,13462],{"class":39},[33,67971,67972],{"class":72}," cks",[33,67974,15804],{"class":39},[33,67976,56615],{"class":47},[33,67978,57899],{"class":43},[33,67980,133],{"class":47},[33,67982,67983],{"class":60},"'.ck'",[33,67985,226],{"class":47},[33,67987,67988],{"class":35,"line":19053},[33,67989,67990],{"class":2487},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[33,67992,67993,67996,67998,68000,68002,68004,68006],{"class":35,"line":19058},[33,67994,67995],{"class":47},"    checkAll.",[33,67997,60031],{"class":43},[33,67999,133],{"class":47},[33,68001,60036],{"class":60},[33,68003,245],{"class":47},[33,68005,56668],{"class":39},[33,68007,56671],{"class":47},[33,68009,68010],{"class":35,"line":19064},[33,68011,68012],{"class":2487},"      \u002F\u002F 得到当前大复选框的选中状态\n",[33,68014,68015,68018],{"class":35,"line":19069},[33,68016,68017],{"class":2487},"      \u002F\u002F console.log(checkAll.checked)",[33,68019,68020],{"class":2487},"  \u002F\u002F 得到 是 true 或者是 false\n",[33,68022,68023],{"class":35,"line":19083},[33,68024,68025],{"class":2487},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[33,68027,68028,68030,68032,68034,68036,68038,68040,68042,68044,68047,68049,68051,68053],{"class":35,"line":19088},[33,68029,54503],{"class":39},[33,68031,3924],{"class":47},[33,68033,54067],{"class":39},[33,68035,11684],{"class":47},[33,68037,57],{"class":39},[33,68039,1437],{"class":72},[33,68041,11691],{"class":47},[33,68043,2226],{"class":39},[33,68045,68046],{"class":47}," cks.",[33,68048,54188],{"class":72},[33,68050,5469],{"class":47},[33,68052,4551],{"class":39},[33,68054,14682],{"class":47},[33,68056,68057,68060,68062,68065],{"class":35,"line":19093},[33,68058,68059],{"class":47},"        cks[i].checked ",[33,68061,57],{"class":39},[33,68063,68064],{"class":72}," this",[33,68066,68067],{"class":47},".checked\n",[33,68069,68070],{"class":35,"line":19107},[33,68071,54617],{"class":47},[33,68073,68074],{"class":35,"line":19119},[33,68075,35686],{"class":47},[33,68077,68078],{"class":35,"line":19124},[33,68079,68080],{"class":2487},"    \u002F\u002F 5. 小复选框控制大复选框\n",[33,68082,68083],{"class":35,"line":19137},[33,68084,100],{"emptyLinePlaceholder":99},[33,68086,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109,68111],{"class":35,"line":19142},[33,68088,675],{"class":39},[33,68090,3924],{"class":47},[33,68092,54067],{"class":39},[33,68094,11684],{"class":47},[33,68096,57],{"class":39},[33,68098,1437],{"class":72},[33,68100,11691],{"class":47},[33,68102,2226],{"class":39},[33,68104,68046],{"class":47},[33,68106,54188],{"class":72},[33,68108,5469],{"class":47},[33,68110,4551],{"class":39},[33,68112,14682],{"class":47},[33,68114,68115],{"class":35,"line":19147},[33,68116,68117],{"class":2487},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[33,68119,68120,68123,68125,68127,68129,68131,68133],{"class":35,"line":19152},[33,68121,68122],{"class":47},"      cks[i].",[33,68124,60031],{"class":43},[33,68126,133],{"class":47},[33,68128,60036],{"class":60},[33,68130,245],{"class":47},[33,68132,56668],{"class":39},[33,68134,56671],{"class":47},[33,68136,68137],{"class":35,"line":19165},[33,68138,68139],{"class":2487},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[33,68141,68142],{"class":35,"line":19170},[33,68143,68144],{"class":2487},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[33,68146,68147],{"class":35,"line":34859},[33,68148,68149],{"class":2487},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[33,68151,68152],{"class":35,"line":34865},[33,68153,68154],{"class":2487},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[33,68156,68157,68160,68162,68164,68166,68168,68171,68173,68175,68177,68179],{"class":35,"line":34871},[33,68158,68159],{"class":47},"        checkAll.checked ",[33,68161,57],{"class":39},[33,68163,56615],{"class":47},[33,68165,57899],{"class":43},[33,68167,133],{"class":47},[33,68169,68170],{"class":60},"'.ck:checked'",[33,68172,33057],{"class":47},[33,68174,54188],{"class":72},[33,68176,60124],{"class":39},[33,68178,68046],{"class":47},[33,68180,58049],{"class":72},[33,68182,68183],{"class":35,"line":34877},[33,68184,67032],{"class":47},[33,68186,68187],{"class":35,"line":34883},[33,68188,4446],{"class":47},[33,68190,68191,68193,68195],{"class":35,"line":34894},[33,68192,54636],{"class":47},[33,68194,54034],{"class":53522},[33,68196,53529],{"class":47},[33,68198,68199,68201,68203],{"class":35,"line":34900},[33,68200,54006],{"class":47},[33,68202,54021],{"class":53522},[33,68204,53529],{"class":47},[33,68206,68207],{"class":35,"line":34920},[33,68208,100],{"emptyLinePlaceholder":99},[33,68210,68211,68213,68215],{"class":35,"line":34926},[33,68212,54006],{"class":47},[33,68214,52857],{"class":53522},[33,68216,53529],{"class":47},[19,68218,68219],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,68221,68222],{},"用好之间比较得到的布尔值！！！",[19,68224,68225,68226,68229,68230,3924,68233,3001,68235,68238],{},"在 JS 里访问的时候，",[30,68227,68228],{},"checkbox.checked"," 是一个 ",[2575,68231,68232],{},"布尔值",[30,68234,3636],{},[30,68236,68237],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,68240,68241,68242,68245,68246],{},"HTML 的 ",[30,68243,68244],{},"checked=\"checked\""," 只是 ",[2575,68247,68248,68249,68252],{},"初始值；JS 的 ",[30,68250,68251],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,68254,68255],{},"：checked是一个伪类选择器",[19,68257,68258],{},[3736,68259],{"alt":28,"src":68260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,68262,68263,68266],{},[68264,68265],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,68268,68269],{},[3736,68270],{"alt":28,"src":68271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,68273,68275],{"id":68274},"_33-dom事件进阶","3.3 DOM事件进阶",[631,68277,68279],{"id":68278},"_331-事件流","3.3.1 事件流",[19,68281,68282],{},[3736,68283],{"alt":28,"src":68284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[24236,68286,68288],{"id":68287},"_3311-事件捕获","3.3.1.1 事件捕获",[19,68290,68291],{},[3736,68292],{"alt":28,"src":68293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[23,68295,68297],{"className":52855,"code":68296,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,68298,68299,68309,68323,68327,68335,68349,68369,68381,68389,68396,68408,68420,68430,68434,68438,68445,68457,68469,68479,68483,68491,68499,68503,68511,68526,68545,68553,68561,68581,68601,68617,68628,68636,68653,68664,68672,68689,68700,68708,68716,68724,68728],{"__ignoreMap":28},[33,68300,68301,68303,68305,68307],{"class":35,"line":36},[33,68302,53519],{"class":47},[33,68304,53523],{"class":53522},[33,68306,53526],{"class":43},[33,68308,53529],{"class":47},[33,68310,68311,68313,68315,68317,68319,68321],{"class":35,"line":51},[33,68312,2226],{"class":47},[33,68314,52857],{"class":53522},[33,68316,53538],{"class":43},[33,68318,57],{"class":47},[33,68320,53543],{"class":60},[33,68322,53529],{"class":47},[33,68324,68325],{"class":35,"line":64},[33,68326,100],{"emptyLinePlaceholder":99},[33,68328,68329,68331,68333],{"class":35,"line":76},[33,68330,2226],{"class":47},[33,68332,53556],{"class":53522},[33,68334,53529],{"class":47},[33,68336,68337,68339,68341,68343,68345,68347],{"class":35,"line":87},[33,68338,54364],{"class":47},[33,68340,53566],{"class":53522},[33,68342,53569],{"class":43},[33,68344,57],{"class":47},[33,68346,53574],{"class":60},[33,68348,53529],{"class":47},[33,68350,68351,68353,68355,68357,68359,68361,68363,68365,68367],{"class":35,"line":96},[33,68352,54364],{"class":47},[33,68354,53566],{"class":53522},[33,68356,17158],{"class":43},[33,68358,57],{"class":47},[33,68360,53613],{"class":60},[33,68362,53593],{"class":43},[33,68364,57],{"class":47},[33,68366,53620],{"class":60},[33,68368,53529],{"class":47},[33,68370,68371,68373,68375,68377,68379],{"class":35,"line":103},[33,68372,54364],{"class":47},[33,68374,53629],{"class":53522},[33,68376,53632],{"class":47},[33,68378,53629],{"class":53522},[33,68380,53529],{"class":47},[33,68382,68383,68385,68387],{"class":35,"line":108},[33,68384,54364],{"class":47},[33,68386,2331],{"class":53522},[33,68388,53529],{"class":47},[33,68390,68391,68394],{"class":35,"line":119},[33,68392,68393],{"class":43},"    .father",[33,68395,17810],{"class":47},[33,68397,68398,68400,68402,68404,68406],{"class":35,"line":128},[33,68399,56990],{"class":72},[33,68401,996],{"class":47},[33,68403,67291],{"class":72},[33,68405,53713],{"class":39},[33,68407,3567],{"class":47},[33,68409,68410,68412,68414,68416,68418],{"class":35,"line":1753},[33,68411,57004],{"class":72},[33,68413,996],{"class":47},[33,68415,67291],{"class":72},[33,68417,53713],{"class":39},[33,68419,3567],{"class":47},[33,68421,68422,68424,68426,68428],{"class":35,"line":1763},[33,68423,57103],{"class":72},[33,68425,996],{"class":47},[33,68427,53866],{"class":72},[33,68429,3567],{"class":47},[33,68431,68432],{"class":35,"line":1775},[33,68433,4446],{"class":47},[33,68435,68436],{"class":35,"line":1780},[33,68437,100],{"emptyLinePlaceholder":99},[33,68439,68440,68443],{"class":35,"line":1785},[33,68441,68442],{"class":43},"    .son",[33,68444,17810],{"class":47},[33,68446,68447,68449,68451,68453,68455],{"class":35,"line":1940},[33,68448,56990],{"class":72},[33,68450,996],{"class":47},[33,68452,3983],{"class":72},[33,68454,53713],{"class":39},[33,68456,3567],{"class":47},[33,68458,68459,68461,68463,68465,68467],{"class":35,"line":2183},[33,68460,57004],{"class":72},[33,68462,996],{"class":47},[33,68464,3983],{"class":72},[33,68466,53713],{"class":39},[33,68468,3567],{"class":47},[33,68470,68471,68473,68475,68477],{"class":35,"line":2208},[33,68472,57103],{"class":72},[33,68474,996],{"class":47},[33,68476,57108],{"class":72},[33,68478,3567],{"class":47},[33,68480,68481],{"class":35,"line":2234},[33,68482,4446],{"class":47},[33,68484,68485,68487,68489],{"class":35,"line":2239},[33,68486,54636],{"class":47},[33,68488,2331],{"class":53522},[33,68490,53529],{"class":47},[33,68492,68493,68495,68497],{"class":35,"line":2247},[33,68494,54006],{"class":47},[33,68496,53556],{"class":53522},[33,68498,53529],{"class":47},[33,68500,68501],{"class":35,"line":2255},[33,68502,100],{"emptyLinePlaceholder":99},[33,68504,68505,68507,68509],{"class":35,"line":3992},[33,68506,2226],{"class":47},[33,68508,54021],{"class":53522},[33,68510,53529],{"class":47},[33,68512,68513,68515,68517,68519,68521,68524],{"class":35,"line":4009},[33,68514,54364],{"class":47},[33,68516,53832],{"class":53522},[33,68518,55705],{"class":43},[33,68520,57],{"class":47},[33,68522,68523],{"class":60},"\"father\"",[33,68525,53529],{"class":47},[33,68527,68528,68530,68532,68534,68536,68539,68541,68543],{"class":35,"line":4014},[33,68529,53563],{"class":47},[33,68531,53832],{"class":53522},[33,68533,55705],{"class":43},[33,68535,57],{"class":47},[33,68537,68538],{"class":60},"\"son\"",[33,68540,57533],{"class":47},[33,68542,53832],{"class":53522},[33,68544,53529],{"class":47},[33,68546,68547,68549,68551],{"class":35,"line":4019},[33,68548,54636],{"class":47},[33,68550,53832],{"class":53522},[33,68552,53529],{"class":47},[33,68554,68555,68557,68559],{"class":35,"line":4024},[33,68556,54364],{"class":47},[33,68558,54034],{"class":53522},[33,68560,53529],{"class":47},[33,68562,68563,68565,68568,68570,68572,68574,68576,68579],{"class":35,"line":4038},[33,68564,13462],{"class":39},[33,68566,68567],{"class":72}," fa",[33,68569,15804],{"class":39},[33,68571,56615],{"class":47},[33,68573,56618],{"class":43},[33,68575,133],{"class":47},[33,68577,68578],{"class":60},"'.father'",[33,68580,226],{"class":47},[33,68582,68583,68585,68588,68590,68592,68594,68596,68599],{"class":35,"line":4043},[33,68584,13462],{"class":39},[33,68586,68587],{"class":72}," son",[33,68589,15804],{"class":39},[33,68591,56615],{"class":47},[33,68593,56618],{"class":43},[33,68595,133],{"class":47},[33,68597,68598],{"class":60},"'.son'",[33,68600,226],{"class":47},[33,68602,68603,68605,68607,68609,68611,68613,68615],{"class":35,"line":4834},[33,68604,54626],{"class":47},[33,68606,60031],{"class":43},[33,68608,133],{"class":47},[33,68610,60036],{"class":60},[33,68612,245],{"class":47},[33,68614,56668],{"class":39},[33,68616,56671],{"class":47},[33,68618,68619,68621,68623,68626],{"class":35,"line":4848},[33,68620,61143],{"class":43},[33,68622,133],{"class":47},[33,68624,68625],{"class":60},"'woshiu1'",[33,68627,226],{"class":47},[33,68629,68630,68632,68634],{"class":35,"line":4856},[33,68631,56754],{"class":47},[33,68633,3636],{"class":72},[33,68635,226],{"class":47},[33,68637,68638,68641,68643,68645,68647,68649,68651],{"class":35,"line":4861},[33,68639,68640],{"class":47},"    fa.",[33,68642,60031],{"class":43},[33,68644,133],{"class":47},[33,68646,60036],{"class":60},[33,68648,245],{"class":47},[33,68650,56668],{"class":39},[33,68652,56671],{"class":47},[33,68654,68655,68657,68659,68662],{"class":35,"line":4867},[33,68656,61143],{"class":43},[33,68658,133],{"class":47},[33,68660,68661],{"class":60},"'1'",[33,68663,226],{"class":47},[33,68665,68666,68668,68670],{"class":35,"line":4873},[33,68667,56754],{"class":47},[33,68669,3636],{"class":72},[33,68671,226],{"class":47},[33,68673,68674,68677,68679,68681,68683,68685,68687],{"class":35,"line":4878},[33,68675,68676],{"class":47},"    son.",[33,68678,60031],{"class":43},[33,68680,133],{"class":47},[33,68682,60036],{"class":60},[33,68684,245],{"class":47},[33,68686,56668],{"class":39},[33,68688,56671],{"class":47},[33,68690,68691,68693,68695,68698],{"class":35,"line":10194},[33,68692,61143],{"class":43},[33,68694,133],{"class":47},[33,68696,68697],{"class":60},"'2'",[33,68699,226],{"class":47},[33,68701,68702,68704,68706],{"class":35,"line":10218},[33,68703,56754],{"class":47},[33,68705,3636],{"class":72},[33,68707,226],{"class":47},[33,68709,68710,68712,68714],{"class":35,"line":10223},[33,68711,54636],{"class":47},[33,68713,54034],{"class":53522},[33,68715,53529],{"class":47},[33,68717,68718,68720,68722],{"class":35,"line":10229},[33,68719,54006],{"class":47},[33,68721,54021],{"class":53522},[33,68723,53529],{"class":47},[33,68725,68726],{"class":35,"line":10256},[33,68727,100],{"emptyLinePlaceholder":99},[33,68729,68730,68732,68734],{"class":35,"line":10261},[33,68731,54006],{"class":47},[33,68733,52857],{"class":53522},[33,68735,53529],{"class":47},[19,68737,68738],{},[3736,68739],{"alt":28,"src":68740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68742,68743],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[24236,68745,68747],{"id":68746},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68749,68750],{},[3736,68751],{"alt":28,"src":68752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68754,68755],{},"反着来",[19,68757,68758],{},"注意是同名事件，比如都是‘click’",[24236,68760,68762],{"id":68761},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68764,68765],{},[3736,68766],{"alt":28,"src":68767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[24236,68769,68771],{"id":68770},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68773,68774],{},[3736,68775],{"alt":28,"src":68776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68778,68779],{},[3736,68780],{"alt":28,"src":68781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[24236,68783,68785],{"id":68784},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[328,68787,68788],{},[331,68789,68790],{},"事件类型的区别",[19,68792,68793],{},[3736,68794],{"alt":28,"src":68795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68797,68798],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[328,68800,68801],{"start":51},[331,68802,68803],{},"注册事件的区别",[19,68805,68806],{},[3736,68807],{"alt":28,"src":68808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[24236,68810,68812],{"id":68811},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68814,68815],{},[3736,68816],{"alt":28,"src":68817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68819,68820],{},[3736,68821],{"alt":28,"src":68822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[23,68824,68826],{"className":55286,"code":68825,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[30,68827,68828,68836,68853,68876,68884,68889,68894,68899,68903,68911,68919],{"__ignoreMap":28},[33,68829,68830,68832,68834],{"class":35,"line":36},[33,68831,2226],{"class":47},[33,68833,54021],{"class":53522},[33,68835,53529],{"class":47},[33,68837,68838,68840,68843,68846,68848,68851],{"class":35,"line":51},[33,68839,54364],{"class":47},[33,68841,68842],{"class":53522},"form",[33,68844,68845],{"class":43}," action",[33,68847,57],{"class":47},[33,68849,68850],{"class":60},"\"http:\u002F\u002Fwww.itcast.cn\"",[33,68852,53529],{"class":47},[33,68854,68855,68857,68859,68861,68863,68866,68869,68871,68874],{"class":35,"line":64},[33,68856,53563],{"class":47},[33,68858,56040],{"class":53522},[33,68860,56043],{"class":43},[33,68862,57],{"class":47},[33,68864,68865],{"class":60},"\"submit\"",[33,68867,68868],{"class":43}," value",[33,68870,57],{"class":47},[33,68872,68873],{"class":60},"\"免费注册\"",[33,68875,53529],{"class":47},[33,68877,68878,68880,68882],{"class":35,"line":76},[33,68879,53563],{"class":47},[33,68881,54034],{"class":53522},[33,68883,53529],{"class":47},[33,68885,68886],{"class":35,"line":87},[33,68887,68888],{"class":47},"      const form = document.querySelector('form')\n",[33,68890,68891],{"class":35,"line":96},[33,68892,68893],{"class":47},"      form.addEventListener('submit', function (e) {\n",[33,68895,68896],{"class":35,"line":103},[33,68897,68898],{"class":47},"        e.preventDefault()\n",[33,68900,68901],{"class":35,"line":108},[33,68902,67032],{"class":47},[33,68904,68905,68907,68909],{"class":35,"line":119},[33,68906,53997],{"class":47},[33,68908,54034],{"class":53522},[33,68910,53529],{"class":47},[33,68912,68913,68915,68917],{"class":35,"line":128},[33,68914,54636],{"class":47},[33,68916,68842],{"class":53522},[33,68918,53529],{"class":47},[33,68920,68921,68923,68925],{"class":35,"line":1753},[33,68922,54006],{"class":47},[33,68924,54021],{"class":53522},[33,68926,53529],{"class":47},[19,68928,68929],{},"点击不在跳转！！！",[631,68931,68933],{"id":68932},"_332-事件委托","3.3.2 事件委托",[19,68935,68936],{},[3736,68937],{"alt":28,"src":68938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[23,68940,68942],{"className":52855,"code":68941,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,68943,68944,68954,68968,68972,68980,68994,69014,69026,69034,69038,69046,69054,69066,69078,69090,69102,69114,69127,69135,69143,69148,69167,69188,69193,69198,69203,69208,69217,69221,69231,69235,69240,69245,69259,69269,69273,69277,69285,69293,69297],{"__ignoreMap":28},[33,68945,68946,68948,68950,68952],{"class":35,"line":36},[33,68947,53519],{"class":47},[33,68949,53523],{"class":53522},[33,68951,53526],{"class":43},[33,68953,53529],{"class":47},[33,68955,68956,68958,68960,68962,68964,68966],{"class":35,"line":51},[33,68957,2226],{"class":47},[33,68959,52857],{"class":53522},[33,68961,53538],{"class":43},[33,68963,57],{"class":47},[33,68965,53543],{"class":60},[33,68967,53529],{"class":47},[33,68969,68970],{"class":35,"line":64},[33,68971,100],{"emptyLinePlaceholder":99},[33,68973,68974,68976,68978],{"class":35,"line":76},[33,68975,2226],{"class":47},[33,68977,53556],{"class":53522},[33,68979,53529],{"class":47},[33,68981,68982,68984,68986,68988,68990,68992],{"class":35,"line":87},[33,68983,54364],{"class":47},[33,68985,53566],{"class":53522},[33,68987,53569],{"class":43},[33,68989,57],{"class":47},[33,68991,53574],{"class":60},[33,68993,53529],{"class":47},[33,68995,68996,68998,69000,69002,69004,69006,69008,69010,69012],{"class":35,"line":96},[33,68997,54364],{"class":47},[33,68999,53566],{"class":53522},[33,69001,17158],{"class":43},[33,69003,57],{"class":47},[33,69005,53613],{"class":60},[33,69007,53593],{"class":43},[33,69009,57],{"class":47},[33,69011,53620],{"class":60},[33,69013,53529],{"class":47},[33,69015,69016,69018,69020,69022,69024],{"class":35,"line":103},[33,69017,54364],{"class":47},[33,69019,53629],{"class":53522},[33,69021,53632],{"class":47},[33,69023,53629],{"class":53522},[33,69025,53529],{"class":47},[33,69027,69028,69030,69032],{"class":35,"line":108},[33,69029,54006],{"class":47},[33,69031,53556],{"class":53522},[33,69033,53529],{"class":47},[33,69035,69036],{"class":35,"line":119},[33,69037,100],{"emptyLinePlaceholder":99},[33,69039,69040,69042,69044],{"class":35,"line":128},[33,69041,2226],{"class":47},[33,69043,54021],{"class":53522},[33,69045,53529],{"class":47},[33,69047,69048,69050,69052],{"class":35,"line":1753},[33,69049,54364],{"class":47},[33,69051,3413],{"class":53522},[33,69053,53529],{"class":47},[33,69055,69056,69058,69060,69062,69064],{"class":35,"line":1763},[33,69057,53563],{"class":47},[33,69059,331],{"class":53522},[33,69061,56185],{"class":47},[33,69063,331],{"class":53522},[33,69065,53529],{"class":47},[33,69067,69068,69070,69072,69074,69076],{"class":35,"line":1775},[33,69069,53563],{"class":47},[33,69071,331],{"class":53522},[33,69073,56204],{"class":47},[33,69075,331],{"class":53522},[33,69077,53529],{"class":47},[33,69079,69080,69082,69084,69086,69088],{"class":35,"line":1780},[33,69081,53563],{"class":47},[33,69083,331],{"class":53522},[33,69085,56223],{"class":47},[33,69087,331],{"class":53522},[33,69089,53529],{"class":47},[33,69091,69092,69094,69096,69098,69100],{"class":35,"line":1785},[33,69093,53563],{"class":47},[33,69095,331],{"class":53522},[33,69097,56242],{"class":47},[33,69099,331],{"class":53522},[33,69101,53529],{"class":47},[33,69103,69104,69106,69108,69110,69112],{"class":35,"line":1940},[33,69105,53563],{"class":47},[33,69107,331],{"class":53522},[33,69109,56261],{"class":47},[33,69111,331],{"class":53522},[33,69113,53529],{"class":47},[33,69115,69116,69118,69120,69123,69125],{"class":35,"line":2183},[33,69117,53563],{"class":47},[33,69119,19],{"class":53522},[33,69121,69122],{"class":47},">我不需要变色\u003C\u002F",[33,69124,19],{"class":53522},[33,69126,53529],{"class":47},[33,69128,69129,69131,69133],{"class":35,"line":2208},[33,69130,54636],{"class":47},[33,69132,3413],{"class":53522},[33,69134,53529],{"class":47},[33,69136,69137,69139,69141],{"class":35,"line":2234},[33,69138,54364],{"class":47},[33,69140,54034],{"class":53522},[33,69142,53529],{"class":47},[33,69144,69145],{"class":35,"line":2239},[33,69146,69147],{"class":2487},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[33,69149,69150,69152,69154,69156,69158,69160,69162,69165],{"class":35,"line":2247},[33,69151,13462],{"class":39},[33,69153,63510],{"class":72},[33,69155,15804],{"class":39},[33,69157,56615],{"class":47},[33,69159,56618],{"class":43},[33,69161,133],{"class":47},[33,69163,69164],{"class":60},"'ul'",[33,69166,226],{"class":47},[33,69168,69169,69172,69174,69176,69178,69180,69182,69184,69186],{"class":35,"line":2255},[33,69170,69171],{"class":47},"    ul.",[33,69173,60031],{"class":43},[33,69175,133],{"class":47},[33,69177,60036],{"class":60},[33,69179,245],{"class":47},[33,69181,56668],{"class":39},[33,69183,3924],{"class":47},[33,69185,2502],{"class":289},[33,69187,14682],{"class":47},[33,69189,69190],{"class":35,"line":3992},[33,69191,69192],{"class":2487},"      \u002F\u002F alert(1)\n",[33,69194,69195],{"class":35,"line":4009},[33,69196,69197],{"class":2487},"      \u002F\u002F e.target就是我们点击的对象\n",[33,69199,69200],{"class":35,"line":4014},[33,69201,69202],{"class":2487},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[33,69204,69205],{"class":35,"line":4019},[33,69206,69207],{"class":2487},"      \u002F\u002F e.target.style.color = 'red'\n",[33,69209,69210,69212,69214],{"class":35,"line":4024},[33,69211,60462],{"class":47},[33,69213,60465],{"class":43},[33,69215,69216],{"class":47},"(e)\n",[33,69218,69219],{"class":35,"line":4038},[33,69220,100],{"emptyLinePlaceholder":99},[33,69222,69223,69225,69228],{"class":35,"line":4043},[33,69224,60462],{"class":47},[33,69226,69227],{"class":43},"dir",[33,69229,69230],{"class":47},"(e.target)\n",[33,69232,69233],{"class":35,"line":4834},[33,69234,100],{"emptyLinePlaceholder":99},[33,69236,69237],{"class":35,"line":4848},[33,69238,69239],{"class":2487},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[33,69241,69242],{"class":35,"line":4856},[33,69243,69244],{"class":2487},"      \u002F\u002F 通过tagName来进行判断\n",[33,69246,69247,69249,69252,69254,69257],{"class":35,"line":4861},[33,69248,56699],{"class":39},[33,69250,69251],{"class":47}," (e.target.tagName ",[33,69253,56705],{"class":39},[33,69255,69256],{"class":60}," 'LI'",[33,69258,14682],{"class":47},[33,69260,69261,69264,69266],{"class":35,"line":4867},[33,69262,69263],{"class":47},"        e.target.style.color ",[33,69265,57],{"class":39},[33,69267,69268],{"class":60}," 'red'\n",[33,69270,69271],{"class":35,"line":4873},[33,69272,54617],{"class":47},[33,69274,69275],{"class":35,"line":4878},[33,69276,35686],{"class":47},[33,69278,69279,69281,69283],{"class":35,"line":10194},[33,69280,54636],{"class":47},[33,69282,54034],{"class":53522},[33,69284,53529],{"class":47},[33,69286,69287,69289,69291],{"class":35,"line":10218},[33,69288,54006],{"class":47},[33,69290,54021],{"class":53522},[33,69292,53529],{"class":47},[33,69294,69295],{"class":35,"line":10223},[33,69296,100],{"emptyLinePlaceholder":99},[33,69298,69299,69301,69303],{"class":35,"line":10229},[33,69300,54006],{"class":47},[33,69302,52857],{"class":53522},[33,69304,53529],{"class":47},[19,69306,69307],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69309,69310],{},"if(e.target.ragName==='P') {}",[19,69312,69313],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69315,69316],{},"通过事件委托的方式实现tab栏切换改造：",[19,69318,69319],{},"一定要记住自定义属性！！！！！！",[19,69321,69322],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69324,69325],{},"id是自定义的属性名",[19,69327,69328],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[23,69330,69332],{"className":52855,"code":69331,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,69333,69334,69344,69358,69362,69370,69384,69404,69424,69436,69444,69450,69460,69470,69474,69478,69484,69496,69508,69520,69536,69540,69544,69550,69562,69574,69586,69596,69606,69610,69614,69622,69634,69644,69656,69660,69664,69672,69682,69692,69702,69706,69710,69720,69734,69746,69750,69754,69766,69776,69792,69802,69806,69810,69824,69834,69844,69848,69852,69858,69872,69876,69880,69888,69898,69902,69906,69915,69925,69929,69937,69945,69949,69957,69971,69985,69997,70005,70044,70076,70108,70140,70172,70180,70188,70202,70236,70270,70304,70338,70372,70380,70388,70396,70401,70406,70425,70430,70450,70458,70463,70476,70497,70510,70514,70519,70524,70537,70557,70585,70589,70593,70597,70605,70613,70617],{"__ignoreMap":28},[33,69335,69336,69338,69340,69342],{"class":35,"line":36},[33,69337,53519],{"class":47},[33,69339,53523],{"class":53522},[33,69341,53526],{"class":43},[33,69343,53529],{"class":47},[33,69345,69346,69348,69350,69352,69354,69356],{"class":35,"line":51},[33,69347,2226],{"class":47},[33,69349,52857],{"class":53522},[33,69351,53538],{"class":43},[33,69353,57],{"class":47},[33,69355,53543],{"class":60},[33,69357,53529],{"class":47},[33,69359,69360],{"class":35,"line":64},[33,69361,100],{"emptyLinePlaceholder":99},[33,69363,69364,69366,69368],{"class":35,"line":76},[33,69365,2226],{"class":47},[33,69367,53556],{"class":53522},[33,69369,53529],{"class":47},[33,69371,69372,69374,69376,69378,69380,69382],{"class":35,"line":87},[33,69373,54364],{"class":47},[33,69375,53566],{"class":53522},[33,69377,53569],{"class":43},[33,69379,57],{"class":47},[33,69381,53574],{"class":60},[33,69383,61345],{"class":47},[33,69385,69386,69388,69390,69392,69394,69396,69398,69400,69402],{"class":35,"line":96},[33,69387,54364],{"class":47},[33,69389,53566],{"class":53522},[33,69391,53585],{"class":43},[33,69393,57],{"class":47},[33,69395,53590],{"class":60},[33,69397,53593],{"class":43},[33,69399,57],{"class":47},[33,69401,53598],{"class":60},[33,69403,61345],{"class":47},[33,69405,69406,69408,69410,69412,69414,69416,69418,69420,69422],{"class":35,"line":103},[33,69407,54364],{"class":47},[33,69409,53566],{"class":53522},[33,69411,17158],{"class":43},[33,69413,57],{"class":47},[33,69415,53613],{"class":60},[33,69417,53593],{"class":43},[33,69419,57],{"class":47},[33,69421,53620],{"class":60},[33,69423,61345],{"class":47},[33,69425,69426,69428,69430,69432,69434],{"class":35,"line":108},[33,69427,54364],{"class":47},[33,69429,53629],{"class":53522},[33,69431,65842],{"class":47},[33,69433,53629],{"class":53522},[33,69435,53529],{"class":47},[33,69437,69438,69440,69442],{"class":35,"line":119},[33,69439,54364],{"class":47},[33,69441,2331],{"class":53522},[33,69443,53529],{"class":47},[33,69445,69446,69448],{"class":35,"line":128},[33,69447,8649],{"class":53522},[33,69449,17810],{"class":47},[33,69451,69452,69454,69456,69458],{"class":35,"line":1753},[33,69453,56925],{"class":72},[33,69455,996],{"class":47},[33,69457,2617],{"class":72},[33,69459,3567],{"class":47},[33,69461,69462,69464,69466,69468],{"class":35,"line":1763},[33,69463,56914],{"class":72},[33,69465,996],{"class":47},[33,69467,2617],{"class":72},[33,69469,3567],{"class":47},[33,69471,69472],{"class":35,"line":1775},[33,69473,4446],{"class":47},[33,69475,69476],{"class":35,"line":1780},[33,69477,100],{"emptyLinePlaceholder":99},[33,69479,69480,69482],{"class":35,"line":1785},[33,69481,65893],{"class":43},[33,69483,17810],{"class":47},[33,69485,69486,69488,69490,69492,69494],{"class":35,"line":1940},[33,69487,56990],{"class":72},[33,69489,996],{"class":47},[33,69491,65904],{"class":72},[33,69493,53713],{"class":39},[33,69495,3567],{"class":47},[33,69497,69498,69500,69502,69504,69506],{"class":35,"line":2183},[33,69499,57004],{"class":72},[33,69501,996],{"class":47},[33,69503,65917],{"class":72},[33,69505,53713],{"class":39},[33,69507,3567],{"class":47},[33,69509,69510,69512,69514,69516,69518],{"class":35,"line":2208},[33,69511,56925],{"class":72},[33,69513,996],{"class":47},[33,69515,1284],{"class":72},[33,69517,53713],{"class":39},[33,69519,3567],{"class":47},[33,69521,69522,69524,69526,69528,69530,69532,69534],{"class":35,"line":2234},[33,69523,64195],{"class":72},[33,69525,996],{"class":47},[33,69527,720],{"class":72},[33,69529,53713],{"class":39},[33,69531,53742],{"class":72},[33,69533,64462],{"class":72},[33,69535,3567],{"class":47},[33,69537,69538],{"class":35,"line":2239},[33,69539,4446],{"class":47},[33,69541,69542],{"class":35,"line":2247},[33,69543,100],{"emptyLinePlaceholder":99},[33,69545,69546,69548],{"class":35,"line":2255},[33,69547,65962],{"class":43},[33,69549,17810],{"class":47},[33,69551,69552,69554,69556,69558,69560],{"class":35,"line":3992},[33,69553,56990],{"class":72},[33,69555,996],{"class":47},[33,69557,2734],{"class":72},[33,69559,1429],{"class":39},[33,69561,3567],{"class":47},[33,69563,69564,69566,69568,69570,69572],{"class":35,"line":4009},[33,69565,57004],{"class":72},[33,69567,996],{"class":47},[33,69569,3316],{"class":72},[33,69571,53713],{"class":39},[33,69573,3567],{"class":47},[33,69575,69576,69578,69580,69582,69584],{"class":35,"line":4014},[33,69577,59577],{"class":72},[33,69579,996],{"class":47},[33,69581,3316],{"class":72},[33,69583,53713],{"class":39},[33,69585,3567],{"class":47},[33,69587,69588,69590,69592,69594],{"class":35,"line":4019},[33,69589,57228],{"class":72},[33,69591,996],{"class":47},[33,69593,53698],{"class":72},[33,69595,3567],{"class":47},[33,69597,69598,69600,69602,69604],{"class":35,"line":4024},[33,69599,57239],{"class":72},[33,69601,996],{"class":47},[33,69603,53889],{"class":72},[33,69605,3567],{"class":47},[33,69607,69608],{"class":35,"line":4038},[33,69609,4446],{"class":47},[33,69611,69612],{"class":35,"line":4043},[33,69613,100],{"emptyLinePlaceholder":99},[33,69615,69616,69618,69620],{"class":35,"line":4834},[33,69617,65962],{"class":43},[33,69619,66035],{"class":53522},[33,69621,17810],{"class":47},[33,69623,69624,69626,69628,69630,69632],{"class":35,"line":4848},[33,69625,57141],{"class":72},[33,69627,996],{"class":47},[33,69629,3213],{"class":72},[33,69631,53713],{"class":39},[33,69633,3567],{"class":47},[33,69635,69636,69638,69640,69642],{"class":35,"line":4856},[33,69637,64552],{"class":72},[33,69639,996],{"class":47},[33,69641,66058],{"class":72},[33,69643,3567],{"class":47},[33,69645,69646,69648,69650,69652,69654],{"class":35,"line":4861},[33,69647,64218],{"class":72},[33,69649,996],{"class":47},[33,69651,1284],{"class":72},[33,69653,53713],{"class":39},[33,69655,3567],{"class":47},[33,69657,69658],{"class":35,"line":4867},[33,69659,4446],{"class":47},[33,69661,69662],{"class":35,"line":4873},[33,69663,100],{"emptyLinePlaceholder":99},[33,69665,69666,69668,69670],{"class":35,"line":4878},[33,69667,65962],{"class":43},[33,69669,63510],{"class":53522},[33,69671,17810],{"class":47},[33,69673,69674,69676,69678,69680],{"class":35,"line":10194},[33,69675,56951],{"class":72},[33,69677,996],{"class":47},[33,69679,56956],{"class":72},[33,69681,3567],{"class":47},[33,69683,69684,69686,69688,69690],{"class":35,"line":10218},[33,69685,57228],{"class":72},[33,69687,996],{"class":47},[33,69689,53698],{"class":72},[33,69691,3567],{"class":47},[33,69693,69694,69696,69698,69700],{"class":35,"line":10223},[33,69695,57239],{"class":72},[33,69697,996],{"class":47},[33,69699,53801],{"class":72},[33,69701,3567],{"class":47},[33,69703,69704],{"class":35,"line":10229},[33,69705,4446],{"class":47},[33,69707,69708],{"class":35,"line":10256},[33,69709,100],{"emptyLinePlaceholder":99},[33,69711,69712,69714,69716,69718],{"class":35,"line":10261},[33,69713,65962],{"class":43},[33,69715,63510],{"class":53522},[33,69717,57294],{"class":53522},[33,69719,17810],{"class":47},[33,69721,69722,69724,69726,69728,69730,69732],{"class":35,"line":10267},[33,69723,56925],{"class":72},[33,69725,996],{"class":47},[33,69727,2617],{"class":72},[33,69729,11196],{"class":72},[33,69731,53713],{"class":39},[33,69733,3567],{"class":47},[33,69735,69736,69738,69740,69742,69744],{"class":35,"line":10279},[33,69737,57141],{"class":72},[33,69739,996],{"class":47},[33,69741,2966],{"class":72},[33,69743,53713],{"class":39},[33,69745,3567],{"class":47},[33,69747,69748],{"class":35,"line":10291},[33,69749,4446],{"class":47},[33,69751,69752],{"class":35,"line":10303},[33,69753,100],{"emptyLinePlaceholder":99},[33,69755,69756,69758,69760,69762,69764],{"class":35,"line":11961},[33,69757,65962],{"class":43},[33,69759,63510],{"class":53522},[33,69761,57294],{"class":53522},[33,69763,3672],{"class":53522},[33,69765,17810],{"class":47},[33,69767,69768,69770,69772,69774],{"class":35,"line":11986},[33,69769,66187],{"class":72},[33,69771,996],{"class":47},[33,69773,56956],{"class":72},[33,69775,3567],{"class":47},[33,69777,69778,69780,69782,69784,69786,69788,69790],{"class":35,"line":12009},[33,69779,64450],{"class":72},[33,69781,996],{"class":47},[33,69783,725],{"class":72},[33,69785,53713],{"class":39},[33,69787,53742],{"class":72},[33,69789,66208],{"class":72},[33,69791,3567],{"class":47},[33,69793,69794,69796,69798,69800],{"class":35,"line":12033},[33,69795,59634],{"class":72},[33,69797,996],{"class":47},[33,69799,64587],{"class":72},[33,69801,3567],{"class":47},[33,69803,69804],{"class":35,"line":12038},[33,69805,4446],{"class":47},[33,69807,69808],{"class":35,"line":12043},[33,69809,100],{"emptyLinePlaceholder":99},[33,69811,69812,69814,69816,69818,69820,69822],{"class":35,"line":12048},[33,69813,65962],{"class":43},[33,69815,63510],{"class":53522},[33,69817,57294],{"class":53522},[33,69819,3672],{"class":53522},[33,69821,66241],{"class":43},[33,69823,17810],{"class":47},[33,69825,69826,69828,69830,69832],{"class":35,"line":12057},[33,69827,64009],{"class":72},[33,69829,996],{"class":47},[33,69831,66252],{"class":72},[33,69833,3567],{"class":47},[33,69835,69836,69838,69840,69842],{"class":35,"line":12062},[33,69837,59634],{"class":72},[33,69839,996],{"class":47},[33,69841,66252],{"class":72},[33,69843,3567],{"class":47},[33,69845,69846],{"class":35,"line":12068},[33,69847,4446],{"class":47},[33,69849,69850],{"class":35,"line":12089},[33,69851,100],{"emptyLinePlaceholder":99},[33,69853,69854,69856],{"class":35,"line":12095},[33,69855,66277],{"class":43},[33,69857,17810],{"class":47},[33,69859,69860,69862,69864,69866,69868,69870],{"class":35,"line":12109},[33,69861,56914],{"class":72},[33,69863,996],{"class":47},[33,69865,2617],{"class":72},[33,69867,66290],{"class":72},[33,69869,53713],{"class":39},[33,69871,3567],{"class":47},[33,69873,69874],{"class":35,"line":12115},[33,69875,4446],{"class":47},[33,69877,69878],{"class":35,"line":12142},[33,69879,100],{"emptyLinePlaceholder":99},[33,69881,69882,69884,69886],{"class":35,"line":12151},[33,69883,66277],{"class":43},[33,69885,64392],{"class":43},[33,69887,17810],{"class":47},[33,69889,69890,69892,69894,69896],{"class":35,"line":12157},[33,69891,57228],{"class":72},[33,69893,996],{"class":47},[33,69895,56956],{"class":72},[33,69897,3567],{"class":47},[33,69899,69900],{"class":35,"line":12165},[33,69901,4446],{"class":47},[33,69903,69904],{"class":35,"line":12170},[33,69905,100],{"emptyLinePlaceholder":99},[33,69907,69908,69910,69913],{"class":35,"line":18842},[33,69909,66277],{"class":43},[33,69911,69912],{"class":43}," .active",[33,69914,17810],{"class":47},[33,69916,69917,69919,69921,69923],{"class":35,"line":18848},[33,69918,57228],{"class":72},[33,69920,996],{"class":47},[33,69922,63087],{"class":72},[33,69924,3567],{"class":47},[33,69926,69927],{"class":35,"line":18871},[33,69928,4446],{"class":47},[33,69930,69931,69933,69935],{"class":35,"line":18877},[33,69932,54636],{"class":47},[33,69934,2331],{"class":53522},[33,69936,53529],{"class":47},[33,69938,69939,69941,69943],{"class":35,"line":18900},[33,69940,54006],{"class":47},[33,69942,53556],{"class":53522},[33,69944,53529],{"class":47},[33,69946,69947],{"class":35,"line":18914},[33,69948,100],{"emptyLinePlaceholder":99},[33,69950,69951,69953,69955],{"class":35,"line":18934},[33,69952,2226],{"class":47},[33,69954,54021],{"class":53522},[33,69956,53529],{"class":47},[33,69958,69959,69961,69963,69965,69967,69969],{"class":35,"line":18940},[33,69960,54364],{"class":47},[33,69962,53832],{"class":53522},[33,69964,55705],{"class":43},[33,69966,57],{"class":47},[33,69968,66392],{"class":60},[33,69970,53529],{"class":47},[33,69972,69973,69975,69977,69979,69981,69983],{"class":35,"line":18951},[33,69974,53563],{"class":47},[33,69976,53832],{"class":53522},[33,69978,55705],{"class":43},[33,69980,57],{"class":47},[33,69982,66407],{"class":60},[33,69984,53529],{"class":47},[33,69986,69987,69989,69991,69993,69995],{"class":35,"line":18974},[33,69988,57453],{"class":47},[33,69990,631],{"class":53522},[33,69992,66418],{"class":47},[33,69994,631],{"class":53522},[33,69996,53529],{"class":47},[33,69998,69999,70001,70003],{"class":35,"line":18996},[33,70000,57453],{"class":47},[33,70002,3413],{"class":53522},[33,70004,53529],{"class":47},[33,70006,70007,70009,70011,70013,70015,70017,70019,70021,70023,70025,70027,70029,70031,70034,70036,70038,70040,70042],{"class":35,"line":19001},[33,70008,57521],{"class":47},[33,70010,331],{"class":53522},[33,70012,63270],{"class":47},[33,70014,2663],{"class":53522},[33,70016,55705],{"class":43},[33,70018,57],{"class":47},[33,70020,61924],{"class":60},[33,70022,63275],{"class":43},[33,70024,57],{"class":47},[33,70026,66453],{"class":60},[33,70028,56170],{"class":43},[33,70030,57],{"class":47},[33,70032,70033],{"class":60},"\"0\"",[33,70035,66456],{"class":47},[33,70037,2663],{"class":53522},[33,70039,57533],{"class":47},[33,70041,331],{"class":53522},[33,70043,53529],{"class":47},[33,70045,70046,70048,70050,70052,70054,70056,70058,70060,70062,70064,70066,70068,70070,70072,70074],{"class":35,"line":19007},[33,70047,57521],{"class":47},[33,70049,331],{"class":53522},[33,70051,63270],{"class":47},[33,70053,2663],{"class":53522},[33,70055,63275],{"class":43},[33,70057,57],{"class":47},[33,70059,66453],{"class":60},[33,70061,56170],{"class":43},[33,70063,57],{"class":47},[33,70065,5933],{"class":60},[33,70067,66483],{"class":47},[33,70069,2663],{"class":53522},[33,70071,57533],{"class":47},[33,70073,331],{"class":53522},[33,70075,53529],{"class":47},[33,70077,70078,70080,70082,70084,70086,70088,70090,70092,70094,70096,70098,70100,70102,70104,70106],{"class":35,"line":19021},[33,70079,57521],{"class":47},[33,70081,331],{"class":53522},[33,70083,63270],{"class":47},[33,70085,2663],{"class":53522},[33,70087,63275],{"class":43},[33,70089,57],{"class":47},[33,70091,66453],{"class":60},[33,70093,56170],{"class":43},[33,70095,57],{"class":47},[33,70097,5956],{"class":60},[33,70099,66510],{"class":47},[33,70101,2663],{"class":53522},[33,70103,57533],{"class":47},[33,70105,331],{"class":53522},[33,70107,53529],{"class":47},[33,70109,70110,70112,70114,70116,70118,70120,70122,70124,70126,70128,70130,70132,70134,70136,70138],{"class":35,"line":19034},[33,70111,57521],{"class":47},[33,70113,331],{"class":53522},[33,70115,63270],{"class":47},[33,70117,2663],{"class":53522},[33,70119,63275],{"class":43},[33,70121,57],{"class":47},[33,70123,66453],{"class":60},[33,70125,56170],{"class":43},[33,70127,57],{"class":47},[33,70129,5969],{"class":60},[33,70131,66537],{"class":47},[33,70133,2663],{"class":53522},[33,70135,57533],{"class":47},[33,70137,331],{"class":53522},[33,70139,53529],{"class":47},[33,70141,70142,70144,70146,70148,70150,70152,70154,70156,70158,70160,70162,70164,70166,70168,70170],{"class":35,"line":19039},[33,70143,57521],{"class":47},[33,70145,331],{"class":53522},[33,70147,63270],{"class":47},[33,70149,2663],{"class":53522},[33,70151,63275],{"class":43},[33,70153,57],{"class":47},[33,70155,66453],{"class":60},[33,70157,56170],{"class":43},[33,70159,57],{"class":47},[33,70161,5982],{"class":60},[33,70163,66564],{"class":47},[33,70165,2663],{"class":53522},[33,70167,57533],{"class":47},[33,70169,331],{"class":53522},[33,70171,53529],{"class":47},[33,70173,70174,70176,70178],{"class":35,"line":19053},[33,70175,57626],{"class":47},[33,70177,3413],{"class":53522},[33,70179,53529],{"class":47},[33,70181,70182,70184,70186],{"class":35,"line":19058},[33,70183,53997],{"class":47},[33,70185,53832],{"class":53522},[33,70187,53529],{"class":47},[33,70189,70190,70192,70194,70196,70198,70200],{"class":35,"line":19064},[33,70191,53563],{"class":47},[33,70193,53832],{"class":53522},[33,70195,55705],{"class":43},[33,70197,57],{"class":47},[33,70199,66601],{"class":60},[33,70201,53529],{"class":47},[33,70203,70204,70206,70208,70210,70212,70214,70216,70218,70220,70222,70224,70226,70228,70230,70232,70234],{"class":35,"line":19069},[33,70205,57453],{"class":47},[33,70207,53832],{"class":53522},[33,70209,55705],{"class":43},[33,70211,57],{"class":47},[33,70213,66616],{"class":60},[33,70215,63270],{"class":47},[33,70217,3736],{"class":53522},[33,70219,57458],{"class":43},[33,70221,57],{"class":47},[33,70223,66627],{"class":60},[33,70225,57466],{"class":43},[33,70227,57],{"class":47},[33,70229,9898],{"class":60},[33,70231,66636],{"class":47},[33,70233,53832],{"class":53522},[33,70235,53529],{"class":47},[33,70237,70238,70240,70242,70244,70246,70248,70250,70252,70254,70256,70258,70260,70262,70264,70266,70268],{"class":35,"line":19083},[33,70239,57453],{"class":47},[33,70241,53832],{"class":53522},[33,70243,55705],{"class":43},[33,70245,57],{"class":47},[33,70247,64841],{"class":60},[33,70249,63270],{"class":47},[33,70251,3736],{"class":53522},[33,70253,57458],{"class":43},[33,70255,57],{"class":47},[33,70257,66663],{"class":60},[33,70259,57466],{"class":43},[33,70261,57],{"class":47},[33,70263,9898],{"class":60},[33,70265,66636],{"class":47},[33,70267,53832],{"class":53522},[33,70269,53529],{"class":47},[33,70271,70272,70274,70276,70278,70280,70282,70284,70286,70288,70290,70292,70294,70296,70298,70300,70302],{"class":35,"line":19088},[33,70273,57453],{"class":47},[33,70275,53832],{"class":53522},[33,70277,55705],{"class":43},[33,70279,57],{"class":47},[33,70281,64841],{"class":60},[33,70283,63270],{"class":47},[33,70285,3736],{"class":53522},[33,70287,57458],{"class":43},[33,70289,57],{"class":47},[33,70291,66698],{"class":60},[33,70293,57466],{"class":43},[33,70295,57],{"class":47},[33,70297,9898],{"class":60},[33,70299,66636],{"class":47},[33,70301,53832],{"class":53522},[33,70303,53529],{"class":47},[33,70305,70306,70308,70310,70312,70314,70316,70318,70320,70322,70324,70326,70328,70330,70332,70334,70336],{"class":35,"line":19093},[33,70307,57453],{"class":47},[33,70309,53832],{"class":53522},[33,70311,55705],{"class":43},[33,70313,57],{"class":47},[33,70315,64841],{"class":60},[33,70317,63270],{"class":47},[33,70319,3736],{"class":53522},[33,70321,57458],{"class":43},[33,70323,57],{"class":47},[33,70325,66733],{"class":60},[33,70327,57466],{"class":43},[33,70329,57],{"class":47},[33,70331,9898],{"class":60},[33,70333,66636],{"class":47},[33,70335,53832],{"class":53522},[33,70337,53529],{"class":47},[33,70339,70340,70342,70344,70346,70348,70350,70352,70354,70356,70358,70360,70362,70364,70366,70368,70370],{"class":35,"line":19107},[33,70341,57453],{"class":47},[33,70343,53832],{"class":53522},[33,70345,55705],{"class":43},[33,70347,57],{"class":47},[33,70349,64841],{"class":60},[33,70351,63270],{"class":47},[33,70353,3736],{"class":53522},[33,70355,57458],{"class":43},[33,70357,57],{"class":47},[33,70359,66768],{"class":60},[33,70361,57466],{"class":43},[33,70363,57],{"class":47},[33,70365,9898],{"class":60},[33,70367,66636],{"class":47},[33,70369,53832],{"class":53522},[33,70371,53529],{"class":47},[33,70373,70374,70376,70378],{"class":35,"line":19119},[33,70375,53997],{"class":47},[33,70377,53832],{"class":53522},[33,70379,53529],{"class":47},[33,70381,70382,70384,70386],{"class":35,"line":19124},[33,70383,54636],{"class":47},[33,70385,53832],{"class":53522},[33,70387,53529],{"class":47},[33,70389,70390,70392,70394],{"class":35,"line":19137},[33,70391,54364],{"class":47},[33,70393,54034],{"class":53522},[33,70395,53529],{"class":47},[33,70397,70398],{"class":35,"line":19142},[33,70399,70400],{"class":2487},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[33,70402,70403],{"class":35,"line":19147},[33,70404,70405],{"class":2487},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[33,70407,70408,70410,70412,70414,70416,70418,70420,70423],{"class":35,"line":19152},[33,70409,13462],{"class":39},[33,70411,63510],{"class":72},[33,70413,15804],{"class":39},[33,70415,56615],{"class":47},[33,70417,56618],{"class":43},[33,70419,133],{"class":47},[33,70421,70422],{"class":60},"'.tab-nav ul'",[33,70424,226],{"class":47},[33,70426,70427],{"class":35,"line":19165},[33,70428,70429],{"class":2487},"    \u002F\u002F 2.添加事件\n",[33,70431,70432,70434,70436,70438,70440,70442,70444,70446,70448],{"class":35,"line":19170},[33,70433,69171],{"class":47},[33,70435,60031],{"class":43},[33,70437,133],{"class":47},[33,70439,60036],{"class":60},[33,70441,245],{"class":47},[33,70443,56668],{"class":39},[33,70445,3924],{"class":47},[33,70447,2502],{"class":289},[33,70449,14682],{"class":47},[33,70451,70452,70454,70456],{"class":35,"line":34859},[33,70453,60462],{"class":47},[33,70455,69227],{"class":43},[33,70457,69230],{"class":47},[33,70459,70460],{"class":35,"line":34865},[33,70461,70462],{"class":2487},"      \u002F\u002Fe.targer是我们点击的对象\n",[33,70464,70465,70467,70469,70471,70474],{"class":35,"line":34871},[33,70466,56699],{"class":39},[33,70468,69251],{"class":47},[33,70470,56705],{"class":39},[33,70472,70473],{"class":60}," 'A'",[33,70475,14682],{"class":47},[33,70477,70478,70480,70482,70484,70487,70489,70491,70493,70495],{"class":35,"line":34877},[33,70479,54145],{"class":47},[33,70481,56618],{"class":43},[33,70483,133],{"class":47},[33,70485,70486],{"class":60},"'.active'",[33,70488,59221],{"class":47},[33,70490,59224],{"class":43},[33,70492,133],{"class":47},[33,70494,66931],{"class":60},[33,70496,226],{"class":47},[33,70498,70499,70502,70504,70506,70508],{"class":35,"line":34883},[33,70500,70501],{"class":47},"        e.target.classList.",[33,70503,7581],{"class":43},[33,70505,133],{"class":47},[33,70507,66931],{"class":60},[33,70509,226],{"class":47},[33,70511,70512],{"class":35,"line":34894},[33,70513,100],{"emptyLinePlaceholder":99},[33,70515,70516],{"class":35,"line":34900},[33,70517,70518],{"class":2487},"        \u002F\u002F 下面大盒子模块\n",[33,70520,70521],{"class":35,"line":34920},[33,70522,70523],{"class":2487},"        \u002F\u002F console.log(e.target.dataset.id)\n",[33,70525,70526,70528,70530,70532,70534],{"class":35,"line":34926},[33,70527,63488],{"class":39},[33,70529,5289],{"class":72},[33,70531,15804],{"class":39},[33,70533,47789],{"class":39},[33,70535,70536],{"class":47},"e.target.dataset.id\n",[33,70538,70539,70541,70543,70545,70547,70549,70551,70553,70555],{"class":35,"line":34937},[33,70540,54145],{"class":47},[33,70542,56618],{"class":43},[33,70544,133],{"class":47},[33,70546,66979],{"class":60},[33,70548,59221],{"class":47},[33,70550,59224],{"class":43},[33,70552,133],{"class":47},[33,70554,66931],{"class":60},[33,70556,226],{"class":47},[33,70558,70559,70561,70563,70565,70567,70569,70571,70573,70575,70577,70579,70581,70583],{"class":35,"line":34943},[33,70560,54145],{"class":47},[33,70562,56618],{"class":43},[33,70564,133],{"class":47},[33,70566,67005],{"class":60},[33,70568,2861],{"class":47},[33,70570,47789],{"class":39},[33,70572,27357],{"class":72},[33,70574,59250],{"class":60},[33,70576,59221],{"class":47},[33,70578,7581],{"class":43},[33,70580,133],{"class":47},[33,70582,66931],{"class":60},[33,70584,226],{"class":47},[33,70586,70587],{"class":35,"line":34949},[33,70588,100],{"emptyLinePlaceholder":99},[33,70590,70591],{"class":35,"line":34955},[33,70592,54617],{"class":47},[33,70594,70595],{"class":35,"line":34961},[33,70596,35686],{"class":47},[33,70598,70599,70601,70603],{"class":35,"line":34967},[33,70600,54636],{"class":47},[33,70602,54034],{"class":53522},[33,70604,53529],{"class":47},[33,70606,70607,70609,70611],{"class":35,"line":34973},[33,70608,54006],{"class":47},[33,70610,54021],{"class":53522},[33,70612,53529],{"class":47},[33,70614,70615],{"class":35,"line":34979},[33,70616,100],{"emptyLinePlaceholder":99},[33,70618,70619,70621,70623],{"class":35,"line":34999},[33,70620,54006],{"class":47},[33,70622,52857],{"class":53522},[33,70624,53529],{"class":47},[631,70626,70628],{"id":70627},"_333-页面加载事件","3.3.3 页面加载事件",[328,70630,70631],{},[331,70632,70633],{},"load",[19,70635,70636],{},[3736,70637],{"alt":28,"src":70638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70640,70641],{},"window代表整个窗口，比document还要大",[19,70643,70644],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70646,70647],{},"img.addEventListener('load', function () {",[19,70649,70650],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70652,54683],{},[328,70654,70655],{"start":51},[331,70656,70657],{},"DOMContentLoaded",[19,70659,70660],{},[3736,70661],{"alt":28,"src":70662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70664,70665],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[631,70667,70669],{"id":70668},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70671,70672],{},[3736,70673],{"alt":28,"src":70674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70676,70677],{},[3736,70678],{"alt":28,"src":70679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70681,70682],{},[3736,70683],{"alt":28,"src":70684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70686,70687],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70689,70690],{},"获得的是数字型数据，不带单位",[19,70692,70693],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70695,70696],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70698,70699],{},"它是通过document.documentElement来获取",[19,70701,70702],{},[3736,70703],{"alt":28,"src":70704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70706,70707],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[631,70709,70711],{"id":70710},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70713,70714],{},[3736,70715],{"alt":28,"src":70716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70718,70719],{},[3736,70720],{"alt":28,"src":70721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[631,70723,70725],{"id":70724},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70727,70728],{},[3736,70729],{"alt":28,"src":70730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70732,70733],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70735,70736],{},[3736,70737],{"alt":28,"src":70738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70740,70741],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70743,70744],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70746,70747],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70749,70750],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70752,70753],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70755,70756],{},[3736,70757],{"alt":28,"src":70758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70760,70761],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70763,70764],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70766,70767],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70769,70770],{},"e.pageX-box.getBoundingClientRect()",[631,70772,70774],{"id":70773},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70776,70777],{},[3736,70778],{"alt":28,"src":70779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70781,70782],{},"这个是相对于视口来说的，它是个方法，不是属性值",[631,70784,70786],{"id":70785},"_338-总结","3.3.8 总结",[19,70788,70789],{},[3736,70790],{"alt":28,"src":70791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70793,70794],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70796,70797],{},"修改盒子的宽高只能通过width和height来实现",[631,70799,70801],{"id":70800},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[23,70803,70805],{"className":52855,"code":70804,"language":52857,"meta":28,"style":28},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[30,70806,70807,70812,70817,70822,70827],{"__ignoreMap":28},[33,70808,70809],{"class":35,"line":36},[33,70810,70811],{"class":47},"\u002F* 页面滑动 *\u002F\n",[33,70813,70814],{"class":35,"line":51},[33,70815,70816],{"class":47},"html {\n",[33,70818,70819],{"class":35,"line":64},[33,70820,70821],{"class":47},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[33,70823,70824],{"class":35,"line":76},[33,70825,70826],{"class":47},"  scroll-behavior: smooth;\n",[33,70828,70829],{"class":35,"line":87},[33,70830,1010],{"class":47},[19,70832,70833],{},"默认是auto",[631,70835,70837],{"id":70836},"_3310-日期对象","3.3.10 日期对象",[24236,70839,70841],{"id":70840},"_33101-实例化","3.3.10.1 实例化",[19,70843,70844],{},[3736,70845],{"alt":28,"src":70846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[24236,70848,70850],{"id":70849},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70852,70853],{},[3736,70854],{"alt":28,"src":70855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70857,70858],{},"月份+1",[19,70860,70861],{},"老外认为第一天为0，星期天",[19,70863,70864],{},"方法使用的时候必须要跟括号",[19,70866,70867],{},"快速获得日期",[19,70869,70870],{},"\u002F\u002F 得到年月日",[19,70872,70873],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70875,70876],{},"\u002F\u002F 得到当地日期",[19,70878,70879],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70881,70882],{},"\u002F\u002F 得到当地时间",[19,70884,70885],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70887,70888],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70890,70891],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[54034,70893,70894],{},"\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,70896,70897],{},"学会去封装函数！",[24236,70899,70901],{"id":70900},"_33103-时间戳","3.3.10.3 时间戳",[19,70903,70904],{},[3736,70905],{"alt":28,"src":70906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70908,70909],{},[3736,70910],{"alt":28,"src":70911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70913,70914],{},"三种方法记住一个就可以",[631,70916,70918],{"id":70917},"_3311-节点操作","3.3.11 节点操作",[24236,70920,70922],{"id":70921},"_33111-dom节点","3.3.11.1 DOM节点",[19,70924,70925],{},[3736,70926],{"alt":28,"src":70927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70929,70930],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[24236,70932,70934],{"id":70933},"_33112-查找节点","3.3.11.2 查找节点",[19,70936,70937],{},"前边的document.querySelector()是获取的元素",[19,70939,70940],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70942,70943],{},[3736,70944],{"alt":28,"src":70945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[328,70947,70948],{},[331,70949,70950],{},"父节点",[19,70952,70953],{},[3736,70954],{"alt":28,"src":70955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[328,70957,70958],{"start":51},[331,70959,70960],{},"子节点",[19,70962,70963],{},[3736,70964],{"alt":28,"src":70965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70967,70968],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70970,70971],{},"children获得的是伪数组，是亲儿子",[328,70973,70974],{"start":64},[331,70975,70976],{},"兄弟节点",[19,70978,70979],{},[3736,70980],{"alt":28,"src":70981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[24236,70983,70985],{"id":70984},"_33113-增加节点","3.3.11.3 增加节点",[19,70987,70988],{},[3736,70989],{"alt":28,"src":70990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70992,70993],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70995,70996],{},[3736,70997],{"alt":28,"src":70998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,71000,71001],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,71003,71004],{},"下面是写法的部分展示，就按照下边的格式来写",[19,71006,71007],{},"例：",[54034,71009,71010],{},"\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,71012,71013],{},[3736,71014],{"alt":28,"src":71015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,71017,71018],{},"false只克隆标签，里边的内容不会克隆过来",[23,71020,71022],{"className":52855,"code":71021,"language":52857,"meta":28,"style":28},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[30,71023,71024],{"__ignoreMap":28},[33,71025,71026],{"class":35,"line":36},[33,71027,71021],{"class":47},[24236,71029,71031],{"id":71030},"_33114-删除节点","3.3.11.4 删除节点",[19,71033,71034],{},[3736,71035],{"alt":28,"src":71036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,71038,71039],{},"父亲删儿子",[19,71041,71042],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[631,71044,71046],{"id":71045},"_3312-m端事件","3.3.12 M端事件",[19,71048,71049],{},"M端就是移动端",[19,71051,71052],{},[3736,71053],{"alt":28,"src":71054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[631,71056,71058],{"id":71057},"_3313-插件","3.3.13 插件",[19,71060,71061],{},"要熟悉官网！！！",[19,71063,71064],{},[2663,71065,71066],{"href":71066,"rel":71067},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[26103],[19,71069,71070],{},[2663,71071,71072],{"href":71072,"rel":71073},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[26103],[631,71075,71077],{"id":71076},"_3314-学生信息表","3.3.14 学生信息表",[328,71079,71080,71083,71086,71089,71092,71095,71098,71101],{},[331,71081,71082],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[331,71084,71085],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[331,71087,71088],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[331,71090,71091],{},"用好表单元素自带的属性，value,name等",[331,71093,71094],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[331,71096,71097],{},"不要忘记事件对象",[331,71099,71100],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[331,71102,71103],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,71105,71106],{},"结构：",[23,71108,71110],{"className":52855,"code":71109,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,71111,71112,71122,71136,71140,71148,71162,71182,71203,71216,71240,71248,71252,71260,71273,71294,71322,71349,71354,71376,71396,71415,71423,71451,71473,71492,71512,71532,71552,71572,71580,71600,71608,71612,71625,71633,71641,71649,71662,71675,71688,71701,71714,71727,71740,71748,71756,71764,71769,71774,71779,71784,71789,71794,71799,71804,71809,71814,71819,71824,71829,71837,71845,71853,71857,71877,71896,71916,71936,71956,71976,71980,71985,72005,72010,72020,72025,72030,72050,72072,72077,72087,72091,72095,72100,72105,72134,72148,72163,72167,72171,72175,72180,72191,72204,72209,72214,72219,72224,72229,72233,72238,72243,72252,72257,72262,72274,72279,72286,72290,72295,72305,72310,72320,72325,72353,72374,72384,72404,72422,72438,72455,72472,72488,72492,72502,72507,72512,72517,72528,72532,72536,72540,72545,72550,72571,72583,72588,72593,72598,72612,72617,72624,72628,72632,72640,72644,72652,72656],{"__ignoreMap":28},[33,71113,71114,71116,71118,71120],{"class":35,"line":36},[33,71115,53519],{"class":47},[33,71117,53523],{"class":53522},[33,71119,53526],{"class":43},[33,71121,53529],{"class":47},[33,71123,71124,71126,71128,71130,71132,71134],{"class":35,"line":51},[33,71125,2226],{"class":47},[33,71127,52857],{"class":53522},[33,71129,53538],{"class":43},[33,71131,57],{"class":47},[33,71133,53543],{"class":60},[33,71135,53529],{"class":47},[33,71137,71138],{"class":35,"line":64},[33,71139,100],{"emptyLinePlaceholder":99},[33,71141,71142,71144,71146],{"class":35,"line":76},[33,71143,2226],{"class":47},[33,71145,53556],{"class":53522},[33,71147,53529],{"class":47},[33,71149,71150,71152,71154,71156,71158,71160],{"class":35,"line":87},[33,71151,54364],{"class":47},[33,71153,53566],{"class":53522},[33,71155,53569],{"class":43},[33,71157,57],{"class":47},[33,71159,53574],{"class":60},[33,71161,61345],{"class":47},[33,71163,71164,71166,71168,71170,71172,71174,71176,71178,71180],{"class":35,"line":96},[33,71165,54364],{"class":47},[33,71167,53566],{"class":53522},[33,71169,17158],{"class":43},[33,71171,57],{"class":47},[33,71173,53613],{"class":60},[33,71175,53593],{"class":43},[33,71177,57],{"class":47},[33,71179,53620],{"class":60},[33,71181,61345],{"class":47},[33,71183,71184,71186,71188,71190,71192,71194,71196,71198,71201],{"class":35,"line":103},[33,71185,54364],{"class":47},[33,71187,53566],{"class":53522},[33,71189,53585],{"class":43},[33,71191,57],{"class":47},[33,71193,53590],{"class":60},[33,71195,53593],{"class":43},[33,71197,57],{"class":47},[33,71199,71200],{"class":60},"\"ie=edge\"",[33,71202,61345],{"class":47},[33,71204,71205,71207,71209,71212,71214],{"class":35,"line":108},[33,71206,54364],{"class":47},[33,71208,53629],{"class":53522},[33,71210,71211],{"class":47},">学生信息管理\u003C\u002F",[33,71213,53629],{"class":53522},[33,71215,53529],{"class":47},[33,71217,71218,71220,71223,71226,71228,71231,71233,71235,71238],{"class":35,"line":119},[33,71219,54364],{"class":47},[33,71221,71222],{"class":53522},"link",[33,71224,71225],{"class":43}," rel",[33,71227,57],{"class":47},[33,71229,71230],{"class":60},"\"stylesheet\"",[33,71232,63275],{"class":43},[33,71234,57],{"class":47},[33,71236,71237],{"class":60},"\"css\u002Findex.css\"",[33,71239,61345],{"class":47},[33,71241,71242,71244,71246],{"class":35,"line":128},[33,71243,54006],{"class":47},[33,71245,53556],{"class":53522},[33,71247,53529],{"class":47},[33,71249,71250],{"class":35,"line":1753},[33,71251,100],{"emptyLinePlaceholder":99},[33,71253,71254,71256,71258],{"class":35,"line":1763},[33,71255,2226],{"class":47},[33,71257,54021],{"class":53522},[33,71259,53529],{"class":47},[33,71261,71262,71264,71266,71269,71271],{"class":35,"line":1775},[33,71263,54364],{"class":47},[33,71265,10],{"class":53522},[33,71267,71268],{"class":47},">新增学员\u003C\u002F",[33,71270,10],{"class":53522},[33,71272,53529],{"class":47},[33,71274,71275,71277,71279,71281,71283,71285,71288,71290,71292],{"class":35,"line":1780},[33,71276,54364],{"class":47},[33,71278,68842],{"class":53522},[33,71280,55705],{"class":43},[33,71282,57],{"class":47},[33,71284,64882],{"class":60},[33,71286,71287],{"class":43}," autocomplete",[33,71289,57],{"class":47},[33,71291,34005],{"class":60},[33,71293,53529],{"class":47},[33,71295,71296,71299,71301,71303,71305,71307,71309,71311,71314,71316,71318,71320],{"class":35,"line":1785},[33,71297,71298],{"class":47},"    姓名：\u003C",[33,71300,56040],{"class":53522},[33,71302,56043],{"class":43},[33,71304,57],{"class":47},[33,71306,64916],{"class":60},[33,71308,55705],{"class":43},[33,71310,57],{"class":47},[33,71312,71313],{"class":60},"\"uname\"",[33,71315,17158],{"class":43},[33,71317,57],{"class":47},[33,71319,71313],{"class":60},[33,71321,61345],{"class":47},[33,71323,71324,71327,71329,71331,71333,71335,71337,71339,71341,71343,71345,71347],{"class":35,"line":1940},[33,71325,71326],{"class":47},"    年龄：\u003C",[33,71328,56040],{"class":53522},[33,71330,56043],{"class":43},[33,71332,57],{"class":47},[33,71334,64916],{"class":60},[33,71336,55705],{"class":43},[33,71338,57],{"class":47},[33,71340,1003],{"class":60},[33,71342,17158],{"class":43},[33,71344,57],{"class":47},[33,71346,1003],{"class":60},[33,71348,61345],{"class":47},[33,71350,71351],{"class":35,"line":2183},[33,71352,71353],{"class":47},"    性别:\n",[33,71355,71356,71358,71361,71363,71365,71368,71370,71372,71374],{"class":35,"line":2208},[33,71357,53563],{"class":47},[33,71359,71360],{"class":53522},"select",[33,71362,17158],{"class":43},[33,71364,57],{"class":47},[33,71366,71367],{"class":60},"\"gender\"",[33,71369,55705],{"class":43},[33,71371,57],{"class":47},[33,71373,71367],{"class":60},[33,71375,53529],{"class":47},[33,71377,71378,71380,71383,71385,71387,71389,71392,71394],{"class":35,"line":2234},[33,71379,57453],{"class":47},[33,71381,71382],{"class":53522},"option",[33,71384,68868],{"class":43},[33,71386,57],{"class":47},[33,71388,12206],{"class":60},[33,71390,71391],{"class":47},">男\u003C\u002F",[33,71393,71382],{"class":53522},[33,71395,53529],{"class":47},[33,71397,71398,71400,71402,71404,71406,71408,71411,71413],{"class":35,"line":2239},[33,71399,57453],{"class":47},[33,71401,71382],{"class":53522},[33,71403,68868],{"class":43},[33,71405,57],{"class":47},[33,71407,12275],{"class":60},[33,71409,71410],{"class":47},">女\u003C\u002F",[33,71412,71382],{"class":53522},[33,71414,53529],{"class":47},[33,71416,71417,71419,71421],{"class":35,"line":2247},[33,71418,53997],{"class":47},[33,71420,71360],{"class":53522},[33,71422,53529],{"class":47},[33,71424,71425,71428,71430,71432,71434,71436,71438,71440,71443,71445,71447,71449],{"class":35,"line":2255},[33,71426,71427],{"class":47},"    薪资：\u003C",[33,71429,56040],{"class":53522},[33,71431,56043],{"class":43},[33,71433,57],{"class":47},[33,71435,64916],{"class":60},[33,71437,55705],{"class":43},[33,71439,57],{"class":47},[33,71441,71442],{"class":60},"\"salary\"",[33,71444,17158],{"class":43},[33,71446,57],{"class":47},[33,71448,71442],{"class":60},[33,71450,61345],{"class":47},[33,71452,71453,71456,71458,71460,71462,71465,71467,71469,71471],{"class":35,"line":3992},[33,71454,71455],{"class":47},"    就业城市：\u003C",[33,71457,71360],{"class":53522},[33,71459,17158],{"class":43},[33,71461,57],{"class":47},[33,71463,71464],{"class":60},"\"city\"",[33,71466,55705],{"class":43},[33,71468,57],{"class":47},[33,71470,71464],{"class":60},[33,71472,53529],{"class":47},[33,71474,71475,71477,71479,71481,71483,71485,71488,71490],{"class":35,"line":4009},[33,71476,57453],{"class":47},[33,71478,71382],{"class":53522},[33,71480,68868],{"class":43},[33,71482,57],{"class":47},[33,71484,847],{"class":60},[33,71486,71487],{"class":47},">北京\u003C\u002F",[33,71489,71382],{"class":53522},[33,71491,53529],{"class":47},[33,71493,71494,71496,71498,71500,71502,71505,71508,71510],{"class":35,"line":4014},[33,71495,57453],{"class":47},[33,71497,71382],{"class":53522},[33,71499,68868],{"class":43},[33,71501,57],{"class":47},[33,71503,71504],{"class":60},"\"上海\"",[33,71506,71507],{"class":47},">上海\u003C\u002F",[33,71509,71382],{"class":53522},[33,71511,53529],{"class":47},[33,71513,71514,71516,71518,71520,71522,71525,71528,71530],{"class":35,"line":4019},[33,71515,57453],{"class":47},[33,71517,71382],{"class":53522},[33,71519,68868],{"class":43},[33,71521,57],{"class":47},[33,71523,71524],{"class":60},"\"广州\"",[33,71526,71527],{"class":47},">广州\u003C\u002F",[33,71529,71382],{"class":53522},[33,71531,53529],{"class":47},[33,71533,71534,71536,71538,71540,71542,71545,71548,71550],{"class":35,"line":4024},[33,71535,57453],{"class":47},[33,71537,71382],{"class":53522},[33,71539,68868],{"class":43},[33,71541,57],{"class":47},[33,71543,71544],{"class":60},"\"深圳\"",[33,71546,71547],{"class":47},">深圳\u003C\u002F",[33,71549,71382],{"class":53522},[33,71551,53529],{"class":47},[33,71553,71554,71556,71558,71560,71562,71565,71568,71570],{"class":35,"line":4038},[33,71555,57453],{"class":47},[33,71557,71382],{"class":53522},[33,71559,68868],{"class":43},[33,71561,57],{"class":47},[33,71563,71564],{"class":60},"\"曹县\"",[33,71566,71567],{"class":47},">曹县\u003C\u002F",[33,71569,71382],{"class":53522},[33,71571,53529],{"class":47},[33,71573,71574,71576,71578],{"class":35,"line":4043},[33,71575,53997],{"class":47},[33,71577,71360],{"class":53522},[33,71579,53529],{"class":47},[33,71581,71582,71584,71586,71588,71590,71593,71596,71598],{"class":35,"line":4834},[33,71583,53563],{"class":47},[33,71585,56106],{"class":53522},[33,71587,55705],{"class":43},[33,71589,57],{"class":47},[33,71591,71592],{"class":60},"\"add\"",[33,71594,71595],{"class":47},">录入\u003C\u002F",[33,71597,56106],{"class":53522},[33,71599,53529],{"class":47},[33,71601,71602,71604,71606],{"class":35,"line":4848},[33,71603,54636],{"class":47},[33,71605,68842],{"class":53522},[33,71607,53529],{"class":47},[33,71609,71610],{"class":35,"line":4856},[33,71611,100],{"emptyLinePlaceholder":99},[33,71613,71614,71616,71618,71621,71623],{"class":35,"line":4861},[33,71615,54364],{"class":47},[33,71617,10],{"class":53522},[33,71619,71620],{"class":47},">就业榜\u003C\u002F",[33,71622,10],{"class":53522},[33,71624,53529],{"class":47},[33,71626,71627,71629,71631],{"class":35,"line":4867},[33,71628,54364],{"class":47},[33,71630,2563],{"class":53522},[33,71632,53529],{"class":47},[33,71634,71635,71637,71639],{"class":35,"line":4873},[33,71636,53563],{"class":47},[33,71638,2566],{"class":53522},[33,71640,53529],{"class":47},[33,71642,71643,71645,71647],{"class":35,"line":4878},[33,71644,57453],{"class":47},[33,71646,2569],{"class":53522},[33,71648,53529],{"class":47},[33,71650,71651,71653,71655,71658,71660],{"class":35,"line":10194},[33,71652,57521],{"class":47},[33,71654,2572],{"class":53522},[33,71656,71657],{"class":47},">序号\u003C\u002F",[33,71659,2572],{"class":53522},[33,71661,53529],{"class":47},[33,71663,71664,71666,71668,71671,71673],{"class":35,"line":10218},[33,71665,57521],{"class":47},[33,71667,2572],{"class":53522},[33,71669,71670],{"class":47},">姓名\u003C\u002F",[33,71672,2572],{"class":53522},[33,71674,53529],{"class":47},[33,71676,71677,71679,71681,71684,71686],{"class":35,"line":10223},[33,71678,57521],{"class":47},[33,71680,2572],{"class":53522},[33,71682,71683],{"class":47},">年龄\u003C\u002F",[33,71685,2572],{"class":53522},[33,71687,53529],{"class":47},[33,71689,71690,71692,71694,71697,71699],{"class":35,"line":10229},[33,71691,57521],{"class":47},[33,71693,2572],{"class":53522},[33,71695,71696],{"class":47},">性别\u003C\u002F",[33,71698,2572],{"class":53522},[33,71700,53529],{"class":47},[33,71702,71703,71705,71707,71710,71712],{"class":35,"line":10256},[33,71704,57521],{"class":47},[33,71706,2572],{"class":53522},[33,71708,71709],{"class":47},">薪资\u003C\u002F",[33,71711,2572],{"class":53522},[33,71713,53529],{"class":47},[33,71715,71716,71718,71720,71723,71725],{"class":35,"line":10261},[33,71717,57521],{"class":47},[33,71719,2572],{"class":53522},[33,71721,71722],{"class":47},">就业城市\u003C\u002F",[33,71724,2572],{"class":53522},[33,71726,53529],{"class":47},[33,71728,71729,71731,71733,71736,71738],{"class":35,"line":10267},[33,71730,57521],{"class":47},[33,71732,2572],{"class":53522},[33,71734,71735],{"class":47},">操作\u003C\u002F",[33,71737,2572],{"class":53522},[33,71739,53529],{"class":47},[33,71741,71742,71744,71746],{"class":35,"line":10279},[33,71743,57626],{"class":47},[33,71745,2569],{"class":53522},[33,71747,53529],{"class":47},[33,71749,71750,71752,71754],{"class":35,"line":10291},[33,71751,53997],{"class":47},[33,71753,2566],{"class":53522},[33,71755,53529],{"class":47},[33,71757,71758,71760,71762],{"class":35,"line":10303},[33,71759,53563],{"class":47},[33,71761,2610],{"class":53522},[33,71763,53529],{"class":47},[33,71765,71766],{"class":35,"line":11961},[33,71767,71768],{"class":2487},"      \u003C!-- \n",[33,71770,71771],{"class":35,"line":11986},[33,71772,71773],{"class":2487},"        \u003Ctr>\n",[33,71775,71776],{"class":35,"line":12009},[33,71777,71778],{"class":2487},"          \u003Ctd>1001\u003C\u002Ftd>\n",[33,71780,71781],{"class":35,"line":12033},[33,71782,71783],{"class":2487},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[33,71785,71786],{"class":35,"line":12038},[33,71787,71788],{"class":2487},"          \u003Ctd>19\u003C\u002Ftd>\n",[33,71790,71791],{"class":35,"line":12043},[33,71792,71793],{"class":2487},"          \u003Ctd>男\u003C\u002Ftd>\n",[33,71795,71796],{"class":35,"line":12048},[33,71797,71798],{"class":2487},"          \u003Ctd>15000\u003C\u002Ftd>\n",[33,71800,71801],{"class":35,"line":12057},[33,71802,71803],{"class":2487},"          \u003Ctd>上海\u003C\u002Ftd>\n",[33,71805,71806],{"class":35,"line":12062},[33,71807,71808],{"class":2487},"          \u003Ctd>\n",[33,71810,71811],{"class":35,"line":12068},[33,71812,71813],{"class":2487},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[33,71815,71816],{"class":35,"line":12089},[33,71817,71818],{"class":2487},"          \u003C\u002Ftd>\n",[33,71820,71821],{"class":35,"line":12095},[33,71822,71823],{"class":2487},"        \u003C\u002Ftr> \n",[33,71825,71826],{"class":35,"line":12109},[33,71827,71828],{"class":2487},"        -->\n",[33,71830,71831,71833,71835],{"class":35,"line":12115},[33,71832,53997],{"class":47},[33,71834,2610],{"class":53522},[33,71836,53529],{"class":47},[33,71838,71839,71841,71843],{"class":35,"line":12142},[33,71840,54636],{"class":47},[33,71842,2563],{"class":53522},[33,71844,53529],{"class":47},[33,71846,71847,71849,71851],{"class":35,"line":12151},[33,71848,54364],{"class":47},[33,71850,54034],{"class":53522},[33,71852,53529],{"class":47},[33,71854,71855],{"class":35,"line":12157},[33,71856,62176],{"class":2487},[33,71858,71859,71861,71864,71866,71868,71870,71872,71875],{"class":35,"line":12165},[33,71860,13462],{"class":39},[33,71862,71863],{"class":72}," uname",[33,71865,15804],{"class":39},[33,71867,56615],{"class":47},[33,71869,56618],{"class":43},[33,71871,133],{"class":47},[33,71873,71874],{"class":60},"'.uname'",[33,71876,226],{"class":47},[33,71878,71879,71881,71883,71885,71887,71889,71891,71894],{"class":35,"line":12170},[33,71880,13462],{"class":39},[33,71882,17927],{"class":72},[33,71884,15804],{"class":39},[33,71886,56615],{"class":47},[33,71888,56618],{"class":43},[33,71890,133],{"class":47},[33,71892,71893],{"class":60},"'.age'",[33,71895,226],{"class":47},[33,71897,71898,71900,71903,71905,71907,71909,71911,71914],{"class":35,"line":18842},[33,71899,13462],{"class":39},[33,71901,71902],{"class":72}," gender",[33,71904,15804],{"class":39},[33,71906,56615],{"class":47},[33,71908,56618],{"class":43},[33,71910,133],{"class":47},[33,71912,71913],{"class":60},"'.gender'",[33,71915,226],{"class":47},[33,71917,71918,71920,71923,71925,71927,71929,71931,71934],{"class":35,"line":18848},[33,71919,13462],{"class":39},[33,71921,71922],{"class":72}," salary",[33,71924,15804],{"class":39},[33,71926,56615],{"class":47},[33,71928,56618],{"class":43},[33,71930,133],{"class":47},[33,71932,71933],{"class":60},"'.salary'",[33,71935,226],{"class":47},[33,71937,71938,71940,71943,71945,71947,71949,71951,71954],{"class":35,"line":18871},[33,71939,13462],{"class":39},[33,71941,71942],{"class":72}," city",[33,71944,15804],{"class":39},[33,71946,56615],{"class":47},[33,71948,56618],{"class":43},[33,71950,133],{"class":47},[33,71952,71953],{"class":60},"'.city'",[33,71955,226],{"class":47},[33,71957,71958,71960,71963,71965,71967,71969,71971,71974],{"class":35,"line":18877},[33,71959,13462],{"class":39},[33,71961,71962],{"class":72}," tbody",[33,71964,15804],{"class":39},[33,71966,56615],{"class":47},[33,71968,56618],{"class":43},[33,71970,133],{"class":47},[33,71972,71973],{"class":60},"'tbody'",[33,71975,226],{"class":47},[33,71977,71978],{"class":35,"line":18900},[33,71979,100],{"emptyLinePlaceholder":99},[33,71981,71982],{"class":35,"line":18914},[33,71983,71984],{"class":2487},"    \u002F\u002F 获取所有带有name属性的元素\n",[33,71986,71987,71989,71992,71994,71996,71998,72000,72003],{"class":35,"line":18934},[33,71988,13462],{"class":39},[33,71990,71991],{"class":72}," items",[33,71993,15804],{"class":39},[33,71995,56615],{"class":47},[33,71997,57899],{"class":43},[33,71999,133],{"class":47},[33,72001,72002],{"class":60},"'[name]'",[33,72004,226],{"class":47},[33,72006,72007],{"class":35,"line":18940},[33,72008,72009],{"class":2487},"    \u002F\u002F 声明一个空的数组\n",[33,72011,72012,72014,72016,72018],{"class":35,"line":18951},[33,72013,13462],{"class":39},[33,72015,59913],{"class":72},[33,72017,15804],{"class":39},[33,72019,615],{"class":47},[33,72021,72022],{"class":35,"line":18974},[33,72023,72024],{"class":2487},"    \u002F\u002F 1.录入模块\n",[33,72026,72027],{"class":35,"line":18996},[33,72028,72029],{"class":2487},"    \u002F\u002F 1.1这是一个表单提交事件\n",[33,72031,72032,72034,72037,72039,72041,72043,72045,72048],{"class":35,"line":19001},[33,72033,13462],{"class":39},[33,72035,72036],{"class":72}," info",[33,72038,15804],{"class":39},[33,72040,56615],{"class":47},[33,72042,56618],{"class":43},[33,72044,133],{"class":47},[33,72046,72047],{"class":60},"'.info'",[33,72049,226],{"class":47},[33,72051,72052,72055,72057,72059,72062,72064,72066,72068,72070],{"class":35,"line":19007},[33,72053,72054],{"class":47},"    info.",[33,72056,60031],{"class":43},[33,72058,133],{"class":47},[33,72060,72061],{"class":60},"'submit'",[33,72063,245],{"class":47},[33,72065,56668],{"class":39},[33,72067,3924],{"class":47},[33,72069,2502],{"class":289},[33,72071,14682],{"class":47},[33,72073,72074],{"class":35,"line":19021},[33,72075,72076],{"class":2487},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[33,72078,72079,72082,72085],{"class":35,"line":19034},[33,72080,72081],{"class":47},"      e.",[33,72083,72084],{"class":43},"preventDefault",[33,72086,4235],{"class":47},[33,72088,72089],{"class":35,"line":19039},[33,72090,62230],{"class":2487},[33,72092,72093],{"class":35,"line":19053},[33,72094,100],{"emptyLinePlaceholder":99},[33,72096,72097],{"class":35,"line":19058},[33,72098,72099],{"class":2487},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[33,72101,72102],{"class":35,"line":19064},[33,72103,72104],{"class":2487},"      \u002F\u002F 先遍历循环\n",[33,72106,72107,72109,72111,72113,72115,72117,72119,72121,72123,72126,72128,72130,72132],{"class":35,"line":19069},[33,72108,54503],{"class":39},[33,72110,3924],{"class":47},[33,72112,54067],{"class":39},[33,72114,11684],{"class":47},[33,72116,57],{"class":39},[33,72118,1437],{"class":72},[33,72120,11691],{"class":47},[33,72122,2226],{"class":39},[33,72124,72125],{"class":47}," items.",[33,72127,54188],{"class":72},[33,72129,5469],{"class":47},[33,72131,4551],{"class":39},[33,72133,14682],{"class":47},[33,72135,72136,72138,72141,72143,72146],{"class":35,"line":19083},[33,72137,2130],{"class":39},[33,72139,72140],{"class":47}," (items[i].value ",[33,72142,56705],{"class":39},[33,72144,72145],{"class":60}," ''",[33,72147,14682],{"class":47},[33,72149,72150,72153,72156,72158,72161],{"class":35,"line":19088},[33,72151,72152],{"class":39},"          return",[33,72154,72155],{"class":43}," alert",[33,72157,133],{"class":47},[33,72159,72160],{"class":60},"'输入内容不能为空'",[33,72162,226],{"class":47},[33,72164,72165],{"class":35,"line":19093},[33,72166,4786],{"class":47},[33,72168,72169],{"class":35,"line":19107},[33,72170,54617],{"class":47},[33,72172,72173],{"class":35,"line":19119},[33,72174,100],{"emptyLinePlaceholder":99},[33,72176,72177],{"class":35,"line":19124},[33,72178,72179],{"class":2487},"      \u002F\u002F 创建新的对象\n",[33,72181,72182,72184,72187,72189],{"class":35,"line":19137},[33,72183,60446],{"class":39},[33,72185,72186],{"class":72}," obj",[33,72188,15804],{"class":39},[33,72190,17810],{"class":47},[33,72192,72193,72196,72198,72200,72202],{"class":35,"line":19142},[33,72194,72195],{"class":47},"        stuID: arr.",[33,72197,54188],{"class":72},[33,72199,47789],{"class":39},[33,72201,27357],{"class":72},[33,72203,33696],{"class":47},[33,72205,72206],{"class":35,"line":19147},[33,72207,72208],{"class":47},"        uname: uname.value,\n",[33,72210,72211],{"class":35,"line":19152},[33,72212,72213],{"class":47},"        age: age.value,\n",[33,72215,72216],{"class":35,"line":19165},[33,72217,72218],{"class":47},"        gender: gender.value,\n",[33,72220,72221],{"class":35,"line":19170},[33,72222,72223],{"class":47},"        salary: salary.value,\n",[33,72225,72226],{"class":35,"line":34859},[33,72227,72228],{"class":47},"        city: city.value\n",[33,72230,72231],{"class":35,"line":34865},[33,72232,54617],{"class":47},[33,72234,72235],{"class":35,"line":34871},[33,72236,72237],{"class":2487},"      \u002F\u002F console.log(obj);\n",[33,72239,72240],{"class":35,"line":34877},[33,72241,72242],{"class":2487},"      \u002F\u002F 追加到数组里面\n",[33,72244,72245,72247,72249],{"class":35,"line":34883},[33,72246,60225],{"class":47},[33,72248,54104],{"class":43},[33,72250,72251],{"class":47},"(obj)\n",[33,72253,72254],{"class":35,"line":34894},[33,72255,72256],{"class":2487},"      \u002F\u002F console.log(arr);\n",[33,72258,72259],{"class":35,"line":34900},[33,72260,72261],{"class":2487},"      \u002F\u002F 清空表单  reset重置表单\n",[33,72263,72264,72267,72269,72272],{"class":35,"line":34920},[33,72265,72266],{"class":72},"      this",[33,72268,2975],{"class":47},[33,72270,72271],{"class":43},"reset",[33,72273,4235],{"class":47},[33,72275,72276],{"class":35,"line":34926},[33,72277,72278],{"class":2487},"      \u002F\u002F 调用渲染函数\n",[33,72280,72281,72284],{"class":35,"line":34937},[33,72282,72283],{"class":43},"      render",[33,72285,4235],{"class":47},[33,72287,72288],{"class":35,"line":34943},[33,72289,35686],{"class":47},[33,72291,72292],{"class":35,"line":34949},[33,72293,72294],{"class":2487},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[33,72296,72297,72300,72303],{"class":35,"line":34955},[33,72298,72299],{"class":39},"    function",[33,72301,72302],{"class":43}," render",[33,72304,13096],{"class":47},[33,72306,72307],{"class":35,"line":34961},[33,72308,72309],{"class":2487},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[33,72311,72312,72315,72317],{"class":35,"line":34967},[33,72313,72314],{"class":47},"      tbody.innerHTML ",[33,72316,57],{"class":39},[33,72318,72319],{"class":60}," ''\n",[33,72321,72322],{"class":35,"line":34973},[33,72323,72324],{"class":2487},"      \u002F\u002F 遍历数组\n",[33,72326,72327,72329,72331,72333,72335,72337,72339,72341,72343,72345,72347,72349,72351],{"class":35,"line":34979},[33,72328,54503],{"class":39},[33,72330,3924],{"class":47},[33,72332,54067],{"class":39},[33,72334,11684],{"class":47},[33,72336,57],{"class":39},[33,72338,1437],{"class":72},[33,72340,11691],{"class":47},[33,72342,2226],{"class":39},[33,72344,54185],{"class":47},[33,72346,54188],{"class":72},[33,72348,5469],{"class":47},[33,72350,4551],{"class":39},[33,72352,14682],{"class":47},[33,72354,72355,72357,72360,72362,72364,72367,72369,72372],{"class":35,"line":34999},[33,72356,63488],{"class":39},[33,72358,72359],{"class":72}," tr",[33,72361,15804],{"class":39},[33,72363,56615],{"class":47},[33,72365,72366],{"class":43},"createElement",[33,72368,133],{"class":47},[33,72370,72371],{"class":60},"'tr'",[33,72373,226],{"class":47},[33,72375,72376,72379,72381],{"class":35,"line":35005},[33,72377,72378],{"class":47},"        tr.innerHTML ",[33,72380,57],{"class":39},[33,72382,72383],{"class":60}," `\n",[33,72385,72386,72389,72391,72393,72395,72398,72401],{"class":35,"line":35021},[33,72387,72388],{"class":60},"        \u003Ctd>${",[33,72390,6134],{"class":47},[33,72392,3300],{"class":60},[33,72394,2861],{"class":47},[33,72396,72397],{"class":60},"].",[33,72399,72400],{"class":47},"stuID",[33,72402,72403],{"class":60},"}\u003C\u002Ftd>\n",[33,72405,72406,72409,72411,72413,72415,72417,72420],{"class":35,"line":35027},[33,72407,72408],{"class":60},"          \u003Ctd>${",[33,72410,6134],{"class":47},[33,72412,3300],{"class":60},[33,72414,2861],{"class":47},[33,72416,72397],{"class":60},[33,72418,72419],{"class":47},"uname",[33,72421,72403],{"class":60},[33,72423,72424,72426,72428,72430,72432,72434,72436],{"class":35,"line":35041},[33,72425,72408],{"class":60},[33,72427,6134],{"class":47},[33,72429,3300],{"class":60},[33,72431,2861],{"class":47},[33,72433,72397],{"class":60},[33,72435,218],{"class":47},[33,72437,72403],{"class":60},[33,72439,72440,72442,72444,72446,72448,72450,72453],{"class":35,"line":35047},[33,72441,72408],{"class":60},[33,72443,6134],{"class":47},[33,72445,3300],{"class":60},[33,72447,2861],{"class":47},[33,72449,72397],{"class":60},[33,72451,72452],{"class":47},"gender",[33,72454,72403],{"class":60},[33,72456,72457,72459,72461,72463,72465,72467,72470],{"class":35,"line":35062},[33,72458,72408],{"class":60},[33,72460,6134],{"class":47},[33,72462,3300],{"class":60},[33,72464,2861],{"class":47},[33,72466,72397],{"class":60},[33,72468,72469],{"class":47},"salary",[33,72471,72403],{"class":60},[33,72473,72474,72476,72478,72480,72482,72484,72486],{"class":35,"line":35068},[33,72475,72408],{"class":60},[33,72477,6134],{"class":47},[33,72479,3300],{"class":60},[33,72481,2861],{"class":47},[33,72483,72397],{"class":60},[33,72485,842],{"class":47},[33,72487,72403],{"class":60},[33,72489,72490],{"class":35,"line":35077},[33,72491,71808],{"class":60},[33,72493,72494,72497,72499],{"class":35,"line":35083},[33,72495,72496],{"class":60},"            \u003Ca href=\"javascript:\" data-id=${",[33,72498,2861],{"class":47},[33,72500,72501],{"class":60},"}>删除\u003C\u002Fa>\n",[33,72503,72504],{"class":35,"line":35092},[33,72505,72506],{"class":60},"          \u003C\u002Ftd> \n",[33,72508,72509],{"class":35,"line":35098},[33,72510,72511],{"class":60},"          `\n",[33,72513,72514],{"class":35,"line":35104},[33,72515,72516],{"class":2487},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[33,72518,72519,72522,72525],{"class":35,"line":35113},[33,72520,72521],{"class":47},"        tbody.",[33,72523,72524],{"class":43},"appendChild",[33,72526,72527],{"class":47},"(tr)\n",[33,72529,72530],{"class":35,"line":35119},[33,72531,54617],{"class":47},[33,72533,72534],{"class":35,"line":35130},[33,72535,4446],{"class":47},[33,72537,72538],{"class":35,"line":35136},[33,72539,100],{"emptyLinePlaceholder":99},[33,72541,72542],{"class":35,"line":35155},[33,72543,72544],{"class":2487},"    \u002F\u002F 3.删除委托\n",[33,72546,72547],{"class":35,"line":35161},[33,72548,72549],{"class":2487},"    \u002F\u002F 3.1 事件委托 tbody\n",[33,72551,72552,72555,72557,72559,72561,72563,72565,72567,72569],{"class":35,"line":35172},[33,72553,72554],{"class":47},"    tbody.",[33,72556,60031],{"class":43},[33,72558,133],{"class":47},[33,72560,60036],{"class":60},[33,72562,245],{"class":47},[33,72564,56668],{"class":39},[33,72566,3924],{"class":47},[33,72568,2502],{"class":289},[33,72570,14682],{"class":47},[33,72572,72573,72575,72577,72579,72581],{"class":35,"line":35178},[33,72574,56699],{"class":39},[33,72576,69251],{"class":47},[33,72578,56705],{"class":39},[33,72580,70473],{"class":60},[33,72582,14682],{"class":47},[33,72584,72585],{"class":35,"line":35198},[33,72586,72587],{"class":2487},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[33,72589,72590],{"class":35,"line":35214},[33,72591,72592],{"class":2487},"        \u002F\u002F console.log(e.target.dataset.id);\n",[33,72594,72595],{"class":35,"line":35220},[33,72596,72597],{"class":2487},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[33,72599,72600,72603,72605,72608,72610],{"class":35,"line":35234},[33,72601,72602],{"class":47},"        arr.",[33,72604,60228],{"class":43},[33,72606,72607],{"class":47},"(e.target.dataset.id, ",[33,72609,720],{"class":72},[33,72611,226],{"class":47},[33,72613,72614],{"class":35,"line":35240},[33,72615,72616],{"class":2487},"        \u002F\u002F 重新渲染一次\n",[33,72618,72619,72622],{"class":35,"line":35246},[33,72620,72621],{"class":43},"        render",[33,72623,4235],{"class":47},[33,72625,72626],{"class":35,"line":35257},[33,72627,54617],{"class":47},[33,72629,72630],{"class":35,"line":35263},[33,72631,35686],{"class":47},[33,72633,72634,72636,72638],{"class":35,"line":35269},[33,72635,54636],{"class":47},[33,72637,54034],{"class":53522},[33,72639,53529],{"class":47},[33,72641,72642],{"class":35,"line":35279},[33,72643,100],{"emptyLinePlaceholder":99},[33,72645,72646,72648,72650],{"class":35,"line":35285},[33,72647,54006],{"class":47},[33,72649,54021],{"class":53522},[33,72651,53529],{"class":47},[33,72653,72654],{"class":35,"line":35296},[33,72655,100],{"emptyLinePlaceholder":99},[33,72657,72658,72660,72662],{"class":35,"line":35302},[33,72659,54006],{"class":47},[33,72661,52857],{"class":53522},[33,72663,53529],{"class":47},[19,72665,72666],{},"样式：",[23,72668,72672],{"className":72669,"code":72670,"language":72671,"meta":28,"style":28},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[30,72673,72674,72679,72689,72698,72702,72706,72711,72721,72726,72730,72735,72745,72750,72759,72763,72767,72772,72777,72787,72797,72802,72806,72811,72820,72830,72835,72845,72855,72859,72864,72872,72876,72881,72886,72891,72899,72908,72912,72917,72926,72930,72935,72944,72948,72953,72962,72971,72979,72983,72988,72997,73007,73016,73026,73032,73041,73051,73061,73065,73070,73079,73087,73097,73105,73114,73123,73133,73141,73145,73150,73159],{"__ignoreMap":28},[33,72675,72676],{"class":35,"line":36},[33,72677,72678],{"class":47},"* {\n",[33,72680,72681,72684,72686],{"class":35,"line":51},[33,72682,72683],{"class":53522},"  margin",[33,72685,996],{"class":47},[33,72687,72688],{"class":60},"0;\n",[33,72690,72691,72694,72696],{"class":35,"line":64},[33,72692,72693],{"class":60},"  padding",[33,72695,996],{"class":47},[33,72697,72688],{"class":60},[33,72699,72700],{"class":35,"line":76},[33,72701,1010],{"class":47},[33,72703,72704],{"class":35,"line":87},[33,72705,100],{"emptyLinePlaceholder":99},[33,72707,72708],{"class":35,"line":96},[33,72709,72710],{"class":60},"a {\n",[33,72712,72713,72716,72718],{"class":35,"line":103},[33,72714,72715],{"class":53522},"  text-decoration",[33,72717,996],{"class":47},[33,72719,72720],{"class":60},"none;\n",[33,72722,72723],{"class":35,"line":108},[33,72724,72725],{"class":60},"  color:#721c24;\n",[33,72727,72728],{"class":35,"line":119},[33,72729,1010],{"class":47},[33,72731,72732],{"class":35,"line":128},[33,72733,72734],{"class":60},"h1 {\n",[33,72736,72737,72740,72742],{"class":35,"line":1753},[33,72738,72739],{"class":53522},"  text-align",[33,72741,996],{"class":47},[33,72743,72744],{"class":60},"center;\n",[33,72746,72747],{"class":35,"line":1763},[33,72748,72749],{"class":60},"  color:#333;\n",[33,72751,72752,72754,72756],{"class":35,"line":1775},[33,72753,72683],{"class":53522},[33,72755,996],{"class":47},[33,72757,72758],{"class":60},"20px 0;\n",[33,72760,72761],{"class":35,"line":1780},[33,72762,4931],{"class":47},[33,72764,72765],{"class":35,"line":1785},[33,72766,1010],{"class":47},[33,72768,72769],{"class":35,"line":1940},[33,72770,72771],{"class":60},"table {\n",[33,72773,72774],{"class":35,"line":2183},[33,72775,72776],{"class":60},"  margin:0 auto;\n",[33,72778,72779,72782,72784],{"class":35,"line":2208},[33,72780,72781],{"class":53522},"  width",[33,72783,996],{"class":47},[33,72785,72786],{"class":60},"800px;\n",[33,72788,72789,72792,72794],{"class":35,"line":2234},[33,72790,72791],{"class":53522},"  border-collapse",[33,72793,996],{"class":47},[33,72795,72796],{"class":60},"collapse;\n",[33,72798,72799],{"class":35,"line":2239},[33,72800,72801],{"class":60},"  color:#004085;\n",[33,72803,72804],{"class":35,"line":2247},[33,72805,1010],{"class":47},[33,72807,72808],{"class":35,"line":2255},[33,72809,72810],{"class":60},"th {\n",[33,72812,72813,72815,72817],{"class":35,"line":3992},[33,72814,72693],{"class":53522},[33,72816,996],{"class":47},[33,72818,72819],{"class":60},"10px;\n",[33,72821,72822,72825,72827],{"class":35,"line":4009},[33,72823,72824],{"class":53522},"  background",[33,72826,996],{"class":47},[33,72828,72829],{"class":2487},"#cfe5ff;\n",[33,72831,72832],{"class":35,"line":4014},[33,72833,72834],{"class":47},"  \n",[33,72836,72837,72840,72842],{"class":35,"line":4019},[33,72838,72839],{"class":53522},"  font-size",[33,72841,996],{"class":47},[33,72843,72844],{"class":60},"20px;\n",[33,72846,72847,72850,72852],{"class":35,"line":4024},[33,72848,72849],{"class":53522},"  font-weight",[33,72851,996],{"class":47},[33,72853,72854],{"class":60},"400;\n",[33,72856,72857],{"class":35,"line":4038},[33,72858,1010],{"class":47},[33,72860,72861],{"class":35,"line":4043},[33,72862,72863],{"class":60},"td,th {\n",[33,72865,72866,72869],{"class":35,"line":4834},[33,72867,72868],{"class":60},"  border:1px solid",[33,72870,72871],{"class":2487}," #b8daff;\n",[33,72873,72874],{"class":35,"line":4848},[33,72875,1010],{"class":47},[33,72877,72878],{"class":35,"line":4856},[33,72879,72880],{"class":60},"td {\n",[33,72882,72883],{"class":35,"line":4861},[33,72884,72885],{"class":60},"  padding:10px;\n",[33,72887,72888],{"class":35,"line":4867},[33,72889,72890],{"class":60},"  color:#666;\n",[33,72892,72893,72895,72897],{"class":35,"line":4873},[33,72894,72739],{"class":53522},[33,72896,996],{"class":47},[33,72898,72744],{"class":60},[33,72900,72901,72903,72905],{"class":35,"line":4878},[33,72902,72839],{"class":53522},[33,72904,996],{"class":47},[33,72906,72907],{"class":60},"16px;\n",[33,72909,72910],{"class":35,"line":10194},[33,72911,1010],{"class":47},[33,72913,72914],{"class":35,"line":10218},[33,72915,72916],{"class":60},"tbody tr {\n",[33,72918,72919,72921,72923],{"class":35,"line":10223},[33,72920,72824],{"class":53522},[33,72922,996],{"class":47},[33,72924,72925],{"class":2487},"#fff;\n",[33,72927,72928],{"class":35,"line":10229},[33,72929,1010],{"class":47},[33,72931,72932],{"class":35,"line":10256},[33,72933,72934],{"class":60},"tbody tr:hover {\n",[33,72936,72937,72939,72941],{"class":35,"line":10261},[33,72938,72824],{"class":53522},[33,72940,996],{"class":47},[33,72942,72943],{"class":2487},"#e1ecf8;\n",[33,72945,72946],{"class":35,"line":10267},[33,72947,1010],{"class":47},[33,72949,72950],{"class":35,"line":10279},[33,72951,72952],{"class":60},".info {\n",[33,72954,72955,72957,72959],{"class":35,"line":10291},[33,72956,72781],{"class":53522},[33,72958,996],{"class":47},[33,72960,72961],{"class":60},"900px;\n",[33,72963,72964,72966,72968],{"class":35,"line":10303},[33,72965,72683],{"class":53522},[33,72967,996],{"class":47},[33,72969,72970],{"class":60},"50px auto;\n",[33,72972,72973,72975,72977],{"class":35,"line":11961},[33,72974,72739],{"class":53522},[33,72976,996],{"class":47},[33,72978,72744],{"class":60},[33,72980,72981],{"class":35,"line":11986},[33,72982,1010],{"class":47},[33,72984,72985],{"class":35,"line":12009},[33,72986,72987],{"class":60},".info  input, .info select {\n",[33,72989,72990,72992,72994],{"class":35,"line":12033},[33,72991,72781],{"class":53522},[33,72993,996],{"class":47},[33,72995,72996],{"class":60},"80px;\n",[33,72998,72999,73002,73004],{"class":35,"line":12038},[33,73000,73001],{"class":53522},"  height",[33,73003,996],{"class":47},[33,73005,73006],{"class":60},"27px;\n",[33,73008,73009,73012,73014],{"class":35,"line":12043},[33,73010,73011],{"class":53522},"  outline",[33,73013,996],{"class":47},[33,73015,72720],{"class":60},[33,73017,73018,73021,73023],{"class":35,"line":12048},[33,73019,73020],{"class":53522},"  border-radius",[33,73022,996],{"class":47},[33,73024,73025],{"class":60},"5px;\n",[33,73027,73028,73030],{"class":35,"line":12057},[33,73029,72868],{"class":60},[33,73031,72871],{"class":2487},[33,73033,73034,73037,73039],{"class":35,"line":12062},[33,73035,73036],{"class":53522},"  padding-left",[33,73038,996],{"class":47},[33,73040,73025],{"class":60},[33,73042,73043,73046,73048],{"class":35,"line":12068},[33,73044,73045],{"class":53522},"  box-sizing",[33,73047,996],{"class":47},[33,73049,73050],{"class":60},"border-box;\n",[33,73052,73053,73056,73058],{"class":35,"line":12089},[33,73054,73055],{"class":53522},"  margin-right",[33,73057,996],{"class":47},[33,73059,73060],{"class":60},"15px;\n",[33,73062,73063],{"class":35,"line":12095},[33,73064,1010],{"class":47},[33,73066,73067],{"class":35,"line":12109},[33,73068,73069],{"class":60},".info button {\n",[33,73071,73072,73074,73076],{"class":35,"line":12115},[33,73073,72781],{"class":53522},[33,73075,996],{"class":47},[33,73077,73078],{"class":60},"60px;\n",[33,73080,73081,73083,73085],{"class":35,"line":12142},[33,73082,73001],{"class":53522},[33,73084,996],{"class":47},[33,73086,73006],{"class":60},[33,73088,73089,73092,73094],{"class":35,"line":12151},[33,73090,73091],{"class":53522},"  background-color",[33,73093,996],{"class":47},[33,73095,73096],{"class":2487},"#004085;\n",[33,73098,73099,73101,73103],{"class":35,"line":12157},[33,73100,73011],{"class":53522},[33,73102,996],{"class":47},[33,73104,72720],{"class":60},[33,73106,73107,73110,73112],{"class":35,"line":12165},[33,73108,73109],{"class":53522},"  border",[33,73111,996],{"class":47},[33,73113,72688],{"class":60},[33,73115,73116,73119,73121],{"class":35,"line":12170},[33,73117,73118],{"class":53522},"  color",[33,73120,996],{"class":47},[33,73122,72925],{"class":2487},[33,73124,73125,73128,73130],{"class":35,"line":18842},[33,73126,73127],{"class":53522},"  cursor",[33,73129,996],{"class":47},[33,73131,73132],{"class":60},"pointer;\n",[33,73134,73135,73137,73139],{"class":35,"line":18848},[33,73136,73020],{"class":53522},[33,73138,996],{"class":47},[33,73140,73025],{"class":60},[33,73142,73143],{"class":35,"line":18871},[33,73144,1010],{"class":47},[33,73146,73147],{"class":35,"line":18877},[33,73148,73149],{"class":60},".info .age {\n",[33,73151,73152,73154,73156],{"class":35,"line":18900},[33,73153,72781],{"class":53522},[33,73155,996],{"class":47},[33,73157,73158],{"class":60},"50px;\n",[33,73160,73161],{"class":35,"line":18914},[33,73162,1010],{"class":47},[19,73164,73165],{},"思路：",[19,73167,73168],{},[3736,73169],{"alt":28,"src":73170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,73172,73173],{},[3736,73174],{"alt":28,"src":73175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,73177,73178],{},[3736,73179],{"alt":28,"src":73180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[631,73182,73184],{"id":73183},"_3315-重绘回流","3.3.15 重绘回流",[19,73186,73187],{},[3736,73188],{"alt":28,"src":73189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,73191,73192],{},[3736,73193],{"alt":28,"src":73194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,73196,73197],{},[3736,73198],{"alt":28,"src":73199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,73201,73203],{"id":73202},"_34-bom","3.4 BOM",[19,73205,73206],{},[3736,73207],{"alt":28,"src":73208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,73210,73211],{},"平时写的document省略了window而已，实际上是window.document",[19,73213,73214],{},"函数也是这样，调用的时候实际为window.fn()",[19,73216,73217],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,73219,73220],{},"window大部分情况下可以省略",[631,73222,73224],{"id":73223},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,73226,73227],{},"只执行一次",[19,73229,73230],{},[3736,73231],{"alt":28,"src":73232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,73234,73235],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,73237,73238],{},[3736,73239],{"alt":28,"src":73240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[631,73242,73244],{"id":73243},"_342-js执行机制","3.4.2 JS执行机制",[19,73246,73247],{},[3736,73248],{"alt":28,"src":73249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,73251,73252],{},"两个的结果都是1111 3333 2222",[19,73254,73255],{},[3736,73256],{"alt":28,"src":73257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,73259,73260],{},[3736,73261],{"alt":28,"src":73262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,73264,73265],{},[3736,73266],{"alt":28,"src":73267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,73269,73270],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,73272,73273],{},"工作流程：",[19,73275,73276],{},[3736,73277],{"alt":28,"src":73278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,73280,73281],{},[3736,73282],{"alt":28,"src":73283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,73285,73286],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,73288,73289],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[631,73291,73293],{"id":73292},"_343-location对象","3.4.3 location对象",[19,73295,73296],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73298,73299],{},[3736,73300],{"alt":28,"src":73301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73303,73304],{},"href可以跳转页面",[328,73306,73307],{},[331,73308,73309],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73311,73312],{},"search得到提交信息之后网站后边的地址",[19,73314,73315],{},[3736,73316],{"alt":28,"src":73317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73319,73320],{},[3736,73321],{"alt":28,"src":73322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[328,73324,73325],{"start":51},[331,73326,73327],{},"hash:这个获取单页面应用#后边的地址",[19,73329,73330],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73332,73333],{},[3736,73334],{"alt":28,"src":73335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[23,73337,73339],{"className":55286,"code":73338,"language":55288,"meta":28,"style":28},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[30,73340,73341,73361,73381],{"__ignoreMap":28},[33,73342,73343,73345,73347,73349,73351,73354,73357,73359],{"class":35,"line":36},[33,73344,54364],{"class":47},[33,73346,2663],{"class":53522},[33,73348,63275],{"class":43},[33,73350,57],{"class":47},[33,73352,73353],{"class":60},"\"#\u002Fmy\"",[33,73355,73356],{"class":47},">我的\u003C\u002F",[33,73358,2663],{"class":53522},[33,73360,53529],{"class":47},[33,73362,73363,73365,73367,73369,73371,73374,73377,73379],{"class":35,"line":51},[33,73364,54364],{"class":47},[33,73366,2663],{"class":53522},[33,73368,63275],{"class":43},[33,73370,57],{"class":47},[33,73372,73373],{"class":60},"\"#\u002Ffriend\"",[33,73375,73376],{"class":47},">关注\u003C\u002F",[33,73378,2663],{"class":53522},[33,73380,53529],{"class":47},[33,73382,73383,73385,73387,73389,73391,73394,73397,73399],{"class":35,"line":64},[33,73384,54364],{"class":47},[33,73386,2663],{"class":53522},[33,73388,63275],{"class":43},[33,73390,57],{"class":47},[33,73392,73393],{"class":60},"\"#\u002Fdownload\"",[33,73395,73396],{"class":47},">下载\u003C\u002F",[33,73398,2663],{"class":53522},[33,73400,53529],{"class":47},[19,73402,73403],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[328,73405,73406],{"start":64},[331,73407,73408,73409,73411,73412,73414],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55935,73410],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55935,73413],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[631,73416,73418],{"id":73417},"_345-navigator对象","3.4.5 navigator对象",[19,73420,73421],{},[3736,73422],{"alt":28,"src":73423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[23,73425,73429],{"className":73426,"code":73427,"language":73428,"meta":28,"style":28},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[30,73430,73431,73436,73447,73459,73464,73515,73556,73561,73574,73586,73591],{"__ignoreMap":28},[33,73432,73433],{"class":35,"line":36},[33,73434,73435],{"class":2487},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[33,73437,73438,73440,73442,73444],{"class":35,"line":51},[33,73439,2651],{"class":39},[33,73441,133],{"class":47},[33,73443,56668],{"class":39},[33,73445,73446],{"class":47}," () { \n",[33,73448,73449,73451,73454,73456],{"class":35,"line":64},[33,73450,9038],{"class":39},[33,73452,73453],{"class":72}," userAgent",[33,73455,15804],{"class":39},[33,73457,73458],{"class":47}," navigator.userAgent \n",[33,73460,73461],{"class":35,"line":76},[33,73462,73463],{"class":2487},"\u002F\u002F 验证是否为Android或iPhone \n",[33,73465,73466,73468,73471,73473,73476,73479,73481,73483,73486,73488,73491,73495,73497,73499,73501,73504,73506,73508,73510,73512],{"class":35,"line":87},[33,73467,9038],{"class":39},[33,73469,73470],{"class":72}," android",[33,73472,15804],{"class":39},[33,73474,73475],{"class":47}," userAgent.",[33,73477,73478],{"class":43},"match",[33,73480,133],{"class":47},[33,73482,3001],{"class":60},[33,73484,73485],{"class":50199},"(Android);",[33,73487,3393],{"class":39},[33,73489,73490],{"class":72},"[\\s",[33,73492,73494],{"class":73493},"snhLl","\\\u002F",[33,73496,3348],{"class":72},[33,73498,880],{"class":39},[33,73500,133],{"class":50199},[33,73502,73503],{"class":72},"[\\d.]",[33,73505,880],{"class":39},[33,73507,2849],{"class":50199},[33,73509,3393],{"class":39},[33,73511,3001],{"class":60},[33,73513,73514],{"class":47},") \n",[33,73516,73517,73519,73522,73524,73526,73528,73530,73532,73535,73538,73541,73543,73545,73548,73550,73552,73554],{"class":35,"line":96},[33,73518,9038],{"class":39},[33,73520,73521],{"class":72}," iphone",[33,73523,15804],{"class":39},[33,73525,73475],{"class":47},[33,73527,73478],{"class":43},[33,73529,133],{"class":47},[33,73531,3001],{"class":60},[33,73533,73534],{"class":50199},"(iPhone",[33,73536,73537],{"class":72},"\\s",[33,73539,73540],{"class":50199},"OS)",[33,73542,73537],{"class":72},[33,73544,133],{"class":50199},[33,73546,73547],{"class":72},"[\\d_]",[33,73549,880],{"class":39},[33,73551,2849],{"class":50199},[33,73553,3001],{"class":60},[33,73555,73514],{"class":47},[33,73557,73558],{"class":35,"line":103},[33,73559,73560],{"class":2487},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[33,73562,73563,73565,73568,73571],{"class":35,"line":108},[33,73564,3805],{"class":39},[33,73566,73567],{"class":47}," (android ",[33,73569,73570],{"class":39},"||",[33,73572,73573],{"class":47}," iphone) { \n",[33,73575,73576,73579,73581,73584],{"class":35,"line":119},[33,73577,73578],{"class":47},"location.href ",[33,73580,57],{"class":39},[33,73582,73583],{"class":60}," 'http:\u002F\u002Fm.itcast.cn'",[33,73585,4931],{"class":47},[33,73587,73588],{"class":35,"line":128},[33,73589,73590],{"class":47},"} \n",[33,73592,73593],{"class":35,"line":1753},[33,73594,73595],{"class":47},"})()\n",[631,73597,73599],{"id":73598},"_346-histroy对象","3.4.6 histroy对象",[19,73601,73602],{},[3736,73603],{"alt":28,"src":73604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73606,73607],{},"浏览器地址的前进与后退!!!",[19,73609,73610],{},"history.back() 等效于 history.go(-1)",[19,73612,73613],{},"history.forward() 等效于 history.go(1)",[14,73615,73617],{"id":73616},"_35-本地存储","3.5 本地存储",[328,73619,73620,73623,73626],{},[331,73621,73622],{},"数据存储在用户浏览器中",[331,73624,73625],{},"设置、读取方便、甚至页面刷新不丢失数据",[331,73627,73628],{},"容量较大，sessionStorage和localStorage约 5M 左右",[631,73630,73632],{"id":73631},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73634,73635],{},"只能存储字符串",[19,73637,73638],{},[3736,73639],{"alt":28,"src":73640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73642,73643],{},[3736,73644],{"alt":28,"src":73645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73647,73648],{},"键值对要加引号,不然就会当变量来看了",[19,73650,73651],{},"localStorage.setItem('uname', 'pink')",[19,73653,73654],{},"刷新之后信息不再丢失",[19,73656,73657],{},"操作key,value会跟着变",[19,73659,73660],{},"删除只删除键就可以,即名字",[19,73662,73651],{},[19,73664,73665],{},"改:",[19,73667,73668],{},"localStorage.setItem('uname','red')",[19,73670,73671],{},"有这个键就是改,没有这个键就是改",[19,73673,73674],{},[3736,73675],{"alt":28,"src":73676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73678,73679],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73681,73682],{},[3736,73683],{"alt":28,"src":73684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73686,73687],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[631,73689,73691],{"id":73690},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73693,73694],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73696,73697],{},"特性:",[328,73699,73700,73703,73706,73709],{},[331,73701,73702],{},"生命周期为关闭浏览器窗口",[331,73704,73705],{},"在同一个窗口(页面)下数据可以共享",[331,73707,73708],{},"以键值对的形式存储使用",[331,73710,73711],{},"用法跟localStorage 基本相同",[631,73713,73715],{"id":73714},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73717,73718],{},"本地只能存储字符串,无法直接存储复杂数据类型",[23,73720,73722],{"className":55286,"code":73721,"language":55288,"meta":28,"style":28},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[30,73723,73724,73732,73737,73742,73747,73752,73756,73761,73766],{"__ignoreMap":28},[33,73725,73726,73728,73730],{"class":35,"line":36},[33,73727,2226],{"class":47},[33,73729,54034],{"class":53522},[33,73731,53529],{"class":47},[33,73733,73734],{"class":35,"line":51},[33,73735,73736],{"class":47},"    const obj = {\n",[33,73738,73739],{"class":35,"line":64},[33,73740,73741],{"class":47},"      uname: 'pink老师',\n",[33,73743,73744],{"class":35,"line":76},[33,73745,73746],{"class":47},"      age: 18,\n",[33,73748,73749],{"class":35,"line":87},[33,73750,73751],{"class":47},"      gender: '女'\n",[33,73753,73754],{"class":35,"line":96},[33,73755,4446],{"class":47},[33,73757,73758],{"class":35,"line":103},[33,73759,73760],{"class":47},"    \u002F\u002F 存储复杂数据类型\n",[33,73762,73763],{"class":35,"line":108},[33,73764,73765],{"class":47},"    localStorage.setItem('obj', obj)\n",[33,73767,73768,73770,73772],{"class":35,"line":119},[33,73769,54636],{"class":47},[33,73771,54034],{"class":53522},[33,73773,53529],{"class":47},[19,73775,73776],{},[3736,73777],{"alt":28,"src":73778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73780,73781],{},"如果获取一下数据:",[19,73783,73784],{},"log(localStorage.getItem('obj'))",[19,73786,73787],{},[3736,73788],{"alt":28,"src":73789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73791,73792],{},"发现直接存对象是使用不了的!!!",[24236,73794,73796],{"id":73795},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73798,73799],{},[3736,73800],{"alt":28,"src":73801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[23,73803,73805],{"className":52855,"code":73804,"language":52857,"meta":28,"style":28},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[30,73806,73807,73815,73825,73835,73844,73852,73856,73860,73886,73905,73913,73917,73922,73927],{"__ignoreMap":28},[33,73808,73809,73811,73813],{"class":35,"line":36},[33,73810,2226],{"class":47},[33,73812,54034],{"class":53522},[33,73814,53529],{"class":47},[33,73816,73817,73819,73821,73823],{"class":35,"line":51},[33,73818,13462],{"class":39},[33,73820,72186],{"class":72},[33,73822,15804],{"class":39},[33,73824,17810],{"class":47},[33,73826,73827,73830,73833],{"class":35,"line":64},[33,73828,73829],{"class":47},"      uname: ",[33,73831,73832],{"class":60},"'pink老师'",[33,73834,33696],{"class":47},[33,73836,73837,73840,73842],{"class":35,"line":76},[33,73838,73839],{"class":47},"      age: ",[33,73841,248],{"class":72},[33,73843,33696],{"class":47},[33,73845,73846,73849],{"class":35,"line":87},[33,73847,73848],{"class":47},"      gender: ",[33,73850,73851],{"class":60},"'女'\n",[33,73853,73854],{"class":35,"line":96},[33,73855,4446],{"class":47},[33,73857,73858],{"class":35,"line":103},[33,73859,73760],{"class":2487},[33,73861,73862,73865,73868,73870,73873,73875,73878,73880,73883],{"class":35,"line":108},[33,73863,73864],{"class":47},"  localStorage.",[33,73866,73867],{"class":43},"setItem",[33,73869,133],{"class":47},[33,73871,73872],{"class":60},"'obj'",[33,73874,245],{"class":47},[33,73876,73877],{"class":72},"JSON",[33,73879,2975],{"class":47},[33,73881,73882],{"class":43},"stringify",[33,73884,73885],{"class":47},"(obj))\n",[33,73887,73888,73891,73893,73896,73899,73901,73903],{"class":35,"line":119},[33,73889,73890],{"class":47},"  console.",[33,73892,60465],{"class":43},[33,73894,73895],{"class":47},"(localStorage.",[33,73897,73898],{"class":43},"getItem",[33,73900,133],{"class":47},[33,73902,73872],{"class":60},[33,73904,551],{"class":47},[33,73906,73907,73909,73911],{"class":35,"line":128},[33,73908,54636],{"class":47},[33,73910,54034],{"class":53522},[33,73912,53529],{"class":47},[33,73914,73915],{"class":35,"line":1753},[33,73916,72834],{"class":47},[33,73918,73919],{"class":35,"line":1763},[33,73920,73921],{"class":47},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[33,73923,73924],{"class":35,"line":1775},[33,73925,73926],{"class":47},"  类型是字符串的\n",[33,73928,73929],{"class":35,"line":1780},[33,73930,73931],{"class":47},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[24236,73933,73935],{"id":73934},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73937,73938],{},[3736,73939],{"alt":28,"src":73940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73942,73943],{},[3736,73944],{"alt":28,"src":73945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[23,73947,73949],{"className":55286,"code":73948,"language":55288,"meta":28,"style":28},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[30,73950,73951,73959,73963,73967,73971,73975,73979,73984,73989,73994,73999,74004,74009,74014,74019],{"__ignoreMap":28},[33,73952,73953,73955,73957],{"class":35,"line":36},[33,73954,54364],{"class":47},[33,73956,54034],{"class":53522},[33,73958,53529],{"class":47},[33,73960,73961],{"class":35,"line":51},[33,73962,73736],{"class":47},[33,73964,73965],{"class":35,"line":64},[33,73966,73741],{"class":47},[33,73968,73969],{"class":35,"line":76},[33,73970,73746],{"class":47},[33,73972,73973],{"class":35,"line":87},[33,73974,73751],{"class":47},[33,73976,73977],{"class":35,"line":96},[33,73978,4446],{"class":47},[33,73980,73981],{"class":35,"line":103},[33,73982,73983],{"class":47},"    \u002F\u002F 1.存储复杂数据类型\n",[33,73985,73986],{"class":35,"line":108},[33,73987,73988],{"class":47},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[33,73990,73991],{"class":35,"line":119},[33,73992,73993],{"class":47},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[33,73995,73996],{"class":35,"line":128},[33,73997,73998],{"class":47},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[33,74000,74001],{"class":35,"line":1753},[33,74002,74003],{"class":47},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[33,74005,74006],{"class":35,"line":1763},[33,74007,74008],{"class":47},"    \u002F\u002F 取\n",[33,74010,74011],{"class":35,"line":1775},[33,74012,74013],{"class":47},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[33,74015,74016],{"class":35,"line":1780},[33,74017,74018],{"class":47},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[33,74020,74021,74023,74025],{"class":35,"line":1785},[33,74022,54636],{"class":47},[33,74024,54034],{"class":53522},[33,74026,53529],{"class":47},[19,74028,74029],{},[3736,74030],{"alt":28,"src":74031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[631,74033,74035],{"id":74034},"_356-数组map方法","3.5.6 数组map方法",[19,74037,74038],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,74040,74041],{},[3736,74042],{"alt":28,"src":74043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,74045,74046],{},[3736,74047],{"alt":28,"src":74048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,74050,74051,74054],{},[2575,74052,74053],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,74056,74057],{},"map有返回值，但是forEach没有返回值",[19,74059,74060],{},"map是个方法。用的时候要加 ()",[19,74062,74063],{},"map返回的是一个数组",[631,74065,74067],{"id":74066},"_357-数组中join方法","3.5.7 数组中join方法",[19,74069,74070],{},[3736,74071],{"alt":28,"src":74072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,74074,74075],{},"类似于python中拼接字符串一样！",[328,74077,74078,74081,74084],{},[331,74079,74080],{},"小括号为空则逗号分开",[331,74082,74083],{},"小括号为空字符串 ''，则元素之间没有分隔符",[331,74085,74086],{},"小括号用啥符号就用进行分割",[631,74088,74090],{"id":74089},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[328,74092,74093,74096,74099,74102,74105],{},[331,74094,74095],{},"记住本地时间获取快速方式：new Date().toDateString()",[331,74097,74098],{},"尽量减少DOM操作，用好map+join的渲染方式",[331,74100,74101],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[331,74103,74104],{},"return可以实现函数的结束",[331,74106,74107],{},"禁止跳转是 preventDefault() 不要忘记",[23,74109,74111],{"className":52855,"code":74110,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,74112,74113,74123,74137,74141,74149,74163,74183,74195,74203,74209,74219,74229,74233,74237,74243,74253,74265,74269,74273,74280,74292,74306,74316,74320,74324,74331,74338,74345,74357,74369,74379,74391,74395,74399,74406,74413,74425,74437,74447,74459,74489,74493,74497,74504,74516,74528,74552,74562,74572,74576,74580,74588,74599,74611,74623,74635,74652,74664,74676,74680,74684,74691,74703,74715,74727,74738,74756,74769,74781,74805,74816,74820,74824,74832,74842,74846,74850,74856,74868,74879,74889,74893,74897,74903,74925,74929,74933,74939,74945,74957,74967,74979,75009,75022,75039,75043,75047,75058,75080,75090,75094,75098,75111,75121,75133,75145,75157,75169,75179,75189,75199,75210,75223,75227,75235,75243,75247,75255,75268,75288,75321,75354,75387,75413,75431,75449,75457,75483,75501,75519,75537,75555,75573,75581,75589,75607,75615,75644,75652,75660,75668,75681,75693,75705,75717,75729,75741,75754,75766,75774,75782,75790,75795,75800,75804,75808,75812,75816,75820,75824,75829,75834,75839,75844,75852,75860,75868,75873,75878,75883,75888,75893,75898,75903,75908,75913,75918,75923,75928,75933,75938,75942,75947,75952,75962,75971,75975,75980,75989,76005,76047,76087,76126,76191,76199,76203,76208,76226,76234,76239,76244,76273,76279,76284,76297,76309,76321,76333,76345,76357,76369,76373,76383,76387,76392,76397,76401,76410,76414,76419,76424,76443,76448,76468,76472,76477,76481,76486,76504,76522,76540,76559,76578,76597,76602,76608,76629,76635,76644,76650,76656,76662,76689,76702,76707,76717,76723,76729,76735,76741,76746,76752,76758,76764,76770,76803,76808,76813,76818,76823,76829,76835,76841,76852,76857,76863,76870,76884,76890,76914,76919,76924,76930,76936,76957,76963,76976,76982,76988,76994,77000,77005,77011,77017,77023,77041,77055,77061,77069,77075,77097,77102,77107,77112,77117,77122,77131,77140,77145],{"__ignoreMap":28},[33,74114,74115,74117,74119,74121],{"class":35,"line":36},[33,74116,53519],{"class":47},[33,74118,53523],{"class":53522},[33,74120,53526],{"class":43},[33,74122,53529],{"class":47},[33,74124,74125,74127,74129,74131,74133,74135],{"class":35,"line":51},[33,74126,2226],{"class":47},[33,74128,52857],{"class":53522},[33,74130,53538],{"class":43},[33,74132,57],{"class":47},[33,74134,53543],{"class":60},[33,74136,53529],{"class":47},[33,74138,74139],{"class":35,"line":64},[33,74140,100],{"emptyLinePlaceholder":99},[33,74142,74143,74145,74147],{"class":35,"line":76},[33,74144,2226],{"class":47},[33,74146,53556],{"class":53522},[33,74148,53529],{"class":47},[33,74150,74151,74153,74155,74157,74159,74161],{"class":35,"line":87},[33,74152,54364],{"class":47},[33,74154,53566],{"class":53522},[33,74156,53569],{"class":43},[33,74158,57],{"class":47},[33,74160,53574],{"class":60},[33,74162,53529],{"class":47},[33,74164,74165,74167,74169,74171,74173,74175,74177,74179,74181],{"class":35,"line":96},[33,74166,54364],{"class":47},[33,74168,53566],{"class":53522},[33,74170,17158],{"class":43},[33,74172,57],{"class":47},[33,74174,53613],{"class":60},[33,74176,53593],{"class":43},[33,74178,57],{"class":47},[33,74180,53620],{"class":60},[33,74182,53529],{"class":47},[33,74184,74185,74187,74189,74191,74193],{"class":35,"line":103},[33,74186,54364],{"class":47},[33,74188,53629],{"class":53522},[33,74190,53632],{"class":47},[33,74192,53629],{"class":53522},[33,74194,53529],{"class":47},[33,74196,74197,74199,74201],{"class":35,"line":108},[33,74198,54364],{"class":47},[33,74200,2331],{"class":53522},[33,74202,53529],{"class":47},[33,74204,74205,74207],{"class":35,"line":119},[33,74206,8649],{"class":53522},[33,74208,17810],{"class":47},[33,74210,74211,74213,74215,74217],{"class":35,"line":128},[33,74212,56914],{"class":72},[33,74214,996],{"class":47},[33,74216,2617],{"class":72},[33,74218,3567],{"class":47},[33,74220,74221,74223,74225,74227],{"class":35,"line":1753},[33,74222,56925],{"class":72},[33,74224,996],{"class":47},[33,74226,2617],{"class":72},[33,74228,3567],{"class":47},[33,74230,74231],{"class":35,"line":1763},[33,74232,4446],{"class":47},[33,74234,74235],{"class":35,"line":1775},[33,74236,100],{"emptyLinePlaceholder":99},[33,74238,74239,74241],{"class":35,"line":1780},[33,74240,59497],{"class":53522},[33,74242,17810],{"class":47},[33,74244,74245,74247,74249,74251],{"class":35,"line":1785},[33,74246,59504],{"class":72},[33,74248,996],{"class":47},[33,74250,53813],{"class":72},[33,74252,3567],{"class":47},[33,74254,74255,74257,74259,74261,74263],{"class":35,"line":1940},[33,74256,64295],{"class":72},[33,74258,996],{"class":47},[33,74260,1284],{"class":72},[33,74262,53713],{"class":39},[33,74264,3567],{"class":47},[33,74266,74267],{"class":35,"line":2183},[33,74268,4446],{"class":47},[33,74270,74271],{"class":35,"line":2208},[33,74272,100],{"emptyLinePlaceholder":99},[33,74274,74275,74278],{"class":35,"line":2234},[33,74276,74277],{"class":43},"    .info",[33,74279,17810],{"class":47},[33,74281,74282,74284,74286,74288,74290],{"class":35,"line":2239},[33,74283,56990],{"class":72},[33,74285,996],{"class":47},[33,74287,53710],{"class":72},[33,74289,53713],{"class":39},[33,74291,3567],{"class":47},[33,74293,74294,74296,74298,74300,74302,74304],{"class":35,"line":2247},[33,74295,56925],{"class":72},[33,74297,996],{"class":47},[33,74299,1279],{"class":72},[33,74301,53713],{"class":39},[33,74303,53777],{"class":72},[33,74305,3567],{"class":47},[33,74307,74308,74310,74312,74314],{"class":35,"line":2255},[33,74309,59504],{"class":72},[33,74311,996],{"class":47},[33,74313,53813],{"class":72},[33,74315,3567],{"class":47},[33,74317,74318],{"class":35,"line":3992},[33,74319,4446],{"class":47},[33,74321,74322],{"class":35,"line":4009},[33,74323,100],{"emptyLinePlaceholder":99},[33,74325,74326,74329],{"class":35,"line":4014},[33,74327,74328],{"class":43},"    .uname",[33,74330,33696],{"class":47},[33,74332,74333,74336],{"class":35,"line":4019},[33,74334,74335],{"class":43},"    .age",[33,74337,33696],{"class":47},[33,74339,74340,74343],{"class":35,"line":4024},[33,74341,74342],{"class":43},"    .salary",[33,74344,17810],{"class":47},[33,74346,74347,74349,74351,74353,74355],{"class":35,"line":4038},[33,74348,56990],{"class":72},[33,74350,996],{"class":47},[33,74352,2734],{"class":72},[33,74354,53713],{"class":39},[33,74356,3567],{"class":47},[33,74358,74359,74361,74363,74365,74367],{"class":35,"line":4043},[33,74360,57004],{"class":72},[33,74362,996],{"class":47},[33,74364,1284],{"class":72},[33,74366,53713],{"class":39},[33,74368,3567],{"class":47},[33,74370,74371,74373,74375,74377],{"class":35,"line":4834},[33,74372,63998],{"class":72},[33,74374,996],{"class":47},[33,74376,56956],{"class":72},[33,74378,3567],{"class":47},[33,74380,74381,74383,74385,74387,74389],{"class":35,"line":4848},[33,74382,63968],{"class":72},[33,74384,996],{"class":47},[33,74386,2992],{"class":72},[33,74388,53713],{"class":39},[33,74390,3567],{"class":47},[33,74392,74393],{"class":35,"line":4856},[33,74394,4446],{"class":47},[33,74396,74397],{"class":35,"line":4861},[33,74398,100],{"emptyLinePlaceholder":99},[33,74400,74401,74404],{"class":35,"line":4867},[33,74402,74403],{"class":43},"    .gender",[33,74405,33696],{"class":47},[33,74407,74408,74411],{"class":35,"line":4873},[33,74409,74410],{"class":43},"    .city",[33,74412,17810],{"class":47},[33,74414,74415,74417,74419,74421,74423],{"class":35,"line":4878},[33,74416,56990],{"class":72},[33,74418,996],{"class":47},[33,74420,2734],{"class":72},[33,74422,53713],{"class":39},[33,74424,3567],{"class":47},[33,74426,74427,74429,74431,74433,74435],{"class":35,"line":10194},[33,74428,57004],{"class":72},[33,74430,996],{"class":47},[33,74432,3237],{"class":72},[33,74434,53713],{"class":39},[33,74436,3567],{"class":47},[33,74438,74439,74441,74443,74445],{"class":35,"line":10218},[33,74440,63998],{"class":72},[33,74442,996],{"class":47},[33,74444,56956],{"class":72},[33,74446,3567],{"class":47},[33,74448,74449,74451,74453,74455,74457],{"class":35,"line":10223},[33,74450,63968],{"class":72},[33,74452,996],{"class":47},[33,74454,2992],{"class":72},[33,74456,53713],{"class":39},[33,74458,3567],{"class":47},[33,74460,74461,74463,74465,74467,74469,74471,74474,74476,74478,74480,74483,74485,74487],{"class":35,"line":10229},[33,74462,64195],{"class":72},[33,74464,996],{"class":47},[33,74466,720],{"class":72},[33,74468,53713],{"class":39},[33,74470,53742],{"class":72},[33,74472,74473],{"class":72}," rgb",[33,74475,133],{"class":47},[33,74477,3983],{"class":72},[33,74479,245],{"class":47},[33,74481,74482],{"class":72},"197",[33,74484,245],{"class":47},[33,74486,74482],{"class":72},[33,74488,4976],{"class":47},[33,74490,74491],{"class":35,"line":10256},[33,74492,4446],{"class":47},[33,74494,74495],{"class":35,"line":10261},[33,74496,100],{"emptyLinePlaceholder":99},[33,74498,74499,74502],{"class":35,"line":10267},[33,74500,74501],{"class":53522},"    button",[33,74503,17810],{"class":47},[33,74505,74506,74508,74510,74512,74514],{"class":35,"line":10279},[33,74507,57004],{"class":72},[33,74509,996],{"class":47},[33,74511,3237],{"class":72},[33,74513,53713],{"class":39},[33,74515,3567],{"class":47},[33,74517,74518,74520,74522,74524,74526],{"class":35,"line":10291},[33,74519,56990],{"class":72},[33,74521,996],{"class":47},[33,74523,2901],{"class":72},[33,74525,53713],{"class":39},[33,74527,3567],{"class":47},[33,74529,74530,74532,74534,74537,74539,74541,74543,74546,74548,74550],{"class":35,"line":10303},[33,74531,57103],{"class":72},[33,74533,996],{"class":47},[33,74535,74536],{"class":72},"rgb",[33,74538,133],{"class":47},[33,74540,3376],{"class":72},[33,74542,245],{"class":47},[33,74544,74545],{"class":72},"187",[33,74547,245],{"class":47},[33,74549,2722],{"class":72},[33,74551,4976],{"class":47},[33,74553,74554,74556,74558,74560],{"class":35,"line":11961},[33,74555,59634],{"class":72},[33,74557,996],{"class":47},[33,74559,63060],{"class":72},[33,74561,3567],{"class":47},[33,74563,74564,74566,74568,74570],{"class":35,"line":11986},[33,74565,64195],{"class":72},[33,74567,996],{"class":47},[33,74569,2617],{"class":72},[33,74571,3567],{"class":47},[33,74573,74574],{"class":35,"line":12009},[33,74575,4446],{"class":47},[33,74577,74578],{"class":35,"line":12033},[33,74579,100],{"emptyLinePlaceholder":99},[33,74581,74582,74584,74586],{"class":35,"line":12038},[33,74583,74501],{"class":53522},[33,74585,53909],{"class":53522},[33,74587,17810],{"class":47},[33,74589,74590,74592,74594,74597],{"class":35,"line":12043},[33,74591,57228],{"class":72},[33,74593,996],{"class":47},[33,74595,74596],{"class":72},"inline-block",[33,74598,3567],{"class":47},[33,74600,74601,74603,74605,74607,74609],{"class":35,"line":12048},[33,74602,56990],{"class":72},[33,74604,996],{"class":47},[33,74606,1279],{"class":72},[33,74608,53713],{"class":39},[33,74610,3567],{"class":47},[33,74612,74613,74615,74617,74619,74621],{"class":35,"line":12057},[33,74614,57004],{"class":72},[33,74616,996],{"class":47},[33,74618,1279],{"class":72},[33,74620,53713],{"class":39},[33,74622,3567],{"class":47},[33,74624,74625,74627,74629,74631,74633],{"class":35,"line":12062},[33,74626,59577],{"class":72},[33,74628,996],{"class":47},[33,74630,2890],{"class":72},[33,74632,53713],{"class":39},[33,74634,3567],{"class":47},[33,74636,74637,74639,74641,74643,74645,74647,74650],{"class":35,"line":12068},[33,74638,64195],{"class":72},[33,74640,996],{"class":47},[33,74642,720],{"class":72},[33,74644,53713],{"class":39},[33,74646,53742],{"class":72},[33,74648,74649],{"class":72}," #fff",[33,74651,3567],{"class":47},[33,74653,74654,74656,74658,74660,74662],{"class":35,"line":12089},[33,74655,57353],{"class":72},[33,74657,996],{"class":47},[33,74659,758],{"class":72},[33,74661,53713],{"class":39},[33,74663,3567],{"class":47},[33,74665,74666,74668,74670,74672,74674],{"class":35,"line":12095},[33,74667,63968],{"class":72},[33,74669,996],{"class":47},[33,74671,720],{"class":72},[33,74673,53713],{"class":39},[33,74675,3567],{"class":47},[33,74677,74678],{"class":35,"line":12109},[33,74679,4446],{"class":47},[33,74681,74682],{"class":35,"line":12115},[33,74683,100],{"emptyLinePlaceholder":99},[33,74685,74686,74689],{"class":35,"line":12142},[33,74687,74688],{"class":43},"    .total",[33,74690,17810],{"class":47},[33,74692,74693,74695,74697,74699,74701],{"class":35,"line":12151},[33,74694,56990],{"class":72},[33,74696,996],{"class":47},[33,74698,63847],{"class":72},[33,74700,53713],{"class":39},[33,74702,3567],{"class":47},[33,74704,74705,74707,74709,74711,74713],{"class":35,"line":12157},[33,74706,57004],{"class":72},[33,74708,996],{"class":47},[33,74710,2822],{"class":72},[33,74712,53713],{"class":39},[33,74714,3567],{"class":47},[33,74716,74717,74719,74721,74723,74725],{"class":35,"line":12165},[33,74718,59577],{"class":72},[33,74720,996],{"class":47},[33,74722,2822],{"class":72},[33,74724,53713],{"class":39},[33,74726,3567],{"class":47},[33,74728,74729,74731,74733,74736],{"class":35,"line":12170},[33,74730,59504],{"class":72},[33,74732,996],{"class":47},[33,74734,74735],{"class":72},"right",[33,74737,3567],{"class":47},[33,74739,74740,74742,74744,74746,74748,74750,74752,74754],{"class":35,"line":18842},[33,74741,56925],{"class":72},[33,74743,996],{"class":47},[33,74745,2822],{"class":72},[33,74747,53713],{"class":39},[33,74749,53777],{"class":72},[33,74751,4297],{"class":72},[33,74753,53713],{"class":39},[33,74755,3567],{"class":47},[33,74757,74758,74761,74763,74765,74767],{"class":35,"line":18848},[33,74759,74760],{"class":72},"      padding-right",[33,74762,996],{"class":47},[33,74764,1279],{"class":72},[33,74766,53713],{"class":39},[33,74768,3567],{"class":47},[33,74770,74771,74773,74775,74777,74779],{"class":35,"line":18871},[33,74772,57141],{"class":72},[33,74774,996],{"class":47},[33,74776,2940],{"class":72},[33,74778,53713],{"class":39},[33,74780,3567],{"class":47},[33,74782,74783,74785,74787,74789,74791,74794,74796,74799,74801,74803],{"class":35,"line":18877},[33,74784,57103],{"class":72},[33,74786,996],{"class":47},[33,74788,74536],{"class":72},[33,74790,133],{"class":47},[33,74792,74793],{"class":72},"237",[33,74795,245],{"class":47},[33,74797,74798],{"class":72},"235",[33,74800,245],{"class":47},[33,74802,74798],{"class":72},[33,74804,4976],{"class":47},[33,74806,74807,74810,74812,74814],{"class":35,"line":18900},[33,74808,74809],{"class":72},"      box-sizing",[33,74811,996],{"class":47},[33,74813,62723],{"class":72},[33,74815,3567],{"class":47},[33,74817,74818],{"class":35,"line":18914},[33,74819,4446],{"class":47},[33,74821,74822],{"class":35,"line":18934},[33,74823,100],{"emptyLinePlaceholder":99},[33,74825,74826,74828,74830],{"class":35,"line":18940},[33,74827,74688],{"class":43},[33,74829,53909],{"class":53522},[33,74831,17810],{"class":47},[33,74833,74834,74836,74838,74840],{"class":35,"line":18951},[33,74835,59634],{"class":72},[33,74837,996],{"class":47},[33,74839,59639],{"class":72},[33,74841,3567],{"class":47},[33,74843,74844],{"class":35,"line":18974},[33,74845,4446],{"class":47},[33,74847,74848],{"class":35,"line":18996},[33,74849,100],{"emptyLinePlaceholder":99},[33,74851,74852,74854],{"class":35,"line":19001},[33,74853,67240],{"class":53522},[33,74855,17810],{"class":47},[33,74857,74858,74860,74862,74864,74866],{"class":35,"line":19007},[33,74859,56990],{"class":72},[33,74861,996],{"class":47},[33,74863,63847],{"class":72},[33,74865,53713],{"class":39},[33,74867,3567],{"class":47},[33,74869,74870,74872,74874,74877],{"class":35,"line":19021},[33,74871,56925],{"class":72},[33,74873,996],{"class":47},[33,74875,74876],{"class":72},"auto",[33,74878,3567],{"class":47},[33,74880,74881,74883,74885,74887],{"class":35,"line":19034},[33,74882,67247],{"class":72},[33,74884,996],{"class":47},[33,74886,67252],{"class":72},[33,74888,3567],{"class":47},[33,74890,74891],{"class":35,"line":19039},[33,74892,4446],{"class":47},[33,74894,74895],{"class":35,"line":19053},[33,74896,100],{"emptyLinePlaceholder":99},[33,74898,74899,74901],{"class":35,"line":19058},[33,74900,67332],{"class":53522},[33,74902,17810],{"class":47},[33,74904,74905,74907,74909,74911,74913,74915,74917,74919,74921,74923],{"class":35,"line":19064},[33,74906,57103],{"class":72},[33,74908,996],{"class":47},[33,74910,74536],{"class":72},[33,74912,133],{"class":47},[33,74914,74793],{"class":72},[33,74916,245],{"class":47},[33,74918,74798],{"class":72},[33,74920,245],{"class":47},[33,74922,74798],{"class":72},[33,74924,4976],{"class":47},[33,74926,74927],{"class":35,"line":19069},[33,74928,4446],{"class":47},[33,74930,74931],{"class":35,"line":19083},[33,74932,100],{"emptyLinePlaceholder":99},[33,74934,74935,74937],{"class":35,"line":19088},[33,74936,67332],{"class":53522},[33,74938,33696],{"class":47},[33,74940,74941,74943],{"class":35,"line":19093},[33,74942,67398],{"class":53522},[33,74944,17810],{"class":47},[33,74946,74947,74949,74951,74953,74955],{"class":35,"line":19107},[33,74948,57004],{"class":72},[33,74950,996],{"class":47},[33,74952,2697],{"class":72},[33,74954,53713],{"class":39},[33,74956,3567],{"class":47},[33,74958,74959,74961,74963,74965],{"class":35,"line":19119},[33,74960,59504],{"class":72},[33,74962,996],{"class":47},[33,74964,25974],{"class":72},[33,74966,3567],{"class":47},[33,74968,74969,74971,74973,74975,74977],{"class":35,"line":19124},[33,74970,57141],{"class":72},[33,74972,996],{"class":47},[33,74974,2966],{"class":72},[33,74976,53713],{"class":39},[33,74978,3567],{"class":47},[33,74980,74981,74983,74985,74987,74989,74991,74993,74995,74998,75000,75003,75005,75007],{"class":35,"line":19137},[33,74982,64195],{"class":72},[33,74984,996],{"class":47},[33,74986,720],{"class":72},[33,74988,53713],{"class":39},[33,74990,53742],{"class":72},[33,74992,74473],{"class":72},[33,74994,133],{"class":47},[33,74996,74997],{"class":72},"228",[33,74999,245],{"class":47},[33,75001,75002],{"class":72},"225",[33,75004,245],{"class":47},[33,75006,75002],{"class":72},[33,75008,4976],{"class":47},[33,75010,75011,75014,75016,75018,75020],{"class":35,"line":19142},[33,75012,75013],{"class":72},"      padding-left",[33,75015,996],{"class":47},[33,75017,758],{"class":72},[33,75019,53713],{"class":39},[33,75021,3567],{"class":47},[33,75023,75024,75026,75028,75030,75033,75035,75037],{"class":35,"line":19147},[33,75025,64078],{"class":72},[33,75027,996],{"class":47},[33,75029,30358],{"class":72},[33,75031,75032],{"class":72}," linear",[33,75034,64085],{"class":72},[33,75036,3109],{"class":39},[33,75038,3567],{"class":47},[33,75040,75041],{"class":35,"line":19152},[33,75042,4446],{"class":47},[33,75044,75045],{"class":35,"line":19165},[33,75046,100],{"emptyLinePlaceholder":99},[33,75048,75049,75052,75054,75056],{"class":35,"line":19170},[33,75050,75051],{"class":53522},"    tbody",[33,75053,72359],{"class":53522},[33,75055,63158],{"class":43},[33,75057,17810],{"class":47},[33,75059,75060,75062,75064,75066,75068,75070,75072,75074,75076,75078],{"class":35,"line":34859},[33,75061,57103],{"class":72},[33,75063,996],{"class":47},[33,75065,74536],{"class":72},[33,75067,133],{"class":47},[33,75069,74793],{"class":72},[33,75071,245],{"class":47},[33,75073,74798],{"class":72},[33,75075,245],{"class":47},[33,75077,74798],{"class":72},[33,75079,4976],{"class":47},[33,75081,75082,75084,75086,75088],{"class":35,"line":34865},[33,75083,64243],{"class":72},[33,75085,996],{"class":47},[33,75087,64248],{"class":72},[33,75089,3567],{"class":47},[33,75091,75092],{"class":35,"line":34871},[33,75093,4446],{"class":47},[33,75095,75096],{"class":35,"line":34877},[33,75097,100],{"emptyLinePlaceholder":99},[33,75099,75100,75102,75104,75107,75109],{"class":35,"line":34883},[33,75101,75051],{"class":53522},[33,75103,72359],{"class":53522},[33,75105,75106],{"class":53522}," td",[33,75108,3672],{"class":53522},[33,75110,17810],{"class":47},[33,75112,75113,75115,75117,75119],{"class":35,"line":34894},[33,75114,57228],{"class":72},[33,75116,996],{"class":47},[33,75118,63087],{"class":72},[33,75120,3567],{"class":47},[33,75122,75123,75125,75127,75129,75131],{"class":35,"line":34900},[33,75124,56990],{"class":72},[33,75126,996],{"class":47},[33,75128,3316],{"class":72},[33,75130,53713],{"class":39},[33,75132,3567],{"class":47},[33,75134,75135,75137,75139,75141,75143],{"class":35,"line":34920},[33,75136,57004],{"class":72},[33,75138,996],{"class":47},[33,75140,3237],{"class":72},[33,75142,53713],{"class":39},[33,75144,3567],{"class":47},[33,75146,75147,75149,75151,75153,75155],{"class":35,"line":34926},[33,75148,59577],{"class":72},[33,75150,996],{"class":47},[33,75152,3237],{"class":72},[33,75154,53713],{"class":39},[33,75156,3567],{"class":47},[33,75158,75159,75161,75163,75165,75167],{"class":35,"line":34937},[33,75160,64295],{"class":72},[33,75162,996],{"class":47},[33,75164,725],{"class":72},[33,75166,53713],{"class":39},[33,75168,3567],{"class":47},[33,75170,75171,75173,75175,75177],{"class":35,"line":34943},[33,75172,59634],{"class":72},[33,75174,996],{"class":47},[33,75176,63060],{"class":72},[33,75178,3567],{"class":47},[33,75180,75181,75183,75185,75187],{"class":35,"line":34949},[33,75182,59504],{"class":72},[33,75184,996],{"class":47},[33,75186,53813],{"class":72},[33,75188,3567],{"class":47},[33,75190,75191,75193,75195,75197],{"class":35,"line":34955},[33,75192,66187],{"class":72},[33,75194,996],{"class":47},[33,75196,56956],{"class":72},[33,75198,3567],{"class":47},[33,75200,75201,75203,75205,75208],{"class":35,"line":34961},[33,75202,57103],{"class":72},[33,75204,996],{"class":47},[33,75206,75207],{"class":72},"orange",[33,75209,3567],{"class":47},[33,75211,75212,75214,75216,75219,75221],{"class":35,"line":34967},[33,75213,57353],{"class":72},[33,75215,996],{"class":47},[33,75217,75218],{"class":72},"12.5",[33,75220,53713],{"class":39},[33,75222,3567],{"class":47},[33,75224,75225],{"class":35,"line":34973},[33,75226,4446],{"class":47},[33,75228,75229,75231,75233],{"class":35,"line":34979},[33,75230,54636],{"class":47},[33,75232,2331],{"class":53522},[33,75234,53529],{"class":47},[33,75236,75237,75239,75241],{"class":35,"line":34999},[33,75238,54006],{"class":47},[33,75240,53556],{"class":53522},[33,75242,53529],{"class":47},[33,75244,75245],{"class":35,"line":35005},[33,75246,100],{"emptyLinePlaceholder":99},[33,75248,75249,75251,75253],{"class":35,"line":35021},[33,75250,2226],{"class":47},[33,75252,54021],{"class":53522},[33,75254,53529],{"class":47},[33,75256,75257,75259,75261,75264,75266],{"class":35,"line":35027},[33,75258,54364],{"class":47},[33,75260,14],{"class":53522},[33,75262,75263],{"class":47},">学生就业统计表\u003C\u002F",[33,75265,14],{"class":53522},[33,75267,53529],{"class":47},[33,75269,75270,75272,75274,75276,75278,75280,75282,75284,75286],{"class":35,"line":35041},[33,75271,54364],{"class":47},[33,75273,68842],{"class":53522},[33,75275,55705],{"class":43},[33,75277,57],{"class":47},[33,75279,64882],{"class":60},[33,75281,71287],{"class":43},[33,75283,57],{"class":47},[33,75285,34005],{"class":60},[33,75287,53529],{"class":47},[33,75289,75290,75292,75294,75296,75298,75300,75302,75304,75306,75308,75310,75313,75315,75317,75319],{"class":35,"line":35047},[33,75291,53563],{"class":47},[33,75293,56040],{"class":53522},[33,75295,56043],{"class":43},[33,75297,57],{"class":47},[33,75299,64916],{"class":60},[33,75301,17158],{"class":43},[33,75303,57],{"class":47},[33,75305,71313],{"class":60},[33,75307,63238],{"class":43},[33,75309,57],{"class":47},[33,75311,75312],{"class":60},"\"姓名\"",[33,75314,55705],{"class":43},[33,75316,57],{"class":47},[33,75318,71313],{"class":60},[33,75320,53529],{"class":47},[33,75322,75323,75325,75327,75329,75331,75333,75335,75337,75339,75341,75343,75346,75348,75350,75352],{"class":35,"line":35062},[33,75324,53563],{"class":47},[33,75326,56040],{"class":53522},[33,75328,56043],{"class":43},[33,75330,57],{"class":47},[33,75332,64916],{"class":60},[33,75334,17158],{"class":43},[33,75336,57],{"class":47},[33,75338,1003],{"class":60},[33,75340,63238],{"class":43},[33,75342,57],{"class":47},[33,75344,75345],{"class":60},"\"年龄\"",[33,75347,55705],{"class":43},[33,75349,57],{"class":47},[33,75351,1003],{"class":60},[33,75353,53529],{"class":47},[33,75355,75356,75358,75360,75362,75364,75366,75368,75370,75372,75374,75376,75379,75381,75383,75385],{"class":35,"line":35068},[33,75357,53563],{"class":47},[33,75359,56040],{"class":53522},[33,75361,56043],{"class":43},[33,75363,57],{"class":47},[33,75365,64916],{"class":60},[33,75367,17158],{"class":43},[33,75369,57],{"class":47},[33,75371,71442],{"class":60},[33,75373,63238],{"class":43},[33,75375,57],{"class":47},[33,75377,75378],{"class":60},"\"薪资\"",[33,75380,55705],{"class":43},[33,75382,57],{"class":47},[33,75384,71442],{"class":60},[33,75386,53529],{"class":47},[33,75388,75389,75391,75393,75395,75397,75399,75401,75403,75405,75407,75409,75411],{"class":35,"line":35077},[33,75390,53563],{"class":47},[33,75392,71360],{"class":53522},[33,75394,17158],{"class":43},[33,75396,57],{"class":47},[33,75398,71367],{"class":60},[33,75400,17197],{"class":43},[33,75402,57],{"class":47},[33,75404,9898],{"class":60},[33,75406,55705],{"class":43},[33,75408,57],{"class":47},[33,75410,71367],{"class":60},[33,75412,53529],{"class":47},[33,75414,75415,75417,75419,75421,75423,75425,75427,75429],{"class":35,"line":35083},[33,75416,57453],{"class":47},[33,75418,71382],{"class":53522},[33,75420,68868],{"class":43},[33,75422,57],{"class":47},[33,75424,12206],{"class":60},[33,75426,71391],{"class":47},[33,75428,71382],{"class":53522},[33,75430,53529],{"class":47},[33,75432,75433,75435,75437,75439,75441,75443,75445,75447],{"class":35,"line":35092},[33,75434,57453],{"class":47},[33,75436,71382],{"class":53522},[33,75438,68868],{"class":43},[33,75440,57],{"class":47},[33,75442,12275],{"class":60},[33,75444,71410],{"class":47},[33,75446,71382],{"class":53522},[33,75448,53529],{"class":47},[33,75450,75451,75453,75455],{"class":35,"line":35098},[33,75452,53997],{"class":47},[33,75454,71360],{"class":53522},[33,75456,53529],{"class":47},[33,75458,75459,75461,75463,75465,75467,75469,75471,75473,75475,75477,75479,75481],{"class":35,"line":35104},[33,75460,53563],{"class":47},[33,75462,71360],{"class":53522},[33,75464,17158],{"class":43},[33,75466,57],{"class":47},[33,75468,71464],{"class":60},[33,75470,17197],{"class":43},[33,75472,57],{"class":47},[33,75474,9898],{"class":60},[33,75476,55705],{"class":43},[33,75478,57],{"class":47},[33,75480,71464],{"class":60},[33,75482,53529],{"class":47},[33,75484,75485,75487,75489,75491,75493,75495,75497,75499],{"class":35,"line":35113},[33,75486,57453],{"class":47},[33,75488,71382],{"class":53522},[33,75490,68868],{"class":43},[33,75492,57],{"class":47},[33,75494,847],{"class":60},[33,75496,71487],{"class":47},[33,75498,71382],{"class":53522},[33,75500,53529],{"class":47},[33,75502,75503,75505,75507,75509,75511,75513,75515,75517],{"class":35,"line":35119},[33,75504,57453],{"class":47},[33,75506,71382],{"class":53522},[33,75508,68868],{"class":43},[33,75510,57],{"class":47},[33,75512,71504],{"class":60},[33,75514,71507],{"class":47},[33,75516,71382],{"class":53522},[33,75518,53529],{"class":47},[33,75520,75521,75523,75525,75527,75529,75531,75533,75535],{"class":35,"line":35130},[33,75522,57453],{"class":47},[33,75524,71382],{"class":53522},[33,75526,68868],{"class":43},[33,75528,57],{"class":47},[33,75530,71524],{"class":60},[33,75532,71527],{"class":47},[33,75534,71382],{"class":53522},[33,75536,53529],{"class":47},[33,75538,75539,75541,75543,75545,75547,75549,75551,75553],{"class":35,"line":35136},[33,75540,57453],{"class":47},[33,75542,71382],{"class":53522},[33,75544,68868],{"class":43},[33,75546,57],{"class":47},[33,75548,71544],{"class":60},[33,75550,71547],{"class":47},[33,75552,71382],{"class":53522},[33,75554,53529],{"class":47},[33,75556,75557,75559,75561,75563,75565,75567,75569,75571],{"class":35,"line":35155},[33,75558,57453],{"class":47},[33,75560,71382],{"class":53522},[33,75562,68868],{"class":43},[33,75564,57],{"class":47},[33,75566,71564],{"class":60},[33,75568,71567],{"class":47},[33,75570,71382],{"class":53522},[33,75572,53529],{"class":47},[33,75574,75575,75577,75579],{"class":35,"line":35161},[33,75576,53997],{"class":47},[33,75578,71360],{"class":53522},[33,75580,53529],{"class":47},[33,75582,75583,75585,75587],{"class":35,"line":35172},[33,75584,53563],{"class":47},[33,75586,56106],{"class":53522},[33,75588,53529],{"class":47},[33,75590,75591,75593,75595,75598,75600,75603,75605],{"class":35,"line":35178},[33,75592,57453],{"class":47},[33,75594,33],{"class":53522},[33,75596,75597],{"class":47},">+\u003C\u002F",[33,75599,33],{"class":53522},[33,75601,75602],{"class":47},">添加\u003C\u002F",[33,75604,56106],{"class":53522},[33,75606,53529],{"class":47},[33,75608,75609,75611,75613],{"class":35,"line":35198},[33,75610,54636],{"class":47},[33,75612,68842],{"class":53522},[33,75614,53529],{"class":47},[33,75616,75617,75619,75621,75623,75625,75627,75630,75632,75635,75637,75640,75642],{"class":35,"line":35214},[33,75618,54364],{"class":47},[33,75620,53832],{"class":53522},[33,75622,55705],{"class":43},[33,75624,57],{"class":47},[33,75626,64798],{"class":60},[33,75628,75629],{"class":47},">共有数据 \u003C",[33,75631,33],{"class":53522},[33,75633,75634],{"class":47},">0\u003C\u002F",[33,75636,33],{"class":53522},[33,75638,75639],{"class":47},"> 条\u003C\u002F",[33,75641,53832],{"class":53522},[33,75643,53529],{"class":47},[33,75645,75646,75648,75650],{"class":35,"line":35220},[33,75647,54364],{"class":47},[33,75649,2563],{"class":53522},[33,75651,53529],{"class":47},[33,75653,75654,75656,75658],{"class":35,"line":35234},[33,75655,53563],{"class":47},[33,75657,2566],{"class":53522},[33,75659,53529],{"class":47},[33,75661,75662,75664,75666],{"class":35,"line":35240},[33,75663,57453],{"class":47},[33,75665,2569],{"class":53522},[33,75667,53529],{"class":47},[33,75669,75670,75672,75674,75677,75679],{"class":35,"line":35246},[33,75671,57521],{"class":47},[33,75673,2572],{"class":53522},[33,75675,75676],{"class":47},">ID\u003C\u002F",[33,75678,2572],{"class":53522},[33,75680,53529],{"class":47},[33,75682,75683,75685,75687,75689,75691],{"class":35,"line":35257},[33,75684,57521],{"class":47},[33,75686,2572],{"class":53522},[33,75688,71670],{"class":47},[33,75690,2572],{"class":53522},[33,75692,53529],{"class":47},[33,75694,75695,75697,75699,75701,75703],{"class":35,"line":35263},[33,75696,57521],{"class":47},[33,75698,2572],{"class":53522},[33,75700,71683],{"class":47},[33,75702,2572],{"class":53522},[33,75704,53529],{"class":47},[33,75706,75707,75709,75711,75713,75715],{"class":35,"line":35269},[33,75708,57521],{"class":47},[33,75710,2572],{"class":53522},[33,75712,71696],{"class":47},[33,75714,2572],{"class":53522},[33,75716,53529],{"class":47},[33,75718,75719,75721,75723,75725,75727],{"class":35,"line":35279},[33,75720,57521],{"class":47},[33,75722,2572],{"class":53522},[33,75724,71709],{"class":47},[33,75726,2572],{"class":53522},[33,75728,53529],{"class":47},[33,75730,75731,75733,75735,75737,75739],{"class":35,"line":35285},[33,75732,57521],{"class":47},[33,75734,2572],{"class":53522},[33,75736,71722],{"class":47},[33,75738,2572],{"class":53522},[33,75740,53529],{"class":47},[33,75742,75743,75745,75747,75750,75752],{"class":35,"line":35296},[33,75744,57521],{"class":47},[33,75746,2572],{"class":53522},[33,75748,75749],{"class":47},">录入时间\u003C\u002F",[33,75751,2572],{"class":53522},[33,75753,53529],{"class":47},[33,75755,75756,75758,75760,75762,75764],{"class":35,"line":35302},[33,75757,57521],{"class":47},[33,75759,2572],{"class":53522},[33,75761,71735],{"class":47},[33,75763,2572],{"class":53522},[33,75765,53529],{"class":47},[33,75767,75768,75770,75772],{"class":35,"line":35312},[33,75769,57626],{"class":47},[33,75771,2569],{"class":53522},[33,75773,53529],{"class":47},[33,75775,75776,75778,75780],{"class":35,"line":35317},[33,75777,53997],{"class":47},[33,75779,2566],{"class":53522},[33,75781,53529],{"class":47},[33,75783,75784,75786,75788],{"class":35,"line":35323},[33,75785,53563],{"class":47},[33,75787,2610],{"class":53522},[33,75789,53529],{"class":47},[33,75791,75792],{"class":35,"line":35372},[33,75793,75794],{"class":2487},"      \u003C!-- \u003Ctr>\n",[33,75796,75797],{"class":35,"line":35419},[33,75798,75799],{"class":2487},"        \u003Ctd>1\u003C\u002Ftd>\n",[33,75801,75802],{"class":35,"line":35424},[33,75803,75799],{"class":2487},[33,75805,75806],{"class":35,"line":35430},[33,75807,75799],{"class":2487},[33,75809,75810],{"class":35,"line":35449},[33,75811,75799],{"class":2487},[33,75813,75814],{"class":35,"line":35455},[33,75815,75799],{"class":2487},[33,75817,75818],{"class":35,"line":35474},[33,75819,75799],{"class":2487},[33,75821,75822],{"class":35,"line":35480},[33,75823,75799],{"class":2487},[33,75825,75826],{"class":35,"line":35486},[33,75827,75828],{"class":2487},"        \u003Ctd>\n",[33,75830,75831],{"class":35,"line":35496},[33,75832,75833],{"class":2487},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[33,75835,75836],{"class":35,"line":35501},[33,75837,75838],{"class":2487},"        \u003C\u002Ftd>\n",[33,75840,75841],{"class":35,"line":35507},[33,75842,75843],{"class":2487},"      \u003C\u002Ftr> -->\n",[33,75845,75846,75848,75850],{"class":35,"line":35523},[33,75847,53997],{"class":47},[33,75849,2610],{"class":53522},[33,75851,53529],{"class":47},[33,75853,75854,75856,75858],{"class":35,"line":35568},[33,75855,54636],{"class":47},[33,75857,2563],{"class":53522},[33,75859,53529],{"class":47},[33,75861,75862,75864,75866],{"class":35,"line":35574},[33,75863,54364],{"class":47},[33,75865,54034],{"class":53522},[33,75867,53529],{"class":47},[33,75869,75870],{"class":35,"line":35580},[33,75871,75872],{"class":2487},"    \u002F\u002F const initData = [{\n",[33,75874,75875],{"class":35,"line":35586},[33,75876,75877],{"class":2487},"    \u002F\u002F   unameId: 1,\n",[33,75879,75880],{"class":35,"line":35597},[33,75881,75882],{"class":2487},"    \u002F\u002F   uname: '华晨宇',\n",[33,75884,75885],{"class":35,"line":35603},[33,75886,75887],{"class":2487},"    \u002F\u002F   age: 22,\n",[33,75889,75890],{"class":35,"line":35609},[33,75891,75892],{"class":2487},"    \u002F\u002F   salary: 12000,\n",[33,75894,75895],{"class":35,"line":35615},[33,75896,75897],{"class":2487},"    \u002F\u002F   gender: '男',\n",[33,75899,75900],{"class":35,"line":35633},[33,75901,75902],{"class":2487},"    \u002F\u002F   city: '北京',\n",[33,75904,75905],{"class":35,"line":35647},[33,75906,75907],{"class":2487},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[33,75909,75910],{"class":35,"line":35656},[33,75911,75912],{"class":2487},"    \u002F\u002F }]\n",[33,75914,75915],{"class":35,"line":35665},[33,75916,75917],{"class":2487},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[33,75919,75920],{"class":35,"line":35674},[33,75921,75922],{"class":2487},"    \u002F\u002F 1.渲染业务\n",[33,75924,75925],{"class":35,"line":35683},[33,75926,75927],{"class":2487},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[33,75929,75930],{"class":35,"line":35689},[33,75931,75932],{"class":2487},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[33,75934,75935],{"class":35,"line":35695},[33,75936,75937],{"class":2487},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[33,75939,75940],{"class":35,"line":35703},[33,75941,100],{"emptyLinePlaceholder":99},[33,75943,75944],{"class":35,"line":35708},[33,75945,75946],{"class":2487},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[33,75948,75949],{"class":35,"line":35714},[33,75950,75951],{"class":2487},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[33,75953,75954,75956,75958,75960],{"class":35,"line":35725},[33,75955,13462],{"class":39},[33,75957,59913],{"class":72},[33,75959,15804],{"class":39},[33,75961,615],{"class":47},[33,75963,75964,75967,75969],{"class":35,"line":35731},[33,75965,75966],{"class":47},"    console.",[33,75968,60465],{"class":43},[33,75970,54631],{"class":47},[33,75972,75973],{"class":35,"line":35751},[33,75974,100],{"emptyLinePlaceholder":99},[33,75976,75977],{"class":35,"line":35757},[33,75978,75979],{"class":2487},"    \u002F\u002F 时间函数\n",[33,75981,75982,75984,75987],{"class":35,"line":35763},[33,75983,72299],{"class":39},[33,75985,75986],{"class":43}," getTime",[33,75988,13096],{"class":47},[33,75990,75991,75993,75996,75998,76000,76003],{"class":35,"line":35769},[33,75992,60446],{"class":39},[33,75994,75995],{"class":72}," date",[33,75997,15804],{"class":39},[33,75999,13819],{"class":39},[33,76001,76002],{"class":43}," Date",[33,76004,4235],{"class":47},[33,76006,76007,76009,76011,76013,76016,76019,76021,76023,76025,76028,76031,76033,76035,76037,76039,76041,76043,76045],{"class":35,"line":35786},[33,76008,60446],{"class":39},[33,76010,18329],{"class":72},[33,76012,15804],{"class":39},[33,76014,76015],{"class":47}," date.",[33,76017,76018],{"class":43},"getHours",[33,76020,15290],{"class":47},[33,76022,2226],{"class":39},[33,76024,4297],{"class":72},[33,76026,76027],{"class":39}," ?",[33,76029,76030],{"class":60}," '0'",[33,76032,47789],{"class":39},[33,76034,76015],{"class":47},[33,76036,76018],{"class":43},[33,76038,15290],{"class":47},[33,76040,387],{"class":39},[33,76042,76015],{"class":47},[33,76044,76018],{"class":43},[33,76046,4235],{"class":47},[33,76048,76049,76051,76054,76056,76058,76061,76063,76065,76067,76069,76071,76073,76075,76077,76079,76081,76083,76085],{"class":35,"line":35792},[33,76050,60446],{"class":39},[33,76052,76053],{"class":72}," m",[33,76055,15804],{"class":39},[33,76057,76015],{"class":47},[33,76059,76060],{"class":43},"getMinutes",[33,76062,15290],{"class":47},[33,76064,2226],{"class":39},[33,76066,4297],{"class":72},[33,76068,76027],{"class":39},[33,76070,76030],{"class":60},[33,76072,47789],{"class":39},[33,76074,76015],{"class":47},[33,76076,76060],{"class":43},[33,76078,15290],{"class":47},[33,76080,387],{"class":39},[33,76082,76015],{"class":47},[33,76084,76060],{"class":43},[33,76086,4235],{"class":47},[33,76088,76089,76091,76093,76095,76097,76100,76102,76104,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124],{"class":35,"line":35798},[33,76090,60446],{"class":39},[33,76092,10674],{"class":72},[33,76094,15804],{"class":39},[33,76096,76015],{"class":47},[33,76098,76099],{"class":43},"getSeconds",[33,76101,15290],{"class":47},[33,76103,2226],{"class":39},[33,76105,4297],{"class":72},[33,76107,76027],{"class":39},[33,76109,76030],{"class":60},[33,76111,47789],{"class":39},[33,76113,76015],{"class":47},[33,76115,76099],{"class":43},[33,76117,15290],{"class":47},[33,76119,387],{"class":39},[33,76121,76015],{"class":47},[33,76123,76099],{"class":43},[33,76125,4235],{"class":47},[33,76127,76128,76130,76133,76135,76137,76140,76142,76145,76147,76150,76152,76154,76157,76159,76161,76163,76165,76167,76169,76172,76174,76177,76179,76182,76184,76186,76188],{"class":35,"line":35804},[33,76129,60446],{"class":39},[33,76131,76132],{"class":72}," str",[33,76134,15804],{"class":39},[33,76136,65120],{"class":60},[33,76138,76139],{"class":47},"date",[33,76141,2975],{"class":60},[33,76143,76144],{"class":43},"getFullYear",[33,76146,4685],{"class":60},[33,76148,76149],{"class":60},"}\u002F${",[33,76151,76139],{"class":47},[33,76153,2975],{"class":60},[33,76155,76156],{"class":43},"getMonth",[33,76158,15290],{"class":60},[33,76160,880],{"class":39},[33,76162,27357],{"class":72},[33,76164,76149],{"class":60},[33,76166,76139],{"class":47},[33,76168,2975],{"class":60},[33,76170,76171],{"class":43},"getDate",[33,76173,4685],{"class":60},[33,76175,76176],{"class":60},"} ${",[33,76178,2835],{"class":47},[33,76180,76181],{"class":60},"}:${",[33,76183,2961],{"class":47},[33,76185,76181],{"class":60},[33,76187,3109],{"class":47},[33,76189,76190],{"class":60},"}`\n",[33,76192,76193,76196],{"class":35,"line":35810},[33,76194,76195],{"class":39},"      return",[33,76197,76198],{"class":47}," str\n",[33,76200,76201],{"class":35,"line":35816},[33,76202,4446],{"class":47},[33,76204,76205],{"class":35,"line":35843},[33,76206,76207],{"class":2487},"    \u002F\u002F 渲染函数\n",[33,76209,76210,76212,76214,76216,76218,76220,76222,76224],{"class":35,"line":35867},[33,76211,13462],{"class":39},[33,76213,71962],{"class":72},[33,76215,15804],{"class":39},[33,76217,56615],{"class":47},[33,76219,56618],{"class":43},[33,76221,133],{"class":47},[33,76223,71973],{"class":60},[33,76225,226],{"class":47},[33,76227,76228,76230,76232],{"class":35,"line":35873},[33,76229,72299],{"class":39},[33,76231,72302],{"class":43},[33,76233,13096],{"class":47},[33,76235,76236],{"class":35,"line":35879},[33,76237,76238],{"class":2487},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[33,76240,76241],{"class":35,"line":35885},[33,76242,76243],{"class":2487},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[33,76245,76246,76248,76251,76253,76255,76257,76259,76261,76263,76266,76268,76271],{"class":35,"line":35896},[33,76247,60446],{"class":39},[33,76249,76250],{"class":72}," trArr",[33,76252,15804],{"class":39},[33,76254,54185],{"class":47},[33,76256,1303],{"class":43},[33,76258,133],{"class":47},[33,76260,56668],{"class":39},[33,76262,3924],{"class":47},[33,76264,76265],{"class":289},"ele",[33,76267,245],{"class":47},[33,76269,76270],{"class":289},"index",[33,76272,14682],{"class":47},[33,76274,76275,76277],{"class":35,"line":35907},[33,76276,1614],{"class":39},[33,76278,72383],{"class":60},[33,76280,76281],{"class":35,"line":35913},[33,76282,76283],{"class":60},"      \u003Ctr>\n",[33,76285,76286,76288,76290,76292,76295],{"class":35,"line":35930},[33,76287,72388],{"class":60},[33,76289,76265],{"class":47},[33,76291,2975],{"class":60},[33,76293,76294],{"class":47},"unameId",[33,76296,72403],{"class":60},[33,76298,76299,76301,76303,76305,76307],{"class":35,"line":35953},[33,76300,72388],{"class":60},[33,76302,76265],{"class":47},[33,76304,2975],{"class":60},[33,76306,72419],{"class":47},[33,76308,72403],{"class":60},[33,76310,76311,76313,76315,76317,76319],{"class":35,"line":35976},[33,76312,72388],{"class":60},[33,76314,76265],{"class":47},[33,76316,2975],{"class":60},[33,76318,218],{"class":47},[33,76320,72403],{"class":60},[33,76322,76323,76325,76327,76329,76331],{"class":35,"line":35982},[33,76324,72388],{"class":60},[33,76326,76265],{"class":47},[33,76328,2975],{"class":60},[33,76330,72452],{"class":47},[33,76332,72403],{"class":60},[33,76334,76335,76337,76339,76341,76343],{"class":35,"line":35987},[33,76336,72388],{"class":60},[33,76338,76265],{"class":47},[33,76340,2975],{"class":60},[33,76342,72469],{"class":47},[33,76344,72403],{"class":60},[33,76346,76347,76349,76351,76353,76355],{"class":35,"line":35996},[33,76348,72388],{"class":60},[33,76350,76265],{"class":47},[33,76352,2975],{"class":60},[33,76354,842],{"class":47},[33,76356,72403],{"class":60},[33,76358,76359,76361,76363,76365,76367],{"class":35,"line":36006},[33,76360,72388],{"class":60},[33,76362,76265],{"class":47},[33,76364,2975],{"class":60},[33,76366,4646],{"class":47},[33,76368,72403],{"class":60},[33,76370,76371],{"class":35,"line":36012},[33,76372,75828],{"class":60},[33,76374,76375,76378,76380],{"class":35,"line":36017},[33,76376,76377],{"class":60},"          \u003Ca href=\"#\" data-id=\"${",[33,76379,76270],{"class":47},[33,76381,76382],{"class":60},"}\">删除\u003C\u002Fa>\n",[33,76384,76385],{"class":35,"line":36023},[33,76386,75838],{"class":60},[33,76388,76389],{"class":35,"line":36036},[33,76390,76391],{"class":60},"      \u003C\u002Ftr>\n",[33,76393,76394],{"class":35,"line":36042},[33,76395,76396],{"class":60},"  `\n",[33,76398,76399],{"class":35,"line":36053},[33,76400,67032],{"class":47},[33,76402,76403,76405,76407],{"class":35,"line":36064},[33,76404,60462],{"class":47},[33,76406,60465],{"class":43},[33,76408,76409],{"class":47},"(trArr)\n",[33,76411,76412],{"class":35,"line":36083},[33,76413,100],{"emptyLinePlaceholder":99},[33,76415,76416],{"class":35,"line":51740},[33,76417,76418],{"class":2487},"      \u002F\u002F (2) 把数组转换为字符串join\n",[33,76420,76421],{"class":35,"line":51745},[33,76422,76423],{"class":2487},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[33,76425,76426,76428,76430,76433,76436,76438,76441],{"class":35,"line":51754},[33,76427,72314],{"class":47},[33,76429,57],{"class":39},[33,76431,76432],{"class":47}," trArr.",[33,76434,76435],{"class":43},"join",[33,76437,133],{"class":47},[33,76439,76440],{"class":60},"''",[33,76442,226],{"class":47},[33,76444,76445],{"class":35,"line":51763},[33,76446,76447],{"class":2487},"      \u002F\u002F 显示共有几条\n",[33,76449,76450,76452,76454,76456,76459,76462,76464,76466],{"class":35,"line":51768},[33,76451,57989],{"class":47},[33,76453,56618],{"class":43},[33,76455,133],{"class":47},[33,76457,76458],{"class":60},"'.total span'",[33,76460,76461],{"class":47},").innerHTML ",[33,76463,57],{"class":39},[33,76465,54185],{"class":47},[33,76467,58049],{"class":72},[33,76469,76470],{"class":35,"line":51773},[33,76471,4446],{"class":47},[33,76473,76474],{"class":35,"line":51778},[33,76475,76476],{"class":2487},"    \u002F\u002F render()\n",[33,76478,76479],{"class":35,"line":51791},[33,76480,100],{"emptyLinePlaceholder":99},[33,76482,76483],{"class":35,"line":51796},[33,76484,76485],{"class":2487},"    \u002F\u002F 获取DOM对象\n",[33,76487,76488,76490,76492,76494,76496,76498,76500,76502],{"class":35,"line":51805},[33,76489,13462],{"class":39},[33,76491,72036],{"class":72},[33,76493,15804],{"class":39},[33,76495,56615],{"class":47},[33,76497,56618],{"class":43},[33,76499,133],{"class":47},[33,76501,72047],{"class":60},[33,76503,226],{"class":47},[33,76505,76506,76508,76510,76512,76514,76516,76518,76520],{"class":35,"line":51814},[33,76507,13462],{"class":39},[33,76509,71863],{"class":72},[33,76511,15804],{"class":39},[33,76513,56615],{"class":47},[33,76515,56618],{"class":43},[33,76517,133],{"class":47},[33,76519,71874],{"class":60},[33,76521,226],{"class":47},[33,76523,76524,76526,76528,76530,76532,76534,76536,76538],{"class":35,"line":51831},[33,76525,13462],{"class":39},[33,76527,17927],{"class":72},[33,76529,15804],{"class":39},[33,76531,56615],{"class":47},[33,76533,56618],{"class":43},[33,76535,133],{"class":47},[33,76537,71893],{"class":60},[33,76539,226],{"class":47},[33,76541,76543,76545,76547,76549,76551,76553,76555,76557],{"class":35,"line":76542},231,[33,76544,13462],{"class":39},[33,76546,71922],{"class":72},[33,76548,15804],{"class":39},[33,76550,56615],{"class":47},[33,76552,56618],{"class":43},[33,76554,133],{"class":47},[33,76556,71933],{"class":60},[33,76558,226],{"class":47},[33,76560,76562,76564,76566,76568,76570,76572,76574,76576],{"class":35,"line":76561},232,[33,76563,13462],{"class":39},[33,76565,71902],{"class":72},[33,76567,15804],{"class":39},[33,76569,56615],{"class":47},[33,76571,56618],{"class":43},[33,76573,133],{"class":47},[33,76575,71913],{"class":60},[33,76577,226],{"class":47},[33,76579,76581,76583,76585,76587,76589,76591,76593,76595],{"class":35,"line":76580},233,[33,76582,13462],{"class":39},[33,76584,71942],{"class":72},[33,76586,15804],{"class":39},[33,76588,56615],{"class":47},[33,76590,56618],{"class":43},[33,76592,133],{"class":47},[33,76594,71953],{"class":60},[33,76596,226],{"class":47},[33,76598,76600],{"class":35,"line":76599},234,[33,76601,100],{"emptyLinePlaceholder":99},[33,76603,76605],{"class":35,"line":76604},235,[33,76606,76607],{"class":2487},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[33,76609,76611,76613,76615,76617,76619,76621,76623,76625,76627],{"class":35,"line":76610},236,[33,76612,72054],{"class":47},[33,76614,60031],{"class":43},[33,76616,133],{"class":47},[33,76618,72061],{"class":60},[33,76620,245],{"class":47},[33,76622,56668],{"class":39},[33,76624,3924],{"class":47},[33,76626,2502],{"class":289},[33,76628,14682],{"class":47},[33,76630,76632],{"class":35,"line":76631},237,[33,76633,76634],{"class":2487},"      \u002F\u002F 禁止浏览器跳转\n",[33,76636,76638,76640,76642],{"class":35,"line":76637},238,[33,76639,72081],{"class":47},[33,76641,72084],{"class":43},[33,76643,4235],{"class":47},[33,76645,76647],{"class":35,"line":76646},239,[33,76648,76649],{"class":2487},"      \u002F\u002F 非空判断\n",[33,76651,76653],{"class":35,"line":76652},240,[33,76654,76655],{"class":2487},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[33,76657,76659],{"class":35,"line":76658},241,[33,76660,76661],{"class":2487},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[33,76663,76665,76667,76669,76671,76674,76676,76679,76682,76684,76686],{"class":35,"line":76664},242,[33,76666,56699],{"class":39},[33,76668,3924],{"class":47},[33,76670,2651],{"class":39},[33,76672,76673],{"class":47},"uname.value ",[33,76675,73570],{"class":39},[33,76677,76678],{"class":39}," !",[33,76680,76681],{"class":47},"age.value ",[33,76683,73570],{"class":39},[33,76685,76678],{"class":39},[33,76687,76688],{"class":47},"salary.value) {\n",[33,76690,76692,76694,76696,76698,76700],{"class":35,"line":76691},243,[33,76693,1614],{"class":39},[33,76695,72155],{"class":43},[33,76697,133],{"class":47},[33,76699,72160],{"class":60},[33,76701,226],{"class":47},[33,76703,76705],{"class":35,"line":76704},244,[33,76706,54617],{"class":47},[33,76708,76710,76712,76714],{"class":35,"line":76709},245,[33,76711,60225],{"class":47},[33,76713,54104],{"class":43},[33,76715,76716],{"class":47},"({\n",[33,76718,76720],{"class":35,"line":76719},246,[33,76721,76722],{"class":2487},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[33,76724,76726],{"class":35,"line":76725},247,[33,76727,76728],{"class":2487},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[33,76730,76732],{"class":35,"line":76731},248,[33,76733,76734],{"class":2487},"        \u002F\u002F 对象的序号应为数组长度+1\n",[33,76736,76738],{"class":35,"line":76737},249,[33,76739,76740],{"class":2487},"        \u002F\u002F unameId: arr.length + 1,\n",[33,76742,76744],{"class":35,"line":76743},250,[33,76745,100],{"emptyLinePlaceholder":99},[33,76747,76749],{"class":35,"line":76748},251,[33,76750,76751],{"class":2487},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[33,76753,76755],{"class":35,"line":76754},252,[33,76756,76757],{"class":2487},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[33,76759,76761],{"class":35,"line":76760},253,[33,76762,76763],{"class":2487},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[33,76765,76767],{"class":35,"line":76766},254,[33,76768,76769],{"class":2487},"        \u002F\u002F 0当假看\n",[33,76771,76773,76776,76778,76780,76783,76785,76787,76789,76792,76794,76796,76799,76801],{"class":35,"line":76772},255,[33,76774,76775],{"class":47},"        unameId: arr.",[33,76777,54188],{"class":72},[33,76779,76027],{"class":39},[33,76781,76782],{"class":47}," arr[arr.",[33,76784,54188],{"class":72},[33,76786,54490],{"class":39},[33,76788,27357],{"class":72},[33,76790,76791],{"class":47},"].unameId ",[33,76793,880],{"class":39},[33,76795,27357],{"class":72},[33,76797,76798],{"class":39}," :",[33,76800,27357],{"class":72},[33,76802,33696],{"class":47},[33,76804,76806],{"class":35,"line":76805},256,[33,76807,72208],{"class":47},[33,76809,76811],{"class":35,"line":76810},257,[33,76812,72213],{"class":47},[33,76814,76816],{"class":35,"line":76815},258,[33,76817,72223],{"class":47},[33,76819,76821],{"class":35,"line":76820},259,[33,76822,72218],{"class":47},[33,76824,76826],{"class":35,"line":76825},260,[33,76827,76828],{"class":47},"        city: city.value,\n",[33,76830,76832],{"class":35,"line":76831},261,[33,76833,76834],{"class":2487},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[33,76836,76838],{"class":35,"line":76837},262,[33,76839,76840],{"class":2487},"        \u002F\u002F time: new Date().toDateString()\n",[33,76842,76844,76847,76850],{"class":35,"line":76843},263,[33,76845,76846],{"class":47},"        time: ",[33,76848,76849],{"class":43},"getTime",[33,76851,4235],{"class":47},[33,76853,76855],{"class":35,"line":76854},264,[33,76856,67032],{"class":47},[33,76858,76860],{"class":35,"line":76859},265,[33,76861,76862],{"class":2487},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[33,76864,76866,76868],{"class":35,"line":76865},266,[33,76867,72283],{"class":43},[33,76869,4235],{"class":47},[33,76871,76873,76875,76877,76879,76881],{"class":35,"line":76872},267,[33,76874,72266],{"class":72},[33,76876,2975],{"class":47},[33,76878,72271],{"class":43},[33,76880,15290],{"class":47},[33,76882,76883],{"class":2487},"\u002F\u002F重置表单\n",[33,76885,76887],{"class":35,"line":76886},268,[33,76888,76889],{"class":2487},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[33,76891,76893,76896,76898,76900,76903,76905,76907,76909,76911],{"class":35,"line":76892},269,[33,76894,76895],{"class":47},"      localStorage.",[33,76897,73867],{"class":43},[33,76899,133],{"class":47},[33,76901,76902],{"class":60},"'data'",[33,76904,245],{"class":47},[33,76906,73877],{"class":72},[33,76908,2975],{"class":47},[33,76910,73882],{"class":43},[33,76912,76913],{"class":47},"(arr))\n",[33,76915,76917],{"class":35,"line":76916},270,[33,76918,35686],{"class":47},[33,76920,76922],{"class":35,"line":76921},271,[33,76923,100],{"emptyLinePlaceholder":99},[33,76925,76927],{"class":35,"line":76926},272,[33,76928,76929],{"class":2487},"    \u002F\u002F 3.删除业务\n",[33,76931,76933],{"class":35,"line":76932},273,[33,76934,76935],{"class":2487},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[33,76937,76939,76941,76943,76945,76947,76949,76951,76953,76955],{"class":35,"line":76938},274,[33,76940,72554],{"class":47},[33,76942,60031],{"class":43},[33,76944,133],{"class":47},[33,76946,60036],{"class":60},[33,76948,245],{"class":47},[33,76950,56668],{"class":39},[33,76952,3924],{"class":47},[33,76954,2502],{"class":289},[33,76956,14682],{"class":47},[33,76958,76960],{"class":35,"line":76959},275,[33,76961,76962],{"class":2487},"      \u002F\u002F 判断是否点击的是删除按钮\n",[33,76964,76966,76968,76970,76972,76974],{"class":35,"line":76965},276,[33,76967,56699],{"class":39},[33,76969,69251],{"class":47},[33,76971,56705],{"class":39},[33,76973,70473],{"class":60},[33,76975,14682],{"class":47},[33,76977,76979],{"class":35,"line":76978},277,[33,76980,76981],{"class":2487},"        \u002F\u002F alert(1)\n",[33,76983,76985],{"class":35,"line":76984},278,[33,76986,76987],{"class":2487},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[33,76989,76991],{"class":35,"line":76990},279,[33,76992,76993],{"class":2487},"        \u002F\u002F console.log(e.target)\n",[33,76995,76997],{"class":35,"line":76996},280,[33,76998,76999],{"class":2487},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[33,77001,77003],{"class":35,"line":77002},281,[33,77004,100],{"emptyLinePlaceholder":99},[33,77006,77008],{"class":35,"line":77007},282,[33,77009,77010],{"class":2487},"        \u002F\u002F 确认框，确然是否真的要删除\n",[33,77012,77014],{"class":35,"line":77013},283,[33,77015,77016],{"class":2487},"        \u002F\u002F confirm()为确认框\n",[33,77018,77020],{"class":35,"line":77019},284,[33,77021,77022],{"class":2487},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[33,77024,77026,77028,77030,77033,77035,77038],{"class":35,"line":77025},285,[33,77027,2130],{"class":39},[33,77029,3924],{"class":47},[33,77031,77032],{"class":43},"confirm",[33,77034,133],{"class":47},[33,77036,77037],{"class":60},"'您确定要删除这条数据吗？'",[33,77039,77040],{"class":47},")) {\n",[33,77042,77044,77047,77049,77051,77053],{"class":35,"line":77043},286,[33,77045,77046],{"class":47},"          arr.",[33,77048,60228],{"class":43},[33,77050,72607],{"class":47},[33,77052,720],{"class":72},[33,77054,226],{"class":47},[33,77056,77058],{"class":35,"line":77057},287,[33,77059,77060],{"class":2487},"          \u002F\u002F 3.4 重新渲染页面\n",[33,77062,77064,77067],{"class":35,"line":77063},288,[33,77065,77066],{"class":43},"          render",[33,77068,4235],{"class":47},[33,77070,77072],{"class":35,"line":77071},289,[33,77073,77074],{"class":2487},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[33,77076,77078,77081,77083,77085,77087,77089,77091,77093,77095],{"class":35,"line":77077},290,[33,77079,77080],{"class":47},"          localStorage.",[33,77082,73867],{"class":43},[33,77084,133],{"class":47},[33,77086,76902],{"class":60},[33,77088,245],{"class":47},[33,77090,73877],{"class":72},[33,77092,2975],{"class":47},[33,77094,73882],{"class":43},[33,77096,76913],{"class":47},[33,77098,77100],{"class":35,"line":77099},291,[33,77101,4786],{"class":47},[33,77103,77105],{"class":35,"line":77104},292,[33,77106,54617],{"class":47},[33,77108,77110],{"class":35,"line":77109},293,[33,77111,100],{"emptyLinePlaceholder":99},[33,77113,77115],{"class":35,"line":77114},294,[33,77116,35686],{"class":47},[33,77118,77120],{"class":35,"line":77119},295,[33,77121,100],{"emptyLinePlaceholder":99},[33,77123,77125,77127,77129],{"class":35,"line":77124},296,[33,77126,54636],{"class":47},[33,77128,54034],{"class":53522},[33,77130,53529],{"class":47},[33,77132,77134,77136,77138],{"class":35,"line":77133},297,[33,77135,54006],{"class":47},[33,77137,54021],{"class":53522},[33,77139,53529],{"class":47},[33,77141,77143],{"class":35,"line":77142},298,[33,77144,100],{"emptyLinePlaceholder":99},[33,77146,77148,77150,77152],{"class":35,"line":77147},299,[33,77149,54006],{"class":47},[33,77151,52857],{"class":53522},[33,77153,53529],{"class":47},[14,77155,77157],{"id":77156},"_36-正则表达式","3.6 正则表达式",[19,77159,77160],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,77162,77163],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,77165,77166],{},"正则表达式的作用：",[3413,77168,77169,77176,77182],{},[331,77170,77171,77172,77175],{},"表单验证（ ",[2575,77173,77174],{},"匹配"," ）",[331,77177,77178,77179,77175],{},"过滤敏感词（ ",[2575,77180,77181],{},"替换",[331,77183,77184,77185,77175],{},"字符串中提取我们想要的部分（ ",[2575,77186,77187],{},"提取",[631,77189,77191],{"id":77190},"_361-语法","3.6.1 语法",[19,77193,77194],{},"正则表达式使用步骤：",[328,77196,77197,77200],{},[331,77198,77199],{},"定义规则",[331,77201,77202],{},"查找是否匹配",[19,77204,77205],{},"正则表达式里边不需要写引号",[19,77207,77208],{},[3736,77209],{"alt":28,"src":77210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,77212,77213],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,77215,77216],{},"reg.test(str)",[19,77218,77219],{},[3736,77220],{"alt":28,"src":77221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,77223,77224],{},[3736,77225],{"alt":28,"src":77226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[631,77228,77230],{"id":77229},"_362-元字符","3.6.2 元字符",[328,77232,77233,77236,77239,77242,77249],{},[331,77234,77235],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[331,77237,77238],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[331,77240,77241],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[331,77243,77244,77245],{},"正则验证工具：",[2663,77246,77247],{"href":77247,"rel":77248},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[26103],[331,77250,77251],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[24236,77253,77255],{"id":77254},"_3621-边界符","3.6.2.1 边界符",[19,77257,77258],{},[3736,77259],{"alt":28,"src":77260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,77262,77263],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,77265,77266],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,77268,77269],{},"只匹配一次",[19,77271,77272],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[24236,77274,77276],{"id":77275},"_3622-量词","3.6.2.2 量词",[19,77278,77279],{},[3736,77280],{"alt":28,"src":77281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,77283,77284],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[24236,77286,77288],{"id":77287},"_3623-元字符","3.6.2.3 元字符",[19,77290,77291],{},[3736,77292],{"alt":28,"src":77293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,77295,77296],{},"匹配的是a或b或c []只选一个",[19,77298,77299],{},[3736,77300],{"alt":28,"src":77301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77303,77304],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77306,77307],{},[3736,77308],{"alt":28,"src":77309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77311,77312],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77314,77315],{},[3736,77316],{"alt":28,"src":77317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[23,77319,77321],{"className":52855,"code":77320,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,77322,77323,77333,77347,77351,77359,77373,77393,77405,77413,77417,77425,77433,77438,77469,77496,77524,77528,77533,77561,77592,77597,77602,77633,77665,77697,77701,77706,77737,77767,77797,77801,77806,77837,77868,77898,77928,77932,77937,77970,77974,77979,78010,78041,78045,78050,78081,78111,78142,78146,78151,78183,78214,78245,78272,78303,78335,78368,78399,78430,78462,78493,78501,78509,78513],{"__ignoreMap":28},[33,77324,77325,77327,77329,77331],{"class":35,"line":36},[33,77326,53519],{"class":47},[33,77328,53523],{"class":53522},[33,77330,53526],{"class":43},[33,77332,53529],{"class":47},[33,77334,77335,77337,77339,77341,77343,77345],{"class":35,"line":51},[33,77336,2226],{"class":47},[33,77338,52857],{"class":53522},[33,77340,53538],{"class":43},[33,77342,57],{"class":47},[33,77344,53543],{"class":60},[33,77346,53529],{"class":47},[33,77348,77349],{"class":35,"line":64},[33,77350,100],{"emptyLinePlaceholder":99},[33,77352,77353,77355,77357],{"class":35,"line":76},[33,77354,2226],{"class":47},[33,77356,53556],{"class":53522},[33,77358,53529],{"class":47},[33,77360,77361,77363,77365,77367,77369,77371],{"class":35,"line":87},[33,77362,54364],{"class":47},[33,77364,53566],{"class":53522},[33,77366,53569],{"class":43},[33,77368,57],{"class":47},[33,77370,53574],{"class":60},[33,77372,53529],{"class":47},[33,77374,77375,77377,77379,77381,77383,77385,77387,77389,77391],{"class":35,"line":96},[33,77376,54364],{"class":47},[33,77378,53566],{"class":53522},[33,77380,17158],{"class":43},[33,77382,57],{"class":47},[33,77384,53613],{"class":60},[33,77386,53593],{"class":43},[33,77388,57],{"class":47},[33,77390,53620],{"class":60},[33,77392,53529],{"class":47},[33,77394,77395,77397,77399,77401,77403],{"class":35,"line":103},[33,77396,54364],{"class":47},[33,77398,53629],{"class":53522},[33,77400,53632],{"class":47},[33,77402,53629],{"class":53522},[33,77404,53529],{"class":47},[33,77406,77407,77409,77411],{"class":35,"line":108},[33,77408,54006],{"class":47},[33,77410,53556],{"class":53522},[33,77412,53529],{"class":47},[33,77414,77415],{"class":35,"line":119},[33,77416,100],{"emptyLinePlaceholder":99},[33,77418,77419,77421,77423],{"class":35,"line":128},[33,77420,2226],{"class":47},[33,77422,54021],{"class":53522},[33,77424,53529],{"class":47},[33,77426,77427,77429,77431],{"class":35,"line":1753},[33,77428,54364],{"class":47},[33,77430,54034],{"class":53522},[33,77432,53529],{"class":47},[33,77434,77435],{"class":35,"line":1763},[33,77436,77437],{"class":2487},"    \u002F\u002F 元字符中\n",[33,77439,77440,77442,77444,77446,77448,77451,77453,77455,77458,77460,77463,77466],{"class":35,"line":1775},[33,77441,75966],{"class":47},[33,77443,60465],{"class":43},[33,77445,133],{"class":47},[33,77447,3001],{"class":60},[33,77449,77450],{"class":50199},"哈",[33,77452,3001],{"class":60},[33,77454,2975],{"class":47},[33,77456,77457],{"class":43},"test",[33,77459,133],{"class":47},[33,77461,77462],{"class":60},"'哈'",[33,77464,77465],{"class":47},"))  ",[33,77467,77468],{"class":2487},"\u002F\u002Ftrue\n",[33,77470,77471,77473,77475,77477,77479,77481,77483,77485,77487,77489,77492,77494],{"class":35,"line":1780},[33,77472,75966],{"class":47},[33,77474,60465],{"class":43},[33,77476,133],{"class":47},[33,77478,3001],{"class":60},[33,77480,77450],{"class":50199},[33,77482,3001],{"class":60},[33,77484,2975],{"class":47},[33,77486,77457],{"class":43},[33,77488,133],{"class":47},[33,77490,77491],{"class":60},"'哈哈'",[33,77493,77465],{"class":47},[33,77495,77468],{"class":2487},[33,77497,77498,77500,77502,77504,77506,77508,77510,77512,77514,77516,77519,77522],{"class":35,"line":1785},[33,77499,75966],{"class":47},[33,77501,60465],{"class":43},[33,77503,133],{"class":47},[33,77505,3001],{"class":60},[33,77507,77450],{"class":50199},[33,77509,3001],{"class":60},[33,77511,2975],{"class":47},[33,77513,77457],{"class":43},[33,77515,133],{"class":47},[33,77517,77518],{"class":60},"'二哈'",[33,77520,77521],{"class":47},"))   ",[33,77523,77468],{"class":2487},[33,77525,77526],{"class":35,"line":1940},[33,77527,100],{"emptyLinePlaceholder":99},[33,77529,77530],{"class":35,"line":2183},[33,77531,77532],{"class":2487},"    \u002F\u002F 1.边界符\n",[33,77534,77535,77537,77539,77541,77543,77545,77547,77549,77551,77553,77555,77557,77559],{"class":35,"line":2208},[33,77536,75966],{"class":47},[33,77538,60465],{"class":43},[33,77540,133],{"class":47},[33,77542,3001],{"class":60},[33,77544,3373],{"class":39},[33,77546,77450],{"class":50199},[33,77548,3001],{"class":60},[33,77550,2975],{"class":47},[33,77552,77457],{"class":43},[33,77554,133],{"class":47},[33,77556,77462],{"class":60},[33,77558,77465],{"class":47},[33,77560,77468],{"class":2487},[33,77562,77563,77565,77567,77569,77571,77573,77575,77577,77579,77581,77583,77585,77587,77589],{"class":35,"line":2234},[33,77564,75966],{"class":47},[33,77566,60465],{"class":43},[33,77568,133],{"class":47},[33,77570,3001],{"class":60},[33,77572,3373],{"class":39},[33,77574,77450],{"class":50199},[33,77576,2725],{"class":39},[33,77578,3001],{"class":60},[33,77580,2975],{"class":47},[33,77582,77457],{"class":43},[33,77584,133],{"class":47},[33,77586,77491],{"class":60},[33,77588,77465],{"class":47},[33,77590,77591],{"class":2487},"\u002F\u002Ffalse\n",[33,77593,77594],{"class":35,"line":2239},[33,77595,77596],{"class":2487},"    \u002F\u002F 2.量词\n",[33,77598,77599],{"class":35,"line":2247},[33,77600,77601],{"class":2487},"    \u002F\u002F 量词 * 类似于 >= 0\n",[33,77603,77604,77606,77608,77610,77612,77614,77616,77619,77621,77623,77625,77627,77629,77631],{"class":35,"line":2255},[33,77605,75966],{"class":47},[33,77607,60465],{"class":43},[33,77609,133],{"class":47},[33,77611,3001],{"class":60},[33,77613,3373],{"class":39},[33,77615,77450],{"class":50199},[33,77617,77618],{"class":39},"*$",[33,77620,3001],{"class":60},[33,77622,2975],{"class":47},[33,77624,77457],{"class":43},[33,77626,133],{"class":47},[33,77628,77491],{"class":60},[33,77630,77465],{"class":47},[33,77632,77468],{"class":2487},[33,77634,77635,77637,77639,77641,77643,77645,77647,77649,77651,77653,77655,77657,77660,77662],{"class":35,"line":3992},[33,77636,75966],{"class":47},[33,77638,60465],{"class":43},[33,77640,133],{"class":47},[33,77642,3001],{"class":60},[33,77644,3373],{"class":39},[33,77646,77450],{"class":50199},[33,77648,77618],{"class":39},[33,77650,3001],{"class":60},[33,77652,2975],{"class":47},[33,77654,77457],{"class":43},[33,77656,133],{"class":47},[33,77658,77659],{"class":60},"'二哈好傻'",[33,77661,77465],{"class":47},[33,77663,77664],{"class":2487},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[33,77666,77667,77669,77671,77673,77675,77677,77679,77681,77683,77685,77687,77689,77692,77694],{"class":35,"line":4009},[33,77668,75966],{"class":47},[33,77670,60465],{"class":43},[33,77672,133],{"class":47},[33,77674,3001],{"class":60},[33,77676,3373],{"class":39},[33,77678,77450],{"class":50199},[33,77680,77618],{"class":39},[33,77682,3001],{"class":60},[33,77684,2975],{"class":47},[33,77686,77457],{"class":43},[33,77688,133],{"class":47},[33,77690,77691],{"class":60},"'哈好哈'",[33,77693,77521],{"class":47},[33,77695,77696],{"class":2487},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[33,77698,77699],{"class":35,"line":4014},[33,77700,100],{"emptyLinePlaceholder":99},[33,77702,77703],{"class":35,"line":4019},[33,77704,77705],{"class":2487},"    \u002F\u002F +类似于>=1\n",[33,77707,77708,77710,77712,77714,77716,77718,77720,77723,77725,77727,77729,77731,77733,77735],{"class":35,"line":4024},[33,77709,75966],{"class":47},[33,77711,60465],{"class":43},[33,77713,133],{"class":47},[33,77715,3001],{"class":60},[33,77717,3373],{"class":39},[33,77719,77450],{"class":50199},[33,77721,77722],{"class":39},"+$",[33,77724,3001],{"class":60},[33,77726,2975],{"class":47},[33,77728,77457],{"class":43},[33,77730,133],{"class":47},[33,77732,77491],{"class":60},[33,77734,77465],{"class":47},[33,77736,77468],{"class":2487},[33,77738,77739,77741,77743,77745,77747,77749,77751,77753,77755,77757,77759,77761,77763,77765],{"class":35,"line":4038},[33,77740,75966],{"class":47},[33,77742,60465],{"class":43},[33,77744,133],{"class":47},[33,77746,3001],{"class":60},[33,77748,3373],{"class":39},[33,77750,77450],{"class":50199},[33,77752,77722],{"class":39},[33,77754,3001],{"class":60},[33,77756,2975],{"class":47},[33,77758,77457],{"class":43},[33,77760,133],{"class":47},[33,77762,77659],{"class":60},[33,77764,77465],{"class":47},[33,77766,77664],{"class":2487},[33,77768,77769,77771,77773,77775,77777,77779,77781,77783,77785,77787,77789,77791,77793,77795],{"class":35,"line":4043},[33,77770,75966],{"class":47},[33,77772,60465],{"class":43},[33,77774,133],{"class":47},[33,77776,3001],{"class":60},[33,77778,3373],{"class":39},[33,77780,77450],{"class":50199},[33,77782,77722],{"class":39},[33,77784,3001],{"class":60},[33,77786,2975],{"class":47},[33,77788,77457],{"class":43},[33,77790,133],{"class":47},[33,77792,77691],{"class":60},[33,77794,77521],{"class":47},[33,77796,77591],{"class":2487},[33,77798,77799],{"class":35,"line":4834},[33,77800,100],{"emptyLinePlaceholder":99},[33,77802,77803],{"class":35,"line":4848},[33,77804,77805],{"class":2487},"    \u002F\u002F ?类似于0次或一次\n",[33,77807,77808,77810,77812,77814,77816,77818,77821,77823,77825,77827,77829,77831,77833,77835],{"class":35,"line":4856},[33,77809,75966],{"class":47},[33,77811,60465],{"class":43},[33,77813,133],{"class":47},[33,77815,3001],{"class":60},[33,77817,3373],{"class":39},[33,77819,77820],{"class":50199},"哈？",[33,77822,2725],{"class":39},[33,77824,3001],{"class":60},[33,77826,2975],{"class":47},[33,77828,77457],{"class":43},[33,77830,133],{"class":47},[33,77832,76440],{"class":60},[33,77834,77521],{"class":47},[33,77836,77468],{"class":2487},[33,77838,77839,77841,77843,77845,77847,77849,77851,77854,77856,77858,77860,77862,77864,77866],{"class":35,"line":4861},[33,77840,75966],{"class":47},[33,77842,60465],{"class":43},[33,77844,133],{"class":47},[33,77846,3001],{"class":60},[33,77848,3373],{"class":39},[33,77850,77450],{"class":50199},[33,77852,77853],{"class":39},"?$",[33,77855,3001],{"class":60},[33,77857,2975],{"class":47},[33,77859,77457],{"class":43},[33,77861,133],{"class":47},[33,77863,77491],{"class":60},[33,77865,77465],{"class":47},[33,77867,77591],{"class":2487},[33,77869,77870,77872,77874,77876,77878,77880,77882,77884,77886,77888,77890,77892,77894,77896],{"class":35,"line":4867},[33,77871,75966],{"class":47},[33,77873,60465],{"class":43},[33,77875,133],{"class":47},[33,77877,3001],{"class":60},[33,77879,3373],{"class":39},[33,77881,77450],{"class":50199},[33,77883,77853],{"class":39},[33,77885,3001],{"class":60},[33,77887,2975],{"class":47},[33,77889,77457],{"class":43},[33,77891,133],{"class":47},[33,77893,77659],{"class":60},[33,77895,77465],{"class":47},[33,77897,77664],{"class":2487},[33,77899,77900,77902,77904,77906,77908,77910,77912,77914,77916,77918,77920,77922,77924,77926],{"class":35,"line":4873},[33,77901,75966],{"class":47},[33,77903,60465],{"class":43},[33,77905,133],{"class":47},[33,77907,3001],{"class":60},[33,77909,3373],{"class":39},[33,77911,77450],{"class":50199},[33,77913,77853],{"class":39},[33,77915,3001],{"class":60},[33,77917,2975],{"class":47},[33,77919,77457],{"class":43},[33,77921,133],{"class":47},[33,77923,77691],{"class":60},[33,77925,77465],{"class":47},[33,77927,77591],{"class":2487},[33,77929,77930],{"class":35,"line":4878},[33,77931,100],{"emptyLinePlaceholder":99},[33,77933,77934],{"class":35,"line":10194},[33,77935,77936],{"class":2487},"    \u002F\u002F {n}写几，就必须出现几次\n",[33,77938,77939,77941,77943,77945,77947,77949,77951,77954,77956,77958,77960,77962,77965,77968],{"class":35,"line":10218},[33,77940,75966],{"class":47},[33,77942,60465],{"class":43},[33,77944,133],{"class":47},[33,77946,3001],{"class":60},[33,77948,3373],{"class":39},[33,77950,77450],{"class":50199},[33,77952,77953],{"class":39},"{4}$",[33,77955,3001],{"class":60},[33,77957,2975],{"class":47},[33,77959,77457],{"class":43},[33,77961,133],{"class":47},[33,77963,77964],{"class":60},"'哈哈哈哈'",[33,77966,77967],{"class":47},")) ",[33,77969,77468],{"class":2487},[33,77971,77972],{"class":35,"line":10223},[33,77973,100],{"emptyLinePlaceholder":99},[33,77975,77976],{"class":35,"line":10229},[33,77977,77978],{"class":2487},"    \u002F\u002F {n,}大于等于n次\n",[33,77980,77981,77983,77985,77987,77989,77991,77993,77996,77998,78000,78002,78004,78006,78008],{"class":35,"line":10256},[33,77982,75966],{"class":47},[33,77984,60465],{"class":43},[33,77986,133],{"class":47},[33,77988,3001],{"class":60},[33,77990,3373],{"class":39},[33,77992,77450],{"class":50199},[33,77994,77995],{"class":39},"{4,}$",[33,77997,3001],{"class":60},[33,77999,2975],{"class":47},[33,78001,77457],{"class":43},[33,78003,133],{"class":47},[33,78005,77964],{"class":60},[33,78007,77967],{"class":47},[33,78009,77468],{"class":2487},[33,78011,78012,78014,78016,78018,78020,78022,78024,78026,78028,78030,78032,78034,78037,78039],{"class":35,"line":10261},[33,78013,75966],{"class":47},[33,78015,60465],{"class":43},[33,78017,133],{"class":47},[33,78019,3001],{"class":60},[33,78021,3373],{"class":39},[33,78023,77450],{"class":50199},[33,78025,77995],{"class":39},[33,78027,3001],{"class":60},[33,78029,2975],{"class":47},[33,78031,77457],{"class":43},[33,78033,133],{"class":47},[33,78035,78036],{"class":60},"'哈哈哈哈哈'",[33,78038,77967],{"class":47},[33,78040,77468],{"class":2487},[33,78042,78043],{"class":35,"line":10267},[33,78044,100],{"emptyLinePlaceholder":99},[33,78046,78047],{"class":35,"line":10279},[33,78048,78049],{"class":2487},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[33,78051,78052,78054,78056,78058,78060,78062,78064,78067,78069,78071,78073,78075,78077,78079],{"class":35,"line":10291},[33,78053,75966],{"class":47},[33,78055,60465],{"class":43},[33,78057,133],{"class":47},[33,78059,3001],{"class":60},[33,78061,3373],{"class":39},[33,78063,77450],{"class":50199},[33,78065,78066],{"class":39},"{4,6}$",[33,78068,3001],{"class":60},[33,78070,2975],{"class":47},[33,78072,77457],{"class":43},[33,78074,133],{"class":47},[33,78076,77964],{"class":60},[33,78078,77967],{"class":47},[33,78080,77468],{"class":2487},[33,78082,78083,78085,78087,78089,78091,78093,78095,78097,78099,78101,78103,78105,78107,78109],{"class":35,"line":10303},[33,78084,75966],{"class":47},[33,78086,60465],{"class":43},[33,78088,133],{"class":47},[33,78090,3001],{"class":60},[33,78092,3373],{"class":39},[33,78094,77450],{"class":50199},[33,78096,78066],{"class":39},[33,78098,3001],{"class":60},[33,78100,2975],{"class":47},[33,78102,77457],{"class":43},[33,78104,133],{"class":47},[33,78106,78036],{"class":60},[33,78108,77967],{"class":47},[33,78110,77468],{"class":2487},[33,78112,78113,78115,78117,78119,78121,78123,78125,78127,78129,78131,78133,78135,78138,78140],{"class":35,"line":11961},[33,78114,75966],{"class":47},[33,78116,60465],{"class":43},[33,78118,133],{"class":47},[33,78120,3001],{"class":60},[33,78122,3373],{"class":39},[33,78124,77450],{"class":50199},[33,78126,78066],{"class":39},[33,78128,3001],{"class":60},[33,78130,2975],{"class":47},[33,78132,77457],{"class":43},[33,78134,133],{"class":47},[33,78136,78137],{"class":60},"'哈哈哈哈哈哈哈'",[33,78139,77967],{"class":47},[33,78141,77591],{"class":2487},[33,78143,78144],{"class":35,"line":11986},[33,78145,100],{"emptyLinePlaceholder":99},[33,78147,78148],{"class":35,"line":12009},[33,78149,78150],{"class":2487},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[33,78152,78153,78155,78157,78159,78161,78163,78166,78168,78170,78172,78174,78176,78179,78181],{"class":35,"line":12033},[33,78154,75966],{"class":47},[33,78156,60465],{"class":43},[33,78158,133],{"class":47},[33,78160,3001],{"class":60},[33,78162,3373],{"class":39},[33,78164,78165],{"class":72},"[abc]",[33,78167,2725],{"class":39},[33,78169,3001],{"class":60},[33,78171,2975],{"class":47},[33,78173,77457],{"class":43},[33,78175,133],{"class":47},[33,78177,78178],{"class":60},"'a'",[33,78180,77465],{"class":47},[33,78182,77468],{"class":2487},[33,78184,78185,78187,78189,78191,78193,78195,78197,78199,78201,78203,78205,78207,78210,78212],{"class":35,"line":12038},[33,78186,75966],{"class":47},[33,78188,60465],{"class":43},[33,78190,133],{"class":47},[33,78192,3001],{"class":60},[33,78194,3373],{"class":39},[33,78196,78165],{"class":72},[33,78198,2725],{"class":39},[33,78200,3001],{"class":60},[33,78202,2975],{"class":47},[33,78204,77457],{"class":43},[33,78206,133],{"class":47},[33,78208,78209],{"class":60},"'b'",[33,78211,77465],{"class":47},[33,78213,77468],{"class":2487},[33,78215,78216,78218,78220,78222,78224,78226,78228,78230,78232,78234,78236,78238,78241,78243],{"class":35,"line":12043},[33,78217,75966],{"class":47},[33,78219,60465],{"class":43},[33,78221,133],{"class":47},[33,78223,3001],{"class":60},[33,78225,3373],{"class":39},[33,78227,78165],{"class":72},[33,78229,2725],{"class":39},[33,78231,3001],{"class":60},[33,78233,2975],{"class":47},[33,78235,77457],{"class":43},[33,78237,133],{"class":47},[33,78239,78240],{"class":60},"'c'",[33,78242,77465],{"class":47},[33,78244,77468],{"class":2487},[33,78246,78247,78249,78251,78253,78255,78257,78259,78261,78263,78265,78268,78270],{"class":35,"line":12048},[33,78248,75966],{"class":47},[33,78250,60465],{"class":43},[33,78252,133],{"class":47},[33,78254,3001],{"class":60},[33,78256,78165],{"class":72},[33,78258,3001],{"class":60},[33,78260,2975],{"class":47},[33,78262,77457],{"class":43},[33,78264,133],{"class":47},[33,78266,78267],{"class":60},"'ab'",[33,78269,77465],{"class":47},[33,78271,77468],{"class":2487},[33,78273,78274,78276,78278,78280,78282,78284,78286,78288,78290,78292,78294,78296,78298,78300],{"class":35,"line":12057},[33,78275,75966],{"class":47},[33,78277,60465],{"class":43},[33,78279,133],{"class":47},[33,78281,3001],{"class":60},[33,78283,3373],{"class":39},[33,78285,78165],{"class":72},[33,78287,2725],{"class":39},[33,78289,3001],{"class":60},[33,78291,2975],{"class":47},[33,78293,77457],{"class":43},[33,78295,133],{"class":47},[33,78297,78267],{"class":60},[33,78299,77465],{"class":47},[33,78301,78302],{"class":2487},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[33,78304,78305,78307,78309,78311,78313,78315,78317,78320,78322,78324,78326,78328,78330,78332],{"class":35,"line":12062},[33,78306,75966],{"class":47},[33,78308,60465],{"class":43},[33,78310,133],{"class":47},[33,78312,3001],{"class":60},[33,78314,3373],{"class":39},[33,78316,78165],{"class":72},[33,78318,78319],{"class":39},"{2}$",[33,78321,3001],{"class":60},[33,78323,2975],{"class":47},[33,78325,77457],{"class":43},[33,78327,133],{"class":47},[33,78329,78267],{"class":60},[33,78331,77465],{"class":47},[33,78333,78334],{"class":2487},"\u002F\u002Ftrue   可以选两个\n",[33,78336,78337,78339,78341,78343,78345,78347,78350,78352,78354,78356,78358,78360,78363,78365],{"class":35,"line":12068},[33,78338,75966],{"class":47},[33,78340,60465],{"class":43},[33,78342,133],{"class":47},[33,78344,3001],{"class":60},[33,78346,3373],{"class":39},[33,78348,78349],{"class":72},"[a-z]",[33,78351,2725],{"class":39},[33,78353,3001],{"class":60},[33,78355,2975],{"class":47},[33,78357,77457],{"class":43},[33,78359,133],{"class":47},[33,78361,78362],{"class":60},"'p'",[33,78364,77521],{"class":47},[33,78366,78367],{"class":2487},"\u002F\u002Ftrue   依然只能选一个\n",[33,78369,78370,78372,78374,78376,78378,78380,78383,78385,78387,78389,78391,78393,78395,78397],{"class":35,"line":12089},[33,78371,75966],{"class":47},[33,78373,60465],{"class":43},[33,78375,133],{"class":47},[33,78377,3001],{"class":60},[33,78379,3373],{"class":39},[33,78381,78382],{"class":72},"[A-Z]",[33,78384,2725],{"class":39},[33,78386,3001],{"class":60},[33,78388,2975],{"class":47},[33,78390,77457],{"class":43},[33,78392,133],{"class":47},[33,78394,78362],{"class":60},[33,78396,77521],{"class":47},[33,78398,77591],{"class":2487},[33,78400,78401,78403,78405,78407,78409,78411,78413,78415,78417,78419,78421,78423,78426,78428],{"class":35,"line":12095},[33,78402,75966],{"class":47},[33,78404,60465],{"class":43},[33,78406,133],{"class":47},[33,78408,3001],{"class":60},[33,78410,3373],{"class":39},[33,78412,78382],{"class":72},[33,78414,2725],{"class":39},[33,78416,3001],{"class":60},[33,78418,2975],{"class":47},[33,78420,77457],{"class":43},[33,78422,133],{"class":47},[33,78424,78425],{"class":60},"'P'",[33,78427,77521],{"class":47},[33,78429,77468],{"class":2487},[33,78431,78432,78434,78436,78438,78440,78442,78445,78447,78449,78451,78453,78455,78458,78460],{"class":35,"line":12109},[33,78433,75966],{"class":47},[33,78435,60465],{"class":43},[33,78437,133],{"class":47},[33,78439,3001],{"class":60},[33,78441,3373],{"class":39},[33,78443,78444],{"class":72},"[0-9]",[33,78446,2725],{"class":39},[33,78448,3001],{"class":60},[33,78450,2975],{"class":47},[33,78452,77457],{"class":43},[33,78454,133],{"class":47},[33,78456,78457],{"class":60},"'0'",[33,78459,77521],{"class":47},[33,78461,77468],{"class":2487},[33,78463,78464,78466,78468,78470,78472,78474,78477,78479,78481,78483,78485,78487,78489,78491],{"class":35,"line":12115},[33,78465,75966],{"class":47},[33,78467,60465],{"class":43},[33,78469,133],{"class":47},[33,78471,3001],{"class":60},[33,78473,3373],{"class":39},[33,78475,78476],{"class":72},"[a-zA-Z0-9]",[33,78478,2725],{"class":39},[33,78480,3001],{"class":60},[33,78482,2975],{"class":47},[33,78484,77457],{"class":43},[33,78486,133],{"class":47},[33,78488,78362],{"class":60},[33,78490,77465],{"class":47},[33,78492,77468],{"class":2487},[33,78494,78495,78497,78499],{"class":35,"line":12142},[33,78496,54636],{"class":47},[33,78498,54034],{"class":53522},[33,78500,53529],{"class":47},[33,78502,78503,78505,78507],{"class":35,"line":12151},[33,78504,54006],{"class":47},[33,78506,54021],{"class":53522},[33,78508,53529],{"class":47},[33,78510,78511],{"class":35,"line":12157},[33,78512,100],{"emptyLinePlaceholder":99},[33,78514,78515,78517,78519],{"class":35,"line":12165},[33,78516,54006],{"class":47},[33,78518,52857],{"class":53522},[33,78520,53529],{"class":47},[24236,78522,78524],{"id":78523},"_3624-修饰符","3.6.2.4 修饰符",[19,78526,78527],{},[3736,78528],{"alt":28,"src":78529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78531,78532],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78534,78535],{},[3736,78536],{"alt":28,"src":78537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[23,78539,78541],{"className":52855,"code":78540,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[30,78542,78543,78553,78567,78575,78589,78609,78621,78629,78637,78645,78677,78708,78713,78745,78756,78789,78797,78805,78813],{"__ignoreMap":28},[33,78544,78545,78547,78549,78551],{"class":35,"line":36},[33,78546,53519],{"class":47},[33,78548,53523],{"class":53522},[33,78550,53526],{"class":43},[33,78552,53529],{"class":47},[33,78554,78555,78557,78559,78561,78563,78565],{"class":35,"line":51},[33,78556,2226],{"class":47},[33,78558,52857],{"class":53522},[33,78560,53538],{"class":43},[33,78562,57],{"class":47},[33,78564,53543],{"class":60},[33,78566,53529],{"class":47},[33,78568,78569,78571,78573],{"class":35,"line":64},[33,78570,2226],{"class":47},[33,78572,53556],{"class":53522},[33,78574,53529],{"class":47},[33,78576,78577,78579,78581,78583,78585,78587],{"class":35,"line":76},[33,78578,54364],{"class":47},[33,78580,53566],{"class":53522},[33,78582,53569],{"class":43},[33,78584,57],{"class":47},[33,78586,53574],{"class":60},[33,78588,53529],{"class":47},[33,78590,78591,78593,78595,78597,78599,78601,78603,78605,78607],{"class":35,"line":87},[33,78592,54364],{"class":47},[33,78594,53566],{"class":53522},[33,78596,17158],{"class":43},[33,78598,57],{"class":47},[33,78600,53613],{"class":60},[33,78602,53593],{"class":43},[33,78604,57],{"class":47},[33,78606,53620],{"class":60},[33,78608,53529],{"class":47},[33,78610,78611,78613,78615,78617,78619],{"class":35,"line":96},[33,78612,54364],{"class":47},[33,78614,53629],{"class":53522},[33,78616,53632],{"class":47},[33,78618,53629],{"class":53522},[33,78620,53529],{"class":47},[33,78622,78623,78625,78627],{"class":35,"line":103},[33,78624,54006],{"class":47},[33,78626,53556],{"class":53522},[33,78628,53529],{"class":47},[33,78630,78631,78633,78635],{"class":35,"line":108},[33,78632,2226],{"class":47},[33,78634,54021],{"class":53522},[33,78636,53529],{"class":47},[33,78638,78639,78641,78643],{"class":35,"line":119},[33,78640,54364],{"class":47},[33,78642,54034],{"class":53522},[33,78644,53529],{"class":47},[33,78646,78647,78649,78651,78653,78655,78657,78660,78662,78664,78666,78668,78670,78673,78675],{"class":35,"line":128},[33,78648,75966],{"class":47},[33,78650,60465],{"class":43},[33,78652,133],{"class":47},[33,78654,3001],{"class":60},[33,78656,3373],{"class":39},[33,78658,78659],{"class":50199},"java",[33,78661,2725],{"class":39},[33,78663,3001],{"class":60},[33,78665,2975],{"class":47},[33,78667,77457],{"class":43},[33,78669,133],{"class":47},[33,78671,78672],{"class":60},"'java'",[33,78674,77967],{"class":47},[33,78676,77468],{"class":2487},[33,78678,78679,78681,78683,78685,78687,78689,78691,78693,78695,78697,78699,78701,78704,78706],{"class":35,"line":1753},[33,78680,75966],{"class":47},[33,78682,60465],{"class":43},[33,78684,133],{"class":47},[33,78686,3001],{"class":60},[33,78688,3373],{"class":39},[33,78690,78659],{"class":50199},[33,78692,2725],{"class":39},[33,78694,3001],{"class":60},[33,78696,2975],{"class":47},[33,78698,77457],{"class":43},[33,78700,133],{"class":47},[33,78702,78703],{"class":60},"'Java'",[33,78705,77967],{"class":47},[33,78707,77591],{"class":2487},[33,78709,78710],{"class":35,"line":1763},[33,78711,78712],{"class":2487},"    \u002F\u002F 不区分大小写、\n",[33,78714,78715,78717,78719,78721,78723,78725,78727,78729,78731,78733,78735,78737,78739,78741,78743],{"class":35,"line":1775},[33,78716,75966],{"class":47},[33,78718,60465],{"class":43},[33,78720,133],{"class":47},[33,78722,3001],{"class":60},[33,78724,3373],{"class":39},[33,78726,78659],{"class":50199},[33,78728,2725],{"class":39},[33,78730,3001],{"class":60},[33,78732,2861],{"class":39},[33,78734,2975],{"class":47},[33,78736,77457],{"class":43},[33,78738,133],{"class":47},[33,78740,78703],{"class":60},[33,78742,77967],{"class":47},[33,78744,77468],{"class":2487},[33,78746,78747,78749,78751,78753],{"class":35,"line":1780},[33,78748,13462],{"class":39},[33,78750,76132],{"class":72},[33,78752,15804],{"class":39},[33,78754,78755],{"class":60}," 'java是一门编程语言，学完java工资很高'\n",[33,78757,78758,78760,78763,78765,78768,78771,78773,78775,78777,78779,78782,78784,78787],{"class":35,"line":1785},[33,78759,13462],{"class":39},[33,78761,78762],{"class":72}," result",[33,78764,15804],{"class":39},[33,78766,78767],{"class":47}," str.",[33,78769,78770],{"class":43},"replace",[33,78772,133],{"class":47},[33,78774,3001],{"class":60},[33,78776,78659],{"class":50199},[33,78778,3001],{"class":60},[33,78780,78781],{"class":39},"ig",[33,78783,245],{"class":47},[33,78785,78786],{"class":60},"'前端'",[33,78788,226],{"class":47},[33,78790,78791,78793,78795],{"class":35,"line":1940},[33,78792,75966],{"class":47},[33,78794,60465],{"class":43},[33,78796,125],{"class":47},[33,78798,78799,78801,78803],{"class":35,"line":2183},[33,78800,54636],{"class":47},[33,78802,54034],{"class":53522},[33,78804,53529],{"class":47},[33,78806,78807,78809,78811],{"class":35,"line":2208},[33,78808,54006],{"class":47},[33,78810,54021],{"class":53522},[33,78812,53529],{"class":47},[33,78814,78815,78817,78819],{"class":35,"line":2234},[33,78816,54006],{"class":47},[33,78818,52857],{"class":53522},[33,78820,53529],{"class":47},[2331,78822,78823],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":28,"searchDepth":51,"depth":51,"links":78825},[78826,78836,78848,78865,78872,78880],{"id":55579,"depth":51,"text":55580,"children":78827},[78828,78829,78830,78831,78832,78833,78834,78835],{"id":55583,"depth":64,"text":55584},{"id":55616,"depth":64,"text":55617},{"id":55655,"depth":64,"text":55656},{"id":55813,"depth":64,"text":55814},{"id":55861,"depth":64,"text":55862},{"id":55998,"depth":64,"text":55999},{"id":56320,"depth":64,"text":56321},{"id":59307,"depth":64,"text":59308},{"id":59335,"depth":51,"text":59336,"children":78837},[78838,78839,78840,78841,78842,78843,78844,78845,78846,78847],{"id":59339,"depth":64,"text":59340},{"id":59362,"depth":64,"text":59363},{"id":60277,"depth":64,"text":60278},{"id":60967,"depth":64,"text":60968},{"id":61249,"depth":64,"text":61250},{"id":65409,"depth":64,"text":65410},{"id":65579,"depth":64,"text":65580},{"id":65707,"depth":64,"text":65708},{"id":65732,"depth":64,"text":65733},{"id":67121,"depth":64,"text":67122},{"id":68274,"depth":51,"text":68275,"children":78849},[78850,78851,78852,78853,78854,78855,78856,78857,78858,78859,78860,78861,78862,78863,78864],{"id":68278,"depth":64,"text":68279},{"id":68932,"depth":64,"text":68933},{"id":70627,"depth":64,"text":70628},{"id":70668,"depth":64,"text":70669},{"id":70710,"depth":64,"text":70711},{"id":70724,"depth":64,"text":70725},{"id":70773,"depth":64,"text":70774},{"id":70785,"depth":64,"text":70786},{"id":70800,"depth":64,"text":70801},{"id":70836,"depth":64,"text":70837},{"id":70917,"depth":64,"text":70918},{"id":71045,"depth":64,"text":71046},{"id":71057,"depth":64,"text":71058},{"id":71076,"depth":64,"text":71077},{"id":73183,"depth":64,"text":73184},{"id":73202,"depth":51,"text":73203,"children":78866},[78867,78868,78869,78870,78871],{"id":73223,"depth":64,"text":73224},{"id":73243,"depth":64,"text":73244},{"id":73292,"depth":64,"text":73293},{"id":73417,"depth":64,"text":73418},{"id":73598,"depth":64,"text":73599},{"id":73616,"depth":51,"text":73617,"children":78873},[78874,78875,78876,78877,78878,78879],{"id":73631,"depth":64,"text":73632},{"id":73690,"depth":64,"text":73691},{"id":73714,"depth":64,"text":73715},{"id":74034,"depth":64,"text":74035},{"id":74066,"depth":64,"text":74067},{"id":74089,"depth":64,"text":74090},{"id":77156,"depth":51,"text":77157,"children":78881},[78882,78883],{"id":77190,"depth":64,"text":77191},{"id":77229,"depth":64,"text":77230},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55551,"description":2359},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78890,"title":78891,"body":78892,"description":2359,"extension":2360,"meta":95026,"navigation":99,"path":95027,"seo":95028,"stem":95029,"__hash__":95030},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78893,"toc":94962},[78894,78897,78900,78904,78908,78913,78918,78929,78933,78938,78941,78945,78948,78953,78957,78961,78964,78969,78972,78976,78979,78987,78990,78994,78999,79004,79007,79011,79016,79021,79024,79028,79033,79036,79041,79044,79049,79052,79057,79062,79065,79068,79072,79077,79082,79085,79089,79093,79096,79099,79102,79106,79110,79115,79120,79123,79127,79132,79137,79140,79143,79146,79149,79152,79155,79158,79161,79164,79169,79173,79178,79183,79186,79189,79192,79195,79198,79201,79204,79207,79211,79215,79218,79221,79224,79229,79231,79234,79237,79240,79243,79246,79249,79252,79255,79258,79261,79264,79267,79270,79275,79280,79285,79288,79292,79295,79300,79304,79306,79317,79322,79423,79426,79429,79432,79435,79438,79441,79444,79447,79449,79452,79455,79458,79461,79464,79466,79469,79472,79475,79478,79481,79484,79486,79489,79491,79493,79496,79500,79504,79507,79510,79513,79516,79519,79522,79525,79528,79531,79536,79656,79659,79662,79667,79670,79673,79676,79679,79684,79687,79690,79693,79696,79701,79704,79804,79869,79943,79947,79950,79953,79957,79960,79974,80003,80006,80009,80012,80015,80018,80021,80024,80026,80029,80032,80035,80038,80042,80047,80051,80056,80131,80134,80317,80320,80323,80326,80329,80332,80334,80337,80340,80343,80346,80349,80352,80354,80358,80361,80366,80369,80372,80375,80378,80380,80385,80388,80391,80394,80397,80399,80404,80407,80410,80412,80414,80417,80421,80424,80427,80432,80435,80438,80441,80491,80496,80500,80505,80508,80577,80580,80589,80593,80598,80601,80604,80612,80615,80632,82432,82436,82440,82445,82448,82452,82458,82464,82616,82621,82626,82629,82632,82635,82638,82641,82644,82647,82650,82653,82656,82659,82662,82667,82671,82674,82685,82689,82694,82697,82700,82703,82706,82709,82711,82714,82717,82720,82723,82725,82742,82745,82749,82752,82757,82762,82765,82768,82772,82775,82778,82787,82790,82794,82797,82802,82807,82874,82878,82881,82884,82889,82894,82980,82985,82989,82992,82995,83010,83013,83018,83022,83027,83136,83139,83150,83300,83304,83309,83418,83422,83427,83432,83437,83440,83447,83467,83503,83667,83672,83675,83680,83687,83690,83693,83696,83755,83811,83867,83871,83876,84191,84194,84198,84201,84206,84315,84320,84324,84329,84333,84404,84408,84410,84413,84416,84454,84730,84734,84751,84817,84851,84855,84858,84863,84892,84899,84908,84913,84928,84933,84942,84945,85082,85086,85148,85152,85157,85402,85406,85411,85414,85417,85420,85423,85427,85432,87013,87017,87021,87027,87030,87035,87039,87042,87047,87050,87061,87065,87070,87074,87079,87084,87087,87092,87096,87100,87103,87108,87113,87116,87119,87122,87244,87249,87351,87354,87357,87361,87366,87538,87543,87547,87550,87555,87621,87626,87629,87760,87763,87768,87771,87774,87865,87870,87873,87876,87879,87882,87887,87892,87895,87900,87905,87910,87914,87917,87920,87925,87930,87935,87940,87994,87997,88000,88005,88008,88011,88016,88021,88026,88030,88035,88049,88054,88057,88062,88066,88071,88076,88081,88086,88091,88096,88101,88106,88109,88113,88118,88121,88124,88127,88132,88137,88140,88143,88147,88150,88153,88158,88163,88168,88173,88176,88181,88186,88247,88252,88255,88260,89500,89505,89509,89513,89518,89521,89526,89531,89534,89539,89541,89546,89550,89553,89556,89567,89571,89576,89581,89636,89641,89646,89651,89862,89867,89871,89876,89879,89881,89884,89887,90334,90339,90346,90352,90355,90358,90622,90627,90631,90896,90901,90905,90910,90915,90920,90925,91256,91259,91264,91269,91272,91276,91280,91285,91290,91295,91300,91305,91310,91314,91317,91322,91327,91330,91404,91409,91414,91419,91421,91424,91794,91799,91804,91809,91812,91815,91917,91922,91927,92030,92034,92039,92043,92047,92052,92057,92060,92065,92068,92071,92464,92469,92472,92475,92478,92481,93001,93005,93010,93015,93020,93023,93028,93031,93034,93416,93421,93423,93425,93428,93431,93943,93947,94008,94011,94014,94017,94021,94024,94029,94034,94959],[10,78895,78891],{"id":78896},"_4js进阶",[19,78898,78899],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78901,78903],{"id":78902},"_41-作用域","4.1 作用域",[631,78905,78907],{"id":78906},"_411-局部作用域","4.1.1 局部作用域",[19,78909,78910],{},[3736,78911],{"alt":28,"src":78912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78914,78915],{},[3736,78916],{"alt":28,"src":78917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3413,78919,78920,78923,78926],{},[331,78921,78922],{},"函数作用域在函数内部",[331,78924,78925],{},"块级作用域在{}",[331,78927,78928],{},"对象的那个{}不是作用域，不是块作用域",[631,78930,78932],{"id":78931},"_412-全局作用域","4.1.2 全局作用域",[19,78934,78935],{},[3736,78936],{"alt":28,"src":78937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78939,78940],{},"window.a=10不要这样写",[631,78942,78944],{"id":78943},"_413-作用域链","4.1.3 作用域链",[19,78946,78947],{},"变量查找机制",[19,78949,78950],{},[3736,78951],{"alt":28,"src":78952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78954,78956],{"id":78955},"_42-垃圾回收机制","4.2 垃圾回收机制",[631,78958,78960],{"id":78959},"_421-大体介绍","4.2.1 大体介绍",[19,78962,78963],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78965,78966],{},[3736,78967],{"alt":28,"src":78968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78970,78971],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[631,78973,78975],{"id":78974},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78977,78978],{},"堆栈空间分配区别：",[328,78980,78981,78984],{},[331,78982,78983],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[331,78985,78986],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78988,78989],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[24236,78991,78993],{"id":78992},"_4221-引用计数","4.2.2.1 引用计数",[19,78995,78996],{},[3736,78997],{"alt":28,"src":78998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,79000,79001],{},[3736,79002],{"alt":28,"src":79003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,79005,79006],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[24236,79008,79010],{"id":79009},"_4222-标记清除法","4.2.2.2 标记清除法",[19,79012,79013],{},[3736,79014],{"alt":28,"src":79015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,79017,79018],{},[3736,79019],{"alt":28,"src":79020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,79022,79023],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,79025,79027],{"id":79026},"_43-闭包","4.3 闭包",[19,79029,79030],{},[3736,79031],{"alt":28,"src":79032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,79034,79035],{},"闭包：内层函数+外层函数的变量",[19,79037,79038],{},[3736,79039],{"alt":28,"src":79040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,79042,79043],{},"closure就是闭包",[19,79045,79046],{},[3736,79047],{"alt":28,"src":79048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,79050,79051],{},"内层函数必须包含外层函数的变量才是闭包",[19,79053,79054],{},[3736,79055],{"alt":28,"src":79056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,79058,79059],{},[3736,79060],{"alt":28,"src":79061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,79063,79064],{},"闭包可能会引起内存泄漏",[19,79066,79067],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,79069,79071],{"id":79070},"_44-变量提升","4.4 变量提升",[19,79073,79074],{},[3736,79075],{"alt":28,"src":79076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,79078,79079],{},[3736,79080],{"alt":28,"src":79081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,79083,79084],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,79086,79088],{"id":79087},"_45-函数进阶","4.5 函数进阶",[631,79090,79092],{"id":79091},"_451-函数提升","4.5.1 函数提升",[19,79094,79095],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,79097,79098],{},"只提升函数声明，不提升函数调用",[54034,79100,79101],{},"\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",[631,79103,79105],{"id":79104},"_452-函数参数","4.5.2 函数参数",[24236,79107,79109],{"id":79108},"_4521-动态参数","4.5.2.1 动态参数",[19,79111,79112],{},[3736,79113],{"alt":28,"src":79114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,79116,79117],{},[3736,79118],{"alt":28,"src":79119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,79121,79122],{},"箭头函数里边没有arguments",[24236,79124,79126],{"id":79125},"_4522-剩余参数","4.5.2.2 剩余参数",[19,79128,79129],{},[3736,79130],{"alt":28,"src":79131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,79133,79134],{},[3736,79135],{"alt":28,"src":79136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,79138,79139],{},"剩余参数使用的时候不需要写...",[19,79141,79142],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,79144,79145],{},"  function getSum(a,b,...arr) {",[19,79147,79148],{},"  console.log(11)",[19,79150,79151],{},"  }",[19,79153,79154],{},"  getSum(1,2,3,4)",[19,79156,79157],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,79159,79160],{},"  getSum(1,2)",[19,79162,79163],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,79165,79166],{},[3736,79167],{"alt":28,"src":79168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[24236,79170,79172],{"id":79171},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,79174,79175],{},[3736,79176],{"alt":28,"src":79177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,79179,79180],{},[3736,79181],{"alt":28,"src":79182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,79184,79185],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,79187,79188],{},"展开运算符可以用于数组之间的合并：",[19,79190,79191],{},"const arr1 = [1, 2, 3]",[19,79193,79194],{},"const arr2 = [3, 4, 5]",[19,79196,79197],{},"const arr = [...arr1, ...arr2]",[19,79199,79200],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,79202,79203],{},"剩余参数：函数参数使用，得到真数组",[19,79205,79206],{},"展开运算符：数组中使用，数组展开",[631,79208,79210],{"id":79209},"_453-箭头函数","4.5.3 箭头函数",[24236,79212,79214],{"id":79213},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,79216,79217],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,79219,79220],{},"它不是万能的！！！",[19,79222,79223],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,79225,79226],{},[3736,79227],{"alt":28,"src":79228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,79230,2461],{},[19,79232,79233],{},"① 只有一个形参的时候，可以省略小括号：",[19,79235,79236],{},"const fn=x=>{console.log(x)}",[19,79238,79239],{},"② 只有一行代码时可以省略大括号：",[19,79241,79242],{},"const fn=x=>console.log(11)",[19,79244,79245],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,79247,79248],{},"const fn=x=>x+x",[19,79250,79251],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,79253,79254],{},"⑤ 阻止表单默认提交：",[19,79256,79257],{},"const form = document.querySelector('form')",[19,79259,79260],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,79262,79263],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,79265,79266],{},"const fn=uname=>({uname:uname})",[19,79268,79269],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,79271,79272],{},[3736,79273],{"alt":28,"src":79274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,79276,79277],{},[3736,79278],{"alt":28,"src":79279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,79281,79282],{},[3736,79283],{"alt":28,"src":79284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,79286,79287],{},"一定不要忘记用()，有()就理解为自带return",[24236,79289,79291],{"id":79290},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,79293,79294],{},"箭头函数是没有动态参数的arguments",[19,79296,79297],{},[3736,79298],{"alt":28,"src":79299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[24236,79301,79303],{"id":79302},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79305,13573],{},[328,79307,79308,79311,79314],{},[331,79309,79310],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[331,79312,79313],{},"事件回调函数使用箭头函数时，this 为全局的 window",[331,79315,79316],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79318,79319],{},[3736,79320],{"alt":28,"src":79321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[23,79323,79325],{"className":55286,"code":79324,"language":55288,"meta":28,"style":28},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[30,79326,79327,79335,79340,79345,79350,79355,79360,79364,79369,79373,79377,79382,79387,79392,79396,79400,79405,79410,79415],{"__ignoreMap":28},[33,79328,79329,79331,79333],{"class":35,"line":36},[33,79330,54364],{"class":47},[33,79332,54034],{"class":53522},[33,79334,53529],{"class":47},[33,79336,79337],{"class":35,"line":51},[33,79338,79339],{"class":47},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[33,79341,79342],{"class":35,"line":64},[33,79343,79344],{"class":47},"    console.log(this) \u002F\u002F指向window\n",[33,79346,79347],{"class":35,"line":76},[33,79348,79349],{"class":47},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[33,79351,79352],{"class":35,"line":87},[33,79353,79354],{"class":47},"    function fn() {\n",[33,79356,79357],{"class":35,"line":96},[33,79358,79359],{"class":47},"      console.log(this)  \u002F\u002F指向window\n",[33,79361,79362],{"class":35,"line":103},[33,79363,4446],{"class":47},[33,79365,79366],{"class":35,"line":108},[33,79367,79368],{"class":47},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[33,79370,79371],{"class":35,"line":119},[33,79372,100],{"emptyLinePlaceholder":99},[33,79374,79375],{"class":35,"line":128},[33,79376,73736],{"class":47},[33,79378,79379],{"class":35,"line":1753},[33,79380,79381],{"class":47},"      name: 'andy',\n",[33,79383,79384],{"class":35,"line":1763},[33,79385,79386],{"class":47},"      sayHai: function () {\n",[33,79388,79389],{"class":35,"line":1775},[33,79390,79391],{"class":47},"        console.log(this)\n",[33,79393,79394],{"class":35,"line":1780},[33,79395,54617],{"class":47},[33,79397,79398],{"class":35,"line":1785},[33,79399,4446],{"class":47},[33,79401,79402],{"class":35,"line":1940},[33,79403,79404],{"class":47},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[33,79406,79407],{"class":35,"line":2183},[33,79408,79409],{"class":47},"    \u002F\u002F 2.箭头函数的this\n",[33,79411,79412],{"class":35,"line":2208},[33,79413,79414],{"class":47},"    const fn = () => console.log(this)\n",[33,79416,79417,79419,79421],{"class":35,"line":2234},[33,79418,54636],{"class":47},[33,79420,54034],{"class":53522},[33,79422,53529],{"class":47},[19,79424,79425],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79427,79428],{},"const fn = () => console.log(this)",[19,79430,79431],{},"fn() \u002F\u002F指向window",[19,79433,79434],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79436,79437],{},"①",[19,79439,79440],{},"const obj = {",[19,79442,79443],{},"uname: 'pink老师',",[19,79445,79446],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79448,210],{},[19,79450,79451],{},"调用对象里边的函数",[19,79453,79454],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79456,79457],{},"obj.sayHai()",[19,79459,79460],{},"②",[19,79462,79463],{},"const obj1 = {",[19,79465,79443],{},[19,79467,79468],{},"sayHai: function () {",[19,79470,79471],{},"let i = 10",[19,79473,79474],{},"const count = () => {",[19,79476,79477],{},"console.log(this)",[19,79479,79480],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79482,79483],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79485,210],{},[19,79487,79488],{},"count()",[19,79490,210],{},[19,79492,210],{},[19,79494,79495],{},"obj1.sayHai()",[14,79497,79499],{"id":79498},"_46-解构赋值","4.6 解构赋值",[631,79501,79503],{"id":79502},"_461-数组解构","4.6.1 数组解构",[19,79505,79506],{},"以前要是使用数组中的值的话：",[19,79508,79509],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79511,79512],{},"const arr=[100,60,80]",[19,79514,79515],{},"const max=arr[0]",[19,79517,79518],{},"const min=arr[1]",[19,79520,79521],{},"const avg=arr[2]",[19,79523,79524],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79526,79527],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79529,79530],{},"这个写法就类似于上边的那种用很多const的方法",[19,79532,79533],{},[3736,79534],{"alt":28,"src":79535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[23,79537,79539],{"className":52855,"code":79538,"language":52857,"meta":28,"style":28},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[30,79540,79541,79546,79551,79556,79561,79566,79570,79574,79579,79583,79588,79593,79597,79602,79607,79618,79628,79633,79638,79643,79647,79651],{"__ignoreMap":28},[33,79542,79543],{"class":35,"line":36},[33,79544,79545],{"class":47},"①变量之间交换值:\n",[33,79547,79548],{"class":35,"line":51},[33,79549,79550],{"class":47},"let a=1\n",[33,79552,79553],{"class":35,"line":64},[33,79554,79555],{"class":47},"let b=2;\n",[33,79557,79558],{"class":35,"line":76},[33,79559,79560],{"class":47},"必须加这行代码，不然就会报错\n",[33,79562,79563],{"class":35,"line":87},[33,79564,79565],{"class":47},"[b,a]=[a,b]\n",[33,79567,79568],{"class":35,"line":96},[33,79569,100],{"emptyLinePlaceholder":99},[33,79571,79572],{"class":35,"line":103},[33,79573,100],{"emptyLinePlaceholder":99},[33,79575,79576],{"class":35,"line":108},[33,79577,79578],{"class":47},"可以写成下面的方式：\n",[33,79580,79581],{"class":35,"line":119},[33,79582,79550],{"class":47},[33,79584,79585],{"class":35,"line":128},[33,79586,79587],{"class":47},"let b=2\n",[33,79589,79590],{"class":35,"line":1753},[33,79591,79592],{"class":47},";[b,a]=[a,b]\n",[33,79594,79595],{"class":35,"line":1763},[33,79596,100],{"emptyLinePlaceholder":99},[33,79598,79599],{"class":35,"line":1775},[33,79600,79601],{"class":47},"②排序\n",[33,79603,79604],{"class":35,"line":1780},[33,79605,79606],{"class":47},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[33,79608,79609,79612,79615],{"class":35,"line":1785},[33,79610,79611],{"class":47},"for (let i = 0; i ",[33,79613,2226],{"class":79614},"s7hpK",[33,79616,79617],{"class":47}," arr1.length; i++) {\n",[33,79619,79620,79623,79625],{"class":35,"line":1940},[33,79621,79622],{"class":47},"   for (let j = 0; j ",[33,79624,2226],{"class":79614},[33,79626,79627],{"class":47}," arr1.length - 1; j++) {\n",[33,79629,79630],{"class":35,"line":2183},[33,79631,79632],{"class":47},"      if (arr1[j] > arr1[j + 1]) {\n",[33,79634,79635],{"class":35,"line":2208},[33,79636,79637],{"class":47},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[33,79639,79640],{"class":35,"line":2234},[33,79641,79642],{"class":47},"       }\n",[33,79644,79645],{"class":35,"line":2239},[33,79646,6561],{"class":47},[33,79648,79649],{"class":35,"line":2247},[33,79650,1010],{"class":47},[33,79652,79653],{"class":35,"line":2255},[33,79654,79655],{"class":47},"console.log(arr1)\n",[19,79657,79658],{},"数组解构的细节：",[19,79660,79661],{},"①变量多，单元值少",[19,79663,79664],{},[3736,79665],{"alt":28,"src":79666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79668,79669],{},"防止出现undefined的方法：",[19,79671,79672],{},"const [a=0,b=0] =[1]",[19,79674,79675],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79677,79678],{},"②变量少，单元值多",[19,79680,79681],{},[3736,79682],{"alt":28,"src":79683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79685,79686],{},"此时可以使用剩余参数来接收多余的值",[19,79688,79689],{},"const [a,b,...c]=[1,2,3,4]",[19,79691,79692],{},"console.log(c) 输出[3,4]",[19,79694,79695],{},"③可以按需导入，忽略某些返回值",[19,79697,79698],{},[3736,79699],{"alt":28,"src":79700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79702,79703],{},"④支持多维数组的结构",[23,79705,79709],{"className":79706,"code":79707,"language":79708,"meta":28,"style":28},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[30,79710,79711,79739,79755,79770,79785],{"__ignoreMap":28},[33,79712,79713,79715,79717,79719,79721,79723,79725,79727,79730,79732,79734,79736],{"class":35,"line":36},[33,79714,9038],{"class":39},[33,79716,54054],{"class":47},[33,79718,57],{"class":39},[33,79720,906],{"class":47},[33,79722,720],{"class":72},[33,79724,245],{"class":47},[33,79726,725],{"class":72},[33,79728,79729],{"class":47},", [",[33,79731,730],{"class":72},[33,79733,245],{"class":47},[33,79735,753],{"class":72},[33,79737,79738],{"class":47},"]]\n",[33,79740,79741,79744,79746,79748,79750,79752],{"class":35,"line":51},[33,79742,79743],{"class":47},"console.",[33,79745,60465],{"class":43},[33,79747,6105],{"class":47},[33,79749,2617],{"class":72},[33,79751,6468],{"class":47},[33,79753,79754],{"class":2487},"  \u002F\u002F1\n",[33,79756,79757,79759,79761,79763,79765,79767],{"class":35,"line":64},[33,79758,79743],{"class":47},[33,79760,60465],{"class":43},[33,79762,6105],{"class":47},[33,79764,720],{"class":72},[33,79766,6468],{"class":47},[33,79768,79769],{"class":2487},"  \u002F\u002F2\n",[33,79771,79772,79774,79776,79778,79780,79782],{"class":35,"line":76},[33,79773,79743],{"class":47},[33,79775,60465],{"class":43},[33,79777,6105],{"class":47},[33,79779,725],{"class":72},[33,79781,6468],{"class":47},[33,79783,79784],{"class":2487},"  \u002F\u002F[3,4]\n",[33,79786,79787,79789,79791,79793,79795,79797,79799,79801],{"class":35,"line":87},[33,79788,79743],{"class":47},[33,79790,60465],{"class":43},[33,79792,6105],{"class":47},[33,79794,725],{"class":72},[33,79796,7151],{"class":47},[33,79798,2617],{"class":72},[33,79800,6468],{"class":47},[33,79802,79803],{"class":2487},"  \u002F\u002F3\n",[23,79805,79807],{"className":79706,"code":79806,"language":79708,"meta":28,"style":28},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[30,79808,79809,79836,79847,79858],{"__ignoreMap":28},[33,79810,79811,79813,79816,79818,79820,79822,79824,79826,79828,79830,79832,79834],{"class":35,"line":36},[33,79812,9038],{"class":39},[33,79814,79815],{"class":47}," [a, b, c] ",[33,79817,57],{"class":39},[33,79819,906],{"class":47},[33,79821,720],{"class":72},[33,79823,245],{"class":47},[33,79825,725],{"class":72},[33,79827,79729],{"class":47},[33,79829,730],{"class":72},[33,79831,245],{"class":47},[33,79833,753],{"class":72},[33,79835,79738],{"class":47},[33,79837,79838,79840,79842,79845],{"class":35,"line":51},[33,79839,79743],{"class":47},[33,79841,60465],{"class":43},[33,79843,79844],{"class":47},"(a)",[33,79846,79754],{"class":2487},[33,79848,79849,79851,79853,79856],{"class":35,"line":64},[33,79850,79743],{"class":47},[33,79852,60465],{"class":43},[33,79854,79855],{"class":47},"(b)",[33,79857,79769],{"class":2487},[33,79859,79860,79862,79864,79867],{"class":35,"line":76},[33,79861,79743],{"class":47},[33,79863,60465],{"class":43},[33,79865,79866],{"class":47},"(c)",[33,79868,79784],{"class":2487},[23,79870,79872],{"className":79706,"code":79871,"language":79708,"meta":28,"style":28},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[30,79873,79874,79901,79911,79921,79931],{"__ignoreMap":28},[33,79875,79876,79878,79881,79883,79885,79887,79889,79891,79893,79895,79897,79899],{"class":35,"line":36},[33,79877,9038],{"class":39},[33,79879,79880],{"class":47}," [a, b, [c, d]] ",[33,79882,57],{"class":39},[33,79884,906],{"class":47},[33,79886,720],{"class":72},[33,79888,245],{"class":47},[33,79890,725],{"class":72},[33,79892,79729],{"class":47},[33,79894,730],{"class":72},[33,79896,245],{"class":47},[33,79898,753],{"class":72},[33,79900,79738],{"class":47},[33,79902,79903,79905,79907,79909],{"class":35,"line":51},[33,79904,79743],{"class":47},[33,79906,60465],{"class":43},[33,79908,79844],{"class":47},[33,79910,79754],{"class":2487},[33,79912,79913,79915,79917,79919],{"class":35,"line":64},[33,79914,79743],{"class":47},[33,79916,60465],{"class":43},[33,79918,79855],{"class":47},[33,79920,79769],{"class":2487},[33,79922,79923,79925,79927,79929],{"class":35,"line":76},[33,79924,79743],{"class":47},[33,79926,60465],{"class":43},[33,79928,79866],{"class":47},[33,79930,79803],{"class":2487},[33,79932,79933,79935,79937,79940],{"class":35,"line":87},[33,79934,79743],{"class":47},[33,79936,60465],{"class":43},[33,79938,79939],{"class":47},"(d)",[33,79941,79942],{"class":2487},"  \u002F\u002F4\n",[631,79944,79946],{"id":79945},"_462-对象解构","4.6.2 对象解构",[19,79948,79949],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79951,79952],{},"用的非常非常多！！！！！！",[24236,79954,79956],{"id":79955},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79958,79959],{},"基本语法：",[328,79961,79962,79965,79968,79971],{},[331,79963,79964],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[331,79966,79967],{},"对象属性的值将被赋值给与属性名相同的变量",[331,79969,79970],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[331,79972,79973],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[23,79975,79977],{"className":52855,"code":79976,"language":52857,"meta":28,"style":28},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[30,79978,79979,79984,79989,79994,79998],{"__ignoreMap":28},[33,79980,79981],{"class":35,"line":36},[33,79982,79983],{"class":47},"const obj = {\n",[33,79985,79986],{"class":35,"line":51},[33,79987,79988],{"class":47},"   uname: 'pink老师',\n",[33,79990,79991],{"class":35,"line":64},[33,79992,79993],{"class":47},"   age: 18,\n",[33,79995,79996],{"class":35,"line":76},[33,79997,1010],{"class":47},[33,79999,80000],{"class":35,"line":87},[33,80001,80002],{"class":47},"const { uname, age } = obj\n",[19,80004,80005],{},"上方代码这样写等价于：",[19,80007,80008],{},"const uname等价于obj.uname",[19,80010,80011],{},"变量名可以重新改名：",[19,80013,80014],{},"const uname='red老师'",[19,80016,80017],{},"const user={",[19,80019,80020],{},"  uname:'pink老师',",[19,80022,80023],{},"  age:18",[19,80025,210],{},[19,80027,80028],{},"const {uname,age}=user",[19,80030,80031],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,80033,80034],{},"const {旧变量名：新变量名}=对象",[19,80036,80037],{},"const {uname:username,age}=user",[24236,80039,80041],{"id":80040},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,80043,80044],{},[3736,80045],{"alt":28,"src":80046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[24236,80048,80050],{"id":80049},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,80052,80053],{},[3736,80054],{"alt":28,"src":80055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[23,80057,80059],{"className":55286,"code":80058,"language":55288,"meta":28,"style":28},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[30,80060,80061,80069,80074,80079,80084,80089,80094,80099,80104,80109,80113,80118,80123],{"__ignoreMap":28},[33,80062,80063,80065,80067],{"class":35,"line":36},[33,80064,54364],{"class":47},[33,80066,54034],{"class":53522},[33,80068,53529],{"class":47},[33,80070,80071],{"class":35,"line":51},[33,80072,80073],{"class":47},"    const pig = {\n",[33,80075,80076],{"class":35,"line":64},[33,80077,80078],{"class":47},"      name: '佩奇',\n",[33,80080,80081],{"class":35,"line":76},[33,80082,80083],{"class":47},"      family: {\n",[33,80085,80086],{"class":35,"line":87},[33,80087,80088],{"class":47},"        mother: '猪妈妈',\n",[33,80090,80091],{"class":35,"line":96},[33,80092,80093],{"class":47},"        father: '猪爸爸',\n",[33,80095,80096],{"class":35,"line":103},[33,80097,80098],{"class":47},"        sister: '乔治'\n",[33,80100,80101],{"class":35,"line":108},[33,80102,80103],{"class":47},"      },\n",[33,80105,80106],{"class":35,"line":119},[33,80107,80108],{"class":47},"      age: 6\n",[33,80110,80111],{"class":35,"line":128},[33,80112,4446],{"class":47},[33,80114,80115],{"class":35,"line":1753},[33,80116,80117],{"class":47},"    \u002F\u002F 多级对象解构\n",[33,80119,80120],{"class":35,"line":1763},[33,80121,80122],{"class":47},"    const { name, family: { mother, father, sister }, age } = pig\n",[33,80124,80125,80127,80129],{"class":35,"line":1775},[33,80126,54636],{"class":47},[33,80128,54034],{"class":53522},[33,80130,53529],{"class":47},[19,80132,80133],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[23,80135,80138],{"className":80136,"code":80137,"language":78659,"meta":28,"style":28},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[30,80139,80140,80145,80156,80168,80180,80189,80193,80204,80216,80226,80231,80235,80245,80256,80265,80269,80273,80284,80295,80304,80308,80313],{"__ignoreMap":28},[33,80141,80142],{"class":35,"line":36},[33,80143,80144],{"class":2487},"    \u002F\u002F 这是后台传递过来的数据\n",[33,80146,80147,80149,80152,80154],{"class":35,"line":51},[33,80148,13462],{"class":39},[33,80150,80151],{"class":47}," msg ",[33,80153,57],{"class":39},[33,80155,17810],{"class":47},[33,80157,80158,80161,80163,80166],{"class":35,"line":64},[33,80159,80160],{"class":60},"      \"code\"",[33,80162,387],{"class":39},[33,80164,80165],{"class":72}," 200",[33,80167,33696],{"class":47},[33,80169,80170,80173,80175,80178],{"class":35,"line":76},[33,80171,80172],{"class":60},"      \"msg\"",[33,80174,387],{"class":39},[33,80176,80177],{"class":60}," \"获取新闻列表成功\"",[33,80179,33696],{"class":47},[33,80181,80182,80185,80187],{"class":35,"line":87},[33,80183,80184],{"class":60},"      \"data\"",[33,80186,387],{"class":39},[33,80188,1087],{"class":47},[33,80190,80191],{"class":35,"line":96},[33,80192,4767],{"class":47},[33,80194,80195,80198,80200,80202],{"class":35,"line":103},[33,80196,80197],{"class":60},"          \"id\"",[33,80199,387],{"class":39},[33,80201,27357],{"class":72},[33,80203,33696],{"class":47},[33,80205,80206,80209,80211,80214],{"class":35,"line":108},[33,80207,80208],{"class":60},"          \"title\"",[33,80210,387],{"class":39},[33,80212,80213],{"class":60}," \"5G商用自己，三大运用商收入下降\"",[33,80215,33696],{"class":47},[33,80217,80218,80221,80223],{"class":35,"line":119},[33,80219,80220],{"class":60},"          \"count\"",[33,80222,387],{"class":39},[33,80224,80225],{"class":72}," 58\n",[33,80227,80228],{"class":35,"line":128},[33,80229,80230],{"class":47},"        },\n",[33,80232,80233],{"class":35,"line":1753},[33,80234,4767],{"class":47},[33,80236,80237,80239,80241,80243],{"class":35,"line":1763},[33,80238,80197],{"class":60},[33,80240,387],{"class":39},[33,80242,1354],{"class":72},[33,80244,33696],{"class":47},[33,80246,80247,80249,80251,80254],{"class":35,"line":1775},[33,80248,80208],{"class":60},[33,80250,387],{"class":39},[33,80252,80253],{"class":60}," \"国际媒体头条速览\"",[33,80255,33696],{"class":47},[33,80257,80258,80260,80262],{"class":35,"line":1780},[33,80259,80220],{"class":60},[33,80261,387],{"class":39},[33,80263,80264],{"class":72}," 56\n",[33,80266,80267],{"class":35,"line":1785},[33,80268,80230],{"class":47},[33,80270,80271],{"class":35,"line":1940},[33,80272,4767],{"class":47},[33,80274,80275,80277,80279,80282],{"class":35,"line":2183},[33,80276,80197],{"class":60},[33,80278,387],{"class":39},[33,80280,80281],{"class":72}," 3",[33,80283,33696],{"class":47},[33,80285,80286,80288,80290,80293],{"class":35,"line":2208},[33,80287,80208],{"class":60},[33,80289,387],{"class":39},[33,80291,80292],{"class":60}," \"乌克兰和俄罗斯持续冲突\"",[33,80294,33696],{"class":47},[33,80296,80297,80299,80301],{"class":35,"line":2234},[33,80298,80220],{"class":60},[33,80300,387],{"class":39},[33,80302,80303],{"class":72}," 1669\n",[33,80305,80306],{"class":35,"line":2239},[33,80307,80230],{"class":47},[33,80309,80310],{"class":35,"line":2247},[33,80311,80312],{"class":47},"      ]\n",[33,80314,80315],{"class":35,"line":2255},[33,80316,4446],{"class":47},[19,80318,80319],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80321,80322],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80324,80325],{},"\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,80327,80328],{},"function({data}) {",[19,80330,80331],{},"console.log(data)",[19,80333,210],{},[19,80335,80336],{},"render(msg)",[19,80338,80339],{},"实参传递给形参的时候解构了",[19,80341,80342],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80344,80345],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80347,80348],{},"function render({data:mydata}) {",[19,80350,80351],{},"  console.log(data)",[19,80353,210],{},[631,80355,80357],{"id":80356},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80359,80360],{},"有两种情况：一个是数组结构，一个是立即执行函数",[328,80362,80363],{},[331,80364,80365],{},"如果对一个数组进行遍历，有两种方式：",[19,80367,80368],{},"①法1",[19,80370,80371],{},"const arr=[1,2,3]",[19,80373,80374],{},"arr.map(function(item,index) {",[19,80376,80377],{},"  console.log(item)",[19,80379,54683],{},[19,80381,80382],{},[3736,80383],{"alt":28,"src":80384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80386,80387],{},"②法2",[19,80389,80390],{},"const str='pink'",[19,80392,80393],{},"[1,2,3].map(function(item,index) {",[19,80395,80396],{},"console.log(item)",[19,80398,54683],{},[19,80400,80401],{},[3736,80402],{"alt":28,"src":80403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80405,80406],{},"此时会报错",[19,80408,80409],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80411,80396],{},[19,80413,54683],{},[19,80415,80416],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80418,80420],{"id":80419},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80422,80423],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80425,80426],{},"可以理解为加强版的for循环",[19,80428,80429],{},[3736,80430],{"alt":28,"src":80431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80433,80434],{},"里边不写return，不返回数组，只遍历不返回",[19,80436,80437],{},"map是返回数组",[19,80439,80440],{},"forEach主要用于遍历数组对象",[23,80442,80444],{"className":55286,"code":80443,"language":55288,"meta":28,"style":28},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[30,80445,80446,80454,80459,80464,80469,80474,80478,80483],{"__ignoreMap":28},[33,80447,80448,80450,80452],{"class":35,"line":36},[33,80449,54364],{"class":47},[33,80451,54034],{"class":53522},[33,80453,53529],{"class":47},[33,80455,80456],{"class":35,"line":51},[33,80457,80458],{"class":47},"    const arr = ['red', 'green', 'pink']\n",[33,80460,80461],{"class":35,"line":64},[33,80462,80463],{"class":47},"    const result = arr.forEach(function (item, index) {\n",[33,80465,80466],{"class":35,"line":76},[33,80467,80468],{"class":47},"      console.log(item)\n",[33,80470,80471],{"class":35,"line":87},[33,80472,80473],{"class":47},"      console.log(index)\n",[33,80475,80476],{"class":35,"line":96},[33,80477,35686],{"class":47},[33,80479,80480],{"class":35,"line":103},[33,80481,80482],{"class":47},"    console.log(result)\n",[33,80484,80485,80487,80489],{"class":35,"line":108},[33,80486,54636],{"class":47},[33,80488,54034],{"class":53522},[33,80490,53529],{"class":47},[19,80492,80493],{},[3736,80494],{"alt":28,"src":80495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80497,80499],{"id":80498},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80501,80502],{},[3736,80503],{"alt":28,"src":80504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80506,80507],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[23,80509,80511],{"className":55286,"code":80510,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,80512,80513,80521,80529,80534,80539,80543,80547,80552,80556,80561,80569],{"__ignoreMap":28},[33,80514,80515,80517,80519],{"class":35,"line":36},[33,80516,2226],{"class":47},[33,80518,54021],{"class":53522},[33,80520,53529],{"class":47},[33,80522,80523,80525,80527],{"class":35,"line":51},[33,80524,54364],{"class":47},[33,80526,54034],{"class":53522},[33,80528,53529],{"class":47},[33,80530,80531],{"class":35,"line":64},[33,80532,80533],{"class":47},"    const arr = [10, 20, 30]\n",[33,80535,80536],{"class":35,"line":76},[33,80537,80538],{"class":47},"    const newArr = arr.filter(function (item, index) {\n",[33,80540,80541],{"class":35,"line":87},[33,80542,80468],{"class":47},[33,80544,80545],{"class":35,"line":96},[33,80546,80473],{"class":47},[33,80548,80549],{"class":35,"line":103},[33,80550,80551],{"class":47},"      return item >= 20\n",[33,80553,80554],{"class":35,"line":108},[33,80555,35686],{"class":47},[33,80557,80558],{"class":35,"line":119},[33,80559,80560],{"class":47},"    console.log(newArr)\n",[33,80562,80563,80565,80567],{"class":35,"line":128},[33,80564,54636],{"class":47},[33,80566,54034],{"class":53522},[33,80568,53529],{"class":47},[33,80570,80571,80573,80575],{"class":35,"line":1753},[33,80572,54006],{"class":47},[33,80574,54021],{"class":53522},[33,80576,53529],{"class":47},[19,80578,80579],{},"这个也可以写成箭头函数：",[23,80581,80583],{"className":52855,"code":80582,"language":52857,"meta":28,"style":28},"const newArr = arr.filter(item => item >= 20)\n",[30,80584,80585],{"__ignoreMap":28},[33,80586,80587],{"class":35,"line":36},[33,80588,80582],{"class":47},[14,80590,80592],{"id":80591},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80594,80595],{},[3736,80596],{"alt":28,"src":80597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80599,80600],{},"步骤：",[19,80602,80603],{},"①：渲染页面模块",[3413,80605,80606,80609],{},[331,80607,80608],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[331,80610,80611],{},"用forEach+字符串的形式",[19,80613,80614],{},"②：点击不同需求，显示不同页面内容",[3413,80616,80617,80620,80623,80626,80629],{},[331,80618,80619],{},"点击采取事件委托方式 .filter",[331,80621,80622],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[331,80624,80625],{},"筛选条件是根据点击的 data-index 来判断",[331,80627,80628],{},"可以使用对象解构，把事件对象解构",[331,80630,80631],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[23,80633,80635],{"className":52855,"code":80634,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,80636,80637,80647,80661,80665,80673,80687,80707,80719,80727,80733,80743,80753,80763,80767,80771,80777,80790,80802,80812,80824,80828,80832,80839,80852,80864,80881,80899,80912,80916,80920,80932,80942,80946,80950,80957,80998,81025,81035,81039,81043,81051,81063,81067,81071,81079,81091,81103,81114,81118,81122,81131,81143,81154,81158,81162,81171,81183,81195,81199,81203,81210,81220,81232,81244,81259,81263,81267,81275,81291,81301,81311,81321,81333,81337,81341,81351,81362,81372,81376,81384,81392,81396,81404,81419,81445,81470,81495,81514,81522,81536,81541,81546,81551,81556,81561,81569,81577,81582,81593,81598,81608,81618,81628,81638,81642,81646,81655,81664,81673,81682,81686,81690,81699,81708,81717,81726,81730,81734,81743,81752,81761,81770,81774,81778,81787,81796,81805,81814,81818,81822,81831,81840,81849,81858,81862,81866,81875,81884,81893,81902,81906,81910,81919,81928,81936,81945,81949,81953,81957,81962,81974,81979,81991,81995,82012,82039,82048,82053,82063,82073,82082,82087,82092,82096,82101,82118,82122,82127,82135,82140,82167,82172,82192,82197,82209,82214,82219,82224,82235,82249,82285,82303,82336,82353,82377,82381,82386,82392,82396,82400,82404,82412,82420,82424],{"__ignoreMap":28},[33,80638,80639,80641,80643,80645],{"class":35,"line":36},[33,80640,53519],{"class":47},[33,80642,53523],{"class":53522},[33,80644,53526],{"class":43},[33,80646,53529],{"class":47},[33,80648,80649,80651,80653,80655,80657,80659],{"class":35,"line":51},[33,80650,2226],{"class":47},[33,80652,52857],{"class":53522},[33,80654,53538],{"class":43},[33,80656,57],{"class":47},[33,80658,53543],{"class":60},[33,80660,53529],{"class":47},[33,80662,80663],{"class":35,"line":64},[33,80664,100],{"emptyLinePlaceholder":99},[33,80666,80667,80669,80671],{"class":35,"line":76},[33,80668,2226],{"class":47},[33,80670,53556],{"class":53522},[33,80672,53529],{"class":47},[33,80674,80675,80677,80679,80681,80683,80685],{"class":35,"line":87},[33,80676,54364],{"class":47},[33,80678,53566],{"class":53522},[33,80680,53569],{"class":43},[33,80682,57],{"class":47},[33,80684,53574],{"class":60},[33,80686,53529],{"class":47},[33,80688,80689,80691,80693,80695,80697,80699,80701,80703,80705],{"class":35,"line":96},[33,80690,54364],{"class":47},[33,80692,53566],{"class":53522},[33,80694,17158],{"class":43},[33,80696,57],{"class":47},[33,80698,53613],{"class":60},[33,80700,53593],{"class":43},[33,80702,57],{"class":47},[33,80704,53620],{"class":60},[33,80706,53529],{"class":47},[33,80708,80709,80711,80713,80715,80717],{"class":35,"line":103},[33,80710,54364],{"class":47},[33,80712,53629],{"class":53522},[33,80714,53632],{"class":47},[33,80716,53629],{"class":53522},[33,80718,53529],{"class":47},[33,80720,80721,80723,80725],{"class":35,"line":108},[33,80722,54364],{"class":47},[33,80724,2331],{"class":53522},[33,80726,53529],{"class":47},[33,80728,80729,80731],{"class":35,"line":119},[33,80730,8649],{"class":53522},[33,80732,17810],{"class":47},[33,80734,80735,80737,80739,80741],{"class":35,"line":128},[33,80736,56914],{"class":72},[33,80738,996],{"class":47},[33,80740,2617],{"class":72},[33,80742,3567],{"class":47},[33,80744,80745,80747,80749,80751],{"class":35,"line":1753},[33,80746,56925],{"class":72},[33,80748,996],{"class":47},[33,80750,2617],{"class":72},[33,80752,3567],{"class":47},[33,80754,80755,80757,80759,80761],{"class":35,"line":1763},[33,80756,74809],{"class":72},[33,80758,996],{"class":47},[33,80760,62723],{"class":72},[33,80762,3567],{"class":47},[33,80764,80765],{"class":35,"line":1775},[33,80766,4446],{"class":47},[33,80768,80769],{"class":35,"line":1780},[33,80770,100],{"emptyLinePlaceholder":99},[33,80772,80773,80775],{"class":35,"line":1785},[33,80774,64341],{"class":43},[33,80776,17810],{"class":47},[33,80778,80779,80781,80783,80786,80788],{"class":35,"line":1940},[33,80780,56990],{"class":72},[33,80782,996],{"class":47},[33,80784,80785],{"class":72},"990",[33,80787,53713],{"class":39},[33,80789,3567],{"class":47},[33,80791,80792,80794,80796,80798,80800],{"class":35,"line":2183},[33,80793,56925],{"class":72},[33,80795,996],{"class":47},[33,80797,2617],{"class":72},[33,80799,53777],{"class":72},[33,80801,3567],{"class":47},[33,80803,80804,80806,80808,80810],{"class":35,"line":2208},[33,80805,57228],{"class":72},[33,80807,996],{"class":47},[33,80809,53698],{"class":72},[33,80811,3567],{"class":47},[33,80813,80814,80817,80819,80822],{"class":35,"line":2234},[33,80815,80816],{"class":72},"      flex-wrap",[33,80818,996],{"class":47},[33,80820,80821],{"class":72},"wrap",[33,80823,3567],{"class":47},[33,80825,80826],{"class":35,"line":2239},[33,80827,4446],{"class":47},[33,80829,80830],{"class":35,"line":2247},[33,80831,100],{"emptyLinePlaceholder":99},[33,80833,80834,80837],{"class":35,"line":2255},[33,80835,80836],{"class":43},"    .item",[33,80838,17810],{"class":47},[33,80840,80841,80843,80845,80848,80850],{"class":35,"line":3992},[33,80842,56990],{"class":72},[33,80844,996],{"class":47},[33,80846,80847],{"class":72},"240",[33,80849,53713],{"class":39},[33,80851,3567],{"class":47},[33,80853,80854,80856,80858,80860,80862],{"class":35,"line":4009},[33,80855,64218],{"class":72},[33,80857,996],{"class":47},[33,80859,1279],{"class":72},[33,80861,53713],{"class":39},[33,80863,3567],{"class":47},[33,80865,80866,80868,80870,80872,80874,80877,80879],{"class":35,"line":4014},[33,80867,56914],{"class":72},[33,80869,996],{"class":47},[33,80871,1284],{"class":72},[33,80873,53713],{"class":39},[33,80875,80876],{"class":72}," 30",[33,80878,53713],{"class":39},[33,80880,3567],{"class":47},[33,80882,80883,80885,80887,80889,80892,80895,80897],{"class":35,"line":4019},[33,80884,64078],{"class":72},[33,80886,996],{"class":47},[33,80888,30358],{"class":72},[33,80890,80891],{"class":72}," ease",[33,80893,80894],{"class":72}," .5",[33,80896,3109],{"class":39},[33,80898,3567],{"class":47},[33,80900,80901,80904,80906,80908,80910],{"class":35,"line":4024},[33,80902,80903],{"class":72},"      margin-bottom",[33,80905,996],{"class":47},[33,80907,1284],{"class":72},[33,80909,53713],{"class":39},[33,80911,3567],{"class":47},[33,80913,80914],{"class":35,"line":4038},[33,80915,4446],{"class":47},[33,80917,80918],{"class":35,"line":4043},[33,80919,100],{"emptyLinePlaceholder":99},[33,80921,80922,80925,80927,80930],{"class":35,"line":4834},[33,80923,80924],{"class":43},"    .item:nth-child",[33,80926,133],{"class":47},[33,80928,80929],{"class":72},"4n",[33,80931,14682],{"class":47},[33,80933,80934,80936,80938,80940],{"class":35,"line":4848},[33,80935,64218],{"class":72},[33,80937,996],{"class":47},[33,80939,2617],{"class":72},[33,80941,3567],{"class":47},[33,80943,80944],{"class":35,"line":4856},[33,80945,4446],{"class":47},[33,80947,80948],{"class":35,"line":4861},[33,80949,100],{"emptyLinePlaceholder":99},[33,80951,80952,80955],{"class":35,"line":4867},[33,80953,80954],{"class":43},"    .item:hover",[33,80956,17810],{"class":47},[33,80958,80959,80962,80964,80966,80968,80970,80972,80974,80976,80979,80981,80983,80985,80987,80989,80991,80993,80996],{"class":35,"line":4873},[33,80960,80961],{"class":72},"      box-shadow",[33,80963,996],{"class":47},[33,80965,2617],{"class":72},[33,80967,53713],{"class":39},[33,80969,1437],{"class":72},[33,80971,53713],{"class":39},[33,80973,4407],{"class":72},[33,80975,53713],{"class":39},[33,80977,80978],{"class":72}," rgba",[33,80980,133],{"class":47},[33,80982,2617],{"class":72},[33,80984,245],{"class":47},[33,80986,2617],{"class":72},[33,80988,245],{"class":47},[33,80990,2617],{"class":72},[33,80992,245],{"class":47},[33,80994,80995],{"class":72},".2",[33,80997,4976],{"class":47},[33,80999,81000,81003,81005,81008,81010,81012,81014,81017,81019,81021,81023],{"class":35,"line":4878},[33,81001,81002],{"class":72},"      transform",[33,81004,996],{"class":47},[33,81006,81007],{"class":72},"translate3d",[33,81009,133],{"class":47},[33,81011,2617],{"class":72},[33,81013,245],{"class":47},[33,81015,81016],{"class":72},"-4",[33,81018,53713],{"class":39},[33,81020,245],{"class":47},[33,81022,2617],{"class":72},[33,81024,4976],{"class":47},[33,81026,81027,81029,81031,81033],{"class":35,"line":10194},[33,81028,64243],{"class":72},[33,81030,996],{"class":47},[33,81032,64248],{"class":72},[33,81034,3567],{"class":47},[33,81036,81037],{"class":35,"line":10218},[33,81038,4446],{"class":47},[33,81040,81041],{"class":35,"line":10223},[33,81042,100],{"emptyLinePlaceholder":99},[33,81044,81045,81047,81049],{"class":35,"line":10229},[33,81046,80836],{"class":43},[33,81048,57833],{"class":53522},[33,81050,17810],{"class":47},[33,81052,81053,81055,81057,81059,81061],{"class":35,"line":10256},[33,81054,56990],{"class":72},[33,81056,996],{"class":47},[33,81058,2734],{"class":72},[33,81060,1429],{"class":39},[33,81062,3567],{"class":47},[33,81064,81065],{"class":35,"line":10261},[33,81066,4446],{"class":47},[33,81068,81069],{"class":35,"line":10267},[33,81070,100],{"emptyLinePlaceholder":99},[33,81072,81073,81075,81077],{"class":35,"line":10279},[33,81074,80836],{"class":43},[33,81076,64522],{"class":43},[33,81078,17810],{"class":47},[33,81080,81081,81083,81085,81087,81089],{"class":35,"line":10291},[33,81082,57141],{"class":72},[33,81084,996],{"class":47},[33,81086,248],{"class":72},[33,81088,53713],{"class":39},[33,81090,3567],{"class":47},[33,81092,81093,81095,81097,81099,81101],{"class":35,"line":10303},[33,81094,80903],{"class":72},[33,81096,996],{"class":47},[33,81098,1279],{"class":72},[33,81100,53713],{"class":39},[33,81102,3567],{"class":47},[33,81104,81105,81107,81109,81112],{"class":35,"line":11961},[33,81106,59634],{"class":72},[33,81108,996],{"class":47},[33,81110,81111],{"class":72},"#666",[33,81113,3567],{"class":47},[33,81115,81116],{"class":35,"line":11986},[33,81117,4446],{"class":47},[33,81119,81120],{"class":35,"line":12009},[33,81121,100],{"emptyLinePlaceholder":99},[33,81123,81124,81126,81129],{"class":35,"line":12033},[33,81125,80836],{"class":43},[33,81127,81128],{"class":43}," .price",[33,81130,17810],{"class":47},[33,81132,81133,81135,81137,81139,81141],{"class":35,"line":12038},[33,81134,57141],{"class":72},[33,81136,996],{"class":47},[33,81138,3163],{"class":72},[33,81140,53713],{"class":39},[33,81142,3567],{"class":47},[33,81144,81145,81147,81149,81152],{"class":35,"line":12043},[33,81146,59634],{"class":72},[33,81148,996],{"class":47},[33,81150,81151],{"class":72},"firebrick",[33,81153,3567],{"class":47},[33,81155,81156],{"class":35,"line":12048},[33,81157,4446],{"class":47},[33,81159,81160],{"class":35,"line":12057},[33,81161,100],{"emptyLinePlaceholder":99},[33,81163,81164,81166,81169],{"class":35,"line":12062},[33,81165,80836],{"class":43},[33,81167,81168],{"class":43}," .price::before",[33,81170,17810],{"class":47},[33,81172,81173,81176,81178,81181],{"class":35,"line":12068},[33,81174,81175],{"class":72},"      content",[33,81177,996],{"class":47},[33,81179,81180],{"class":60},"'￥'",[33,81182,3567],{"class":47},[33,81184,81185,81187,81189,81191,81193],{"class":35,"line":12089},[33,81186,57141],{"class":72},[33,81188,996],{"class":47},[33,81190,2966],{"class":72},[33,81192,53713],{"class":39},[33,81194,3567],{"class":47},[33,81196,81197],{"class":35,"line":12095},[33,81198,4446],{"class":47},[33,81200,81201],{"class":35,"line":12109},[33,81202,100],{"emptyLinePlaceholder":99},[33,81204,81205,81208],{"class":35,"line":12115},[33,81206,81207],{"class":43},"    .filter",[33,81209,17810],{"class":47},[33,81211,81212,81214,81216,81218],{"class":35,"line":12142},[33,81213,57228],{"class":72},[33,81215,996],{"class":47},[33,81217,53698],{"class":72},[33,81219,3567],{"class":47},[33,81221,81222,81224,81226,81228,81230],{"class":35,"line":12151},[33,81223,56990],{"class":72},[33,81225,996],{"class":47},[33,81227,80785],{"class":72},[33,81229,53713],{"class":39},[33,81231,3567],{"class":47},[33,81233,81234,81236,81238,81240,81242],{"class":35,"line":12157},[33,81235,56925],{"class":72},[33,81237,996],{"class":47},[33,81239,2617],{"class":72},[33,81241,53777],{"class":72},[33,81243,3567],{"class":47},[33,81245,81246,81248,81250,81252,81254,81256],{"class":35,"line":12165},[33,81247,56914],{"class":72},[33,81249,996],{"class":47},[33,81251,3071],{"class":72},[33,81253,53713],{"class":39},[33,81255,80876],{"class":72},[33,81257,81258],{"class":39},"px\n",[33,81260,81261],{"class":35,"line":12170},[33,81262,4446],{"class":47},[33,81264,81265],{"class":35,"line":18842},[33,81266,100],{"emptyLinePlaceholder":99},[33,81268,81269,81271,81273],{"class":35,"line":18848},[33,81270,81207],{"class":43},[33,81272,3672],{"class":53522},[33,81274,17810],{"class":47},[33,81276,81277,81279,81281,81283,81285,81287,81289],{"class":35,"line":18871},[33,81278,56914],{"class":72},[33,81280,996],{"class":47},[33,81282,1279],{"class":72},[33,81284,53713],{"class":39},[33,81286,11196],{"class":72},[33,81288,53713],{"class":39},[33,81290,3567],{"class":47},[33,81292,81293,81295,81297,81299],{"class":35,"line":18877},[33,81294,63939],{"class":72},[33,81296,996],{"class":47},[33,81298,64036],{"class":72},[33,81300,3567],{"class":47},[33,81302,81303,81305,81307,81309],{"class":35,"line":18900},[33,81304,59634],{"class":72},[33,81306,996],{"class":47},[33,81308,81111],{"class":72},[33,81310,3567],{"class":47},[33,81312,81313,81315,81317,81319],{"class":35,"line":18914},[33,81314,66187],{"class":72},[33,81316,996],{"class":47},[33,81318,56956],{"class":72},[33,81320,3567],{"class":47},[33,81322,81323,81325,81327,81329,81331],{"class":35,"line":18934},[33,81324,63968],{"class":72},[33,81326,996],{"class":47},[33,81328,1284],{"class":72},[33,81330,53713],{"class":39},[33,81332,3567],{"class":47},[33,81334,81335],{"class":35,"line":18940},[33,81336,4446],{"class":47},[33,81338,81339],{"class":35,"line":18951},[33,81340,100],{"emptyLinePlaceholder":99},[33,81342,81343,81345,81347,81349],{"class":35,"line":18974},[33,81344,81207],{"class":43},[33,81346,3672],{"class":53522},[33,81348,64118],{"class":43},[33,81350,17810],{"class":47},[33,81352,81353,81355,81357,81360],{"class":35,"line":18996},[33,81354,57103],{"class":72},[33,81356,996],{"class":47},[33,81358,81359],{"class":72},"#05943c",[33,81361,3567],{"class":47},[33,81363,81364,81366,81368,81370],{"class":35,"line":19001},[33,81365,59634],{"class":72},[33,81367,996],{"class":47},[33,81369,63060],{"class":72},[33,81371,3567],{"class":47},[33,81373,81374],{"class":35,"line":19007},[33,81375,4446],{"class":47},[33,81377,81378,81380,81382],{"class":35,"line":19021},[33,81379,54636],{"class":47},[33,81381,2331],{"class":53522},[33,81383,53529],{"class":47},[33,81385,81386,81388,81390],{"class":35,"line":19034},[33,81387,54006],{"class":47},[33,81389,53556],{"class":53522},[33,81391,53529],{"class":47},[33,81393,81394],{"class":35,"line":19039},[33,81395,100],{"emptyLinePlaceholder":99},[33,81397,81398,81400,81402],{"class":35,"line":19053},[33,81399,2226],{"class":47},[33,81401,54021],{"class":53522},[33,81403,53529],{"class":47},[33,81405,81406,81408,81410,81412,81414,81417],{"class":35,"line":19058},[33,81407,54364],{"class":47},[33,81409,53832],{"class":53522},[33,81411,55705],{"class":43},[33,81413,57],{"class":47},[33,81415,81416],{"class":60},"\"filter\"",[33,81418,53529],{"class":47},[33,81420,81421,81423,81425,81427,81429,81431,81434,81436,81438,81441,81443],{"class":35,"line":19064},[33,81422,53563],{"class":47},[33,81424,2663],{"class":53522},[33,81426,63275],{"class":43},[33,81428,57],{"class":47},[33,81430,63280],{"class":60},[33,81432,81433],{"class":43}," data-index",[33,81435,57],{"class":47},[33,81437,5933],{"class":60},[33,81439,81440],{"class":47},">0-100元\u003C\u002F",[33,81442,2663],{"class":53522},[33,81444,53529],{"class":47},[33,81446,81447,81449,81451,81453,81455,81457,81459,81461,81463,81466,81468],{"class":35,"line":19069},[33,81448,53563],{"class":47},[33,81450,2663],{"class":53522},[33,81452,63275],{"class":43},[33,81454,57],{"class":47},[33,81456,63280],{"class":60},[33,81458,81433],{"class":43},[33,81460,57],{"class":47},[33,81462,5956],{"class":60},[33,81464,81465],{"class":47},">100-300元\u003C\u002F",[33,81467,2663],{"class":53522},[33,81469,53529],{"class":47},[33,81471,81472,81474,81476,81478,81480,81482,81484,81486,81488,81491,81493],{"class":35,"line":19083},[33,81473,53563],{"class":47},[33,81475,2663],{"class":53522},[33,81477,63275],{"class":43},[33,81479,57],{"class":47},[33,81481,63280],{"class":60},[33,81483,81433],{"class":43},[33,81485,57],{"class":47},[33,81487,5969],{"class":60},[33,81489,81490],{"class":47},">300元以上\u003C\u002F",[33,81492,2663],{"class":53522},[33,81494,53529],{"class":47},[33,81496,81497,81499,81501,81503,81505,81507,81510,81512],{"class":35,"line":19088},[33,81498,53563],{"class":47},[33,81500,2663],{"class":53522},[33,81502,63275],{"class":43},[33,81504,57],{"class":47},[33,81506,63280],{"class":60},[33,81508,81509],{"class":47},">全部区间\u003C\u002F",[33,81511,2663],{"class":53522},[33,81513,53529],{"class":47},[33,81515,81516,81518,81520],{"class":35,"line":19093},[33,81517,54636],{"class":47},[33,81519,53832],{"class":53522},[33,81521,53529],{"class":47},[33,81523,81524,81526,81528,81530,81532,81534],{"class":35,"line":19107},[33,81525,54364],{"class":47},[33,81527,53832],{"class":53522},[33,81529,55705],{"class":43},[33,81531,57],{"class":47},[33,81533,64826],{"class":60},[33,81535,53529],{"class":47},[33,81537,81538],{"class":35,"line":19119},[33,81539,81540],{"class":2487},"    \u003C!-- \u003Cdiv class=\"item\">\n",[33,81542,81543],{"class":35,"line":19124},[33,81544,81545],{"class":2487},"      \u003Cimg src=\"\" alt=\"\">\n",[33,81547,81548],{"class":35,"line":19137},[33,81549,81550],{"class":2487},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[33,81552,81553],{"class":35,"line":19142},[33,81554,81555],{"class":2487},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[33,81557,81558],{"class":35,"line":19147},[33,81559,81560],{"class":2487},"    \u003C\u002Fdiv> -->\n",[33,81562,81563,81565,81567],{"class":35,"line":19152},[33,81564,54636],{"class":47},[33,81566,53832],{"class":53522},[33,81568,53529],{"class":47},[33,81570,81571,81573,81575],{"class":35,"line":19165},[33,81572,54364],{"class":47},[33,81574,54034],{"class":53522},[33,81576,53529],{"class":47},[33,81578,81579],{"class":35,"line":19170},[33,81580,81581],{"class":2487},"    \u002F\u002F 2. 初始化数据\n",[33,81583,81584,81586,81589,81591],{"class":35,"line":34859},[33,81585,13462],{"class":39},[33,81587,81588],{"class":72}," goodsList",[33,81590,15804],{"class":39},[33,81592,1087],{"class":47},[33,81594,81595],{"class":35,"line":34865},[33,81596,81597],{"class":47},"      {\n",[33,81599,81600,81603,81606],{"class":35,"line":34871},[33,81601,81602],{"class":47},"        id: ",[33,81604,81605],{"class":60},"'4001172'",[33,81607,33696],{"class":47},[33,81609,81610,81613,81616],{"class":35,"line":34877},[33,81611,81612],{"class":47},"        name: ",[33,81614,81615],{"class":60},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[33,81617,33696],{"class":47},[33,81619,81620,81623,81626],{"class":35,"line":34883},[33,81621,81622],{"class":47},"        price: ",[33,81624,81625],{"class":60},"'289.00'",[33,81627,33696],{"class":47},[33,81629,81630,81633,81636],{"class":35,"line":34894},[33,81631,81632],{"class":47},"        picture: ",[33,81634,81635],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[33,81637,33696],{"class":47},[33,81639,81640],{"class":35,"line":34900},[33,81641,80103],{"class":47},[33,81643,81644],{"class":35,"line":34920},[33,81645,81597],{"class":47},[33,81647,81648,81650,81653],{"class":35,"line":34926},[33,81649,81602],{"class":47},[33,81651,81652],{"class":60},"'4001594'",[33,81654,33696],{"class":47},[33,81656,81657,81659,81662],{"class":35,"line":34937},[33,81658,81612],{"class":47},[33,81660,81661],{"class":60},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[33,81663,33696],{"class":47},[33,81665,81666,81668,81671],{"class":35,"line":34943},[33,81667,81622],{"class":47},[33,81669,81670],{"class":60},"'288.00'",[33,81672,33696],{"class":47},[33,81674,81675,81677,81680],{"class":35,"line":34949},[33,81676,81632],{"class":47},[33,81678,81679],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[33,81681,33696],{"class":47},[33,81683,81684],{"class":35,"line":34955},[33,81685,80103],{"class":47},[33,81687,81688],{"class":35,"line":34961},[33,81689,81597],{"class":47},[33,81691,81692,81694,81697],{"class":35,"line":34967},[33,81693,81602],{"class":47},[33,81695,81696],{"class":60},"'4001009'",[33,81698,33696],{"class":47},[33,81700,81701,81703,81706],{"class":35,"line":34973},[33,81702,81612],{"class":47},[33,81704,81705],{"class":60},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[33,81707,33696],{"class":47},[33,81709,81710,81712,81715],{"class":35,"line":34979},[33,81711,81622],{"class":47},[33,81713,81714],{"class":60},"'109.00'",[33,81716,33696],{"class":47},[33,81718,81719,81721,81724],{"class":35,"line":34999},[33,81720,81632],{"class":47},[33,81722,81723],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[33,81725,33696],{"class":47},[33,81727,81728],{"class":35,"line":35005},[33,81729,80103],{"class":47},[33,81731,81732],{"class":35,"line":35021},[33,81733,81597],{"class":47},[33,81735,81736,81738,81741],{"class":35,"line":35027},[33,81737,81602],{"class":47},[33,81739,81740],{"class":60},"'4001874'",[33,81742,33696],{"class":47},[33,81744,81745,81747,81750],{"class":35,"line":35041},[33,81746,81612],{"class":47},[33,81748,81749],{"class":60},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[33,81751,33696],{"class":47},[33,81753,81754,81756,81759],{"class":35,"line":35047},[33,81755,81622],{"class":47},[33,81757,81758],{"class":60},"'488.00'",[33,81760,33696],{"class":47},[33,81762,81763,81765,81768],{"class":35,"line":35062},[33,81764,81632],{"class":47},[33,81766,81767],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[33,81769,33696],{"class":47},[33,81771,81772],{"class":35,"line":35068},[33,81773,80103],{"class":47},[33,81775,81776],{"class":35,"line":35077},[33,81777,81597],{"class":47},[33,81779,81780,81782,81785],{"class":35,"line":35083},[33,81781,81602],{"class":47},[33,81783,81784],{"class":60},"'4001649'",[33,81786,33696],{"class":47},[33,81788,81789,81791,81794],{"class":35,"line":35092},[33,81790,81612],{"class":47},[33,81792,81793],{"class":60},"'大师监制龙泉青瓷茶叶罐'",[33,81795,33696],{"class":47},[33,81797,81798,81800,81803],{"class":35,"line":35098},[33,81799,81622],{"class":47},[33,81801,81802],{"class":60},"'139.00'",[33,81804,33696],{"class":47},[33,81806,81807,81809,81812],{"class":35,"line":35104},[33,81808,81632],{"class":47},[33,81810,81811],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[33,81813,33696],{"class":47},[33,81815,81816],{"class":35,"line":35113},[33,81817,80103],{"class":47},[33,81819,81820],{"class":35,"line":35119},[33,81821,81597],{"class":47},[33,81823,81824,81826,81829],{"class":35,"line":35130},[33,81825,81602],{"class":47},[33,81827,81828],{"class":60},"'3997185'",[33,81830,33696],{"class":47},[33,81832,81833,81835,81838],{"class":35,"line":35136},[33,81834,81612],{"class":47},[33,81836,81837],{"class":60},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[33,81839,33696],{"class":47},[33,81841,81842,81844,81847],{"class":35,"line":35155},[33,81843,81622],{"class":47},[33,81845,81846],{"class":60},"'108.00'",[33,81848,33696],{"class":47},[33,81850,81851,81853,81856],{"class":35,"line":35161},[33,81852,81632],{"class":47},[33,81854,81855],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[33,81857,33696],{"class":47},[33,81859,81860],{"class":35,"line":35172},[33,81861,80103],{"class":47},[33,81863,81864],{"class":35,"line":35178},[33,81865,81597],{"class":47},[33,81867,81868,81870,81873],{"class":35,"line":35198},[33,81869,81602],{"class":47},[33,81871,81872],{"class":60},"'3997403'",[33,81874,33696],{"class":47},[33,81876,81877,81879,81882],{"class":35,"line":35214},[33,81878,81612],{"class":47},[33,81880,81881],{"class":60},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[33,81883,33696],{"class":47},[33,81885,81886,81888,81891],{"class":35,"line":35220},[33,81887,81622],{"class":47},[33,81889,81890],{"class":60},"'100.00'",[33,81892,33696],{"class":47},[33,81894,81895,81897,81900],{"class":35,"line":35234},[33,81896,81632],{"class":47},[33,81898,81899],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[33,81901,33696],{"class":47},[33,81903,81904],{"class":35,"line":35240},[33,81905,80103],{"class":47},[33,81907,81908],{"class":35,"line":35246},[33,81909,81597],{"class":47},[33,81911,81912,81914,81917],{"class":35,"line":35257},[33,81913,81602],{"class":47},[33,81915,81916],{"class":60},"'3998274'",[33,81918,33696],{"class":47},[33,81920,81921,81923,81926],{"class":35,"line":35263},[33,81922,81612],{"class":47},[33,81924,81925],{"class":60},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[33,81927,33696],{"class":47},[33,81929,81930,81932,81934],{"class":35,"line":35269},[33,81931,81622],{"class":47},[33,81933,81802],{"class":60},[33,81935,33696],{"class":47},[33,81937,81938,81940,81943],{"class":35,"line":35279},[33,81939,81632],{"class":47},[33,81941,81942],{"class":60},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[33,81944,33696],{"class":47},[33,81946,81947],{"class":35,"line":35285},[33,81948,80103],{"class":47},[33,81950,81951],{"class":35,"line":35296},[33,81952,55328],{"class":47},[33,81954,81955],{"class":35,"line":35302},[33,81956,100],{"emptyLinePlaceholder":99},[33,81958,81959],{"class":35,"line":35312},[33,81960,81961],{"class":2487},"    \u002F\u002F 1.渲染函数\n",[33,81963,81964,81966,81968,81970,81972],{"class":35,"line":35317},[33,81965,72299],{"class":39},[33,81967,72302],{"class":43},[33,81969,133],{"class":47},[33,81971,6134],{"class":289},[33,81973,14682],{"class":47},[33,81975,81976],{"class":35,"line":35323},[33,81977,81978],{"class":2487},"      \u002F\u002F 声明空字符串\n",[33,81980,81981,81984,81987,81989],{"class":35,"line":35372},[33,81982,81983],{"class":39},"      let",[33,81985,81986],{"class":47}," str ",[33,81988,57],{"class":39},[33,81990,72319],{"class":60},[33,81992,81993],{"class":35,"line":35419},[33,81994,72324],{"class":2487},[33,81996,81997,81999,82002,82004,82007,82010],{"class":35,"line":35424},[33,81998,60225],{"class":47},[33,82000,82001],{"class":43},"forEach",[33,82003,133],{"class":47},[33,82005,82006],{"class":289},"item",[33,82008,82009],{"class":39}," =>",[33,82011,17810],{"class":47},[33,82013,82014,82016,82019,82021,82023,82026,82028,82031,82034,82036],{"class":35,"line":35430},[33,82015,63488],{"class":39},[33,82017,82018],{"class":47}," { ",[33,82020,207],{"class":72},[33,82022,245],{"class":47},[33,82024,82025],{"class":72},"price",[33,82027,245],{"class":47},[33,82029,82030],{"class":72},"picture",[33,82032,82033],{"class":47}," } ",[33,82035,57],{"class":39},[33,82037,82038],{"class":47}," item\n",[33,82040,82041,82044,82046],{"class":35,"line":35449},[33,82042,82043],{"class":47},"        str ",[33,82045,692],{"class":39},[33,82047,72383],{"class":60},[33,82049,82050],{"class":35,"line":35455},[33,82051,82052],{"class":60},"          \u003Cdiv class=\"item\">\n",[33,82054,82055,82058,82060],{"class":35,"line":35474},[33,82056,82057],{"class":60},"            \u003Cimg src=\"${",[33,82059,82030],{"class":47},[33,82061,82062],{"class":60},"}\" alt=\"\">\n",[33,82064,82065,82068,82070],{"class":35,"line":35480},[33,82066,82067],{"class":60},"            \u003Cp class=\"name\">${",[33,82069,207],{"class":47},[33,82071,82072],{"class":60},"}\u003C\u002Fp>\n",[33,82074,82075,82078,82080],{"class":35,"line":35486},[33,82076,82077],{"class":60},"            \u003Cp class=\"price\">${",[33,82079,82025],{"class":47},[33,82081,82072],{"class":60},[33,82083,82084],{"class":35,"line":35496},[33,82085,82086],{"class":60},"          \u003C\u002Fdiv>\n",[33,82088,82089],{"class":35,"line":35501},[33,82090,82091],{"class":60},"        `\n",[33,82093,82094],{"class":35,"line":35507},[33,82095,67032],{"class":47},[33,82097,82098],{"class":35,"line":35523},[33,82099,82100],{"class":2487},"      \u002F\u002F 追加给List\n",[33,82102,82103,82105,82107,82109,82112,82114,82116],{"class":35,"line":35568},[33,82104,57989],{"class":47},[33,82106,56618],{"class":43},[33,82108,133],{"class":47},[33,82110,82111],{"class":60},"'.list'",[33,82113,76461],{"class":47},[33,82115,57],{"class":39},[33,82117,76198],{"class":47},[33,82119,82120],{"class":35,"line":35574},[33,82121,4446],{"class":47},[33,82123,82124],{"class":35,"line":35580},[33,82125,82126],{"class":2487},"    \u002F\u002F 页面一打开就需要渲染\n",[33,82128,82129,82132],{"class":35,"line":35586},[33,82130,82131],{"class":43},"    render",[33,82133,82134],{"class":47},"(goodsList)\n",[33,82136,82137],{"class":35,"line":35597},[33,82138,82139],{"class":2487},"    \u002F\u002F 2.过滤筛选\n",[33,82141,82142,82144,82146,82148,82151,82153,82155,82157,82159,82161,82163,82165],{"class":35,"line":35603},[33,82143,54626],{"class":47},[33,82145,56618],{"class":43},[33,82147,133],{"class":47},[33,82149,82150],{"class":60},"'.filter'",[33,82152,33057],{"class":47},[33,82154,60031],{"class":43},[33,82156,133],{"class":47},[33,82158,60036],{"class":60},[33,82160,245],{"class":47},[33,82162,2502],{"class":289},[33,82164,82009],{"class":39},[33,82166,17810],{"class":47},[33,82168,82169],{"class":35,"line":35609},[33,82170,82171],{"class":2487},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[33,82173,82174,82176,82178,82181,82183,82185,82187,82189],{"class":35,"line":35615},[33,82175,60446],{"class":39},[33,82177,82018],{"class":47},[33,82179,82180],{"class":72},"tagName",[33,82182,245],{"class":47},[33,82184,33766],{"class":72},[33,82186,82033],{"class":47},[33,82188,57],{"class":39},[33,82190,82191],{"class":47}," e.target\n",[33,82193,82194],{"class":35,"line":35633},[33,82195,82196],{"class":2487},"      \u002F\u002F 判断\n",[33,82198,82199,82201,82203,82205,82207],{"class":35,"line":35647},[33,82200,56699],{"class":39},[33,82202,69251],{"class":47},[33,82204,56705],{"class":39},[33,82206,70473],{"class":60},[33,82208,14682],{"class":47},[33,82210,82211],{"class":35,"line":35656},[33,82212,82213],{"class":2487},"        \u002F\u002F console.log(11)\n",[33,82215,82216],{"class":35,"line":35665},[33,82217,82218],{"class":2487},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[33,82220,82221],{"class":35,"line":35674},[33,82222,82223],{"class":2487},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[33,82225,82226,82228,82230,82232],{"class":35,"line":35683},[33,82227,54051],{"class":39},[33,82229,54054],{"class":47},[33,82231,57],{"class":39},[33,82233,82234],{"class":47}," goodsList\n",[33,82236,82237,82239,82242,82244,82247],{"class":35,"line":35689},[33,82238,2130],{"class":39},[33,82240,82241],{"class":47}," (dataset.index ",[33,82243,56705],{"class":39},[33,82245,82246],{"class":60}," '1'",[33,82248,14682],{"class":47},[33,82250,82251,82254,82256,82259,82261,82263,82265,82267,82270,82272,82274,82277,82279,82281,82283],{"class":35,"line":35695},[33,82252,82253],{"class":47},"          arr ",[33,82255,57],{"class":39},[33,82257,82258],{"class":47}," goodsList.",[33,82260,1377],{"class":43},[33,82262,133],{"class":47},[33,82264,82006],{"class":289},[33,82266,82009],{"class":39},[33,82268,82269],{"class":47}," item.price ",[33,82271,2175],{"class":39},[33,82273,1437],{"class":72},[33,82275,82276],{"class":39}," &&",[33,82278,82269],{"class":47},[33,82280,3861],{"class":39},[33,82282,8001],{"class":72},[33,82284,226],{"class":47},[33,82286,82287,82290,82292,82294,82296,82298,82301],{"class":35,"line":35703},[33,82288,82289],{"class":47},"        } ",[33,82291,3963],{"class":39},[33,82293,3966],{"class":39},[33,82295,82241],{"class":47},[33,82297,56705],{"class":39},[33,82299,82300],{"class":60}," '2'",[33,82302,14682],{"class":47},[33,82304,82305,82307,82309,82311,82313,82315,82317,82319,82321,82323,82325,82327,82329,82331,82334],{"class":35,"line":35708},[33,82306,82253],{"class":47},[33,82308,57],{"class":39},[33,82310,82258],{"class":47},[33,82312,1377],{"class":43},[33,82314,133],{"class":47},[33,82316,82006],{"class":289},[33,82318,82009],{"class":39},[33,82320,82269],{"class":47},[33,82322,2175],{"class":39},[33,82324,8001],{"class":72},[33,82326,82276],{"class":39},[33,82328,82269],{"class":47},[33,82330,3861],{"class":39},[33,82332,82333],{"class":72}," 300",[33,82335,226],{"class":47},[33,82337,82338,82340,82342,82344,82346,82348,82351],{"class":35,"line":35714},[33,82339,82289],{"class":47},[33,82341,3963],{"class":39},[33,82343,3966],{"class":39},[33,82345,82241],{"class":47},[33,82347,56705],{"class":39},[33,82349,82350],{"class":60}," '3'",[33,82352,14682],{"class":47},[33,82354,82355,82357,82359,82361,82363,82365,82367,82369,82371,82373,82375],{"class":35,"line":35725},[33,82356,82253],{"class":47},[33,82358,57],{"class":39},[33,82360,82258],{"class":47},[33,82362,1377],{"class":43},[33,82364,133],{"class":47},[33,82366,82006],{"class":289},[33,82368,82009],{"class":39},[33,82370,82269],{"class":47},[33,82372,2175],{"class":39},[33,82374,82333],{"class":72},[33,82376,226],{"class":47},[33,82378,82379],{"class":35,"line":35731},[33,82380,4786],{"class":47},[33,82382,82383],{"class":35,"line":35751},[33,82384,82385],{"class":2487},"        \u002F\u002F 渲染函数\n",[33,82387,82388,82390],{"class":35,"line":35757},[33,82389,72621],{"class":43},[33,82391,54631],{"class":47},[33,82393,82394],{"class":35,"line":35763},[33,82395,54617],{"class":47},[33,82397,82398],{"class":35,"line":35769},[33,82399,100],{"emptyLinePlaceholder":99},[33,82401,82402],{"class":35,"line":35786},[33,82403,35686],{"class":47},[33,82405,82406,82408,82410],{"class":35,"line":35792},[33,82407,54636],{"class":47},[33,82409,54034],{"class":53522},[33,82411,53529],{"class":47},[33,82413,82414,82416,82418],{"class":35,"line":35798},[33,82415,54006],{"class":47},[33,82417,54021],{"class":53522},[33,82419,53529],{"class":47},[33,82421,82422],{"class":35,"line":35804},[33,82423,100],{"emptyLinePlaceholder":99},[33,82425,82426,82428,82430],{"class":35,"line":35810},[33,82427,54006],{"class":47},[33,82429,52857],{"class":53522},[33,82431,53529],{"class":47},[14,82433,82435],{"id":82434},"_410-深入了解对象","4.10 深入了解对象",[631,82437,82439],{"id":82438},"_4101-创建对象","4.10.1 创建对象",[19,82441,82442],{},[3736,82443],{"alt":28,"src":82444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82446,82447],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[631,82449,82451],{"id":82450},"_4102-构造函数","4.10.2 构造函数",[19,82453,82454,82457],{},[2575,82455,82456],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82459,82460,82463],{},[2575,82461,82462],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[23,82465,82467],{"className":52855,"code":82466,"language":52857,"meta":28,"style":28},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[30,82468,82469,82477,82482,82503,82516,82528,82540,82544,82549,82576,82581,82608],{"__ignoreMap":28},[33,82470,82471,82473,82475],{"class":35,"line":36},[33,82472,2226],{"class":47},[33,82474,54034],{"class":53522},[33,82476,53529],{"class":47},[33,82478,82479],{"class":35,"line":51},[33,82480,82481],{"class":2487},"\u002F\u002F例：\n",[33,82483,82484,82486,82489,82491,82493,82495,82497,82499,82501],{"class":35,"line":64},[33,82485,56668],{"class":39},[33,82487,82488],{"class":43}," Pig",[33,82490,133],{"class":47},[33,82492,207],{"class":289},[33,82494,2799],{"class":47},[33,82496,218],{"class":289},[33,82498,2799],{"class":47},[33,82500,72452],{"class":289},[33,82502,14682],{"class":47},[33,82504,82505,82508,82511,82513],{"class":35,"line":76},[33,82506,82507],{"class":72},"    this",[33,82509,82510],{"class":47},".name",[33,82512,57],{"class":39},[33,82514,82515],{"class":47},"name\n",[33,82517,82518,82520,82523,82525],{"class":35,"line":87},[33,82519,82507],{"class":72},[33,82521,82522],{"class":47},".age",[33,82524,57],{"class":39},[33,82526,82527],{"class":47},"age\n",[33,82529,82530,82532,82535,82537],{"class":35,"line":96},[33,82531,82507],{"class":72},[33,82533,82534],{"class":47},".gender",[33,82536,57],{"class":39},[33,82538,82539],{"class":47},"gender    \n",[33,82541,82542],{"class":35,"line":103},[33,82543,1010],{"class":47},[33,82545,82546],{"class":35,"line":108},[33,82547,82548],{"class":2487},"\u002F\u002F创建佩奇对象\n",[33,82550,82551,82553,82556,82558,82560,82562,82565,82567,82569,82571,82574],{"class":35,"line":119},[33,82552,9038],{"class":39},[33,82554,82555],{"class":72}," Peppa",[33,82557,13958],{"class":39},[33,82559,82488],{"class":43},[33,82561,133],{"class":47},[33,82563,82564],{"class":60},"'佩奇'",[33,82566,2799],{"class":47},[33,82568,2765],{"class":72},[33,82570,2799],{"class":47},[33,82572,82573],{"class":60},"'女'",[33,82575,226],{"class":47},[33,82577,82578],{"class":35,"line":128},[33,82579,82580],{"class":2487},"\u002F\u002F创建乔治对象\n",[33,82582,82583,82585,82588,82590,82592,82594,82597,82599,82601,82603,82606],{"class":35,"line":1753},[33,82584,9038],{"class":39},[33,82586,82587],{"class":72}," George",[33,82589,13958],{"class":39},[33,82591,82488],{"class":43},[33,82593,133],{"class":47},[33,82595,82596],{"class":60},"'乔治'",[33,82598,2799],{"class":47},[33,82600,730],{"class":72},[33,82602,2799],{"class":47},[33,82604,82605],{"class":60},"'男'",[33,82607,226],{"class":47},[33,82609,82610,82612,82614],{"class":35,"line":1763},[33,82611,54006],{"class":47},[33,82613,54034],{"class":53522},[33,82615,53529],{"class":47},[19,82617,82618],{},[3736,82619],{"alt":28,"src":82620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82622,82623],{},[3736,82624],{"alt":28,"src":82625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82627,82628],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82630,82631],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82633,82634],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82636,82637],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82639,82640],{},"这里用等号是因为：对象.属性=值",[19,82642,82643],{},"①利用对象字面量创建对象",[19,82645,82646],{},"const o={",[19,82648,82649],{},"name:'pink'",[19,82651,82652],{},"} ②利用new Object创建对象",[19,82654,82655],{},"const o=new Object({name:'pink'})",[19,82657,82658],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82660,82661],{},"构造函数创建对象的执行过程：",[19,82663,82664],{},[3736,82665],{"alt":28,"src":82666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[631,82668,82670],{"id":82669},"_4103-实例成员","4.10.3 实例成员",[19,82672,82673],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[328,82675,82676,82679,82682],{},[331,82677,82678],{},"实例对象的属性和方法即为实例成员",[331,82680,82681],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[331,82683,82684],{},"构造函数创建的实例对象彼此独立互不影响",[631,82686,82688],{"id":82687},"_4104-静态成员","4.10.4 静态成员",[19,82690,82691],{},[3736,82692],{"alt":28,"src":82693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82695,82696],{},"静态成员有Date.now() Math.PI Math.random()",[19,82698,82699],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82701,82702],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82704,82705],{},"function Pig(name) n {",[19,82707,82708],{},"this.name=name",[19,82710,210],{},[19,82712,82713],{},"Pig.eyes=2",[19,82715,82716],{},"Pig.sayHai=function () { console.log(this) }",[19,82718,82719],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82721,82722],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82724,13573],{},[328,82726,82727,82730,82733,82736,82739],{},[331,82728,82729],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[331,82731,82732],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[331,82734,82735],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[331,82737,82738],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[331,82740,82741],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82743,82744],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[631,82746,82748],{"id":82747},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82750,82751],{},"内置构造函数包含：",[19,82753,82754],{},[3736,82755],{"alt":28,"src":82756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82758,82759],{},[3736,82760],{"alt":28,"src":82761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82763,82764],{},"这些基本数据类型，js对他们进行了包装",[54034,82766,82767],{},"\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",[24236,82769,82771],{"id":82770},"_41051-object","4.10.5.1 Object",[19,82773,82774],{},"Object 是内置的构造函数，用于创建普通对象",[19,82776,82777],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[23,82779,82781],{"className":52855,"code":82780,"language":52857,"meta":28,"style":28},"const user=new Object({name:'小明',age:15})\n",[30,82782,82783],{"__ignoreMap":28},[33,82784,82785],{"class":35,"line":36},[33,82786,82780],{"class":47},[19,82788,82789],{},"三个常用的静态方法：",[25148,82791,82793],{"id":82792},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82795,82796],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82798,82799],{},[3736,82800],{"alt":28,"src":82801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82803,82804],{},[3736,82805],{"alt":28,"src":82806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[23,82808,82810],{"className":55286,"code":82809,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,82811,82812,82820,82828,82833,82838,82843,82848,82853,82858,82866],{"__ignoreMap":28},[33,82813,82814,82816,82818],{"class":35,"line":36},[33,82815,2226],{"class":47},[33,82817,54021],{"class":53522},[33,82819,53529],{"class":47},[33,82821,82822,82824,82826],{"class":35,"line":51},[33,82823,54364],{"class":47},[33,82825,54034],{"class":53522},[33,82827,53529],{"class":47},[33,82829,82830],{"class":35,"line":64},[33,82831,82832],{"class":47},"    const o = { name: 'pink', age: 6 }\n",[33,82834,82835],{"class":35,"line":76},[33,82836,82837],{"class":47},"    \u002F\u002F 获得所有属性名\n",[33,82839,82840],{"class":35,"line":87},[33,82841,82842],{"class":47},"    const arr = Object.keys(o)\n",[33,82844,82845],{"class":35,"line":96},[33,82846,82847],{"class":47},"    console.log(arr)\n",[33,82849,82850],{"class":35,"line":103},[33,82851,82852],{"class":47},"    \u002F\u002F 获得所有属性值\n",[33,82854,82855],{"class":35,"line":108},[33,82856,82857],{"class":47},"    console.log(Object.values(o))\n",[33,82859,82860,82862,82864],{"class":35,"line":119},[33,82861,54636],{"class":47},[33,82863,54034],{"class":53522},[33,82865,53529],{"class":47},[33,82867,82868,82870,82872],{"class":35,"line":128},[33,82869,54006],{"class":47},[33,82871,54021],{"class":53522},[33,82873,53529],{"class":47},[25148,82875,82877],{"id":82876},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82879,82880],{},"Object.assign(oo,o)",[19,82882,82883],{},"后的东西添加给前 是追加",[19,82885,82886],{},[3736,82887],{"alt":28,"src":82888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82890,82891],{},[3736,82892],{"alt":28,"src":82893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[23,82895,82897],{"className":55286,"code":82896,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,82898,82899,82907,82915,82919,82923,82927,82931,82935,82939,82944,82949,82954,82959,82964,82972],{"__ignoreMap":28},[33,82900,82901,82903,82905],{"class":35,"line":36},[33,82902,2226],{"class":47},[33,82904,54021],{"class":53522},[33,82906,53529],{"class":47},[33,82908,82909,82911,82913],{"class":35,"line":51},[33,82910,54364],{"class":47},[33,82912,54034],{"class":53522},[33,82914,53529],{"class":47},[33,82916,82917],{"class":35,"line":64},[33,82918,82832],{"class":47},[33,82920,82921],{"class":35,"line":76},[33,82922,82837],{"class":47},[33,82924,82925],{"class":35,"line":87},[33,82926,82842],{"class":47},[33,82928,82929],{"class":35,"line":96},[33,82930,82847],{"class":47},[33,82932,82933],{"class":35,"line":103},[33,82934,82852],{"class":47},[33,82936,82937],{"class":35,"line":108},[33,82938,82857],{"class":47},[33,82940,82941],{"class":35,"line":119},[33,82942,82943],{"class":47},"    const oo = {}\n",[33,82945,82946],{"class":35,"line":128},[33,82947,82948],{"class":47},"    Object.assign(oo, o)\n",[33,82950,82951],{"class":35,"line":1753},[33,82952,82953],{"class":47},"    console.log(oo)\n",[33,82955,82956],{"class":35,"line":1763},[33,82957,82958],{"class":47},"    Object.assign(o, { gender: '女' })\n",[33,82960,82961],{"class":35,"line":1775},[33,82962,82963],{"class":47},"    console.log(o)\n",[33,82965,82966,82968,82970],{"class":35,"line":1780},[33,82967,54636],{"class":47},[33,82969,54034],{"class":53522},[33,82971,53529],{"class":47},[33,82973,82974,82976,82978],{"class":35,"line":1785},[33,82975,54006],{"class":47},[33,82977,54021],{"class":53522},[33,82979,53529],{"class":47},[19,82981,82982],{},[3736,82983],{"alt":28,"src":82984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[24236,82986,82988],{"id":82987},"_41052-array","4.10.5.2 Array",[19,82990,82991],{},"Array 是内置的构造函数，用于创建数组",[19,82993,82994],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[23,82996,82998],{"className":52855,"code":82997,"language":52857,"meta":28,"style":28},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[30,82999,83000,83005],{"__ignoreMap":28},[33,83001,83002],{"class":35,"line":36},[33,83003,83004],{"class":47},"const arr=new Array(3,5)\n",[33,83006,83007],{"class":35,"line":51},[33,83008,83009],{"class":47},"console.log(arr)  \u002F\u002F[3,5]\n",[19,83011,83012],{},"Array的实例方法，这个方法是实例成员",[19,83014,83015],{},[3736,83016],{"alt":28,"src":83017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[25148,83019,83021],{"id":83020},"_410521-reduce","4.10.5.2.1 reduce",[19,83023,83024],{},[3736,83025],{"alt":28,"src":83026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[23,83028,83030],{"className":55286,"code":83029,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,83031,83032,83040,83048,83053,83058,83063,83068,83072,83077,83082,83087,83091,83096,83101,83105,83110,83115,83120,83128],{"__ignoreMap":28},[33,83033,83034,83036,83038],{"class":35,"line":36},[33,83035,2226],{"class":47},[33,83037,54021],{"class":53522},[33,83039,53529],{"class":47},[33,83041,83042,83044,83046],{"class":35,"line":51},[33,83043,54364],{"class":47},[33,83045,54034],{"class":53522},[33,83047,53529],{"class":47},[33,83049,83050],{"class":35,"line":64},[33,83051,83052],{"class":47},"    const arr = [1, 5, 8]\n",[33,83054,83055],{"class":35,"line":76},[33,83056,83057],{"class":47},"    \u002F\u002F 1.没有初始值\n",[33,83059,83060],{"class":35,"line":87},[33,83061,83062],{"class":47},"    const total = arr.reduce(function (prev, current) {\n",[33,83064,83065],{"class":35,"line":96},[33,83066,83067],{"class":47},"      return prev + current\n",[33,83069,83070],{"class":35,"line":103},[33,83071,35686],{"class":47},[33,83073,83074],{"class":35,"line":108},[33,83075,83076],{"class":47},"    console.log(total)   \u002F\u002F14\n",[33,83078,83079],{"class":35,"line":119},[33,83080,83081],{"class":47},"    \u002F\u002F 2.有初始值\n",[33,83083,83084],{"class":35,"line":128},[33,83085,83086],{"class":47},"    const total1 = arr.reduce(function (prev, current) {\n",[33,83088,83089],{"class":35,"line":1753},[33,83090,83067],{"class":47},[33,83092,83093],{"class":35,"line":1763},[33,83094,83095],{"class":47},"    }, 10)\n",[33,83097,83098],{"class":35,"line":1775},[33,83099,83100],{"class":47},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[33,83102,83103],{"class":35,"line":1780},[33,83104,100],{"emptyLinePlaceholder":99},[33,83106,83107],{"class":35,"line":1785},[33,83108,83109],{"class":47},"    \u002F\u002F 3.箭头函数写法\n",[33,83111,83112],{"class":35,"line":1940},[33,83113,83114],{"class":47},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[33,83116,83117],{"class":35,"line":2183},[33,83118,83119],{"class":47},"    console.log(total2)   \u002F\u002F24\n",[33,83121,83122,83124,83126],{"class":35,"line":2208},[33,83123,54636],{"class":47},[33,83125,54034],{"class":53522},[33,83127,53529],{"class":47},[33,83129,83130,83132,83134],{"class":35,"line":2234},[33,83131,54006],{"class":47},[33,83133,54021],{"class":53522},[33,83135,53529],{"class":47},[19,83137,83138],{},"执行过程：",[328,83140,83141,83144,83147],{},[331,83142,83143],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[331,83145,83146],{},"每一次循环，把返回值给作为下一次循环的上一次值",[331,83148,83149],{},"如果有起始值，则起始值作为上一次值",[23,83151,83153],{"className":55286,"code":83152,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,83154,83155,83163,83171,83175,83179,83183,83187,83191,83195,83200,83205,83210,83215,83220,83224,83228,83232,83236,83240,83244,83249,83253,83258,83262,83267,83272,83276,83280,83284,83292],{"__ignoreMap":28},[33,83156,83157,83159,83161],{"class":35,"line":36},[33,83158,2226],{"class":47},[33,83160,54021],{"class":53522},[33,83162,53529],{"class":47},[33,83164,83165,83167,83169],{"class":35,"line":51},[33,83166,54364],{"class":47},[33,83168,54034],{"class":53522},[33,83170,53529],{"class":47},[33,83172,83173],{"class":35,"line":64},[33,83174,83052],{"class":47},[33,83176,83177],{"class":35,"line":76},[33,83178,83057],{"class":47},[33,83180,83181],{"class":35,"line":87},[33,83182,83062],{"class":47},[33,83184,83185],{"class":35,"line":96},[33,83186,83067],{"class":47},[33,83188,83189],{"class":35,"line":103},[33,83190,35686],{"class":47},[33,83192,83193],{"class":35,"line":108},[33,83194,83076],{"class":47},[33,83196,83197],{"class":35,"line":119},[33,83198,83199],{"class":47},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[33,83201,83202],{"class":35,"line":128},[33,83203,83204],{"class":47},"    \u002F\u002F     1              5                    6\n",[33,83206,83207],{"class":35,"line":1753},[33,83208,83209],{"class":47},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[33,83211,83212],{"class":35,"line":1763},[33,83213,83214],{"class":47},"    \u002F\u002F     6              8                    14\n",[33,83216,83217],{"class":35,"line":1775},[33,83218,83219],{"class":47},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[33,83221,83222],{"class":35,"line":1780},[33,83223,83081],{"class":47},[33,83225,83226],{"class":35,"line":1785},[33,83227,83086],{"class":47},[33,83229,83230],{"class":35,"line":1940},[33,83231,83067],{"class":47},[33,83233,83234],{"class":35,"line":2183},[33,83235,83095],{"class":47},[33,83237,83238],{"class":35,"line":2208},[33,83239,83100],{"class":47},[33,83241,83242],{"class":35,"line":2234},[33,83243,83199],{"class":47},[33,83245,83246],{"class":35,"line":2239},[33,83247,83248],{"class":47},"    \u002F\u002F     10             1                     11\n",[33,83250,83251],{"class":35,"line":2247},[33,83252,83209],{"class":47},[33,83254,83255],{"class":35,"line":2255},[33,83256,83257],{"class":47},"    \u002F\u002F     11             5                    16\n",[33,83259,83260],{"class":35,"line":3992},[33,83261,83209],{"class":47},[33,83263,83264],{"class":35,"line":4009},[33,83265,83266],{"class":47},"    \u002F\u002F     16             8                    24\n",[33,83268,83269],{"class":35,"line":4014},[33,83270,83271],{"class":47},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[33,83273,83274],{"class":35,"line":4019},[33,83275,83109],{"class":47},[33,83277,83278],{"class":35,"line":4024},[33,83279,83114],{"class":47},[33,83281,83282],{"class":35,"line":4038},[33,83283,83119],{"class":47},[33,83285,83286,83288,83290],{"class":35,"line":4043},[33,83287,54636],{"class":47},[33,83289,54034],{"class":53522},[33,83291,53529],{"class":47},[33,83293,83294,83296,83298],{"class":35,"line":4834},[33,83295,54006],{"class":47},[33,83297,54021],{"class":53522},[33,83299,53529],{"class":47},[25148,83301,83303],{"id":83302},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83305,83306],{},[3736,83307],{"alt":28,"src":83308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[23,83310,83312],{"className":55286,"code":83311,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,83313,83314,83322,83330,83335,83340,83345,83350,83354,83359,83364,83369,83374,83379,83384,83388,83393,83397,83402,83410],{"__ignoreMap":28},[33,83315,83316,83318,83320],{"class":35,"line":36},[33,83317,2226],{"class":47},[33,83319,54021],{"class":53522},[33,83321,53529],{"class":47},[33,83323,83324,83326,83328],{"class":35,"line":51},[33,83325,54364],{"class":47},[33,83327,54034],{"class":53522},[33,83329,53529],{"class":47},[33,83331,83332],{"class":35,"line":64},[33,83333,83334],{"class":47},"    const arr = [\n",[33,83336,83337],{"class":35,"line":76},[33,83338,83339],{"class":47},"      { name: '张三', salary: 10000 },\n",[33,83341,83342],{"class":35,"line":87},[33,83343,83344],{"class":47},"      { name: '李四', salary: 10000 },\n",[33,83346,83347],{"class":35,"line":96},[33,83348,83349],{"class":47},"      { name: '王五', salary: 10000 }\n",[33,83351,83352],{"class":35,"line":103},[33,83353,55328],{"class":47},[33,83355,83356],{"class":35,"line":108},[33,83357,83358],{"class":47},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[33,83360,83361],{"class":35,"line":119},[33,83362,83363],{"class":47},"    \u002F\u002F prev是累计值\n",[33,83365,83366],{"class":35,"line":128},[33,83367,83368],{"class":47},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[33,83370,83371],{"class":35,"line":1753},[33,83372,83373],{"class":47},"    console.log(total)\n",[33,83375,83376],{"class":35,"line":1763},[33,83377,83378],{"class":47},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[33,83380,83381],{"class":35,"line":1775},[33,83382,83383],{"class":47},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[33,83385,83386],{"class":35,"line":1780},[33,83387,83378],{"class":47},[33,83389,83390],{"class":35,"line":1785},[33,83391,83392],{"class":47},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[33,83394,83395],{"class":35,"line":1940},[33,83396,83378],{"class":47},[33,83398,83399],{"class":35,"line":2183},[33,83400,83401],{"class":47},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[33,83403,83404,83406,83408],{"class":35,"line":2208},[33,83405,54636],{"class":47},[33,83407,54034],{"class":53522},[33,83409,53529],{"class":47},[33,83411,83412,83414,83416],{"class":35,"line":2234},[33,83413,54006],{"class":47},[33,83415,54021],{"class":53522},[33,83417,53529],{"class":47},[25148,83419,83421],{"id":83420},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83423,83424],{},[3736,83425],{"alt":28,"src":83426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83428,83429],{},[3736,83430],{"alt":28,"src":83431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[328,83433,83434],{},[331,83435,83436],{},"find()",[19,83438,83439],{},"循环查找，找到第一个就ok",[19,83441,83442],{},[2663,83443,83446],{"href":83444,"rel":83445},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[26103],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[23,83448,83450],{"className":52855,"code":83449,"language":52857,"meta":28,"style":28},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[30,83451,83452,83457,83462],{"__ignoreMap":28},[33,83453,83454],{"class":35,"line":36},[33,83455,83456],{"class":47},"const array1 = [5, 12, 8, 130, 44]\n",[33,83458,83459],{"class":35,"line":51},[33,83460,83461],{"class":47},"const found = array1.find((element) => element > 10)\n",[33,83463,83464],{"class":35,"line":64},[33,83465,83466],{"class":47},"console.log(found)  \u002F\u002F12\n",[19,83468,83469,83471,83472,83477,83478,83481,83482,83484,83485,83490,83491,83493,83494,83496,83497,83499,83500],{},[30,83470,83436],{}," 方法是一个",[2663,83473,83476],{"href":83474,"rel":83475},"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",[26103],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[30,83479,83480],{},"callbackFn"," 函数，直到 ",[30,83483,83480],{}," 返回一个",[2663,83486,83489],{"href":83487,"rel":83488},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[26103],"真值","。然后 ",[30,83492,83436],{}," 返回该元素并停止迭代数组。如果 ",[30,83495,83480],{}," 从未返回真值，则 ",[30,83498,83436],{}," 返回 ",[30,83501,83502],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[23,83504,83506],{"className":55286,"code":83505,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[30,83507,83508,83516,83524,83529,83534,83539,83543,83548,83553,83557,83562,83567,83571,83575,83580,83585,83589,83593,83598,83603,83608,83613,83618,83622,83627,83632,83637,83642,83646,83651,83659],{"__ignoreMap":28},[33,83509,83510,83512,83514],{"class":35,"line":36},[33,83511,2226],{"class":47},[33,83513,54021],{"class":53522},[33,83515,53529],{"class":47},[33,83517,83518,83520,83522],{"class":35,"line":51},[33,83519,54364],{"class":47},[33,83521,54034],{"class":53522},[33,83523,53529],{"class":47},[33,83525,83526],{"class":35,"line":64},[33,83527,83528],{"class":47},"    const arr = ['red', 'blue', 'green']\n",[33,83530,83531],{"class":35,"line":76},[33,83532,83533],{"class":47},"    const found = arr.find(item => item === 'pink')\n",[33,83535,83536],{"class":35,"line":87},[33,83537,83538],{"class":47},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[33,83540,83541],{"class":35,"line":96},[33,83542,100],{"emptyLinePlaceholder":99},[33,83544,83545],{"class":35,"line":103},[33,83546,83547],{"class":47},"    \u002F\u002F 使用场景，用于查找数据\n",[33,83549,83550],{"class":35,"line":108},[33,83551,83552],{"class":47},"    const arr1 = [\n",[33,83554,83555],{"class":35,"line":119},[33,83556,81597],{"class":47},[33,83558,83559],{"class":35,"line":128},[33,83560,83561],{"class":47},"        name: '小米',\n",[33,83563,83564],{"class":35,"line":1753},[33,83565,83566],{"class":47},"        price: 1999\n",[33,83568,83569],{"class":35,"line":1763},[33,83570,80103],{"class":47},[33,83572,83573],{"class":35,"line":1775},[33,83574,81597],{"class":47},[33,83576,83577],{"class":35,"line":1780},[33,83578,83579],{"class":47},"        name: '华为',\n",[33,83581,83582],{"class":35,"line":1785},[33,83583,83584],{"class":47},"        price: 3999\n",[33,83586,83587],{"class":35,"line":1940},[33,83588,54617],{"class":47},[33,83590,83591],{"class":35,"line":2183},[33,83592,55328],{"class":47},[33,83594,83595],{"class":35,"line":2208},[33,83596,83597],{"class":47},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[33,83599,83600],{"class":35,"line":2234},[33,83601,83602],{"class":47},"    \u002F\u002F const found1 = arr1.find(item => {\n",[33,83604,83605],{"class":35,"line":2239},[33,83606,83607],{"class":47},"    \u002F\u002F   if (item.name === '小米') {\n",[33,83609,83610],{"class":35,"line":2247},[33,83611,83612],{"class":47},"    \u002F\u002F     return item\n",[33,83614,83615],{"class":35,"line":2255},[33,83616,83617],{"class":47},"    \u002F\u002F   }\n",[33,83619,83620],{"class":35,"line":3992},[33,83621,65507],{"class":47},[33,83623,83624],{"class":35,"line":4009},[33,83625,83626],{"class":47},"    \u002F\u002F 另一种写法\n",[33,83628,83629],{"class":35,"line":4014},[33,83630,83631],{"class":47},"    const found1 = arr1.find(item => {\n",[33,83633,83634],{"class":35,"line":4019},[33,83635,83636],{"class":47},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[33,83638,83639],{"class":35,"line":4024},[33,83640,83641],{"class":47},"      return item.name = '小米'\n",[33,83643,83644],{"class":35,"line":4038},[33,83645,35686],{"class":47},[33,83647,83648],{"class":35,"line":4043},[33,83649,83650],{"class":47},"    console.log(found1)\n",[33,83652,83653,83655,83657],{"class":35,"line":4834},[33,83654,54636],{"class":47},[33,83656,54034],{"class":53522},[33,83658,53529],{"class":47},[33,83660,83661,83663,83665],{"class":35,"line":4848},[33,83662,54006],{"class":47},[33,83664,54021],{"class":53522},[33,83666,53529],{"class":47},[19,83668,83669],{},[3736,83670],{"alt":28,"src":83671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83673,83674],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[328,83676,83677],{"start":51},[331,83678,83679],{},"every()返回的是布尔值",[19,83681,83682],{},[2663,83683,83686],{"href":83684,"rel":83685},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[26103],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83688,83689],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83691,83692],{},"some是只有有一个就没问题",[19,83694,83695],{},"every是必须全是才行",[23,83697,83701],{"className":83698,"code":83699,"language":83700,"meta":28,"style":28},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[30,83702,83703,83719,83733,83737,83746],{"__ignoreMap":28},[33,83704,83705,83707,83710,83712,83714,83717],{"class":35,"line":36},[33,83706,56668],{"class":39},[33,83708,83709],{"class":47}," isBigEnough(element, ",[33,83711,76270],{"class":39},[33,83713,245],{"class":47},[33,83715,83716],{"class":39},"array",[33,83718,14682],{"class":47},[33,83720,83721,83724,83727,83729,83731],{"class":35,"line":51},[33,83722,83723],{"class":39},"  return",[33,83725,83726],{"class":47}," element ",[33,83728,2175],{"class":39},[33,83730,4297],{"class":72},[33,83732,3567],{"class":47},[33,83734,83735],{"class":35,"line":64},[33,83736,1010],{"class":47},[33,83738,83739,83742,83744],{"class":35,"line":76},[33,83740,83741],{"class":47},"[12, 5, 8, 130, 44].every(isBigEnough); ",[33,83743,35554],{"class":39},[33,83745,56735],{"class":47},[33,83747,83748,83751,83753],{"class":35,"line":87},[33,83749,83750],{"class":47},"[12, 54, 18, 130, 44].every(isBigEnough); ",[33,83752,35554],{"class":39},[33,83754,60158],{"class":47},[23,83756,83758],{"className":55286,"code":83757,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,83759,83760,83768,83776,83781,83785,83790,83795,83803],{"__ignoreMap":28},[33,83761,83762,83764,83766],{"class":35,"line":36},[33,83763,2226],{"class":47},[33,83765,54021],{"class":53522},[33,83767,53529],{"class":47},[33,83769,83770,83772,83774],{"class":35,"line":51},[33,83771,54364],{"class":47},[33,83773,54034],{"class":53522},[33,83775,53529],{"class":47},[33,83777,83778],{"class":35,"line":64},[33,83779,83780],{"class":47},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[33,83782,83783],{"class":35,"line":76},[33,83784,80533],{"class":47},[33,83786,83787],{"class":35,"line":87},[33,83788,83789],{"class":47},"    const flag = arr.every(item => item >= 10)\n",[33,83791,83792],{"class":35,"line":96},[33,83793,83794],{"class":47},"    console.log(flag)    \u002F\u002Ftrue\n",[33,83796,83797,83799,83801],{"class":35,"line":103},[33,83798,54636],{"class":47},[33,83800,54034],{"class":53522},[33,83802,53529],{"class":47},[33,83804,83805,83807,83809],{"class":35,"line":108},[33,83806,54006],{"class":47},[33,83808,54021],{"class":53522},[33,83810,53529],{"class":47},[23,83812,83814],{"className":55286,"code":83813,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,83815,83816,83824,83832,83836,83841,83846,83851,83859],{"__ignoreMap":28},[33,83817,83818,83820,83822],{"class":35,"line":36},[33,83819,2226],{"class":47},[33,83821,54021],{"class":53522},[33,83823,53529],{"class":47},[33,83825,83826,83828,83830],{"class":35,"line":51},[33,83827,54364],{"class":47},[33,83829,54034],{"class":53522},[33,83831,53529],{"class":47},[33,83833,83834],{"class":35,"line":64},[33,83835,83780],{"class":47},[33,83837,83838],{"class":35,"line":76},[33,83839,83840],{"class":47},"    const arr = [10, 0, 5]\n",[33,83842,83843],{"class":35,"line":87},[33,83844,83845],{"class":47},"    const flag = arr.some(item => item >= 10)\n",[33,83847,83848],{"class":35,"line":96},[33,83849,83850],{"class":47},"    console.log(flag)   \u002F\u002Ftrue\n",[33,83852,83853,83855,83857],{"class":35,"line":103},[33,83854,54636],{"class":47},[33,83856,54034],{"class":53522},[33,83858,53529],{"class":47},[33,83860,83861,83863,83865],{"class":35,"line":108},[33,83862,54006],{"class":47},[33,83864,54021],{"class":53522},[33,83866,53529],{"class":47},[25148,83868,83870],{"id":83869},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83872,83873],{},[3736,83874],{"alt":28,"src":83875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[23,83877,83879],{"className":52855,"code":83878,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,83880,83881,83891,83905,83909,83917,83931,83951,83963,83971,83978,83990,84002,84014,84026,84036,84046,84050,84058,84066,84070,84078,84090,84098,84120,84125,84130,84163,84171,84179,84183],{"__ignoreMap":28},[33,83882,83883,83885,83887,83889],{"class":35,"line":36},[33,83884,53519],{"class":47},[33,83886,53523],{"class":53522},[33,83888,53526],{"class":43},[33,83890,53529],{"class":47},[33,83892,83893,83895,83897,83899,83901,83903],{"class":35,"line":51},[33,83894,2226],{"class":47},[33,83896,52857],{"class":53522},[33,83898,53538],{"class":43},[33,83900,57],{"class":47},[33,83902,53543],{"class":60},[33,83904,53529],{"class":47},[33,83906,83907],{"class":35,"line":64},[33,83908,100],{"emptyLinePlaceholder":99},[33,83910,83911,83913,83915],{"class":35,"line":76},[33,83912,2226],{"class":47},[33,83914,53556],{"class":53522},[33,83916,53529],{"class":47},[33,83918,83919,83921,83923,83925,83927,83929],{"class":35,"line":87},[33,83920,54364],{"class":47},[33,83922,53566],{"class":53522},[33,83924,53569],{"class":43},[33,83926,57],{"class":47},[33,83928,53574],{"class":60},[33,83930,53529],{"class":47},[33,83932,83933,83935,83937,83939,83941,83943,83945,83947,83949],{"class":35,"line":96},[33,83934,54364],{"class":47},[33,83936,53566],{"class":53522},[33,83938,17158],{"class":43},[33,83940,57],{"class":47},[33,83942,53613],{"class":60},[33,83944,53593],{"class":43},[33,83946,57],{"class":47},[33,83948,53620],{"class":60},[33,83950,53529],{"class":47},[33,83952,83953,83955,83957,83959,83961],{"class":35,"line":103},[33,83954,54364],{"class":47},[33,83956,53629],{"class":53522},[33,83958,53632],{"class":47},[33,83960,53629],{"class":53522},[33,83962,53529],{"class":47},[33,83964,83965,83967,83969],{"class":35,"line":108},[33,83966,54364],{"class":47},[33,83968,2331],{"class":53522},[33,83970,53529],{"class":47},[33,83972,83973,83976],{"class":35,"line":119},[33,83974,83975],{"class":53522},"    div",[33,83977,17810],{"class":47},[33,83979,83980,83982,83984,83986,83988],{"class":35,"line":128},[33,83981,56990],{"class":72},[33,83983,996],{"class":47},[33,83985,3983],{"class":72},[33,83987,53713],{"class":39},[33,83989,3567],{"class":47},[33,83991,83992,83994,83996,83998,84000],{"class":35,"line":1753},[33,83993,57004],{"class":72},[33,83995,996],{"class":47},[33,83997,2822],{"class":72},[33,83999,53713],{"class":39},[33,84001,3567],{"class":47},[33,84003,84004,84006,84008,84010,84012],{"class":35,"line":1763},[33,84005,59577],{"class":72},[33,84007,996],{"class":47},[33,84009,2822],{"class":72},[33,84011,53713],{"class":39},[33,84013,3567],{"class":47},[33,84015,84016,84018,84020,84022,84024],{"class":35,"line":1775},[33,84017,67350],{"class":72},[33,84019,996],{"class":47},[33,84021,2915],{"class":72},[33,84023,53713],{"class":39},[33,84025,3567],{"class":47},[33,84027,84028,84030,84032,84034],{"class":35,"line":1780},[33,84029,59504],{"class":72},[33,84031,996],{"class":47},[33,84033,53813],{"class":72},[33,84035,3567],{"class":47},[33,84037,84038,84040,84042,84044],{"class":35,"line":1785},[33,84039,57103],{"class":72},[33,84041,996],{"class":47},[33,84043,53866],{"class":72},[33,84045,3567],{"class":47},[33,84047,84048],{"class":35,"line":1940},[33,84049,4446],{"class":47},[33,84051,84052,84054,84056],{"class":35,"line":2183},[33,84053,54636],{"class":47},[33,84055,2331],{"class":53522},[33,84057,53529],{"class":47},[33,84059,84060,84062,84064],{"class":35,"line":2208},[33,84061,54006],{"class":47},[33,84063,53556],{"class":53522},[33,84065,53529],{"class":47},[33,84067,84068],{"class":35,"line":2234},[33,84069,100],{"emptyLinePlaceholder":99},[33,84071,84072,84074,84076],{"class":35,"line":2239},[33,84073,2226],{"class":47},[33,84075,54021],{"class":53522},[33,84077,53529],{"class":47},[33,84079,84080,84082,84084,84086,84088],{"class":35,"line":2247},[33,84081,54364],{"class":47},[33,84083,53832],{"class":53522},[33,84085,57533],{"class":47},[33,84087,53832],{"class":53522},[33,84089,53529],{"class":47},[33,84091,84092,84094,84096],{"class":35,"line":2255},[33,84093,54364],{"class":47},[33,84095,54034],{"class":53522},[33,84097,53529],{"class":47},[33,84099,84100,84102,84105,84107,84110,84113,84115,84118],{"class":35,"line":3992},[33,84101,13462],{"class":39},[33,84103,84104],{"class":72}," spec",[33,84106,15804],{"class":39},[33,84108,84109],{"class":47}," { size: ",[33,84111,84112],{"class":60},"'40cm*40cm'",[33,84114,57682],{"class":47},[33,84116,84117],{"class":60},"'黑色'",[33,84119,57822],{"class":47},[33,84121,84122],{"class":35,"line":4009},[33,84123,84124],{"class":2487},"    \u002F\u002F const arr = Object.values(spec)\n",[33,84126,84127],{"class":35,"line":4014},[33,84128,84129],{"class":2487},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[33,84131,84132,84134,84136,84138,84141,84143,84145,84148,84151,84154,84156,84158,84161],{"class":35,"line":4019},[33,84133,54626],{"class":47},[33,84135,56618],{"class":43},[33,84137,133],{"class":47},[33,84139,84140],{"class":60},"'div'",[33,84142,76461],{"class":47},[33,84144,57],{"class":39},[33,84146,84147],{"class":47}," Object.",[33,84149,84150],{"class":43},"values",[33,84152,84153],{"class":47},"(spec).",[33,84155,76435],{"class":43},[33,84157,133],{"class":47},[33,84159,84160],{"class":60},"'\u002F'",[33,84162,226],{"class":47},[33,84164,84165,84167,84169],{"class":35,"line":4024},[33,84166,54636],{"class":47},[33,84168,54034],{"class":53522},[33,84170,53529],{"class":47},[33,84172,84173,84175,84177],{"class":35,"line":4038},[33,84174,54006],{"class":47},[33,84176,54021],{"class":53522},[33,84178,53529],{"class":47},[33,84180,84181],{"class":35,"line":4043},[33,84182,100],{"emptyLinePlaceholder":99},[33,84184,84185,84187,84189],{"class":35,"line":4834},[33,84186,54006],{"class":47},[33,84188,52857],{"class":53522},[33,84190,53529],{"class":47},[19,84192,84193],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[25148,84195,84197],{"id":84196},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,84199,84200],{},"静态方法，将伪数组转换为真数组",[19,84202,84203],{},[3736,84204],{"alt":28,"src":84205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[23,84207,84209],{"className":55286,"code":84208,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,84210,84211,84219,84227,84239,84251,84263,84271,84279,84284,84289,84294,84299,84307],{"__ignoreMap":28},[33,84212,84213,84215,84217],{"class":35,"line":36},[33,84214,2226],{"class":47},[33,84216,54021],{"class":53522},[33,84218,53529],{"class":47},[33,84220,84221,84223,84225],{"class":35,"line":51},[33,84222,54364],{"class":47},[33,84224,3413],{"class":53522},[33,84226,53529],{"class":47},[33,84228,84229,84231,84233,84235,84237],{"class":35,"line":64},[33,84230,53563],{"class":47},[33,84232,331],{"class":53522},[33,84234,57533],{"class":47},[33,84236,331],{"class":53522},[33,84238,53529],{"class":47},[33,84240,84241,84243,84245,84247,84249],{"class":35,"line":76},[33,84242,53563],{"class":47},[33,84244,331],{"class":53522},[33,84246,57533],{"class":47},[33,84248,331],{"class":53522},[33,84250,53529],{"class":47},[33,84252,84253,84255,84257,84259,84261],{"class":35,"line":87},[33,84254,53563],{"class":47},[33,84256,331],{"class":53522},[33,84258,57533],{"class":47},[33,84260,331],{"class":53522},[33,84262,53529],{"class":47},[33,84264,84265,84267,84269],{"class":35,"line":96},[33,84266,54636],{"class":47},[33,84268,3413],{"class":53522},[33,84270,53529],{"class":47},[33,84272,84273,84275,84277],{"class":35,"line":103},[33,84274,54364],{"class":47},[33,84276,54034],{"class":53522},[33,84278,53529],{"class":47},[33,84280,84281],{"class":35,"line":108},[33,84282,84283],{"class":47},"    const lis = document.querySelectorAll('li')\n",[33,84285,84286],{"class":35,"line":119},[33,84287,84288],{"class":47},"    const liss = Array.from(lis)\n",[33,84290,84291],{"class":35,"line":128},[33,84292,84293],{"class":47},"    liss.pop()\n",[33,84295,84296],{"class":35,"line":1753},[33,84297,84298],{"class":47},"    console.log(liss)\n",[33,84300,84301,84303,84305],{"class":35,"line":1763},[33,84302,54636],{"class":47},[33,84304,54034],{"class":53522},[33,84306,53529],{"class":47},[33,84308,84309,84311,84313],{"class":35,"line":1775},[33,84310,54006],{"class":47},[33,84312,54021],{"class":53522},[33,84314,53529],{"class":47},[19,84316,84317],{},[3736,84318],{"alt":28,"src":84319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[24236,84321,84323],{"id":84322},"_41053-string","4.10.5.3 String",[19,84325,84326],{},[3736,84327],{"alt":28,"src":84328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[25148,84330,84332],{"id":84331},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[23,84334,84336],{"className":55286,"code":84335,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,84337,84338,84346,84354,84359,84364,84369,84373,84378,84383,84388,84396],{"__ignoreMap":28},[33,84339,84340,84342,84344],{"class":35,"line":36},[33,84341,2226],{"class":47},[33,84343,54021],{"class":53522},[33,84345,53529],{"class":47},[33,84347,84348,84350,84352],{"class":35,"line":51},[33,84349,54364],{"class":47},[33,84351,54034],{"class":53522},[33,84353,53529],{"class":47},[33,84355,84356],{"class":35,"line":64},[33,84357,84358],{"class":47},"    \u002F\u002F 把字符串转化为数组\n",[33,84360,84361],{"class":35,"line":76},[33,84362,84363],{"class":47},"    const str = 'pink,red'\n",[33,84365,84366],{"class":35,"line":87},[33,84367,84368],{"class":47},"    const arr = str.split(',')\n",[33,84370,84371],{"class":35,"line":96},[33,84372,82847],{"class":47},[33,84374,84375],{"class":35,"line":103},[33,84376,84377],{"class":47},"    const str1 = '2025-8-25'\n",[33,84379,84380],{"class":35,"line":108},[33,84381,84382],{"class":47},"    const arr1 = str1.split('-')\n",[33,84384,84385],{"class":35,"line":119},[33,84386,84387],{"class":47},"    console.log(arr1)\n",[33,84389,84390,84392,84394],{"class":35,"line":128},[33,84391,54636],{"class":47},[33,84393,54034],{"class":53522},[33,84395,53529],{"class":47},[33,84397,84398,84400,84402],{"class":35,"line":1753},[33,84399,54006],{"class":47},[33,84401,54021],{"class":53522},[33,84403,53529],{"class":47},[25148,84405,84407],{"id":84406},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84409,7430],{},[19,84411,84412],{},"substring(indexStart)",[19,84414,84415],{},"substring(indexStart, indexEnd)",[3413,84417,84418,84429,84441,84451],{},[331,84419,84420,84421,84424,84425,84428],{},"如果省略了 ",[30,84422,84423],{},"indexEnd","，则 ",[30,84426,84427],{},"substring()"," 提取字符直到字符串的末尾",[331,84430,84431,84432,84435,84436,84424,84438,84440],{},"如果 ",[30,84433,84434],{},"indexStart"," 等于 ",[30,84437,84423],{},[30,84439,84427],{}," 返回一个空字符串",[331,84442,84431,84443,84445,84446,84424,84448,84450],{},[30,84444,84434],{}," 大于 ",[30,84447,84423],{},[30,84449,84427],{}," 的效果就像交换了这两个参数一样",[331,84452,84453],{},"结束的索引号不包含想要截取的部分",[23,84455,84457],{"className":83698,"code":84456,"language":83700,"meta":28,"style":28},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[30,84458,84459,84471,84475,84509,84539,84543,84574,84578,84605,84635,84665,84669,84700],{"__ignoreMap":28},[33,84460,84461,84464,84466,84469],{"class":35,"line":36},[33,84462,84463],{"class":47},"const anyString ",[33,84465,57],{"class":39},[33,84467,84468],{"class":60}," \"Mozilla\"",[33,84470,3567],{"class":47},[33,84472,84473],{"class":35,"line":51},[33,84474,100],{"emptyLinePlaceholder":99},[33,84476,84477,84480,84482,84484,84486,84489,84491,84494,84496,84498,84500,84502,84504,84506],{"class":35,"line":64},[33,84478,84479],{"class":72},"console",[33,84481,2975],{"class":47},[33,84483,60465],{"class":72},[33,84485,133],{"class":47},[33,84487,84488],{"class":72},"anyString",[33,84490,2975],{"class":47},[33,84492,84493],{"class":72},"substring",[33,84495,133],{"class":47},[33,84497,2617],{"class":72},[33,84499,245],{"class":47},[33,84501,720],{"class":72},[33,84503,77465],{"class":47},[33,84505,35554],{"class":39},[33,84507,84508],{"class":60}," 'M'\n",[33,84510,84511,84513,84515,84517,84519,84521,84523,84525,84527,84529,84531,84533,84535,84537],{"class":35,"line":76},[33,84512,84479],{"class":72},[33,84514,2975],{"class":47},[33,84516,60465],{"class":72},[33,84518,133],{"class":47},[33,84520,84488],{"class":72},[33,84522,2975],{"class":47},[33,84524,84493],{"class":72},[33,84526,133],{"class":47},[33,84528,720],{"class":72},[33,84530,245],{"class":47},[33,84532,2617],{"class":72},[33,84534,77465],{"class":47},[33,84536,35554],{"class":39},[33,84538,84508],{"class":60},[33,84540,84541],{"class":35,"line":87},[33,84542,100],{"emptyLinePlaceholder":99},[33,84544,84545,84547,84549,84551,84553,84555,84557,84559,84561,84563,84565,84567,84569,84571],{"class":35,"line":96},[33,84546,84479],{"class":72},[33,84548,2975],{"class":47},[33,84550,60465],{"class":72},[33,84552,133],{"class":47},[33,84554,84488],{"class":72},[33,84556,2975],{"class":47},[33,84558,84493],{"class":72},[33,84560,133],{"class":47},[33,84562,2617],{"class":72},[33,84564,245],{"class":47},[33,84566,2765],{"class":72},[33,84568,77465],{"class":47},[33,84570,35554],{"class":39},[33,84572,84573],{"class":60}," 'Mozill'\n",[33,84575,84576],{"class":35,"line":103},[33,84577,100],{"emptyLinePlaceholder":99},[33,84579,84580,84582,84584,84586,84588,84590,84592,84594,84596,84598,84600,84602],{"class":35,"line":108},[33,84581,84479],{"class":72},[33,84583,2975],{"class":47},[33,84585,60465],{"class":72},[33,84587,133],{"class":47},[33,84589,84488],{"class":72},[33,84591,2975],{"class":47},[33,84593,84493],{"class":72},[33,84595,133],{"class":47},[33,84597,753],{"class":72},[33,84599,77465],{"class":47},[33,84601,35554],{"class":39},[33,84603,84604],{"class":60}," 'lla'\n",[33,84606,84607,84609,84611,84613,84615,84617,84619,84621,84623,84625,84627,84629,84631,84633],{"class":35,"line":119},[33,84608,84479],{"class":72},[33,84610,2975],{"class":47},[33,84612,60465],{"class":72},[33,84614,133],{"class":47},[33,84616,84488],{"class":72},[33,84618,2975],{"class":47},[33,84620,84493],{"class":72},[33,84622,133],{"class":47},[33,84624,753],{"class":72},[33,84626,245],{"class":47},[33,84628,2790],{"class":72},[33,84630,77521],{"class":47},[33,84632,35554],{"class":39},[33,84634,84604],{"class":60},[33,84636,84637,84639,84641,84643,84645,84647,84649,84651,84653,84655,84657,84659,84661,84663],{"class":35,"line":128},[33,84638,84479],{"class":72},[33,84640,2975],{"class":47},[33,84642,60465],{"class":72},[33,84644,133],{"class":47},[33,84646,84488],{"class":72},[33,84648,2975],{"class":47},[33,84650,84493],{"class":72},[33,84652,133],{"class":47},[33,84654,2790],{"class":72},[33,84656,245],{"class":47},[33,84658,753],{"class":72},[33,84660,77465],{"class":47},[33,84662,35554],{"class":39},[33,84664,84604],{"class":60},[33,84666,84667],{"class":35,"line":1753},[33,84668,100],{"emptyLinePlaceholder":99},[33,84670,84671,84673,84675,84677,84679,84681,84683,84685,84687,84689,84691,84693,84695,84697],{"class":35,"line":1763},[33,84672,84479],{"class":72},[33,84674,2975],{"class":47},[33,84676,60465],{"class":72},[33,84678,133],{"class":47},[33,84680,84488],{"class":72},[33,84682,2975],{"class":47},[33,84684,84493],{"class":72},[33,84686,133],{"class":47},[33,84688,2617],{"class":72},[33,84690,245],{"class":47},[33,84692,2790],{"class":72},[33,84694,77465],{"class":47},[33,84696,35554],{"class":39},[33,84698,84699],{"class":60}," 'Mozilla'\n",[33,84701,84702,84704,84706,84708,84710,84712,84714,84716,84718,84720,84722,84724,84726,84728],{"class":35,"line":1775},[33,84703,84479],{"class":72},[33,84705,2975],{"class":47},[33,84707,60465],{"class":72},[33,84709,133],{"class":47},[33,84711,84488],{"class":72},[33,84713,2975],{"class":47},[33,84715,84493],{"class":72},[33,84717,133],{"class":47},[33,84719,2617],{"class":72},[33,84721,245],{"class":47},[33,84723,1279],{"class":72},[33,84725,77465],{"class":47},[33,84727,35554],{"class":39},[33,84729,84699],{"class":60},[25148,84731,84733],{"id":84732},"_410533-startswith","4.10.5.3.3 startsWith",[19,84735,84736,84739,84740,84745,84746,84748,84749],{},[30,84737,84738],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2575,84741,84742],{},[30,84743,84744],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[30,84747,3636],{}," 或 ",[30,84750,68237],{},[23,84752,84754],{"className":79706,"code":84753,"language":79708,"meta":28,"style":28},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[30,84755,84756,84768,84787,84792,84812],{"__ignoreMap":28},[33,84757,84758,84760,84763,84765],{"class":35,"line":36},[33,84759,9038],{"class":39},[33,84761,84762],{"class":47}," str1 ",[33,84764,57],{"class":39},[33,84766,84767],{"class":60}," \"Saturday night plans\"\n",[33,84769,84770,84772,84774,84777,84780,84782,84785],{"class":35,"line":51},[33,84771,79743],{"class":47},[33,84773,60465],{"class":43},[33,84775,84776],{"class":47},"(str1.",[33,84778,84779],{"class":43},"startsWith",[33,84781,133],{"class":47},[33,84783,84784],{"class":60},"\"Sat\"",[33,84786,551],{"class":47},[33,84788,84789],{"class":35,"line":64},[33,84790,84791],{"class":2487},"\u002F\u002F Expected output: true\n",[33,84793,84794,84796,84798,84800,84802,84804,84806,84808,84810],{"class":35,"line":76},[33,84795,79743],{"class":47},[33,84797,60465],{"class":43},[33,84799,84776],{"class":47},[33,84801,84779],{"class":43},[33,84803,133],{"class":47},[33,84805,84784],{"class":60},[33,84807,245],{"class":47},[33,84809,730],{"class":72},[33,84811,551],{"class":47},[33,84813,84814],{"class":35,"line":87},[33,84815,84816],{"class":2487},"\u002F\u002F Expected output: false\n",[23,84818,84820],{"className":52855,"code":84819,"language":52857,"meta":28,"style":28},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[30,84821,84822,84827,84832,84836,84841,84846],{"__ignoreMap":28},[33,84823,84824],{"class":35,"line":36},[33,84825,84826],{"class":47},"startsWith(searchString)\n",[33,84828,84829],{"class":35,"line":51},[33,84830,84831],{"class":47},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[33,84833,84834],{"class":35,"line":64},[33,84835,100],{"emptyLinePlaceholder":99},[33,84837,84838],{"class":35,"line":76},[33,84839,84840],{"class":47},"const str3 = 'pink老师上课中'\n",[33,84842,84843],{"class":35,"line":87},[33,84844,84845],{"class":47},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[33,84847,84848],{"class":35,"line":96},[33,84849,84850],{"class":47},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[25148,84852,84854],{"id":84853},"_410534-includes","4.10.5.3.4 includes",[19,84856,84857],{},"includes(searchString) includes(searchString, position)",[328,84859,84860],{},[331,84861,84862],{},"searchString:",[19,84864,84865,84866,84868,84869,84874,84875,84880,84881,23738,84884,84887,84888,84891],{},"一个要在 ",[30,84867,3576],{}," 中查找的字符串。",[2663,84870,84873],{"href":84871,"rel":84872},"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",[26103],"不能是正则表达式","。所有非正则表达式的值都会被",[2663,84876,84879],{"href":84877,"rel":84878},"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",[26103],"强制转换为字符串","，因此如果该参数被省略或传入 ",[30,84882,84883],{},"undefined",[30,84885,84886],{},"includes()"," 方法会在字符串中搜索 ",[30,84889,84890],{},"\"undefined\"","，这通常不是你想要的",[328,84893,84894],{"start":51},[331,84895,84896,387],{},[30,84897,84898],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84900,84901,84902,84905,84906],{},"在字符串中开始搜索 ",[30,84903,84904],{},"searchString"," 的位置。默认值为 ",[30,84907,2617],{},[328,84909,84910],{"start":64},[331,84911,84912],{},"返回值：",[19,84914,84915,84916,84918,84919,84923,84924],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[30,84917,84904],{}," 为空字符串的情况），则返回 ",[2575,84920,84921],{},[30,84922,3636],{}," ，否则返回 ",[2575,84925,84926],{},[30,84927,68237],{},[328,84929,84930],{"start":76},[331,84931,84932],{},"异常：",[19,84934,84431,84935,16035,84937,84941],{},[30,84936,84904],{},[2663,84938,84940],{"href":84871,"rel":84939},[26103],"是一个正则表达式","，则会抛出",[19,84943,84944],{},"只要是有就是true，不需要非得以谁开头结尾",[23,84946,84948],{"className":79706,"code":84947,"language":79708,"meta":28,"style":28},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[30,84949,84950,84961,84984,85003,85023,85045,85064],{"__ignoreMap":28},[33,84951,84952,84954,84956,84958],{"class":35,"line":36},[33,84953,9038],{"class":39},[33,84955,81986],{"class":47},[33,84957,57],{"class":39},[33,84959,84960],{"class":60}," \"To be, or not to be, that is the question.\"\n",[33,84962,84963,84965,84967,84970,84973,84975,84978,84981],{"class":35,"line":51},[33,84964,79743],{"class":47},[33,84966,60465],{"class":43},[33,84968,84969],{"class":47},"(str.",[33,84971,84972],{"class":43},"includes",[33,84974,133],{"class":47},[33,84976,84977],{"class":60},"\"To be\"",[33,84979,84980],{"class":47},"))",[33,84982,84983],{"class":2487},"  \u002F\u002F true\n",[33,84985,84986,84988,84990,84992,84994,84996,84999,85001],{"class":35,"line":64},[33,84987,79743],{"class":47},[33,84989,60465],{"class":43},[33,84991,84969],{"class":47},[33,84993,84972],{"class":43},[33,84995,133],{"class":47},[33,84997,84998],{"class":60},"\"question\"",[33,85000,84980],{"class":47},[33,85002,84983],{"class":2487},[33,85004,85005,85007,85009,85011,85013,85015,85018,85020],{"class":35,"line":76},[33,85006,79743],{"class":47},[33,85008,60465],{"class":43},[33,85010,84969],{"class":47},[33,85012,84972],{"class":43},[33,85014,133],{"class":47},[33,85016,85017],{"class":60},"\"nonexistent\"",[33,85019,84980],{"class":47},[33,85021,85022],{"class":2487},"  \u002F\u002F false\n",[33,85024,85025,85027,85029,85031,85033,85035,85037,85039,85041,85043],{"class":35,"line":87},[33,85026,79743],{"class":47},[33,85028,60465],{"class":43},[33,85030,84969],{"class":47},[33,85032,84972],{"class":43},[33,85034,133],{"class":47},[33,85036,84977],{"class":60},[33,85038,245],{"class":47},[33,85040,720],{"class":72},[33,85042,84980],{"class":47},[33,85044,85022],{"class":2487},[33,85046,85047,85049,85051,85053,85055,85057,85060,85062],{"class":35,"line":96},[33,85048,79743],{"class":47},[33,85050,60465],{"class":43},[33,85052,84969],{"class":47},[33,85054,84972],{"class":43},[33,85056,133],{"class":47},[33,85058,85059],{"class":60},"\"TO BE\"",[33,85061,84980],{"class":47},[33,85063,85022],{"class":2487},[33,85065,85066,85068,85070,85072,85074,85076,85078,85080],{"class":35,"line":103},[33,85067,79743],{"class":47},[33,85069,60465],{"class":43},[33,85071,84969],{"class":47},[33,85073,84972],{"class":43},[33,85075,133],{"class":47},[33,85077,9898],{"class":60},[33,85079,84980],{"class":47},[33,85081,84983],{"class":2487},[25148,85083,85085],{"id":85084},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[23,85087,85089],{"className":55286,"code":85088,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,85090,85091,85099,85107,85112,85117,85122,85127,85132,85140],{"__ignoreMap":28},[33,85092,85093,85095,85097],{"class":35,"line":36},[33,85094,2226],{"class":47},[33,85096,54021],{"class":53522},[33,85098,53529],{"class":47},[33,85100,85101,85103,85105],{"class":35,"line":51},[33,85102,54364],{"class":47},[33,85104,54034],{"class":53522},[33,85106,53529],{"class":47},[33,85108,85109],{"class":35,"line":64},[33,85110,85111],{"class":47},"    const num = 10\n",[33,85113,85114],{"class":35,"line":76},[33,85115,85116],{"class":47},"    \u002F\u002F 强制转换\n",[33,85118,85119],{"class":35,"line":87},[33,85120,85121],{"class":47},"    console.log(String(num))\n",[33,85123,85124],{"class":35,"line":96},[33,85125,85126],{"class":47},"    \u002F\u002F toString()方法转换\n",[33,85128,85129],{"class":35,"line":103},[33,85130,85131],{"class":47},"    console.log(num.toString())\n",[33,85133,85134,85136,85138],{"class":35,"line":108},[33,85135,54636],{"class":47},[33,85137,54034],{"class":53522},[33,85139,53529],{"class":47},[33,85141,85142,85144,85146],{"class":35,"line":119},[33,85143,54006],{"class":47},[33,85145,54021],{"class":53522},[33,85147,53529],{"class":47},[25148,85149,85151],{"id":85150},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,85153,85154],{},[3736,85155],{"alt":28,"src":85156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[23,85158,85160],{"className":52855,"code":85159,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,85161,85162,85172,85186,85190,85198,85212,85232,85244,85252,85256,85264,85276,85284,85296,85301,85306,85311,85358,85374,85382,85390,85394],{"__ignoreMap":28},[33,85163,85164,85166,85168,85170],{"class":35,"line":36},[33,85165,53519],{"class":47},[33,85167,53523],{"class":53522},[33,85169,53526],{"class":43},[33,85171,53529],{"class":47},[33,85173,85174,85176,85178,85180,85182,85184],{"class":35,"line":51},[33,85175,2226],{"class":47},[33,85177,52857],{"class":53522},[33,85179,53538],{"class":43},[33,85181,57],{"class":47},[33,85183,53543],{"class":60},[33,85185,53529],{"class":47},[33,85187,85188],{"class":35,"line":64},[33,85189,100],{"emptyLinePlaceholder":99},[33,85191,85192,85194,85196],{"class":35,"line":76},[33,85193,2226],{"class":47},[33,85195,53556],{"class":53522},[33,85197,53529],{"class":47},[33,85199,85200,85202,85204,85206,85208,85210],{"class":35,"line":87},[33,85201,54364],{"class":47},[33,85203,53566],{"class":53522},[33,85205,53569],{"class":43},[33,85207,57],{"class":47},[33,85209,53574],{"class":60},[33,85211,53529],{"class":47},[33,85213,85214,85216,85218,85220,85222,85224,85226,85228,85230],{"class":35,"line":96},[33,85215,54364],{"class":47},[33,85217,53566],{"class":53522},[33,85219,17158],{"class":43},[33,85221,57],{"class":47},[33,85223,53613],{"class":60},[33,85225,53593],{"class":43},[33,85227,57],{"class":47},[33,85229,53620],{"class":60},[33,85231,53529],{"class":47},[33,85233,85234,85236,85238,85240,85242],{"class":35,"line":103},[33,85235,54364],{"class":47},[33,85237,53629],{"class":53522},[33,85239,53632],{"class":47},[33,85241,53629],{"class":53522},[33,85243,53529],{"class":47},[33,85245,85246,85248,85250],{"class":35,"line":108},[33,85247,54006],{"class":47},[33,85249,53556],{"class":53522},[33,85251,53529],{"class":47},[33,85253,85254],{"class":35,"line":119},[33,85255,100],{"emptyLinePlaceholder":99},[33,85257,85258,85260,85262],{"class":35,"line":128},[33,85259,2226],{"class":47},[33,85261,54021],{"class":53522},[33,85263,53529],{"class":47},[33,85265,85266,85268,85270,85272,85274],{"class":35,"line":1753},[33,85267,54364],{"class":47},[33,85269,53832],{"class":53522},[33,85271,57533],{"class":47},[33,85273,53832],{"class":53522},[33,85275,53529],{"class":47},[33,85277,85278,85280,85282],{"class":35,"line":1763},[33,85279,54364],{"class":47},[33,85281,54034],{"class":53522},[33,85283,53529],{"class":47},[33,85285,85286,85288,85291,85293],{"class":35,"line":1775},[33,85287,13462],{"class":39},[33,85289,85290],{"class":72}," gift",[33,85292,15804],{"class":39},[33,85294,85295],{"class":60}," '50g的茶叶，清洗球'\n",[33,85297,85298],{"class":35,"line":1780},[33,85299,85300],{"class":2487},"    \u002F\u002F 1.把字符串拆分为数组\n",[33,85302,85303],{"class":35,"line":1785},[33,85304,85305],{"class":2487},"    \u002F\u002F console.log(gift.split(','))\n",[33,85307,85308],{"class":35,"line":1940},[33,85309,85310],{"class":2487},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[33,85312,85313,85315,85317,85319,85322,85325,85327,85330,85332,85334,85336,85338,85340,85343,85345,85348,85350,85352,85354,85356],{"class":35,"line":2183},[33,85314,13462],{"class":39},[33,85316,76132],{"class":72},[33,85318,15804],{"class":39},[33,85320,85321],{"class":47}," gift.",[33,85323,85324],{"class":43},"split",[33,85326,133],{"class":47},[33,85328,85329],{"class":60},"'，'",[33,85331,33057],{"class":47},[33,85333,1303],{"class":43},[33,85335,133],{"class":47},[33,85337,82006],{"class":289},[33,85339,82009],{"class":39},[33,85341,85342],{"class":60}," `\u003Cspan>【赠品】${",[33,85344,82006],{"class":47},[33,85346,85347],{"class":60},"}\u003C\u002Fspan>\u003Cbr>`",[33,85349,33057],{"class":47},[33,85351,76435],{"class":43},[33,85353,133],{"class":47},[33,85355,76440],{"class":60},[33,85357,226],{"class":47},[33,85359,85360,85362,85364,85366,85368,85370,85372],{"class":35,"line":2208},[33,85361,54626],{"class":47},[33,85363,56618],{"class":43},[33,85365,133],{"class":47},[33,85367,84140],{"class":60},[33,85369,76461],{"class":47},[33,85371,57],{"class":39},[33,85373,76198],{"class":47},[33,85375,85376,85378,85380],{"class":35,"line":2234},[33,85377,54636],{"class":47},[33,85379,54034],{"class":53522},[33,85381,53529],{"class":47},[33,85383,85384,85386,85388],{"class":35,"line":2239},[33,85385,54006],{"class":47},[33,85387,54021],{"class":53522},[33,85389,53529],{"class":47},[33,85391,85392],{"class":35,"line":2247},[33,85393,100],{"emptyLinePlaceholder":99},[33,85395,85396,85398,85400],{"class":35,"line":2255},[33,85397,54006],{"class":47},[33,85399,52857],{"class":53522},[33,85401,53529],{"class":47},[24236,85403,85405],{"id":85404},"_41054-number","4.10.5.4 Number",[19,85407,85408],{},[3736,85409],{"alt":28,"src":85410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85412,85413],{},"整数也可以进行toFixed来保留小数",[19,85415,85416],{},"比如：",[19,85418,85419],{},"const price=10",[19,85421,85422],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[24236,85424,85426],{"id":85425},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85428,85429],{},[3736,85430],{"alt":28,"src":85431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[23,85433,85435],{"className":52855,"code":85434,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,85436,85437,85447,85461,85465,85473,85487,85507,85519,85527,85533,85543,85553,85563,85567,85571,85577,85589,85603,85607,85611,85617,85629,85645,85655,85671,85675,85679,85685,85695,85705,85709,85713,85721,85733,85745,85757,85761,85765,85773,85785,85789,85793,85804,85814,85826,85838,85848,85852,85856,85864,85873,85885,85895,85905,85909,85913,85921,85930,85937,85947,85959,85963,85967,85976,85986,85997,86009,86021,86025,86029,86038,86048,86059,86063,86067,86073,86085,86097,86107,86117,86135,86147,86151,86155,86164,86176,86186,86196,86208,86212,86220,86228,86232,86240,86254,86262,86276,86304,86312,86320,86330,86334,86342,86350,86359,86367,86376,86386,86390,86394,86402,86410,86419,86427,86435,86448,86452,86456,86464,86472,86481,86489,86497,86512,86516,86520,86528,86536,86545,86553,86561,86575,86583,86587,86591,86596,86622,86627,86664,86669,86692,86697,86751,86756,86792,86796,86802,86807,86816,86830,86839,86858,86867,86877,86882,86887,86900,86905,86959,86985,86993,87001,87005],{"__ignoreMap":28},[33,85438,85439,85441,85443,85445],{"class":35,"line":36},[33,85440,53519],{"class":47},[33,85442,53523],{"class":53522},[33,85444,53526],{"class":43},[33,85446,53529],{"class":47},[33,85448,85449,85451,85453,85455,85457,85459],{"class":35,"line":51},[33,85450,2226],{"class":47},[33,85452,52857],{"class":53522},[33,85454,53538],{"class":43},[33,85456,57],{"class":47},[33,85458,53543],{"class":60},[33,85460,53529],{"class":47},[33,85462,85463],{"class":35,"line":64},[33,85464,100],{"emptyLinePlaceholder":99},[33,85466,85467,85469,85471],{"class":35,"line":76},[33,85468,2226],{"class":47},[33,85470,53556],{"class":53522},[33,85472,53529],{"class":47},[33,85474,85475,85477,85479,85481,85483,85485],{"class":35,"line":87},[33,85476,54364],{"class":47},[33,85478,53566],{"class":53522},[33,85480,53569],{"class":43},[33,85482,57],{"class":47},[33,85484,53574],{"class":60},[33,85486,53529],{"class":47},[33,85488,85489,85491,85493,85495,85497,85499,85501,85503,85505],{"class":35,"line":96},[33,85490,54364],{"class":47},[33,85492,53566],{"class":53522},[33,85494,17158],{"class":43},[33,85496,57],{"class":47},[33,85498,53613],{"class":60},[33,85500,53593],{"class":43},[33,85502,57],{"class":47},[33,85504,53620],{"class":60},[33,85506,53529],{"class":47},[33,85508,85509,85511,85513,85515,85517],{"class":35,"line":103},[33,85510,54364],{"class":47},[33,85512,53629],{"class":53522},[33,85514,53632],{"class":47},[33,85516,53629],{"class":53522},[33,85518,53529],{"class":47},[33,85520,85521,85523,85525],{"class":35,"line":108},[33,85522,54364],{"class":47},[33,85524,2331],{"class":53522},[33,85526,53529],{"class":47},[33,85528,85529,85531],{"class":35,"line":119},[33,85530,8649],{"class":53522},[33,85532,17810],{"class":47},[33,85534,85535,85537,85539,85541],{"class":35,"line":128},[33,85536,56914],{"class":72},[33,85538,996],{"class":47},[33,85540,2617],{"class":72},[33,85542,3567],{"class":47},[33,85544,85545,85547,85549,85551],{"class":35,"line":1753},[33,85546,56925],{"class":72},[33,85548,996],{"class":47},[33,85550,2617],{"class":72},[33,85552,3567],{"class":47},[33,85554,85555,85557,85559,85561],{"class":35,"line":1763},[33,85556,74809],{"class":72},[33,85558,996],{"class":47},[33,85560,62723],{"class":72},[33,85562,3567],{"class":47},[33,85564,85565],{"class":35,"line":1775},[33,85566,4446],{"class":47},[33,85568,85569],{"class":35,"line":1780},[33,85570,100],{"emptyLinePlaceholder":99},[33,85572,85573,85575],{"class":35,"line":1785},[33,85574,64341],{"class":43},[33,85576,17810],{"class":47},[33,85578,85579,85581,85583,85585,85587],{"class":35,"line":1940},[33,85580,56990],{"class":72},[33,85582,996],{"class":47},[33,85584,80785],{"class":72},[33,85586,53713],{"class":39},[33,85588,3567],{"class":47},[33,85590,85591,85593,85595,85597,85599,85601],{"class":35,"line":2183},[33,85592,56925],{"class":72},[33,85594,996],{"class":47},[33,85596,2734],{"class":72},[33,85598,53713],{"class":39},[33,85600,53777],{"class":72},[33,85602,3567],{"class":47},[33,85604,85605],{"class":35,"line":2208},[33,85606,4446],{"class":47},[33,85608,85609],{"class":35,"line":2234},[33,85610,100],{"emptyLinePlaceholder":99},[33,85612,85613,85615],{"class":35,"line":2239},[33,85614,80836],{"class":43},[33,85616,17810],{"class":47},[33,85618,85619,85621,85623,85625,85627],{"class":35,"line":2247},[33,85620,56914],{"class":72},[33,85622,996],{"class":47},[33,85624,2992],{"class":72},[33,85626,53713],{"class":39},[33,85628,3567],{"class":47},[33,85630,85631,85633,85635,85637,85639,85641,85643],{"class":35,"line":2255},[33,85632,64078],{"class":72},[33,85634,996],{"class":47},[33,85636,30358],{"class":72},[33,85638,80891],{"class":72},[33,85640,80894],{"class":72},[33,85642,3109],{"class":39},[33,85644,3567],{"class":47},[33,85646,85647,85649,85651,85653],{"class":35,"line":3992},[33,85648,57228],{"class":72},[33,85650,996],{"class":47},[33,85652,53698],{"class":72},[33,85654,3567],{"class":47},[33,85656,85657,85659,85661,85663,85665,85667,85669],{"class":35,"line":4009},[33,85658,64195],{"class":72},[33,85660,996],{"class":47},[33,85662,720],{"class":72},[33,85664,53713],{"class":39},[33,85666,53742],{"class":72},[33,85668,64462],{"class":72},[33,85670,3567],{"class":47},[33,85672,85673],{"class":35,"line":4014},[33,85674,4446],{"class":47},[33,85676,85677],{"class":35,"line":4019},[33,85678,100],{"emptyLinePlaceholder":99},[33,85680,85681,85683],{"class":35,"line":4024},[33,85682,80954],{"class":43},[33,85684,17810],{"class":47},[33,85686,85687,85689,85691,85693],{"class":35,"line":4038},[33,85688,64243],{"class":72},[33,85690,996],{"class":47},[33,85692,64248],{"class":72},[33,85694,3567],{"class":47},[33,85696,85697,85699,85701,85703],{"class":35,"line":4043},[33,85698,57103],{"class":72},[33,85700,996],{"class":47},[33,85702,64036],{"class":72},[33,85704,3567],{"class":47},[33,85706,85707],{"class":35,"line":4834},[33,85708,4446],{"class":47},[33,85710,85711],{"class":35,"line":4848},[33,85712,100],{"emptyLinePlaceholder":99},[33,85714,85715,85717,85719],{"class":35,"line":4856},[33,85716,80836],{"class":43},[33,85718,57833],{"class":53522},[33,85720,17810],{"class":47},[33,85722,85723,85725,85727,85729,85731],{"class":35,"line":4861},[33,85724,56990],{"class":72},[33,85726,996],{"class":47},[33,85728,3029],{"class":72},[33,85730,53713],{"class":39},[33,85732,3567],{"class":47},[33,85734,85735,85737,85739,85741,85743],{"class":35,"line":4867},[33,85736,57004],{"class":72},[33,85738,996],{"class":47},[33,85740,3029],{"class":72},[33,85742,53713],{"class":39},[33,85744,3567],{"class":47},[33,85746,85747,85749,85751,85753,85755],{"class":35,"line":4873},[33,85748,63968],{"class":72},[33,85750,996],{"class":47},[33,85752,758],{"class":72},[33,85754,53713],{"class":39},[33,85756,3567],{"class":47},[33,85758,85759],{"class":35,"line":4878},[33,85760,4446],{"class":47},[33,85762,85763],{"class":35,"line":10194},[33,85764,100],{"emptyLinePlaceholder":99},[33,85766,85767,85769,85771],{"class":35,"line":10218},[33,85768,80836],{"class":43},[33,85770,64522],{"class":43},[33,85772,17810],{"class":47},[33,85774,85775,85777,85779,85781,85783],{"class":35,"line":10223},[33,85776,56990],{"class":72},[33,85778,996],{"class":47},[33,85780,3983],{"class":72},[33,85782,53713],{"class":39},[33,85784,3567],{"class":47},[33,85786,85787],{"class":35,"line":10229},[33,85788,4446],{"class":47},[33,85790,85791],{"class":35,"line":10256},[33,85792,100],{"emptyLinePlaceholder":99},[33,85794,85795,85797,85799,85802],{"class":35,"line":10261},[33,85796,80836],{"class":43},[33,85798,64522],{"class":43},[33,85800,85801],{"class":43}," .tag",[33,85803,17810],{"class":47},[33,85805,85806,85808,85810,85812],{"class":35,"line":10267},[33,85807,57228],{"class":72},[33,85809,996],{"class":47},[33,85811,63087],{"class":72},[33,85813,3567],{"class":47},[33,85815,85816,85818,85820,85822,85824],{"class":35,"line":10279},[33,85817,56914],{"class":72},[33,85819,996],{"class":47},[33,85821,725],{"class":72},[33,85823,53713],{"class":39},[33,85825,3567],{"class":47},[33,85827,85828,85830,85832,85834,85836],{"class":35,"line":10291},[33,85829,57141],{"class":72},[33,85831,996],{"class":47},[33,85833,2915],{"class":72},[33,85835,53713],{"class":39},[33,85837,3567],{"class":47},[33,85839,85840,85842,85844,85846],{"class":35,"line":10303},[33,85841,59634],{"class":72},[33,85843,996],{"class":47},[33,85845,64288],{"class":72},[33,85847,3567],{"class":47},[33,85849,85850],{"class":35,"line":11961},[33,85851,4446],{"class":47},[33,85853,85854],{"class":35,"line":11986},[33,85855,100],{"emptyLinePlaceholder":99},[33,85857,85858,85860,85862],{"class":35,"line":12009},[33,85859,80836],{"class":43},[33,85861,81128],{"class":43},[33,85863,33696],{"class":47},[33,85865,85866,85868,85871],{"class":35,"line":12033},[33,85867,80836],{"class":43},[33,85869,85870],{"class":43}," .sub-total",[33,85872,17810],{"class":47},[33,85874,85875,85877,85879,85881,85883],{"class":35,"line":12038},[33,85876,57141],{"class":72},[33,85878,996],{"class":47},[33,85880,248],{"class":72},[33,85882,53713],{"class":39},[33,85884,3567],{"class":47},[33,85886,85887,85889,85891,85893],{"class":35,"line":12043},[33,85888,59634],{"class":72},[33,85890,996],{"class":47},[33,85892,81151],{"class":72},[33,85894,3567],{"class":47},[33,85896,85897,85899,85901,85903],{"class":35,"line":12048},[33,85898,64055],{"class":72},[33,85900,996],{"class":47},[33,85902,720],{"class":72},[33,85904,3567],{"class":47},[33,85906,85907],{"class":35,"line":12057},[33,85908,4446],{"class":47},[33,85910,85911],{"class":35,"line":12062},[33,85912,100],{"emptyLinePlaceholder":99},[33,85914,85915,85917,85919],{"class":35,"line":12068},[33,85916,80836],{"class":43},[33,85918,81168],{"class":43},[33,85920,33696],{"class":47},[33,85922,85923,85925,85928],{"class":35,"line":12089},[33,85924,80836],{"class":43},[33,85926,85927],{"class":43}," .sub-total::before",[33,85929,33696],{"class":47},[33,85931,85932,85935],{"class":35,"line":12095},[33,85933,85934],{"class":43},"    .amount::before",[33,85936,17810],{"class":47},[33,85938,85939,85941,85943,85945],{"class":35,"line":12109},[33,85940,81175],{"class":72},[33,85942,996],{"class":47},[33,85944,81180],{"class":60},[33,85946,3567],{"class":47},[33,85948,85949,85951,85953,85955,85957],{"class":35,"line":12115},[33,85950,57141],{"class":72},[33,85952,996],{"class":47},[33,85954,2915],{"class":72},[33,85956,53713],{"class":39},[33,85958,3567],{"class":47},[33,85960,85961],{"class":35,"line":12142},[33,85962,4446],{"class":47},[33,85964,85965],{"class":35,"line":12151},[33,85966,100],{"emptyLinePlaceholder":99},[33,85968,85969,85971,85974],{"class":35,"line":12157},[33,85970,80836],{"class":43},[33,85972,85973],{"class":43}," .spec",[33,85975,17810],{"class":47},[33,85977,85978,85980,85982,85984],{"class":35,"line":12165},[33,85979,64055],{"class":72},[33,85981,996],{"class":47},[33,85983,725],{"class":72},[33,85985,3567],{"class":47},[33,85987,85988,85990,85992,85995],{"class":35,"line":12170},[33,85989,59634],{"class":72},[33,85991,996],{"class":47},[33,85993,85994],{"class":72},"#888",[33,85996,3567],{"class":47},[33,85998,85999,86001,86003,86005,86007],{"class":35,"line":18842},[33,86000,57141],{"class":72},[33,86002,996],{"class":47},[33,86004,2966],{"class":72},[33,86006,53713],{"class":39},[33,86008,3567],{"class":47},[33,86010,86011,86013,86015,86017,86019],{"class":35,"line":18848},[33,86012,64218],{"class":72},[33,86014,996],{"class":47},[33,86016,1284],{"class":72},[33,86018,53713],{"class":39},[33,86020,3567],{"class":47},[33,86022,86023],{"class":35,"line":18871},[33,86024,4446],{"class":47},[33,86026,86027],{"class":35,"line":18877},[33,86028,100],{"emptyLinePlaceholder":99},[33,86030,86031,86033,86036],{"class":35,"line":18900},[33,86032,80836],{"class":43},[33,86034,86035],{"class":43}," .count",[33,86037,17810],{"class":47},[33,86039,86040,86042,86044,86046],{"class":35,"line":18914},[33,86041,64055],{"class":72},[33,86043,996],{"class":47},[33,86045,720],{"class":72},[33,86047,3567],{"class":47},[33,86049,86050,86052,86054,86057],{"class":35,"line":18934},[33,86051,59634],{"class":72},[33,86053,996],{"class":47},[33,86055,86056],{"class":72},"#aaa",[33,86058,3567],{"class":47},[33,86060,86061],{"class":35,"line":18940},[33,86062,4446],{"class":47},[33,86064,86065],{"class":35,"line":18951},[33,86066,100],{"emptyLinePlaceholder":99},[33,86068,86069,86071],{"class":35,"line":18974},[33,86070,74688],{"class":43},[33,86072,17810],{"class":47},[33,86074,86075,86077,86079,86081,86083],{"class":35,"line":18996},[33,86076,56990],{"class":72},[33,86078,996],{"class":47},[33,86080,80785],{"class":72},[33,86082,53713],{"class":39},[33,86084,3567],{"class":47},[33,86086,86087,86089,86091,86093,86095],{"class":35,"line":19001},[33,86088,56925],{"class":72},[33,86090,996],{"class":47},[33,86092,2617],{"class":72},[33,86094,53777],{"class":72},[33,86096,3567],{"class":47},[33,86098,86099,86101,86103,86105],{"class":35,"line":19007},[33,86100,57228],{"class":72},[33,86102,996],{"class":47},[33,86104,53698],{"class":72},[33,86106,3567],{"class":47},[33,86108,86109,86111,86113,86115],{"class":35,"line":19021},[33,86110,57239],{"class":72},[33,86112,996],{"class":47},[33,86114,53801],{"class":72},[33,86116,3567],{"class":47},[33,86118,86119,86122,86124,86126,86128,86130,86133],{"class":35,"line":19034},[33,86120,86121],{"class":72},"      border-top",[33,86123,996],{"class":47},[33,86125,720],{"class":72},[33,86127,53713],{"class":39},[33,86129,53742],{"class":72},[33,86131,86132],{"class":72}," #4e4e4e",[33,86134,3567],{"class":47},[33,86136,86137,86139,86141,86143,86145],{"class":35,"line":19039},[33,86138,56914],{"class":72},[33,86140,996],{"class":47},[33,86142,1284],{"class":72},[33,86144,53713],{"class":39},[33,86146,3567],{"class":47},[33,86148,86149],{"class":35,"line":19053},[33,86150,4446],{"class":47},[33,86152,86153],{"class":35,"line":19058},[33,86154,100],{"emptyLinePlaceholder":99},[33,86156,86157,86159,86162],{"class":35,"line":19064},[33,86158,74688],{"class":43},[33,86160,86161],{"class":43}," .amount",[33,86163,17810],{"class":47},[33,86165,86166,86168,86170,86172,86174],{"class":35,"line":19069},[33,86167,57141],{"class":72},[33,86169,996],{"class":47},[33,86171,248],{"class":72},[33,86173,53713],{"class":39},[33,86175,3567],{"class":47},[33,86177,86178,86180,86182,86184],{"class":35,"line":19083},[33,86179,59634],{"class":72},[33,86181,996],{"class":47},[33,86183,81151],{"class":72},[33,86185,3567],{"class":47},[33,86187,86188,86190,86192,86194],{"class":35,"line":19088},[33,86189,64552],{"class":72},[33,86191,996],{"class":47},[33,86193,53710],{"class":72},[33,86195,3567],{"class":47},[33,86197,86198,86200,86202,86204,86206],{"class":35,"line":19093},[33,86199,63968],{"class":72},[33,86201,996],{"class":47},[33,86203,3071],{"class":72},[33,86205,53713],{"class":39},[33,86207,3567],{"class":47},[33,86209,86210],{"class":35,"line":19107},[33,86211,4446],{"class":47},[33,86213,86214,86216,86218],{"class":35,"line":19119},[33,86215,54636],{"class":47},[33,86217,2331],{"class":53522},[33,86219,53529],{"class":47},[33,86221,86222,86224,86226],{"class":35,"line":19124},[33,86223,54006],{"class":47},[33,86225,53556],{"class":53522},[33,86227,53529],{"class":47},[33,86229,86230],{"class":35,"line":19137},[33,86231,100],{"emptyLinePlaceholder":99},[33,86233,86234,86236,86238],{"class":35,"line":19142},[33,86235,2226],{"class":47},[33,86237,54021],{"class":53522},[33,86239,53529],{"class":47},[33,86241,86242,86244,86246,86248,86250,86252],{"class":35,"line":19147},[33,86243,54364],{"class":47},[33,86245,53832],{"class":53522},[33,86247,55705],{"class":43},[33,86249,57],{"class":47},[33,86251,64826],{"class":60},[33,86253,53529],{"class":47},[33,86255,86256,86258,86260],{"class":35,"line":19152},[33,86257,54636],{"class":47},[33,86259,53832],{"class":53522},[33,86261,53529],{"class":47},[33,86263,86264,86266,86268,86270,86272,86274],{"class":35,"line":19165},[33,86265,54364],{"class":47},[33,86267,53832],{"class":53522},[33,86269,55705],{"class":43},[33,86271,57],{"class":47},[33,86273,64798],{"class":60},[33,86275,53529],{"class":47},[33,86277,86278,86280,86282,86285,86287,86289,86291,86294,86296,86298,86300,86302],{"class":35,"line":19170},[33,86279,53563],{"class":47},[33,86281,53832],{"class":53522},[33,86283,86284],{"class":47},">合计：\u003C",[33,86286,33],{"class":53522},[33,86288,55705],{"class":43},[33,86290,57],{"class":47},[33,86292,86293],{"class":60},"\"amount\"",[33,86295,57533],{"class":47},[33,86297,33],{"class":53522},[33,86299,57533],{"class":47},[33,86301,53832],{"class":53522},[33,86303,53529],{"class":47},[33,86305,86306,86308,86310],{"class":35,"line":34859},[33,86307,54636],{"class":47},[33,86309,53832],{"class":53522},[33,86311,53529],{"class":47},[33,86313,86314,86316,86318],{"class":35,"line":34865},[33,86315,54364],{"class":47},[33,86317,54034],{"class":53522},[33,86319,53529],{"class":47},[33,86321,86322,86324,86326,86328],{"class":35,"line":34871},[33,86323,13462],{"class":39},[33,86325,81588],{"class":72},[33,86327,15804],{"class":39},[33,86329,1087],{"class":47},[33,86331,86332],{"class":35,"line":34877},[33,86333,81597],{"class":47},[33,86335,86336,86338,86340],{"class":35,"line":34883},[33,86337,81602],{"class":47},[33,86339,81605],{"class":60},[33,86341,33696],{"class":47},[33,86343,86344,86346,86348],{"class":35,"line":34894},[33,86345,81612],{"class":47},[33,86347,81615],{"class":60},[33,86349,33696],{"class":47},[33,86351,86352,86354,86357],{"class":35,"line":34900},[33,86353,81622],{"class":47},[33,86355,86356],{"class":72},"289.9",[33,86358,33696],{"class":47},[33,86360,86361,86363,86365],{"class":35,"line":34920},[33,86362,81632],{"class":47},[33,86364,81635],{"class":60},[33,86366,33696],{"class":47},[33,86368,86369,86372,86374],{"class":35,"line":34926},[33,86370,86371],{"class":47},"        count: ",[33,86373,725],{"class":72},[33,86375,33696],{"class":47},[33,86377,86378,86381,86384],{"class":35,"line":34937},[33,86379,86380],{"class":47},"        spec: { color: ",[33,86382,86383],{"class":60},"'白色'",[33,86385,57822],{"class":47},[33,86387,86388],{"class":35,"line":34943},[33,86389,80103],{"class":47},[33,86391,86392],{"class":35,"line":34949},[33,86393,81597],{"class":47},[33,86395,86396,86398,86400],{"class":35,"line":34955},[33,86397,81602],{"class":47},[33,86399,81696],{"class":60},[33,86401,33696],{"class":47},[33,86403,86404,86406,86408],{"class":35,"line":34961},[33,86405,81612],{"class":47},[33,86407,81705],{"class":60},[33,86409,33696],{"class":47},[33,86411,86412,86414,86417],{"class":35,"line":34967},[33,86413,81622],{"class":47},[33,86415,86416],{"class":72},"109.8",[33,86418,33696],{"class":47},[33,86420,86421,86423,86425],{"class":35,"line":34973},[33,86422,81632],{"class":47},[33,86424,81723],{"class":60},[33,86426,33696],{"class":47},[33,86428,86429,86431,86433],{"class":35,"line":34979},[33,86430,86371],{"class":47},[33,86432,730],{"class":72},[33,86434,33696],{"class":47},[33,86436,86437,86440,86442,86444,86446],{"class":35,"line":34999},[33,86438,86439],{"class":47},"        spec: { size: ",[33,86441,84112],{"class":60},[33,86443,57682],{"class":47},[33,86445,84117],{"class":60},[33,86447,57822],{"class":47},[33,86449,86450],{"class":35,"line":35005},[33,86451,80103],{"class":47},[33,86453,86454],{"class":35,"line":35021},[33,86455,81597],{"class":47},[33,86457,86458,86460,86462],{"class":35,"line":35027},[33,86459,81602],{"class":47},[33,86461,81740],{"class":60},[33,86463,33696],{"class":47},[33,86465,86466,86468,86470],{"class":35,"line":35041},[33,86467,81612],{"class":47},[33,86469,81749],{"class":60},[33,86471,33696],{"class":47},[33,86473,86474,86476,86479],{"class":35,"line":35047},[33,86475,81622],{"class":47},[33,86477,86478],{"class":72},"488",[33,86480,33696],{"class":47},[33,86482,86483,86485,86487],{"class":35,"line":35062},[33,86484,81632],{"class":47},[33,86486,81767],{"class":60},[33,86488,33696],{"class":47},[33,86490,86491,86493,86495],{"class":35,"line":35068},[33,86492,86371],{"class":47},[33,86494,720],{"class":72},[33,86496,33696],{"class":47},[33,86498,86499,86501,86504,86507,86510],{"class":35,"line":35077},[33,86500,86380],{"class":47},[33,86502,86503],{"class":60},"'青色'",[33,86505,86506],{"class":47},", sum: ",[33,86508,86509],{"class":60},"'一大四小'",[33,86511,57822],{"class":47},[33,86513,86514],{"class":35,"line":35083},[33,86515,80103],{"class":47},[33,86517,86518],{"class":35,"line":35092},[33,86519,81597],{"class":47},[33,86521,86522,86524,86526],{"class":35,"line":35098},[33,86523,81602],{"class":47},[33,86525,81784],{"class":60},[33,86527,33696],{"class":47},[33,86529,86530,86532,86534],{"class":35,"line":35104},[33,86531,81612],{"class":47},[33,86533,81793],{"class":60},[33,86535,33696],{"class":47},[33,86537,86538,86540,86543],{"class":35,"line":35113},[33,86539,81622],{"class":47},[33,86541,86542],{"class":72},"139",[33,86544,33696],{"class":47},[33,86546,86547,86549,86551],{"class":35,"line":35119},[33,86548,81632],{"class":47},[33,86550,81811],{"class":60},[33,86552,33696],{"class":47},[33,86554,86555,86557,86559],{"class":35,"line":35130},[33,86556,86371],{"class":47},[33,86558,720],{"class":72},[33,86560,33696],{"class":47},[33,86562,86563,86565,86568,86570,86573],{"class":35,"line":35136},[33,86564,86439],{"class":47},[33,86566,86567],{"class":60},"'小号'",[33,86569,57682],{"class":47},[33,86571,86572],{"class":60},"'紫色'",[33,86574,57688],{"class":47},[33,86576,86577,86580],{"class":35,"line":35155},[33,86578,86579],{"class":47},"        gift: ",[33,86581,86582],{"class":60},"'50g茶叶,清洗球'\n",[33,86584,86585],{"class":35,"line":35161},[33,86586,54617],{"class":47},[33,86588,86589],{"class":35,"line":35172},[33,86590,55328],{"class":47},[33,86592,86593],{"class":35,"line":35178},[33,86594,86595],{"class":2487},"    \u002F\u002F  1.根据数据渲染页面\n",[33,86597,86598,86600,86602,86604,86606,86608,86610,86612,86614,86616,86618,86620],{"class":35,"line":35198},[33,86599,54626],{"class":47},[33,86601,56618],{"class":43},[33,86603,133],{"class":47},[33,86605,82111],{"class":60},[33,86607,76461],{"class":47},[33,86609,57],{"class":39},[33,86611,82258],{"class":47},[33,86613,1303],{"class":43},[33,86615,133],{"class":47},[33,86617,82006],{"class":289},[33,86619,82009],{"class":39},[33,86621,17810],{"class":47},[33,86623,86624],{"class":35,"line":35214},[33,86625,86626],{"class":2487},"      \u002F\u002F 对象解构\n",[33,86628,86629,86631,86633,86635,86637,86639,86641,86644,86646,86648,86650,86653,86655,86658,86660,86662],{"class":35,"line":35220},[33,86630,60446],{"class":39},[33,86632,82018],{"class":47},[33,86634,82030],{"class":72},[33,86636,245],{"class":47},[33,86638,207],{"class":72},[33,86640,245],{"class":47},[33,86642,86643],{"class":72},"count",[33,86645,245],{"class":47},[33,86647,82025],{"class":72},[33,86649,245],{"class":47},[33,86651,86652],{"class":72},"spec",[33,86654,245],{"class":47},[33,86656,86657],{"class":72},"gift",[33,86659,82033],{"class":47},[33,86661,57],{"class":39},[33,86663,82038],{"class":47},[33,86665,86666],{"class":35,"line":35234},[33,86667,86668],{"class":2487},"      \u002F\u002F 规格文字模块处理\n",[33,86670,86671,86673,86676,86678,86680,86682,86684,86686,86688,86690],{"class":35,"line":35240},[33,86672,60446],{"class":39},[33,86674,86675],{"class":72}," text",[33,86677,15804],{"class":39},[33,86679,84147],{"class":47},[33,86681,84150],{"class":43},[33,86683,84153],{"class":47},[33,86685,76435],{"class":43},[33,86687,133],{"class":47},[33,86689,84160],{"class":60},[33,86691,226],{"class":47},[33,86693,86694],{"class":35,"line":35246},[33,86695,86696],{"class":2487},"      \u002F\u002F 处理赠品模块\n",[33,86698,86699,86701,86703,86705,86708,86710,86712,86714,86716,86719,86721,86723,86725,86727,86729,86732,86734,86737,86739,86741,86743,86745,86747,86749],{"class":35,"line":35257},[33,86700,60446],{"class":39},[33,86702,76132],{"class":72},[33,86704,15804],{"class":39},[33,86706,86707],{"class":47}," gift ",[33,86709,3393],{"class":39},[33,86711,85321],{"class":47},[33,86713,85324],{"class":43},[33,86715,133],{"class":47},[33,86717,86718],{"class":60},"','",[33,86720,33057],{"class":47},[33,86722,1303],{"class":43},[33,86724,133],{"class":47},[33,86726,82006],{"class":289},[33,86728,82009],{"class":39},[33,86730,86731],{"class":60}," `\u003Cspan class=\"tag\">【赠品】${",[33,86733,82006],{"class":47},[33,86735,86736],{"class":60},"}\u003C\u002Fspan>`",[33,86738,33057],{"class":47},[33,86740,76435],{"class":43},[33,86742,133],{"class":47},[33,86744,76440],{"class":60},[33,86746,15954],{"class":47},[33,86748,387],{"class":39},[33,86750,72319],{"class":60},[33,86752,86753],{"class":35,"line":35263},[33,86754,86755],{"class":2487},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[33,86757,86758,86760,86763,86765,86768,86770,86772,86774,86777,86779,86781,86783,86786,86788,86790],{"class":35,"line":35269},[33,86759,60446],{"class":39},[33,86761,86762],{"class":72}," subtotal",[33,86764,15804],{"class":39},[33,86766,86767],{"class":47}," ((price ",[33,86769,657],{"class":39},[33,86771,8001],{"class":72},[33,86773,8764],{"class":39},[33,86775,86776],{"class":47}," count) ",[33,86778,3001],{"class":39},[33,86780,8001],{"class":72},[33,86782,33057],{"class":47},[33,86784,86785],{"class":43},"toFixed",[33,86787,133],{"class":47},[33,86789,725],{"class":72},[33,86791,226],{"class":47},[33,86793,86794],{"class":35,"line":35279},[33,86795,100],{"emptyLinePlaceholder":99},[33,86797,86798,86800],{"class":35,"line":35285},[33,86799,76195],{"class":39},[33,86801,72383],{"class":60},[33,86803,86804],{"class":35,"line":35296},[33,86805,86806],{"class":60},"        \u003Cdiv class=\"item\">\n",[33,86808,86809,86812,86814],{"class":35,"line":35302},[33,86810,86811],{"class":60},"          \u003Cimg src=\"${",[33,86813,82030],{"class":47},[33,86815,82062],{"class":60},[33,86817,86818,86821,86823,86826,86828],{"class":35,"line":35312},[33,86819,86820],{"class":60},"          \u003Cp class=\"name\">${",[33,86822,207],{"class":47},[33,86824,86825],{"class":60},"}${",[33,86827,3576],{"class":47},[33,86829,82072],{"class":60},[33,86831,86832,86835,86837],{"class":35,"line":35317},[33,86833,86834],{"class":60},"          \u003Cp class=\"spec\">${",[33,86836,7436],{"class":47},[33,86838,82072],{"class":60},[33,86840,86841,86844,86846,86848,86850,86852,86854,86856],{"class":35,"line":35323},[33,86842,86843],{"class":60},"          \u003Cp class=\"price\">${",[33,86845,82025],{"class":47},[33,86847,2975],{"class":60},[33,86849,86785],{"class":43},[33,86851,133],{"class":60},[33,86853,725],{"class":72},[33,86855,2849],{"class":60},[33,86857,82072],{"class":60},[33,86859,86860,86863,86865],{"class":35,"line":35372},[33,86861,86862],{"class":60},"          \u003Cp class=\"count\">x${",[33,86864,86643],{"class":47},[33,86866,82072],{"class":60},[33,86868,86869,86872,86875],{"class":35,"line":35419},[33,86870,86871],{"class":60},"          \u003Cp class=\"sub-total\">${",[33,86873,86874],{"class":47},"subtotal",[33,86876,82072],{"class":60},[33,86878,86879],{"class":35,"line":35424},[33,86880,86881],{"class":60},"        \u003C\u002Fdiv> \n",[33,86883,86884],{"class":35,"line":35430},[33,86885,86886],{"class":60},"             `\n",[33,86888,86889,86892,86894,86896,86898],{"class":35,"line":35449},[33,86890,86891],{"class":47},"    }).",[33,86893,76435],{"class":43},[33,86895,133],{"class":47},[33,86897,76440],{"class":60},[33,86899,226],{"class":47},[33,86901,86902],{"class":35,"line":35455},[33,86903,86904],{"class":2487},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[33,86906,86907,86909,86911,86913,86915,86918,86920,86923,86925,86927,86929,86932,86935,86937,86940,86942,86944,86946,86949,86951,86953,86955,86957],{"class":35,"line":35474},[33,86908,13462],{"class":39},[33,86910,65002],{"class":72},[33,86912,15804],{"class":39},[33,86914,82258],{"class":47},[33,86916,86917],{"class":43},"reduce",[33,86919,4635],{"class":47},[33,86921,86922],{"class":289},"prev",[33,86924,245],{"class":47},[33,86926,82006],{"class":289},[33,86928,15954],{"class":47},[33,86930,86931],{"class":39},"=>",[33,86933,86934],{"class":47}," prev ",[33,86936,880],{"class":39},[33,86938,86939],{"class":47}," (item.price ",[33,86941,657],{"class":39},[33,86943,8001],{"class":72},[33,86945,8764],{"class":39},[33,86947,86948],{"class":47}," item.count) ",[33,86950,3001],{"class":39},[33,86952,8001],{"class":72},[33,86954,245],{"class":47},[33,86956,2617],{"class":72},[33,86958,226],{"class":47},[33,86960,86961,86963,86965,86967,86970,86972,86974,86977,86979,86981,86983],{"class":35,"line":35480},[33,86962,54626],{"class":47},[33,86964,56618],{"class":43},[33,86966,133],{"class":47},[33,86968,86969],{"class":60},"'.amount'",[33,86971,76461],{"class":47},[33,86973,57],{"class":39},[33,86975,86976],{"class":47}," total.",[33,86978,86785],{"class":43},[33,86980,133],{"class":47},[33,86982,725],{"class":72},[33,86984,226],{"class":47},[33,86986,86987,86989,86991],{"class":35,"line":35486},[33,86988,54636],{"class":47},[33,86990,54034],{"class":53522},[33,86992,53529],{"class":47},[33,86994,86995,86997,86999],{"class":35,"line":35496},[33,86996,54006],{"class":47},[33,86998,54021],{"class":53522},[33,87000,53529],{"class":47},[33,87002,87003],{"class":35,"line":35501},[33,87004,100],{"emptyLinePlaceholder":99},[33,87006,87007,87009,87011],{"class":35,"line":35507},[33,87008,54006],{"class":47},[33,87010,52857],{"class":53522},[33,87012,53529],{"class":47},[14,87014,87016],{"id":87015},"_411-编程思想","4.11 编程思想",[631,87018,87020],{"id":87019},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,87022,87023,87026],{},[2575,87024,87025],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,87028,87029],{},"调用就可以了",[19,87031,87032],{},[3736,87033],{"alt":28,"src":87034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[631,87036,87038],{"id":87037},"_4112-面向对象","4.11.2 面向对象",[19,87040,87041],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,87043,87044],{},[3736,87045],{"alt":28,"src":87046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,87048,87049],{},"面向对象的特性：",[3413,87051,87052,87055,87058],{},[331,87053,87054],{},"封装性",[331,87056,87057],{},"继承性",[331,87059,87060],{},"多态性",[631,87062,87064],{"id":87063},"_4113-两者比较","4.11.3 两者比较",[19,87066,87067],{},[3736,87068],{"alt":28,"src":87069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,87071,87073],{"id":87072},"_412-构造函数回顾","4.12 构造函数回顾",[19,87075,87076],{},[3736,87077],{"alt":28,"src":87078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,87080,87081],{},[3736,87082],{"alt":28,"src":87083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,87085,87086],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,87088,87089],{},[3736,87090],{"alt":28,"src":87091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,87093,87095],{"id":87094},"_413-原型","4.13 原型",[631,87097,87099],{"id":87098},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,87101,87102],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,87104,87105],{},[3736,87106],{"alt":28,"src":87107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,87109,87110],{},[3736,87111],{"alt":28,"src":87112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,87114,87115],{},"原型是构造函数的属性，它也是一个对象",[19,87117,87118],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,87120,87121],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[23,87123,87125],{"className":55286,"code":87124,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,87126,87127,87135,87140,87148,87153,87158,87163,87168,87173,87177,87181,87185,87190,87195,87199,87204,87209,87214,87219,87224,87228,87236],{"__ignoreMap":28},[33,87128,87129,87131,87133],{"class":35,"line":36},[33,87130,2226],{"class":47},[33,87132,54021],{"class":53522},[33,87134,53529],{"class":47},[33,87136,87137],{"class":35,"line":51},[33,87138,87139],{"class":2487},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[33,87141,87142,87144,87146],{"class":35,"line":64},[33,87143,54364],{"class":47},[33,87145,54034],{"class":53522},[33,87147,53529],{"class":47},[33,87149,87150],{"class":35,"line":76},[33,87151,87152],{"class":47},"    function Star(uname, age) {\n",[33,87154,87155],{"class":35,"line":87},[33,87156,87157],{"class":47},"      this.uname = uname,\n",[33,87159,87160],{"class":35,"line":96},[33,87161,87162],{"class":47},"        this.age = age\n",[33,87164,87165],{"class":35,"line":103},[33,87166,87167],{"class":47},"      \u002F\u002F this.sing = function () {\n",[33,87169,87170],{"class":35,"line":108},[33,87171,87172],{"class":47},"      \u002F\u002F   console.log('唱歌')\n",[33,87174,87175],{"class":35,"line":119},[33,87176,100],{"emptyLinePlaceholder":99},[33,87178,87179],{"class":35,"line":128},[33,87180,62255],{"class":47},[33,87182,87183],{"class":35,"line":1753},[33,87184,4446],{"class":47},[33,87186,87187],{"class":35,"line":1763},[33,87188,87189],{"class":47},"    Star.prototype.sing = function () {\n",[33,87191,87192],{"class":35,"line":1775},[33,87193,87194],{"class":47},"      console.log('唱歌')\n",[33,87196,87197],{"class":35,"line":1780},[33,87198,4446],{"class":47},[33,87200,87201],{"class":35,"line":1785},[33,87202,87203],{"class":47},"    \u002F\u002F console.dir(Star.prototype)\n",[33,87205,87206],{"class":35,"line":1940},[33,87207,87208],{"class":47},"    const pink = new Star('pink', 18)\n",[33,87210,87211],{"class":35,"line":2183},[33,87212,87213],{"class":47},"    const red = new Star('red', 20)\n",[33,87215,87216],{"class":35,"line":2208},[33,87217,87218],{"class":47},"    pink.sing()\n",[33,87220,87221],{"class":35,"line":2234},[33,87222,87223],{"class":47},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[33,87225,87226],{"class":35,"line":2239},[33,87227,100],{"emptyLinePlaceholder":99},[33,87229,87230,87232,87234],{"class":35,"line":2247},[33,87231,54636],{"class":47},[33,87233,54034],{"class":53522},[33,87235,53529],{"class":47},[33,87237,87238,87240,87242],{"class":35,"line":2255},[33,87239,54006],{"class":47},[33,87241,54021],{"class":53522},[33,87243,53529],{"class":47},[19,87245,87246],{},[3736,87247],{"alt":28,"src":87248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[23,87250,87252],{"className":55286,"code":87251,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,87253,87254,87262,87270,87275,87280,87285,87290,87294,87299,87304,87309,87313,87318,87322,87326,87331,87335,87343],{"__ignoreMap":28},[33,87255,87256,87258,87260],{"class":35,"line":36},[33,87257,2226],{"class":47},[33,87259,54021],{"class":53522},[33,87261,53529],{"class":47},[33,87263,87264,87266,87268],{"class":35,"line":51},[33,87265,54364],{"class":47},[33,87267,54034],{"class":53522},[33,87269,53529],{"class":47},[33,87271,87272],{"class":35,"line":64},[33,87273,87274],{"class":47},"    let that\n",[33,87276,87277],{"class":35,"line":76},[33,87278,87279],{"class":47},"    function Star(uname) {\n",[33,87281,87282],{"class":35,"line":87},[33,87283,87284],{"class":47},"      this.uname = uname\n",[33,87286,87287],{"class":35,"line":96},[33,87288,87289],{"class":47},"      that = this\n",[33,87291,87292],{"class":35,"line":103},[33,87293,4446],{"class":47},[33,87295,87296],{"class":35,"line":108},[33,87297,87298],{"class":47},"    \u002F\u002F 实例对象是 ldh\n",[33,87300,87301],{"class":35,"line":119},[33,87302,87303],{"class":47},"    const ldh = new Star('刘德华')\n",[33,87305,87306],{"class":35,"line":128},[33,87307,87308],{"class":47},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[33,87310,87311],{"class":35,"line":1753},[33,87312,100],{"emptyLinePlaceholder":99},[33,87314,87315],{"class":35,"line":1763},[33,87316,87317],{"class":47},"    Star.sing = function () {\n",[33,87319,87320],{"class":35,"line":1775},[33,87321,87194],{"class":47},[33,87323,87324],{"class":35,"line":1780},[33,87325,4446],{"class":47},[33,87327,87328],{"class":35,"line":1785},[33,87329,87330],{"class":47},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[33,87332,87333],{"class":35,"line":1940},[33,87334,100],{"emptyLinePlaceholder":99},[33,87336,87337,87339,87341],{"class":35,"line":2183},[33,87338,54636],{"class":47},[33,87340,54034],{"class":53522},[33,87342,53529],{"class":47},[33,87344,87345,87347,87349],{"class":35,"line":2208},[33,87346,54006],{"class":47},[33,87348,54021],{"class":53522},[33,87350,53529],{"class":47},[19,87352,87353],{},"构造函数的this指向的是实例对象；",[19,87355,87356],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[631,87358,87360],{"id":87359},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87362,87363],{},[3736,87364],{"alt":28,"src":87365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[23,87367,87369],{"className":55286,"code":87368,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,87370,87371,87379,87387,87392,87397,87402,87407,87412,87417,87422,87427,87432,87437,87441,87446,87451,87456,87461,87465,87470,87475,87480,87485,87489,87494,87499,87504,87509,87513,87518,87522,87530],{"__ignoreMap":28},[33,87372,87373,87375,87377],{"class":35,"line":36},[33,87374,2226],{"class":47},[33,87376,54021],{"class":53522},[33,87378,53529],{"class":47},[33,87380,87381,87383,87385],{"class":35,"line":51},[33,87382,54364],{"class":47},[33,87384,54034],{"class":53522},[33,87386,53529],{"class":47},[33,87388,87389],{"class":35,"line":64},[33,87390,87391],{"class":47},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[33,87393,87394],{"class":35,"line":76},[33,87395,87396],{"class":47},"    const arr = [1, 2, 3]\n",[33,87398,87399],{"class":35,"line":87},[33,87400,87401],{"class":47},"    \u002F\u002F 自己定义数组的扩展方法\n",[33,87403,87404],{"class":35,"line":96},[33,87405,87406],{"class":47},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[33,87408,87409],{"class":35,"line":103},[33,87410,87411],{"class":47},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[33,87413,87414],{"class":35,"line":108},[33,87415,87416],{"class":47},"    \u002F\u002F ①.最大值\n",[33,87418,87419],{"class":35,"line":119},[33,87420,87421],{"class":47},"    Array.prototype.max = function () {\n",[33,87423,87424],{"class":35,"line":128},[33,87425,87426],{"class":47},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[33,87428,87429],{"class":35,"line":1753},[33,87430,87431],{"class":47},"      return Math.max(...this)\n",[33,87433,87434],{"class":35,"line":1763},[33,87435,87436],{"class":47},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[33,87438,87439],{"class":35,"line":1775},[33,87440,4446],{"class":47},[33,87442,87443],{"class":35,"line":1780},[33,87444,87445],{"class":47},"    console.log(arr.max())\n",[33,87447,87448],{"class":35,"line":1785},[33,87449,87450],{"class":47},"    \u002F\u002F ②最小值\n",[33,87452,87453],{"class":35,"line":1940},[33,87454,87455],{"class":47},"    Array.prototype.min = function () {\n",[33,87457,87458],{"class":35,"line":2183},[33,87459,87460],{"class":47},"      return Math.min(...this)\n",[33,87462,87463],{"class":35,"line":2208},[33,87464,4446],{"class":47},[33,87466,87467],{"class":35,"line":2234},[33,87468,87469],{"class":47},"    console.log(arr.min())\n",[33,87471,87472],{"class":35,"line":2239},[33,87473,87474],{"class":47},"    \u002F\u002F③求和\n",[33,87476,87477],{"class":35,"line":2247},[33,87478,87479],{"class":47},"    Array.prototype.sum = function () {\n",[33,87481,87482],{"class":35,"line":2255},[33,87483,87484],{"class":47},"      return this.reduce((prev, current) => prev + current, 0)\n",[33,87486,87487],{"class":35,"line":3992},[33,87488,4446],{"class":47},[33,87490,87491],{"class":35,"line":4009},[33,87492,87493],{"class":47},"    console.log(arr.sum())\n",[33,87495,87496],{"class":35,"line":4014},[33,87497,87498],{"class":47},"    \u002F\u002F ③排序\n",[33,87500,87501],{"class":35,"line":4019},[33,87502,87503],{"class":47},"    Array.prototype.rever = function () {\n",[33,87505,87506],{"class":35,"line":4024},[33,87507,87508],{"class":47},"      return this.reverse()\n",[33,87510,87511],{"class":35,"line":4038},[33,87512,4446],{"class":47},[33,87514,87515],{"class":35,"line":4043},[33,87516,87517],{"class":47},"    console.log(arr.rever())\n",[33,87519,87520],{"class":35,"line":4834},[33,87521,100],{"emptyLinePlaceholder":99},[33,87523,87524,87526,87528],{"class":35,"line":4848},[33,87525,54636],{"class":47},[33,87527,54034],{"class":53522},[33,87529,53529],{"class":47},[33,87531,87532,87534,87536],{"class":35,"line":4856},[33,87533,54006],{"class":47},[33,87535,54021],{"class":53522},[33,87537,53529],{"class":47},[19,87539,87540],{},[3736,87541],{"alt":28,"src":87542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[631,87544,87546],{"id":87545},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87548,87549],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87551,87552],{},[3736,87553],{"alt":28,"src":87554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[23,87556,87558],{"className":55286,"code":87557,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,87559,87560,87568,87576,87581,87586,87590,87595,87600,87605,87613],{"__ignoreMap":28},[33,87561,87562,87564,87566],{"class":35,"line":36},[33,87563,2226],{"class":47},[33,87565,54021],{"class":53522},[33,87567,53529],{"class":47},[33,87569,87570,87572,87574],{"class":35,"line":51},[33,87571,54364],{"class":47},[33,87573,54034],{"class":53522},[33,87575,53529],{"class":47},[33,87577,87578],{"class":35,"line":64},[33,87579,87580],{"class":47},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[33,87582,87583],{"class":35,"line":76},[33,87584,87585],{"class":47},"    function Star() {\n",[33,87587,87588],{"class":35,"line":87},[33,87589,4446],{"class":47},[33,87591,87592],{"class":35,"line":96},[33,87593,87594],{"class":47},"    const ldh = new Star()\n",[33,87596,87597],{"class":35,"line":103},[33,87598,87599],{"class":47},"    console.log(Star.prototype)\n",[33,87601,87602],{"class":35,"line":108},[33,87603,87604],{"class":47},"    console.log(Star.prototype.constructor === Star)\n",[33,87606,87607,87609,87611],{"class":35,"line":119},[33,87608,54636],{"class":47},[33,87610,54034],{"class":53522},[33,87612,53529],{"class":47},[33,87614,87615,87617,87619],{"class":35,"line":128},[33,87616,54006],{"class":47},[33,87618,54021],{"class":53522},[33,87620,53529],{"class":47},[19,87622,87623],{},[3736,87624],{"alt":28,"src":87625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87627,87628],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[23,87630,87632],{"className":55286,"code":87631,"language":55288,"meta":28,"style":28},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[30,87633,87634,87642,87646,87650,87654,87659,87664,87669,87673,87678,87683,87688,87693,87698,87703,87707,87711,87716,87721,87726,87730,87735,87740,87744,87748,87752],{"__ignoreMap":28},[33,87635,87636,87638,87640],{"class":35,"line":36},[33,87637,54364],{"class":47},[33,87639,54034],{"class":53522},[33,87641,53529],{"class":47},[33,87643,87644],{"class":35,"line":51},[33,87645,87580],{"class":47},[33,87647,87648],{"class":35,"line":64},[33,87649,87585],{"class":47},[33,87651,87652],{"class":35,"line":76},[33,87653,4446],{"class":47},[33,87655,87656],{"class":35,"line":87},[33,87657,87658],{"class":47},"    \u002F\u002F const ldh = new Star()\n",[33,87660,87661],{"class":35,"line":96},[33,87662,87663],{"class":47},"    \u002F\u002F console.log(Star.prototype)\n",[33,87665,87666],{"class":35,"line":103},[33,87667,87668],{"class":47},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[33,87670,87671],{"class":35,"line":108},[33,87672,100],{"emptyLinePlaceholder":99},[33,87674,87675],{"class":35,"line":119},[33,87676,87677],{"class":47},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[33,87679,87680],{"class":35,"line":128},[33,87681,87682],{"class":47},"    \u002F\u002F Star.prototype.sing = function () {\n",[33,87684,87685],{"class":35,"line":1753},[33,87686,87687],{"class":47},"    \u002F\u002F   console.log('唱歌')\n",[33,87689,87690],{"class":35,"line":1763},[33,87691,87692],{"class":47},"    \u002F\u002F }\n",[33,87694,87695],{"class":35,"line":1775},[33,87696,87697],{"class":47},"    \u002F\u002F Star.prototype.dance = function () {\n",[33,87699,87700],{"class":35,"line":1780},[33,87701,87702],{"class":47},"    \u002F\u002F   console.log('跳舞')\n",[33,87704,87705],{"class":35,"line":1785},[33,87706,87692],{"class":47},[33,87708,87709],{"class":35,"line":1940},[33,87710,87599],{"class":47},[33,87712,87713],{"class":35,"line":2183},[33,87714,87715],{"class":47},"    Star.prototype = {\n",[33,87717,87718],{"class":35,"line":2208},[33,87719,87720],{"class":47},"      sing: function () {\n",[33,87722,87723],{"class":35,"line":2234},[33,87724,87725],{"class":47},"        console.log('唱歌')\n",[33,87727,87728],{"class":35,"line":2239},[33,87729,80103],{"class":47},[33,87731,87732],{"class":35,"line":2247},[33,87733,87734],{"class":47},"      dance: function () {\n",[33,87736,87737],{"class":35,"line":2255},[33,87738,87739],{"class":47},"        console.log('跳舞')\n",[33,87741,87742],{"class":35,"line":3992},[33,87743,54617],{"class":47},[33,87745,87746],{"class":35,"line":4009},[33,87747,4446],{"class":47},[33,87749,87750],{"class":35,"line":4014},[33,87751,87599],{"class":47},[33,87753,87754,87756,87758],{"class":35,"line":4019},[33,87755,54636],{"class":47},[33,87757,54034],{"class":53522},[33,87759,53529],{"class":47},[19,87761,87762],{},"进行输出结果后会发现：",[19,87764,87765],{},[3736,87766],{"alt":28,"src":87767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87769,87770],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87772,87773],{},"所以，要重新指回创造这个原型对象的构造函数",[23,87775,87777],{"className":73426,"code":87776,"language":73428,"meta":28,"style":28},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[30,87778,87779,87793,87798,87803,87814,87827,87832,87843,87857,87861],{"__ignoreMap":28},[33,87780,87781,87784,87786,87789,87791],{"class":35,"line":36},[33,87782,87783],{"class":72},"Star",[33,87785,2975],{"class":47},[33,87787,87788],{"class":72},"prototype",[33,87790,15804],{"class":39},[33,87792,17810],{"class":47},[33,87794,87795],{"class":35,"line":51},[33,87796,87797],{"class":2487},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[33,87799,87800],{"class":35,"line":64},[33,87801,87802],{"class":47},"  constructor: Star,\n",[33,87804,87805,87808,87810,87812],{"class":35,"line":76},[33,87806,87807],{"class":43},"  sing",[33,87809,996],{"class":47},[33,87811,56668],{"class":39},[33,87813,56671],{"class":47},[33,87815,87816,87818,87820,87822,87825],{"class":35,"line":87},[33,87817,75966],{"class":47},[33,87819,60465],{"class":43},[33,87821,133],{"class":47},[33,87823,87824],{"class":60},"'唱歌'",[33,87826,226],{"class":47},[33,87828,87829],{"class":35,"line":96},[33,87830,87831],{"class":47},"   },\n",[33,87833,87834,87837,87839,87841],{"class":35,"line":103},[33,87835,87836],{"class":43},"   dance",[33,87838,996],{"class":47},[33,87840,56668],{"class":39},[33,87842,56671],{"class":47},[33,87844,87845,87848,87850,87852,87855],{"class":35,"line":108},[33,87846,87847],{"class":47},"     console.",[33,87849,60465],{"class":43},[33,87851,133],{"class":47},[33,87853,87854],{"class":60},"'跳舞'",[33,87856,226],{"class":47},[33,87858,87859],{"class":35,"line":119},[33,87860,6561],{"class":47},[33,87862,87863],{"class":35,"line":128},[33,87864,1010],{"class":47},[19,87866,87867],{},[3736,87868],{"alt":28,"src":87869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87871,87872],{},"总结1：",[19,87874,87875],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87877,87878],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87880,87881],{},"constructor指的是他的来源",[19,87883,87884],{},[3736,87885],{"alt":28,"src":87886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87888,87889],{},[3736,87890],{"alt":28,"src":87891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87893,87894],{},"总结2：",[19,87896,87897],{},[3736,87898],{"alt":28,"src":87899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87901,87902],{},[3736,87903],{"alt":28,"src":87904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87906,87907],{},[3736,87908],{"alt":28,"src":87909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[631,87911,87913],{"id":87912},"_4134-对象原型","4.13.4 对象原型",[19,87915,87916],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87918,87919],{},"对象原型就是__proto__这个属性",[19,87921,87922],{},[3736,87923],{"alt":28,"src":87924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87926,87927],{},[3736,87928],{"alt":28,"src":87929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87931,87932],{},[3736,87933],{"alt":28,"src":87934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87936,87937],{},[3736,87938],{"alt":28,"src":87939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[23,87941,87943],{"className":55286,"code":87942,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,87944,87945,87953,87961,87965,87969,87973,87978,87986],{"__ignoreMap":28},[33,87946,87947,87949,87951],{"class":35,"line":36},[33,87948,2226],{"class":47},[33,87950,54021],{"class":53522},[33,87952,53529],{"class":47},[33,87954,87955,87957,87959],{"class":35,"line":51},[33,87956,54364],{"class":47},[33,87958,54034],{"class":53522},[33,87960,53529],{"class":47},[33,87962,87963],{"class":35,"line":64},[33,87964,87585],{"class":47},[33,87966,87967],{"class":35,"line":76},[33,87968,4446],{"class":47},[33,87970,87971],{"class":35,"line":87},[33,87972,87594],{"class":47},[33,87974,87975],{"class":35,"line":96},[33,87976,87977],{"class":47},"    console.log(ldh)\n",[33,87979,87980,87982,87984],{"class":35,"line":103},[33,87981,54636],{"class":47},[33,87983,54034],{"class":53522},[33,87985,53529],{"class":47},[33,87987,87988,87990,87992],{"class":35,"line":108},[33,87989,54006],{"class":47},[33,87991,54021],{"class":53522},[33,87993,53529],{"class":47},[19,87995,87996],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87998,87999],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,88001,88002],{},[3736,88003],{"alt":28,"src":88004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,88006,88007],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,88009,88010],{},"对象原型指向原型对象",[19,88012,88013],{},[3736,88014],{"alt":28,"src":88015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,88017,88018],{},[3736,88019],{"alt":28,"src":88020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,88022,88023],{},[3736,88024],{"alt":28,"src":88025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[631,88027,88029],{"id":88028},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,88031,88032],{},[3736,88033],{"alt":28,"src":88034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[328,88036,88037,88040,88043,88046],{},[331,88038,88039],{},"构造函数通过new的形式实例化得到实例对象",[331,88041,88042],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[331,88044,88045],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[331,88047,88048],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,88050,88051],{},[3736,88052],{"alt":28,"src":88053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,88055,88056],{},"题目梳理：",[19,88058,88059],{},[3736,88060],{"alt":28,"src":88061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[631,88063,88065],{"id":88064},"_4136-原型继承","4.13.6 原型继承",[19,88067,88068],{},[3736,88069],{"alt":28,"src":88070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,88072,88073],{},[3736,88074],{"alt":28,"src":88075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,88077,88078],{},[3736,88079],{"alt":28,"src":88080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,88082,88083],{},[3736,88084],{"alt":28,"src":88085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,88087,88088],{},[3736,88089],{"alt":28,"src":88090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,88092,88093],{},[3736,88094],{"alt":28,"src":88095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,88097,88098],{},[3736,88099],{"alt":28,"src":88100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,88102,88103],{},[3736,88104],{"alt":28,"src":88105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,88107,88108],{},"回顾：构造函数每次new得到对象都是不同的",[631,88110,88112],{"id":88111},"_4137-原型链","4.13.7 原型链",[19,88114,88115],{},[3736,88116],{"alt":28,"src":88117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,88119,88120],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,88122,88123],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,88125,88126],{},"大哥是Object",[19,88128,88129],{},[3736,88130],{"alt":28,"src":88131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,88133,88134],{},[3736,88135],{"alt":28,"src":88136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,88138,88139],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,88141,88142],{},"万物皆对象",[631,88144,88146],{"id":88145},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,88148,88149],{},"模态框",[19,88151,88152],{},"以后遇见这个效果直接使用这个就行",[19,88154,88155],{},[3736,88156],{"alt":28,"src":88157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,88159,88160],{},[3736,88161],{"alt":28,"src":88162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,88164,88165],{},[3736,88166],{"alt":28,"src":88167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,88169,88170],{},[3736,88171],{"alt":28,"src":88172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,88174,88175],{},"补充知识点：",[328,88177,88178],{},[331,88179,88180],{},"append()",[19,88182,88183],{},[3736,88184],{"alt":28,"src":88185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[23,88187,88189],{"className":52855,"code":88188,"language":52857,"meta":28,"style":28},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[30,88190,88191,88196,88201,88206,88210,88214,88218,88223,88228,88233,88237],{"__ignoreMap":28},[33,88192,88193],{"class":35,"line":36},[33,88194,88195],{"class":47},"append(param1)\n",[33,88197,88198],{"class":35,"line":51},[33,88199,88200],{"class":47},"append(param1, param2)\n",[33,88202,88203],{"class":35,"line":64},[33,88204,88205],{"class":47},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[33,88207,88208],{"class":35,"line":76},[33,88209,100],{"emptyLinePlaceholder":99},[33,88211,88212],{"class":35,"line":87},[33,88213,100],{"emptyLinePlaceholder":99},[33,88215,88216],{"class":35,"line":96},[33,88217,100],{"emptyLinePlaceholder":99},[33,88219,88220],{"class":35,"line":103},[33,88221,88222],{"class":47},"let div = document.createElement(\"div\");\n",[33,88224,88225],{"class":35,"line":108},[33,88226,88227],{"class":47},"let p = document.createElement(\"p\");\n",[33,88229,88230],{"class":35,"line":119},[33,88231,88232],{"class":47},"div.append(p);\n",[33,88234,88235],{"class":35,"line":128},[33,88236,100],{"emptyLinePlaceholder":99},[33,88238,88239,88242,88244],{"class":35,"line":1753},[33,88240,88241],{"class":47},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[33,88243,19],{"class":53522},[33,88245,88246],{"class":47},"> ]\n",[328,88248,88249],{"start":51},[331,88250,88251],{},"remove()",[19,88253,88254],{},"自己删自己",[19,88256,88257],{},[3736,88258],{"alt":28,"src":88259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[23,88261,88263],{"className":52855,"code":88262,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,88264,88265,88275,88289,88293,88301,88315,88335,88347,88355,88362,88374,88387,88422,88434,88445,88457,88469,88481,88508,88518,88522,88526,88535,88547,88561,88571,88583,88587,88591,88601,88612,88622,88632,88645,88658,88668,88672,88676,88685,88695,88707,88711,88715,88724,88734,88744,88756,88760,88764,88774,88790,88801,88811,88821,88833,88845,88857,88861,88865,88878,88889,88893,88901,88909,88913,88921,88941,88961,88969,88974,89000,89005,89010,89029,89034,89046,89051,89062,89072,89082,89087,89092,89096,89101,89106,89111,89131,89136,89156,89161,89175,89180,89185,89190,89206,89210,89215,89244,89249,89254,89259,89270,89274,89278,89282,89287,89312,89317,89342,89347,89356,89360,89365,89390,89394,89418,89422,89431,89435,89440,89458,89468,89472,89480,89488,89492],{"__ignoreMap":28},[33,88266,88267,88269,88271,88273],{"class":35,"line":36},[33,88268,53519],{"class":47},[33,88270,53523],{"class":53522},[33,88272,53526],{"class":43},[33,88274,53529],{"class":47},[33,88276,88277,88279,88281,88283,88285,88287],{"class":35,"line":51},[33,88278,2226],{"class":47},[33,88280,52857],{"class":53522},[33,88282,53538],{"class":43},[33,88284,57],{"class":47},[33,88286,53543],{"class":60},[33,88288,53529],{"class":47},[33,88290,88291],{"class":35,"line":64},[33,88292,100],{"emptyLinePlaceholder":99},[33,88294,88295,88297,88299],{"class":35,"line":76},[33,88296,2226],{"class":47},[33,88298,53556],{"class":53522},[33,88300,53529],{"class":47},[33,88302,88303,88305,88307,88309,88311,88313],{"class":35,"line":87},[33,88304,54364],{"class":47},[33,88306,53566],{"class":53522},[33,88308,53569],{"class":43},[33,88310,57],{"class":47},[33,88312,53574],{"class":60},[33,88314,53529],{"class":47},[33,88316,88317,88319,88321,88323,88325,88327,88329,88331,88333],{"class":35,"line":96},[33,88318,54364],{"class":47},[33,88320,53566],{"class":53522},[33,88322,17158],{"class":43},[33,88324,57],{"class":47},[33,88326,53613],{"class":60},[33,88328,53593],{"class":43},[33,88330,57],{"class":47},[33,88332,53620],{"class":60},[33,88334,53529],{"class":47},[33,88336,88337,88339,88341,88343,88345],{"class":35,"line":103},[33,88338,54364],{"class":47},[33,88340,53629],{"class":53522},[33,88342,53632],{"class":47},[33,88344,53629],{"class":53522},[33,88346,53529],{"class":47},[33,88348,88349,88351,88353],{"class":35,"line":108},[33,88350,54364],{"class":47},[33,88352,2331],{"class":53522},[33,88354,53529],{"class":47},[33,88356,88357,88360],{"class":35,"line":119},[33,88358,88359],{"class":43},"    .modal",[33,88361,17810],{"class":47},[33,88363,88364,88366,88368,88370,88372],{"class":35,"line":128},[33,88365,56990],{"class":72},[33,88367,996],{"class":47},[33,88369,6227],{"class":72},[33,88371,53713],{"class":39},[33,88373,3567],{"class":47},[33,88375,88376,88379,88381,88383,88385],{"class":35,"line":1753},[33,88377,88378],{"class":72},"      min-height",[33,88380,996],{"class":47},[33,88382,2734],{"class":72},[33,88384,53713],{"class":39},[33,88386,3567],{"class":47},[33,88388,88389,88391,88393,88395,88397,88399,88401,88403,88405,88407,88409,88411,88413,88415,88417,88420],{"class":35,"line":1763},[33,88390,80961],{"class":72},[33,88392,996],{"class":47},[33,88394,2617],{"class":72},[33,88396,1437],{"class":72},[33,88398,4297],{"class":72},[33,88400,53713],{"class":39},[33,88402,80978],{"class":72},[33,88404,133],{"class":47},[33,88406,2617],{"class":72},[33,88408,245],{"class":47},[33,88410,2617],{"class":72},[33,88412,245],{"class":47},[33,88414,2617],{"class":72},[33,88416,245],{"class":47},[33,88418,88419],{"class":72},"0.1",[33,88421,4976],{"class":47},[33,88423,88424,88426,88428,88430,88432],{"class":35,"line":1775},[33,88425,57353],{"class":72},[33,88427,996],{"class":47},[33,88429,753],{"class":72},[33,88431,53713],{"class":39},[33,88433,3567],{"class":47},[33,88435,88436,88438,88440,88443],{"class":35,"line":1780},[33,88437,56978],{"class":72},[33,88439,996],{"class":47},[33,88441,88442],{"class":72},"fixed",[33,88444,3567],{"class":47},[33,88446,88447,88450,88452,88455],{"class":35,"line":1785},[33,88448,88449],{"class":72},"      z-index",[33,88451,996],{"class":47},[33,88453,88454],{"class":72},"999",[33,88456,3567],{"class":47},[33,88458,88459,88461,88463,88465,88467],{"class":35,"line":1940},[33,88460,57057],{"class":72},[33,88462,996],{"class":47},[33,88464,3071],{"class":72},[33,88466,1429],{"class":39},[33,88468,3567],{"class":47},[33,88470,88471,88473,88475,88477,88479],{"class":35,"line":2183},[33,88472,57166],{"class":72},[33,88474,996],{"class":47},[33,88476,3071],{"class":72},[33,88478,1429],{"class":39},[33,88480,3567],{"class":47},[33,88482,88483,88485,88487,88489,88491,88494,88496,88498,88500,88502,88504,88506],{"class":35,"line":2208},[33,88484,81002],{"class":72},[33,88486,996],{"class":47},[33,88488,81007],{"class":72},[33,88490,133],{"class":47},[33,88492,88493],{"class":72},"-50",[33,88495,1429],{"class":39},[33,88497,245],{"class":47},[33,88499,88493],{"class":72},[33,88501,1429],{"class":39},[33,88503,245],{"class":47},[33,88505,2617],{"class":72},[33,88507,4976],{"class":47},[33,88509,88510,88512,88514,88516],{"class":35,"line":2234},[33,88511,57103],{"class":72},[33,88513,996],{"class":47},[33,88515,63060],{"class":72},[33,88517,3567],{"class":47},[33,88519,88520],{"class":35,"line":2239},[33,88521,4446],{"class":47},[33,88523,88524],{"class":35,"line":2247},[33,88525,100],{"emptyLinePlaceholder":99},[33,88527,88528,88530,88533],{"class":35,"line":2255},[33,88529,88359],{"class":43},[33,88531,88532],{"class":43}," .header",[33,88534,17810],{"class":47},[33,88536,88537,88539,88541,88543,88545],{"class":35,"line":3992},[33,88538,59577],{"class":72},[33,88540,996],{"class":47},[33,88542,2822],{"class":72},[33,88544,53713],{"class":39},[33,88546,3567],{"class":47},[33,88548,88549,88551,88553,88555,88557,88559],{"class":35,"line":4009},[33,88550,56914],{"class":72},[33,88552,996],{"class":47},[33,88554,2617],{"class":72},[33,88556,4297],{"class":72},[33,88558,53713],{"class":39},[33,88560,3567],{"class":47},[33,88562,88563,88565,88567,88569],{"class":35,"line":4014},[33,88564,56978],{"class":72},[33,88566,996],{"class":47},[33,88568,56983],{"class":72},[33,88570,3567],{"class":47},[33,88572,88573,88575,88577,88579,88581],{"class":35,"line":4019},[33,88574,57141],{"class":72},[33,88576,996],{"class":47},[33,88578,1284],{"class":72},[33,88580,53713],{"class":39},[33,88582,3567],{"class":47},[33,88584,88585],{"class":35,"line":4024},[33,88586,4446],{"class":47},[33,88588,88589],{"class":35,"line":4038},[33,88590,100],{"emptyLinePlaceholder":99},[33,88592,88593,88595,88597,88599],{"class":35,"line":4043},[33,88594,88359],{"class":43},[33,88596,88532],{"class":43},[33,88598,5289],{"class":53522},[33,88600,17810],{"class":47},[33,88602,88603,88606,88608,88610],{"class":35,"line":4834},[33,88604,88605],{"class":72},"      font-style",[33,88607,996],{"class":47},[33,88609,66058],{"class":72},[33,88611,3567],{"class":47},[33,88613,88614,88616,88618,88620],{"class":35,"line":4848},[33,88615,59634],{"class":72},[33,88617,996],{"class":47},[33,88619,64288],{"class":72},[33,88621,3567],{"class":47},[33,88623,88624,88626,88628,88630],{"class":35,"line":4856},[33,88625,56978],{"class":72},[33,88627,996],{"class":47},[33,88629,57050],{"class":72},[33,88631,3567],{"class":47},[33,88633,88634,88637,88639,88641,88643],{"class":35,"line":4861},[33,88635,88636],{"class":72},"      right",[33,88638,996],{"class":47},[33,88640,2992],{"class":72},[33,88642,53713],{"class":39},[33,88644,3567],{"class":47},[33,88646,88647,88649,88651,88654,88656],{"class":35,"line":4867},[33,88648,57166],{"class":72},[33,88650,996],{"class":47},[33,88652,88653],{"class":72},"-2",[33,88655,53713],{"class":39},[33,88657,3567],{"class":47},[33,88659,88660,88662,88664,88666],{"class":35,"line":4873},[33,88661,64243],{"class":72},[33,88663,996],{"class":47},[33,88665,64248],{"class":72},[33,88667,3567],{"class":47},[33,88669,88670],{"class":35,"line":4878},[33,88671,4446],{"class":47},[33,88673,88674],{"class":35,"line":10194},[33,88675,100],{"emptyLinePlaceholder":99},[33,88677,88678,88680,88683],{"class":35,"line":10218},[33,88679,88359],{"class":43},[33,88681,88682],{"class":43}," .body",[33,88684,17810],{"class":47},[33,88686,88687,88689,88691,88693],{"class":35,"line":10223},[33,88688,59504],{"class":72},[33,88690,996],{"class":47},[33,88692,53813],{"class":72},[33,88694,3567],{"class":47},[33,88696,88697,88699,88701,88703,88705],{"class":35,"line":10229},[33,88698,56914],{"class":72},[33,88700,996],{"class":47},[33,88702,1279],{"class":72},[33,88704,53713],{"class":39},[33,88706,3567],{"class":47},[33,88708,88709],{"class":35,"line":10256},[33,88710,4446],{"class":47},[33,88712,88713],{"class":35,"line":10261},[33,88714,100],{"emptyLinePlaceholder":99},[33,88716,88717,88719,88722],{"class":35,"line":10267},[33,88718,88359],{"class":43},[33,88720,88721],{"class":43}," .footer",[33,88723,17810],{"class":47},[33,88725,88726,88728,88730,88732],{"class":35,"line":10279},[33,88727,57228],{"class":72},[33,88729,996],{"class":47},[33,88731,53698],{"class":72},[33,88733,3567],{"class":47},[33,88735,88736,88738,88740,88742],{"class":35,"line":10291},[33,88737,57239],{"class":72},[33,88739,996],{"class":47},[33,88741,53801],{"class":72},[33,88743,3567],{"class":47},[33,88745,88746,88748,88750,88752,88754],{"class":35,"line":10303},[33,88747,56914],{"class":72},[33,88749,996],{"class":47},[33,88751,1279],{"class":72},[33,88753,53713],{"class":39},[33,88755,3567],{"class":47},[33,88757,88758],{"class":35,"line":11961},[33,88759,4446],{"class":47},[33,88761,88762],{"class":35,"line":11986},[33,88763,100],{"emptyLinePlaceholder":99},[33,88765,88766,88768,88770,88772],{"class":35,"line":12009},[33,88767,88359],{"class":43},[33,88769,88721],{"class":43},[33,88771,3672],{"class":53522},[33,88773,17810],{"class":47},[33,88775,88776,88778,88780,88782,88784,88786,88788],{"class":35,"line":12033},[33,88777,56914],{"class":72},[33,88779,996],{"class":47},[33,88781,730],{"class":72},[33,88783,53713],{"class":39},[33,88785,4342],{"class":72},[33,88787,53713],{"class":39},[33,88789,3567],{"class":47},[33,88791,88792,88794,88796,88799],{"class":35,"line":12038},[33,88793,63939],{"class":72},[33,88795,996],{"class":47},[33,88797,88798],{"class":72},"#ccc",[33,88800,3567],{"class":47},[33,88802,88803,88805,88807,88809],{"class":35,"line":12043},[33,88804,66187],{"class":72},[33,88806,996],{"class":47},[33,88808,56956],{"class":72},[33,88810,3567],{"class":47},[33,88812,88813,88815,88817,88819],{"class":35,"line":12048},[33,88814,59634],{"class":72},[33,88816,996],{"class":47},[33,88818,63060],{"class":72},[33,88820,3567],{"class":47},[33,88822,88823,88825,88827,88829,88831],{"class":35,"line":12057},[33,88824,57353],{"class":72},[33,88826,996],{"class":47},[33,88828,725],{"class":72},[33,88830,53713],{"class":39},[33,88832,3567],{"class":47},[33,88834,88835,88837,88839,88841,88843],{"class":35,"line":12062},[33,88836,63968],{"class":72},[33,88838,996],{"class":47},[33,88840,1279],{"class":72},[33,88842,53713],{"class":39},[33,88844,3567],{"class":47},[33,88846,88847,88849,88851,88853,88855],{"class":35,"line":12068},[33,88848,57141],{"class":72},[33,88850,996],{"class":47},[33,88852,2966],{"class":72},[33,88854,53713],{"class":39},[33,88856,3567],{"class":47},[33,88858,88859],{"class":35,"line":12089},[33,88860,4446],{"class":47},[33,88862,88863],{"class":35,"line":12095},[33,88864,100],{"emptyLinePlaceholder":99},[33,88866,88867,88869,88871,88873,88876],{"class":35,"line":12109},[33,88868,88359],{"class":43},[33,88870,88721],{"class":43},[33,88872,3672],{"class":53522},[33,88874,88875],{"class":43},".submit",[33,88877,17810],{"class":47},[33,88879,88880,88882,88884,88887],{"class":35,"line":12115},[33,88881,57103],{"class":72},[33,88883,996],{"class":47},[33,88885,88886],{"class":72},"#369",[33,88888,3567],{"class":47},[33,88890,88891],{"class":35,"line":12142},[33,88892,4446],{"class":47},[33,88894,88895,88897,88899],{"class":35,"line":12151},[33,88896,54636],{"class":47},[33,88898,2331],{"class":53522},[33,88900,53529],{"class":47},[33,88902,88903,88905,88907],{"class":35,"line":12157},[33,88904,54006],{"class":47},[33,88906,53556],{"class":53522},[33,88908,53529],{"class":47},[33,88910,88911],{"class":35,"line":12165},[33,88912,100],{"emptyLinePlaceholder":99},[33,88914,88915,88917,88919],{"class":35,"line":12170},[33,88916,2226],{"class":47},[33,88918,54021],{"class":53522},[33,88920,53529],{"class":47},[33,88922,88923,88925,88927,88929,88931,88934,88937,88939],{"class":35,"line":18842},[33,88924,54364],{"class":47},[33,88926,56106],{"class":53522},[33,88928,17197],{"class":43},[33,88930,57],{"class":47},[33,88932,88933],{"class":60},"\"delete\"",[33,88935,88936],{"class":47},">删除\u003C\u002F",[33,88938,56106],{"class":53522},[33,88940,53529],{"class":47},[33,88942,88943,88945,88947,88949,88951,88954,88957,88959],{"class":35,"line":18848},[33,88944,54364],{"class":47},[33,88946,56106],{"class":53522},[33,88948,17197],{"class":43},[33,88950,57],{"class":47},[33,88952,88953],{"class":60},"\"login\"",[33,88955,88956],{"class":47},">登录\u003C\u002F",[33,88958,56106],{"class":53522},[33,88960,53529],{"class":47},[33,88962,88963,88965,88967],{"class":35,"line":18871},[33,88964,54364],{"class":47},[33,88966,54034],{"class":53522},[33,88968,53529],{"class":47},[33,88970,88971],{"class":35,"line":18877},[33,88972,88973],{"class":2487},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[33,88975,88976,88978,88981,88983,88985,88987,88989,88991,88994,88996,88998],{"class":35,"line":18900},[33,88977,72299],{"class":39},[33,88979,88980],{"class":43}," Modal",[33,88982,133],{"class":47},[33,88984,53629],{"class":289},[33,88986,15804],{"class":39},[33,88988,72145],{"class":60},[33,88990,245],{"class":47},[33,88992,88993],{"class":289},"message",[33,88995,15804],{"class":39},[33,88997,72145],{"class":60},[33,88999,14682],{"class":47},[33,89001,89002],{"class":35,"line":18914},[33,89003,89004],{"class":2487},"      \u002F\u002F 创建Model 模态框盒子\n",[33,89006,89007],{"class":35,"line":18934},[33,89008,89009],{"class":2487},"      \u002F\u002F 1.1 创建div标签\n",[33,89011,89012,89014,89017,89019,89021,89023,89025,89027],{"class":35,"line":18940},[33,89013,72266],{"class":72},[33,89015,89016],{"class":47},".modalBox ",[33,89018,57],{"class":39},[33,89020,56615],{"class":47},[33,89022,72366],{"class":43},[33,89024,133],{"class":47},[33,89026,84140],{"class":60},[33,89028,226],{"class":47},[33,89030,89031],{"class":35,"line":18951},[33,89032,89033],{"class":2487},"      \u002F\u002F 1.2 给div 添加类名为model\n",[33,89035,89036,89038,89041,89043],{"class":35,"line":18974},[33,89037,72266],{"class":72},[33,89039,89040],{"class":47},".modalBox.className ",[33,89042,57],{"class":39},[33,89044,89045],{"class":60}," 'modal'\n",[33,89047,89048],{"class":35,"line":18996},[33,89049,89050],{"class":2487},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[33,89052,89053,89055,89058,89060],{"class":35,"line":19001},[33,89054,72266],{"class":72},[33,89056,89057],{"class":47},".modalBox.innerHTML ",[33,89059,57],{"class":39},[33,89061,72383],{"class":60},[33,89063,89064,89067,89069],{"class":35,"line":19007},[33,89065,89066],{"class":60},"        \u003Cdiv class=\"header\">${",[33,89068,53629],{"class":47},[33,89070,89071],{"class":60},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[33,89073,89074,89077,89079],{"class":35,"line":19021},[33,89075,89076],{"class":60},"        \u003Cdiv class=\"body\">${",[33,89078,88993],{"class":47},[33,89080,89081],{"class":60},"}\u003C\u002Fdiv>\n",[33,89083,89084],{"class":35,"line":19034},[33,89085,89086],{"class":60},"      `\n",[33,89088,89089],{"class":35,"line":19039},[33,89090,89091],{"class":2487},"      \u002F\u002F console.log(this.modalBox)\n",[33,89093,89094],{"class":35,"line":19053},[33,89095,4446],{"class":47},[33,89097,89098],{"class":35,"line":19058},[33,89099,89100],{"class":2487},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[33,89102,89103],{"class":35,"line":19064},[33,89104,89105],{"class":2487},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[33,89107,89108],{"class":35,"line":19069},[33,89109,89110],{"class":2487},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[33,89112,89113,89116,89118,89120,89122,89125,89127,89129],{"class":35,"line":19083},[33,89114,89115],{"class":72},"    Modal",[33,89117,2975],{"class":47},[33,89119,87788],{"class":72},[33,89121,2975],{"class":47},[33,89123,89124],{"class":43},"open",[33,89126,15804],{"class":39},[33,89128,61136],{"class":39},[33,89130,56671],{"class":47},[33,89132,89133],{"class":35,"line":19088},[33,89134,89135],{"class":2487},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[33,89137,89138,89140,89143,89145,89147,89149,89151,89154],{"class":35,"line":19093},[33,89139,60446],{"class":39},[33,89141,89142],{"class":72}," box",[33,89144,15804],{"class":39},[33,89146,56615],{"class":47},[33,89148,56618],{"class":43},[33,89150,133],{"class":47},[33,89152,89153],{"class":60},"'.modal'",[33,89155,226],{"class":47},[33,89157,89158],{"class":35,"line":19107},[33,89159,89160],{"class":2487},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[33,89162,89163,89166,89168,89171,89173],{"class":35,"line":19119},[33,89164,89165],{"class":47},"      box ",[33,89167,3976],{"class":39},[33,89169,89170],{"class":47}," box.",[33,89172,59224],{"class":43},[33,89174,4235],{"class":47},[33,89176,89177],{"class":35,"line":19124},[33,89178,89179],{"class":2487},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[33,89181,89182],{"class":35,"line":19137},[33,89183,89184],{"class":2487},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[33,89186,89187],{"class":35,"line":19142},[33,89188,89189],{"class":2487},"      \u002F\u002F append可以增加对象\n",[33,89191,89192,89195,89198,89200,89203],{"class":35,"line":19147},[33,89193,89194],{"class":47},"      document.body.",[33,89196,89197],{"class":43},"append",[33,89199,133],{"class":47},[33,89201,89202],{"class":72},"this",[33,89204,89205],{"class":47},".modalBox)\n",[33,89207,89208],{"class":35,"line":19152},[33,89209,100],{"emptyLinePlaceholder":99},[33,89211,89212],{"class":35,"line":19165},[33,89213,89214],{"class":2487},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[33,89216,89217,89219,89222,89224,89226,89229,89231,89233,89235,89237,89240,89242],{"class":35,"line":19170},[33,89218,72266],{"class":72},[33,89220,89221],{"class":47},".modalBox.",[33,89223,56618],{"class":43},[33,89225,133],{"class":47},[33,89227,89228],{"class":60},"'i'",[33,89230,33057],{"class":47},[33,89232,60031],{"class":43},[33,89234,133],{"class":47},[33,89236,60036],{"class":60},[33,89238,89239],{"class":47},", () ",[33,89241,86931],{"class":39},[33,89243,17810],{"class":47},[33,89245,89246],{"class":35,"line":34859},[33,89247,89248],{"class":2487},"        \u002F\u002F 这个地方需要用到箭头函数\n",[33,89250,89251],{"class":35,"line":34865},[33,89252,89253],{"class":2487},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[33,89255,89256],{"class":35,"line":34871},[33,89257,89258],{"class":2487},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[33,89260,89261,89263,89265,89268],{"class":35,"line":34877},[33,89262,66943],{"class":72},[33,89264,2975],{"class":47},[33,89266,89267],{"class":43},"close",[33,89269,4235],{"class":47},[33,89271,89272],{"class":35,"line":34883},[33,89273,67032],{"class":47},[33,89275,89276],{"class":35,"line":34894},[33,89277,4446],{"class":47},[33,89279,89280],{"class":35,"line":34900},[33,89281,100],{"emptyLinePlaceholder":99},[33,89283,89284],{"class":35,"line":34920},[33,89285,89286],{"class":2487},"    \u002F\u002F 测试一下 点击 删除按钮\n",[33,89288,89289,89291,89293,89295,89298,89300,89302,89304,89306,89308,89310],{"class":35,"line":34926},[33,89290,54626],{"class":47},[33,89292,56618],{"class":43},[33,89294,133],{"class":47},[33,89296,89297],{"class":60},"'#delete'",[33,89299,33057],{"class":47},[33,89301,60031],{"class":43},[33,89303,133],{"class":47},[33,89305,60036],{"class":60},[33,89307,89239],{"class":47},[33,89309,86931],{"class":39},[33,89311,17810],{"class":47},[33,89313,89314],{"class":35,"line":34937},[33,89315,89316],{"class":2487},"      \u002F\u002F 先调用Model构造函数\n",[33,89318,89319,89321,89324,89326,89328,89330,89332,89335,89337,89340],{"class":35,"line":34943},[33,89320,60446],{"class":39},[33,89322,89323],{"class":72}," del",[33,89325,15804],{"class":39},[33,89327,13819],{"class":39},[33,89329,88980],{"class":43},[33,89331,133],{"class":47},[33,89333,89334],{"class":60},"'温馨的提示'",[33,89336,245],{"class":47},[33,89338,89339],{"class":60},"'您没有删除权限操作'",[33,89341,226],{"class":47},[33,89343,89344],{"class":35,"line":34949},[33,89345,89346],{"class":2487},"      \u002F\u002F 实例对象调用open方法\n",[33,89348,89349,89352,89354],{"class":35,"line":34955},[33,89350,89351],{"class":47},"      del.",[33,89353,89124],{"class":43},[33,89355,4235],{"class":47},[33,89357,89358],{"class":35,"line":34961},[33,89359,35686],{"class":47},[33,89361,89362],{"class":35,"line":34967},[33,89363,89364],{"class":2487},"    \u002F\u002F 测试一下 点击 登录按钮\n",[33,89366,89367,89369,89371,89373,89376,89378,89380,89382,89384,89386,89388],{"class":35,"line":34973},[33,89368,54626],{"class":47},[33,89370,56618],{"class":43},[33,89372,133],{"class":47},[33,89374,89375],{"class":60},"'#login'",[33,89377,33057],{"class":47},[33,89379,60031],{"class":43},[33,89381,133],{"class":47},[33,89383,60036],{"class":60},[33,89385,89239],{"class":47},[33,89387,86931],{"class":39},[33,89389,17810],{"class":47},[33,89391,89392],{"class":35,"line":34979},[33,89393,89316],{"class":2487},[33,89395,89396,89398,89400,89402,89404,89406,89408,89411,89413,89416],{"class":35,"line":34999},[33,89397,60446],{"class":39},[33,89399,1687],{"class":72},[33,89401,15804],{"class":39},[33,89403,13819],{"class":39},[33,89405,88980],{"class":43},[33,89407,133],{"class":47},[33,89409,89410],{"class":60},"'友情提示'",[33,89412,245],{"class":47},[33,89414,89415],{"class":60},"'您还没有登录呢'",[33,89417,226],{"class":47},[33,89419,89420],{"class":35,"line":35005},[33,89421,89346],{"class":2487},[33,89423,89424,89427,89429],{"class":35,"line":35021},[33,89425,89426],{"class":47},"      log.",[33,89428,89124],{"class":43},[33,89430,4235],{"class":47},[33,89432,89433],{"class":35,"line":35027},[33,89434,35686],{"class":47},[33,89436,89437],{"class":35,"line":35041},[33,89438,89439],{"class":2487},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[33,89441,89442,89444,89446,89448,89450,89452,89454,89456],{"class":35,"line":35047},[33,89443,89115],{"class":72},[33,89445,2975],{"class":47},[33,89447,87788],{"class":72},[33,89449,2975],{"class":47},[33,89451,89267],{"class":43},[33,89453,15804],{"class":39},[33,89455,61136],{"class":39},[33,89457,56671],{"class":47},[33,89459,89460,89462,89464,89466],{"class":35,"line":35062},[33,89461,72266],{"class":72},[33,89463,89221],{"class":47},[33,89465,59224],{"class":43},[33,89467,4235],{"class":47},[33,89469,89470],{"class":35,"line":35068},[33,89471,4446],{"class":47},[33,89473,89474,89476,89478],{"class":35,"line":35077},[33,89475,54636],{"class":47},[33,89477,54034],{"class":53522},[33,89479,53529],{"class":47},[33,89481,89482,89484,89486],{"class":35,"line":35083},[33,89483,54006],{"class":47},[33,89485,54021],{"class":53522},[33,89487,53529],{"class":47},[33,89489,89490],{"class":35,"line":35092},[33,89491,100],{"emptyLinePlaceholder":99},[33,89493,89494,89496,89498],{"class":35,"line":35098},[33,89495,54006],{"class":47},[33,89497,52857],{"class":53522},[33,89499,53529],{"class":47},[19,89501,89502],{},[3736,89503],{"alt":28,"src":89504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89506,89508],{"id":89507},"_414-深浅拷贝","4.14 深浅拷贝",[631,89510,89512],{"id":89511},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89514,89515],{},[3736,89516],{"alt":28,"src":89517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89519,89520],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89522,89523],{},[3736,89524],{"alt":28,"src":89525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89527,89528],{},[3736,89529],{"alt":28,"src":89530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89532,89533],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89535,89536],{},[3736,89537],{"alt":28,"src":89538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89540,13573],{},[19,89542,89543],{},[3736,89544],{"alt":28,"src":89545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[631,89547,89549],{"id":89548},"_4142-深拷贝","4.14.2 深拷贝",[19,89551,89552],{},"深拷贝：拷贝的是对象，不是地址",[19,89554,89555],{},"常用的三种方法：",[328,89557,89558,89561,89564],{},[331,89559,89560],{},"通过递归实现深拷贝",[331,89562,89563],{},"lodash\u002FcloneDeep",[331,89565,89566],{},"通过JSON.stringify()实现",[24236,89568,89570],{"id":89569},"_41421-递归函数","4.14.2.1 递归函数",[19,89572,89573],{},[3736,89574],{"alt":28,"src":89575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[328,89577,89578],{},[331,89579,89580],{},"死递归占溢出：",[23,89582,89584],{"className":55286,"code":89583,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,89585,89586,89594,89602,89606,89611,89615,89620,89628],{"__ignoreMap":28},[33,89587,89588,89590,89592],{"class":35,"line":36},[33,89589,2226],{"class":47},[33,89591,54021],{"class":53522},[33,89593,53529],{"class":47},[33,89595,89596,89598,89600],{"class":35,"line":51},[33,89597,54364],{"class":47},[33,89599,54034],{"class":53522},[33,89601,53529],{"class":47},[33,89603,89604],{"class":35,"line":64},[33,89605,79354],{"class":47},[33,89607,89608],{"class":35,"line":76},[33,89609,89610],{"class":47},"      fn()\n",[33,89612,89613],{"class":35,"line":87},[33,89614,4446],{"class":47},[33,89616,89617],{"class":35,"line":96},[33,89618,89619],{"class":47},"    fn()\n",[33,89621,89622,89624,89626],{"class":35,"line":103},[33,89623,54636],{"class":47},[33,89625,54034],{"class":53522},[33,89627,53529],{"class":47},[33,89629,89630,89632,89634],{"class":35,"line":108},[33,89631,54006],{"class":47},[33,89633,54021],{"class":53522},[33,89635,53529],{"class":47},[328,89637,89638],{"start":51},[331,89639,89640],{},"递归函数要加判断条件：",[19,89642,89643],{},[3736,89644],{"alt":28,"src":89645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[328,89647,89648],{"start":64},[331,89649,89650],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[23,89652,89654],{"className":52855,"code":89653,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,89655,89656,89666,89680,89684,89692,89706,89726,89738,89746,89750,89758,89770,89778,89786,89811,89823,89827,89834,89842,89850,89854],{"__ignoreMap":28},[33,89657,89658,89660,89662,89664],{"class":35,"line":36},[33,89659,53519],{"class":47},[33,89661,53523],{"class":53522},[33,89663,53526],{"class":43},[33,89665,53529],{"class":47},[33,89667,89668,89670,89672,89674,89676,89678],{"class":35,"line":51},[33,89669,2226],{"class":47},[33,89671,52857],{"class":53522},[33,89673,53538],{"class":43},[33,89675,57],{"class":47},[33,89677,53543],{"class":60},[33,89679,53529],{"class":47},[33,89681,89682],{"class":35,"line":64},[33,89683,100],{"emptyLinePlaceholder":99},[33,89685,89686,89688,89690],{"class":35,"line":76},[33,89687,2226],{"class":47},[33,89689,53556],{"class":53522},[33,89691,53529],{"class":47},[33,89693,89694,89696,89698,89700,89702,89704],{"class":35,"line":87},[33,89695,54364],{"class":47},[33,89697,53566],{"class":53522},[33,89699,53569],{"class":43},[33,89701,57],{"class":47},[33,89703,53574],{"class":60},[33,89705,53529],{"class":47},[33,89707,89708,89710,89712,89714,89716,89718,89720,89722,89724],{"class":35,"line":96},[33,89709,54364],{"class":47},[33,89711,53566],{"class":53522},[33,89713,17158],{"class":43},[33,89715,57],{"class":47},[33,89717,53613],{"class":60},[33,89719,53593],{"class":43},[33,89721,57],{"class":47},[33,89723,53620],{"class":60},[33,89725,53529],{"class":47},[33,89727,89728,89730,89732,89734,89736],{"class":35,"line":103},[33,89729,54364],{"class":47},[33,89731,53629],{"class":53522},[33,89733,53632],{"class":47},[33,89735,53629],{"class":53522},[33,89737,53529],{"class":47},[33,89739,89740,89742,89744],{"class":35,"line":108},[33,89741,54006],{"class":47},[33,89743,53556],{"class":53522},[33,89745,53529],{"class":47},[33,89747,89748],{"class":35,"line":119},[33,89749,100],{"emptyLinePlaceholder":99},[33,89751,89752,89754,89756],{"class":35,"line":128},[33,89753,2226],{"class":47},[33,89755,54021],{"class":53522},[33,89757,53529],{"class":47},[33,89759,89760,89762,89764,89766,89768],{"class":35,"line":1753},[33,89761,54364],{"class":47},[33,89763,53832],{"class":53522},[33,89765,57533],{"class":47},[33,89767,53832],{"class":53522},[33,89769,53529],{"class":47},[33,89771,89772,89774,89776],{"class":35,"line":1763},[33,89773,54364],{"class":47},[33,89775,54034],{"class":53522},[33,89777,53529],{"class":47},[33,89779,89780,89782,89784],{"class":35,"line":1775},[33,89781,72299],{"class":39},[33,89783,75986],{"class":43},[33,89785,13096],{"class":47},[33,89787,89788,89790,89792,89794,89796,89798,89800,89802,89804,89806,89809],{"class":35,"line":1780},[33,89789,57989],{"class":47},[33,89791,56618],{"class":43},[33,89793,133],{"class":47},[33,89795,84140],{"class":60},[33,89797,76461],{"class":47},[33,89799,57],{"class":39},[33,89801,13819],{"class":39},[33,89803,76002],{"class":43},[33,89805,19499],{"class":47},[33,89807,89808],{"class":43},"toLocaleString",[33,89810,4235],{"class":47},[33,89812,89813,89816,89819,89821],{"class":35,"line":1785},[33,89814,89815],{"class":43},"      setTimeout",[33,89817,89818],{"class":47},"(getTime, ",[33,89820,8656],{"class":72},[33,89822,226],{"class":47},[33,89824,89825],{"class":35,"line":1940},[33,89826,4446],{"class":47},[33,89828,89829,89832],{"class":35,"line":2183},[33,89830,89831],{"class":43},"    getTime",[33,89833,4235],{"class":47},[33,89835,89836,89838,89840],{"class":35,"line":2208},[33,89837,54636],{"class":47},[33,89839,54034],{"class":53522},[33,89841,53529],{"class":47},[33,89843,89844,89846,89848],{"class":35,"line":2234},[33,89845,54006],{"class":47},[33,89847,54021],{"class":53522},[33,89849,53529],{"class":47},[33,89851,89852],{"class":35,"line":2239},[33,89853,100],{"emptyLinePlaceholder":99},[33,89855,89856,89858,89860],{"class":35,"line":2247},[33,89857,54006],{"class":47},[33,89859,52857],{"class":53522},[33,89861,53529],{"class":47},[19,89863,89864],{},[3736,89865],{"alt":28,"src":89866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[328,89868,89869],{"start":76},[331,89870,89560],{},[19,89872,89873],{},[3736,89874],{"alt":28,"src":89875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89877,89878],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89880,41412],{},[19,89882,89883],{},"这个是简易版的递归函数深拷贝",[19,89885,89886],{},"一定要注意先数组再对象，因为万物皆可对象",[23,89888,89890],{"className":52855,"code":89889,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,89891,89892,89902,89916,89920,89928,89942,89962,89974,89982,89986,89994,90002,90012,90021,90029,90045,90049,90057,90061,90065,90077,90082,90101,90117,90122,90127,90132,90147,90152,90157,90166,90174,90191,90199,90205,90213,90218,90223,90232,90236,90240,90244,90255,90264,90274,90288,90298,90306,90314,90322,90326],{"__ignoreMap":28},[33,89893,89894,89896,89898,89900],{"class":35,"line":36},[33,89895,53519],{"class":47},[33,89897,53523],{"class":53522},[33,89899,53526],{"class":43},[33,89901,53529],{"class":47},[33,89903,89904,89906,89908,89910,89912,89914],{"class":35,"line":51},[33,89905,2226],{"class":47},[33,89907,52857],{"class":53522},[33,89909,53538],{"class":43},[33,89911,57],{"class":47},[33,89913,53543],{"class":60},[33,89915,53529],{"class":47},[33,89917,89918],{"class":35,"line":64},[33,89919,100],{"emptyLinePlaceholder":99},[33,89921,89922,89924,89926],{"class":35,"line":76},[33,89923,2226],{"class":47},[33,89925,53556],{"class":53522},[33,89927,53529],{"class":47},[33,89929,89930,89932,89934,89936,89938,89940],{"class":35,"line":87},[33,89931,54364],{"class":47},[33,89933,53566],{"class":53522},[33,89935,53569],{"class":43},[33,89937,57],{"class":47},[33,89939,53574],{"class":60},[33,89941,53529],{"class":47},[33,89943,89944,89946,89948,89950,89952,89954,89956,89958,89960],{"class":35,"line":96},[33,89945,54364],{"class":47},[33,89947,53566],{"class":53522},[33,89949,17158],{"class":43},[33,89951,57],{"class":47},[33,89953,53613],{"class":60},[33,89955,53593],{"class":43},[33,89957,57],{"class":47},[33,89959,53620],{"class":60},[33,89961,53529],{"class":47},[33,89963,89964,89966,89968,89970,89972],{"class":35,"line":103},[33,89965,54364],{"class":47},[33,89967,53629],{"class":53522},[33,89969,53632],{"class":47},[33,89971,53629],{"class":53522},[33,89973,53529],{"class":47},[33,89975,89976,89978,89980],{"class":35,"line":108},[33,89977,54006],{"class":47},[33,89979,53556],{"class":53522},[33,89981,53529],{"class":47},[33,89983,89984],{"class":35,"line":119},[33,89985,100],{"emptyLinePlaceholder":99},[33,89987,89988,89990,89992],{"class":35,"line":128},[33,89989,2226],{"class":47},[33,89991,54021],{"class":53522},[33,89993,53529],{"class":47},[33,89995,89996,89998,90000],{"class":35,"line":1753},[33,89997,54364],{"class":47},[33,89999,54034],{"class":53522},[33,90001,53529],{"class":47},[33,90003,90004,90006,90008,90010],{"class":35,"line":1763},[33,90005,13462],{"class":39},[33,90007,72186],{"class":72},[33,90009,15804],{"class":39},[33,90011,17810],{"class":47},[33,90013,90014,90016,90019],{"class":35,"line":1775},[33,90015,73829],{"class":47},[33,90017,90018],{"class":60},"'pink'",[33,90020,33696],{"class":47},[33,90022,90023,90025,90027],{"class":35,"line":1780},[33,90024,73839],{"class":47},[33,90026,248],{"class":72},[33,90028,33696],{"class":47},[33,90030,90031,90034,90037,90039,90042],{"class":35,"line":1785},[33,90032,90033],{"class":47},"      hobby: [",[33,90035,90036],{"class":60},"'乒乓球'",[33,90038,245],{"class":47},[33,90040,90041],{"class":60},"'足球'",[33,90043,90044],{"class":47},"],\n",[33,90046,90047],{"class":35,"line":1940},[33,90048,80083],{"class":47},[33,90050,90051,90054],{"class":35,"line":2183},[33,90052,90053],{"class":47},"        baby: ",[33,90055,90056],{"class":60},"'小pink'\n",[33,90058,90059],{"class":35,"line":2208},[33,90060,54617],{"class":47},[33,90062,90063],{"class":35,"line":2234},[33,90064,4446],{"class":47},[33,90066,90067,90069,90072,90074],{"class":35,"line":2239},[33,90068,13462],{"class":39},[33,90070,90071],{"class":72}," o",[33,90073,15804],{"class":39},[33,90075,90076],{"class":47}," {}\n",[33,90078,90079],{"class":35,"line":2247},[33,90080,90081],{"class":2487},"    \u002F\u002F 拷贝函数\n",[33,90083,90084,90086,90089,90091,90094,90096,90099],{"class":35,"line":2255},[33,90085,72299],{"class":39},[33,90087,90088],{"class":43}," deepCopy",[33,90090,133],{"class":47},[33,90092,90093],{"class":289},"newObj",[33,90095,245],{"class":47},[33,90097,90098],{"class":289},"oldObj",[33,90100,14682],{"class":47},[33,90102,90103,90105,90107,90109,90112,90114],{"class":35,"line":3992},[33,90104,54503],{"class":39},[33,90106,3924],{"class":47},[33,90108,54067],{"class":39},[33,90110,90111],{"class":47}," k ",[33,90113,681],{"class":39},[33,90115,90116],{"class":47}," oldObj) {\n",[33,90118,90119],{"class":35,"line":4009},[33,90120,90121],{"class":2487},"        \u002F\u002F 处理数组的问题\n",[33,90123,90124],{"class":35,"line":4014},[33,90125,90126],{"class":2487},"        \u002F\u002F 判断是否属于数组\n",[33,90128,90129],{"class":35,"line":4019},[33,90130,90131],{"class":2487},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[33,90133,90134,90136,90139,90142,90145],{"class":35,"line":4024},[33,90135,2130],{"class":39},[33,90137,90138],{"class":47}," (oldObj[k] ",[33,90140,90141],{"class":39},"instanceof",[33,90143,90144],{"class":43}," Array",[33,90146,14682],{"class":47},[33,90148,90149],{"class":35,"line":4038},[33,90150,90151],{"class":2487},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[33,90153,90154],{"class":35,"line":4043},[33,90155,90156],{"class":2487},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[33,90158,90159,90162,90164],{"class":35,"line":4834},[33,90160,90161],{"class":47},"          newObj[k] ",[33,90163,57],{"class":39},[33,90165,615],{"class":47},[33,90167,90168,90171],{"class":35,"line":4848},[33,90169,90170],{"class":43},"          deepCopy",[33,90172,90173],{"class":47},"(newObj[k], oldObj[k])\n",[33,90175,90176,90178,90180,90182,90184,90186,90189],{"class":35,"line":4856},[33,90177,82289],{"class":47},[33,90179,3963],{"class":39},[33,90181,3966],{"class":39},[33,90183,90138],{"class":47},[33,90185,90141],{"class":39},[33,90187,90188],{"class":43}," Object",[33,90190,14682],{"class":47},[33,90192,90193,90195,90197],{"class":35,"line":4861},[33,90194,90161],{"class":47},[33,90196,57],{"class":39},[33,90198,90076],{"class":47},[33,90200,90201,90203],{"class":35,"line":4867},[33,90202,90170],{"class":43},[33,90204,90173],{"class":47},[33,90206,90207,90209,90211],{"class":35,"line":4873},[33,90208,82289],{"class":47},[33,90210,3963],{"class":39},[33,90212,17810],{"class":47},[33,90214,90215],{"class":35,"line":4878},[33,90216,90217],{"class":2487},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[33,90219,90220],{"class":35,"line":10194},[33,90221,90222],{"class":2487},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[33,90224,90225,90227,90229],{"class":35,"line":10218},[33,90226,90161],{"class":47},[33,90228,57],{"class":39},[33,90230,90231],{"class":47}," oldObj[k]\n",[33,90233,90234],{"class":35,"line":10223},[33,90235,4786],{"class":47},[33,90237,90238],{"class":35,"line":10229},[33,90239,54617],{"class":47},[33,90241,90242],{"class":35,"line":10256},[33,90243,4446],{"class":47},[33,90245,90246,90249,90252],{"class":35,"line":10261},[33,90247,90248],{"class":43},"    deepCopy",[33,90250,90251],{"class":47},"(o, obj) ",[33,90253,90254],{"class":2487},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[33,90256,90257,90259,90261],{"class":35,"line":10267},[33,90258,75966],{"class":47},[33,90260,60465],{"class":43},[33,90262,90263],{"class":47},"(o)\n",[33,90265,90266,90269,90271],{"class":35,"line":10279},[33,90267,90268],{"class":47},"    o.age ",[33,90270,57],{"class":39},[33,90272,90273],{"class":72}," 20\n",[33,90275,90276,90279,90281,90283,90285],{"class":35,"line":10291},[33,90277,90278],{"class":47},"    o.hobby[",[33,90280,2617],{"class":72},[33,90282,2172],{"class":47},[33,90284,57],{"class":39},[33,90286,90287],{"class":60}," '篮球'\n",[33,90289,90290,90293,90295],{"class":35,"line":10303},[33,90291,90292],{"class":47},"    o.family ",[33,90294,57],{"class":39},[33,90296,90297],{"class":60}," '老pink'\n",[33,90299,90300,90302,90304],{"class":35,"line":11961},[33,90301,75966],{"class":47},[33,90303,60465],{"class":43},[33,90305,72251],{"class":47},[33,90307,90308,90310,90312],{"class":35,"line":11986},[33,90309,54636],{"class":47},[33,90311,54034],{"class":53522},[33,90313,53529],{"class":47},[33,90315,90316,90318,90320],{"class":35,"line":12009},[33,90317,54006],{"class":47},[33,90319,54021],{"class":53522},[33,90321,53529],{"class":47},[33,90323,90324],{"class":35,"line":12033},[33,90325,100],{"emptyLinePlaceholder":99},[33,90327,90328,90330,90332],{"class":35,"line":12038},[33,90329,54006],{"class":47},[33,90331,52857],{"class":53522},[33,90333,53529],{"class":47},[19,90335,90336],{},[3736,90337],{"alt":28,"src":90338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[24236,90340,90342,90343],{"id":90341},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2575,90344,90345],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90347,90348],{},[2663,90349,90350],{"href":90350,"rel":90351},"https:\u002F\u002Fwww.lodashjs.com\u002F",[26103],[19,90353,90354],{},"lodash里边的方法都要加上一个下划线_",[19,90356,90357],{},"_.cloneDeep()",[23,90359,90361],{"className":52855,"code":90360,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,90362,90363,90373,90387,90391,90399,90413,90433,90445,90453,90457,90465,90470,90489,90497,90507,90515,90523,90535,90539,90545,90549,90553,90569,90577,90586,90594,90602,90610,90614],{"__ignoreMap":28},[33,90364,90365,90367,90369,90371],{"class":35,"line":36},[33,90366,53519],{"class":47},[33,90368,53523],{"class":53522},[33,90370,53526],{"class":43},[33,90372,53529],{"class":47},[33,90374,90375,90377,90379,90381,90383,90385],{"class":35,"line":51},[33,90376,2226],{"class":47},[33,90378,52857],{"class":53522},[33,90380,53538],{"class":43},[33,90382,57],{"class":47},[33,90384,53543],{"class":60},[33,90386,53529],{"class":47},[33,90388,90389],{"class":35,"line":64},[33,90390,100],{"emptyLinePlaceholder":99},[33,90392,90393,90395,90397],{"class":35,"line":76},[33,90394,2226],{"class":47},[33,90396,53556],{"class":53522},[33,90398,53529],{"class":47},[33,90400,90401,90403,90405,90407,90409,90411],{"class":35,"line":87},[33,90402,54364],{"class":47},[33,90404,53566],{"class":53522},[33,90406,53569],{"class":43},[33,90408,57],{"class":47},[33,90410,53574],{"class":60},[33,90412,53529],{"class":47},[33,90414,90415,90417,90419,90421,90423,90425,90427,90429,90431],{"class":35,"line":96},[33,90416,54364],{"class":47},[33,90418,53566],{"class":53522},[33,90420,17158],{"class":43},[33,90422,57],{"class":47},[33,90424,53613],{"class":60},[33,90426,53593],{"class":43},[33,90428,57],{"class":47},[33,90430,53620],{"class":60},[33,90432,53529],{"class":47},[33,90434,90435,90437,90439,90441,90443],{"class":35,"line":103},[33,90436,54364],{"class":47},[33,90438,53629],{"class":53522},[33,90440,53632],{"class":47},[33,90442,53629],{"class":53522},[33,90444,53529],{"class":47},[33,90446,90447,90449,90451],{"class":35,"line":108},[33,90448,54006],{"class":47},[33,90450,53556],{"class":53522},[33,90452,53529],{"class":47},[33,90454,90455],{"class":35,"line":119},[33,90456,100],{"emptyLinePlaceholder":99},[33,90458,90459,90461,90463],{"class":35,"line":128},[33,90460,2226],{"class":47},[33,90462,54021],{"class":53522},[33,90464,53529],{"class":47},[33,90466,90467],{"class":35,"line":1753},[33,90468,90469],{"class":2487},"  \u003C!-- 先引用这个库 -->\n",[33,90471,90472,90474,90476,90478,90480,90483,90485,90487],{"class":35,"line":1763},[33,90473,54364],{"class":47},[33,90475,54034],{"class":53522},[33,90477,57458],{"class":43},[33,90479,57],{"class":47},[33,90481,90482],{"class":60},"\"lodash.min.js\"",[33,90484,57533],{"class":47},[33,90486,54034],{"class":53522},[33,90488,53529],{"class":47},[33,90490,90491,90493,90495],{"class":35,"line":1775},[33,90492,54364],{"class":47},[33,90494,54034],{"class":53522},[33,90496,53529],{"class":47},[33,90498,90499,90501,90503,90505],{"class":35,"line":1780},[33,90500,13462],{"class":39},[33,90502,72186],{"class":72},[33,90504,15804],{"class":39},[33,90506,17810],{"class":47},[33,90508,90509,90511,90513],{"class":35,"line":1785},[33,90510,73829],{"class":47},[33,90512,90018],{"class":60},[33,90514,33696],{"class":47},[33,90516,90517,90519,90521],{"class":35,"line":1940},[33,90518,73839],{"class":47},[33,90520,248],{"class":72},[33,90522,33696],{"class":47},[33,90524,90525,90527,90529,90531,90533],{"class":35,"line":2183},[33,90526,90033],{"class":47},[33,90528,90036],{"class":60},[33,90530,245],{"class":47},[33,90532,90041],{"class":60},[33,90534,90044],{"class":47},[33,90536,90537],{"class":35,"line":2208},[33,90538,80083],{"class":47},[33,90540,90541,90543],{"class":35,"line":2234},[33,90542,90053],{"class":47},[33,90544,90056],{"class":60},[33,90546,90547],{"class":35,"line":2239},[33,90548,54617],{"class":47},[33,90550,90551],{"class":35,"line":2247},[33,90552,4446],{"class":47},[33,90554,90555,90557,90559,90561,90564,90567],{"class":35,"line":2255},[33,90556,13462],{"class":39},[33,90558,90071],{"class":72},[33,90560,15804],{"class":39},[33,90562,90563],{"class":47}," _.",[33,90565,90566],{"class":43},"cloneDeep",[33,90568,72251],{"class":47},[33,90570,90571,90573,90575],{"class":35,"line":3992},[33,90572,75966],{"class":47},[33,90574,60465],{"class":43},[33,90576,90263],{"class":47},[33,90578,90579,90582,90584],{"class":35,"line":4009},[33,90580,90581],{"class":47},"    o.family.baby ",[33,90583,57],{"class":39},[33,90585,90297],{"class":60},[33,90587,90588,90590,90592],{"class":35,"line":4014},[33,90589,75966],{"class":47},[33,90591,60465],{"class":43},[33,90593,72251],{"class":47},[33,90595,90596,90598,90600],{"class":35,"line":4019},[33,90597,54636],{"class":47},[33,90599,54034],{"class":53522},[33,90601,53529],{"class":47},[33,90603,90604,90606,90608],{"class":35,"line":4024},[33,90605,54006],{"class":47},[33,90607,54021],{"class":53522},[33,90609,53529],{"class":47},[33,90611,90612],{"class":35,"line":4038},[33,90613,100],{"emptyLinePlaceholder":99},[33,90615,90616,90618,90620],{"class":35,"line":4043},[33,90617,54006],{"class":47},[33,90619,52857],{"class":53522},[33,90621,53529],{"class":47},[19,90623,90624],{},[3736,90625],{"alt":28,"src":90626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[24236,90628,90630],{"id":90629},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[23,90632,90634],{"className":52855,"code":90633,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,90635,90636,90646,90660,90664,90672,90686,90706,90718,90726,90730,90738,90746,90756,90764,90772,90784,90788,90794,90798,90802,90807,90812,90817,90843,90851,90860,90868,90876,90884,90888],{"__ignoreMap":28},[33,90637,90638,90640,90642,90644],{"class":35,"line":36},[33,90639,53519],{"class":47},[33,90641,53523],{"class":53522},[33,90643,53526],{"class":43},[33,90645,53529],{"class":47},[33,90647,90648,90650,90652,90654,90656,90658],{"class":35,"line":51},[33,90649,2226],{"class":47},[33,90651,52857],{"class":53522},[33,90653,53538],{"class":43},[33,90655,57],{"class":47},[33,90657,53543],{"class":60},[33,90659,53529],{"class":47},[33,90661,90662],{"class":35,"line":64},[33,90663,100],{"emptyLinePlaceholder":99},[33,90665,90666,90668,90670],{"class":35,"line":76},[33,90667,2226],{"class":47},[33,90669,53556],{"class":53522},[33,90671,53529],{"class":47},[33,90673,90674,90676,90678,90680,90682,90684],{"class":35,"line":87},[33,90675,54364],{"class":47},[33,90677,53566],{"class":53522},[33,90679,53569],{"class":43},[33,90681,57],{"class":47},[33,90683,53574],{"class":60},[33,90685,53529],{"class":47},[33,90687,90688,90690,90692,90694,90696,90698,90700,90702,90704],{"class":35,"line":96},[33,90689,54364],{"class":47},[33,90691,53566],{"class":53522},[33,90693,17158],{"class":43},[33,90695,57],{"class":47},[33,90697,53613],{"class":60},[33,90699,53593],{"class":43},[33,90701,57],{"class":47},[33,90703,53620],{"class":60},[33,90705,53529],{"class":47},[33,90707,90708,90710,90712,90714,90716],{"class":35,"line":103},[33,90709,54364],{"class":47},[33,90711,53629],{"class":53522},[33,90713,53632],{"class":47},[33,90715,53629],{"class":53522},[33,90717,53529],{"class":47},[33,90719,90720,90722,90724],{"class":35,"line":108},[33,90721,54006],{"class":47},[33,90723,53556],{"class":53522},[33,90725,53529],{"class":47},[33,90727,90728],{"class":35,"line":119},[33,90729,100],{"emptyLinePlaceholder":99},[33,90731,90732,90734,90736],{"class":35,"line":128},[33,90733,2226],{"class":47},[33,90735,54021],{"class":53522},[33,90737,53529],{"class":47},[33,90739,90740,90742,90744],{"class":35,"line":1753},[33,90741,54364],{"class":47},[33,90743,54034],{"class":53522},[33,90745,53529],{"class":47},[33,90747,90748,90750,90752,90754],{"class":35,"line":1763},[33,90749,13462],{"class":39},[33,90751,72186],{"class":72},[33,90753,15804],{"class":39},[33,90755,17810],{"class":47},[33,90757,90758,90760,90762],{"class":35,"line":1775},[33,90759,73829],{"class":47},[33,90761,90018],{"class":60},[33,90763,33696],{"class":47},[33,90765,90766,90768,90770],{"class":35,"line":1780},[33,90767,73839],{"class":47},[33,90769,248],{"class":72},[33,90771,33696],{"class":47},[33,90773,90774,90776,90778,90780,90782],{"class":35,"line":1785},[33,90775,90033],{"class":47},[33,90777,90036],{"class":60},[33,90779,245],{"class":47},[33,90781,90041],{"class":60},[33,90783,90044],{"class":47},[33,90785,90786],{"class":35,"line":1940},[33,90787,80083],{"class":47},[33,90789,90790,90792],{"class":35,"line":2183},[33,90791,90053],{"class":47},[33,90793,90056],{"class":60},[33,90795,90796],{"class":35,"line":2208},[33,90797,54617],{"class":47},[33,90799,90800],{"class":35,"line":2234},[33,90801,4446],{"class":47},[33,90803,90804],{"class":35,"line":2239},[33,90805,90806],{"class":2487},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[33,90808,90809],{"class":35,"line":2247},[33,90810,90811],{"class":2487},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[33,90813,90814],{"class":35,"line":2255},[33,90815,90816],{"class":2487},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[33,90818,90819,90821,90823,90825,90828,90830,90833,90835,90837,90839,90841],{"class":35,"line":3992},[33,90820,13462],{"class":39},[33,90822,90071],{"class":72},[33,90824,15804],{"class":39},[33,90826,90827],{"class":72}," JSON",[33,90829,2975],{"class":47},[33,90831,90832],{"class":43},"parse",[33,90834,133],{"class":47},[33,90836,73877],{"class":72},[33,90838,2975],{"class":47},[33,90840,73882],{"class":43},[33,90842,73885],{"class":47},[33,90844,90845,90847,90849],{"class":35,"line":4009},[33,90846,75966],{"class":47},[33,90848,60465],{"class":43},[33,90850,90263],{"class":47},[33,90852,90853,90855,90857],{"class":35,"line":4014},[33,90854,90581],{"class":47},[33,90856,57],{"class":39},[33,90858,90859],{"class":60}," '123'\n",[33,90861,90862,90864,90866],{"class":35,"line":4019},[33,90863,75966],{"class":47},[33,90865,60465],{"class":43},[33,90867,72251],{"class":47},[33,90869,90870,90872,90874],{"class":35,"line":4024},[33,90871,54636],{"class":47},[33,90873,54034],{"class":53522},[33,90875,53529],{"class":47},[33,90877,90878,90880,90882],{"class":35,"line":4038},[33,90879,54006],{"class":47},[33,90881,54021],{"class":53522},[33,90883,53529],{"class":47},[33,90885,90886],{"class":35,"line":4043},[33,90887,100],{"emptyLinePlaceholder":99},[33,90889,90890,90892,90894],{"class":35,"line":4834},[33,90891,54006],{"class":47},[33,90893,52857],{"class":53522},[33,90895,53529],{"class":47},[19,90897,90898],{},[3736,90899],{"alt":28,"src":90900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90902,90904],{"id":90903},"_415-异常处理","4.15 异常处理",[328,90906,90907],{},[331,90908,90909],{},"throw抛异常",[19,90911,90912],{},[3736,90913],{"alt":28,"src":90914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[328,90916,90917],{"start":51},[331,90918,90919],{},"try\u002Fcatch 捕获错误信息",[19,90921,90922],{},[3736,90923],{"alt":28,"src":90924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[23,90926,90928],{"className":52855,"code":90927,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,90929,90930,90940,90954,90958,90966,90980,91000,91012,91020,91024,91032,91044,91052,91061,91068,91073,91092,91101,91112,91117,91127,91132,91137,91142,91159,91163,91168,91175,91187,91191,91203,91207,91211,91216,91221,91228,91236,91244,91248],{"__ignoreMap":28},[33,90931,90932,90934,90936,90938],{"class":35,"line":36},[33,90933,53519],{"class":47},[33,90935,53523],{"class":53522},[33,90937,53526],{"class":43},[33,90939,53529],{"class":47},[33,90941,90942,90944,90946,90948,90950,90952],{"class":35,"line":51},[33,90943,2226],{"class":47},[33,90945,52857],{"class":53522},[33,90947,53538],{"class":43},[33,90949,57],{"class":47},[33,90951,53543],{"class":60},[33,90953,53529],{"class":47},[33,90955,90956],{"class":35,"line":64},[33,90957,100],{"emptyLinePlaceholder":99},[33,90959,90960,90962,90964],{"class":35,"line":76},[33,90961,2226],{"class":47},[33,90963,53556],{"class":53522},[33,90965,53529],{"class":47},[33,90967,90968,90970,90972,90974,90976,90978],{"class":35,"line":87},[33,90969,54364],{"class":47},[33,90971,53566],{"class":53522},[33,90973,53569],{"class":43},[33,90975,57],{"class":47},[33,90977,53574],{"class":60},[33,90979,53529],{"class":47},[33,90981,90982,90984,90986,90988,90990,90992,90994,90996,90998],{"class":35,"line":96},[33,90983,54364],{"class":47},[33,90985,53566],{"class":53522},[33,90987,17158],{"class":43},[33,90989,57],{"class":47},[33,90991,53613],{"class":60},[33,90993,53593],{"class":43},[33,90995,57],{"class":47},[33,90997,53620],{"class":60},[33,90999,53529],{"class":47},[33,91001,91002,91004,91006,91008,91010],{"class":35,"line":103},[33,91003,54364],{"class":47},[33,91005,53629],{"class":53522},[33,91007,53632],{"class":47},[33,91009,53629],{"class":53522},[33,91011,53529],{"class":47},[33,91013,91014,91016,91018],{"class":35,"line":108},[33,91015,54006],{"class":47},[33,91017,53556],{"class":53522},[33,91019,53529],{"class":47},[33,91021,91022],{"class":35,"line":119},[33,91023,100],{"emptyLinePlaceholder":99},[33,91025,91026,91028,91030],{"class":35,"line":128},[33,91027,2226],{"class":47},[33,91029,54021],{"class":53522},[33,91031,53529],{"class":47},[33,91033,91034,91036,91038,91040,91042],{"class":35,"line":1753},[33,91035,54364],{"class":47},[33,91037,19],{"class":53522},[33,91039,55713],{"class":47},[33,91041,19],{"class":53522},[33,91043,53529],{"class":47},[33,91045,91046,91048,91050],{"class":35,"line":1763},[33,91047,54364],{"class":47},[33,91049,54034],{"class":53522},[33,91051,53529],{"class":47},[33,91053,91054,91056,91059],{"class":35,"line":1775},[33,91055,72299],{"class":39},[33,91057,91058],{"class":43}," fn",[33,91060,13096],{"class":47},[33,91062,91063,91066],{"class":35,"line":1780},[33,91064,91065],{"class":39},"      try",[33,91067,17810],{"class":47},[33,91069,91070],{"class":35,"line":1785},[33,91071,91072],{"class":2487},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[33,91074,91075,91077,91079,91081,91083,91085,91087,91090],{"class":35,"line":1940},[33,91076,63488],{"class":39},[33,91078,9071],{"class":72},[33,91080,15804],{"class":39},[33,91082,56615],{"class":47},[33,91084,56618],{"class":43},[33,91086,133],{"class":47},[33,91088,91089],{"class":60},"'.p'",[33,91091,226],{"class":47},[33,91093,91094,91097,91099],{"class":35,"line":2183},[33,91095,91096],{"class":47},"        p.style.color ",[33,91098,57],{"class":39},[33,91100,69268],{"class":60},[33,91102,91103,91106,91109],{"class":35,"line":2208},[33,91104,91105],{"class":47},"      } ",[33,91107,91108],{"class":39},"catch",[33,91110,91111],{"class":47}," (err) {\n",[33,91113,91114],{"class":35,"line":2234},[33,91115,91116],{"class":2487},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[33,91118,91119,91122,91124],{"class":35,"line":2239},[33,91120,91121],{"class":47},"        console.",[33,91123,60465],{"class":43},[33,91125,91126],{"class":47},"(err.message)\n",[33,91128,91129],{"class":35,"line":2247},[33,91130,91131],{"class":2487},"        \u002F\u002F 想要中断程序，需要加return\n",[33,91133,91134],{"class":35,"line":2255},[33,91135,91136],{"class":2487},"        \u002F\u002F return\n",[33,91138,91139],{"class":35,"line":3992},[33,91140,91141],{"class":2487},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[33,91143,91144,91147,91149,91152,91154,91157],{"class":35,"line":4009},[33,91145,91146],{"class":39},"        throw",[33,91148,13819],{"class":39},[33,91150,91151],{"class":43}," Error",[33,91153,133],{"class":47},[33,91155,91156],{"class":60},"'你看看，选择器错误了吧'",[33,91158,226],{"class":47},[33,91160,91161],{"class":35,"line":4014},[33,91162,54617],{"class":47},[33,91164,91165],{"class":35,"line":4019},[33,91166,91167],{"class":2487},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[33,91169,91170,91173],{"class":35,"line":4024},[33,91171,91172],{"class":39},"      finally",[33,91174,17810],{"class":47},[33,91176,91177,91180,91182,91185],{"class":35,"line":4038},[33,91178,91179],{"class":43},"        alert",[33,91181,133],{"class":47},[33,91183,91184],{"class":60},"'弹出对话框'",[33,91186,226],{"class":47},[33,91188,91189],{"class":35,"line":4043},[33,91190,54617],{"class":47},[33,91192,91193,91195,91197,91199,91201],{"class":35,"line":4834},[33,91194,60462],{"class":47},[33,91196,60465],{"class":43},[33,91198,133],{"class":47},[33,91200,2890],{"class":72},[33,91202,226],{"class":47},[33,91204,91205],{"class":35,"line":4848},[33,91206,100],{"emptyLinePlaceholder":99},[33,91208,91209],{"class":35,"line":4856},[33,91210,4446],{"class":47},[33,91212,91213],{"class":35,"line":4861},[33,91214,91215],{"class":2487},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[33,91217,91218],{"class":35,"line":4867},[33,91219,91220],{"class":2487},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[33,91222,91223,91226],{"class":35,"line":4873},[33,91224,91225],{"class":43},"    fn",[33,91227,4235],{"class":47},[33,91229,91230,91232,91234],{"class":35,"line":4878},[33,91231,54636],{"class":47},[33,91233,54034],{"class":53522},[33,91235,53529],{"class":47},[33,91237,91238,91240,91242],{"class":35,"line":10194},[33,91239,54006],{"class":47},[33,91241,54021],{"class":53522},[33,91243,53529],{"class":47},[33,91245,91246],{"class":35,"line":10218},[33,91247,100],{"emptyLinePlaceholder":99},[33,91249,91250,91252,91254],{"class":35,"line":10223},[33,91251,54006],{"class":47},[33,91253,52857],{"class":53522},[33,91255,53529],{"class":47},[19,91257,91258],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[328,91260,91261],{"start":64},[331,91262,91263],{},"debugger",[19,91265,91266],{},[3736,91267],{"alt":28,"src":91268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,91270,91271],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,91273,91275],{"id":91274},"_416-处理this","4.16 处理this",[631,91277,91279],{"id":91278},"_4161-this的指向","4.16.1 this的指向",[328,91281,91282],{},[331,91283,91284],{},"普通函数的this",[19,91286,91287],{},[3736,91288],{"alt":28,"src":91289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[328,91291,91292],{"start":51},[331,91293,91294],{},"箭头函数的this",[19,91296,91297],{},[3736,91298],{"alt":28,"src":91299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91301,91302],{},[3736,91303],{"alt":28,"src":91304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91306,91307],{},[3736,91308],{"alt":28,"src":91309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[631,91311,91313],{"id":91312},"_4162-this的改变","4.16.2 this的改变",[19,91315,91316],{},"call() apply() bind()",[328,91318,91319],{},[331,91320,91321],{},"call()",[19,91323,91324],{},[3736,91325],{"alt":28,"src":91326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91328,91329],{},"两个作用：①调用函数；②改变this指向",[23,91331,91333],{"className":55286,"code":91332,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,91334,91335,91343,91351,91355,91360,91364,91369,91374,91379,91383,91388,91396],{"__ignoreMap":28},[33,91336,91337,91339,91341],{"class":35,"line":36},[33,91338,2226],{"class":47},[33,91340,54021],{"class":53522},[33,91342,53529],{"class":47},[33,91344,91345,91347,91349],{"class":35,"line":51},[33,91346,54364],{"class":47},[33,91348,54034],{"class":53522},[33,91350,53529],{"class":47},[33,91352,91353],{"class":35,"line":64},[33,91354,73736],{"class":47},[33,91356,91357],{"class":35,"line":76},[33,91358,91359],{"class":47},"      uname: 'pink'\n",[33,91361,91362],{"class":35,"line":87},[33,91363,4446],{"class":47},[33,91365,91366],{"class":35,"line":96},[33,91367,91368],{"class":47},"    function fn(x, y) {\n",[33,91370,91371],{"class":35,"line":103},[33,91372,91373],{"class":47},"      console.log(this)  \u002F\u002Fwindow\n",[33,91375,91376],{"class":35,"line":108},[33,91377,91378],{"class":47},"      console.log(x + y)\n",[33,91380,91381],{"class":35,"line":119},[33,91382,4446],{"class":47},[33,91384,91385],{"class":35,"line":128},[33,91386,91387],{"class":47},"    fn.call(obj, 1, 2)\n",[33,91389,91390,91392,91394],{"class":35,"line":1753},[33,91391,54636],{"class":47},[33,91393,54034],{"class":53522},[33,91395,53529],{"class":47},[33,91397,91398,91400,91402],{"class":35,"line":1763},[33,91399,54006],{"class":47},[33,91401,54021],{"class":53522},[33,91403,53529],{"class":47},[19,91405,91406],{},[3736,91407],{"alt":28,"src":91408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[328,91410,91411],{"start":51},[331,91412,91413],{},"apply()",[19,91415,91416],{},[3736,91417],{"alt":28,"src":91418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91420,91329],{},[19,91422,91423],{},"call传递的是普通参数，而apply必须传递的是数组",[23,91425,91427],{"className":52855,"code":91426,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,91428,91429,91439,91453,91457,91465,91479,91499,91511,91519,91523,91531,91539,91549,91556,91560,91565,91581,91593,91607,91611,91616,91635,91640,91644,91649,91654,91662,91667,91689,91694,91710,91726,91738,91742,91747,91766,91774,91782,91786],{"__ignoreMap":28},[33,91430,91431,91433,91435,91437],{"class":35,"line":36},[33,91432,53519],{"class":47},[33,91434,53523],{"class":53522},[33,91436,53526],{"class":43},[33,91438,53529],{"class":47},[33,91440,91441,91443,91445,91447,91449,91451],{"class":35,"line":51},[33,91442,2226],{"class":47},[33,91444,52857],{"class":53522},[33,91446,53538],{"class":43},[33,91448,57],{"class":47},[33,91450,53543],{"class":60},[33,91452,53529],{"class":47},[33,91454,91455],{"class":35,"line":64},[33,91456,100],{"emptyLinePlaceholder":99},[33,91458,91459,91461,91463],{"class":35,"line":76},[33,91460,2226],{"class":47},[33,91462,53556],{"class":53522},[33,91464,53529],{"class":47},[33,91466,91467,91469,91471,91473,91475,91477],{"class":35,"line":87},[33,91468,54364],{"class":47},[33,91470,53566],{"class":53522},[33,91472,53569],{"class":43},[33,91474,57],{"class":47},[33,91476,53574],{"class":60},[33,91478,53529],{"class":47},[33,91480,91481,91483,91485,91487,91489,91491,91493,91495,91497],{"class":35,"line":96},[33,91482,54364],{"class":47},[33,91484,53566],{"class":53522},[33,91486,17158],{"class":43},[33,91488,57],{"class":47},[33,91490,53613],{"class":60},[33,91492,53593],{"class":43},[33,91494,57],{"class":47},[33,91496,53620],{"class":60},[33,91498,53529],{"class":47},[33,91500,91501,91503,91505,91507,91509],{"class":35,"line":103},[33,91502,54364],{"class":47},[33,91504,53629],{"class":53522},[33,91506,53632],{"class":47},[33,91508,53629],{"class":53522},[33,91510,53529],{"class":47},[33,91512,91513,91515,91517],{"class":35,"line":108},[33,91514,54006],{"class":47},[33,91516,53556],{"class":53522},[33,91518,53529],{"class":47},[33,91520,91521],{"class":35,"line":119},[33,91522,100],{"emptyLinePlaceholder":99},[33,91524,91525,91527,91529],{"class":35,"line":128},[33,91526,2226],{"class":47},[33,91528,54021],{"class":53522},[33,91530,53529],{"class":47},[33,91532,91533,91535,91537],{"class":35,"line":1753},[33,91534,54364],{"class":47},[33,91536,54034],{"class":53522},[33,91538,53529],{"class":47},[33,91540,91541,91543,91545,91547],{"class":35,"line":1763},[33,91542,13462],{"class":39},[33,91544,72186],{"class":72},[33,91546,15804],{"class":39},[33,91548,17810],{"class":47},[33,91550,91551,91553],{"class":35,"line":1775},[33,91552,73839],{"class":47},[33,91554,91555],{"class":72},"18\n",[33,91557,91558],{"class":35,"line":1780},[33,91559,4446],{"class":47},[33,91561,91562],{"class":35,"line":1785},[33,91563,91564],{"class":2487},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[33,91566,91567,91569,91571,91573,91575,91577,91579],{"class":35,"line":1940},[33,91568,72299],{"class":39},[33,91570,91058],{"class":43},[33,91572,133],{"class":47},[33,91574,3232],{"class":289},[33,91576,245],{"class":47},[33,91578,3257],{"class":289},[33,91580,14682],{"class":47},[33,91582,91583,91585,91587,91589,91591],{"class":35,"line":2183},[33,91584,60462],{"class":47},[33,91586,60465],{"class":43},[33,91588,133],{"class":47},[33,91590,89202],{"class":72},[33,91592,226],{"class":47},[33,91594,91595,91597,91599,91602,91604],{"class":35,"line":2208},[33,91596,60462],{"class":47},[33,91598,60465],{"class":43},[33,91600,91601],{"class":47},"(x ",[33,91603,880],{"class":39},[33,91605,91606],{"class":47}," y)\n",[33,91608,91609],{"class":35,"line":2234},[33,91610,4446],{"class":47},[33,91612,91613],{"class":35,"line":2239},[33,91614,91615],{"class":2487},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[33,91617,91618,91621,91624,91627,91629,91631,91633],{"class":35,"line":2247},[33,91619,91620],{"class":47},"    fn.",[33,91622,91623],{"class":43},"apply",[33,91625,91626],{"class":47},"(obj, [",[33,91628,720],{"class":72},[33,91630,245],{"class":47},[33,91632,725],{"class":72},[33,91634,6907],{"class":47},[33,91636,91637],{"class":35,"line":2255},[33,91638,91639],{"class":2487},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[33,91641,91642],{"class":35,"line":3992},[33,91643,100],{"emptyLinePlaceholder":99},[33,91645,91646],{"class":35,"line":4009},[33,91647,91648],{"class":2487},"    \u002F\u002F 使用场景：求数组最大值\n",[33,91650,91651],{"class":35,"line":4014},[33,91652,91653],{"class":2487},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[33,91655,91656,91659],{"class":35,"line":4019},[33,91657,91658],{"class":2487},"    \u002F\u002F console.log(max)",[33,91660,91661],{"class":2487},"   \u002F\u002F3\n",[33,91663,91664],{"class":35,"line":4024},[33,91665,91666],{"class":2487},"    \u002F\u002F 指向空或者Math都是可以的\n",[33,91668,91669,91671,91673,91675,91677,91679,91681,91683,91685,91687],{"class":35,"line":4038},[33,91670,13462],{"class":39},[33,91672,59913],{"class":72},[33,91674,15804],{"class":39},[33,91676,906],{"class":47},[33,91678,2734],{"class":72},[33,91680,245],{"class":47},[33,91682,2921],{"class":72},[33,91684,245],{"class":47},[33,91686,2952],{"class":72},[33,91688,919],{"class":47},[33,91690,91691],{"class":35,"line":4043},[33,91692,91693],{"class":2487},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[33,91695,91696,91698,91700,91702,91705,91707],{"class":35,"line":4834},[33,91697,13462],{"class":39},[33,91699,8197],{"class":72},[33,91701,15804],{"class":39},[33,91703,91704],{"class":47}," Math.max.",[33,91706,91623],{"class":43},[33,91708,91709],{"class":47},"(Math, arr)\n",[33,91711,91712,91714,91717,91719,91722,91724],{"class":35,"line":4848},[33,91713,13462],{"class":39},[33,91715,91716],{"class":72}," min",[33,91718,15804],{"class":39},[33,91720,91721],{"class":47}," Math.min.",[33,91723,91623],{"class":43},[33,91725,91709],{"class":47},[33,91727,91728,91730,91732,91735],{"class":35,"line":4856},[33,91729,75966],{"class":47},[33,91731,60465],{"class":43},[33,91733,91734],{"class":47},"(max, min)     ",[33,91736,91737],{"class":2487},"\u002F\u002F100,4\n",[33,91739,91740],{"class":35,"line":4861},[33,91741,100],{"emptyLinePlaceholder":99},[33,91743,91744],{"class":35,"line":4867},[33,91745,91746],{"class":2487},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[33,91748,91749,91751,91753,91756,91758,91760,91763],{"class":35,"line":4873},[33,91750,75966],{"class":47},[33,91752,60465],{"class":43},[33,91754,91755],{"class":47},"(Max.",[33,91757,8261],{"class":43},[33,91759,133],{"class":47},[33,91761,91762],{"class":39},"...",[33,91764,91765],{"class":47},"arr))\n",[33,91767,91768,91770,91772],{"class":35,"line":4878},[33,91769,54636],{"class":47},[33,91771,54034],{"class":53522},[33,91773,53529],{"class":47},[33,91775,91776,91778,91780],{"class":35,"line":10194},[33,91777,54006],{"class":47},[33,91779,54021],{"class":53522},[33,91781,53529],{"class":47},[33,91783,91784],{"class":35,"line":10218},[33,91785,100],{"emptyLinePlaceholder":99},[33,91787,91788,91790,91792],{"class":35,"line":10223},[33,91789,54006],{"class":47},[33,91791,52857],{"class":53522},[33,91793,53529],{"class":47},[19,91795,91796],{},[3736,91797],{"alt":28,"src":91798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[328,91800,91801],{"start":64},[331,91802,91803],{},"bind()",[19,91805,91806],{},[3736,91807],{"alt":28,"src":91808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91810,91811],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91813,91814],{},"bind的语法跟call很相似",[23,91816,91818],{"className":55286,"code":91817,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,91819,91820,91828,91836,91840,91845,91849,91853,91858,91862,91867,91872,91877,91882,91887,91892,91897,91901,91909],{"__ignoreMap":28},[33,91821,91822,91824,91826],{"class":35,"line":36},[33,91823,2226],{"class":47},[33,91825,54021],{"class":53522},[33,91827,53529],{"class":47},[33,91829,91830,91832,91834],{"class":35,"line":51},[33,91831,54364],{"class":47},[33,91833,54034],{"class":53522},[33,91835,53529],{"class":47},[33,91837,91838],{"class":35,"line":64},[33,91839,73736],{"class":47},[33,91841,91842],{"class":35,"line":76},[33,91843,91844],{"class":47},"      age: 18\n",[33,91846,91847],{"class":35,"line":87},[33,91848,4446],{"class":47},[33,91850,91851],{"class":35,"line":96},[33,91852,79354],{"class":47},[33,91854,91855],{"class":35,"line":103},[33,91856,91857],{"class":47},"      console.log(this)\n",[33,91859,91860],{"class":35,"line":108},[33,91861,4446],{"class":47},[33,91863,91864],{"class":35,"line":119},[33,91865,91866],{"class":47},"    \u002F\u002F 1.bind 不会调用函数\n",[33,91868,91869],{"class":35,"line":128},[33,91870,91871],{"class":47},"    \u002F\u002F 2.bind能改变this的指向\n",[33,91873,91874],{"class":35,"line":1753},[33,91875,91876],{"class":47},"    fn.bind()\n",[33,91878,91879],{"class":35,"line":1763},[33,91880,91881],{"class":47},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[33,91883,91884],{"class":35,"line":1775},[33,91885,91886],{"class":47},"    const fun = fn.bind(obj)\n",[33,91888,91889],{"class":35,"line":1780},[33,91890,91891],{"class":47},"    \u002F\u002F console.log(fun)\n",[33,91893,91894],{"class":35,"line":1785},[33,91895,91896],{"class":47},"    \u002F\u002F 调用,查看this的指向\n",[33,91898,91899],{"class":35,"line":1940},[33,91900,54870],{"class":47},[33,91902,91903,91905,91907],{"class":35,"line":2183},[33,91904,54636],{"class":47},[33,91906,54034],{"class":53522},[33,91908,53529],{"class":47},[33,91910,91911,91913,91915],{"class":35,"line":2208},[33,91912,54006],{"class":47},[33,91914,54021],{"class":53522},[33,91916,53529],{"class":47},[19,91918,91919],{},[3736,91920],{"alt":28,"src":91921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[328,91923,91924],{"start":76},[331,91925,91926],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[23,91928,91930],{"className":55286,"code":91929,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,91931,91932,91940,91953,91961,91966,91970,91975,91980,91985,91990,91995,92000,92005,92010,92014,92022],{"__ignoreMap":28},[33,91933,91934,91936,91938],{"class":35,"line":36},[33,91935,2226],{"class":47},[33,91937,54021],{"class":53522},[33,91939,53529],{"class":47},[33,91941,91942,91944,91946,91949,91951],{"class":35,"line":51},[33,91943,54364],{"class":47},[33,91945,56106],{"class":53522},[33,91947,91948],{"class":47},">禁用\u003C\u002F",[33,91950,56106],{"class":53522},[33,91952,53529],{"class":47},[33,91954,91955,91957,91959],{"class":35,"line":64},[33,91956,54364],{"class":47},[33,91958,54034],{"class":53522},[33,91960,53529],{"class":47},[33,91962,91963],{"class":35,"line":76},[33,91964,91965],{"class":47},"    const btn = document.querySelector('button')\n",[33,91967,91968],{"class":35,"line":87},[33,91969,61234],{"class":47},[33,91971,91972],{"class":35,"line":96},[33,91973,91974],{"class":47},"      this.disabled = true\n",[33,91976,91977],{"class":35,"line":103},[33,91978,91979],{"class":47},"      \u002F\u002F 定时器是window进行调用的\n",[33,91981,91982],{"class":35,"line":108},[33,91983,91984],{"class":47},"      setTimeout(function () {\n",[33,91986,91987],{"class":35,"line":119},[33,91988,91989],{"class":47},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[33,91991,91992],{"class":35,"line":128},[33,91993,91994],{"class":47},"        this.disabled = false\n",[33,91996,91997],{"class":35,"line":1753},[33,91998,91999],{"class":47},"      }.bind(this), 2000)\n",[33,92001,92002],{"class":35,"line":1763},[33,92003,92004],{"class":47},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[33,92006,92007],{"class":35,"line":1775},[33,92008,92009],{"class":47},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[33,92011,92012],{"class":35,"line":1780},[33,92013,35686],{"class":47},[33,92015,92016,92018,92020],{"class":35,"line":1785},[33,92017,54636],{"class":47},[33,92019,54034],{"class":53522},[33,92021,53529],{"class":47},[33,92023,92024,92026,92028],{"class":35,"line":1940},[33,92025,54006],{"class":47},[33,92027,54021],{"class":53522},[33,92029,53529],{"class":47},[328,92031,92032],{"start":87},[331,92033,24191],{},[19,92035,92036],{},[3736,92037],{"alt":28,"src":92038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,92040,92042],{"id":92041},"_417-性能优化","4.17 性能优化",[631,92044,92046],{"id":92045},"_4171-防抖","4.17.1 防抖",[19,92048,92049],{},[3736,92050],{"alt":28,"src":92051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,92053,92054],{},[2575,92055,92056],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,92058,92059],{},"防抖实现方式：",[3413,92061,92062],{},[331,92063,92064],{},"lodash 提供了防抖处理",[19,92066,92067],{},"_.debounce(func,[wait=0],[options={}])",[19,92069,92070],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[23,92072,92074],{"className":52855,"code":92073,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,92075,92076,92086,92100,92104,92112,92126,92146,92158,92166,92172,92182,92194,92206,92217,92229,92239,92249,92262,92266,92274,92282,92286,92294,92312,92330,92338,92357,92367,92376,92387,92392,92396,92401,92406,92411,92436,92444,92452,92456],{"__ignoreMap":28},[33,92077,92078,92080,92082,92084],{"class":35,"line":36},[33,92079,53519],{"class":47},[33,92081,53523],{"class":53522},[33,92083,53526],{"class":43},[33,92085,53529],{"class":47},[33,92087,92088,92090,92092,92094,92096,92098],{"class":35,"line":51},[33,92089,2226],{"class":47},[33,92091,52857],{"class":53522},[33,92093,53538],{"class":43},[33,92095,57],{"class":47},[33,92097,53543],{"class":60},[33,92099,53529],{"class":47},[33,92101,92102],{"class":35,"line":64},[33,92103,100],{"emptyLinePlaceholder":99},[33,92105,92106,92108,92110],{"class":35,"line":76},[33,92107,2226],{"class":47},[33,92109,53556],{"class":53522},[33,92111,53529],{"class":47},[33,92113,92114,92116,92118,92120,92122,92124],{"class":35,"line":87},[33,92115,54364],{"class":47},[33,92117,53566],{"class":53522},[33,92119,53569],{"class":43},[33,92121,57],{"class":47},[33,92123,53574],{"class":60},[33,92125,53529],{"class":47},[33,92127,92128,92130,92132,92134,92136,92138,92140,92142,92144],{"class":35,"line":96},[33,92129,54364],{"class":47},[33,92131,53566],{"class":53522},[33,92133,17158],{"class":43},[33,92135,57],{"class":47},[33,92137,53613],{"class":60},[33,92139,53593],{"class":43},[33,92141,57],{"class":47},[33,92143,53620],{"class":60},[33,92145,53529],{"class":47},[33,92147,92148,92150,92152,92154,92156],{"class":35,"line":103},[33,92149,54364],{"class":47},[33,92151,53629],{"class":53522},[33,92153,53632],{"class":47},[33,92155,53629],{"class":53522},[33,92157,53529],{"class":47},[33,92159,92160,92162,92164],{"class":35,"line":108},[33,92161,54364],{"class":47},[33,92163,2331],{"class":53522},[33,92165,53529],{"class":47},[33,92167,92168,92170],{"class":35,"line":119},[33,92169,56971],{"class":43},[33,92171,17810],{"class":47},[33,92173,92174,92176,92178,92180],{"class":35,"line":128},[33,92175,74809],{"class":72},[33,92177,996],{"class":47},[33,92179,62723],{"class":72},[33,92181,3567],{"class":47},[33,92183,92184,92186,92188,92190,92192],{"class":35,"line":1753},[33,92185,56990],{"class":72},[33,92187,996],{"class":47},[33,92189,3983],{"class":72},[33,92191,53713],{"class":39},[33,92193,3567],{"class":47},[33,92195,92196,92198,92200,92202,92204],{"class":35,"line":1763},[33,92197,57004],{"class":72},[33,92199,996],{"class":47},[33,92201,3983],{"class":72},[33,92203,53713],{"class":39},[33,92205,3567],{"class":47},[33,92207,92208,92210,92212,92215],{"class":35,"line":1775},[33,92209,57103],{"class":72},[33,92211,996],{"class":47},[33,92213,92214],{"class":72},"gray",[33,92216,3567],{"class":47},[33,92218,92219,92221,92223,92225,92227],{"class":35,"line":1780},[33,92220,57141],{"class":72},[33,92222,996],{"class":47},[33,92224,3237],{"class":72},[33,92226,53713],{"class":39},[33,92228,3567],{"class":47},[33,92230,92231,92233,92235,92237],{"class":35,"line":1785},[33,92232,59634],{"class":72},[33,92234,996],{"class":47},[33,92236,63060],{"class":72},[33,92238,3567],{"class":47},[33,92240,92241,92243,92245,92247],{"class":35,"line":1940},[33,92242,59504],{"class":72},[33,92244,996],{"class":47},[33,92246,53813],{"class":72},[33,92248,3567],{"class":47},[33,92250,92251,92254,92256,92258,92260],{"class":35,"line":2183},[33,92252,92253],{"class":72},"      padding-top",[33,92255,996],{"class":47},[33,92257,758],{"class":72},[33,92259,53713],{"class":39},[33,92261,3567],{"class":47},[33,92263,92264],{"class":35,"line":2208},[33,92265,4446],{"class":47},[33,92267,92268,92270,92272],{"class":35,"line":2234},[33,92269,54636],{"class":47},[33,92271,2331],{"class":53522},[33,92273,53529],{"class":47},[33,92275,92276,92278,92280],{"class":35,"line":2239},[33,92277,54006],{"class":47},[33,92279,53556],{"class":53522},[33,92281,53529],{"class":47},[33,92283,92284],{"class":35,"line":2247},[33,92285,100],{"emptyLinePlaceholder":99},[33,92287,92288,92290,92292],{"class":35,"line":2255},[33,92289,2226],{"class":47},[33,92291,54021],{"class":53522},[33,92293,53529],{"class":47},[33,92295,92296,92298,92300,92302,92304,92306,92308,92310],{"class":35,"line":3992},[33,92297,54364],{"class":47},[33,92299,53832],{"class":53522},[33,92301,55705],{"class":43},[33,92303,57],{"class":47},[33,92305,55710],{"class":60},[33,92307,57533],{"class":47},[33,92309,53832],{"class":53522},[33,92311,53529],{"class":47},[33,92313,92314,92316,92318,92320,92322,92324,92326,92328],{"class":35,"line":4009},[33,92315,54364],{"class":47},[33,92317,54034],{"class":53522},[33,92319,57458],{"class":43},[33,92321,57],{"class":47},[33,92323,90482],{"class":60},[33,92325,57533],{"class":47},[33,92327,54034],{"class":53522},[33,92329,53529],{"class":47},[33,92331,92332,92334,92336],{"class":35,"line":4014},[33,92333,54364],{"class":47},[33,92335,54034],{"class":53522},[33,92337,53529],{"class":47},[33,92339,92340,92342,92344,92346,92348,92350,92352,92355],{"class":35,"line":4019},[33,92341,13462],{"class":39},[33,92343,89142],{"class":72},[33,92345,15804],{"class":39},[33,92347,56615],{"class":47},[33,92349,56618],{"class":43},[33,92351,133],{"class":47},[33,92353,92354],{"class":60},"'.box'",[33,92356,226],{"class":47},[33,92358,92359,92361,92363,92365],{"class":35,"line":4024},[33,92360,54439],{"class":39},[33,92362,11684],{"class":47},[33,92364,57],{"class":39},[33,92366,670],{"class":72},[33,92368,92369,92371,92374],{"class":35,"line":4038},[33,92370,72299],{"class":39},[33,92372,92373],{"class":43}," mouseMove",[33,92375,13096],{"class":47},[33,92377,92378,92381,92383,92385],{"class":35,"line":4043},[33,92379,92380],{"class":47},"      box.innerHTML ",[33,92382,57],{"class":39},[33,92384,5289],{"class":47},[33,92386,4959],{"class":39},[33,92388,92389],{"class":35,"line":4834},[33,92390,92391],{"class":2487},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[33,92393,92394],{"class":35,"line":4848},[33,92395,4446],{"class":47},[33,92397,92398],{"class":35,"line":4856},[33,92399,92400],{"class":2487},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[33,92402,92403],{"class":35,"line":4861},[33,92404,92405],{"class":2487},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[33,92407,92408],{"class":35,"line":4867},[33,92409,92410],{"class":2487},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[33,92412,92413,92416,92418,92420,92423,92426,92429,92432,92434],{"class":35,"line":4873},[33,92414,92415],{"class":47},"    box.",[33,92417,60031],{"class":43},[33,92419,133],{"class":47},[33,92421,92422],{"class":60},"'mousemove'",[33,92424,92425],{"class":47},", _.",[33,92427,92428],{"class":43},"debounce",[33,92430,92431],{"class":47},"(mouseMove, ",[33,92433,67291],{"class":72},[33,92435,551],{"class":47},[33,92437,92438,92440,92442],{"class":35,"line":4878},[33,92439,54636],{"class":47},[33,92441,54034],{"class":53522},[33,92443,53529],{"class":47},[33,92445,92446,92448,92450],{"class":35,"line":10194},[33,92447,54006],{"class":47},[33,92449,54021],{"class":53522},[33,92451,53529],{"class":47},[33,92453,92454],{"class":35,"line":10218},[33,92455,100],{"emptyLinePlaceholder":99},[33,92457,92458,92460,92462],{"class":35,"line":10223},[33,92459,54006],{"class":47},[33,92461,52857],{"class":53522},[33,92463,53529],{"class":47},[3413,92465,92466],{},[331,92467,92468],{},"手写一个防抖函数来处理",[19,92470,92471],{},"防抖的核心就是利用定时器来实现的：",[19,92473,92474],{},"①声明一个定时器变量",[19,92476,92477],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92479,92480],{},"③如果没有定时器则开启定时器，记得存到变量里面",[23,92482,92484],{"className":52855,"code":92483,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,92485,92486,92496,92510,92514,92522,92536,92556,92568,92576,92582,92592,92604,92616,92626,92638,92648,92658,92670,92674,92682,92690,92694,92702,92720,92738,92746,92764,92774,92782,92792,92796,92800,92804,92809,92814,92819,92824,92829,92834,92852,92859,92864,92872,92877,92890,92906,92916,92921,92925,92929,92949,92953,92958,92963,92968,92973,92981,92989,92993],{"__ignoreMap":28},[33,92487,92488,92490,92492,92494],{"class":35,"line":36},[33,92489,53519],{"class":47},[33,92491,53523],{"class":53522},[33,92493,53526],{"class":43},[33,92495,53529],{"class":47},[33,92497,92498,92500,92502,92504,92506,92508],{"class":35,"line":51},[33,92499,2226],{"class":47},[33,92501,52857],{"class":53522},[33,92503,53538],{"class":43},[33,92505,57],{"class":47},[33,92507,53543],{"class":60},[33,92509,53529],{"class":47},[33,92511,92512],{"class":35,"line":64},[33,92513,100],{"emptyLinePlaceholder":99},[33,92515,92516,92518,92520],{"class":35,"line":76},[33,92517,2226],{"class":47},[33,92519,53556],{"class":53522},[33,92521,53529],{"class":47},[33,92523,92524,92526,92528,92530,92532,92534],{"class":35,"line":87},[33,92525,54364],{"class":47},[33,92527,53566],{"class":53522},[33,92529,53569],{"class":43},[33,92531,57],{"class":47},[33,92533,53574],{"class":60},[33,92535,53529],{"class":47},[33,92537,92538,92540,92542,92544,92546,92548,92550,92552,92554],{"class":35,"line":96},[33,92539,54364],{"class":47},[33,92541,53566],{"class":53522},[33,92543,17158],{"class":43},[33,92545,57],{"class":47},[33,92547,53613],{"class":60},[33,92549,53593],{"class":43},[33,92551,57],{"class":47},[33,92553,53620],{"class":60},[33,92555,53529],{"class":47},[33,92557,92558,92560,92562,92564,92566],{"class":35,"line":103},[33,92559,54364],{"class":47},[33,92561,53629],{"class":53522},[33,92563,53632],{"class":47},[33,92565,53629],{"class":53522},[33,92567,53529],{"class":47},[33,92569,92570,92572,92574],{"class":35,"line":108},[33,92571,54364],{"class":47},[33,92573,2331],{"class":53522},[33,92575,53529],{"class":47},[33,92577,92578,92580],{"class":35,"line":119},[33,92579,56971],{"class":43},[33,92581,17810],{"class":47},[33,92583,92584,92586,92588,92590],{"class":35,"line":128},[33,92585,74809],{"class":72},[33,92587,996],{"class":47},[33,92589,62723],{"class":72},[33,92591,3567],{"class":47},[33,92593,92594,92596,92598,92600,92602],{"class":35,"line":1753},[33,92595,56990],{"class":72},[33,92597,996],{"class":47},[33,92599,3983],{"class":72},[33,92601,53713],{"class":39},[33,92603,3567],{"class":47},[33,92605,92606,92608,92610,92612,92614],{"class":35,"line":1763},[33,92607,57004],{"class":72},[33,92609,996],{"class":47},[33,92611,3983],{"class":72},[33,92613,53713],{"class":39},[33,92615,3567],{"class":47},[33,92617,92618,92620,92622,92624],{"class":35,"line":1775},[33,92619,57103],{"class":72},[33,92621,996],{"class":47},[33,92623,92214],{"class":72},[33,92625,3567],{"class":47},[33,92627,92628,92630,92632,92634,92636],{"class":35,"line":1780},[33,92629,57141],{"class":72},[33,92631,996],{"class":47},[33,92633,3237],{"class":72},[33,92635,53713],{"class":39},[33,92637,3567],{"class":47},[33,92639,92640,92642,92644,92646],{"class":35,"line":1785},[33,92641,59634],{"class":72},[33,92643,996],{"class":47},[33,92645,63060],{"class":72},[33,92647,3567],{"class":47},[33,92649,92650,92652,92654,92656],{"class":35,"line":1940},[33,92651,59504],{"class":72},[33,92653,996],{"class":47},[33,92655,53813],{"class":72},[33,92657,3567],{"class":47},[33,92659,92660,92662,92664,92666,92668],{"class":35,"line":2183},[33,92661,92253],{"class":72},[33,92663,996],{"class":47},[33,92665,758],{"class":72},[33,92667,53713],{"class":39},[33,92669,3567],{"class":47},[33,92671,92672],{"class":35,"line":2208},[33,92673,4446],{"class":47},[33,92675,92676,92678,92680],{"class":35,"line":2234},[33,92677,54636],{"class":47},[33,92679,2331],{"class":53522},[33,92681,53529],{"class":47},[33,92683,92684,92686,92688],{"class":35,"line":2239},[33,92685,54006],{"class":47},[33,92687,53556],{"class":53522},[33,92689,53529],{"class":47},[33,92691,92692],{"class":35,"line":2247},[33,92693,100],{"emptyLinePlaceholder":99},[33,92695,92696,92698,92700],{"class":35,"line":2255},[33,92697,2226],{"class":47},[33,92699,54021],{"class":53522},[33,92701,53529],{"class":47},[33,92703,92704,92706,92708,92710,92712,92714,92716,92718],{"class":35,"line":3992},[33,92705,54364],{"class":47},[33,92707,53832],{"class":53522},[33,92709,55705],{"class":43},[33,92711,57],{"class":47},[33,92713,55710],{"class":60},[33,92715,57533],{"class":47},[33,92717,53832],{"class":53522},[33,92719,53529],{"class":47},[33,92721,92722,92724,92726,92728,92730,92732,92734,92736],{"class":35,"line":4009},[33,92723,54364],{"class":47},[33,92725,54034],{"class":53522},[33,92727,57458],{"class":43},[33,92729,57],{"class":47},[33,92731,90482],{"class":60},[33,92733,57533],{"class":47},[33,92735,54034],{"class":53522},[33,92737,53529],{"class":47},[33,92739,92740,92742,92744],{"class":35,"line":4014},[33,92741,54364],{"class":47},[33,92743,54034],{"class":53522},[33,92745,53529],{"class":47},[33,92747,92748,92750,92752,92754,92756,92758,92760,92762],{"class":35,"line":4019},[33,92749,13462],{"class":39},[33,92751,89142],{"class":72},[33,92753,15804],{"class":39},[33,92755,56615],{"class":47},[33,92757,56618],{"class":43},[33,92759,133],{"class":47},[33,92761,92354],{"class":60},[33,92763,226],{"class":47},[33,92765,92766,92768,92770,92772],{"class":35,"line":4024},[33,92767,54439],{"class":39},[33,92769,11684],{"class":47},[33,92771,57],{"class":39},[33,92773,670],{"class":72},[33,92775,92776,92778,92780],{"class":35,"line":4038},[33,92777,72299],{"class":39},[33,92779,92373],{"class":43},[33,92781,13096],{"class":47},[33,92783,92784,92786,92788,92790],{"class":35,"line":4043},[33,92785,92380],{"class":47},[33,92787,57],{"class":39},[33,92789,5289],{"class":47},[33,92791,4959],{"class":39},[33,92793,92794],{"class":35,"line":4834},[33,92795,92391],{"class":2487},[33,92797,92798],{"class":35,"line":4848},[33,92799,4446],{"class":47},[33,92801,92802],{"class":35,"line":4856},[33,92803,92400],{"class":2487},[33,92805,92806],{"class":35,"line":4861},[33,92807,92808],{"class":2487},"    \u002F\u002F 手写防抖函数\n",[33,92810,92811],{"class":35,"line":4867},[33,92812,92813],{"class":2487},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[33,92815,92816],{"class":35,"line":4873},[33,92817,92818],{"class":2487},"    \u002F\u002F 1.声明定时器变量\n",[33,92820,92821],{"class":35,"line":4878},[33,92822,92823],{"class":2487},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[33,92825,92826],{"class":35,"line":10194},[33,92827,92828],{"class":2487},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[33,92830,92831],{"class":35,"line":10218},[33,92832,92833],{"class":2487},"    \u002F\u002F 4.定时器里面写函数调用\n",[33,92835,92836,92838,92841,92843,92846,92848,92850],{"class":35,"line":10223},[33,92837,72299],{"class":39},[33,92839,92840],{"class":43}," debounce",[33,92842,133],{"class":47},[33,92844,92845],{"class":289},"fn",[33,92847,245],{"class":47},[33,92849,3133],{"class":289},[33,92851,14682],{"class":47},[33,92853,92854,92856],{"class":35,"line":10229},[33,92855,81983],{"class":39},[33,92857,92858],{"class":47}," timer\n",[33,92860,92861],{"class":35,"line":10256},[33,92862,92863],{"class":2487},"      \u002F\u002F return 返回一个匿名函数\n",[33,92865,92866,92868,92870],{"class":35,"line":10261},[33,92867,76195],{"class":39},[33,92869,61136],{"class":39},[33,92871,56671],{"class":47},[33,92873,92874],{"class":35,"line":10267},[33,92875,92876],{"class":2487},"        \u002F\u002F 这里边写第二三四步\n",[33,92878,92879,92881,92884,92887],{"class":35,"line":10279},[33,92880,2130],{"class":39},[33,92882,92883],{"class":47}," (timer) ",[33,92885,92886],{"class":43},"clearTimeout",[33,92888,92889],{"class":47},"(timer)\n",[33,92891,92892,92895,92897,92900,92902,92904],{"class":35,"line":10291},[33,92893,92894],{"class":47},"        timer ",[33,92896,57],{"class":39},[33,92898,92899],{"class":43}," setTimeout",[33,92901,133],{"class":47},[33,92903,56668],{"class":39},[33,92905,56671],{"class":47},[33,92907,92908,92911,92913],{"class":35,"line":10303},[33,92909,92910],{"class":43},"          fn",[33,92912,15290],{"class":47},[33,92914,92915],{"class":2487},"\u002F\u002F加小括号调用fn }, t)\n",[33,92917,92918],{"class":35,"line":11961},[33,92919,92920],{"class":47},"        }, t)\n",[33,92922,92923],{"class":35,"line":11986},[33,92924,54617],{"class":47},[33,92926,92927],{"class":35,"line":12009},[33,92928,4446],{"class":47},[33,92930,92931,92933,92935,92937,92939,92941,92943,92945,92947],{"class":35,"line":12033},[33,92932,92415],{"class":47},[33,92934,60031],{"class":43},[33,92936,133],{"class":47},[33,92938,92422],{"class":60},[33,92940,245],{"class":47},[33,92942,92428],{"class":43},[33,92944,92431],{"class":47},[33,92946,67291],{"class":72},[33,92948,551],{"class":47},[33,92950,92951],{"class":35,"line":12038},[33,92952,100],{"emptyLinePlaceholder":99},[33,92954,92955],{"class":35,"line":12043},[33,92956,92957],{"class":2487},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[33,92959,92960],{"class":35,"line":12048},[33,92961,92962],{"class":2487},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[33,92964,92965],{"class":35,"line":12057},[33,92966,92967],{"class":2487},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[33,92969,92970],{"class":35,"line":12062},[33,92971,92972],{"class":2487},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[33,92974,92975,92977,92979],{"class":35,"line":12068},[33,92976,54636],{"class":47},[33,92978,54034],{"class":53522},[33,92980,53529],{"class":47},[33,92982,92983,92985,92987],{"class":35,"line":12089},[33,92984,54006],{"class":47},[33,92986,54021],{"class":53522},[33,92988,53529],{"class":47},[33,92990,92991],{"class":35,"line":12095},[33,92992,100],{"emptyLinePlaceholder":99},[33,92994,92995,92997,92999],{"class":35,"line":12109},[33,92996,54006],{"class":47},[33,92998,52857],{"class":53522},[33,93000,53529],{"class":47},[631,93002,93004],{"id":93003},"_4172-节流","4.17.2 节流",[19,93006,93007],{},[3736,93008],{"alt":28,"src":93009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,93011,93012],{},[3736,93013],{"alt":28,"src":93014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,93016,93017],{},[2575,93018,93019],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,93021,93022],{},"实现方式：",[3413,93024,93025],{},[331,93026,93027],{},"lodash 提供的节流函数来处理",[19,93029,93030],{},"_.throttle(func,[wait=0],[options=])",[19,93032,93033],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[23,93035,93037],{"className":52855,"code":93036,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,93038,93039,93049,93063,93067,93075,93089,93109,93121,93129,93135,93145,93157,93169,93179,93191,93201,93211,93223,93227,93235,93243,93247,93255,93273,93291,93299,93317,93327,93335,93345,93349,93353,93357,93362,93367,93388,93396,93404,93408],{"__ignoreMap":28},[33,93040,93041,93043,93045,93047],{"class":35,"line":36},[33,93042,53519],{"class":47},[33,93044,53523],{"class":53522},[33,93046,53526],{"class":43},[33,93048,53529],{"class":47},[33,93050,93051,93053,93055,93057,93059,93061],{"class":35,"line":51},[33,93052,2226],{"class":47},[33,93054,52857],{"class":53522},[33,93056,53538],{"class":43},[33,93058,57],{"class":47},[33,93060,53543],{"class":60},[33,93062,53529],{"class":47},[33,93064,93065],{"class":35,"line":64},[33,93066,100],{"emptyLinePlaceholder":99},[33,93068,93069,93071,93073],{"class":35,"line":76},[33,93070,2226],{"class":47},[33,93072,53556],{"class":53522},[33,93074,53529],{"class":47},[33,93076,93077,93079,93081,93083,93085,93087],{"class":35,"line":87},[33,93078,54364],{"class":47},[33,93080,53566],{"class":53522},[33,93082,53569],{"class":43},[33,93084,57],{"class":47},[33,93086,53574],{"class":60},[33,93088,53529],{"class":47},[33,93090,93091,93093,93095,93097,93099,93101,93103,93105,93107],{"class":35,"line":96},[33,93092,54364],{"class":47},[33,93094,53566],{"class":53522},[33,93096,17158],{"class":43},[33,93098,57],{"class":47},[33,93100,53613],{"class":60},[33,93102,53593],{"class":43},[33,93104,57],{"class":47},[33,93106,53620],{"class":60},[33,93108,53529],{"class":47},[33,93110,93111,93113,93115,93117,93119],{"class":35,"line":103},[33,93112,54364],{"class":47},[33,93114,53629],{"class":53522},[33,93116,53632],{"class":47},[33,93118,53629],{"class":53522},[33,93120,53529],{"class":47},[33,93122,93123,93125,93127],{"class":35,"line":108},[33,93124,54364],{"class":47},[33,93126,2331],{"class":53522},[33,93128,53529],{"class":47},[33,93130,93131,93133],{"class":35,"line":119},[33,93132,56971],{"class":43},[33,93134,17810],{"class":47},[33,93136,93137,93139,93141,93143],{"class":35,"line":128},[33,93138,74809],{"class":72},[33,93140,996],{"class":47},[33,93142,62723],{"class":72},[33,93144,3567],{"class":47},[33,93146,93147,93149,93151,93153,93155],{"class":35,"line":1753},[33,93148,56990],{"class":72},[33,93150,996],{"class":47},[33,93152,3983],{"class":72},[33,93154,53713],{"class":39},[33,93156,3567],{"class":47},[33,93158,93159,93161,93163,93165,93167],{"class":35,"line":1763},[33,93160,57004],{"class":72},[33,93162,996],{"class":47},[33,93164,3983],{"class":72},[33,93166,53713],{"class":39},[33,93168,3567],{"class":47},[33,93170,93171,93173,93175,93177],{"class":35,"line":1775},[33,93172,57103],{"class":72},[33,93174,996],{"class":47},[33,93176,92214],{"class":72},[33,93178,3567],{"class":47},[33,93180,93181,93183,93185,93187,93189],{"class":35,"line":1780},[33,93182,57141],{"class":72},[33,93184,996],{"class":47},[33,93186,3237],{"class":72},[33,93188,53713],{"class":39},[33,93190,3567],{"class":47},[33,93192,93193,93195,93197,93199],{"class":35,"line":1785},[33,93194,59634],{"class":72},[33,93196,996],{"class":47},[33,93198,63060],{"class":72},[33,93200,3567],{"class":47},[33,93202,93203,93205,93207,93209],{"class":35,"line":1940},[33,93204,59504],{"class":72},[33,93206,996],{"class":47},[33,93208,53813],{"class":72},[33,93210,3567],{"class":47},[33,93212,93213,93215,93217,93219,93221],{"class":35,"line":2183},[33,93214,92253],{"class":72},[33,93216,996],{"class":47},[33,93218,758],{"class":72},[33,93220,53713],{"class":39},[33,93222,3567],{"class":47},[33,93224,93225],{"class":35,"line":2208},[33,93226,4446],{"class":47},[33,93228,93229,93231,93233],{"class":35,"line":2234},[33,93230,54636],{"class":47},[33,93232,2331],{"class":53522},[33,93234,53529],{"class":47},[33,93236,93237,93239,93241],{"class":35,"line":2239},[33,93238,54006],{"class":47},[33,93240,53556],{"class":53522},[33,93242,53529],{"class":47},[33,93244,93245],{"class":35,"line":2247},[33,93246,100],{"emptyLinePlaceholder":99},[33,93248,93249,93251,93253],{"class":35,"line":2255},[33,93250,2226],{"class":47},[33,93252,54021],{"class":53522},[33,93254,53529],{"class":47},[33,93256,93257,93259,93261,93263,93265,93267,93269,93271],{"class":35,"line":3992},[33,93258,54364],{"class":47},[33,93260,53832],{"class":53522},[33,93262,55705],{"class":43},[33,93264,57],{"class":47},[33,93266,55710],{"class":60},[33,93268,57533],{"class":47},[33,93270,53832],{"class":53522},[33,93272,53529],{"class":47},[33,93274,93275,93277,93279,93281,93283,93285,93287,93289],{"class":35,"line":4009},[33,93276,54364],{"class":47},[33,93278,54034],{"class":53522},[33,93280,57458],{"class":43},[33,93282,57],{"class":47},[33,93284,90482],{"class":60},[33,93286,57533],{"class":47},[33,93288,54034],{"class":53522},[33,93290,53529],{"class":47},[33,93292,93293,93295,93297],{"class":35,"line":4014},[33,93294,54364],{"class":47},[33,93296,54034],{"class":53522},[33,93298,53529],{"class":47},[33,93300,93301,93303,93305,93307,93309,93311,93313,93315],{"class":35,"line":4019},[33,93302,13462],{"class":39},[33,93304,89142],{"class":72},[33,93306,15804],{"class":39},[33,93308,56615],{"class":47},[33,93310,56618],{"class":43},[33,93312,133],{"class":47},[33,93314,92354],{"class":60},[33,93316,226],{"class":47},[33,93318,93319,93321,93323,93325],{"class":35,"line":4024},[33,93320,54439],{"class":39},[33,93322,11684],{"class":47},[33,93324,57],{"class":39},[33,93326,670],{"class":72},[33,93328,93329,93331,93333],{"class":35,"line":4038},[33,93330,72299],{"class":39},[33,93332,92373],{"class":43},[33,93334,13096],{"class":47},[33,93336,93337,93339,93341,93343],{"class":35,"line":4043},[33,93338,92380],{"class":47},[33,93340,57],{"class":39},[33,93342,5289],{"class":47},[33,93344,4959],{"class":39},[33,93346,93347],{"class":35,"line":4834},[33,93348,92391],{"class":2487},[33,93350,93351],{"class":35,"line":4848},[33,93352,4446],{"class":47},[33,93354,93355],{"class":35,"line":4856},[33,93356,92400],{"class":2487},[33,93358,93359],{"class":35,"line":4861},[33,93360,93361],{"class":2487},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[33,93363,93364],{"class":35,"line":4867},[33,93365,93366],{"class":2487},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[33,93368,93369,93371,93373,93375,93377,93379,93382,93384,93386],{"class":35,"line":4873},[33,93370,92415],{"class":47},[33,93372,60031],{"class":43},[33,93374,133],{"class":47},[33,93376,92422],{"class":60},[33,93378,92425],{"class":47},[33,93380,93381],{"class":43},"throttle",[33,93383,92431],{"class":47},[33,93385,67291],{"class":72},[33,93387,551],{"class":47},[33,93389,93390,93392,93394],{"class":35,"line":4878},[33,93391,54636],{"class":47},[33,93393,54034],{"class":53522},[33,93395,53529],{"class":47},[33,93397,93398,93400,93402],{"class":35,"line":10194},[33,93399,54006],{"class":47},[33,93401,54021],{"class":53522},[33,93403,53529],{"class":47},[33,93405,93406],{"class":35,"line":10218},[33,93407,100],{"emptyLinePlaceholder":99},[33,93409,93410,93412,93414],{"class":35,"line":10223},[33,93411,54006],{"class":47},[33,93413,52857],{"class":53522},[33,93415,53529],{"class":47},[3413,93417,93418],{},[331,93419,93420],{},"手写一个节流函数来处理",[19,93422,73165],{},[19,93424,92474],{},[19,93426,93427],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93429,93430],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[23,93432,93434],{"className":52855,"code":93433,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,93435,93436,93446,93460,93464,93472,93486,93506,93518,93526,93532,93542,93554,93566,93576,93588,93598,93608,93620,93624,93632,93640,93644,93652,93670,93688,93696,93714,93724,93732,93742,93746,93750,93754,93759,93764,93769,93774,93779,93784,93801,93807,93815,93826,93841,93848,93853,93858,93868,93873,93878,93883,93887,93891,93895,93915,93923,93931,93935],{"__ignoreMap":28},[33,93437,93438,93440,93442,93444],{"class":35,"line":36},[33,93439,53519],{"class":47},[33,93441,53523],{"class":53522},[33,93443,53526],{"class":43},[33,93445,53529],{"class":47},[33,93447,93448,93450,93452,93454,93456,93458],{"class":35,"line":51},[33,93449,2226],{"class":47},[33,93451,52857],{"class":53522},[33,93453,53538],{"class":43},[33,93455,57],{"class":47},[33,93457,53543],{"class":60},[33,93459,53529],{"class":47},[33,93461,93462],{"class":35,"line":64},[33,93463,100],{"emptyLinePlaceholder":99},[33,93465,93466,93468,93470],{"class":35,"line":76},[33,93467,2226],{"class":47},[33,93469,53556],{"class":53522},[33,93471,53529],{"class":47},[33,93473,93474,93476,93478,93480,93482,93484],{"class":35,"line":87},[33,93475,54364],{"class":47},[33,93477,53566],{"class":53522},[33,93479,53569],{"class":43},[33,93481,57],{"class":47},[33,93483,53574],{"class":60},[33,93485,53529],{"class":47},[33,93487,93488,93490,93492,93494,93496,93498,93500,93502,93504],{"class":35,"line":96},[33,93489,54364],{"class":47},[33,93491,53566],{"class":53522},[33,93493,17158],{"class":43},[33,93495,57],{"class":47},[33,93497,53613],{"class":60},[33,93499,53593],{"class":43},[33,93501,57],{"class":47},[33,93503,53620],{"class":60},[33,93505,53529],{"class":47},[33,93507,93508,93510,93512,93514,93516],{"class":35,"line":103},[33,93509,54364],{"class":47},[33,93511,53629],{"class":53522},[33,93513,53632],{"class":47},[33,93515,53629],{"class":53522},[33,93517,53529],{"class":47},[33,93519,93520,93522,93524],{"class":35,"line":108},[33,93521,54364],{"class":47},[33,93523,2331],{"class":53522},[33,93525,53529],{"class":47},[33,93527,93528,93530],{"class":35,"line":119},[33,93529,56971],{"class":43},[33,93531,17810],{"class":47},[33,93533,93534,93536,93538,93540],{"class":35,"line":128},[33,93535,74809],{"class":72},[33,93537,996],{"class":47},[33,93539,62723],{"class":72},[33,93541,3567],{"class":47},[33,93543,93544,93546,93548,93550,93552],{"class":35,"line":1753},[33,93545,56990],{"class":72},[33,93547,996],{"class":47},[33,93549,3983],{"class":72},[33,93551,53713],{"class":39},[33,93553,3567],{"class":47},[33,93555,93556,93558,93560,93562,93564],{"class":35,"line":1763},[33,93557,57004],{"class":72},[33,93559,996],{"class":47},[33,93561,3983],{"class":72},[33,93563,53713],{"class":39},[33,93565,3567],{"class":47},[33,93567,93568,93570,93572,93574],{"class":35,"line":1775},[33,93569,57103],{"class":72},[33,93571,996],{"class":47},[33,93573,92214],{"class":72},[33,93575,3567],{"class":47},[33,93577,93578,93580,93582,93584,93586],{"class":35,"line":1780},[33,93579,57141],{"class":72},[33,93581,996],{"class":47},[33,93583,3237],{"class":72},[33,93585,53713],{"class":39},[33,93587,3567],{"class":47},[33,93589,93590,93592,93594,93596],{"class":35,"line":1785},[33,93591,59634],{"class":72},[33,93593,996],{"class":47},[33,93595,63060],{"class":72},[33,93597,3567],{"class":47},[33,93599,93600,93602,93604,93606],{"class":35,"line":1940},[33,93601,59504],{"class":72},[33,93603,996],{"class":47},[33,93605,53813],{"class":72},[33,93607,3567],{"class":47},[33,93609,93610,93612,93614,93616,93618],{"class":35,"line":2183},[33,93611,92253],{"class":72},[33,93613,996],{"class":47},[33,93615,758],{"class":72},[33,93617,53713],{"class":39},[33,93619,3567],{"class":47},[33,93621,93622],{"class":35,"line":2208},[33,93623,4446],{"class":47},[33,93625,93626,93628,93630],{"class":35,"line":2234},[33,93627,54636],{"class":47},[33,93629,2331],{"class":53522},[33,93631,53529],{"class":47},[33,93633,93634,93636,93638],{"class":35,"line":2239},[33,93635,54006],{"class":47},[33,93637,53556],{"class":53522},[33,93639,53529],{"class":47},[33,93641,93642],{"class":35,"line":2247},[33,93643,100],{"emptyLinePlaceholder":99},[33,93645,93646,93648,93650],{"class":35,"line":2255},[33,93647,2226],{"class":47},[33,93649,54021],{"class":53522},[33,93651,53529],{"class":47},[33,93653,93654,93656,93658,93660,93662,93664,93666,93668],{"class":35,"line":3992},[33,93655,54364],{"class":47},[33,93657,53832],{"class":53522},[33,93659,55705],{"class":43},[33,93661,57],{"class":47},[33,93663,55710],{"class":60},[33,93665,57533],{"class":47},[33,93667,53832],{"class":53522},[33,93669,53529],{"class":47},[33,93671,93672,93674,93676,93678,93680,93682,93684,93686],{"class":35,"line":4009},[33,93673,54364],{"class":47},[33,93675,54034],{"class":53522},[33,93677,57458],{"class":43},[33,93679,57],{"class":47},[33,93681,90482],{"class":60},[33,93683,57533],{"class":47},[33,93685,54034],{"class":53522},[33,93687,53529],{"class":47},[33,93689,93690,93692,93694],{"class":35,"line":4014},[33,93691,54364],{"class":47},[33,93693,54034],{"class":53522},[33,93695,53529],{"class":47},[33,93697,93698,93700,93702,93704,93706,93708,93710,93712],{"class":35,"line":4019},[33,93699,13462],{"class":39},[33,93701,89142],{"class":72},[33,93703,15804],{"class":39},[33,93705,56615],{"class":47},[33,93707,56618],{"class":43},[33,93709,133],{"class":47},[33,93711,92354],{"class":60},[33,93713,226],{"class":47},[33,93715,93716,93718,93720,93722],{"class":35,"line":4024},[33,93717,54439],{"class":39},[33,93719,11684],{"class":47},[33,93721,57],{"class":39},[33,93723,670],{"class":72},[33,93725,93726,93728,93730],{"class":35,"line":4038},[33,93727,72299],{"class":39},[33,93729,92373],{"class":43},[33,93731,13096],{"class":47},[33,93733,93734,93736,93738,93740],{"class":35,"line":4043},[33,93735,92380],{"class":47},[33,93737,57],{"class":39},[33,93739,5289],{"class":47},[33,93741,4959],{"class":39},[33,93743,93744],{"class":35,"line":4834},[33,93745,92391],{"class":2487},[33,93747,93748],{"class":35,"line":4848},[33,93749,4446],{"class":47},[33,93751,93752],{"class":35,"line":4856},[33,93753,92400],{"class":2487},[33,93755,93756],{"class":35,"line":4861},[33,93757,93758],{"class":2487},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[33,93760,93761],{"class":35,"line":4867},[33,93762,93763],{"class":2487},"    \u002F\u002F 1.声明一个定时器变量\n",[33,93765,93766],{"class":35,"line":4873},[33,93767,93768],{"class":2487},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[33,93770,93771],{"class":35,"line":4878},[33,93772,93773],{"class":2487},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[33,93775,93776],{"class":35,"line":10194},[33,93777,93778],{"class":2487},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[33,93780,93781],{"class":35,"line":10218},[33,93782,93783],{"class":2487},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[33,93785,93786,93788,93791,93793,93795,93797,93799],{"class":35,"line":10223},[33,93787,72299],{"class":39},[33,93789,93790],{"class":43}," throttle",[33,93792,133],{"class":47},[33,93794,92845],{"class":289},[33,93796,245],{"class":47},[33,93798,3133],{"class":289},[33,93800,14682],{"class":47},[33,93802,93803,93805],{"class":35,"line":10229},[33,93804,81983],{"class":39},[33,93806,92858],{"class":47},[33,93808,93809,93811,93813],{"class":35,"line":10256},[33,93810,76195],{"class":39},[33,93812,61136],{"class":39},[33,93814,56671],{"class":47},[33,93816,93817,93819,93821,93823],{"class":35,"line":10261},[33,93818,2130],{"class":39},[33,93820,3924],{"class":47},[33,93822,2651],{"class":39},[33,93824,93825],{"class":47},"timer) {\n",[33,93827,93828,93831,93833,93835,93837,93839],{"class":35,"line":10267},[33,93829,93830],{"class":47},"          timer ",[33,93832,57],{"class":39},[33,93834,92899],{"class":43},[33,93836,133],{"class":47},[33,93838,56668],{"class":39},[33,93840,56671],{"class":47},[33,93842,93843,93846],{"class":35,"line":10279},[33,93844,93845],{"class":43},"            fn",[33,93847,4235],{"class":47},[33,93849,93850],{"class":35,"line":10291},[33,93851,93852],{"class":2487},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[33,93854,93855],{"class":35,"line":10303},[33,93856,93857],{"class":2487},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[33,93859,93860,93863,93865],{"class":35,"line":11961},[33,93861,93862],{"class":47},"            timer ",[33,93864,57],{"class":39},[33,93866,93867],{"class":72}," null\n",[33,93869,93870],{"class":35,"line":11986},[33,93871,93872],{"class":2487},"            \u002F\u002F 不能用clearTimeout(timer)\n",[33,93874,93875],{"class":35,"line":12009},[33,93876,93877],{"class":2487},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[33,93879,93880],{"class":35,"line":12033},[33,93881,93882],{"class":47},"          }, t)\n",[33,93884,93885],{"class":35,"line":12038},[33,93886,4786],{"class":47},[33,93888,93889],{"class":35,"line":12043},[33,93890,54617],{"class":47},[33,93892,93893],{"class":35,"line":12048},[33,93894,4446],{"class":47},[33,93896,93897,93899,93901,93903,93905,93907,93909,93911,93913],{"class":35,"line":12057},[33,93898,92415],{"class":47},[33,93900,60031],{"class":43},[33,93902,133],{"class":47},[33,93904,92422],{"class":60},[33,93906,245],{"class":47},[33,93908,93381],{"class":43},[33,93910,92431],{"class":47},[33,93912,67291],{"class":72},[33,93914,551],{"class":47},[33,93916,93917,93919,93921],{"class":35,"line":12062},[33,93918,54636],{"class":47},[33,93920,54034],{"class":53522},[33,93922,53529],{"class":47},[33,93924,93925,93927,93929],{"class":35,"line":12068},[33,93926,54006],{"class":47},[33,93928,54021],{"class":53522},[33,93930,53529],{"class":47},[33,93932,93933],{"class":35,"line":12089},[33,93934,100],{"emptyLinePlaceholder":99},[33,93936,93937,93939,93941],{"class":35,"line":12095},[33,93938,54006],{"class":47},[33,93940,52857],{"class":53522},[33,93942,53529],{"class":47},[631,93944,93946],{"id":93945},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[23,93948,93950],{"className":55286,"code":93949,"language":55288,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,93951,93952,93960,93968,93973,93978,93983,93988,93992,94000],{"__ignoreMap":28},[33,93953,93954,93956,93958],{"class":35,"line":36},[33,93955,2226],{"class":47},[33,93957,54021],{"class":53522},[33,93959,53529],{"class":47},[33,93961,93962,93964,93966],{"class":35,"line":51},[33,93963,54364],{"class":47},[33,93965,54034],{"class":53522},[33,93967,53529],{"class":47},[33,93969,93970],{"class":35,"line":64},[33,93971,93972],{"class":47},"    let timer = null\n",[33,93974,93975],{"class":35,"line":76},[33,93976,93977],{"class":47},"    timer = setTimeout(() => {\n",[33,93979,93980],{"class":35,"line":87},[33,93981,93982],{"class":47},"      clearTimeout(timer)\n",[33,93984,93985],{"class":35,"line":96},[33,93986,93987],{"class":47},"      console.log(timer)\n",[33,93989,93990],{"class":35,"line":103},[33,93991,62443],{"class":47},[33,93993,93994,93996,93998],{"class":35,"line":108},[33,93995,54636],{"class":47},[33,93997,54034],{"class":53522},[33,93999,53529],{"class":47},[33,94001,94002,94004,94006],{"class":35,"line":119},[33,94003,54006],{"class":47},[33,94005,54021],{"class":53522},[33,94007,53529],{"class":47},[19,94009,94010],{},"输出为1",[19,94012,94013],{},"在开启的定时器里边写清除定时器",[19,94015,94016],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[631,94018,94020],{"id":94019},"_4174-节流综合案例","4.17.4 节流综合案例",[19,94022,94023],{},"页面打开，可以记录上一次的视频播放位置",[19,94025,94026],{},[3736,94027],{"alt":28,"src":94028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,94030,94031],{},[3736,94032],{"alt":28,"src":94033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[23,94035,94037],{"className":52855,"code":94036,"language":52857,"meta":28,"style":28},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[30,94038,94039,94049,94063,94067,94075,94089,94109,94129,94151,94164,94172,94178,94188,94198,94208,94212,94216,94223,94236,94248,94252,94256,94266,94278,94292,94296,94300,94307,94317,94330,94342,94352,94362,94378,94390,94394,94398,94406,94416,94428,94438,94448,94458,94462,94466,94476,94487,94491,94499,94507,94511,94519,94534,94549,94564,94585,94593,94601,94616,94638,94646,94661,94687,94713,94739,94747,94755,94774,94782,94787,94806,94811,94829,94834,94839,94847,94852,94866,94874,94879,94896,94900,94905,94927,94931,94939,94947,94951],{"__ignoreMap":28},[33,94040,94041,94043,94045,94047],{"class":35,"line":36},[33,94042,53519],{"class":47},[33,94044,53523],{"class":53522},[33,94046,53526],{"class":43},[33,94048,53529],{"class":47},[33,94050,94051,94053,94055,94057,94059,94061],{"class":35,"line":51},[33,94052,2226],{"class":47},[33,94054,52857],{"class":53522},[33,94056,53538],{"class":43},[33,94058,57],{"class":47},[33,94060,53543],{"class":60},[33,94062,53529],{"class":47},[33,94064,94065],{"class":35,"line":64},[33,94066,100],{"emptyLinePlaceholder":99},[33,94068,94069,94071,94073],{"class":35,"line":76},[33,94070,2226],{"class":47},[33,94072,53556],{"class":53522},[33,94074,53529],{"class":47},[33,94076,94077,94079,94081,94083,94085,94087],{"class":35,"line":87},[33,94078,54364],{"class":47},[33,94080,53566],{"class":53522},[33,94082,53569],{"class":43},[33,94084,57],{"class":47},[33,94086,53574],{"class":60},[33,94088,61345],{"class":47},[33,94090,94091,94093,94095,94097,94099,94101,94103,94105,94107],{"class":35,"line":96},[33,94092,54364],{"class":47},[33,94094,53566],{"class":53522},[33,94096,53585],{"class":43},[33,94098,57],{"class":47},[33,94100,53590],{"class":60},[33,94102,53593],{"class":43},[33,94104,57],{"class":47},[33,94106,53598],{"class":60},[33,94108,61345],{"class":47},[33,94110,94111,94113,94115,94117,94119,94121,94123,94125,94127],{"class":35,"line":103},[33,94112,54364],{"class":47},[33,94114,53566],{"class":53522},[33,94116,17158],{"class":43},[33,94118,57],{"class":47},[33,94120,53613],{"class":60},[33,94122,53593],{"class":43},[33,94124,57],{"class":47},[33,94126,53620],{"class":60},[33,94128,61345],{"class":47},[33,94130,94131,94133,94135,94137,94139,94142,94144,94146,94149],{"class":35,"line":108},[33,94132,54364],{"class":47},[33,94134,53566],{"class":53522},[33,94136,17158],{"class":43},[33,94138,57],{"class":47},[33,94140,94141],{"class":60},"\"referrer\"",[33,94143,53593],{"class":43},[33,94145,57],{"class":47},[33,94147,94148],{"class":60},"\"never\"",[33,94150,61345],{"class":47},[33,94152,94153,94155,94157,94160,94162],{"class":35,"line":119},[33,94154,54364],{"class":47},[33,94156,53629],{"class":53522},[33,94158,94159],{"class":47},">综合案例\u003C\u002F",[33,94161,53629],{"class":53522},[33,94163,53529],{"class":47},[33,94165,94166,94168,94170],{"class":35,"line":128},[33,94167,54364],{"class":47},[33,94169,2331],{"class":53522},[33,94171,53529],{"class":47},[33,94173,94174,94176],{"class":35,"line":1753},[33,94175,8649],{"class":53522},[33,94177,17810],{"class":47},[33,94179,94180,94182,94184,94186],{"class":35,"line":1763},[33,94181,56914],{"class":72},[33,94183,996],{"class":47},[33,94185,2617],{"class":72},[33,94187,3567],{"class":47},[33,94189,94190,94192,94194,94196],{"class":35,"line":1775},[33,94191,56925],{"class":72},[33,94193,996],{"class":47},[33,94195,2617],{"class":72},[33,94197,3567],{"class":47},[33,94199,94200,94202,94204,94206],{"class":35,"line":1780},[33,94201,74809],{"class":72},[33,94203,996],{"class":47},[33,94205,62723],{"class":72},[33,94207,3567],{"class":47},[33,94209,94210],{"class":35,"line":1785},[33,94211,4446],{"class":47},[33,94213,94214],{"class":35,"line":1940},[33,94215,100],{"emptyLinePlaceholder":99},[33,94217,94218,94221],{"class":35,"line":2183},[33,94219,94220],{"class":43},"    .container",[33,94222,17810],{"class":47},[33,94224,94225,94227,94229,94232,94234],{"class":35,"line":2208},[33,94226,56990],{"class":72},[33,94228,996],{"class":47},[33,94230,94231],{"class":72},"1200",[33,94233,53713],{"class":39},[33,94235,3567],{"class":47},[33,94237,94238,94240,94242,94244,94246],{"class":35,"line":2234},[33,94239,56925],{"class":72},[33,94241,996],{"class":47},[33,94243,2617],{"class":72},[33,94245,53777],{"class":72},[33,94247,3567],{"class":47},[33,94249,94250],{"class":35,"line":2239},[33,94251,4446],{"class":47},[33,94253,94254],{"class":35,"line":2247},[33,94255,100],{"emptyLinePlaceholder":99},[33,94257,94258,94261,94264],{"class":35,"line":2255},[33,94259,94260],{"class":43},"    .video",[33,94262,94263],{"class":53522}," video",[33,94265,17810],{"class":47},[33,94267,94268,94270,94272,94274,94276],{"class":35,"line":3992},[33,94269,56990],{"class":72},[33,94271,996],{"class":47},[33,94273,2734],{"class":72},[33,94275,1429],{"class":39},[33,94277,3567],{"class":47},[33,94279,94280,94282,94284,94286,94288,94290],{"class":35,"line":4009},[33,94281,56914],{"class":72},[33,94283,996],{"class":47},[33,94285,1284],{"class":72},[33,94287,53713],{"class":39},[33,94289,1437],{"class":72},[33,94291,3567],{"class":47},[33,94293,94294],{"class":35,"line":4014},[33,94295,4446],{"class":47},[33,94297,94298],{"class":35,"line":4019},[33,94299,100],{"emptyLinePlaceholder":99},[33,94301,94302,94305],{"class":35,"line":4024},[33,94303,94304],{"class":43},"    .elevator",[33,94306,17810],{"class":47},[33,94308,94309,94311,94313,94315],{"class":35,"line":4038},[33,94310,56978],{"class":72},[33,94312,996],{"class":47},[33,94314,88442],{"class":72},[33,94316,3567],{"class":47},[33,94318,94319,94321,94323,94326,94328],{"class":35,"line":4043},[33,94320,57166],{"class":72},[33,94322,996],{"class":47},[33,94324,94325],{"class":72},"280",[33,94327,53713],{"class":39},[33,94329,3567],{"class":47},[33,94331,94332,94334,94336,94338,94340],{"class":35,"line":4834},[33,94333,88636],{"class":72},[33,94335,996],{"class":47},[33,94337,1284],{"class":72},[33,94339,53713],{"class":39},[33,94341,3567],{"class":47},[33,94343,94344,94346,94348,94350],{"class":35,"line":4848},[33,94345,88449],{"class":72},[33,94347,996],{"class":47},[33,94349,88454],{"class":72},[33,94351,3567],{"class":47},[33,94353,94354,94356,94358,94360],{"class":35,"line":4856},[33,94355,63939],{"class":72},[33,94357,996],{"class":47},[33,94359,63060],{"class":72},[33,94361,3567],{"class":47},[33,94363,94364,94366,94368,94370,94372,94374,94376],{"class":35,"line":4861},[33,94365,64195],{"class":72},[33,94367,996],{"class":47},[33,94369,720],{"class":72},[33,94371,53713],{"class":39},[33,94373,53742],{"class":72},[33,94375,64462],{"class":72},[33,94377,3567],{"class":47},[33,94379,94380,94382,94384,94386,94388],{"class":35,"line":4867},[33,94381,56990],{"class":72},[33,94383,996],{"class":47},[33,94385,3316],{"class":72},[33,94387,53713],{"class":39},[33,94389,3567],{"class":47},[33,94391,94392],{"class":35,"line":4873},[33,94393,4446],{"class":47},[33,94395,94396],{"class":35,"line":4878},[33,94397,100],{"emptyLinePlaceholder":99},[33,94399,94400,94402,94404],{"class":35,"line":10194},[33,94401,94304],{"class":43},[33,94403,3672],{"class":53522},[33,94405,17810],{"class":47},[33,94407,94408,94410,94412,94414],{"class":35,"line":10218},[33,94409,57228],{"class":72},[33,94411,996],{"class":47},[33,94413,63087],{"class":72},[33,94415,3567],{"class":47},[33,94417,94418,94420,94422,94424,94426],{"class":35,"line":10223},[33,94419,56914],{"class":72},[33,94421,996],{"class":47},[33,94423,1279],{"class":72},[33,94425,53713],{"class":39},[33,94427,3567],{"class":47},[33,94429,94430,94432,94434,94436],{"class":35,"line":10229},[33,94431,66187],{"class":72},[33,94433,996],{"class":47},[33,94435,56956],{"class":72},[33,94437,3567],{"class":47},[33,94439,94440,94442,94444,94446],{"class":35,"line":10256},[33,94441,59504],{"class":72},[33,94443,996],{"class":47},[33,94445,53813],{"class":72},[33,94447,3567],{"class":47},[33,94449,94450,94452,94454,94456],{"class":35,"line":10261},[33,94451,59634],{"class":72},[33,94453,996],{"class":47},[33,94455,64288],{"class":72},[33,94457,3567],{"class":47},[33,94459,94460],{"class":35,"line":10267},[33,94461,4446],{"class":47},[33,94463,94464],{"class":35,"line":10279},[33,94465,100],{"emptyLinePlaceholder":99},[33,94467,94468,94470,94472,94474],{"class":35,"line":10291},[33,94469,94304],{"class":43},[33,94471,3672],{"class":53522},[33,94473,66241],{"class":43},[33,94475,17810],{"class":47},[33,94477,94478,94480,94482,94485],{"class":35,"line":10303},[33,94479,59634],{"class":72},[33,94481,996],{"class":47},[33,94483,94484],{"class":72},"#1286ff",[33,94486,3567],{"class":47},[33,94488,94489],{"class":35,"line":11961},[33,94490,4446],{"class":47},[33,94492,94493,94495,94497],{"class":35,"line":11986},[33,94494,54636],{"class":47},[33,94496,2331],{"class":53522},[33,94498,53529],{"class":47},[33,94500,94501,94503,94505],{"class":35,"line":12009},[33,94502,54006],{"class":47},[33,94504,53556],{"class":53522},[33,94506,53529],{"class":47},[33,94508,94509],{"class":35,"line":12033},[33,94510,100],{"emptyLinePlaceholder":99},[33,94512,94513,94515,94517],{"class":35,"line":12038},[33,94514,2226],{"class":47},[33,94516,54021],{"class":53522},[33,94518,53529],{"class":47},[33,94520,94521,94523,94525,94527,94529,94532],{"class":35,"line":12043},[33,94522,54364],{"class":47},[33,94524,53832],{"class":53522},[33,94526,55705],{"class":43},[33,94528,57],{"class":47},[33,94530,94531],{"class":60},"\"container\"",[33,94533,53529],{"class":47},[33,94535,94536,94538,94540,94542,94544,94547],{"class":35,"line":12048},[33,94537,53563],{"class":47},[33,94539,53832],{"class":53522},[33,94541,55705],{"class":43},[33,94543,57],{"class":47},[33,94545,94546],{"class":60},"\"header\"",[33,94548,53529],{"class":47},[33,94550,94551,94553,94555,94557,94559,94562],{"class":35,"line":12057},[33,94552,57453],{"class":47},[33,94554,2663],{"class":53522},[33,94556,63275],{"class":43},[33,94558,57],{"class":47},[33,94560,94561],{"class":60},"\"http:\u002F\u002Fpip.itcast.cn\"",[33,94563,53529],{"class":47},[33,94565,94566,94568,94570,94572,94574,94577,94579,94581,94583],{"class":35,"line":12062},[33,94567,57521],{"class":47},[33,94569,3736],{"class":53522},[33,94571,57458],{"class":43},[33,94573,57],{"class":47},[33,94575,94576],{"class":60},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[33,94578,57466],{"class":43},[33,94580,57],{"class":47},[33,94582,9898],{"class":60},[33,94584,61345],{"class":47},[33,94586,94587,94589,94591],{"class":35,"line":12068},[33,94588,57626],{"class":47},[33,94590,2663],{"class":53522},[33,94592,53529],{"class":47},[33,94594,94595,94597,94599],{"class":35,"line":12089},[33,94596,53997],{"class":47},[33,94598,53832],{"class":53522},[33,94600,53529],{"class":47},[33,94602,94603,94605,94607,94609,94611,94614],{"class":35,"line":12095},[33,94604,53563],{"class":47},[33,94606,53832],{"class":53522},[33,94608,55705],{"class":43},[33,94610,57],{"class":47},[33,94612,94613],{"class":60},"\"video\"",[33,94615,53529],{"class":47},[33,94617,94618,94620,94622,94624,94626,94629,94632,94634,94636],{"class":35,"line":12109},[33,94619,57453],{"class":47},[33,94621,30420],{"class":53522},[33,94623,57458],{"class":43},[33,94625,57],{"class":47},[33,94627,94628],{"class":60},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[33,94630,94631],{"class":43}," controls",[33,94633,57533],{"class":47},[33,94635,30420],{"class":53522},[33,94637,53529],{"class":47},[33,94639,94640,94642,94644],{"class":35,"line":12115},[33,94641,53997],{"class":47},[33,94643,53832],{"class":53522},[33,94645,53529],{"class":47},[33,94647,94648,94650,94652,94654,94656,94659],{"class":35,"line":12142},[33,94649,53563],{"class":47},[33,94651,53832],{"class":53522},[33,94653,55705],{"class":43},[33,94655,57],{"class":47},[33,94657,94658],{"class":60},"\"elevator\"",[33,94660,53529],{"class":47},[33,94662,94663,94665,94667,94669,94671,94673,94676,94678,94680,94683,94685],{"class":35,"line":12151},[33,94664,57453],{"class":47},[33,94666,2663],{"class":53522},[33,94668,63275],{"class":43},[33,94670,57],{"class":47},[33,94672,66453],{"class":60},[33,94674,94675],{"class":43}," data-ref",[33,94677,57],{"class":47},[33,94679,94613],{"class":60},[33,94681,94682],{"class":47},">视频介绍\u003C\u002F",[33,94684,2663],{"class":53522},[33,94686,53529],{"class":47},[33,94688,94689,94691,94693,94695,94697,94699,94701,94703,94706,94709,94711],{"class":35,"line":12157},[33,94690,57453],{"class":47},[33,94692,2663],{"class":53522},[33,94694,63275],{"class":43},[33,94696,57],{"class":47},[33,94698,66453],{"class":60},[33,94700,94675],{"class":43},[33,94702,57],{"class":47},[33,94704,94705],{"class":60},"\"intro\"",[33,94707,94708],{"class":47},">课程简介\u003C\u002F",[33,94710,2663],{"class":53522},[33,94712,53529],{"class":47},[33,94714,94715,94717,94719,94721,94723,94725,94727,94729,94732,94735,94737],{"class":35,"line":12165},[33,94716,57453],{"class":47},[33,94718,2663],{"class":53522},[33,94720,63275],{"class":43},[33,94722,57],{"class":47},[33,94724,66453],{"class":60},[33,94726,94675],{"class":43},[33,94728,57],{"class":47},[33,94730,94731],{"class":60},"\"outline\"",[33,94733,94734],{"class":47},">评论列表\u003C\u002F",[33,94736,2663],{"class":53522},[33,94738,53529],{"class":47},[33,94740,94741,94743,94745],{"class":35,"line":12170},[33,94742,53997],{"class":47},[33,94744,53832],{"class":53522},[33,94746,53529],{"class":47},[33,94748,94749,94751,94753],{"class":35,"line":18842},[33,94750,54636],{"class":47},[33,94752,53832],{"class":53522},[33,94754,53529],{"class":47},[33,94756,94757,94759,94761,94763,94765,94768,94770,94772],{"class":35,"line":18848},[33,94758,54364],{"class":47},[33,94760,54034],{"class":53522},[33,94762,57458],{"class":43},[33,94764,57],{"class":47},[33,94766,94767],{"class":60},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[33,94769,57533],{"class":47},[33,94771,54034],{"class":53522},[33,94773,53529],{"class":47},[33,94775,94776,94778,94780],{"class":35,"line":18871},[33,94777,54364],{"class":47},[33,94779,54034],{"class":53522},[33,94781,53529],{"class":47},[33,94783,94784],{"class":35,"line":18877},[33,94785,94786],{"class":2487},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[33,94788,94789,94791,94793,94795,94797,94799,94801,94804],{"class":35,"line":18900},[33,94790,13462],{"class":39},[33,94792,94263],{"class":72},[33,94794,15804],{"class":39},[33,94796,56615],{"class":47},[33,94798,56618],{"class":43},[33,94800,133],{"class":47},[33,94802,94803],{"class":60},"'video'",[33,94805,226],{"class":47},[33,94807,94808],{"class":35,"line":18914},[33,94809,94810],{"class":2487},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[33,94812,94813,94816,94818,94820,94822,94825,94827],{"class":35,"line":18934},[33,94814,94815],{"class":47},"    video.ontimeupdate ",[33,94817,57],{"class":39},[33,94819,90563],{"class":47},[33,94821,93381],{"class":43},[33,94823,94824],{"class":47},"(() ",[33,94826,86931],{"class":39},[33,94828,17810],{"class":47},[33,94830,94831],{"class":35,"line":18940},[33,94832,94833],{"class":2487},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[33,94835,94836],{"class":35,"line":18951},[33,94837,94838],{"class":2487},"      \u002F\u002F 控制台输出当前的时间\n",[33,94840,94841,94844],{"class":35,"line":18974},[33,94842,94843],{"class":2487},"      \u002F\u002F console.log(video.currentTime)",[33,94845,94846],{"class":2487},"  \u002F\u002F获得当前的视频时间\n",[33,94848,94849],{"class":35,"line":18996},[33,94850,94851],{"class":2487},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[33,94853,94854,94856,94858,94860,94863],{"class":35,"line":19001},[33,94855,76895],{"class":47},[33,94857,73867],{"class":43},[33,94859,133],{"class":47},[33,94861,94862],{"class":60},"'currentTime'",[33,94864,94865],{"class":47},", video.currentTime)\n",[33,94867,94868,94870,94872],{"class":35,"line":19007},[33,94869,56754],{"class":47},[33,94871,8656],{"class":72},[33,94873,226],{"class":47},[33,94875,94876],{"class":35,"line":19021},[33,94877,94878],{"class":2487},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[33,94880,94881,94884,94887,94889,94892,94894],{"class":35,"line":19034},[33,94882,94883],{"class":47},"    video.",[33,94885,94886],{"class":43},"onloadeddata",[33,94888,15804],{"class":39},[33,94890,94891],{"class":47}," () ",[33,94893,86931],{"class":39},[33,94895,17810],{"class":47},[33,94897,94898],{"class":35,"line":19039},[33,94899,62230],{"class":2487},[33,94901,94902],{"class":35,"line":19053},[33,94903,94904],{"class":2487},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[33,94906,94907,94910,94912,94915,94917,94919,94921,94923,94925],{"class":35,"line":19058},[33,94908,94909],{"class":47},"      video.currentTime ",[33,94911,57],{"class":39},[33,94913,94914],{"class":47}," localStorage.",[33,94916,73898],{"class":43},[33,94918,133],{"class":47},[33,94920,94862],{"class":60},[33,94922,15954],{"class":47},[33,94924,73570],{"class":39},[33,94926,670],{"class":72},[33,94928,94929],{"class":35,"line":19064},[33,94930,4446],{"class":47},[33,94932,94933,94935,94937],{"class":35,"line":19069},[33,94934,54636],{"class":47},[33,94936,54034],{"class":53522},[33,94938,53529],{"class":47},[33,94940,94941,94943,94945],{"class":35,"line":19083},[33,94942,54006],{"class":47},[33,94944,54021],{"class":53522},[33,94946,53529],{"class":47},[33,94948,94949],{"class":35,"line":19088},[33,94950,100],{"emptyLinePlaceholder":99},[33,94952,94953,94955,94957],{"class":35,"line":19093},[33,94954,54006],{"class":47},[33,94956,52857],{"class":53522},[33,94958,53529],{"class":47},[2331,94960,94961],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":94963},[94964,94969,94973,94974,94975,94980,94985,94986,94987,94988,94995,95000,95001,95011,95015,95016,95020],{"id":78902,"depth":51,"text":78903,"children":94965},[94966,94967,94968],{"id":78906,"depth":64,"text":78907},{"id":78931,"depth":64,"text":78932},{"id":78943,"depth":64,"text":78944},{"id":78955,"depth":51,"text":78956,"children":94970},[94971,94972],{"id":78959,"depth":64,"text":78960},{"id":78974,"depth":64,"text":78975},{"id":79026,"depth":51,"text":79027},{"id":79070,"depth":51,"text":79071},{"id":79087,"depth":51,"text":79088,"children":94976},[94977,94978,94979],{"id":79091,"depth":64,"text":79092},{"id":79104,"depth":64,"text":79105},{"id":79209,"depth":64,"text":79210},{"id":79498,"depth":51,"text":79499,"children":94981},[94982,94983,94984],{"id":79502,"depth":64,"text":79503},{"id":79945,"depth":64,"text":79946},{"id":80356,"depth":64,"text":80357},{"id":80419,"depth":51,"text":80420},{"id":80498,"depth":51,"text":80499},{"id":80591,"depth":51,"text":80592},{"id":82434,"depth":51,"text":82435,"children":94989},[94990,94991,94992,94993,94994],{"id":82438,"depth":64,"text":82439},{"id":82450,"depth":64,"text":82451},{"id":82669,"depth":64,"text":82670},{"id":82687,"depth":64,"text":82688},{"id":82747,"depth":64,"text":82748},{"id":87015,"depth":51,"text":87016,"children":94996},[94997,94998,94999],{"id":87019,"depth":64,"text":87020},{"id":87037,"depth":64,"text":87038},{"id":87063,"depth":64,"text":87064},{"id":87072,"depth":51,"text":87073},{"id":87094,"depth":51,"text":87095,"children":95002},[95003,95004,95005,95006,95007,95008,95009,95010],{"id":87098,"depth":64,"text":87099},{"id":87359,"depth":64,"text":87360},{"id":87545,"depth":64,"text":87546},{"id":87912,"depth":64,"text":87913},{"id":88028,"depth":64,"text":88029},{"id":88064,"depth":64,"text":88065},{"id":88111,"depth":64,"text":88112},{"id":88145,"depth":64,"text":88146},{"id":89507,"depth":51,"text":89508,"children":95012},[95013,95014],{"id":89511,"depth":64,"text":89512},{"id":89548,"depth":64,"text":89549},{"id":90903,"depth":51,"text":90904},{"id":91274,"depth":51,"text":91275,"children":95017},[95018,95019],{"id":91278,"depth":64,"text":91279},{"id":91312,"depth":64,"text":91313},{"id":92041,"depth":51,"text":92042,"children":95021},[95022,95023,95024,95025],{"id":92045,"depth":64,"text":92046},{"id":93003,"depth":64,"text":93004},{"id":93945,"depth":64,"text":93946},{"id":94019,"depth":64,"text":94020},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78891,"description":2359},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":95032,"title":95033,"body":95034,"description":95045,"extension":2360,"meta":95046,"navigation":99,"path":95048,"seo":95049,"stem":95050,"__hash__":95051},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":95035,"toc":95043},[95036],[19,95037,95038,95039],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2663,95040,95041],{"href":95041,"rel":95042},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[26103],{"title":28,"searchDepth":51,"depth":51,"links":95044},[],"三件套第三套学习",{"category":95047},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":95033,"description":95045},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":95053,"title":95054,"body":95055,"description":2359,"extension":2360,"meta":95160,"navigation":99,"path":95161,"seo":95162,"stem":95163,"__hash__":95164},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":95056,"toc":95155},[95057,95064,95067,95070,95073,95077,95086,95089,95092,95096,95105,95108,95112,95115,95135,95138,95152],[19,95058,95059],{},[2663,95060,95063],{"href":95061,"rel":95062},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[26103],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,95065,95054],{"id":95066},"_1安装",[19,95068,95069],{},"numpy是科学计算基础库,底层是C语言",[19,95071,95072],{},"三种方式：",[14,95074,95076],{"id":95075},"_11-通过pip安装","1.1 通过pip安装",[23,95078,95080],{"className":25,"code":95079,"language":27,"meta":28,"style":28},"pip install numpy\n",[30,95081,95082],{"__ignoreMap":28},[33,95083,95084],{"class":35,"line":36},[33,95085,95079],{"class":47},[19,95087,95088],{},"首选方式，自动处理依赖项",[19,95090,95091],{},"在提示系统命令符中使用cmd",[14,95093,95095],{"id":95094},"_12-通过anaconda安装","1.2 通过Anaconda安装",[23,95097,95099],{"className":25,"code":95098,"language":27,"meta":28,"style":28},"conda install numpy\n",[30,95100,95101],{"__ignoreMap":28},[33,95102,95103],{"class":35,"line":36},[33,95104,95098],{"class":47},[19,95106,95107],{},"自动解决环境依赖",[14,95109,95111],{"id":95110},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,95113,95114],{},"对于Debian\u002FUbuntu",[23,95116,95118],{"className":25,"code":95117,"language":27,"meta":28,"style":28},"sudo apt-get install python3-numpy\n",[30,95119,95120],{"__ignoreMap":28},[33,95121,95122,95125,95127,95130,95132],{"class":35,"line":36},[33,95123,95124],{"class":47},"sudo apt",[33,95126,2949],{"class":39},[33,95128,95129],{"class":47},"get install python3",[33,95131,2949],{"class":39},[33,95133,95134],{"class":47},"numpy\n",[19,95136,95137],{},"对于Fedora:",[23,95139,95141],{"className":25,"code":95140,"language":27,"meta":28,"style":28},"sudo dnf install python3-numpy\n",[30,95142,95143],{"__ignoreMap":28},[33,95144,95145,95148,95150],{"class":35,"line":36},[33,95146,95147],{"class":47},"sudo dnf install python3",[33,95149,2949],{"class":39},[33,95151,95134],{"class":47},[2331,95153,95154],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":95156},[95157,95158,95159],{"id":95075,"depth":51,"text":95076},{"id":95094,"depth":51,"text":95095},{"id":95110,"depth":51,"text":95111},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":95054,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":95166,"title":95167,"body":95168,"description":2359,"extension":2360,"meta":95281,"navigation":99,"path":95282,"seo":95283,"stem":95284,"__hash__":95285},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":95169,"toc":95279},[95170,95173,95176,95179,95182,95185,95188,95191,95194,95197,95273,95276],[10,95171,95167],{"id":95172},"_10算数函数",[19,95174,95175],{},"加减乘除运算跟python基础语法没区别",[19,95177,95178],{},"除了python那种方法外还可以使用函数",[19,95180,95181],{},"加：np.add(a,b)",[19,95183,95184],{},"减：np.subtract(a,b)",[19,95186,95187],{},"乘：np.multiply(a,b)",[19,95189,95190],{},"除：np.divide(a,b) == a\u002Fb",[19,95192,95193],{},"取余：np.mod(a,b) == a%b",[19,95195,95196],{},"必须会的用法：",[23,95198,95200],{"className":25,"code":95199,"language":27,"meta":28,"style":28},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[30,95201,95202,95224,95245,95255,95268],{"__ignoreMap":28},[33,95203,95204,95206,95208,95211,95213,95216,95218,95220,95222],{"class":35,"line":36},[33,95205,2663],{"class":47},[33,95207,57],{"class":39},[33,95209,95210],{"class":47},"np.arange(",[33,95212,2840],{"class":72},[33,95214,95215],{"class":47},").reshape(",[33,95217,730],{"class":72},[33,95219,2799],{"class":47},[33,95221,730],{"class":72},[33,95223,226],{"class":47},[33,95225,95226,95228,95230,95233,95235,95237,95239,95241,95243],{"class":35,"line":51},[33,95227,2687],{"class":47},[33,95229,57],{"class":39},[33,95231,95232],{"class":47},"np.array([",[33,95234,1279],{"class":72},[33,95236,2799],{"class":47},[33,95238,1279],{"class":72},[33,95240,2799],{"class":47},[33,95242,1279],{"class":72},[33,95244,6907],{"class":47},[33,95246,95247,95250,95252],{"class":35,"line":64},[33,95248,95249],{"class":47},"result",[33,95251,57],{"class":39},[33,95253,95254],{"class":47},"np.empty_like(a)\n",[33,95256,95257,95260,95263,95265],{"class":35,"line":76},[33,95258,95259],{"class":47},"np.add(a,b,",[33,95261,95262],{"class":289},"out",[33,95264,57],{"class":39},[33,95266,95267],{"class":47},"result)\n",[33,95269,95270],{"class":35,"line":87},[33,95271,95272],{"class":47},"result\n",[19,95274,95275],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2331,95277,95278],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":95280},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":95167,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":95287,"title":95288,"body":95289,"description":2359,"extension":2360,"meta":96051,"navigation":99,"path":96052,"seo":96053,"stem":96054,"__hash__":96055},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":95290,"toc":96038},[95291,95294,95297,95300,95304,95343,95347,95391,95451,95455,95458,95497,95500,95545,95549,95585,95589,95658,95662,95726,95730,95733,95736,95739,95742,95778,95782,95822,95826,95898,95901,95905,95968,95972,96035],[10,95292,95288],{"id":95293},"_11统计函数",[19,95295,95296],{},"sum max min mean",[19,95298,95299],{},"这些有axis参数，可以指定方向",[14,95301,95303],{"id":95302},"_111-sum求和函数","11.1 sum()求和函数",[23,95305,95307],{"className":25,"code":95306,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[30,95308,95309,95314,95335],{"__ignoreMap":28},[33,95310,95311],{"class":35,"line":36},[33,95312,95313],{"class":2487},"#创建一维数组\n",[33,95315,95316,95318,95320,95323,95325,95327,95329,95331,95333],{"class":35,"line":51},[33,95317,2663],{"class":47},[33,95319,57],{"class":39},[33,95321,95322],{"class":47},"np.random.randint(",[33,95324,720],{"class":72},[33,95326,2799],{"class":47},[33,95328,2734],{"class":72},[33,95330,2799],{"class":47},[33,95332,1284],{"class":72},[33,95334,226],{"class":47},[33,95336,95337,95340],{"class":35,"line":64},[33,95338,95339],{"class":47},"np.sum(a)",[33,95341,95342],{"class":2487},"#求和\n",[14,95344,95346],{"id":95345},"_112-max求最大值函数","11.2 max()求最大值函数",[23,95348,95350],{"className":25,"code":95349,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[30,95351,95352,95356,95376,95381,95386],{"__ignoreMap":28},[33,95353,95354],{"class":35,"line":36},[33,95355,95313],{"class":2487},[33,95357,95358,95360,95362,95364,95366,95368,95370,95372,95374],{"class":35,"line":51},[33,95359,2663],{"class":47},[33,95361,57],{"class":39},[33,95363,95322],{"class":47},[33,95365,720],{"class":72},[33,95367,2799],{"class":47},[33,95369,2734],{"class":72},[33,95371,2799],{"class":47},[33,95373,1284],{"class":72},[33,95375,226],{"class":47},[33,95377,95378],{"class":35,"line":64},[33,95379,95380],{"class":47},"np.max(a)\n",[33,95382,95383],{"class":35,"line":76},[33,95384,95385],{"class":2487},"#最大索引(求最大元素的索引)arg\n",[33,95387,95388],{"class":35,"line":87},[33,95389,95390],{"class":47},"np.argmax(a)\n",[23,95392,95394],{"className":25,"code":95393,"language":27,"meta":28,"style":28},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[30,95395,95396,95417,95437,95441],{"__ignoreMap":28},[33,95397,95398,95400,95402,95405,95407,95409,95411,95413,95415],{"class":35,"line":36},[33,95399,13160],{"class":47},[33,95401,57],{"class":39},[33,95403,95404],{"class":47}," np.array([",[33,95406,720],{"class":72},[33,95408,245],{"class":47},[33,95410,758],{"class":72},[33,95412,245],{"class":47},[33,95414,730],{"class":72},[33,95416,6907],{"class":47},[33,95418,95419,95421,95423,95425,95427,95429,95431,95433,95435],{"class":35,"line":51},[33,95420,13186],{"class":47},[33,95422,57],{"class":39},[33,95424,95404],{"class":47},[33,95426,730],{"class":72},[33,95428,245],{"class":47},[33,95430,725],{"class":72},[33,95432,245],{"class":47},[33,95434,753],{"class":72},[33,95436,6907],{"class":47},[33,95438,95439],{"class":35,"line":64},[33,95440,100],{"emptyLinePlaceholder":99},[33,95442,95443,95445,95448],{"class":35,"line":76},[33,95444,122],{"class":72},[33,95446,95447],{"class":47},"(np.maximum(a, b))   ",[33,95449,95450],{"class":2487},"# [3 5 4]，每个位置上取较大值\n",[14,95452,95454],{"id":95453},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95456,95457],{},"①一维数组：",[23,95459,95461],{"className":25,"code":95460,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[30,95462,95463,95467,95487,95492],{"__ignoreMap":28},[33,95464,95465],{"class":35,"line":36},[33,95466,95313],{"class":2487},[33,95468,95469,95471,95473,95475,95477,95479,95481,95483,95485],{"class":35,"line":51},[33,95470,2663],{"class":47},[33,95472,57],{"class":39},[33,95474,95322],{"class":47},[33,95476,720],{"class":72},[33,95478,2799],{"class":47},[33,95480,2734],{"class":72},[33,95482,2799],{"class":47},[33,95484,1284],{"class":72},[33,95486,226],{"class":47},[33,95488,95489],{"class":35,"line":64},[33,95490,95491],{"class":2487},"#求平均值\n",[33,95493,95494],{"class":35,"line":76},[33,95495,95496],{"class":47},"np.mean(a)\n",[19,95498,95499],{},"②二维数组",[23,95501,95503],{"className":25,"code":95502,"language":27,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[30,95504,95505,95510,95535,95540],{"__ignoreMap":28},[33,95506,95507],{"class":35,"line":36},[33,95508,95509],{"class":2487},"#二维数组\n",[33,95511,95512,95515,95517,95519,95521,95523,95525,95527,95529,95531,95533],{"class":35,"line":51},[33,95513,95514],{"class":47},"aa",[33,95516,57],{"class":39},[33,95518,95210],{"class":47},[33,95520,720],{"class":72},[33,95522,2799],{"class":47},[33,95524,2940],{"class":72},[33,95526,95215],{"class":47},[33,95528,730],{"class":72},[33,95530,2799],{"class":47},[33,95532,753],{"class":72},[33,95534,226],{"class":47},[33,95536,95537],{"class":35,"line":64},[33,95538,95539],{"class":2487},"#对数组中的所有数求平均\n",[33,95541,95542],{"class":35,"line":76},[33,95543,95544],{"class":47},"np.mean(aa)\n",[14,95546,95548],{"id":95547},"_114-median求中位数函数","11.4 median()求中位数函数",[23,95550,95552],{"className":25,"code":95551,"language":27,"meta":28,"style":28},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[30,95553,95554,95559,95575,95580],{"__ignoreMap":28},[33,95555,95556],{"class":35,"line":36},[33,95557,95558],{"class":2487},"#求中位数\n",[33,95560,95561,95563,95565,95567,95569,95571,95573],{"class":35,"line":51},[33,95562,2687],{"class":47},[33,95564,57],{"class":39},[33,95566,95210],{"class":47},[33,95568,720],{"class":72},[33,95570,2799],{"class":47},[33,95572,1279],{"class":72},[33,95574,226],{"class":47},[33,95576,95577],{"class":35,"line":64},[33,95578,95579],{"class":47},"np.median(b)\n",[33,95581,95582],{"class":35,"line":76},[33,95583,95584],{"class":2487},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95586,95588],{"id":95587},"_115-power求幂运算函数","11.5 power()求幂运算函数",[23,95590,95592],{"className":25,"code":95591,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[30,95593,95594,95610,95615,95620,95629,95634,95643],{"__ignoreMap":28},[33,95595,95596,95598,95600,95602,95604,95606,95608],{"class":35,"line":36},[33,95597,2687],{"class":47},[33,95599,57],{"class":39},[33,95601,95210],{"class":47},[33,95603,720],{"class":72},[33,95605,2799],{"class":47},[33,95607,1279],{"class":72},[33,95609,226],{"class":47},[33,95611,95612],{"class":35,"line":51},[33,95613,95614],{"class":2487},"#幂运算\n",[33,95616,95617],{"class":35,"line":64},[33,95618,95619],{"class":2487},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[33,95621,95622,95625,95627],{"class":35,"line":76},[33,95623,95624],{"class":47},"np.power(b,",[33,95626,725],{"class":72},[33,95628,226],{"class":47},[33,95630,95631],{"class":35,"line":87},[33,95632,95633],{"class":2487},"#或者以下代码，将数据存储起来\n",[33,95635,95636,95638,95640],{"class":35,"line":96},[33,95637,3257],{"class":47},[33,95639,57],{"class":39},[33,95641,95642],{"class":47},"np.empty_like(b)\n",[33,95644,95645,95647,95649,95651,95653,95655],{"class":35,"line":103},[33,95646,95624],{"class":47},[33,95648,725],{"class":72},[33,95650,2799],{"class":47},[33,95652,95262],{"class":289},[33,95654,57],{"class":39},[33,95656,95657],{"class":47},"y)\n",[14,95659,95661],{"id":95660},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[23,95663,95665],{"className":25,"code":95664,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[30,95666,95667,95683,95688,95693,95697,95715],{"__ignoreMap":28},[33,95668,95669,95671,95673,95675,95677,95679,95681],{"class":35,"line":36},[33,95670,2687],{"class":47},[33,95672,57],{"class":39},[33,95674,95210],{"class":47},[33,95676,720],{"class":72},[33,95678,2799],{"class":47},[33,95680,1279],{"class":72},[33,95682,226],{"class":47},[33,95684,95685],{"class":35,"line":51},[33,95686,95687],{"class":2487},"#开方\n",[33,95689,95690],{"class":35,"line":64},[33,95691,95692],{"class":47},"np.sqrt(b)\n",[33,95694,95695],{"class":35,"line":76},[33,95696,95633],{"class":2487},[33,95698,95699,95701,95703,95706,95709,95711,95713],{"class":35,"line":87},[33,95700,3257],{"class":47},[33,95702,57],{"class":39},[33,95704,95705],{"class":47},"np.empty_like(b,",[33,95707,95708],{"class":289},"dtype",[33,95710,57],{"class":39},[33,95712,2471],{"class":72},[33,95714,226],{"class":47},[33,95716,95717,95720,95722,95724],{"class":35,"line":96},[33,95718,95719],{"class":47},"np.sqrt(b,",[33,95721,95262],{"class":289},[33,95723,57],{"class":39},[33,95725,95657],{"class":47},[14,95727,95729],{"id":95728},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95731,95732],{},"对数组中的元素累计求和，可指定轴",[19,95734,95735],{},"#累计求和的意思是：",[19,95737,95738],{},"a = np.array([1, 2, 3, 4])",[19,95740,95741],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[23,95743,95745],{"className":25,"code":95744,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[30,95746,95747,95763,95768,95773],{"__ignoreMap":28},[33,95748,95749,95751,95753,95755,95757,95759,95761],{"class":35,"line":36},[33,95750,2687],{"class":47},[33,95752,57],{"class":39},[33,95754,95210],{"class":47},[33,95756,720],{"class":72},[33,95758,2799],{"class":47},[33,95760,1279],{"class":72},[33,95762,226],{"class":47},[33,95764,95765],{"class":35,"line":51},[33,95766,95767],{"class":47},"np.cumsum(b)\n",[33,95769,95770],{"class":35,"line":64},[33,95771,95772],{"class":2487},"#结果：\n",[33,95774,95775],{"class":35,"line":76},[33,95776,95777],{"class":2487},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95779,95781],{"id":95780},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[23,95783,95785],{"className":25,"code":95784,"language":27,"meta":28,"style":28},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[30,95786,95787,95803,95808,95813,95817],{"__ignoreMap":28},[33,95788,95789,95791,95793,95795,95797,95799,95801],{"class":35,"line":36},[33,95790,2687],{"class":47},[33,95792,57],{"class":39},[33,95794,95210],{"class":47},[33,95796,720],{"class":72},[33,95798,2799],{"class":47},[33,95800,1279],{"class":72},[33,95802,226],{"class":47},[33,95804,95805],{"class":35,"line":51},[33,95806,95807],{"class":2487},"#对数组中的元素累计求积，可指定轴\n",[33,95809,95810],{"class":35,"line":64},[33,95811,95812],{"class":47},"np.cumprod(b)\n",[33,95814,95815],{"class":35,"line":76},[33,95816,95772],{"class":2487},[33,95818,95819],{"class":35,"line":87},[33,95820,95821],{"class":2487},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95823,95825],{"id":95824},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[23,95827,95829],{"className":25,"code":95828,"language":27,"meta":28,"style":28},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[30,95830,95831,95836,95884,95889,95893],{"__ignoreMap":28},[33,95832,95833],{"class":35,"line":36},[33,95834,95835],{"class":2487},"#删除数组中的重复数据，并对数据进行排序\n",[33,95837,95838,95840,95842,95844,95846,95848,95850,95852,95854,95856,95858,95860,95862,95864,95866,95868,95870,95872,95874,95876,95878,95880,95882],{"class":35,"line":51},[33,95839,2663],{"class":47},[33,95841,57],{"class":39},[33,95843,95232],{"class":47},[33,95845,720],{"class":72},[33,95847,2799],{"class":47},[33,95849,725],{"class":72},[33,95851,2799],{"class":47},[33,95853,730],{"class":72},[33,95855,2799],{"class":47},[33,95857,2915],{"class":72},[33,95859,2799],{"class":47},[33,95861,730],{"class":72},[33,95863,2799],{"class":47},[33,95865,1279],{"class":72},[33,95867,2799],{"class":47},[33,95869,2623],{"class":72},[33,95871,2799],{"class":47},[33,95873,2617],{"class":72},[33,95875,2799],{"class":47},[33,95877,3188],{"class":72},[33,95879,2799],{"class":47},[33,95881,753],{"class":72},[33,95883,6907],{"class":47},[33,95885,95886],{"class":35,"line":64},[33,95887,95888],{"class":47},"np.unique(a)\n",[33,95890,95891],{"class":35,"line":76},[33,95892,95772],{"class":2487},[33,95894,95895],{"class":35,"line":87},[33,95896,95897],{"class":2487},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95899,95900],{},"升序形式排序",[14,95902,95904],{"id":95903},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[23,95906,95908],{"className":25,"code":95907,"language":27,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[30,95909,95910,95958,95963],{"__ignoreMap":28},[33,95911,95912,95914,95916,95918,95920,95922,95924,95926,95928,95930,95932,95934,95936,95938,95940,95942,95944,95946,95948,95950,95952,95954,95956],{"class":35,"line":36},[33,95913,2663],{"class":47},[33,95915,57],{"class":39},[33,95917,95232],{"class":47},[33,95919,720],{"class":72},[33,95921,2799],{"class":47},[33,95923,725],{"class":72},[33,95925,2799],{"class":47},[33,95927,730],{"class":72},[33,95929,2799],{"class":47},[33,95931,2915],{"class":72},[33,95933,2799],{"class":47},[33,95935,730],{"class":72},[33,95937,2799],{"class":47},[33,95939,1279],{"class":72},[33,95941,2799],{"class":47},[33,95943,2623],{"class":72},[33,95945,2799],{"class":47},[33,95947,2617],{"class":72},[33,95949,2799],{"class":47},[33,95951,3188],{"class":72},[33,95953,2799],{"class":47},[33,95955,753],{"class":72},[33,95957,6907],{"class":47},[33,95959,95960],{"class":35,"line":51},[33,95961,95962],{"class":2487},"#返回数组中非零元素的索引\n",[33,95964,95965],{"class":35,"line":64},[33,95966,95967],{"class":47},"np.nonzero(a)\n",[14,95969,95971],{"id":95970},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[23,95973,95975],{"className":25,"code":95974,"language":27,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[30,95976,95977,96025,96030],{"__ignoreMap":28},[33,95978,95979,95981,95983,95985,95987,95989,95991,95993,95995,95997,95999,96001,96003,96005,96007,96009,96011,96013,96015,96017,96019,96021,96023],{"class":35,"line":36},[33,95980,2663],{"class":47},[33,95982,57],{"class":39},[33,95984,95232],{"class":47},[33,95986,720],{"class":72},[33,95988,2799],{"class":47},[33,95990,725],{"class":72},[33,95992,2799],{"class":47},[33,95994,730],{"class":72},[33,95996,2799],{"class":47},[33,95998,2915],{"class":72},[33,96000,2799],{"class":47},[33,96002,730],{"class":72},[33,96004,2799],{"class":47},[33,96006,1279],{"class":72},[33,96008,2799],{"class":47},[33,96010,2623],{"class":72},[33,96012,2799],{"class":47},[33,96014,2617],{"class":72},[33,96016,2799],{"class":47},[33,96018,3188],{"class":72},[33,96020,2799],{"class":47},[33,96022,753],{"class":72},[33,96024,6907],{"class":47},[33,96026,96027],{"class":35,"line":51},[33,96028,96029],{"class":2487},"#计算一组数中最大值与最小值的差，可指定轴\n",[33,96031,96032],{"class":35,"line":64},[33,96033,96034],{"class":47},"np.ptp(a)\n",[2331,96036,96037],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":96039},[96040,96041,96042,96043,96044,96045,96046,96047,96048,96049,96050],{"id":95302,"depth":51,"text":95303},{"id":95345,"depth":51,"text":95346},{"id":95453,"depth":51,"text":95454},{"id":95547,"depth":51,"text":95548},{"id":95587,"depth":51,"text":95588},{"id":95660,"depth":51,"text":95661},{"id":95728,"depth":51,"text":95729},{"id":95780,"depth":51,"text":95781},{"id":95824,"depth":51,"text":95825},{"id":95903,"depth":51,"text":95904},{"id":95970,"depth":51,"text":95971},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":95288,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":96057,"title":96058,"body":96059,"description":2359,"extension":2360,"meta":96714,"navigation":99,"path":96715,"seo":96716,"stem":96717,"__hash__":96718},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":96060,"toc":96702},[96061,96064,96068,96071,96287,96291,96294,96503,96507,96573,96578,96582,96585,96588,96626,96630,96633,96638,96642,96645,96648,96653,96657,96660,96664,96667,96670,96675,96679,96682,96685,96690,96694,96699],[10,96062,96058],{"id":96063},"_12其他常用函数",[14,96065,96067],{"id":96066},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,96069,96070],{},"将数组的数据按照行列复制扩展",[23,96072,96074],{"className":25,"code":96073,"language":27,"meta":28,"style":28},"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",[30,96075,96076,96092,96101,96105,96110,96115,96128,96132,96137,96142,96147,96151,96156,96180,96192,96196,96200,96205,96210,96215,96220,96224,96237,96241,96245,96250,96255,96260,96265,96270,96274,96278,96283],{"__ignoreMap":28},[33,96077,96078,96080,96082,96084,96086,96088,96090],{"class":35,"line":36},[33,96079,2663],{"class":47},[33,96081,57],{"class":39},[33,96083,95210],{"class":47},[33,96085,720],{"class":72},[33,96087,2799],{"class":47},[33,96089,758],{"class":72},[33,96091,226],{"class":47},[33,96093,96094,96097,96099],{"class":35,"line":51},[33,96095,96096],{"class":47},"np.tile(a,",[33,96098,725],{"class":72},[33,96100,226],{"class":47},[33,96102,96103],{"class":35,"line":64},[33,96104,95772],{"class":2487},[33,96106,96107],{"class":35,"line":76},[33,96108,96109],{"class":2487},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[33,96111,96112],{"class":35,"line":87},[33,96113,96114],{"class":2487},"#行复制两次，列复制三次\n",[33,96116,96117,96120,96122,96124,96126],{"class":35,"line":96},[33,96118,96119],{"class":47},"np.tile(a,(",[33,96121,725],{"class":72},[33,96123,2799],{"class":47},[33,96125,730],{"class":72},[33,96127,551],{"class":47},[33,96129,96130],{"class":35,"line":103},[33,96131,95772],{"class":2487},[33,96133,96134],{"class":35,"line":108},[33,96135,96136],{"class":60},"'''\n",[33,96138,96139],{"class":35,"line":119},[33,96140,96141],{"class":60},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[33,96143,96144],{"class":35,"line":128},[33,96145,96146],{"class":60},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[33,96148,96149],{"class":35,"line":1753},[33,96150,96136],{"class":60},[33,96152,96153],{"class":35,"line":1763},[33,96154,96155],{"class":2487},"#创建二维数组\n",[33,96157,96158,96160,96162,96164,96166,96168,96170,96172,96174,96176,96178],{"class":35,"line":1775},[33,96159,95514],{"class":47},[33,96161,57],{"class":39},[33,96163,95210],{"class":47},[33,96165,720],{"class":72},[33,96167,2799],{"class":47},[33,96169,2940],{"class":72},[33,96171,95215],{"class":47},[33,96173,753],{"class":72},[33,96175,2799],{"class":47},[33,96177,730],{"class":72},[33,96179,226],{"class":47},[33,96181,96182,96185,96187,96189],{"class":35,"line":1780},[33,96183,96184],{"class":47},"np.tile(aa,",[33,96186,725],{"class":72},[33,96188,2849],{"class":47},[33,96190,96191],{"class":2487},"#一个数的时候就是行\n",[33,96193,96194],{"class":35,"line":1785},[33,96195,95772],{"class":2487},[33,96197,96198],{"class":35,"line":1940},[33,96199,96136],{"class":60},[33,96201,96202],{"class":35,"line":2183},[33,96203,96204],{"class":60},"array([[ 1,  2,  3,  1,  2,  3],\n",[33,96206,96207],{"class":35,"line":2208},[33,96208,96209],{"class":60},"       [ 4,  5,  6,  4,  5,  6],\n",[33,96211,96212],{"class":35,"line":2234},[33,96213,96214],{"class":60},"       [ 7,  8,  9,  7,  8,  9],\n",[33,96216,96217],{"class":35,"line":2239},[33,96218,96219],{"class":60},"       [10, 11, 12, 10, 11, 12]])\n",[33,96221,96222],{"class":35,"line":2247},[33,96223,96136],{"class":60},[33,96225,96226,96229,96231,96233,96235],{"class":35,"line":2255},[33,96227,96228],{"class":47},"np.tile(aa,(",[33,96230,725],{"class":72},[33,96232,2799],{"class":47},[33,96234,730],{"class":72},[33,96236,551],{"class":47},[33,96238,96239],{"class":35,"line":3992},[33,96240,95772],{"class":2487},[33,96242,96243],{"class":35,"line":4009},[33,96244,96136],{"class":60},[33,96246,96247],{"class":35,"line":4014},[33,96248,96249],{"class":60},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,96251,96252],{"class":35,"line":4019},[33,96253,96254],{"class":60},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[33,96256,96257],{"class":35,"line":4024},[33,96258,96259],{"class":60},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[33,96261,96262],{"class":35,"line":4038},[33,96263,96264],{"class":60},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[33,96266,96267],{"class":35,"line":4043},[33,96268,96269],{"class":60},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,96271,96272],{"class":35,"line":4834},[33,96273,96254],{"class":60},[33,96275,96276],{"class":35,"line":4848},[33,96277,96259],{"class":60},[33,96279,96280],{"class":35,"line":4856},[33,96281,96282],{"class":60},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[33,96284,96285],{"class":35,"line":4861},[33,96286,96136],{"class":60},[14,96288,96290],{"id":96289},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,96292,96293],{},"repeat()将数组中的每个元素重复若干次",[23,96295,96297],{"className":25,"code":96296,"language":27,"meta":28,"style":28},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[30,96298,96299,96315,96324,96328,96333,96357,96362,96371,96375,96380,96384,96389,96405,96409,96413,96418,96423,96428,96432,96437,96441,96446,96451,96455,96471,96475,96479,96484,96489,96494,96499],{"__ignoreMap":28},[33,96300,96301,96303,96305,96307,96309,96311,96313],{"class":35,"line":36},[33,96302,2663],{"class":47},[33,96304,57],{"class":39},[33,96306,95210],{"class":47},[33,96308,720],{"class":72},[33,96310,2799],{"class":47},[33,96312,758],{"class":72},[33,96314,226],{"class":47},[33,96316,96317,96320,96322],{"class":35,"line":51},[33,96318,96319],{"class":47},"np.repeat(a,",[33,96321,730],{"class":72},[33,96323,226],{"class":47},[33,96325,96326],{"class":35,"line":64},[33,96327,95772],{"class":2487},[33,96329,96330],{"class":35,"line":76},[33,96331,96332],{"class":2487},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[33,96334,96335,96337,96339,96341,96343,96345,96347,96349,96351,96353,96355],{"class":35,"line":87},[33,96336,95514],{"class":47},[33,96338,57],{"class":39},[33,96340,95210],{"class":47},[33,96342,720],{"class":72},[33,96344,2799],{"class":47},[33,96346,2940],{"class":72},[33,96348,95215],{"class":47},[33,96350,753],{"class":72},[33,96352,2799],{"class":47},[33,96354,730],{"class":72},[33,96356,226],{"class":47},[33,96358,96359],{"class":35,"line":96},[33,96360,96361],{"class":2487},"#这个重复之后二维变成一维\n",[33,96363,96364,96367,96369],{"class":35,"line":103},[33,96365,96366],{"class":47},"np.repeat(aa,",[33,96368,725],{"class":72},[33,96370,226],{"class":47},[33,96372,96373],{"class":35,"line":108},[33,96374,96136],{"class":60},[33,96376,96377],{"class":35,"line":119},[33,96378,96379],{"class":60},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[33,96381,96382],{"class":35,"line":128},[33,96383,96136],{"class":60},[33,96385,96386],{"class":35,"line":1753},[33,96387,96388],{"class":2487},"#指定axis\n",[33,96390,96391,96393,96395,96397,96399,96401,96403],{"class":35,"line":1763},[33,96392,96366],{"class":47},[33,96394,725],{"class":72},[33,96396,2799],{"class":47},[33,96398,49736],{"class":289},[33,96400,57],{"class":39},[33,96402,2617],{"class":72},[33,96404,226],{"class":47},[33,96406,96407],{"class":35,"line":1775},[33,96408,95772],{"class":2487},[33,96410,96411],{"class":35,"line":1780},[33,96412,96136],{"class":60},[33,96414,96415],{"class":35,"line":1785},[33,96416,96417],{"class":60},"array([[ 1,  2,  3],\n",[33,96419,96420],{"class":35,"line":1940},[33,96421,96422],{"class":60},"       [ 1,  2,  3],\n",[33,96424,96425],{"class":35,"line":2183},[33,96426,96427],{"class":60},"       [ 4,  5,  6],\n",[33,96429,96430],{"class":35,"line":2208},[33,96431,96427],{"class":60},[33,96433,96434],{"class":35,"line":2234},[33,96435,96436],{"class":60},"       [ 7,  8,  9],\n",[33,96438,96439],{"class":35,"line":2239},[33,96440,96436],{"class":60},[33,96442,96443],{"class":35,"line":2247},[33,96444,96445],{"class":60},"       [10, 11, 12],\n",[33,96447,96448],{"class":35,"line":2255},[33,96449,96450],{"class":60},"       [10, 11, 12]])\n",[33,96452,96453],{"class":35,"line":3992},[33,96454,96136],{"class":60},[33,96456,96457,96459,96461,96463,96465,96467,96469],{"class":35,"line":4009},[33,96458,96366],{"class":47},[33,96460,725],{"class":72},[33,96462,2799],{"class":47},[33,96464,49736],{"class":289},[33,96466,57],{"class":39},[33,96468,720],{"class":72},[33,96470,226],{"class":47},[33,96472,96473],{"class":35,"line":4014},[33,96474,95772],{"class":2487},[33,96476,96477],{"class":35,"line":4019},[33,96478,96136],{"class":60},[33,96480,96481],{"class":35,"line":4024},[33,96482,96483],{"class":60},"array([[ 1,  1,  2,  2,  3,  3],\n",[33,96485,96486],{"class":35,"line":4038},[33,96487,96488],{"class":60},"       [ 4,  4,  5,  5,  6,  6],\n",[33,96490,96491],{"class":35,"line":4043},[33,96492,96493],{"class":60},"       [ 7,  7,  8,  8,  9,  9],\n",[33,96495,96496],{"class":35,"line":4834},[33,96497,96498],{"class":60},"       [10, 10, 11, 11, 12, 12]])\n",[33,96500,96501],{"class":35,"line":4848},[33,96502,96136],{"class":60},[14,96504,96506],{"id":96505},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[23,96508,96510],{"className":25,"code":96509,"language":27,"meta":28,"style":28},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[30,96511,96512,96528,96533,96545,96549,96554,96564,96568],{"__ignoreMap":28},[33,96513,96514,96516,96518,96520,96522,96524,96526],{"class":35,"line":36},[33,96515,2663],{"class":47},[33,96517,57],{"class":39},[33,96519,95210],{"class":47},[33,96521,720],{"class":72},[33,96523,2799],{"class":47},[33,96525,758],{"class":72},[33,96527,226],{"class":47},[33,96529,96530],{"class":35,"line":51},[33,96531,96532],{"class":2487},"#array([，2，3，4])\n",[33,96534,96535,96538,96540,96542],{"class":35,"line":64},[33,96536,96537],{"class":47},"np.roll(a,",[33,96539,725],{"class":72},[33,96541,2849],{"class":47},[33,96543,96544],{"class":2487},"#传正数向后调多少位，传负数向前调多少位\n",[33,96546,96547],{"class":35,"line":76},[33,96548,95772],{"class":2487},[33,96550,96551],{"class":35,"line":87},[33,96552,96553],{"class":2487},"#array([3, 4, 1, 2])\n",[33,96555,96556,96558,96560,96562],{"class":35,"line":96},[33,96557,96537],{"class":47},[33,96559,2949],{"class":39},[33,96561,720],{"class":72},[33,96563,226],{"class":47},[33,96565,96566],{"class":35,"line":103},[33,96567,95772],{"class":2487},[33,96569,96570],{"class":35,"line":108},[33,96571,96572],{"class":2487},"#array([2, 3, 4, 1])\n",[19,96574,96575],{},[3736,96576],{"alt":28,"src":96577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96579,96581],{"id":96580},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96583,96584],{},"resize()重新调整数组的大小",[19,96586,96587],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[23,96589,96591],{"className":25,"code":96590,"language":27,"meta":28,"style":28},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[30,96592,96593,96598,96611],{"__ignoreMap":28},[33,96594,96595],{"class":35,"line":36},[33,96596,96597],{"class":2487},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[33,96599,96600,96603,96605,96607,96609],{"class":35,"line":51},[33,96601,96602],{"class":47},"np.resize(aa,(",[33,96604,725],{"class":72},[33,96606,2799],{"class":47},[33,96608,2765],{"class":72},[33,96610,551],{"class":47},[33,96612,96613,96615,96617,96619,96621,96623],{"class":35,"line":64},[33,96614,96602],{"class":47},[33,96616,725],{"class":72},[33,96618,2799],{"class":47},[33,96620,2840],{"class":72},[33,96622,84980],{"class":47},[33,96624,96625],{"class":2487},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96627,96629],{"id":96628},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96631,96632],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96634,96635],{},[3736,96636],{"alt":28,"src":96637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96639,96641],{"id":96640},"_126-保存加载文件","12.6 保存加载文件",[19,96643,96644],{},"savetxt():将数据保存到txt文件中",[19,96646,96647],{},"loadtxt():从文件加载数据",[19,96649,96650],{},[3736,96651],{"alt":28,"src":96652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96654,96656],{"id":96655},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96658,96659],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96661,96663],{"id":96662},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96665,96666],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96668,96669],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96671,96672],{},[3736,96673],{"alt":28,"src":96674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96676,96678],{"id":96677},"_129-where语句","12.9 where语句",[19,96680,96681],{},"np.where(条件,x,y)",[19,96683,96684],{},"如果条件为True,对应值为x,否则对应值为y",[19,96686,96687],{},[3736,96688],{"alt":28,"src":96689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96691,96693],{"id":96692},"_1210-dot矩阵","12.10 dot()矩阵",[19,96695,96696],{},[3736,96697],{"alt":28,"src":96698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2331,96700,96701],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":96703},[96704,96705,96706,96707,96708,96709,96710,96711,96712,96713],{"id":96066,"depth":51,"text":96067},{"id":96289,"depth":51,"text":96290},{"id":96505,"depth":51,"text":96506},{"id":96580,"depth":51,"text":96581},{"id":96628,"depth":51,"text":96629},{"id":96640,"depth":51,"text":96641},{"id":96655,"depth":51,"text":96656},{"id":96662,"depth":51,"text":96663},{"id":96677,"depth":51,"text":96678},{"id":96692,"depth":51,"text":96693},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":96058,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96720,"title":96721,"body":96722,"description":2359,"extension":2360,"meta":97075,"navigation":99,"path":97076,"seo":97077,"stem":97078,"__hash__":97079},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96723,"toc":97073},[96724,96727,96730,96733,96736,96739,96804,96806,97070],[10,96725,96721],{"id":96726},"_13数组排序",[19,96728,96729],{},"排序主要用到的方法是np.sort和np.argsort",[19,96731,96732],{},"其中np.sort()对数组直接排序",[19,96734,96735],{},"而np.argsort()是返回排序后的原始索引",[19,96737,96738],{},"①一维数组",[23,96740,96742],{"className":25,"code":96741,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[30,96743,96744,96748,96788,96796],{"__ignoreMap":28},[33,96745,96746],{"class":35,"line":36},[33,96747,95313],{"class":2487},[33,96749,96750,96752,96754,96756,96758,96760,96762,96764,96766,96768,96770,96772,96774,96776,96778,96780,96782,96784,96786],{"class":35,"line":51},[33,96751,2663],{"class":47},[33,96753,57],{"class":39},[33,96755,95232],{"class":47},[33,96757,730],{"class":72},[33,96759,2799],{"class":47},[33,96761,2915],{"class":72},[33,96763,2799],{"class":47},[33,96765,2816],{"class":72},[33,96767,2799],{"class":47},[33,96769,3188],{"class":72},[33,96771,2799],{"class":47},[33,96773,2703],{"class":72},[33,96775,2799],{"class":47},[33,96777,3303],{"class":72},[33,96779,2799],{"class":47},[33,96781,2765],{"class":72},[33,96783,2799],{"class":47},[33,96785,1279],{"class":72},[33,96787,6907],{"class":47},[33,96789,96790,96793],{"class":35,"line":64},[33,96791,96792],{"class":47},"np.sort(a)",[33,96794,96795],{"class":2487},"#升序排序\n",[33,96797,96798,96801],{"class":35,"line":76},[33,96799,96800],{"class":47},"np.argsort(a)",[33,96802,96803],{"class":2487},"#按照元素大小来索引排序\n",[19,96805,95499],{},[23,96807,96809],{"className":25,"code":96808,"language":27,"meta":28,"style":28},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[30,96810,96811,96823,96849,96854,96858,96863,96868,96873,96878,96882,96890,96894,96899,96904,96909,96914,96918,96923,96936,96940,96945,96950,96955,96960,96964,96969,96981,96985,96989,96993,96997,97001,97005,97010,97025,97030,97039,97044,97048,97052,97057,97061,97066],{"__ignoreMap":28},[33,96812,96813,96816,96818,96820],{"class":35,"line":36},[33,96814,96815],{"class":47},"np.random.seed(",[33,96817,2617],{"class":72},[33,96819,2849],{"class":47},[33,96821,96822],{"class":2487},"#保证每次值一样\n",[33,96824,96825,96827,96829,96831,96833,96835,96837,96839,96841,96843,96845,96847],{"class":35,"line":51},[33,96826,95514],{"class":47},[33,96828,57],{"class":39},[33,96830,95322],{"class":47},[33,96832,2734],{"class":72},[33,96834,2799],{"class":47},[33,96836,33725],{"class":289},[33,96838,57],{"class":39},[33,96840,133],{"class":47},[33,96842,753],{"class":72},[33,96844,2799],{"class":47},[33,96846,2765],{"class":72},[33,96848,551],{"class":47},[33,96850,96851],{"class":35,"line":64},[33,96852,96853],{"class":2487},"#原数组：\n",[33,96855,96856],{"class":35,"line":76},[33,96857,96136],{"class":60},[33,96859,96860],{"class":35,"line":87},[33,96861,96862],{"class":60},"array([[44, 47, 64, 67, 67,  9],\n",[33,96864,96865],{"class":35,"line":96},[33,96866,96867],{"class":60},"       [83, 21, 36, 87, 70, 88],\n",[33,96869,96870],{"class":35,"line":103},[33,96871,96872],{"class":60},"       [88, 12, 58, 65, 39, 87],\n",[33,96874,96875],{"class":35,"line":108},[33,96876,96877],{"class":60},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[33,96879,96880],{"class":35,"line":119},[33,96881,96136],{"class":60},[33,96883,96884,96887],{"class":35,"line":128},[33,96885,96886],{"class":47},"np.sort(aa)",[33,96888,96889],{"class":2487},"#每行进行了排序\n",[33,96891,96892],{"class":35,"line":1753},[33,96893,96136],{"class":60},[33,96895,96896],{"class":35,"line":1763},[33,96897,96898],{"class":60},"array([[ 9, 44, 47, 64, 67, 67],\n",[33,96900,96901],{"class":35,"line":1775},[33,96902,96903],{"class":60},"       [21, 36, 70, 83, 87, 88],\n",[33,96905,96906],{"class":35,"line":1780},[33,96907,96908],{"class":60},"       [12, 39, 58, 65, 87, 88],\n",[33,96910,96911],{"class":35,"line":1785},[33,96912,96913],{"class":60},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[33,96915,96916],{"class":35,"line":1940},[33,96917,96136],{"class":60},[33,96919,96920],{"class":35,"line":2183},[33,96921,96922],{"class":2487},"#axis=0时\n",[33,96924,96925,96928,96930,96932,96934],{"class":35,"line":2208},[33,96926,96927],{"class":47},"np.sort(aa,",[33,96929,49736],{"class":289},[33,96931,57],{"class":39},[33,96933,2617],{"class":72},[33,96935,226],{"class":47},[33,96937,96938],{"class":35,"line":2234},[33,96939,96136],{"class":60},[33,96941,96942],{"class":35,"line":2239},[33,96943,96944],{"class":60},"array([[44, 12, 36, 37, 25,  9],\n",[33,96946,96947],{"class":35,"line":2247},[33,96948,96949],{"class":60},"       [46, 21, 58, 65, 39, 77],\n",[33,96951,96952],{"class":35,"line":2255},[33,96953,96954],{"class":60},"       [83, 47, 64, 67, 67, 87],\n",[33,96956,96957],{"class":35,"line":3992},[33,96958,96959],{"class":60},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[33,96961,96962],{"class":35,"line":4009},[33,96963,96136],{"class":60},[33,96965,96966],{"class":35,"line":4014},[33,96967,96968],{"class":2487},"#axis=1时,为默认值\n",[33,96970,96971,96973,96975,96977,96979],{"class":35,"line":4019},[33,96972,96927],{"class":47},[33,96974,49736],{"class":289},[33,96976,57],{"class":39},[33,96978,720],{"class":72},[33,96980,226],{"class":47},[33,96982,96983],{"class":35,"line":4024},[33,96984,96136],{"class":60},[33,96986,96987],{"class":35,"line":4038},[33,96988,96898],{"class":60},[33,96990,96991],{"class":35,"line":4043},[33,96992,96903],{"class":60},[33,96994,96995],{"class":35,"line":4834},[33,96996,96908],{"class":60},[33,96998,96999],{"class":35,"line":4848},[33,97000,96913],{"class":60},[33,97002,97003],{"class":35,"line":4856},[33,97004,96136],{"class":60},[33,97006,97007],{"class":35,"line":4861},[33,97008,97009],{"class":2487},"#按最后一列排序\n",[33,97011,97012,97014,97016,97019,97021,97023],{"class":35,"line":4867},[33,97013,2687],{"class":47},[33,97015,57],{"class":39},[33,97017,97018],{"class":47},"aa[:,",[33,97020,2949],{"class":39},[33,97022,720],{"class":72},[33,97024,919],{"class":47},[33,97026,97027],{"class":35,"line":4873},[33,97028,97029],{"class":2487},"#获取最后一列排好序的索引\n",[33,97031,97032,97034,97036],{"class":35,"line":4878},[33,97033,76270],{"class":47},[33,97035,57],{"class":39},[33,97037,97038],{"class":47},"np.argsort(b)\n",[33,97040,97041],{"class":35,"line":10194},[33,97042,97043],{"class":47},"aa[index]\n",[33,97045,97046],{"class":35,"line":10218},[33,97047,96136],{"class":60},[33,97049,97050],{"class":35,"line":10223},[33,97051,96862],{"class":60},[33,97053,97054],{"class":35,"line":10229},[33,97055,97056],{"class":60},"       [46, 88, 81, 37, 25, 77],\n",[33,97058,97059],{"class":35,"line":10256},[33,97060,96872],{"class":60},[33,97062,97063],{"class":35,"line":10261},[33,97064,97065],{"class":60},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[33,97067,97068],{"class":35,"line":10267},[33,97069,96136],{"class":60},[2331,97071,97072],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":97074},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96721,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":97081,"title":97082,"body":97083,"description":2359,"extension":2360,"meta":97113,"navigation":99,"path":97114,"seo":97115,"stem":97116,"__hash__":97117},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":97084,"toc":97111},[97085,97088,97091,97094,97097,97100,97103,97106],[10,97086,97082],{"id":97087},"_14广播机制",[19,97089,97090],{},"广播的规则：",[19,97092,97093],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,97095,97096],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,97098,97099],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,97101,97102],{},"3.如果没有维度形状为1，则会引发异常",[19,97104,97105],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,97107,97108],{},[3736,97109],{"alt":28,"src":97110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":28,"searchDepth":51,"depth":51,"links":97112},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":97082,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":97119,"title":97120,"body":97121,"description":2359,"extension":2360,"meta":97219,"navigation":99,"path":97220,"seo":97221,"stem":97222,"__hash__":97223},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":97122,"toc":97217},[97123,97126,97129,97214],[10,97124,97120],{"id":97125},"_15比较掩码",[19,97127,97128],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[23,97130,97132],{"className":25,"code":97131,"language":27,"meta":28,"style":28},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[30,97133,97134,97180,97191,97205,97209],{"__ignoreMap":28},[33,97135,97136,97138,97140,97143,97145,97147,97149,97151,97153,97155,97157,97159,97161,97163,97165,97167,97169,97171,97173,97175,97177],{"class":35,"line":36},[33,97137,2663],{"class":47},[33,97139,57],{"class":39},[33,97141,97142],{"class":47},"np.array([[",[33,97144,720],{"class":72},[33,97146,2799],{"class":47},[33,97148,725],{"class":72},[33,97150,2799],{"class":47},[33,97152,730],{"class":72},[33,97154,50252],{"class":47},[33,97156,2890],{"class":72},[33,97158,2799],{"class":47},[33,97160,2915],{"class":72},[33,97162,2799],{"class":47},[33,97164,2940],{"class":72},[33,97166,50252],{"class":47},[33,97168,3138],{"class":72},[33,97170,2799],{"class":47},[33,97172,3163],{"class":72},[33,97174,2799],{"class":47},[33,97176,3188],{"class":72},[33,97178,97179],{"class":47},"]])\n",[33,97181,97182,97184,97186,97188],{"class":35,"line":51},[33,97183,2663],{"class":47},[33,97185,2226],{"class":39},[33,97187,1284],{"class":72},[33,97189,97190],{"class":2487},"#结果是一个由True,False组成的数组\n",[33,97192,97193,97196,97198,97200,97202],{"class":35,"line":64},[33,97194,97195],{"class":47},"a[a",[33,97197,2226],{"class":39},[33,97199,1284],{"class":72},[33,97201,3348],{"class":47},[33,97203,97204],{"class":2487},"#小于20的元素会存到这个数组中\n",[33,97206,97207],{"class":35,"line":76},[33,97208,95772],{"class":2487},[33,97210,97211],{"class":35,"line":87},[33,97212,97213],{"class":2487},"#array([ 1,  2,  3, 11, 12, 13])\n",[2331,97215,97216],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":97218},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":97120,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":97225,"title":97226,"body":97227,"description":2359,"extension":2360,"meta":97319,"navigation":99,"path":97320,"seo":97321,"stem":97322,"__hash__":97323},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":97228,"toc":97317},[97229,97232,97235,97238,97241,97244,97309,97314],[10,97230,97226],{"id":97231},"_16魔法命令time",[19,97233,97234],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,97236,97237],{},"%:行模式",[19,97239,97240],{},"%%:单元格模式",[19,97242,97243],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[23,97245,97247],{"className":25,"code":97246,"language":27,"meta":28,"style":28},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[30,97248,97249,97254,97261,97266,97275,97288,97292,97300],{"__ignoreMap":28},[33,97250,97251],{"class":35,"line":36},[33,97252,97253],{"class":2487},"#程序执行时间\n",[33,97255,97256,97258],{"class":35,"line":51},[33,97257,32627],{"class":39},[33,97259,97260],{"class":47}," time \n",[33,97262,97263],{"class":35,"line":64},[33,97264,97265],{"class":2487},"#获取时间\n",[33,97267,97268,97271,97273],{"class":35,"line":76},[33,97269,97270],{"class":47},"start",[33,97272,57],{"class":39},[33,97274,34645],{"class":47},[33,97276,97277,97280,97283,97285],{"class":35,"line":87},[33,97278,97279],{"class":47},"time.sleep(",[33,97281,97282],{"class":72},"0.4",[33,97284,2849],{"class":47},[33,97286,97287],{"class":2487},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[33,97289,97290],{"class":35,"line":96},[33,97291,97265],{"class":2487},[33,97293,97294,97296,97298],{"class":35,"line":103},[33,97295,48024],{"class":47},[33,97297,57],{"class":39},[33,97299,34645],{"class":47},[33,97301,97302,97304,97306],{"class":35,"line":108},[33,97303,48024],{"class":47},[33,97305,2949],{"class":39},[33,97307,97308],{"class":47},"start\n",[19,97310,97311],{},[3736,97312],{"alt":28,"src":97313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2331,97315,97316],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":97318},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":97226,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97325,"title":97326,"body":97327,"description":2359,"extension":2360,"meta":97362,"navigation":99,"path":97363,"seo":97364,"stem":97365,"__hash__":97366},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97328,"toc":97360},[97329,97332,97335,97338,97341,97344,97347,97350,97355],[10,97330,97326],{"id":97331},"_17魔法命令timeit",[19,97333,97334],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97336,97337],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97339,97340],{},"单元格模式：",[19,97342,97343],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97345,97346],{},"初始化语句执行次数由轮数来决定",[19,97348,97349],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97351,97352],{},[3736,97353],{"alt":28,"src":97354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97356,97357],{},[3736,97358],{"alt":28,"src":97359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":28,"searchDepth":51,"depth":51,"links":97361},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97326,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97368,"title":97369,"body":97370,"description":2359,"extension":2360,"meta":97388,"navigation":99,"path":97389,"seo":97390,"stem":97391,"__hash__":97392},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97371,"toc":97386},[97372,97375,97378,97381],[10,97373,97369],{"id":97374},"_18魔法命令writefile和run",[19,97376,97377],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97379,97380],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97382,97383],{},[3736,97384],{"alt":28,"src":97385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":28,"searchDepth":51,"depth":51,"links":97387},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97369,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97394,"title":97395,"body":97396,"description":2359,"extension":2360,"meta":97449,"navigation":99,"path":97450,"seo":97451,"stem":97452,"__hash__":97453},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97397,"toc":97447},[97398,97401,97404,97406,97409,97412,97417,97420,97423,97426,97429,97432,97435,97438,97441,97444],[10,97399,97395],{"id":97400},"_19魔法命令memit",[19,97402,97403],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97405,26838],{},[19,97407,97408],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97410,97411],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97413,97414],{},[3736,97415],{"alt":28,"src":97416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97418,97419],{},"补充：",[19,97421,97422],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97424,97425],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97427,97428],{},"解决方法：",[19,97430,97431],{},"1.cmd",[19,97433,97434],{},"2.依次输入以下代码：",[19,97436,97437],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97439,97440],{},"pip install --upgrade ipython",[19,97442,97443],{},"#升级 memory_profiler 和 setuptools",[19,97445,97446],{},"pip install --upgrade memory_profiler setuptools",{"title":28,"searchDepth":51,"depth":51,"links":97448},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97395,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97455,"title":97456,"body":97457,"description":2359,"extension":2360,"meta":99102,"navigation":99,"path":99103,"seo":99104,"stem":99105,"__hash__":99106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97458,"toc":99072},[97459,97462,97466,97470,97531,97534,97539,97543,97548,97553,97558,97563,97566,97571,97575,97579,97612,97615,97618,97621,97673,97676,97712,97715,97757,97761,97782,97784,97821,97823,97828,97830,97835,97839,97842,97870,97874,97878,97930,97934,98026,98030,98034,98037,98042,98046,98071,98076,98080,98083,98086,98089,98092,98095,98098,98101,98113,98117,98121,98124,98156,98159,98182,98185,98211,98214,98240,98243,98277,98280,98342,98346,98349,98353,98356,98382,98385,98388,98393,98396,98465,98467,98472,98533,98536,98547,98553,98558,98562,98565,98578,98582,98597,98599,98622,98624,98650,98653,98656,98659,98707,98709,98714,98718,98722,98749,98753,98780,98783,98788,98793,98883,98887,98945,98950,98953,98956,98998,99002,99058,99063,99066,99069],[10,97460,97456],{"id":97461},"_2创建数组",[14,97463,97465],{"id":97464},"_21-array函数创建数组","2.1 array()函数创建数组",[631,97467,97469],{"id":97468},"_221-函数语句","2.2.1 函数语句",[23,97471,97473],{"className":25,"code":97472,"language":27,"meta":28,"style":28},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[30,97474,97475],{"__ignoreMap":28},[33,97476,97477,97480,97483,97485,97487,97489,97491,97493,97496,97498,97501,97503,97506,97508,97510,97512,97515,97517,97520,97522,97525,97527,97529],{"class":35,"line":36},[33,97478,97479],{"class":47},"numpy.array(",[33,97481,97482],{"class":72},"object",[33,97484,245],{"class":47},[33,97486,95708],{"class":289},[33,97488,15804],{"class":39},[33,97490,602],{"class":72},[33,97492,245],{"class":47},[33,97494,97495],{"class":289},"copy",[33,97497,15804],{"class":39},[33,97499,97500],{"class":72}," True",[33,97502,245],{"class":47},[33,97504,97505],{"class":289},"order",[33,97507,15804],{"class":39},[33,97509,602],{"class":72},[33,97511,245],{"class":47},[33,97513,97514],{"class":289},"subok",[33,97516,15804],{"class":39},[33,97518,97519],{"class":72}," False",[33,97521,245],{"class":47},[33,97523,97524],{"class":289},"ndmin",[33,97526,15804],{"class":39},[33,97528,1437],{"class":72},[33,97530,226],{"class":47},[19,97532,97533],{},"参数：",[19,97535,97536],{},[3736,97537],{"alt":28,"src":97538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[631,97540,97542],{"id":97541},"_222-实例","2.2.2 实例",[19,97544,97545],{},[3736,97546],{"alt":28,"src":97547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97549,97550],{},[3736,97551],{"alt":28,"src":97552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97554,97555],{},[3736,97556],{"alt":28,"src":97557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97559,97560],{},[3736,97561],{"alt":28,"src":97562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97564,97565],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97567,97568],{},[3736,97569],{"alt":28,"src":97570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97572,97574],{"id":97573},"_22-随机数创建数组","2.2 随机数创建数组",[631,97576,97578],{"id":97577},"_221-random语句","2.2.1 random语句",[23,97580,97582],{"className":25,"code":97581,"language":27,"meta":28,"style":28},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[30,97583,97584,97589,97594,97602,97607],{"__ignoreMap":28},[33,97585,97586],{"class":35,"line":36},[33,97587,97588],{"class":2487},"#random.random()\n",[33,97590,97591],{"class":35,"line":51},[33,97592,97593],{"class":2487},"#确定随机种子,就是每次运行结果是相同的\n",[33,97595,97596,97598,97600],{"class":35,"line":64},[33,97597,96815],{"class":47},[33,97599,2617],{"class":72},[33,97601,226],{"class":47},[33,97603,97604],{"class":35,"line":76},[33,97605,97606],{"class":47},"np.random.random()\n",[33,97608,97609],{"class":35,"line":87},[33,97610,97611],{"class":2487},"#生成一个随机的数目\n",[19,97613,97614],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97616,97617],{},"可以指定数组形状 size",[19,97619,97620],{},"①生成一维数组",[23,97622,97624],{"className":25,"code":97623,"language":27,"meta":28,"style":28},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[30,97625,97626,97631,97644,97649,97665],{"__ignoreMap":28},[33,97627,97628],{"class":35,"line":36},[33,97629,97630],{"class":2487},"#random.random(size())\n",[33,97632,97633,97636,97638,97640,97642],{"class":35,"line":51},[33,97634,97635],{"class":47},"np.random.random(",[33,97637,33725],{"class":289},[33,97639,57],{"class":39},[33,97641,758],{"class":72},[33,97643,226],{"class":47},[33,97645,97646],{"class":35,"line":64},[33,97647,97648],{"class":2487},"#生成一位的五个元素\n",[33,97650,97651,97653,97655,97657,97659,97661,97663],{"class":35,"line":76},[33,97652,2663],{"class":47},[33,97654,57],{"class":39},[33,97656,97635],{"class":47},[33,97658,33725],{"class":289},[33,97660,57],{"class":39},[33,97662,753],{"class":72},[33,97664,226],{"class":47},[33,97666,97667,97670],{"class":35,"line":87},[33,97668,97669],{"class":47},"a.shape ",[33,97671,97672],{"class":2487},"#输出数组形状\n",[19,97674,97675],{},"②生成二维数组",[23,97677,97679],{"className":25,"code":97678,"language":27,"meta":28,"style":28},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[30,97680,97681,97685,97707],{"__ignoreMap":28},[33,97682,97683],{"class":35,"line":36},[33,97684,95509],{"class":2487},[33,97686,97687,97689,97691,97693,97695,97697,97699,97701,97703,97705],{"class":35,"line":51},[33,97688,95514],{"class":47},[33,97690,57],{"class":39},[33,97692,97635],{"class":47},[33,97694,33725],{"class":289},[33,97696,57],{"class":39},[33,97698,133],{"class":47},[33,97700,753],{"class":72},[33,97702,2799],{"class":47},[33,97704,758],{"class":72},[33,97706,551],{"class":47},[33,97708,97709],{"class":35,"line":64},[33,97710,97711],{"class":2487},"#生成四行五列的数组\n",[19,97713,97714],{},"③生成三维数组",[23,97716,97718],{"className":25,"code":97717,"language":27,"meta":28,"style":28},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[30,97719,97720,97725,97752],{"__ignoreMap":28},[33,97721,97722],{"class":35,"line":36},[33,97723,97724],{"class":2487},"#三维数组\n",[33,97726,97727,97730,97732,97734,97736,97738,97740,97742,97744,97746,97748,97750],{"class":35,"line":51},[33,97728,97729],{"class":47},"aaa",[33,97731,57],{"class":39},[33,97733,97635],{"class":47},[33,97735,33725],{"class":289},[33,97737,57],{"class":39},[33,97739,133],{"class":47},[33,97741,725],{"class":72},[33,97743,2799],{"class":47},[33,97745,730],{"class":72},[33,97747,2799],{"class":47},[33,97749,753],{"class":72},[33,97751,551],{"class":47},[33,97753,97754],{"class":35,"line":64},[33,97755,97756],{"class":47},"aaa.shape\n",[631,97758,97760],{"id":97759},"_222-randint语句","2.2.2 randint语句",[23,97762,97764],{"className":25,"code":97763,"language":27,"meta":28,"style":28},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[30,97765,97766,97771],{"__ignoreMap":28},[33,97767,97768],{"class":35,"line":36},[33,97769,97770],{"class":2487},"#生成随机的整数 random.randint(low,high,size)\n",[33,97772,97773,97775,97777,97779],{"class":35,"line":51},[33,97774,95322],{"class":47},[33,97776,758],{"class":72},[33,97778,15954],{"class":47},[33,97780,97781],{"class":2487},"#0~5中的随机一个数\n",[19,97783,97620],{},[23,97785,97787],{"className":25,"code":97786,"language":27,"meta":28,"style":28},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[30,97788,97789,97794,97816],{"__ignoreMap":28},[33,97790,97791],{"class":35,"line":36},[33,97792,97793],{"class":2487},"#一维\n",[33,97795,97796,97798,97800,97802,97804,97806,97808,97810,97812,97814],{"class":35,"line":51},[33,97797,95322],{"class":47},[33,97799,720],{"class":72},[33,97801,2799],{"class":47},[33,97803,2890],{"class":72},[33,97805,2799],{"class":47},[33,97807,33725],{"class":289},[33,97809,57],{"class":39},[33,97811,133],{"class":47},[33,97813,1279],{"class":72},[33,97815,551],{"class":47},[33,97817,97818],{"class":35,"line":64},[33,97819,97820],{"class":2487},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97822,97675],{},[19,97824,97825],{},[3736,97826],{"alt":28,"src":97827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97829,97714],{},[19,97831,97832],{},[3736,97833],{"alt":28,"src":97834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[631,97836,97838],{"id":97837},"_222-rand语句","2.2.2 rand语句",[19,97840,97841],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[23,97843,97845],{"className":25,"code":97844,"language":27,"meta":28,"style":28},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[30,97846,97847,97860,97865],{"__ignoreMap":28},[33,97848,97849,97852,97854,97856,97858],{"class":35,"line":36},[33,97850,97851],{"class":47},"np.random.rand(",[33,97853,2734],{"class":72},[33,97855,2799],{"class":47},[33,97857,1279],{"class":72},[33,97859,226],{"class":47},[33,97861,97862],{"class":35,"line":51},[33,97863,97864],{"class":2487},"#第一个参数100：行数，表示有100个样本\n",[33,97866,97867],{"class":35,"line":64},[33,97868,97869],{"class":2487},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97871,97873],{"id":97872},"_23-arange创建数组","2.3 arange()创建数组",[631,97875,97877],{"id":97876},"_231-函数语句","2.3.1 函数语句",[23,97879,97881],{"className":25,"code":97880,"language":27,"meta":28,"style":28},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[30,97882,97883,97896,97901,97906,97911,97916,97921,97926],{"__ignoreMap":28},[33,97884,97885,97888,97890,97892,97894],{"class":35,"line":36},[33,97886,97887],{"class":47},"numpy.arange([start,] stop[, step], ",[33,97889,95708],{"class":289},[33,97891,57],{"class":39},[33,97893,586],{"class":72},[33,97895,226],{"class":47},[33,97897,97898],{"class":35,"line":51},[33,97899,97900],{"class":2487},"#参数\n",[33,97902,97903],{"class":35,"line":64},[33,97904,97905],{"class":60},"\"\"\"\n",[33,97907,97908],{"class":35,"line":76},[33,97909,97910],{"class":60},"start:起始值，可选，默认从 0 开始。\n",[33,97912,97913],{"class":35,"line":87},[33,97914,97915],{"class":60},"stop:结束值（不包含该值）。\n",[33,97917,97918],{"class":35,"line":96},[33,97919,97920],{"class":60},"step:步长，可选，默认是 1。可以为浮点数。\n",[33,97922,97923],{"class":35,"line":103},[33,97924,97925],{"class":60},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[33,97927,97928],{"class":35,"line":108},[33,97929,97905],{"class":60},[631,97931,97933],{"id":97932},"_232-实例","2.3.2 实例",[23,97935,97937],{"className":25,"code":97936,"language":27,"meta":28,"style":28},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[30,97938,97939,97943,97967,97972,97977,97981,98004,98008,98012,98017,98022],{"__ignoreMap":28},[33,97940,97941],{"class":35,"line":36},[33,97942,95313],{"class":2487},[33,97944,97945,97947,97949,97951,97953,97955,97957,97959,97961,97963,97965],{"class":35,"line":51},[33,97946,95210],{"class":47},[33,97948,720],{"class":72},[33,97950,2799],{"class":47},[33,97952,3138],{"class":72},[33,97954,2799],{"class":47},[33,97956,720],{"class":72},[33,97958,2799],{"class":47},[33,97960,95708],{"class":289},[33,97962,57],{"class":39},[33,97964,2436],{"class":72},[33,97966,226],{"class":47},[33,97968,97969],{"class":35,"line":64},[33,97970,97971],{"class":2487},"#输出结果：\n",[33,97973,97974],{"class":35,"line":76},[33,97975,97976],{"class":2487},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[33,97978,97979],{"class":35,"line":87},[33,97980,96155],{"class":2487},[33,97982,97983,97986,97988,97990,97992,97995,97997,97999,98001],{"class":35,"line":96},[33,97984,97985],{"class":47},"np.array([np.arange(",[33,97987,720],{"class":72},[33,97989,2799],{"class":47},[33,97991,753],{"class":72},[33,97993,97994],{"class":47},"),np.arange(",[33,97996,753],{"class":72},[33,97998,2799],{"class":47},[33,98000,2790],{"class":72},[33,98002,98003],{"class":47},")])\n",[33,98005,98006],{"class":35,"line":103},[33,98007,95772],{"class":2487},[33,98009,98010],{"class":35,"line":108},[33,98011,97905],{"class":60},[33,98013,98014],{"class":35,"line":119},[33,98015,98016],{"class":60},"array([[1, 2, 3],\n",[33,98018,98019],{"class":35,"line":128},[33,98020,98021],{"class":60},"       [4, 5, 6]])\n",[33,98023,98024],{"class":35,"line":1753},[33,98025,97905],{"class":60},[14,98027,98029],{"id":98028},"_24-生态分布","2.4 生态分布",[631,98031,98033],{"id":98032},"_241-标准正态分布","2.4.1 标准正态分布",[19,98035,98036],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,98038,98039],{},[3736,98040],{"alt":28,"src":98041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[631,98043,98045],{"id":98044},"_242-常规正态分布","2.4.2 常规正态分布",[23,98047,98049],{"className":25,"code":98048,"language":27,"meta":28,"style":28},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[30,98050,98051,98056,98061,98066],{"__ignoreMap":28},[33,98052,98053],{"class":35,"line":36},[33,98054,98055],{"class":47},"random.normal(loc,scale,size)也可以生成正态分布\n",[33,98057,98058],{"class":35,"line":51},[33,98059,98060],{"class":2487},"#loc:期望\n",[33,98062,98063],{"class":35,"line":64},[33,98064,98065],{"class":2487},"#scale:方差\n",[33,98067,98068],{"class":35,"line":76},[33,98069,98070],{"class":2487},"#size:用于确定是几维的数列\n",[19,98072,98073],{},[3736,98074],{"alt":28,"src":98075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,98077,98079],{"id":98078},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,98081,98082],{},"ndim:秩，维度个数",[19,98084,98085],{},"size:数组元素的个数",[19,98087,98088],{},"shape:数组的形状",[19,98090,98091],{},"dtype:数组元素的类型",[19,98093,98094],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,98096,98097],{},"他们都是属性，通过数组.属性的形式来确定",[19,98099,98100],{},"如果需要输出多个可以通过以下方式：",[23,98102,98104],{"className":25,"code":98103,"language":27,"meta":28,"style":28},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[30,98105,98106],{"__ignoreMap":28},[33,98107,98108,98110],{"class":35,"line":36},[33,98109,122],{"class":72},[33,98111,98112],{"class":47},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,98114,98116],{"id":98115},"_26-其他方式创建数组","2.6 其他方式创建数组",[631,98118,98120],{"id":98119},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,98122,98123],{},"①创建一维数组",[23,98125,98127],{"className":25,"code":98126,"language":27,"meta":28,"style":28},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[30,98128,98129,98138,98142,98147,98152],{"__ignoreMap":28},[33,98130,98131,98134,98136],{"class":35,"line":36},[33,98132,98133],{"class":47},"np.zeros(",[33,98135,1279],{"class":72},[33,98137,226],{"class":47},[33,98139,98140],{"class":35,"line":51},[33,98141,97905],{"class":60},[33,98143,98144],{"class":35,"line":64},[33,98145,98146],{"class":60},"输出结果：\n",[33,98148,98149],{"class":35,"line":76},[33,98150,98151],{"class":60},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[33,98153,98154],{"class":35,"line":87},[33,98155,97905],{"class":60},[19,98157,98158],{},"上方代码等价于：",[23,98160,98162],{"className":25,"code":98161,"language":27,"meta":28,"style":28},"np.zeros(shape=(10))#创建10个元素的0数组\n",[30,98163,98164],{"__ignoreMap":28},[33,98165,98166,98168,98171,98173,98175,98177,98179],{"class":35,"line":36},[33,98167,98133],{"class":47},[33,98169,98170],{"class":289},"shape",[33,98172,57],{"class":39},[33,98174,133],{"class":47},[33,98176,1279],{"class":72},[33,98178,84980],{"class":47},[33,98180,98181],{"class":2487},"#创建10个元素的0数组\n",[19,98183,98184],{},"也可以指定类型",[23,98186,98188],{"className":25,"code":98187,"language":27,"meta":28,"style":28},"#指定类型\nnp.zeros(5,dtype=int)\n",[30,98189,98190,98195],{"__ignoreMap":28},[33,98191,98192],{"class":35,"line":36},[33,98193,98194],{"class":2487},"#指定类型\n",[33,98196,98197,98199,98201,98203,98205,98207,98209],{"class":35,"line":51},[33,98198,98133],{"class":47},[33,98200,758],{"class":72},[33,98202,2799],{"class":47},[33,98204,95708],{"class":289},[33,98206,57],{"class":39},[33,98208,2436],{"class":72},[33,98210,226],{"class":47},[19,98212,98213],{},"②创建二维数组",[23,98215,98217],{"className":25,"code":98216,"language":27,"meta":28,"style":28},"np.zeros((3,4),dtype=int)\n",[30,98218,98219],{"__ignoreMap":28},[33,98220,98221,98224,98226,98228,98230,98232,98234,98236,98238],{"class":35,"line":36},[33,98222,98223],{"class":47},"np.zeros((",[33,98225,730],{"class":72},[33,98227,2799],{"class":47},[33,98229,753],{"class":72},[33,98231,44479],{"class":47},[33,98233,95708],{"class":289},[33,98235,57],{"class":39},[33,98237,2436],{"class":72},[33,98239,226],{"class":47},[19,98241,98242],{},"③创建三维数组",[23,98244,98246],{"className":25,"code":98245,"language":27,"meta":28,"style":28},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[30,98247,98248,98253],{"__ignoreMap":28},[33,98249,98250],{"class":35,"line":36},[33,98251,98252],{"class":2487},"#创建三维数组\n",[33,98254,98255,98257,98259,98261,98263,98265,98267,98269,98271,98273,98275],{"class":35,"line":51},[33,98256,98223],{"class":47},[33,98258,730],{"class":72},[33,98260,2799],{"class":47},[33,98262,753],{"class":72},[33,98264,2799],{"class":47},[33,98266,758],{"class":72},[33,98268,44479],{"class":47},[33,98270,95708],{"class":289},[33,98272,57],{"class":39},[33,98274,2436],{"class":72},[33,98276,226],{"class":47},[19,98278,98279],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[23,98281,98283],{"className":25,"code":98282,"language":27,"meta":28,"style":28},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[30,98284,98285,98290,98305,98310,98315,98337],{"__ignoreMap":28},[33,98286,98287],{"class":35,"line":36},[33,98288,98289],{"class":2487},"#使用zeros_like将创建的一维数组变成全0的数组\n",[33,98291,98292,98294,98296,98298,98300,98302],{"class":35,"line":51},[33,98293,2663],{"class":47},[33,98295,57],{"class":39},[33,98297,95210],{"class":47},[33,98299,753],{"class":72},[33,98301,2849],{"class":47},[33,98303,98304],{"class":2487},"#这个得到的结果：一维数组0，1，2，3\n",[33,98306,98307],{"class":35,"line":64},[33,98308,98309],{"class":47},"np.zeros_like(a)\n",[33,98311,98312],{"class":35,"line":76},[33,98313,98314],{"class":2487},"#使用zeros_like将创建的二维数组变成全0的数组\n",[33,98316,98317,98319,98321,98323,98325,98327,98329,98331,98333,98335],{"class":35,"line":87},[33,98318,95514],{"class":47},[33,98320,57],{"class":39},[33,98322,97635],{"class":47},[33,98324,33725],{"class":289},[33,98326,57],{"class":39},[33,98328,133],{"class":47},[33,98330,753],{"class":72},[33,98332,2799],{"class":47},[33,98334,758],{"class":72},[33,98336,551],{"class":47},[33,98338,98339],{"class":35,"line":96},[33,98340,98341],{"class":47},"np.zeros_like(aa)\n",[631,98343,98345],{"id":98344},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98347,98348],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[631,98350,98352],{"id":98351},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98354,98355],{},"①empty()用法",[23,98357,98359],{"className":25,"code":98358,"language":27,"meta":28,"style":28},"numpy.empty(shape,dtype=float,order='c')\n",[30,98360,98361],{"__ignoreMap":28},[33,98362,98363,98366,98368,98370,98372,98374,98376,98378,98380],{"class":35,"line":36},[33,98364,98365],{"class":47},"numpy.empty(shape,",[33,98367,95708],{"class":289},[33,98369,57],{"class":39},[33,98371,2471],{"class":72},[33,98373,2799],{"class":47},[33,98375,97505],{"class":289},[33,98377,57],{"class":39},[33,98379,78240],{"class":60},[33,98381,226],{"class":47},[19,98383,98384],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98386,98387],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98389,98390],{},[3736,98391],{"alt":28,"src":98392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98394,98395],{},"②empty()用法",[23,98397,98399],{"className":25,"code":98398,"language":27,"meta":28,"style":28},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[30,98400,98401,98422,98434,98455,98460],{"__ignoreMap":28},[33,98402,98403,98405,98407,98410,98412,98414,98416,98418,98420],{"class":35,"line":36},[33,98404,3257],{"class":47},[33,98406,57],{"class":39},[33,98408,98409],{"class":47},"np.empty(",[33,98411,1279],{"class":72},[33,98413,2799],{"class":47},[33,98415,95708],{"class":289},[33,98417,57],{"class":39},[33,98419,2436],{"class":72},[33,98421,226],{"class":47},[33,98423,98424,98426,98428,98430,98432],{"class":35,"line":51},[33,98425,3232],{"class":47},[33,98427,57],{"class":39},[33,98429,95210],{"class":47},[33,98431,758],{"class":72},[33,98433,226],{"class":47},[33,98435,98436,98439,98441,98444,98446,98448,98451,98453],{"class":35,"line":64},[33,98437,98438],{"class":47},"np.add(",[33,98440,725],{"class":72},[33,98442,98443],{"class":47},",x,",[33,98445,95262],{"class":289},[33,98447,57],{"class":39},[33,98449,98450],{"class":47},"y[:",[33,98452,758],{"class":72},[33,98454,6907],{"class":47},[33,98456,98457],{"class":35,"line":76},[33,98458,98459],{"class":2487},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[33,98461,98462],{"class":35,"line":87},[33,98463,98464],{"class":47},"y\n",[19,98466,13755],{},[19,98468,98469],{},[3736,98470],{"alt":28,"src":98471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[23,98473,98475],{"className":25,"code":98474,"language":27,"meta":28,"style":28},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[30,98476,98477,98493,98513,98528],{"__ignoreMap":28},[33,98478,98479,98481,98483,98485,98487,98489,98491],{"class":35,"line":36},[33,98480,3232],{"class":47},[33,98482,57],{"class":39},[33,98484,95210],{"class":47},[33,98486,720],{"class":72},[33,98488,2799],{"class":47},[33,98490,2765],{"class":72},[33,98492,226],{"class":47},[33,98494,98495,98497,98499,98501,98503,98505,98507,98509,98511],{"class":35,"line":51},[33,98496,3257],{"class":47},[33,98498,57],{"class":39},[33,98500,98409],{"class":47},[33,98502,758],{"class":72},[33,98504,2799],{"class":47},[33,98506,95708],{"class":289},[33,98508,57],{"class":39},[33,98510,2436],{"class":72},[33,98512,226],{"class":47},[33,98514,98515,98518,98520,98522,98524,98526],{"class":35,"line":64},[33,98516,98517],{"class":47},"np.add(x,",[33,98519,725],{"class":72},[33,98521,2799],{"class":47},[33,98523,95262],{"class":289},[33,98525,57],{"class":39},[33,98527,95657],{"class":47},[33,98529,98530],{"class":35,"line":76},[33,98531,98532],{"class":2487},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98534,98535],{},"③empty_like()",[19,98537,98538],{},[2575,98539,98540,98541,98546],{},"创建一个",[2575,98542,98543],{},[2575,98544,98545],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98548,98549,98552],{},[30,98550,98551],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98554,98555],{},[3736,98556],{"alt":28,"src":98557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[631,98559,98561],{"id":98560},"_264-用法","2.6.4 ？？用法",[19,98563,98564],{},"当想查看一个函数的参数时，可以通过？？来实现",[23,98566,98568],{"className":25,"code":98567,"language":27,"meta":28,"style":28},"np.full??\n",[30,98569,98570],{"__ignoreMap":28},[33,98571,98572,98575],{"class":35,"line":36},[33,98573,98574],{"class":47},"np.full",[33,98576,98577],{"class":79614},"??\n",[631,98579,98581],{"id":98580},"_265-full创建数组","2.6.5 full()创建数组",[23,98583,98585],{"className":25,"code":98584,"language":27,"meta":28,"style":28},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[30,98586,98587,98592],{"__ignoreMap":28},[33,98588,98589],{"class":35,"line":36},[33,98590,98591],{"class":47},"full(shape,fill_value)\n",[33,98593,98594],{"class":35,"line":51},[33,98595,98596],{"class":47},"创建全为某个指定值的数组\n",[19,98598,96738],{},[23,98600,98602],{"className":25,"code":98601,"language":27,"meta":28,"style":28},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[30,98603,98604,98609],{"__ignoreMap":28},[33,98605,98606],{"class":35,"line":36},[33,98607,98608],{"class":2487},"#创建一个一维数组,以20进行填充\n",[33,98610,98611,98614,98616,98618,98620],{"class":35,"line":51},[33,98612,98613],{"class":47},"np.full(",[33,98615,1279],{"class":72},[33,98617,2799],{"class":47},[33,98619,1284],{"class":72},[33,98621,226],{"class":47},[19,98623,95499],{},[23,98625,98627],{"className":25,"code":98626,"language":27,"meta":28,"style":28},"#创建二维数组\nnp.full((3,5),11)\n",[30,98628,98629,98633],{"__ignoreMap":28},[33,98630,98631],{"class":35,"line":36},[33,98632,96155],{"class":2487},[33,98634,98635,98638,98640,98642,98644,98646,98648],{"class":35,"line":51},[33,98636,98637],{"class":47},"np.full((",[33,98639,730],{"class":72},[33,98641,2799],{"class":47},[33,98643,758],{"class":72},[33,98645,44479],{"class":47},[33,98647,2890],{"class":72},[33,98649,226],{"class":47},[19,98651,98652],{},"③full_like用法",[19,98654,98655],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98657,98658],{},"这里是指定填充而已",[23,98660,98662],{"className":25,"code":98661,"language":27,"meta":28,"style":28},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[30,98663,98664,98669,98693,98698],{"__ignoreMap":28},[33,98665,98666],{"class":35,"line":36},[33,98667,98668],{"class":2487},"#创建一个指定形状数组\n",[33,98670,98671,98673,98675,98677,98679,98681,98683,98685,98687,98689,98691],{"class":35,"line":51},[33,98672,2663],{"class":47},[33,98674,57],{"class":39},[33,98676,95210],{"class":47},[33,98678,720],{"class":72},[33,98680,2799],{"class":47},[33,98682,2747],{"class":72},[33,98684,95215],{"class":47},[33,98686,753],{"class":72},[33,98688,2799],{"class":47},[33,98690,2840],{"class":72},[33,98692,226],{"class":47},[33,98694,98695],{"class":35,"line":64},[33,98696,98697],{"class":2487},"#进行指定填充\n",[33,98699,98700,98703,98705],{"class":35,"line":76},[33,98701,98702],{"class":47},"np.full_like(a,",[33,98704,1279],{"class":72},[33,98706,226],{"class":47},[19,98708,13755],{},[19,98710,98711],{},[3736,98712],{"alt":28,"src":98713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[631,98715,98717],{"id":98716},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[24236,98719,98721],{"id":98720},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[23,98723,98725],{"className":25,"code":98724,"language":27,"meta":28,"style":28},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[30,98726,98727,98744],{"__ignoreMap":28},[33,98728,98729,98732,98734,98736,98738,98740,98742],{"class":35,"line":36},[33,98730,98731],{"class":47},"np.eye(",[33,98733,753],{"class":72},[33,98735,2799],{"class":47},[33,98737,95708],{"class":289},[33,98739,57],{"class":39},[33,98741,2436],{"class":72},[33,98743,226],{"class":47},[33,98745,98746],{"class":35,"line":51},[33,98747,98748],{"class":2487},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24236,98750,98752],{"id":98751},"_2662-法2identity","2.6.6.2 法2：identity()",[23,98754,98756],{"className":25,"code":98755,"language":27,"meta":28,"style":28},"#identity()\nnp.identity(5,dtype=int)\n",[30,98757,98758,98763],{"__ignoreMap":28},[33,98759,98760],{"class":35,"line":36},[33,98761,98762],{"class":2487},"#identity()\n",[33,98764,98765,98768,98770,98772,98774,98776,98778],{"class":35,"line":51},[33,98766,98767],{"class":47},"np.identity(",[33,98769,758],{"class":72},[33,98771,2799],{"class":47},[33,98773,95708],{"class":289},[33,98775,57],{"class":39},[33,98777,2436],{"class":72},[33,98779,226],{"class":47},[19,98781,98782],{},"两个函数是有区别的",[19,98784,98785],{},[3736,98786],{"alt":28,"src":98787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98789,98790],{},[3736,98791],{"alt":28,"src":98792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[23,98794,98796],{"className":25,"code":98795,"language":27,"meta":28,"style":28},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[30,98797,98798,98803,98815,98820,98825,98830,98835,98839,98844,98864,98868,98873,98878],{"__ignoreMap":28},[33,98799,98800],{"class":35,"line":36},[33,98801,98802],{"class":2487},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[33,98804,98805,98807,98809,98811,98813],{"class":35,"line":51},[33,98806,98731],{"class":47},[33,98808,730],{"class":72},[33,98810,245],{"class":47},[33,98812,753],{"class":72},[33,98814,226],{"class":47},[33,98816,98817],{"class":35,"line":64},[33,98818,98819],{"class":2487},"# 输出:\n",[33,98821,98822],{"class":35,"line":76},[33,98823,98824],{"class":2487},"# [[1. 0. 0. 0.]\n",[33,98826,98827],{"class":35,"line":87},[33,98828,98829],{"class":2487},"#  [0. 1. 0. 0.]\n",[33,98831,98832],{"class":35,"line":96},[33,98833,98834],{"class":2487},"#  [0. 0. 1. 0.]]\n",[33,98836,98837],{"class":35,"line":103},[33,98838,100],{"emptyLinePlaceholder":99},[33,98840,98841],{"class":35,"line":108},[33,98842,98843],{"class":2487},"# 对角线向上偏移1\n",[33,98845,98846,98848,98850,98852,98854,98856,98858,98860,98862],{"class":35,"line":119},[33,98847,98731],{"class":47},[33,98849,730],{"class":72},[33,98851,245],{"class":47},[33,98853,753],{"class":72},[33,98855,245],{"class":47},[33,98857,2910],{"class":289},[33,98859,57],{"class":39},[33,98861,720],{"class":72},[33,98863,226],{"class":47},[33,98865,98866],{"class":35,"line":128},[33,98867,98819],{"class":2487},[33,98869,98870],{"class":35,"line":1753},[33,98871,98872],{"class":2487},"# [[0. 1. 0. 0.]\n",[33,98874,98875],{"class":35,"line":1763},[33,98876,98877],{"class":2487},"#  [0. 0. 1. 0.]\n",[33,98879,98880],{"class":35,"line":1775},[33,98881,98882],{"class":2487},"#  [0. 0. 0. 1.]]\n",[631,98884,98886],{"id":98885},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[23,98888,98890],{"className":25,"code":98889,"language":27,"meta":28,"style":28},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[30,98891,98892,98897,98901,98906,98911,98916,98921,98926,98931,98936,98941],{"__ignoreMap":28},[33,98893,98894],{"class":35,"line":36},[33,98895,98896],{"class":2487},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[33,98898,98899],{"class":35,"line":51},[33,98900,97905],{"class":60},[33,98902,98903],{"class":35,"line":64},[33,98904,98905],{"class":60},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[33,98907,98908],{"class":35,"line":76},[33,98909,98910],{"class":60},"参数介绍：\n",[33,98912,98913],{"class":35,"line":87},[33,98914,98915],{"class":60},"start：序列的起始值\n",[33,98917,98918],{"class":35,"line":96},[33,98919,98920],{"class":60},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[33,98922,98923],{"class":35,"line":103},[33,98924,98925],{"class":60},"num：要生长的等步长的样本数量，默认为50\n",[33,98927,98928],{"class":35,"line":108},[33,98929,98930],{"class":60},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[33,98932,98933],{"class":35,"line":119},[33,98934,98935],{"class":60},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[33,98937,98938],{"class":35,"line":128},[33,98939,98940],{"class":60},"dtype：ndarry的数据类型\n",[33,98942,98943],{"class":35,"line":1753},[33,98944,97905],{"class":60},[19,98946,98947],{},[3736,98948],{"alt":28,"src":98949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98951,98952],{},"这里num=是可以省略的",[19,98954,98955],{},"也就是下方两行代码结果是一模一样的",[23,98957,98959],{"className":25,"code":98958,"language":27,"meta":28,"style":28},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[30,98960,98961,98978],{"__ignoreMap":28},[33,98962,98963,98966,98968,98970,98972,98974,98976],{"class":35,"line":36},[33,98964,98965],{"class":47},"np.linspace(",[33,98967,720],{"class":72},[33,98969,2799],{"class":47},[33,98971,758],{"class":72},[33,98973,2799],{"class":47},[33,98975,758],{"class":72},[33,98977,226],{"class":47},[33,98979,98980,98982,98984,98986,98988,98990,98992,98994,98996],{"class":35,"line":51},[33,98981,98965],{"class":47},[33,98983,720],{"class":72},[33,98985,2799],{"class":47},[33,98987,758],{"class":72},[33,98989,2799],{"class":47},[33,98991,3931],{"class":289},[33,98993,57],{"class":39},[33,98995,758],{"class":72},[33,98997,226],{"class":47},[631,98999,99001],{"id":99000},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[23,99003,99005],{"className":25,"code":99004,"language":27,"meta":28,"style":28},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[30,99006,99007,99012,99016,99021,99026,99031,99036,99040,99045,99050,99054],{"__ignoreMap":28},[33,99008,99009],{"class":35,"line":36},[33,99010,99011],{"class":2487},"#logspace函数用于创建一个等比数列，格式如下：\n",[33,99013,99014],{"class":35,"line":51},[33,99015,97905],{"class":60},[33,99017,99018],{"class":35,"line":64},[33,99019,99020],{"class":60},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[33,99022,99023],{"class":35,"line":76},[33,99024,99025],{"class":60},"参数为：\n",[33,99027,99028],{"class":35,"line":87},[33,99029,99030],{"class":60},"start:序列的起始位置为：base**start\n",[33,99032,99033],{"class":35,"line":96},[33,99034,99035],{"class":60},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[33,99037,99038],{"class":35,"line":103},[33,99039,98925],{"class":60},[33,99041,99042],{"class":35,"line":108},[33,99043,99044],{"class":60},"endpoint：是否包含 stop 这个值，默认是 True\n",[33,99046,99047],{"class":35,"line":119},[33,99048,99049],{"class":60},"base：对数的底数，默认是 10（常见对数）\n",[33,99051,99052],{"class":35,"line":128},[33,99053,98940],{"class":60},[33,99055,99056],{"class":35,"line":1753},[33,99057,97905],{"class":60},[19,99059,99060],{},[3736,99061],{"alt":28,"src":99062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,99064,99065],{},"logspace()函数中的num参数也是可以不写num=的",[19,99067,99068],{},"endpoint是不可以省略的",[2331,99070,99071],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":28,"searchDepth":51,"depth":51,"links":99073},[99074,99078,99083,99087,99091,99092],{"id":97464,"depth":51,"text":97465,"children":99075},[99076,99077],{"id":97468,"depth":64,"text":97469},{"id":97541,"depth":64,"text":97542},{"id":97573,"depth":51,"text":97574,"children":99079},[99080,99081,99082],{"id":97577,"depth":64,"text":97578},{"id":97759,"depth":64,"text":97760},{"id":97837,"depth":64,"text":97838},{"id":97872,"depth":51,"text":97873,"children":99084},[99085,99086],{"id":97876,"depth":64,"text":97877},{"id":97932,"depth":64,"text":97933},{"id":98028,"depth":51,"text":98029,"children":99088},[99089,99090],{"id":98032,"depth":64,"text":98033},{"id":98044,"depth":64,"text":98045},{"id":98078,"depth":51,"text":98079},{"id":98115,"depth":51,"text":98116,"children":99093},[99094,99095,99096,99097,99098,99099,99100,99101],{"id":98119,"depth":64,"text":98120},{"id":98344,"depth":64,"text":98345},{"id":98351,"depth":64,"text":98352},{"id":98560,"depth":64,"text":98561},{"id":98580,"depth":64,"text":98581},{"id":98716,"depth":64,"text":98717},{"id":98885,"depth":64,"text":98886},{"id":99000,"depth":64,"text":99001},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97456,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":99108,"title":99109,"body":99110,"description":2359,"extension":2360,"meta":99203,"navigation":99,"path":99204,"seo":99205,"stem":99206,"__hash__":99207},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":99111,"toc":99201},[99112,99115,99118,99121,99124,99127,99130,99133,99136,99139,99142,99145,99147,99150,99153,99158,99161,99164,99198],[10,99113,99109],{"id":99114},"_20魔法命令mprun",[19,99116,99117],{},"逐行分析数据内存的使用情况",[19,99119,99120],{},"语法格式：",[19,99122,99123],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,99125,99126],{},"分析结果列如下：",[19,99128,99129],{},"Line行号",[19,99131,99132],{},"Mem usage内存使用大小",[19,99134,99135],{},"increment内存增量",[19,99137,99138],{},"Line content代码内容",[19,99140,99141],{},"补充说明：",[19,99143,99144],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,99146,97411],{},[19,99148,99149],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,99151,99152],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,99154,99155],{},[3736,99156],{"alt":28,"src":99157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,99159,99160],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,99162,99163],{},"这时候需要重新加载模块",[23,99165,99167],{"className":25,"code":99166,"language":27,"meta":28,"style":28},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[30,99168,99169,99174,99181,99186],{"__ignoreMap":28},[33,99170,99171],{"class":35,"line":36},[33,99172,99173],{"class":2487},"#重新加载模块\n",[33,99175,99176,99178],{"class":35,"line":51},[33,99177,32627],{"class":39},[33,99179,99180],{"class":47}," importlib\n",[33,99182,99183],{"class":35,"line":64},[33,99184,99185],{"class":47},"importlib.reload(mprun_test)\n",[33,99187,99188,99190,99193,99195],{"class":35,"line":76},[33,99189,1429],{"class":39},[33,99191,99192],{"class":47},"mprun ",[33,99194,2949],{"class":39},[33,99196,99197],{"class":47},"f mprun_test.fun_test mprun_test.fun_test()\n",[2331,99199,99200],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":99202},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":99109,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":99209,"title":99210,"body":99211,"description":2359,"extension":2360,"meta":99228,"navigation":99,"path":99229,"seo":99230,"stem":99231,"__hash__":99232},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":99212,"toc":99226},[99213,99216,99221],[10,99214,99210],{"id":99215},"_3一维数组的索引和切片",[19,99217,99218],{},[3736,99219],{"alt":28,"src":99220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,99222,99223],{},[3736,99224],{"alt":28,"src":99225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":28,"searchDepth":51,"depth":51,"links":99227},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":99210,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":99234,"title":99235,"body":99236,"description":2359,"extension":2360,"meta":99719,"navigation":99,"path":99720,"seo":99721,"stem":99722,"__hash__":99723},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":99237,"toc":99717},[99238,99241,99244,99249,99282,99285,99323,99326,99360,99363,99468,99471,99508,99511,99612,99615,99666,99669,99711,99714],[10,99239,99235],{"id":99240},"_4二维数组的索引与切片",[19,99242,99243],{},"①获取指定单个元素",[19,99245,99246],{},[3736,99247],{"alt":28,"src":99248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[23,99250,99252],{"className":25,"code":99251,"language":27,"meta":28,"style":28},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[30,99253,99254,99259,99264,99269],{"__ignoreMap":28},[33,99255,99256],{"class":35,"line":36},[33,99257,99258],{"class":2487},"#获取元素9\n",[33,99260,99261],{"class":35,"line":51},[33,99262,99263],{"class":2487},"#先获取所在行，再获取所在列\n",[33,99265,99266],{"class":35,"line":64},[33,99267,99268],{"class":2487},"#数组[行索引号，列索引号]\n",[33,99270,99271,99274,99276,99278,99280],{"class":35,"line":76},[33,99272,99273],{"class":47},"a[",[33,99275,720],{"class":72},[33,99277,2799],{"class":47},[33,99279,725],{"class":72},[33,99281,919],{"class":47},[19,99283,99284],{},"②获取整行元素",[23,99286,99288],{"className":25,"code":99287,"language":27,"meta":28,"style":28},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[30,99289,99290,99295,99300,99308,99313],{"__ignoreMap":28},[33,99291,99292],{"class":35,"line":36},[33,99293,99294],{"class":2487},"#获取整行 数组[行索引号]\n",[33,99296,99297],{"class":35,"line":51},[33,99298,99299],{"class":2487},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[33,99301,99302,99304,99306],{"class":35,"line":64},[33,99303,99273],{"class":47},[33,99305,725],{"class":72},[33,99307,919],{"class":47},[33,99309,99310],{"class":35,"line":76},[33,99311,99312],{"class":2487},"#也可以负索引获取一行\n",[33,99314,99315,99317,99319,99321],{"class":35,"line":87},[33,99316,99273],{"class":47},[33,99318,2949],{"class":39},[33,99320,720],{"class":72},[33,99322,919],{"class":47},[19,99324,99325],{},"③获取整列元素",[23,99327,99329],{"className":25,"code":99328,"language":27,"meta":28,"style":28},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[30,99330,99331,99336,99345,99350],{"__ignoreMap":28},[33,99332,99333],{"class":35,"line":36},[33,99334,99335],{"class":2487},"#获取整列 数组名[:,列索引]\n",[33,99337,99338,99341,99343],{"class":35,"line":51},[33,99339,99340],{"class":47},"a[:,",[33,99342,725],{"class":72},[33,99344,919],{"class":47},[33,99346,99347],{"class":35,"line":64},[33,99348,99349],{"class":2487},"#也可以负索引获取一列\n",[33,99351,99352,99354,99356,99358],{"class":35,"line":76},[33,99353,99340],{"class":47},[33,99355,2949],{"class":39},[33,99357,720],{"class":72},[33,99359,919],{"class":47},[19,99361,99362],{},"④部分行部分列的元素",[23,99364,99366],{"className":25,"code":99365,"language":27,"meta":28,"style":28},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[30,99367,99368,99373,99383,99387,99391,99396,99401,99405,99417,99421,99425,99430,99435,99440,99445,99449,99454],{"__ignoreMap":28},[33,99369,99370],{"class":35,"line":36},[33,99371,99372],{"class":2487},"#部分行部分列 数组名[行切片，列切片]\n",[33,99374,99375,99378,99380],{"class":35,"line":51},[33,99376,99377],{"class":47},"a[:",[33,99379,725],{"class":72},[33,99381,99382],{"class":47},",:]\n",[33,99384,99385],{"class":35,"line":64},[33,99386,95772],{"class":2487},[33,99388,99389],{"class":35,"line":76},[33,99390,96136],{"class":60},[33,99392,99393],{"class":35,"line":87},[33,99394,99395],{"class":60},"array([[ 1,  2,  3,  4,  5,  6],\n",[33,99397,99398],{"class":35,"line":96},[33,99399,99400],{"class":60},"       [ 7,  8,  9, 10, 11, 12]])\n",[33,99402,99403],{"class":35,"line":103},[33,99404,96136],{"class":60},[33,99406,99407,99409,99411,99413,99415],{"class":35,"line":108},[33,99408,99340],{"class":47},[33,99410,720],{"class":72},[33,99412,387],{"class":47},[33,99414,753],{"class":72},[33,99416,919],{"class":47},[33,99418,99419],{"class":35,"line":119},[33,99420,95772],{"class":2487},[33,99422,99423],{"class":35,"line":128},[33,99424,96136],{"class":60},[33,99426,99427],{"class":35,"line":1753},[33,99428,99429],{"class":60},"array([[ 2,  3,  4],\n",[33,99431,99432],{"class":35,"line":1763},[33,99433,99434],{"class":60},"       [ 8,  9, 10],\n",[33,99436,99437],{"class":35,"line":1775},[33,99438,99439],{"class":60},"       [14, 15, 16],\n",[33,99441,99442],{"class":35,"line":1780},[33,99443,99444],{"class":60},"       [20, 21, 22]])\n",[33,99446,99447],{"class":35,"line":1785},[33,99448,96136],{"class":60},[33,99450,99451],{"class":35,"line":1940},[33,99452,99453],{"class":2487},"#对列行同时进行切片，使用了step参数\n",[33,99455,99456,99459,99461,99464,99466],{"class":35,"line":2183},[33,99457,99458],{"class":47},"a[::",[33,99460,725],{"class":72},[33,99462,99463],{"class":47},",::",[33,99465,725],{"class":72},[33,99467,919],{"class":47},[19,99469,99470],{},"⑤同时获取两个元素",[23,99472,99474],{"className":25,"code":99473,"language":27,"meta":28,"style":28},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[30,99475,99476,99481,99486],{"__ignoreMap":28},[33,99477,99478],{"class":35,"line":36},[33,99479,99480],{"class":2487},"#同时获取第三行第二列，第四行第一列\n",[33,99482,99483],{"class":35,"line":51},[33,99484,99485],{"class":2487},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[33,99487,99488,99491,99493,99495,99497,99499,99501,99503,99505],{"class":35,"line":64},[33,99489,99490],{"class":47},"a[(",[33,99492,725],{"class":72},[33,99494,2799],{"class":47},[33,99496,730],{"class":72},[33,99498,44470],{"class":47},[33,99500,720],{"class":72},[33,99502,2799],{"class":47},[33,99504,2617],{"class":72},[33,99506,99507],{"class":47},")]\n",[19,99509,99510],{},"⑥切片，对行进行反向获取",[23,99512,99514],{"className":25,"code":99513,"language":27,"meta":28,"style":28},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[30,99515,99516,99521,99531,99535,99539,99544,99549,99554,99559,99563,99568,99584,99588,99593,99598,99603,99608],{"__ignoreMap":28},[33,99517,99518],{"class":35,"line":36},[33,99519,99520],{"class":2487},"#切片 对所有行进行反向获取\n",[33,99522,99523,99525,99527,99529],{"class":35,"line":51},[33,99524,99458],{"class":47},[33,99526,2949],{"class":39},[33,99528,720],{"class":72},[33,99530,919],{"class":47},[33,99532,99533],{"class":35,"line":64},[33,99534,95772],{"class":2487},[33,99536,99537],{"class":35,"line":76},[33,99538,96136],{"class":60},[33,99540,99541],{"class":35,"line":87},[33,99542,99543],{"class":60},"array([[19, 20, 21, 22, 23, 24],\n",[33,99545,99546],{"class":35,"line":96},[33,99547,99548],{"class":60},"       [13, 14, 15, 16, 17, 18],\n",[33,99550,99551],{"class":35,"line":103},[33,99552,99553],{"class":60},"       [ 7,  8,  9, 10, 11, 12],\n",[33,99555,99556],{"class":35,"line":108},[33,99557,99558],{"class":60},"       [ 1,  2,  3,  4,  5,  6]])\n",[33,99560,99561],{"class":35,"line":119},[33,99562,96136],{"class":60},[33,99564,99565],{"class":35,"line":128},[33,99566,99567],{"class":2487},"#对行列都进行反向切片获取\n",[33,99569,99570,99572,99574,99576,99578,99580,99582],{"class":35,"line":1753},[33,99571,99458],{"class":47},[33,99573,2949],{"class":39},[33,99575,720],{"class":72},[33,99577,99463],{"class":47},[33,99579,2949],{"class":39},[33,99581,720],{"class":72},[33,99583,919],{"class":47},[33,99585,99586],{"class":35,"line":1763},[33,99587,96136],{"class":60},[33,99589,99590],{"class":35,"line":1775},[33,99591,99592],{"class":60},"array([[24, 23, 22, 21, 20, 19],\n",[33,99594,99595],{"class":35,"line":1780},[33,99596,99597],{"class":60},"       [18, 17, 16, 15, 14, 13],\n",[33,99599,99600],{"class":35,"line":1785},[33,99601,99602],{"class":60},"       [12, 11, 10,  9,  8,  7],\n",[33,99604,99605],{"class":35,"line":1940},[33,99606,99607],{"class":60},"       [ 6,  5,  4,  3,  2,  1]])\n",[33,99609,99610],{"class":35,"line":2183},[33,99611,96136],{"class":60},[19,99613,99614],{},"⑦修改元素",[23,99616,99618],{"className":25,"code":99617,"language":27,"meta":28,"style":28},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[30,99619,99620,99625,99643,99648],{"__ignoreMap":28},[33,99621,99622],{"class":35,"line":36},[33,99623,99624],{"class":2487},"#获取前两行和前两列\n",[33,99626,99627,99630,99632,99634,99636,99639,99641],{"class":35,"line":51},[33,99628,99629],{"class":47},"sub_a",[33,99631,57],{"class":39},[33,99633,99377],{"class":47},[33,99635,725],{"class":72},[33,99637,99638],{"class":47},",:",[33,99640,725],{"class":72},[33,99642,919],{"class":47},[33,99644,99645],{"class":35,"line":64},[33,99646,99647],{"class":2487},"#修改sub_a第一个元素的值\n",[33,99649,99650,99653,99655,99657,99659,99661,99663],{"class":35,"line":76},[33,99651,99652],{"class":47},"sub_a[",[33,99654,2617],{"class":72},[33,99656,2799],{"class":47},[33,99658,2617],{"class":72},[33,99660,3348],{"class":47},[33,99662,57],{"class":39},[33,99664,99665],{"class":72},"100\n",[19,99667,99668],{},"⑧数组复制copy()",[23,99670,99672],{"className":25,"code":99671,"language":27,"meta":28,"style":28},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[30,99673,99674,99679,99689,99694],{"__ignoreMap":28},[33,99675,99676],{"class":35,"line":36},[33,99677,99678],{"class":2487},"#数组复制\n",[33,99680,99681,99684,99686],{"class":35,"line":51},[33,99682,99683],{"class":47},"copy_a",[33,99685,57],{"class":39},[33,99687,99688],{"class":47},"np.copy(sub_a)\n",[33,99690,99691],{"class":35,"line":64},[33,99692,99693],{"class":2487},"#修改copy_a后不影响原数组\n",[33,99695,99696,99699,99701,99703,99705,99707,99709],{"class":35,"line":76},[33,99697,99698],{"class":47},"copy_a[",[33,99700,2617],{"class":72},[33,99702,2799],{"class":47},[33,99704,2617],{"class":72},[33,99706,3348],{"class":47},[33,99708,57],{"class":39},[33,99710,99665],{"class":72},[19,99712,99713],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2331,99715,99716],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":99718},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":99235,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99725,"title":99726,"body":99727,"description":2359,"extension":2360,"meta":100219,"navigation":99,"path":100220,"seo":100221,"stem":100222,"__hash__":100223},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99728,"toc":100211},[99729,99732,99736,99739,99742,99795,99798,99823,99826,99845,99865,99868,99884,99888,99934,99938,99980,99984,99987,99990,99993,99996,99999,100061,100121,100125,100128,100185,100189,100194,100203,100208],[10,99730,99726],{"id":99731},"_5改变数组的维度",[14,99733,99735],{"id":99734},"_51-使用reshape","5.1 使用reshape()",[19,99737,99738],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99740,99741],{},"①一维数组转换为二维数组",[23,99743,99745],{"className":25,"code":99744,"language":27,"meta":28,"style":28},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[30,99746,99747,99763,99768,99773,99778],{"__ignoreMap":28},[33,99748,99749,99751,99753,99755,99757,99759,99761],{"class":35,"line":36},[33,99750,2663],{"class":47},[33,99752,57],{"class":39},[33,99754,95210],{"class":47},[33,99756,720],{"class":72},[33,99758,2799],{"class":47},[33,99760,2940],{"class":72},[33,99762,226],{"class":47},[33,99764,99765],{"class":35,"line":51},[33,99766,99767],{"class":2487},"#将一维数组进行转换\n",[33,99769,99770],{"class":35,"line":64},[33,99771,99772],{"class":2487},"#注意点：元素个数不可以变\n",[33,99774,99775],{"class":35,"line":76},[33,99776,99777],{"class":2487},"#转换维度要保持一致，不一致就异常！！！\n",[33,99779,99780,99782,99784,99787,99789,99791,99793],{"class":35,"line":87},[33,99781,95514],{"class":47},[33,99783,57],{"class":39},[33,99785,99786],{"class":47},"a.reshape(",[33,99788,725],{"class":72},[33,99790,2799],{"class":47},[33,99792,2765],{"class":72},[33,99794,226],{"class":47},[19,99796,99797],{},"②一维数组转换为三维数组",[23,99799,99801],{"className":25,"code":99800,"language":27,"meta":28,"style":28},"aaa=a.reshape(2,3,2)\n",[30,99802,99803],{"__ignoreMap":28},[33,99804,99805,99807,99809,99811,99813,99815,99817,99819,99821],{"class":35,"line":36},[33,99806,97729],{"class":47},[33,99808,57],{"class":39},[33,99810,99786],{"class":47},[33,99812,725],{"class":72},[33,99814,2799],{"class":47},[33,99816,730],{"class":72},[33,99818,2799],{"class":47},[33,99820,725],{"class":72},[33,99822,226],{"class":47},[19,99824,99825],{},"③二维数组转化为一维数组",[23,99827,99829],{"className":25,"code":99828,"language":27,"meta":28,"style":28},"#知道元素个数：\naa.reshape(12)\n",[30,99830,99831,99836],{"__ignoreMap":28},[33,99832,99833],{"class":35,"line":36},[33,99834,99835],{"class":2487},"#知道元素个数：\n",[33,99837,99838,99841,99843],{"class":35,"line":51},[33,99839,99840],{"class":47},"aa.reshape(",[33,99842,2915],{"class":72},[33,99844,226],{"class":47},[23,99846,99848],{"className":25,"code":99847,"language":27,"meta":28,"style":28},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[30,99849,99850,99855],{"__ignoreMap":28},[33,99851,99852],{"class":35,"line":36},[33,99853,99854],{"class":2487},"#不知道元素个数，参数传递-1\n",[33,99856,99857,99859,99861,99863],{"class":35,"line":51},[33,99858,99840],{"class":47},[33,99860,2949],{"class":39},[33,99862,720],{"class":72},[33,99864,226],{"class":47},[19,99866,99867],{},"④三维数组转换为一维数组",[23,99869,99871],{"className":25,"code":99870,"language":27,"meta":28,"style":28},"aaa.reshape(-1)\n",[30,99872,99873],{"__ignoreMap":28},[33,99874,99875,99878,99880,99882],{"class":35,"line":36},[33,99876,99877],{"class":47},"aaa.reshape(",[33,99879,2949],{"class":39},[33,99881,720],{"class":72},[33,99883,226],{"class":47},[14,99885,99887],{"id":99886},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[23,99889,99891],{"className":25,"code":99890,"language":27,"meta":28,"style":28},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[30,99892,99893,99920,99925,99929],{"__ignoreMap":28},[33,99894,99895,99897,99899,99901,99903,99905,99907,99909,99911,99913,99915,99917],{"class":35,"line":36},[33,99896,95514],{"class":47},[33,99898,57],{"class":39},[33,99900,95210],{"class":47},[33,99902,720],{"class":72},[33,99904,2799],{"class":47},[33,99906,2940],{"class":72},[33,99908,95215],{"class":47},[33,99910,725],{"class":72},[33,99912,2799],{"class":47},[33,99914,2765],{"class":72},[33,99916,2849],{"class":47},[33,99918,99919],{"class":2487},"#转换为2行6列的数组\n",[33,99921,99922],{"class":35,"line":51},[33,99923,99924],{"class":47},"aa.revel()\n",[33,99926,99927],{"class":35,"line":64},[33,99928,95772],{"class":2487},[33,99930,99931],{"class":35,"line":76},[33,99932,99933],{"class":2487},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99935,99937],{"id":99936},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[23,99939,99941],{"className":25,"code":99940,"language":27,"meta":28,"style":28},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[30,99942,99943,99967,99972,99976],{"__ignoreMap":28},[33,99944,99945,99947,99949,99951,99953,99955,99957,99959,99961,99963,99965],{"class":35,"line":36},[33,99946,95514],{"class":47},[33,99948,57],{"class":39},[33,99950,95210],{"class":47},[33,99952,720],{"class":72},[33,99954,2799],{"class":47},[33,99956,2940],{"class":72},[33,99958,95215],{"class":47},[33,99960,725],{"class":72},[33,99962,2799],{"class":47},[33,99964,2765],{"class":72},[33,99966,226],{"class":47},[33,99968,99969],{"class":35,"line":51},[33,99970,99971],{"class":47},"aa.flatten()\n",[33,99973,99974],{"class":35,"line":64},[33,99975,95772],{"class":2487},[33,99977,99978],{"class":35,"line":76},[33,99979,99933],{"class":2487},[14,99981,99983],{"id":99982},"_54-使用resize","5.4 使用resize()",[19,99985,99986],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99988,99989],{},"通过resize方法可以改变数组的维度",[19,99991,99992],{},"#resize修改数组维度",[19,99994,99995],{},"#以元组的形式指定形状",[19,99997,99998],{},"#改变的是原数组",[23,100000,100002],{"className":25,"code":100001,"language":27,"meta":28,"style":28},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[30,100003,100004,100020,100040,100053,100057],{"__ignoreMap":28},[33,100005,100006,100008,100010,100012,100014,100016,100018],{"class":35,"line":36},[33,100007,2663],{"class":47},[33,100009,57],{"class":39},[33,100011,95210],{"class":47},[33,100013,720],{"class":72},[33,100015,2799],{"class":47},[33,100017,2940],{"class":72},[33,100019,226],{"class":47},[33,100021,100022,100025,100027,100029,100031,100033,100035,100037],{"class":35,"line":51},[33,100023,100024],{"class":47},"a.shape",[33,100026,57],{"class":39},[33,100028,133],{"class":47},[33,100030,725],{"class":72},[33,100032,2799],{"class":47},[33,100034,2765],{"class":72},[33,100036,2849],{"class":47},[33,100038,100039],{"class":2487},"#改变了原数组\n",[33,100041,100042,100044,100046,100049,100051],{"class":35,"line":64},[33,100043,2663],{"class":47},[33,100045,57],{"class":39},[33,100047,100048],{"class":47},"resize((",[33,100050,2915],{"class":72},[33,100052,551],{"class":47},[33,100054,100055],{"class":35,"line":76},[33,100056,95772],{"class":2487},[33,100058,100059],{"class":35,"line":87},[33,100060,99933],{"class":2487},[23,100062,100064],{"className":25,"code":100063,"language":27,"meta":28,"style":28},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[30,100065,100066,100079,100083,100087,100092,100097,100102,100107,100112,100117],{"__ignoreMap":28},[33,100067,100068,100071,100073,100075,100077],{"class":35,"line":36},[33,100069,100070],{"class":47},"a.resize((",[33,100072,2765],{"class":72},[33,100074,2799],{"class":47},[33,100076,725],{"class":72},[33,100078,551],{"class":47},[33,100080,100081],{"class":35,"line":51},[33,100082,95772],{"class":2487},[33,100084,100085],{"class":35,"line":64},[33,100086,96136],{"class":60},[33,100088,100089],{"class":35,"line":76},[33,100090,100091],{"class":60},"array([[ 1,  2],\n",[33,100093,100094],{"class":35,"line":87},[33,100095,100096],{"class":60},"       [ 3,  4],\n",[33,100098,100099],{"class":35,"line":96},[33,100100,100101],{"class":60},"       [ 5,  6],\n",[33,100103,100104],{"class":35,"line":103},[33,100105,100106],{"class":60},"       [ 7,  8],\n",[33,100108,100109],{"class":35,"line":108},[33,100110,100111],{"class":60},"       [ 9, 10],\n",[33,100113,100114],{"class":35,"line":119},[33,100115,100116],{"class":60},"       [11, 12]])\n",[33,100118,100119],{"class":35,"line":128},[33,100120,96136],{"class":60},[14,100122,100124],{"id":100123},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,100126,100127],{},"改变了原数组",[23,100129,100131],{"className":25,"code":100130,"language":27,"meta":28,"style":28},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[30,100132,100133,100149,100165,100169,100173,100177,100181],{"__ignoreMap":28},[33,100134,100135,100137,100139,100141,100143,100145,100147],{"class":35,"line":36},[33,100136,2663],{"class":47},[33,100138,57],{"class":39},[33,100140,95210],{"class":47},[33,100142,720],{"class":72},[33,100144,2799],{"class":47},[33,100146,2940],{"class":72},[33,100148,226],{"class":47},[33,100150,100151,100153,100155,100157,100159,100161,100163],{"class":35,"line":51},[33,100152,100024],{"class":47},[33,100154,57],{"class":39},[33,100156,133],{"class":47},[33,100158,725],{"class":72},[33,100160,2799],{"class":47},[33,100162,2765],{"class":72},[33,100164,226],{"class":47},[33,100166,100167],{"class":35,"line":64},[33,100168,95772],{"class":2487},[33,100170,100171],{"class":35,"line":76},[33,100172,96136],{"class":60},[33,100174,100175],{"class":35,"line":87},[33,100176,99395],{"class":60},[33,100178,100179],{"class":35,"line":96},[33,100180,99400],{"class":60},[33,100182,100183],{"class":35,"line":103},[33,100184,96136],{"class":60},[14,100186,100188],{"id":100187},"_56-重要比较","5.6 重要比较：",[19,100190,100191],{},[3736,100192],{"alt":28,"src":100193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,100195,100196,100197,100199,100200,100202],{},"口诀：NumPy 函数要么用 ",[30,100198,98170],{},"，要么用 ",[30,100201,33725],{},"，创建结构用 shape，造数据用 size",[19,100204,100205],{},[3736,100206],{"alt":28,"src":100207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2331,100209,100210],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":100212},[100213,100214,100215,100216,100217,100218],{"id":99734,"depth":51,"text":99735},{"id":99886,"depth":51,"text":99887},{"id":99936,"depth":51,"text":99937},{"id":99982,"depth":51,"text":99983},{"id":100123,"depth":51,"text":100124},{"id":100187,"depth":51,"text":100188},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99726,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":100225,"title":100226,"body":100227,"description":2359,"extension":2360,"meta":101299,"navigation":99,"path":101300,"seo":101301,"stem":101302,"__hash__":101303},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":100228,"toc":101293},[100229,100232,100236,100239,100242,100245,100310,100313,100353,100356,100438,100441,100446,100468,100470,100475,100480,100483,100486,100641,100644,100846,100850,100853,100856,100924,100926,100931,100934,100937,101017,101021,101024,101026,101099,101101,101106,101108,101188,101192,101195,101198,101201,101204,101207,101210,101290],[10,100230,100226],{"id":100231},"_6数组的拼接",[14,100233,100235],{"id":100234},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,100237,100238],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,100240,100241],{},"函数内部传两个数列构成的数列或者元组",[19,100243,100244],{},"①一维数组的拼接",[23,100246,100248],{"className":25,"code":100247,"language":27,"meta":28,"style":28},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[30,100249,100250,100270,100290,100295,100300,100305],{"__ignoreMap":28},[33,100251,100252,100254,100256,100258,100260,100262,100264,100266,100268],{"class":35,"line":36},[33,100253,2663],{"class":47},[33,100255,57],{"class":39},[33,100257,95232],{"class":47},[33,100259,720],{"class":72},[33,100261,2799],{"class":47},[33,100263,725],{"class":72},[33,100265,2799],{"class":47},[33,100267,730],{"class":72},[33,100269,6907],{"class":47},[33,100271,100272,100274,100276,100278,100280,100282,100284,100286,100288],{"class":35,"line":51},[33,100273,2687],{"class":47},[33,100275,57],{"class":39},[33,100277,95232],{"class":47},[33,100279,753],{"class":72},[33,100281,2799],{"class":47},[33,100283,758],{"class":72},[33,100285,2799],{"class":47},[33,100287,2765],{"class":72},[33,100289,6907],{"class":47},[33,100291,100292],{"class":35,"line":64},[33,100293,100294],{"class":2487},"#调用concatenate进行数组拼接\n",[33,100296,100297],{"class":35,"line":76},[33,100298,100299],{"class":47},"np.concatenate((a,b))\n",[33,100301,100302],{"class":35,"line":87},[33,100303,100304],{"class":2487},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[33,100306,100307],{"class":35,"line":96},[33,100308,100309],{"class":2487},"#np.concatenate([a,b])\n",[19,100311,100312],{},"②一维多个数组拼接",[23,100314,100316],{"className":25,"code":100315,"language":27,"meta":28,"style":28},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[30,100317,100318,100323,100343,100348],{"__ignoreMap":28},[33,100319,100320],{"class":35,"line":36},[33,100321,100322],{"class":2487},"#也可以多个数组进行拼接\n",[33,100324,100325,100327,100329,100331,100333,100335,100337,100339,100341],{"class":35,"line":51},[33,100326,2712],{"class":47},[33,100328,57],{"class":39},[33,100330,95232],{"class":47},[33,100332,1279],{"class":72},[33,100334,2799],{"class":47},[33,100336,2890],{"class":72},[33,100338,2799],{"class":47},[33,100340,2940],{"class":72},[33,100342,6907],{"class":47},[33,100344,100345],{"class":35,"line":64},[33,100346,100347],{"class":47},"c\n",[33,100349,100350],{"class":35,"line":76},[33,100351,100352],{"class":47},"np.concatenate((a,b,c))\n",[19,100354,100355],{},"③二维数组拼接",[23,100357,100359],{"className":25,"code":100358,"language":27,"meta":28,"style":28},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[30,100360,100361,100366,100390,100415,100420,100425],{"__ignoreMap":28},[33,100362,100363],{"class":35,"line":36},[33,100364,100365],{"class":2487},"#二维数组使用concatenate进行拼接\n",[33,100367,100368,100370,100372,100374,100376,100378,100380,100382,100384,100386,100388],{"class":35,"line":51},[33,100369,95514],{"class":47},[33,100371,57],{"class":39},[33,100373,95210],{"class":47},[33,100375,720],{"class":72},[33,100377,2799],{"class":47},[33,100379,2940],{"class":72},[33,100381,95215],{"class":47},[33,100383,730],{"class":72},[33,100385,2799],{"class":47},[33,100387,753],{"class":72},[33,100389,226],{"class":47},[33,100391,100392,100395,100397,100399,100401,100403,100405,100407,100409,100411,100413],{"class":35,"line":64},[33,100393,100394],{"class":47},"bb",[33,100396,57],{"class":39},[33,100398,95210],{"class":47},[33,100400,2758],{"class":72},[33,100402,2799],{"class":47},[33,100404,3058],{"class":72},[33,100406,95215],{"class":47},[33,100408,730],{"class":72},[33,100410,2799],{"class":47},[33,100412,753],{"class":72},[33,100414,226],{"class":47},[33,100416,100417],{"class":35,"line":76},[33,100418,100419],{"class":2487},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[33,100421,100422],{"class":35,"line":87},[33,100423,100424],{"class":2487},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[33,100426,100427,100430,100432,100434,100436],{"class":35,"line":96},[33,100428,100429],{"class":47},"np.concatenate((aa,bb),",[33,100431,49736],{"class":289},[33,100433,57],{"class":39},[33,100435,2617],{"class":72},[33,100437,226],{"class":47},[19,100439,100440],{},"结果：",[19,100442,100443],{},[3736,100444],{"alt":28,"src":100445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[23,100447,100449],{"className":25,"code":100448,"language":27,"meta":28,"style":28},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[30,100450,100451,100456],{"__ignoreMap":28},[33,100452,100453],{"class":35,"line":36},[33,100454,100455],{"class":2487},"#指定axis为1进行拼接\n",[33,100457,100458,100460,100462,100464,100466],{"class":35,"line":51},[33,100459,100429],{"class":47},[33,100461,49736],{"class":289},[33,100463,57],{"class":39},[33,100465,720],{"class":72},[33,100467,226],{"class":47},[19,100469,100440],{},[19,100471,100472],{},[3736,100473],{"alt":28,"src":100474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100476,100477],{},[2575,100478,100479],{},"二维数组总结：0竖着方向，1横着方向",[19,100481,100482],{},"④三维数组拼接",[19,100484,100485],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[23,100487,100489],{"className":25,"code":100488,"language":27,"meta":28,"style":28},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[30,100490,100491,100496,100524,100554,100559,100576,100581,100586,100591,100608,100613,100618,100623,100636],{"__ignoreMap":28},[33,100492,100493],{"class":35,"line":36},[33,100494,100495],{"class":2487},"#两个三行六列\n",[33,100497,100498,100500,100502,100504,100506,100508,100510,100512,100514,100516,100518,100520,100522],{"class":35,"line":51},[33,100499,97729],{"class":47},[33,100501,57],{"class":39},[33,100503,95210],{"class":47},[33,100505,720],{"class":72},[33,100507,2799],{"class":47},[33,100509,2747],{"class":72},[33,100511,95215],{"class":47},[33,100513,725],{"class":72},[33,100515,2799],{"class":47},[33,100517,730],{"class":72},[33,100519,2799],{"class":47},[33,100521,2765],{"class":72},[33,100523,226],{"class":47},[33,100525,100526,100529,100531,100533,100535,100537,100540,100542,100544,100546,100548,100550,100552],{"class":35,"line":64},[33,100527,100528],{"class":47},"bbb",[33,100530,57],{"class":39},[33,100532,95210],{"class":47},[33,100534,2758],{"class":72},[33,100536,2799],{"class":47},[33,100538,100539],{"class":72},"137",[33,100541,95215],{"class":47},[33,100543,725],{"class":72},[33,100545,2799],{"class":47},[33,100547,730],{"class":72},[33,100549,2799],{"class":47},[33,100551,2765],{"class":72},[33,100553,226],{"class":47},[33,100555,100556],{"class":35,"line":76},[33,100557,100558],{"class":2487},"#axis=0\n",[33,100560,100561,100563,100565,100568,100570,100572,100574],{"class":35,"line":87},[33,100562,3109],{"class":47},[33,100564,57],{"class":39},[33,100566,100567],{"class":47},"np.concatenate((aaa,bbb),",[33,100569,49736],{"class":289},[33,100571,57],{"class":39},[33,100573,2617],{"class":72},[33,100575,226],{"class":47},[33,100577,100578],{"class":35,"line":96},[33,100579,100580],{"class":47},"s.shape\n",[33,100582,100583],{"class":35,"line":103},[33,100584,100585],{"class":2487},"#输出：(4,3,6)\n",[33,100587,100588],{"class":35,"line":108},[33,100589,100590],{"class":2487},"#axis=1\n",[33,100592,100593,100596,100598,100600,100602,100604,100606],{"class":35,"line":119},[33,100594,100595],{"class":47},"ss",[33,100597,57],{"class":39},[33,100599,100567],{"class":47},[33,100601,49736],{"class":289},[33,100603,57],{"class":39},[33,100605,720],{"class":72},[33,100607,226],{"class":47},[33,100609,100610],{"class":35,"line":128},[33,100611,100612],{"class":47},"ss.shape\n",[33,100614,100615],{"class":35,"line":1753},[33,100616,100617],{"class":2487},"#输出：(2,6,6)\n",[33,100619,100620],{"class":35,"line":1763},[33,100621,100622],{"class":2487},"#axis=2\n",[33,100624,100625,100627,100629,100631,100633],{"class":35,"line":1775},[33,100626,100567],{"class":47},[33,100628,49736],{"class":289},[33,100630,57],{"class":39},[33,100632,725],{"class":72},[33,100634,100635],{"class":47},").shape\n",[33,100637,100638],{"class":35,"line":1780},[33,100639,100640],{"class":2487},"#输出：（2，3，12）\n",[19,100642,100643],{},"⑤四维数组拼接",[23,100645,100647],{"className":25,"code":100646,"language":27,"meta":28,"style":28},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[30,100648,100649,100653,100681,100709,100734,100760,100764,100777,100782,100786,100798,100803,100807,100819,100824,100829,100841],{"__ignoreMap":28},[33,100650,100651],{"class":35,"line":36},[33,100652,100495],{"class":2487},[33,100654,100655,100657,100659,100661,100663,100665,100667,100669,100671,100673,100675,100677,100679],{"class":35,"line":51},[33,100656,97729],{"class":47},[33,100658,57],{"class":39},[33,100660,95210],{"class":47},[33,100662,720],{"class":72},[33,100664,2799],{"class":47},[33,100666,2747],{"class":72},[33,100668,95215],{"class":47},[33,100670,725],{"class":72},[33,100672,2799],{"class":47},[33,100674,730],{"class":72},[33,100676,2799],{"class":47},[33,100678,2765],{"class":72},[33,100680,226],{"class":47},[33,100682,100683,100685,100687,100689,100691,100693,100695,100697,100699,100701,100703,100705,100707],{"class":35,"line":64},[33,100684,100528],{"class":47},[33,100686,57],{"class":39},[33,100688,95210],{"class":47},[33,100690,2758],{"class":72},[33,100692,2799],{"class":47},[33,100694,100539],{"class":72},[33,100696,95215],{"class":47},[33,100698,725],{"class":72},[33,100700,2799],{"class":47},[33,100702,730],{"class":72},[33,100704,2799],{"class":47},[33,100706,2765],{"class":72},[33,100708,226],{"class":47},[33,100710,100711,100714,100716,100718,100720,100722,100724,100726,100728,100730,100732],{"class":35,"line":76},[33,100712,100713],{"class":47},"aaaa",[33,100715,57],{"class":39},[33,100717,99877],{"class":47},[33,100719,725],{"class":72},[33,100721,2799],{"class":47},[33,100723,730],{"class":72},[33,100725,2799],{"class":47},[33,100727,730],{"class":72},[33,100729,2799],{"class":47},[33,100731,725],{"class":72},[33,100733,226],{"class":47},[33,100735,100736,100739,100741,100744,100746,100748,100750,100752,100754,100756,100758],{"class":35,"line":87},[33,100737,100738],{"class":47},"bbbb",[33,100740,57],{"class":39},[33,100742,100743],{"class":47},"bbb.reshape(",[33,100745,725],{"class":72},[33,100747,2799],{"class":47},[33,100749,730],{"class":72},[33,100751,2799],{"class":47},[33,100753,730],{"class":72},[33,100755,2799],{"class":47},[33,100757,725],{"class":72},[33,100759,226],{"class":47},[33,100761,100762],{"class":35,"line":96},[33,100763,100558],{"class":2487},[33,100765,100766,100769,100771,100773,100775],{"class":35,"line":103},[33,100767,100768],{"class":47},"np.concatenate((aaaa,bbbb),",[33,100770,49736],{"class":289},[33,100772,57],{"class":39},[33,100774,2617],{"class":72},[33,100776,100635],{"class":47},[33,100778,100779],{"class":35,"line":108},[33,100780,100781],{"class":2487},"#结果：（4，3，3，2）\n",[33,100783,100784],{"class":35,"line":119},[33,100785,100590],{"class":2487},[33,100787,100788,100790,100792,100794,100796],{"class":35,"line":128},[33,100789,100768],{"class":47},[33,100791,49736],{"class":289},[33,100793,57],{"class":39},[33,100795,720],{"class":72},[33,100797,100635],{"class":47},[33,100799,100800],{"class":35,"line":1753},[33,100801,100802],{"class":2487},"#结果：（2，6，3，2）\n",[33,100804,100805],{"class":35,"line":1763},[33,100806,100622],{"class":2487},[33,100808,100809,100811,100813,100815,100817],{"class":35,"line":1775},[33,100810,100768],{"class":47},[33,100812,49736],{"class":289},[33,100814,57],{"class":39},[33,100816,725],{"class":72},[33,100818,100635],{"class":47},[33,100820,100821],{"class":35,"line":1780},[33,100822,100823],{"class":2487},"#结果：（2，3，6，2）\n",[33,100825,100826],{"class":35,"line":1785},[33,100827,100828],{"class":2487},"#axis=3\n",[33,100830,100831,100833,100835,100837,100839],{"class":35,"line":1940},[33,100832,100768],{"class":47},[33,100834,49736],{"class":289},[33,100836,57],{"class":39},[33,100838,730],{"class":72},[33,100840,100635],{"class":47},[33,100842,100843],{"class":35,"line":2183},[33,100844,100845],{"class":2487},"#结果：（2，3，3，4）\n",[14,100847,100849],{"id":100848},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100851,100852],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100854,100855],{},"①二维数组",[23,100857,100859],{"className":25,"code":100858,"language":27,"meta":28,"style":28},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[30,100860,100861,100885,100909,100914,100919],{"__ignoreMap":28},[33,100862,100863,100865,100867,100869,100871,100873,100875,100877,100879,100881,100883],{"class":35,"line":36},[33,100864,95514],{"class":47},[33,100866,57],{"class":39},[33,100868,95210],{"class":47},[33,100870,720],{"class":72},[33,100872,2799],{"class":47},[33,100874,2940],{"class":72},[33,100876,95215],{"class":47},[33,100878,730],{"class":72},[33,100880,2799],{"class":47},[33,100882,753],{"class":72},[33,100884,226],{"class":47},[33,100886,100887,100889,100891,100893,100895,100897,100899,100901,100903,100905,100907],{"class":35,"line":51},[33,100888,100394],{"class":47},[33,100890,57],{"class":39},[33,100892,95210],{"class":47},[33,100894,2758],{"class":72},[33,100896,2799],{"class":47},[33,100898,3058],{"class":72},[33,100900,95215],{"class":47},[33,100902,730],{"class":72},[33,100904,2799],{"class":47},[33,100906,753],{"class":72},[33,100908,226],{"class":47},[33,100910,100911],{"class":35,"line":64},[33,100912,100913],{"class":47},"np.hstack((aa,bb))\n",[33,100915,100916],{"class":35,"line":76},[33,100917,100918],{"class":2487},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[33,100920,100921],{"class":35,"line":87},[33,100922,100923],{"class":2487},"#np.hstack([aa,bb])\n",[19,100925,100440],{},[19,100927,100928],{},[3736,100929],{"alt":28,"src":100930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100932,100933],{},"等效于concatenate()函数中axis=1时的情况",[19,100935,100936],{},"②三维数组",[23,100938,100940],{"className":25,"code":100939,"language":27,"meta":28,"style":28},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[30,100941,100942,100946,100974,101002,101007,101012],{"__ignoreMap":28},[33,100943,100944],{"class":35,"line":36},[33,100945,100495],{"class":2487},[33,100947,100948,100950,100952,100954,100956,100958,100960,100962,100964,100966,100968,100970,100972],{"class":35,"line":51},[33,100949,97729],{"class":47},[33,100951,57],{"class":39},[33,100953,95210],{"class":47},[33,100955,720],{"class":72},[33,100957,2799],{"class":47},[33,100959,2747],{"class":72},[33,100961,95215],{"class":47},[33,100963,725],{"class":72},[33,100965,2799],{"class":47},[33,100967,730],{"class":72},[33,100969,2799],{"class":47},[33,100971,2765],{"class":72},[33,100973,226],{"class":47},[33,100975,100976,100978,100980,100982,100984,100986,100988,100990,100992,100994,100996,100998,101000],{"class":35,"line":64},[33,100977,100528],{"class":47},[33,100979,57],{"class":39},[33,100981,95210],{"class":47},[33,100983,2758],{"class":72},[33,100985,2799],{"class":47},[33,100987,100539],{"class":72},[33,100989,95215],{"class":47},[33,100991,725],{"class":72},[33,100993,2799],{"class":47},[33,100995,730],{"class":72},[33,100997,2799],{"class":47},[33,100999,2765],{"class":72},[33,101001,226],{"class":47},[33,101003,101004],{"class":35,"line":76},[33,101005,101006],{"class":2487},"#使用hstack\n",[33,101008,101009],{"class":35,"line":87},[33,101010,101011],{"class":47},"np.hstack((aaa,bbb)).shape\n",[33,101013,101014],{"class":35,"line":96},[33,101015,101016],{"class":2487},"#输出：（2，6，6）\n",[14,101018,101020],{"id":101019},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,101022,101023],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,101025,100855],{},[23,101027,101029],{"className":25,"code":101028,"language":27,"meta":28,"style":28},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[30,101030,101031,101055,101079,101084,101089,101094],{"__ignoreMap":28},[33,101032,101033,101035,101037,101039,101041,101043,101045,101047,101049,101051,101053],{"class":35,"line":36},[33,101034,95514],{"class":47},[33,101036,57],{"class":39},[33,101038,95210],{"class":47},[33,101040,720],{"class":72},[33,101042,2799],{"class":47},[33,101044,2940],{"class":72},[33,101046,95215],{"class":47},[33,101048,730],{"class":72},[33,101050,2799],{"class":47},[33,101052,753],{"class":72},[33,101054,226],{"class":47},[33,101056,101057,101059,101061,101063,101065,101067,101069,101071,101073,101075,101077],{"class":35,"line":51},[33,101058,100394],{"class":47},[33,101060,57],{"class":39},[33,101062,95210],{"class":47},[33,101064,2758],{"class":72},[33,101066,2799],{"class":47},[33,101068,3058],{"class":72},[33,101070,95215],{"class":47},[33,101072,730],{"class":72},[33,101074,2799],{"class":47},[33,101076,753],{"class":72},[33,101078,226],{"class":47},[33,101080,101081],{"class":35,"line":64},[33,101082,101083],{"class":2487},"#vstack 垂直方向进行堆叠\n",[33,101085,101086],{"class":35,"line":76},[33,101087,101088],{"class":47},"np.vstack((aa,bb))\n",[33,101090,101091],{"class":35,"line":87},[33,101092,101093],{"class":2487},"#与hstack传的参数类似，等价于：\n",[33,101095,101096],{"class":35,"line":96},[33,101097,101098],{"class":47},"np.vstack([aa,bb])\n",[19,101100,100440],{},[19,101102,101103],{},[3736,101104],{"alt":28,"src":101105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,101107,100936],{},[23,101109,101111],{"className":25,"code":101110,"language":27,"meta":28,"style":28},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[30,101112,101113,101117,101145,101173,101178,101183],{"__ignoreMap":28},[33,101114,101115],{"class":35,"line":36},[33,101116,100495],{"class":2487},[33,101118,101119,101121,101123,101125,101127,101129,101131,101133,101135,101137,101139,101141,101143],{"class":35,"line":51},[33,101120,97729],{"class":47},[33,101122,57],{"class":39},[33,101124,95210],{"class":47},[33,101126,720],{"class":72},[33,101128,2799],{"class":47},[33,101130,2747],{"class":72},[33,101132,95215],{"class":47},[33,101134,725],{"class":72},[33,101136,2799],{"class":47},[33,101138,730],{"class":72},[33,101140,2799],{"class":47},[33,101142,2765],{"class":72},[33,101144,226],{"class":47},[33,101146,101147,101149,101151,101153,101155,101157,101159,101161,101163,101165,101167,101169,101171],{"class":35,"line":64},[33,101148,100528],{"class":47},[33,101150,57],{"class":39},[33,101152,95210],{"class":47},[33,101154,2758],{"class":72},[33,101156,2799],{"class":47},[33,101158,100539],{"class":72},[33,101160,95215],{"class":47},[33,101162,725],{"class":72},[33,101164,2799],{"class":47},[33,101166,730],{"class":72},[33,101168,2799],{"class":47},[33,101170,2765],{"class":72},[33,101172,226],{"class":47},[33,101174,101175],{"class":35,"line":76},[33,101176,101177],{"class":2487},"#使用vstack\n",[33,101179,101180],{"class":35,"line":87},[33,101181,101182],{"class":47},"np.vstack((aaa,bbb)).shape\n",[33,101184,101185],{"class":35,"line":96},[33,101186,101187],{"class":2487},"#输出：（4，3，6）\n",[14,101189,101191],{"id":101190},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,101193,101194],{},"该方法是三维数组特有的方法",[19,101196,101197],{},"也就是说",[19,101199,101200],{},"一维数组拼接方法用：concatenate()",[19,101202,101203],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,101205,101206],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,101208,101209],{},"四维数组及多维数组只能用concatenate进行拼接",[23,101211,101213],{"className":25,"code":101212,"language":27,"meta":28,"style":28},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[30,101214,101215,101219,101247,101275,101280,101285],{"__ignoreMap":28},[33,101216,101217],{"class":35,"line":36},[33,101218,100495],{"class":2487},[33,101220,101221,101223,101225,101227,101229,101231,101233,101235,101237,101239,101241,101243,101245],{"class":35,"line":51},[33,101222,97729],{"class":47},[33,101224,57],{"class":39},[33,101226,95210],{"class":47},[33,101228,720],{"class":72},[33,101230,2799],{"class":47},[33,101232,2747],{"class":72},[33,101234,95215],{"class":47},[33,101236,725],{"class":72},[33,101238,2799],{"class":47},[33,101240,730],{"class":72},[33,101242,2799],{"class":47},[33,101244,2765],{"class":72},[33,101246,226],{"class":47},[33,101248,101249,101251,101253,101255,101257,101259,101261,101263,101265,101267,101269,101271,101273],{"class":35,"line":64},[33,101250,100528],{"class":47},[33,101252,57],{"class":39},[33,101254,95210],{"class":47},[33,101256,2758],{"class":72},[33,101258,2799],{"class":47},[33,101260,100539],{"class":72},[33,101262,95215],{"class":47},[33,101264,725],{"class":72},[33,101266,2799],{"class":47},[33,101268,730],{"class":72},[33,101270,2799],{"class":47},[33,101272,2765],{"class":72},[33,101274,226],{"class":47},[33,101276,101277],{"class":35,"line":76},[33,101278,101279],{"class":2487},"#使用dstack\n",[33,101281,101282],{"class":35,"line":87},[33,101283,101284],{"class":47},"np.dstack((aaa,bbb)).shape\n",[33,101286,101287],{"class":35,"line":96},[33,101288,101289],{"class":2487},"#结果：（2，3，12）\n",[2331,101291,101292],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":101294},[101295,101296,101297,101298],{"id":100234,"depth":51,"text":100235},{"id":100848,"depth":51,"text":100849},{"id":101019,"depth":51,"text":101020},{"id":101190,"depth":51,"text":101191},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":100226,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101305,"title":101306,"body":101307,"description":2359,"extension":2360,"meta":101582,"navigation":99,"path":101583,"seo":101584,"stem":101585,"__hash__":101586},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101308,"toc":101580},[101309,101312,101315,101409,101412,101415,101418,101421,101424,101427,101430,101433,101577],[10,101310,101306],{"id":101311},"_7数组转置",[19,101313,101314],{},"使用transpose()函数",[23,101316,101318],{"className":25,"code":101317,"language":27,"meta":28,"style":28},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[30,101319,101320,101330,101354,101359,101364,101369,101374,101382,101386,101390,101395,101400,101405],{"__ignoreMap":28},[33,101321,101322,101324,101326,101328],{"class":35,"line":36},[33,101323,32627],{"class":39},[33,101325,33610],{"class":47},[33,101327,33613],{"class":39},[33,101329,33616],{"class":47},[33,101331,101332,101334,101336,101338,101340,101342,101344,101346,101348,101350,101352],{"class":35,"line":51},[33,101333,2663],{"class":47},[33,101335,57],{"class":39},[33,101337,33946],{"class":47},[33,101339,720],{"class":72},[33,101341,2799],{"class":47},[33,101343,2940],{"class":72},[33,101345,95215],{"class":47},[33,101347,753],{"class":72},[33,101349,2799],{"class":47},[33,101351,730],{"class":72},[33,101353,226],{"class":47},[33,101355,101356],{"class":35,"line":64},[33,101357,101358],{"class":2487},"#二维数组转置\n",[33,101360,101361],{"class":35,"line":76},[33,101362,101363],{"class":2487},"#调用transpose()函数\n",[33,101365,101366],{"class":35,"line":87},[33,101367,101368],{"class":47},"a.transpose()\n",[33,101370,101371],{"class":35,"line":96},[33,101372,101373],{"class":2487},"#对于二维数组也可以采用.T来实现\n",[33,101375,101376,101379],{"class":35,"line":103},[33,101377,101378],{"class":47},"a.T",[33,101380,101381],{"class":2487},"#与上述代码一样\n",[33,101383,101384],{"class":35,"line":108},[33,101385,95772],{"class":2487},[33,101387,101388],{"class":35,"line":119},[33,101389,96136],{"class":60},[33,101391,101392],{"class":35,"line":128},[33,101393,101394],{"class":60},"array([[ 1,  4,  7, 10],\n",[33,101396,101397],{"class":35,"line":1753},[33,101398,101399],{"class":60},"       [ 2,  5,  8, 11],\n",[33,101401,101402],{"class":35,"line":1763},[33,101403,101404],{"class":60},"       [ 3,  6,  9, 12]])\n",[33,101406,101407],{"class":35,"line":1775},[33,101408,96136],{"class":60},[19,101410,101411],{},"也可以使用np.transpose()的形式",[19,101413,101414],{},"#多维数组进行转置 np.transpose()",[19,101416,101417],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101419,101420],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101422,101423],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101425,101426],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101428,101429],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101431,101432],{},"四维及以上的数组也是一样的道理",[23,101434,101436],{"className":25,"code":101435,"language":27,"meta":28,"style":28},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[30,101437,101438,101466,101471,101476,101481,101499,101504,101536,101541,101546,101551,101572],{"__ignoreMap":28},[33,101439,101440,101442,101444,101446,101448,101450,101452,101454,101456,101458,101460,101462,101464],{"class":35,"line":36},[33,101441,3232],{"class":47},[33,101443,57],{"class":39},[33,101445,95210],{"class":47},[33,101447,720],{"class":72},[33,101449,2799],{"class":47},[33,101451,2747],{"class":72},[33,101453,95215],{"class":47},[33,101455,730],{"class":72},[33,101457,2799],{"class":47},[33,101459,2765],{"class":72},[33,101461,2799],{"class":47},[33,101463,725],{"class":72},[33,101465,226],{"class":47},[33,101467,101468],{"class":35,"line":51},[33,101469,101470],{"class":47},"x.shape\n",[33,101472,101473],{"class":35,"line":64},[33,101474,101475],{"class":2487},"#结果：（3,6,2）\n",[33,101477,101478],{"class":35,"line":76},[33,101479,101480],{"class":2487},"#使用np.transpose()进行转置 变为(2,6,3)\n",[33,101482,101483,101486,101488,101490,101492,101494,101496],{"class":35,"line":87},[33,101484,101485],{"class":47},"np.transpose(x,(",[33,101487,725],{"class":72},[33,101489,2799],{"class":47},[33,101491,720],{"class":72},[33,101493,2799],{"class":47},[33,101495,2617],{"class":72},[33,101497,101498],{"class":47},")).shape\n",[33,101500,101501],{"class":35,"line":96},[33,101502,101503],{"class":2487},"#结果：(2,6,3)\n",[33,101505,101506,101508,101510,101512,101514,101516,101518,101520,101522,101524,101526,101528,101530,101532,101534],{"class":35,"line":103},[33,101507,100713],{"class":47},[33,101509,57],{"class":39},[33,101511,95210],{"class":47},[33,101513,720],{"class":72},[33,101515,2799],{"class":47},[33,101517,2747],{"class":72},[33,101519,95215],{"class":47},[33,101521,730],{"class":72},[33,101523,2799],{"class":47},[33,101525,725],{"class":72},[33,101527,2799],{"class":47},[33,101529,720],{"class":72},[33,101531,2799],{"class":47},[33,101533,2765],{"class":72},[33,101535,226],{"class":47},[33,101537,101538],{"class":35,"line":108},[33,101539,101540],{"class":47},"aaaa.shape\n",[33,101542,101543],{"class":35,"line":119},[33,101544,101545],{"class":2487},"#结果：（3，2，1，6）\n",[33,101547,101548],{"class":35,"line":128},[33,101549,101550],{"class":2487},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[33,101552,101553,101556,101558,101560,101562,101564,101566,101568,101570],{"class":35,"line":1753},[33,101554,101555],{"class":47},"np.transpose(aaaa,(",[33,101557,720],{"class":72},[33,101559,2799],{"class":47},[33,101561,725],{"class":72},[33,101563,2799],{"class":47},[33,101565,2617],{"class":72},[33,101567,2799],{"class":47},[33,101569,730],{"class":72},[33,101571,101498],{"class":47},[33,101573,101574],{"class":35,"line":1763},[33,101575,101576],{"class":2487},"#结果：(2,1,3,6)\n",[2331,101578,101579],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":101581},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101306,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101588,"title":101589,"body":101590,"description":2359,"extension":2360,"meta":102324,"navigation":99,"path":102325,"seo":102326,"stem":102327,"__hash__":102328},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101591,"toc":102322},[101592,101595,101598,101601,101604,101607,101610,101613,101616,101725,101728,101731,102319],[10,101593,101589],{"id":101594},"_8数组分割",[19,101596,101597],{},"split分割",[19,101599,101600],{},"numpy.split(ary,indics_or_sections,axis)",[19,101602,101603],{},"解释：",[19,101605,101606],{},"ary:被分割的数组",[19,101608,101609],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101611,101612],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101614,101615],{},"①一维数组的分割",[23,101617,101619],{"className":25,"code":101618,"language":27,"meta":28,"style":28},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[30,101620,101621,101637,101642,101651,101655,101660,101668,101672,101677,101682,101695,101699,101704,101716,101720],{"__ignoreMap":28},[33,101622,101623,101625,101627,101629,101631,101633,101635],{"class":35,"line":36},[33,101624,2663],{"class":47},[33,101626,57],{"class":39},[33,101628,95210],{"class":47},[33,101630,720],{"class":72},[33,101632,2799],{"class":47},[33,101634,2840],{"class":72},[33,101636,226],{"class":47},[33,101638,101639],{"class":35,"line":51},[33,101640,101641],{"class":2487},"#如果传入整数，必须能够平分，否则会报错\n",[33,101643,101644,101647,101649],{"class":35,"line":64},[33,101645,101646],{"class":47},"np.split(a,",[33,101648,725],{"class":72},[33,101650,226],{"class":47},[33,101652,101653],{"class":35,"line":76},[33,101654,95772],{"class":2487},[33,101656,101657],{"class":35,"line":87},[33,101658,101659],{"class":2487},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[33,101661,101662,101664,101666],{"class":35,"line":96},[33,101663,101646],{"class":47},[33,101665,753],{"class":72},[33,101667,226],{"class":47},[33,101669,101670],{"class":35,"line":103},[33,101671,95772],{"class":2487},[33,101673,101674],{"class":35,"line":108},[33,101675,101676],{"class":2487},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[33,101678,101679],{"class":35,"line":119},[33,101680,101681],{"class":2487},"#传入数组\n",[33,101683,101684,101687,101689,101691,101693],{"class":35,"line":128},[33,101685,101686],{"class":47},"np.split(a,[",[33,101688,730],{"class":72},[33,101690,2799],{"class":47},[33,101692,758],{"class":72},[33,101694,6907],{"class":47},[33,101696,101697],{"class":35,"line":1753},[33,101698,95772],{"class":2487},[33,101700,101701],{"class":35,"line":1763},[33,101702,101703],{"class":2487},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[33,101705,101706,101708,101710,101712,101714],{"class":35,"line":1775},[33,101707,101686],{"class":47},[33,101709,758],{"class":72},[33,101711,2799],{"class":47},[33,101713,2790],{"class":72},[33,101715,6907],{"class":47},[33,101717,101718],{"class":35,"line":1780},[33,101719,95772],{"class":2487},[33,101721,101722],{"class":35,"line":1785},[33,101723,101724],{"class":2487},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101726,101727],{},"②二维数组的分割",[19,101729,101730],{},"使用split()",[23,101732,101734],{"className":25,"code":101733,"language":27,"meta":28,"style":28},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[30,101735,101736,101741,101765,101770,101779,101783,101787,101792,101797,101802,101807,101812,101817,101822,101826,101839,101843,101847,101851,101855,101859,101864,101869,101874,101878,101883,101899,101903,101907,101912,101917,101922,101927,101932,101937,101942,101947,101952,101957,101962,101967,101972,101977,101982,101987,101992,101997,102001,102005,102025,102029,102033,102038,102043,102048,102053,102058,102063,102068,102073,102078,102083,102088,102093,102098,102103,102108,102113,102118,102123,102127,102132,102141,102145,102149,102153,102157,102161,102165,102169,102173,102177,102186,102190,102194,102198,102202,102206,102210,102214,102218,102222,102226,102230,102234,102238,102242,102246,102250,102254,102258,102262,102266,102270,102283,102287,102291,102295,102299,102303,102307,102311,102315],{"__ignoreMap":28},[33,101737,101738],{"class":35,"line":36},[33,101739,101740],{"class":2487},"#二维数组分割\n",[33,101742,101743,101745,101747,101749,101751,101753,101755,101757,101759,101761,101763],{"class":35,"line":51},[33,101744,95514],{"class":47},[33,101746,57],{"class":39},[33,101748,95210],{"class":47},[33,101750,720],{"class":72},[33,101752,2799],{"class":47},[33,101754,2747],{"class":72},[33,101756,95215],{"class":47},[33,101758,2765],{"class":72},[33,101760,2799],{"class":47},[33,101762,2765],{"class":72},[33,101764,226],{"class":47},[33,101766,101767],{"class":35,"line":64},[33,101768,101769],{"class":2487},"#默认axis=0  传入整数平均分,按行来的\n",[33,101771,101772,101775,101777],{"class":35,"line":76},[33,101773,101774],{"class":47},"np.split(aa,",[33,101776,730],{"class":72},[33,101778,226],{"class":47},[33,101780,101781],{"class":35,"line":87},[33,101782,97971],{"class":2487},[33,101784,101785],{"class":35,"line":96},[33,101786,96136],{"class":60},[33,101788,101789],{"class":35,"line":103},[33,101790,101791],{"class":60},"[array([[ 1,  2,  3,  4,  5,  6],\n",[33,101793,101794],{"class":35,"line":108},[33,101795,101796],{"class":60},"        [ 7,  8,  9, 10, 11, 12]]),\n",[33,101798,101799],{"class":35,"line":119},[33,101800,101801],{"class":60}," array([[13, 14, 15, 16, 17, 18],\n",[33,101803,101804],{"class":35,"line":128},[33,101805,101806],{"class":60},"        [19, 20, 21, 22, 23, 24]]),\n",[33,101808,101809],{"class":35,"line":1753},[33,101810,101811],{"class":60}," array([[25, 26, 27, 28, 29, 30],\n",[33,101813,101814],{"class":35,"line":1763},[33,101815,101816],{"class":60},"        [31, 32, 33, 34, 35, 36]])]\n",[33,101818,101819],{"class":35,"line":1775},[33,101820,101821],{"class":60}," '''\n",[33,101823,101824],{"class":35,"line":1780},[33,101825,101681],{"class":2487},[33,101827,101828,101831,101833,101835,101837],{"class":35,"line":1785},[33,101829,101830],{"class":47},"np.split(aa,[",[33,101832,725],{"class":72},[33,101834,2799],{"class":47},[33,101836,758],{"class":72},[33,101838,6907],{"class":47},[33,101840,101841],{"class":35,"line":1940},[33,101842,97971],{"class":2487},[33,101844,101845],{"class":35,"line":2183},[33,101846,96136],{"class":60},[33,101848,101849],{"class":35,"line":2208},[33,101850,101791],{"class":60},[33,101852,101853],{"class":35,"line":2234},[33,101854,101796],{"class":60},[33,101856,101857],{"class":35,"line":2239},[33,101858,101801],{"class":60},[33,101860,101861],{"class":35,"line":2247},[33,101862,101863],{"class":60},"        [19, 20, 21, 22, 23, 24],\n",[33,101865,101866],{"class":35,"line":2255},[33,101867,101868],{"class":60},"        [25, 26, 27, 28, 29, 30]]),\n",[33,101870,101871],{"class":35,"line":3992},[33,101872,101873],{"class":60}," array([[31, 32, 33, 34, 35, 36]])]\n",[33,101875,101876],{"class":35,"line":4009},[33,101877,96136],{"class":60},[33,101879,101880],{"class":35,"line":4014},[33,101881,101882],{"class":2487},"#axis=1 按照列来分\n",[33,101884,101885,101887,101889,101891,101893,101895,101897],{"class":35,"line":4019},[33,101886,101774],{"class":47},[33,101888,730],{"class":72},[33,101890,2799],{"class":47},[33,101892,49736],{"class":289},[33,101894,57],{"class":39},[33,101896,720],{"class":72},[33,101898,226],{"class":47},[33,101900,101901],{"class":35,"line":4024},[33,101902,97971],{"class":2487},[33,101904,101905],{"class":35,"line":4038},[33,101906,96136],{"class":60},[33,101908,101909],{"class":35,"line":4043},[33,101910,101911],{"class":60},"[array([[ 1,  2],\n",[33,101913,101914],{"class":35,"line":4834},[33,101915,101916],{"class":60},"        [ 7,  8],\n",[33,101918,101919],{"class":35,"line":4848},[33,101920,101921],{"class":60},"        [13, 14],\n",[33,101923,101924],{"class":35,"line":4856},[33,101925,101926],{"class":60},"        [19, 20],\n",[33,101928,101929],{"class":35,"line":4861},[33,101930,101931],{"class":60},"        [25, 26],\n",[33,101933,101934],{"class":35,"line":4867},[33,101935,101936],{"class":60},"        [31, 32]]),\n",[33,101938,101939],{"class":35,"line":4873},[33,101940,101941],{"class":60}," array([[ 3,  4],\n",[33,101943,101944],{"class":35,"line":4878},[33,101945,101946],{"class":60},"        [ 9, 10],\n",[33,101948,101949],{"class":35,"line":10194},[33,101950,101951],{"class":60},"        [15, 16],\n",[33,101953,101954],{"class":35,"line":10218},[33,101955,101956],{"class":60},"        [21, 22],\n",[33,101958,101959],{"class":35,"line":10223},[33,101960,101961],{"class":60},"        [27, 28],\n",[33,101963,101964],{"class":35,"line":10229},[33,101965,101966],{"class":60},"        [33, 34]]),\n",[33,101968,101969],{"class":35,"line":10256},[33,101970,101971],{"class":60}," array([[ 5,  6],\n",[33,101973,101974],{"class":35,"line":10261},[33,101975,101976],{"class":60},"        [11, 12],\n",[33,101978,101979],{"class":35,"line":10267},[33,101980,101981],{"class":60},"        [17, 18],\n",[33,101983,101984],{"class":35,"line":10279},[33,101985,101986],{"class":60},"        [23, 24],\n",[33,101988,101989],{"class":35,"line":10291},[33,101990,101991],{"class":60},"        [29, 30],\n",[33,101993,101994],{"class":35,"line":10303},[33,101995,101996],{"class":60},"        [35, 36]])]\n",[33,101998,101999],{"class":35,"line":11961},[33,102000,101821],{"class":60},[33,102002,102003],{"class":35,"line":11986},[33,102004,101681],{"class":2487},[33,102006,102007,102009,102011,102013,102015,102017,102019,102021,102023],{"class":35,"line":12009},[33,102008,101830],{"class":47},[33,102010,720],{"class":72},[33,102012,2799],{"class":47},[33,102014,725],{"class":72},[33,102016,43832],{"class":47},[33,102018,49736],{"class":289},[33,102020,57],{"class":39},[33,102022,720],{"class":72},[33,102024,226],{"class":47},[33,102026,102027],{"class":35,"line":12033},[33,102028,95772],{"class":2487},[33,102030,102031],{"class":35,"line":12038},[33,102032,96136],{"class":60},[33,102034,102035],{"class":35,"line":12043},[33,102036,102037],{"class":60},"[array([[ 1],\n",[33,102039,102040],{"class":35,"line":12048},[33,102041,102042],{"class":60},"        [ 7],\n",[33,102044,102045],{"class":35,"line":12057},[33,102046,102047],{"class":60},"        [13],\n",[33,102049,102050],{"class":35,"line":12062},[33,102051,102052],{"class":60},"        [19],\n",[33,102054,102055],{"class":35,"line":12068},[33,102056,102057],{"class":60},"        [25],\n",[33,102059,102060],{"class":35,"line":12089},[33,102061,102062],{"class":60},"        [31]]),\n",[33,102064,102065],{"class":35,"line":12095},[33,102066,102067],{"class":60}," array([[ 2],\n",[33,102069,102070],{"class":35,"line":12109},[33,102071,102072],{"class":60},"        [ 8],\n",[33,102074,102075],{"class":35,"line":12115},[33,102076,102077],{"class":60},"        [14],\n",[33,102079,102080],{"class":35,"line":12142},[33,102081,102082],{"class":60},"        [20],\n",[33,102084,102085],{"class":35,"line":12151},[33,102086,102087],{"class":60},"        [26],\n",[33,102089,102090],{"class":35,"line":12157},[33,102091,102092],{"class":60},"        [32]]),\n",[33,102094,102095],{"class":35,"line":12165},[33,102096,102097],{"class":60}," array([[ 3,  4,  5,  6],\n",[33,102099,102100],{"class":35,"line":12170},[33,102101,102102],{"class":60},"        [ 9, 10, 11, 12],\n",[33,102104,102105],{"class":35,"line":18842},[33,102106,102107],{"class":60},"        [15, 16, 17, 18],\n",[33,102109,102110],{"class":35,"line":18848},[33,102111,102112],{"class":60},"        [21, 22, 23, 24],\n",[33,102114,102115],{"class":35,"line":18871},[33,102116,102117],{"class":60},"        [27, 28, 29, 30],\n",[33,102119,102120],{"class":35,"line":18877},[33,102121,102122],{"class":60},"        [33, 34, 35, 36]])]\n",[33,102124,102125],{"class":35,"line":18900},[33,102126,96136],{"class":60},[33,102128,102129],{"class":35,"line":18914},[33,102130,102131],{"class":2487},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[33,102133,102134,102137,102139],{"class":35,"line":18934},[33,102135,102136],{"class":47},"np.vsplit(aa,",[33,102138,730],{"class":72},[33,102140,226],{"class":47},[33,102142,102143],{"class":35,"line":18940},[33,102144,95772],{"class":2487},[33,102146,102147],{"class":35,"line":18951},[33,102148,96136],{"class":60},[33,102150,102151],{"class":35,"line":18974},[33,102152,101791],{"class":60},[33,102154,102155],{"class":35,"line":18996},[33,102156,101796],{"class":60},[33,102158,102159],{"class":35,"line":19001},[33,102160,101801],{"class":60},[33,102162,102163],{"class":35,"line":19007},[33,102164,101806],{"class":60},[33,102166,102167],{"class":35,"line":19021},[33,102168,101811],{"class":60},[33,102170,102171],{"class":35,"line":19034},[33,102172,101816],{"class":60},[33,102174,102175],{"class":35,"line":19039},[33,102176,96136],{"class":60},[33,102178,102179,102182,102184],{"class":35,"line":19053},[33,102180,102181],{"class":47},"np.hsplit(aa,",[33,102183,730],{"class":72},[33,102185,226],{"class":47},[33,102187,102188],{"class":35,"line":19058},[33,102189,95772],{"class":2487},[33,102191,102192],{"class":35,"line":19064},[33,102193,96136],{"class":60},[33,102195,102196],{"class":35,"line":19069},[33,102197,101911],{"class":60},[33,102199,102200],{"class":35,"line":19083},[33,102201,101916],{"class":60},[33,102203,102204],{"class":35,"line":19088},[33,102205,101921],{"class":60},[33,102207,102208],{"class":35,"line":19093},[33,102209,101926],{"class":60},[33,102211,102212],{"class":35,"line":19107},[33,102213,101931],{"class":60},[33,102215,102216],{"class":35,"line":19119},[33,102217,101936],{"class":60},[33,102219,102220],{"class":35,"line":19124},[33,102221,101941],{"class":60},[33,102223,102224],{"class":35,"line":19137},[33,102225,101946],{"class":60},[33,102227,102228],{"class":35,"line":19142},[33,102229,101951],{"class":60},[33,102231,102232],{"class":35,"line":19147},[33,102233,101956],{"class":60},[33,102235,102236],{"class":35,"line":19152},[33,102237,101961],{"class":60},[33,102239,102240],{"class":35,"line":19165},[33,102241,101966],{"class":60},[33,102243,102244],{"class":35,"line":19170},[33,102245,101971],{"class":60},[33,102247,102248],{"class":35,"line":34859},[33,102249,101976],{"class":60},[33,102251,102252],{"class":35,"line":34865},[33,102253,101981],{"class":60},[33,102255,102256],{"class":35,"line":34871},[33,102257,101986],{"class":60},[33,102259,102260],{"class":35,"line":34877},[33,102261,101991],{"class":60},[33,102263,102264],{"class":35,"line":34883},[33,102265,101996],{"class":60},[33,102267,102268],{"class":35,"line":34894},[33,102269,96136],{"class":60},[33,102271,102272,102275,102277,102279,102281],{"class":35,"line":34900},[33,102273,102274],{"class":47},"np.vsplit(aa,[",[33,102276,725],{"class":72},[33,102278,2799],{"class":47},[33,102280,758],{"class":72},[33,102282,6907],{"class":47},[33,102284,102285],{"class":35,"line":34920},[33,102286,95772],{"class":2487},[33,102288,102289],{"class":35,"line":34926},[33,102290,96136],{"class":60},[33,102292,102293],{"class":35,"line":34937},[33,102294,101791],{"class":60},[33,102296,102297],{"class":35,"line":34943},[33,102298,101796],{"class":60},[33,102300,102301],{"class":35,"line":34949},[33,102302,101801],{"class":60},[33,102304,102305],{"class":35,"line":34955},[33,102306,101863],{"class":60},[33,102308,102309],{"class":35,"line":34961},[33,102310,101868],{"class":60},[33,102312,102313],{"class":35,"line":34967},[33,102314,101873],{"class":60},[33,102316,102317],{"class":35,"line":34973},[33,102318,101821],{"class":60},[2331,102320,102321],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":102323},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101589,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102330,"title":102331,"body":102332,"description":2359,"extension":2360,"meta":102826,"navigation":99,"path":102827,"seo":102828,"stem":102829,"__hash__":102830},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102333,"toc":102817},[102334,102337,102340,102365,102369,102428,102480,102484,102486,102522,102576,102578,102616,102687,102691,102696,102700,102703,102736,102739,102743,102746,102749,102752,102755,102760,102764,102767,102770,102773,102776,102781,102785,102790,102793,102814],[10,102335,102331],{"id":102336},"_9数学函数",[19,102338,102339],{},"补充回顾：python的列表推导式",[23,102341,102343],{"className":25,"code":102342,"language":27,"meta":28,"style":28},"[1\u002Fi for i in a]\n",[30,102344,102345],{"__ignoreMap":28},[33,102346,102347,102349,102351,102353,102356,102358,102360,102362],{"class":35,"line":36},[33,102348,3300],{"class":47},[33,102350,720],{"class":72},[33,102352,3001],{"class":39},[33,102354,102355],{"class":47},"i ",[33,102357,5282],{"class":39},[33,102359,11684],{"class":47},[33,102361,681],{"class":39},[33,102363,102364],{"class":47}," a]\n",[14,102366,102368],{"id":102367},"_91-求倒数","9.1 求倒数",[23,102370,102372],{"className":25,"code":102371,"language":27,"meta":28,"style":28},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[30,102373,102374,102379,102407,102419],{"__ignoreMap":28},[33,102375,102376],{"class":35,"line":36},[33,102377,102378],{"class":2487},"#数组求倒数\n",[33,102380,102381,102383,102385,102387,102389,102391,102393,102395,102397,102399,102401,102403,102405],{"class":35,"line":51},[33,102382,2663],{"class":47},[33,102384,57],{"class":39},[33,102386,3300],{"class":47},[33,102388,720],{"class":72},[33,102390,2799],{"class":47},[33,102392,725],{"class":72},[33,102394,2799],{"class":47},[33,102396,730],{"class":72},[33,102398,2799],{"class":47},[33,102400,753],{"class":72},[33,102402,2799],{"class":47},[33,102404,758],{"class":72},[33,102406,919],{"class":47},[33,102408,102409,102411,102413,102416],{"class":35,"line":64},[33,102410,2687],{"class":47},[33,102412,57],{"class":39},[33,102414,102415],{"class":47},"np.array(a)",[33,102417,102418],{"class":2487},"#将列表转换为数组\n",[33,102420,102421,102423,102425],{"class":35,"line":76},[33,102422,720],{"class":72},[33,102424,3001],{"class":39},[33,102426,102427],{"class":47},"b\n",[23,102429,102431],{"className":25,"code":102430,"language":27,"meta":28,"style":28},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[30,102432,102433,102461,102470,102475],{"__ignoreMap":28},[33,102434,102435,102437,102439,102441,102443,102445,102447,102449,102451,102453,102455,102457,102459],{"class":35,"line":36},[33,102436,2663],{"class":47},[33,102438,57],{"class":39},[33,102440,3300],{"class":47},[33,102442,720],{"class":72},[33,102444,2799],{"class":47},[33,102446,725],{"class":72},[33,102448,2799],{"class":47},[33,102450,730],{"class":72},[33,102452,2799],{"class":47},[33,102454,753],{"class":72},[33,102456,2799],{"class":47},[33,102458,758],{"class":72},[33,102460,919],{"class":47},[33,102462,102463,102465,102467],{"class":35,"line":51},[33,102464,2687],{"class":47},[33,102466,57],{"class":39},[33,102468,102469],{"class":47},"np.array(a)\n",[33,102471,102472],{"class":35,"line":64},[33,102473,102474],{"class":2487},"#调用numpy中的函数reciprocal()\n",[33,102476,102477],{"class":35,"line":76},[33,102478,102479],{"class":47},"np.reciprocal(b)\n",[14,102481,102483],{"id":102482},"_92-求平方","9.2 求平方",[19,102485,96738],{},[23,102487,102489],{"className":25,"code":102488,"language":27,"meta":28,"style":28},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[30,102490,102491,102496,102501,102517],{"__ignoreMap":28},[33,102492,102493],{"class":35,"line":36},[33,102494,102495],{"class":2487},"#square()，求平方\n",[33,102497,102498],{"class":35,"line":51},[33,102499,102500],{"class":2487},"#一维数组\n",[33,102502,102503,102505,102507,102509,102511,102513,102515],{"class":35,"line":64},[33,102504,2663],{"class":47},[33,102506,57],{"class":39},[33,102508,95210],{"class":47},[33,102510,720],{"class":72},[33,102512,2799],{"class":47},[33,102514,1279],{"class":72},[33,102516,226],{"class":47},[33,102518,102519],{"class":35,"line":76},[33,102520,102521],{"class":47},"np.square(a)\n",[23,102523,102525],{"className":25,"code":102524,"language":27,"meta":28,"style":28},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[30,102526,102527,102532,102537,102558],{"__ignoreMap":28},[33,102528,102529],{"class":35,"line":36},[33,102530,102531],{"class":2487},"#或者通过循环遍历的形式来计算\n",[33,102533,102534],{"class":35,"line":51},[33,102535,102536],{"class":2487},"#这是一个列表\n",[33,102538,102539,102542,102544,102546,102548,102550,102552,102555],{"class":35,"line":64},[33,102540,102541],{"class":47},"[i",[33,102543,657],{"class":39},[33,102545,102355],{"class":47},[33,102547,5282],{"class":39},[33,102549,11684],{"class":47},[33,102551,681],{"class":39},[33,102553,102554],{"class":47}," a]",[33,102556,102557],{"class":2487},"#这个求完之后在数列当中\n",[33,102559,102560,102563,102565,102567,102569,102571,102573],{"class":35,"line":76},[33,102561,102562],{"class":47},"np.array([i",[33,102564,657],{"class":39},[33,102566,102355],{"class":47},[33,102568,5282],{"class":39},[33,102570,11684],{"class":47},[33,102572,681],{"class":39},[33,102574,102575],{"class":47}," a])\n",[19,102577,95499],{},[23,102579,102581],{"className":25,"code":102580,"language":27,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[30,102582,102583,102587,102611],{"__ignoreMap":28},[33,102584,102585],{"class":35,"line":36},[33,102586,95509],{"class":2487},[33,102588,102589,102591,102593,102595,102597,102599,102601,102603,102605,102607,102609],{"class":35,"line":51},[33,102590,95514],{"class":47},[33,102592,57],{"class":39},[33,102594,95210],{"class":47},[33,102596,720],{"class":72},[33,102598,2799],{"class":47},[33,102600,2940],{"class":72},[33,102602,95215],{"class":47},[33,102604,753],{"class":72},[33,102606,2799],{"class":47},[33,102608,730],{"class":72},[33,102610,226],{"class":47},[33,102612,102613],{"class":35,"line":64},[33,102614,102615],{"class":47},"np.square(aa)\n",[23,102617,102619],{"className":25,"code":102618,"language":27,"meta":28,"style":28},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[30,102620,102621,102626,102635,102651,102667,102682],{"__ignoreMap":28},[33,102622,102623],{"class":35,"line":36},[33,102624,102625],{"class":2487},"#传统的方式\n",[33,102627,102628,102630,102632],{"class":35,"line":51},[33,102629,100394],{"class":47},[33,102631,57],{"class":39},[33,102633,102634],{"class":47},"np.empty_like(aa)\n",[33,102636,102637,102639,102641,102643,102645,102647,102649],{"class":35,"line":64},[33,102638,5282],{"class":39},[33,102640,11684],{"class":47},[33,102642,681],{"class":39},[33,102644,34670],{"class":72},[33,102646,133],{"class":47},[33,102648,753],{"class":72},[33,102650,366],{"class":47},[33,102652,102653,102655,102657,102659,102661,102663,102665],{"class":35,"line":76},[33,102654,675],{"class":39},[33,102656,11745],{"class":47},[33,102658,681],{"class":39},[33,102660,34670],{"class":72},[33,102662,133],{"class":47},[33,102664,730],{"class":72},[33,102666,366],{"class":47},[33,102668,102669,102672,102674,102677,102679],{"class":35,"line":87},[33,102670,102671],{"class":47},"        bb[i,j]",[33,102673,57],{"class":39},[33,102675,102676],{"class":47},"aa[i,j]",[33,102678,657],{"class":39},[33,102680,102681],{"class":47},"aa[i,j]\n",[33,102683,102684],{"class":35,"line":96},[33,102685,102686],{"class":47},"bb\n",[14,102688,102690],{"id":102689},"_93-求各元素的符号","9.3 求各元素的符号",[19,102692,102693],{},[3736,102694],{"alt":28,"src":102695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102697,102699],{"id":102698},"_94-modf函数","9.4 modf函数",[19,102701,102702],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[23,102704,102706],{"className":25,"code":102705,"language":27,"meta":28,"style":28},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[30,102707,102708,102731],{"__ignoreMap":28},[33,102709,102710,102712,102714,102716,102718,102720,102722,102724,102726,102729],{"class":35,"line":36},[33,102711,2663],{"class":47},[33,102713,57],{"class":39},[33,102715,95210],{"class":47},[33,102717,2949],{"class":39},[33,102719,1279],{"class":72},[33,102721,2799],{"class":47},[33,102723,1279],{"class":72},[33,102725,2799],{"class":47},[33,102727,102728],{"class":72},"0.3",[33,102730,226],{"class":47},[33,102732,102733],{"class":35,"line":51},[33,102734,102735],{"class":47},"np.modf(a)\n",[19,102737,102738],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102740,102742],{"id":102741},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102744,102745],{},"np.cell()",[19,102747,102748],{},"np.floor()",[19,102750,102751],{},"np.rint()",[19,102753,102754],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102756,102757],{},[3736,102758],{"alt":28,"src":102759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102761,102763],{"id":102762},"_96-around函数","9.6 around()函数",[19,102765,102766],{},"around()函数也可以实现对数的小数位数进行操作",[19,102768,102769],{},"其中的参数：",[19,102771,102772],{},"1.要传的数组",[19,102774,102775],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102777,102778],{},[3736,102779],{"alt":28,"src":102780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102782,102784],{"id":102783},"_97-三角函数","9.7 三角函数",[19,102786,102787],{},[3736,102788],{"alt":28,"src":102789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102791,102792],{},"引入图像模块非常重要",[23,102794,102796],{"className":25,"code":102795,"language":27,"meta":28,"style":28},"from matplotlib import pyplot as plt\n",[30,102797,102798],{"__ignoreMap":28},[33,102799,102800,102802,102805,102807,102810,102812],{"class":35,"line":36},[33,102801,32970],{"class":39},[33,102803,102804],{"class":47}," matplotlib ",[33,102806,32627],{"class":39},[33,102808,102809],{"class":47}," pyplot ",[33,102811,33613],{"class":39},[33,102813,33667],{"class":47},[2331,102815,102816],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":102818},[102819,102820,102821,102822,102823,102824,102825],{"id":102367,"depth":51,"text":102368},{"id":102482,"depth":51,"text":102483},{"id":102689,"depth":51,"text":102690},{"id":102698,"depth":51,"text":102699},{"id":102741,"depth":51,"text":102742},{"id":102762,"depth":51,"text":102763},{"id":102783,"depth":51,"text":102784},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102331,"description":2359},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102832,"title":102833,"body":102834,"description":2359,"extension":2360,"meta":102838,"navigation":99,"path":102839,"seo":102840,"stem":102841,"__hash__":102842},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102835,"toc":102836},[],{"title":28,"searchDepth":51,"depth":51,"links":102837},[],{"category":52642},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102833,"description":2359},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102844,"title":102845,"body":102846,"description":28,"extension":2360,"meta":104852,"navigation":99,"path":104853,"seo":104854,"stem":104855,"__hash__":104856},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102847,"toc":104828},[102848,102851,102855,102858,102861,102867,102870,102893,102896,102930,102933,102974,102978,102981,103074,103077,103121,103124,103141,103144,103158,103161,103164,103209,103212,103248,103252,103255,103261,103266,103286,103290,103293,103359,103362,103380,103384,103387,103416,103426,103432,103436,103439,103445,103456,103460,103463,103493,103496,103775,103778,103781,103792,103795,103798,103820,103827,103830,103848,103851,103854,103868,103876,103879,103905,103911,103914,103917,103927,103939,103959,103968,103988,103998,104022,104035,104049,104054,104095,104112,104137,104149,104169,104175,104220,104239,104256,104269,104285,104292,104304,104313,104348,104369,104394,104407,104431,104446,104471,104474,104495,104504,104507,104518,104522,104525,104531,104543,104550,104554,104557,104569,104572,104586,104589,104599,104609,104612,104652,104655,104659,104665,104668,104682,104686,104689,104722,104726,104729,104752,104760,104763,104769,104775,104778,104781,104809,104813,104816,104822,104825],[10,102849,102845],{"id":102850},"_1环境安装与第一个-mujoco-程序",[14,102852,102854],{"id":102853},"_1目标说明","1.目标说明",[19,102856,102857],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102859,102860],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[23,102862,102865],{"className":102863,"code":102864,"language":7436,"meta":28},[7434],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[30,102866,102864],{"__ignoreMap":28},[19,102868,102869],{},"需要掌握:",[328,102871,102872,102875,102878,102883,102888],{},[331,102873,102874],{},"Fedora 44 下 MuJoCo 的系统依赖",[331,102876,102877],{},"Python 虚拟环境创建",[331,102879,102880],{},[30,102881,102882],{},"mujoco.MjModel",[331,102884,102885],{},[30,102886,102887],{},"mujoco.MjData",[331,102889,102890],{},[30,102891,102892],{},"mujoco.mj_step(model, data)",[19,102894,102895],{},"MuJoCo 中最重要的两个对象:",[2563,102897,102898,102908],{},[2566,102899,102900],{},[2569,102901,102902,102905],{},[2572,102903,102904],{"align":25974},"对象",[2572,102906,102907],{"align":25974},"含义",[2610,102909,102910,102920],{},[2569,102911,102912,102917],{},[2615,102913,102914],{"align":25974},[30,102915,102916],{},"MjModel",[2615,102918,102919],{"align":25974},"模型结构，来自 XML，基本不随时间变化",[2569,102921,102922,102927],{},[2615,102923,102924],{"align":25974},[30,102925,102926],{},"MjData",[2615,102928,102929],{"align":25974},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102931,102932],{},"可以先用一个类比理解：",[2563,102934,102935,102945],{},[2566,102936,102937],{},[2569,102938,102939,102942],{},[2572,102940,102941],{"align":25974},"类比",[2572,102943,102944],{"align":25974},"MuJoCo 对象",[2610,102946,102947,102956,102965],{},[2569,102948,102949,102952],{},[2615,102950,102951],{"align":25974},"游戏地图和角色配置",[2615,102953,102954],{"align":25974},[30,102955,102916],{},[2569,102957,102958,102961],{},[2615,102959,102960],{"align":25974},"游戏运行到当前帧的状态",[2615,102962,102963],{"align":25974},[30,102964,102926],{},[2569,102966,102967,102970],{},[2615,102968,102969],{"align":25974},"前进一帧",[2615,102971,102972],{"align":25974},[30,102973,102892],{},[14,102975,102977],{"id":102976},"_2环境与依赖安装","2.环境与依赖安装",[19,102979,102980],{},"Fedora 44 系统依赖:",[23,102982,102984],{"className":26060,"code":102983,"language":26062,"meta":28,"style":28},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[30,102985,102986,102998,103011,103024,103034,103044,103063],{"__ignoreMap":28},[33,102987,102988,102990,102992,102994,102996],{"class":35,"line":36},[33,102989,26815],{"class":43},[33,102991,28553],{"class":60},[33,102993,26072],{"class":60},[33,102995,28638],{"class":72},[33,102997,26917],{"class":72},[33,102999,103000,103003,103006,103009],{"class":35,"line":51},[33,103001,103002],{"class":60},"  python3",[33,103004,103005],{"class":60}," python3-pip",[33,103007,103008],{"class":60}," python3-virtualenv",[33,103010,26917],{"class":72},[33,103012,103013,103016,103019,103022],{"class":35,"line":64},[33,103014,103015],{"class":60},"  mesa-libGL",[33,103017,103018],{"class":60}," mesa-libGLU",[33,103020,103021],{"class":60}," mesa-dri-drivers",[33,103023,26917],{"class":72},[33,103025,103026,103029,103032],{"class":35,"line":76},[33,103027,103028],{"class":60},"  libglvnd-glx",[33,103030,103031],{"class":60}," libglvnd-opengl",[33,103033,26917],{"class":72},[33,103035,103036,103039,103042],{"class":35,"line":87},[33,103037,103038],{"class":60},"  glfw",[33,103040,103041],{"class":60}," glfw-devel",[33,103043,26917],{"class":72},[33,103045,103046,103049,103052,103055,103058,103061],{"class":35,"line":96},[33,103047,103048],{"class":60},"  libX11",[33,103050,103051],{"class":60}," libXcursor",[33,103053,103054],{"class":60}," libXi",[33,103056,103057],{"class":60}," libXinerama",[33,103059,103060],{"class":60}," libXrandr",[33,103062,26917],{"class":72},[33,103064,103065,103068,103071],{"class":35,"line":103},[33,103066,103067],{"class":60},"  gcc",[33,103069,103070],{"class":60}," gcc-c++",[33,103072,103073],{"class":60}," make\n",[19,103075,103076],{},"创建 Python 环境:",[23,103078,103080],{"className":26060,"code":103079,"language":26062,"meta":28,"style":28},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[30,103081,103082,103096,103104],{"__ignoreMap":28},[33,103083,103084,103087,103090,103093],{"class":35,"line":36},[33,103085,103086],{"class":43},"python3",[33,103088,103089],{"class":72}," -m",[33,103091,103092],{"class":60}," venv",[33,103094,103095],{"class":60}," .venv\n",[33,103097,103098,103101],{"class":35,"line":51},[33,103099,103100],{"class":72},"source",[33,103102,103103],{"class":60}," .venv\u002Fbin\u002Factivate\n",[33,103105,103106,103108,103110,103113,103115,103118],{"class":35,"line":64},[33,103107,27],{"class":43},[33,103109,103089],{"class":72},[33,103111,103112],{"class":60}," pip",[33,103114,26072],{"class":60},[33,103116,103117],{"class":72}," --upgrade",[33,103119,103120],{"class":60}," pip\n",[19,103122,103123],{},"pip 安装:",[23,103125,103127],{"className":26060,"code":103126,"language":26062,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy\n",[30,103128,103129],{"__ignoreMap":28},[33,103130,103131,103133,103135,103138],{"class":35,"line":36},[33,103132,26069],{"class":43},[33,103134,26072],{"class":60},[33,103136,103137],{"class":60}," \"mujoco>=2.3\"",[33,103139,103140],{"class":60}," numpy\n",[19,103142,103143],{},"安装完成后，先做最小检查：",[23,103145,103147],{"className":26060,"code":103146,"language":26062,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[30,103148,103149],{"__ignoreMap":28},[33,103150,103151,103153,103155],{"class":35,"line":36},[33,103152,27],{"class":43},[33,103154,32595],{"class":72},[33,103156,103157],{"class":60}," \"import mujoco; print(mujoco.__version__)\"\n",[19,103159,103160],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,103162,103163],{},"conda 安装:",[23,103165,103167],{"className":26060,"code":103166,"language":26062,"meta":28,"style":28},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[30,103168,103169,103189,103199],{"__ignoreMap":28},[33,103170,103171,103173,103175,103177,103180,103183,103186],{"class":35,"line":36},[33,103172,32567],{"class":43},[33,103174,31413],{"class":60},[33,103176,27354],{"class":72},[33,103178,103179],{"class":60}," mujoco-study",[33,103181,103182],{"class":60}," python=",[33,103184,103185],{"class":72},"3.10",[33,103187,103188],{"class":72}," -y\n",[33,103190,103191,103193,103196],{"class":35,"line":51},[33,103192,32567],{"class":43},[33,103194,103195],{"class":60}," activate",[33,103197,103198],{"class":60}," mujoco-study\n",[33,103200,103201,103203,103205,103207],{"class":35,"line":64},[33,103202,26069],{"class":43},[33,103204,26072],{"class":60},[33,103206,103137],{"class":60},[33,103208,103140],{"class":60},[19,103210,103211],{},"版本冲突说明:",[328,103213,103214,103220,103229,103238],{},[331,103215,103216,103217,30622],{},"不要安装 ",[30,103218,103219],{},"mujoco-py",[331,103221,103222,103223,1958,103225,103228],{},"如果旧项目里同时安装了 ",[30,103224,103219],{},[30,103226,103227],{},"mujoco","，建议新建干净虚拟环境。",[331,103230,103231,103234,103235,30622],{},[30,103232,103233],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[30,103236,103237],{},"~\u002F.mujoco\u002Fmujoco210",[331,103239,103240,103241,84748,103244,103247],{},"离屏渲染可能涉及 OpenGL 后端，",[30,103242,103243],{},"MUJOCO_GL=egl",[30,103245,103246],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,103249,103251],{"id":103250},"_3核心概念解释","3.核心概念解释",[19,103253,103254],{},"MuJoCo 的基本执行流程:",[23,103256,103259],{"className":103257,"code":103258,"language":7436,"meta":28},[7434],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[30,103260,103258],{"__ignoreMap":28},[19,103262,103263,103265],{},[30,103264,102916],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,103267,103268,103270,103271,2638,103274,2638,103277,2638,103280,2638,103283,30622],{},[30,103269,102926],{}," 存放仿真运行时状态，例如 ",[30,103272,103273],{},"data.time",[30,103275,103276],{},"data.qpos",[30,103278,103279],{},"data.qvel",[30,103281,103282],{},"data.ctrl",[30,103284,103285],{},"data.xpos",[631,103287,103289],{"id":103288},"xml-是什么","XML 是什么",[19,103291,103292],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[23,103294,103296],{"className":55286,"code":103295,"language":55288,"meta":28,"style":28},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[30,103297,103298,103320,103351],{"__ignoreMap":28},[33,103299,103300,103302,103304,103306,103308,103310,103313,103315,103318],{"class":35,"line":36},[33,103301,2226],{"class":47},[33,103303,54021],{"class":53522},[33,103305,17158],{"class":43},[33,103307,57],{"class":47},[33,103309,55710],{"class":60},[33,103311,103312],{"class":43}," pos",[33,103314,57],{"class":47},[33,103316,103317],{"class":60},"\"0 0 1\"",[33,103319,53529],{"class":47},[33,103321,103322,103324,103327,103329,103331,103334,103336,103338,103340,103343,103345,103348],{"class":35,"line":51},[33,103323,54364],{"class":47},[33,103325,103326],{"class":53522},"geom",[33,103328,17158],{"class":43},[33,103330,57],{"class":47},[33,103332,103333],{"class":60},"\"box_geom\"",[33,103335,56043],{"class":43},[33,103337,57],{"class":47},[33,103339,55710],{"class":60},[33,103341,103342],{"class":43}," size",[33,103344,57],{"class":47},[33,103346,103347],{"class":60},"\"0.1 0.1 0.1\"",[33,103349,103350],{"class":47},"\u002F>\n",[33,103352,103353,103355,103357],{"class":35,"line":64},[33,103354,54006],{"class":47},[33,103356,54021],{"class":53522},[33,103358,53529],{"class":47},[19,103360,103361],{},"这段意思是：",[328,103363,103364,103370,103377],{},[331,103365,103366,103367,103369],{},"创建一个叫 ",[30,103368,55933],{}," 的刚体。",[331,103371,103372,103373,103376],{},"它初始放在 ",[30,103374,103375],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[331,103378,103379],{},"它里面有一个盒子形状的几何体。",[631,103381,103383],{"id":103382},"timestep-是什么","timestep 是什么",[19,103385,103386],{},"XML 里的：",[23,103388,103390],{"className":55286,"code":103389,"language":55288,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[30,103391,103392],{"__ignoreMap":28},[33,103393,103394,103396,103398,103401,103403,103406,103409,103411,103414],{"class":35,"line":36},[33,103395,2226],{"class":47},[33,103397,71382],{"class":53522},[33,103399,103400],{"class":43}," timestep",[33,103402,57],{"class":47},[33,103404,103405],{"class":60},"\"0.01\"",[33,103407,103408],{"class":43}," gravity",[33,103410,57],{"class":47},[33,103412,103413],{"class":60},"\"0 0 -9.81\"",[33,103415,103350],{"class":47},[19,103417,103418,103419,103422,103423,103425],{},"表示每调用一次 ",[30,103420,103421],{},"mj_step","，仿真时间前进 ",[30,103424,41209],{}," 秒。循环 100 次，大约就是 1 秒：",[23,103427,103430],{"className":103428,"code":103429,"language":7436,"meta":28},[7434],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[30,103431,103429],{"__ignoreMap":28},[631,103433,103435],{"id":103434},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103437,103438],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[23,103440,103443],{"className":103441,"code":103442,"language":7436,"meta":28},[7434],"x y z qw qx qy qz\n",[30,103444,103442],{"__ignoreMap":28},[19,103446,103447,103448,103451,103452,103455],{},"表示一个自由刚体的位置和姿态。其中 ",[30,103449,103450],{},"x y z"," 是位置，",[30,103453,103454],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103457,103459],{"id":103458},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103461,103462],{},"新建文件:",[23,103464,103466],{"className":26060,"code":103465,"language":26062,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[30,103467,103468,103478,103485],{"__ignoreMap":28},[33,103469,103470,103473,103475],{"class":35,"line":36},[33,103471,103472],{"class":43},"mkdir",[33,103474,31453],{"class":72},[33,103476,103477],{"class":60}," mujoco_tutorial\n",[33,103479,103480,103483],{"class":35,"line":51},[33,103481,103482],{"class":72},"cd",[33,103484,103477],{"class":60},[33,103486,103487,103490],{"class":35,"line":64},[33,103488,103489],{"class":43},"touch",[33,103491,103492],{"class":60}," ch1_first_sim.py\n",[19,103494,103495],{},"写入:",[23,103497,103499],{"className":25,"code":103498,"language":27,"meta":28,"style":28},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,103500,103501,103508,103512,103516,103526,103531,103536,103540,103545,103550,103554,103559,103564,103569,103574,103579,103584,103588,103592,103596,103609,103623,103633,103637,103649,103661,103673,103685,103697,103701,103718,103723,103727,103738,103749,103753,103757,103770],{"__ignoreMap":28},[33,103502,103503,103505],{"class":35,"line":36},[33,103504,32627],{"class":39},[33,103506,103507],{"class":47}," mujoco\n",[33,103509,103510],{"class":35,"line":51},[33,103511,100],{"emptyLinePlaceholder":99},[33,103513,103514],{"class":35,"line":64},[33,103515,100],{"emptyLinePlaceholder":99},[33,103517,103518,103521,103523],{"class":35,"line":76},[33,103519,103520],{"class":72},"XML",[33,103522,15804],{"class":39},[33,103524,103525],{"class":60}," \"\"\"\n",[33,103527,103528],{"class":35,"line":87},[33,103529,103530],{"class":60},"\u003Cmujoco model=\"first_sim\">\n",[33,103532,103533],{"class":35,"line":96},[33,103534,103535],{"class":60},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,103537,103538],{"class":35,"line":103},[33,103539,100],{"emptyLinePlaceholder":99},[33,103541,103542],{"class":35,"line":108},[33,103543,103544],{"class":60},"  \u003Cworldbody>\n",[33,103546,103547],{"class":35,"line":119},[33,103548,103549],{"class":60},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,103551,103552],{"class":35,"line":128},[33,103553,100],{"emptyLinePlaceholder":99},[33,103555,103556],{"class":35,"line":1753},[33,103557,103558],{"class":60},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,103560,103561],{"class":35,"line":1763},[33,103562,103563],{"class":60},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[33,103565,103566],{"class":35,"line":1775},[33,103567,103568],{"class":60},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,103570,103571],{"class":35,"line":1780},[33,103572,103573],{"class":60},"    \u003C\u002Fbody>\n",[33,103575,103576],{"class":35,"line":1785},[33,103577,103578],{"class":60},"  \u003C\u002Fworldbody>\n",[33,103580,103581],{"class":35,"line":1940},[33,103582,103583],{"class":60},"\u003C\u002Fmujoco>\n",[33,103585,103586],{"class":35,"line":2183},[33,103587,97905],{"class":60},[33,103589,103590],{"class":35,"line":2208},[33,103591,100],{"emptyLinePlaceholder":99},[33,103593,103594],{"class":35,"line":2234},[33,103595,100],{"emptyLinePlaceholder":99},[33,103597,103598,103600,103602,103605,103607],{"class":35,"line":2239},[33,103599,40],{"class":39},[33,103601,4232],{"class":43},[33,103603,103604],{"class":47},"() -> ",[33,103606,586],{"class":72},[33,103608,605],{"class":47},[33,103610,103611,103614,103616,103619,103621],{"class":35,"line":2247},[33,103612,103613],{"class":47},"    model ",[33,103615,57],{"class":39},[33,103617,103618],{"class":47}," mujoco.MjModel.from_xml_string(",[33,103620,103520],{"class":72},[33,103622,226],{"class":47},[33,103624,103625,103628,103630],{"class":35,"line":2255},[33,103626,103627],{"class":47},"    data ",[33,103629,57],{"class":39},[33,103631,103632],{"class":47}," mujoco.MjData(model)\n",[33,103634,103635],{"class":35,"line":3992},[33,103636,100],{"emptyLinePlaceholder":99},[33,103638,103639,103641,103643,103646],{"class":35,"line":4009},[33,103640,193],{"class":72},[33,103642,133],{"class":47},[33,103644,103645],{"class":60},"\"nq:\"",[33,103647,103648],{"class":47},", model.nq)\n",[33,103650,103651,103653,103655,103658],{"class":35,"line":4014},[33,103652,193],{"class":72},[33,103654,133],{"class":47},[33,103656,103657],{"class":60},"\"nv:\"",[33,103659,103660],{"class":47},", model.nv)\n",[33,103662,103663,103665,103667,103670],{"class":35,"line":4019},[33,103664,193],{"class":72},[33,103666,133],{"class":47},[33,103668,103669],{"class":60},"\"nu:\"",[33,103671,103672],{"class":47},", model.nu)\n",[33,103674,103675,103677,103679,103682],{"class":35,"line":4024},[33,103676,193],{"class":72},[33,103678,133],{"class":47},[33,103680,103681],{"class":60},"\"initial time:\"",[33,103683,103684],{"class":47},", data.time)\n",[33,103686,103687,103689,103691,103694],{"class":35,"line":4038},[33,103688,193],{"class":72},[33,103690,133],{"class":47},[33,103692,103693],{"class":60},"\"initial qpos:\"",[33,103695,103696],{"class":47},", data.qpos.copy())\n",[33,103698,103699],{"class":35,"line":4043},[33,103700,100],{"emptyLinePlaceholder":99},[33,103702,103703,103705,103708,103710,103712,103714,103716],{"class":35,"line":4834},[33,103704,675],{"class":39},[33,103706,103707],{"class":47}," _ ",[33,103709,681],{"class":39},[33,103711,34670],{"class":72},[33,103713,133],{"class":47},[33,103715,2734],{"class":72},[33,103717,366],{"class":47},[33,103719,103720],{"class":35,"line":4848},[33,103721,103722],{"class":47},"        mujoco.mj_step(model, data)\n",[33,103724,103725],{"class":35,"line":4856},[33,103726,100],{"emptyLinePlaceholder":99},[33,103728,103729,103731,103733,103736],{"class":35,"line":4861},[33,103730,193],{"class":72},[33,103732,133],{"class":47},[33,103734,103735],{"class":60},"\"final time:\"",[33,103737,103684],{"class":47},[33,103739,103740,103742,103744,103747],{"class":35,"line":4867},[33,103741,193],{"class":72},[33,103743,133],{"class":47},[33,103745,103746],{"class":60},"\"final qpos:\"",[33,103748,103696],{"class":47},[33,103750,103751],{"class":35,"line":4873},[33,103752,100],{"emptyLinePlaceholder":99},[33,103754,103755],{"class":35,"line":4878},[33,103756,100],{"emptyLinePlaceholder":99},[33,103758,103759,103761,103763,103765,103768],{"class":35,"line":10194},[33,103760,3805],{"class":39},[33,103762,33451],{"class":72},[33,103764,1434],{"class":39},[33,103766,103767],{"class":60}," \"__main__\"",[33,103769,605],{"class":47},[33,103771,103772],{"class":35,"line":10218},[33,103773,103774],{"class":47},"    main()\n",[631,103776,103777],{"id":103777},"代码逐段解释",[19,103779,103780],{},"导入库：",[23,103782,103784],{"className":25,"code":103783,"language":27,"meta":28,"style":28},"import mujoco\n",[30,103785,103786],{"__ignoreMap":28},[33,103787,103788,103790],{"class":35,"line":36},[33,103789,32627],{"class":39},[33,103791,103507],{"class":47},[19,103793,103794],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103796,103797],{},"定义 XML：",[23,103799,103801],{"className":25,"code":103800,"language":27,"meta":28,"style":28},"XML = \"\"\"\n...\n\"\"\"\n",[30,103802,103803,103811,103816],{"__ignoreMap":28},[33,103804,103805,103807,103809],{"class":35,"line":36},[33,103806,103520],{"class":72},[33,103808,15804],{"class":39},[33,103810,103525],{"class":60},[33,103812,103813],{"class":35,"line":51},[33,103814,103815],{"class":60},"...\n",[33,103817,103818],{"class":35,"line":64},[33,103819,97905],{"class":60},[19,103821,103822,103823,103826],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[30,103824,103825],{},"freejoint"," 的方块。",[19,103828,103829],{},"编译模型：",[23,103831,103833],{"className":25,"code":103832,"language":27,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\n",[30,103834,103835],{"__ignoreMap":28},[33,103836,103837,103840,103842,103844,103846],{"class":35,"line":36},[33,103838,103839],{"class":47},"model ",[33,103841,57],{"class":39},[33,103843,103618],{"class":47},[33,103845,103520],{"class":72},[33,103847,226],{"class":47},[19,103849,103850],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103852,103853],{},"创建数据：",[23,103855,103857],{"className":25,"code":103856,"language":27,"meta":28,"style":28},"data = mujoco.MjData(model)\n",[30,103858,103859],{"__ignoreMap":28},[33,103860,103861,103864,103866],{"class":35,"line":36},[33,103862,103863],{"class":47},"data ",[33,103865,57],{"class":39},[33,103867,103632],{"class":47},[19,103869,103870,103872,103873,103875],{},[30,103871,35626],{}," 会保存仿真当前状态。刚创建时，时间是 ",[30,103874,2617],{},"，方块还在初始位置。",[19,103877,103878],{},"推进仿真：",[23,103880,103882],{"className":25,"code":103881,"language":27,"meta":28,"style":28},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[30,103883,103884,103900],{"__ignoreMap":28},[33,103885,103886,103888,103890,103892,103894,103896,103898],{"class":35,"line":36},[33,103887,5282],{"class":39},[33,103889,103707],{"class":47},[33,103891,681],{"class":39},[33,103893,34670],{"class":72},[33,103895,133],{"class":47},[33,103897,2734],{"class":72},[33,103899,366],{"class":47},[33,103901,103902],{"class":35,"line":51},[33,103903,103904],{"class":47},"    mujoco.mj_step(model, data)\n",[19,103906,103907,103908,103910],{},"每次 ",[30,103909,103421],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[631,103912,103913],{"id":103913},"代码逐行细讲",[19,103915,103916],{},"下面把完整代码按新手视角拆开讲。",[23,103918,103919],{"className":25,"code":103783,"language":27,"meta":28,"style":28},[30,103920,103921],{"__ignoreMap":28},[33,103922,103923,103925],{"class":35,"line":36},[33,103924,32627],{"class":39},[33,103926,103507],{"class":47},[19,103928,103929,103931,103932,2638,103934,2638,103936,30622],{},[30,103930,32627],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[30,103933,102882],{},[30,103935,102887],{},[30,103937,103938],{},"mujoco.mj_step",[23,103940,103941],{"className":25,"code":103800,"language":27,"meta":28,"style":28},[30,103942,103943,103951,103955],{"__ignoreMap":28},[33,103944,103945,103947,103949],{"class":35,"line":36},[33,103946,103520],{"class":72},[33,103948,15804],{"class":39},[33,103950,103525],{"class":60},[33,103952,103953],{"class":35,"line":51},[33,103954,103815],{"class":60},[33,103956,103957],{"class":35,"line":64},[33,103958,97905],{"class":60},[19,103960,103961,103963,103964,103967],{},[30,103962,103520],{}," 是一个变量名。右边的三引号 ",[30,103965,103966],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[23,103969,103970],{"className":55286,"code":103530,"language":55288,"meta":28,"style":28},[30,103971,103972],{"__ignoreMap":28},[33,103973,103974,103976,103978,103981,103983,103986],{"class":35,"line":36},[33,103975,2226],{"class":47},[33,103977,103227],{"class":53522},[33,103979,103980],{"class":43}," model",[33,103982,57],{"class":47},[33,103984,103985],{"class":60},"\"first_sim\"",[33,103987,53529],{"class":47},[19,103989,103990,103991,103994,103995,30622],{},"这是 XML 的根标签。",[30,103992,103993],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[30,103996,103997],{},"first_sim",[23,103999,104000],{"className":55286,"code":103389,"language":55288,"meta":28,"style":28},[30,104001,104002],{"__ignoreMap":28},[33,104003,104004,104006,104008,104010,104012,104014,104016,104018,104020],{"class":35,"line":36},[33,104005,2226],{"class":47},[33,104007,71382],{"class":53522},[33,104009,103400],{"class":43},[33,104011,57],{"class":47},[33,104013,103405],{"class":60},[33,104015,103408],{"class":43},[33,104017,57],{"class":47},[33,104019,103413],{"class":60},[33,104021,103350],{"class":47},[19,104023,104024,104026,104027,104030,104031,104034],{},[30,104025,71382],{}," 用来设置仿真参数。",[30,104028,104029],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[30,104032,104033],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[23,104036,104038],{"className":55286,"code":104037,"language":55288,"meta":28,"style":28},"\u003Cworldbody>\n",[30,104039,104040],{"__ignoreMap":28},[33,104041,104042,104044,104047],{"class":35,"line":36},[33,104043,2226],{"class":47},[33,104045,104046],{"class":53522},"worldbody",[33,104048,53529],{"class":47},[19,104050,104051,104053],{},[30,104052,104046],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[23,104055,104057],{"className":55286,"code":104056,"language":55288,"meta":28,"style":28},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[30,104058,104059],{"__ignoreMap":28},[33,104060,104061,104063,104065,104067,104069,104072,104074,104076,104079,104081,104083,104086,104088,104090,104093],{"class":35,"line":36},[33,104062,2226],{"class":47},[33,104064,103326],{"class":53522},[33,104066,17158],{"class":43},[33,104068,57],{"class":47},[33,104070,104071],{"class":60},"\"floor\"",[33,104073,56043],{"class":43},[33,104075,57],{"class":47},[33,104077,104078],{"class":60},"\"plane\"",[33,104080,103342],{"class":43},[33,104082,57],{"class":47},[33,104084,104085],{"class":60},"\"2 2 0.1\"",[33,104087,80978],{"class":43},[33,104089,57],{"class":47},[33,104091,104092],{"class":60},"\"0.8 0.8 0.8 1\"",[33,104094,103350],{"class":47},[19,104096,104097,104098,104100,104101,104104,104105,104108,104109,104111],{},"这行创建地面。",[30,104099,103326],{}," 是几何体。",[30,104102,104103],{},"name=\"floor\""," 是名字。",[30,104106,104107],{},"type=\"plane\""," 表示平面。",[30,104110,57329],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[23,104113,104115],{"className":55286,"code":104114,"language":55288,"meta":28,"style":28},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[30,104116,104117],{"__ignoreMap":28},[33,104118,104119,104121,104123,104125,104127,104129,104131,104133,104135],{"class":35,"line":36},[33,104120,2226],{"class":47},[33,104122,54021],{"class":53522},[33,104124,17158],{"class":43},[33,104126,57],{"class":47},[33,104128,55710],{"class":60},[33,104130,103312],{"class":43},[33,104132,57],{"class":47},[33,104134,103317],{"class":60},[33,104136,53529],{"class":47},[19,104138,104139,104140,30622,104142,104145,104146,104148],{},"这行创建一个刚体，名字叫 ",[30,104141,55933],{},[30,104143,104144],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[30,104147,103375],{},"，也就是离地面 1 米高。",[23,104150,104152],{"className":55286,"code":104151,"language":55288,"meta":28,"style":28},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[30,104153,104154],{"__ignoreMap":28},[33,104155,104156,104158,104160,104162,104164,104167],{"class":35,"line":36},[33,104157,2226],{"class":47},[33,104159,103825],{"class":53522},[33,104161,17158],{"class":43},[33,104163,57],{"class":47},[33,104165,104166],{"class":60},"\"box_free\"",[33,104168,103350],{"class":47},[19,104170,104171,104172,104174],{},"这行很重要。",[30,104173,103825],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[23,104176,104178],{"className":55286,"code":104177,"language":55288,"meta":28,"style":28},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[30,104179,104180],{"__ignoreMap":28},[33,104181,104182,104184,104186,104188,104190,104192,104194,104196,104198,104200,104202,104204,104207,104209,104211,104213,104215,104218],{"class":35,"line":36},[33,104183,2226],{"class":47},[33,104185,103326],{"class":53522},[33,104187,17158],{"class":43},[33,104189,57],{"class":47},[33,104191,103333],{"class":60},[33,104193,56043],{"class":43},[33,104195,57],{"class":47},[33,104197,55710],{"class":60},[33,104199,103342],{"class":43},[33,104201,57],{"class":47},[33,104203,103347],{"class":60},[33,104205,104206],{"class":43}," mass",[33,104208,57],{"class":47},[33,104210,5933],{"class":60},[33,104212,80978],{"class":43},[33,104214,57],{"class":47},[33,104216,104217],{"class":60},"\"1 0 0 1\"",[33,104219,103350],{"class":47},[19,104221,104222,104223,104226,104227,104230,104231,104234,104235,104238],{},"这行给 box body 添加一个盒子形状。",[30,104224,104225],{},"type=\"box\""," 表示形状是盒子。",[30,104228,104229],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[30,104232,104233],{},"mass=\"1\""," 表示质量是 1。",[30,104236,104237],{},"rgba=\"1 0 0 1\""," 表示红色。",[23,104240,104242],{"className":25,"code":104241,"language":27,"meta":28,"style":28},"def main() -> None:\n",[30,104243,104244],{"__ignoreMap":28},[33,104245,104246,104248,104250,104252,104254],{"class":35,"line":36},[33,104247,40],{"class":39},[33,104249,4232],{"class":43},[33,104251,103604],{"class":47},[33,104253,586],{"class":72},[33,104255,605],{"class":47},[19,104257,104258,104260,104261,104264,104265,104268],{},[30,104259,40],{}," 用来定义函数。这里定义了一个叫 ",[30,104262,104263],{},"main"," 的函数。",[30,104266,104267],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[23,104270,104271],{"className":25,"code":103832,"language":27,"meta":28,"style":28},[30,104272,104273],{"__ignoreMap":28},[33,104274,104275,104277,104279,104281,104283],{"class":35,"line":36},[33,104276,103839],{"class":47},[33,104278,57],{"class":39},[33,104280,103618],{"class":47},[33,104282,103520],{"class":72},[33,104284,226],{"class":47},[19,104286,104287,104288,104291],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[30,104289,104290],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[23,104293,104294],{"className":25,"code":103856,"language":27,"meta":28,"style":28},[30,104295,104296],{"__ignoreMap":28},[33,104297,104298,104300,104302],{"class":35,"line":36},[33,104299,103863],{"class":47},[33,104301,57],{"class":39},[33,104303,103632],{"class":47},[19,104305,104306,104307,104309,104310,104312],{},"这行创建仿真数据。",[30,104308,35626],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[30,104311,35626],{}," 都会变化。",[23,104314,104316],{"className":25,"code":104315,"language":27,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[30,104317,104318,104328,104338],{"__ignoreMap":28},[33,104319,104320,104322,104324,104326],{"class":35,"line":36},[33,104321,122],{"class":72},[33,104323,133],{"class":47},[33,104325,103645],{"class":60},[33,104327,103648],{"class":47},[33,104329,104330,104332,104334,104336],{"class":35,"line":51},[33,104331,122],{"class":72},[33,104333,133],{"class":47},[33,104335,103657],{"class":60},[33,104337,103660],{"class":47},[33,104339,104340,104342,104344,104346],{"class":35,"line":64},[33,104341,122],{"class":72},[33,104343,133],{"class":47},[33,104345,103669],{"class":60},[33,104347,103672],{"class":47},[19,104349,104350,104352,104353,104356,104357,104360,104361,104364,104365,104368],{},[30,104351,122],{}," 用来输出信息。",[30,104354,104355],{},"model.nq"," 是位置变量数量，",[30,104358,104359],{},"model.nv"," 是速度变量数量，",[30,104362,104363],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[30,104366,104367],{},"nu"," 是 0。",[23,104370,104372],{"className":25,"code":104371,"language":27,"meta":28,"style":28},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[30,104373,104374,104384],{"__ignoreMap":28},[33,104375,104376,104378,104380,104382],{"class":35,"line":36},[33,104377,122],{"class":72},[33,104379,133],{"class":47},[33,104381,103681],{"class":60},[33,104383,103684],{"class":47},[33,104385,104386,104388,104390,104392],{"class":35,"line":51},[33,104387,122],{"class":72},[33,104389,133],{"class":47},[33,104391,103693],{"class":60},[33,104393,103696],{"class":47},[19,104395,104396,104397,104399,104400,104402,104403,104406],{},"这里打印初始时间和初始位置。",[30,104398,103273],{}," 一开始是 0。",[30,104401,103276],{}," 是位置数组。",[30,104404,104405],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[23,104408,104409],{"className":25,"code":103881,"language":27,"meta":28,"style":28},[30,104410,104411,104427],{"__ignoreMap":28},[33,104412,104413,104415,104417,104419,104421,104423,104425],{"class":35,"line":36},[33,104414,5282],{"class":39},[33,104416,103707],{"class":47},[33,104418,681],{"class":39},[33,104420,34670],{"class":72},[33,104422,133],{"class":47},[33,104424,2734],{"class":72},[33,104426,366],{"class":47},[33,104428,104429],{"class":35,"line":51},[33,104430,103904],{"class":47},[19,104432,104433,104435,104436,104439,104440,104442,104443,104445],{},[30,104434,5282],{}," 是循环。",[30,104437,104438],{},"range(100)"," 表示循环 100 次。",[30,104441,3398],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[30,104444,103421],{},"，仿真就前进一步。",[23,104447,104449],{"className":25,"code":104448,"language":27,"meta":28,"style":28},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[30,104450,104451,104461],{"__ignoreMap":28},[33,104452,104453,104455,104457,104459],{"class":35,"line":36},[33,104454,122],{"class":72},[33,104456,133],{"class":47},[33,104458,103735],{"class":60},[33,104460,103684],{"class":47},[33,104462,104463,104465,104467,104469],{"class":35,"line":51},[33,104464,122],{"class":72},[33,104466,133],{"class":47},[33,104468,103746],{"class":60},[33,104470,103696],{"class":47},[19,104472,104473],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[23,104475,104477],{"className":25,"code":104476,"language":27,"meta":28,"style":28},"if __name__ == \"__main__\":\n    main()\n",[30,104478,104479,104491],{"__ignoreMap":28},[33,104480,104481,104483,104485,104487,104489],{"class":35,"line":36},[33,104482,3805],{"class":39},[33,104484,33451],{"class":72},[33,104486,1434],{"class":39},[33,104488,103767],{"class":60},[33,104490,605],{"class":47},[33,104492,104493],{"class":35,"line":51},[33,104494,103774],{"class":47},[19,104496,104497,104498,104501,104502,30622],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[30,104499,104500],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[30,104503,104500],{},[19,104505,104506],{},"运行:",[23,104508,104510],{"className":26060,"code":104509,"language":26062,"meta":28,"style":28},"python ch1_first_sim.py\n",[30,104511,104512],{"__ignoreMap":28},[33,104513,104514,104516],{"class":35,"line":36},[33,104515,27],{"class":43},[33,104517,103492],{"class":60},[14,104519,104521],{"id":104520},"_5运行结果说明","5.运行结果说明",[19,104523,104524],{},"你应该看到类似输出:",[23,104526,104529],{"className":104527,"code":104528,"language":7436,"meta":28},[7434],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[30,104530,104528],{"__ignoreMap":28},[19,104532,104533,104535,104536,104539,104540,30622],{},[30,104534,103825],{}," 有 7 个位置变量: ",[30,104537,104538],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[30,104541,104542],{},"vx vy vz wx wy wz",[19,104544,104545,104546,104549],{},"你还会看到 ",[30,104547,104548],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104551,104553],{"id":104552},"_6验证步骤","6.验证步骤",[19,104555,104556],{},"确认版本:",[23,104558,104559],{"className":26060,"code":103146,"language":26062,"meta":28,"style":28},[30,104560,104561],{"__ignoreMap":28},[33,104562,104563,104565,104567],{"class":35,"line":36},[33,104564,27],{"class":43},[33,104566,32595],{"class":72},[33,104568,103157],{"class":60},[19,104570,104571],{},"确认导入的是官方 bindings:",[23,104573,104575],{"className":26060,"code":104574,"language":26062,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco)\"\n",[30,104576,104577],{"__ignoreMap":28},[33,104578,104579,104581,104583],{"class":35,"line":36},[33,104580,27],{"class":43},[33,104582,32595],{"class":72},[33,104584,104585],{"class":60}," \"import mujoco; print(mujoco)\"\n",[19,104587,104588],{},"运行程序:",[23,104590,104591],{"className":26060,"code":104509,"language":26062,"meta":28,"style":28},[30,104592,104593],{"__ignoreMap":28},[33,104594,104595,104597],{"class":35,"line":36},[33,104596,27],{"class":43},[33,104598,103492],{"class":60},[19,104600,104601,104602,104605,104606,30622],{},"检查 ",[30,104603,104604],{},"final time"," 是否约等于 ",[30,104607,104608],{},"1.0",[19,104610,104611],{},"再做几个小实验：",[328,104613,104614,104624,104632,104645],{},[331,104615,104616,104617,104619,104620,104623],{},"把 ",[30,104618,104144],{}," 改成 ",[30,104621,104622],{},"pos=\"0 0 2\"","，观察初始高度变化。",[331,104625,104616,104626,104619,104628,104631],{},[30,104627,104033],{},[30,104629,104630],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[331,104633,104616,104634,104619,104636,104639,104640,104642,104643,30622],{},[30,104635,104029],{},[30,104637,104638],{},"timestep=\"0.005\"","，观察 100 步后的 ",[30,104641,104604],{}," 是否变成约 ",[30,104644,37554],{},[331,104646,104647,104648,104651],{},"删除 ",[30,104649,104650],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104653,104654],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104656,104658],{"id":104657},"_7常见错误与解决方案","7.常见错误与解决方案",[631,104660,104662],{"id":104661},"modulenotfounderror-no-module-named-mujoco",[30,104663,104664],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104666,104667],{},"解决:",[23,104669,104671],{"className":26060,"code":104670,"language":26062,"meta":28,"style":28},"pip install \"mujoco>=2.3\"\n",[30,104672,104673],{"__ignoreMap":28},[33,104674,104675,104677,104679],{"class":35,"line":36},[33,104676,26069],{"class":43},[33,104678,26072],{"class":60},[33,104680,104681],{"class":60}," \"mujoco>=2.3\"\n",[631,104683,104685],{"id":104684},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104687,104688],{},"先安装系统依赖:",[23,104690,104692],{"className":26060,"code":104691,"language":26062,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[30,104693,104694],{"__ignoreMap":28},[33,104695,104696,104698,104700,104702,104704,104707,104709,104712,104714,104717,104719],{"class":35,"line":36},[33,104697,26815],{"class":43},[33,104699,28553],{"class":60},[33,104701,26072],{"class":60},[33,104703,28638],{"class":72},[33,104705,104706],{"class":60}," mesa-libGL",[33,104708,103021],{"class":60},[33,104710,104711],{"class":60}," glfw",[33,104713,103041],{"class":60},[33,104715,104716],{"class":60}," libX11",[33,104718,103054],{"class":60},[33,104720,104721],{"class":60}," libXrandr\n",[631,104723,104725],{"id":104724},"xml-解析失败","XML 解析失败",[19,104727,104728],{},"检查:",[328,104730,104731,104734,104737,104743],{},[331,104732,104733],{},"标签是否闭合",[331,104735,104736],{},"属性是否带引号",[331,104738,104739,104740],{},"根节点是否是 ",[30,104741,104742],{},"\u003Cmujoco>",[331,104744,104745,104747,104748,104751],{},[30,104746,54021],{}," 是否放在 ",[30,104749,104750],{},"\u003Cworldbody>"," 内部",[631,104753,104755,104757,104758],{"id":104754},"final-time-不是严格等于-10",[30,104756,104604],{}," 不是严格等于 ",[30,104759,104608],{},[19,104761,104762],{},"这通常不是错误。浮点数计算可能得到：",[23,104764,104767],{"className":104765,"code":104766,"language":7436,"meta":28},[7434],"1.0000000000000007\n",[30,104768,104766],{"__ignoreMap":28},[19,104770,104771,104772,104774],{},"只要接近 ",[30,104773,104608],{}," 就正常。",[631,104776,104777],{"id":104777},"方块没有掉下来",[19,104779,104780],{},"检查：",[328,104782,104783,104789,104795,104800],{},[331,104784,104785,104786],{},"方块 body 里是否有 ",[30,104787,104788],{},"\u003Cfreejoint\u002F>",[331,104790,104791,104792],{},"重力是否是 ",[30,104793,104794],{},"0 0 -9.81",[331,104796,104797,104798],{},"是否真的调用了 ",[30,104799,102892],{},[331,104801,104802,104803,104805,104806],{},"你看的是否是 ",[30,104804,104548],{},"，不是 ",[30,104807,104808],{},"initial qpos",[14,104810,104812],{"id":104811},"_8本章小结","8.本章小结",[19,104814,104815],{},"本章你已经完成了 MuJoCo 的最小闭环：",[23,104817,104820],{"className":104818,"code":104819,"language":7436,"meta":28},[7434],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[30,104821,104819],{"__ignoreMap":28},[19,104823,104824],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2331,104826,104827],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":28,"searchDepth":51,"depth":51,"links":104829},[104830,104831,104832,104837,104841,104842,104843,104851],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":104833},[104834,104835,104836],{"id":103288,"depth":64,"text":103289},{"id":103382,"depth":64,"text":103383},{"id":103434,"depth":64,"text":103435},{"id":103458,"depth":51,"text":103459,"children":104838},[104839,104840],{"id":103777,"depth":64,"text":103777},{"id":103913,"depth":64,"text":103913},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":104844},[104845,104846,104847,104848,104850],{"id":104661,"depth":64,"text":104664},{"id":104684,"depth":64,"text":104685},{"id":104724,"depth":64,"text":104725},{"id":104754,"depth":64,"text":104849},"final time 不是严格等于 1.0",{"id":104777,"depth":64,"text":104777},{"id":104811,"depth":51,"text":104812},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102845,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104858,"title":104859,"body":104860,"description":28,"extension":2360,"meta":106515,"navigation":99,"path":106516,"seo":106517,"stem":106518,"__hash__":106519},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104861,"toc":106491},[104862,104865,104867,104870,104873,104890,104985,104988,104994,104996,104998,105022,105025,105039,105042,105083,105085,105098,105100,105103,105151,105163,105166,105169,105175,105188,105255,105258,105277,105280,105283,105289,105291,105300,105303,105307,105315,105397,105406,105410,105416,105430,105440,105442,105772,105775,105787,105789,105800,105802,105805,105823,105826,105829,105847,105858,105861,105876,105886,105888,105909,105926,105946,105952,105992,106008,106024,106030,106033,106057,106073,106078,106108,106125,106150,106153,106168,106177,106192,106201,106216,106223,106225,106235,106248,106255,106258,106297,106304,106306,106358,106360,106366,106369,106376,106383,106386,106388,106406,106409,106412,106446,106458,106460,106463,106485,106488],[10,104863,104859],{"id":104864},"_2xml-与-mjcf-物理建模基础",[14,104866,102854],{"id":102853},[19,104868,104869],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104871,104872],{},"本章结束后，你应该能看懂一个简单模型里：",[328,104874,104875,104878,104881,104884,104887],{},[331,104876,104877],{},"地面在哪里。",[331,104879,104880],{},"物体初始位置在哪里。",[331,104882,104883],{},"几何体是什么形状。",[331,104885,104886],{},"哪些 body 可以自由运动。",[331,104888,104889],{},"如何用名字在 Python 里找到 XML 中的对象。",[2563,104891,104892,104902],{},[2566,104893,104894],{},[2569,104895,104896,104899],{},[2572,104897,104898],{"align":25974},"标签",[2572,104900,104901],{"align":25974},"作用",[2610,104903,104904,104913,104923,104932,104942,104952,104965,104975],{},[2569,104905,104906,104910],{},[2615,104907,104908],{"align":25974},[30,104909,104742],{},[2615,104911,104912],{"align":25974},"根节点",[2569,104914,104915,104920],{},[2615,104916,104917],{"align":25974},[30,104918,104919],{},"\u003Coption>",[2615,104921,104922],{"align":25974},"仿真参数",[2569,104924,104925,104929],{},[2615,104926,104927],{"align":25974},[30,104928,104750],{},[2615,104930,104931],{"align":25974},"世界中的物体",[2569,104933,104934,104939],{},[2615,104935,104936],{"align":25974},[30,104937,104938],{},"\u003Cbody>",[2615,104940,104941],{"align":25974},"刚体",[2569,104943,104944,104949],{},[2615,104945,104946],{"align":25974},[30,104947,104948],{},"\u003Cgeom>",[2615,104950,104951],{"align":25974},"几何体、碰撞体、可视体",[2569,104953,104954,104962],{},[2615,104955,104956,27217,104959],{"align":25974},[30,104957,104958],{},"\u003Cjoint>",[30,104960,104961],{},"\u003Cfreejoint>",[2615,104963,104964],{"align":25974},"关节",[2569,104966,104967,104972],{},[2615,104968,104969],{"align":25974},[30,104970,104971],{},"\u003Csite>",[2615,104973,104974],{"align":25974},"标记点",[2569,104976,104977,104982],{},[2615,104978,104979],{"align":25974},[30,104980,104981],{},"\u003Cactuator>",[2615,104983,104984],{"align":25974},"控制器",[19,104986,104987],{},"初学时可以先记住：",[23,104989,104992],{"className":104990,"code":104991,"language":7436,"meta":28},[7434],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[30,104993,104991],{"__ignoreMap":28},[14,104995,102977],{"id":102976},[19,104997,102980],{},[23,104999,105001],{"className":26060,"code":105000,"language":26062,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[30,105002,105003],{"__ignoreMap":28},[33,105004,105005,105007,105009,105011,105013,105015,105017,105019],{"class":35,"line":36},[33,105006,26815],{"class":43},[33,105008,28553],{"class":60},[33,105010,26072],{"class":60},[33,105012,28638],{"class":72},[33,105014,104706],{"class":60},[33,105016,103021],{"class":60},[33,105018,104711],{"class":60},[33,105020,105021],{"class":60}," glfw-devel\n",[19,105023,105024],{},"pip:",[23,105026,105027],{"className":26060,"code":103126,"language":26062,"meta":28,"style":28},[30,105028,105029],{"__ignoreMap":28},[33,105030,105031,105033,105035,105037],{"class":35,"line":36},[33,105032,26069],{"class":43},[33,105034,26072],{"class":60},[33,105036,103137],{"class":60},[33,105038,103140],{"class":60},[19,105040,105041],{},"conda:",[23,105043,105045],{"className":26060,"code":105044,"language":26062,"meta":28,"style":28},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[30,105046,105047,105064,105073],{"__ignoreMap":28},[33,105048,105049,105051,105053,105055,105058,105060,105062],{"class":35,"line":36},[33,105050,32567],{"class":43},[33,105052,31413],{"class":60},[33,105054,27354],{"class":72},[33,105056,105057],{"class":60}," mujoco-xml",[33,105059,103182],{"class":60},[33,105061,103185],{"class":72},[33,105063,103188],{"class":72},[33,105065,105066,105068,105070],{"class":35,"line":51},[33,105067,32567],{"class":43},[33,105069,103195],{"class":60},[33,105071,105072],{"class":60}," mujoco-xml\n",[33,105074,105075,105077,105079,105081],{"class":35,"line":64},[33,105076,26069],{"class":43},[33,105078,26072],{"class":60},[33,105080,103137],{"class":60},[33,105082,103140],{"class":60},[19,105084,103211],{},[328,105086,105087,105090,105095],{},[331,105088,105089],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[331,105091,105092,105093,30622],{},"本章使用基础标签，适用于 ",[30,105094,103233],{},[331,105096,105097],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,105099,103251],{"id":103250},[19,105101,105102],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[23,105104,105106],{"className":55286,"code":105105,"language":55288,"meta":28,"style":28},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[30,105107,105108,105122,105130,105135,105143],{"__ignoreMap":28},[33,105109,105110,105112,105114,105116,105118,105120],{"class":35,"line":36},[33,105111,2226],{"class":47},[33,105113,103227],{"class":53522},[33,105115,103980],{"class":43},[33,105117,57],{"class":47},[33,105119,993],{"class":60},[33,105121,53529],{"class":47},[33,105123,105124,105126,105128],{"class":35,"line":51},[33,105125,54364],{"class":47},[33,105127,104046],{"class":53522},[33,105129,53529],{"class":47},[33,105131,105132],{"class":35,"line":64},[33,105133,105134],{"class":47},"    ...\n",[33,105136,105137,105139,105141],{"class":35,"line":76},[33,105138,54636],{"class":47},[33,105140,104046],{"class":53522},[33,105142,53529],{"class":47},[33,105144,105145,105147,105149],{"class":35,"line":87},[33,105146,54006],{"class":47},[33,105148,103227],{"class":53522},[33,105150,53529],{"class":47},[19,105152,105153,105155,105156,105158,105159,105162],{},[30,105154,54021],{}," 表示刚体。",[30,105157,103326],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[30,105160,105161],{},"joint"," 表示刚体相对父刚体如何运动。",[631,105164,105165],{"id":105165},"层级结构非常重要",[19,105167,105168],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[23,105170,105173],{"className":105171,"code":105172,"language":7436,"meta":28},[7434],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[30,105174,105172],{"__ignoreMap":28},[19,105176,105177,1958,105180,105183,105184,105187],{},[30,105178,105179],{},"red_box_geom",[30,105181,105182],{},"box_center"," 都属于 ",[30,105185,105186],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[23,105189,105191],{"className":55286,"code":105190,"language":55288,"meta":28,"style":28},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[30,105192,105193,105213,105227,105247],{"__ignoreMap":28},[33,105194,105195,105197,105199,105201,105203,105205,105207,105209,105211],{"class":35,"line":36},[33,105196,2226],{"class":47},[33,105198,54021],{"class":53522},[33,105200,17158],{"class":43},[33,105202,57],{"class":47},[33,105204,55710],{"class":60},[33,105206,103312],{"class":43},[33,105208,57],{"class":47},[33,105210,103317],{"class":60},[33,105212,53529],{"class":47},[33,105214,105215,105217,105219,105221,105223,105225],{"class":35,"line":51},[33,105216,54364],{"class":47},[33,105218,103825],{"class":53522},[33,105220,17158],{"class":43},[33,105222,57],{"class":47},[33,105224,104166],{"class":60},[33,105226,103350],{"class":47},[33,105228,105229,105231,105233,105235,105237,105239,105241,105243,105245],{"class":35,"line":64},[33,105230,54364],{"class":47},[33,105232,103326],{"class":53522},[33,105234,56043],{"class":43},[33,105236,57],{"class":47},[33,105238,55710],{"class":60},[33,105240,103342],{"class":43},[33,105242,57],{"class":47},[33,105244,103347],{"class":60},[33,105246,103350],{"class":47},[33,105248,105249,105251,105253],{"class":35,"line":76},[33,105250,54006],{"class":47},[33,105252,54021],{"class":53522},[33,105254,53529],{"class":47},[19,105256,105257],{},"含义:",[328,105259,105260,105266,105271,105274],{},[331,105261,105262,105263,105265],{},"创建名为 ",[30,105264,55933],{}," 的刚体",[331,105267,105268,105269],{},"初始位置在世界坐标 ",[30,105270,103375],{},[331,105272,105273],{},"它有一个自由关节",[331,105275,105276],{},"它有一个盒子几何体",[631,105278,105279],{"id":105279},"坐标怎么理解",[19,105281,105282],{},"MuJoCo 默认使用三维坐标：",[23,105284,105287],{"className":105285,"code":105286,"language":7436,"meta":28},[7434],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[30,105288,105286],{"__ignoreMap":28},[19,105290,16873],{},[23,105292,105294],{"className":55286,"code":105293,"language":55288,"meta":28,"style":28},"pos=\"0 0 1\"\n",[30,105295,105296],{"__ignoreMap":28},[33,105297,105298],{"class":35,"line":36},[33,105299,105293],{"class":47},[19,105301,105302],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[631,105304,105306],{"id":105305},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105308,105309,105310,84739,105312,105314],{},"不同 ",[30,105311,136],{},[30,105313,33725],{}," 含义不同：",[2563,105316,105317,105332],{},[2566,105318,105319],{},[2569,105320,105321,105325,105330],{},[2572,105322,105323],{"align":25974},[30,105324,136],{},[2572,105326,105327,105329],{"align":25974},[30,105328,33725],{}," 示例",[2572,105331,102907],{"align":25974},[2610,105333,105334,105348,105363,105382],{},[2569,105335,105336,105340,105345],{},[2615,105337,105338],{"align":25974},[30,105339,55933],{},[2615,105341,105342],{"align":25974},[30,105343,105344],{},"size=\"0.1 0.2 0.3\"",[2615,105346,105347],{"align":25974},"x\u002Fy\u002Fz 半边长，不是完整长度",[2569,105349,105350,105355,105360],{},[2615,105351,105352],{"align":25974},[30,105353,105354],{},"sphere",[2615,105356,105357],{"align":25974},[30,105358,105359],{},"size=\"0.1\"",[2615,105361,105362],{"align":25974},"球半径",[2569,105364,105365,105370,105375],{},[2615,105366,105367],{"align":25974},[30,105368,105369],{},"capsule",[2615,105371,105372],{"align":25974},[30,105373,105374],{},"size=\"0.03\"",[2615,105376,105377,105378,105381],{"align":25974},"胶囊半径，长度常用 ",[30,105379,105380],{},"fromto"," 指定",[2569,105383,105384,105389,105394],{},[2615,105385,105386],{"align":25974},[30,105387,105388],{},"plane",[2615,105390,105391],{"align":25974},[30,105392,105393],{},"size=\"3 3 0.1\"",[2615,105395,105396],{"align":25974},"可视平面大小，通常当地面",[19,105398,105399,105400,105402,105403,105405],{},"最容易踩坑的是 box：",[30,105401,104229],{}," 表示边长大约是 ",[30,105404,34264],{},"，因为 MuJoCo 用的是半边长。",[631,105407,105409],{"id":105408},"site-是什么","site 是什么",[19,105411,105412,105415],{},[30,105413,105414],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[328,105417,105418,105421,105424,105427],{},[331,105419,105420],{},"标记机械臂末端。",[331,105422,105423],{},"标记目标位置。",[331,105425,105426],{},"放传感器或相机参考点。",[331,105428,105429],{},"在 Python 中读取某个关键点的世界坐标。",[19,105431,105432,105433,1958,105436,105439],{},"在后面的 Reacher 任务中，",[30,105434,105435],{},"tip",[30,105437,105438],{},"target"," 就会用 site 表示。",[14,105441,103459],{"id":103458},[23,105443,105445],{"className":25,"code":105444,"language":27,"meta":28,"style":28},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,105446,105447,105453,105463,105467,105471,105479,105484,105488,105492,105496,105501,105505,105510,105515,105520,105525,105529,105533,105537,105541,105545,105549,105561,105573,105581,105585,105600,105615,105619,105632,105647,105660,105673,105677,105693,105697,105701,105712,105724,105736,105748,105752,105756,105768],{"__ignoreMap":28},[33,105448,105449,105451],{"class":35,"line":36},[33,105450,32627],{"class":39},[33,105452,103507],{"class":47},[33,105454,105455,105457,105459,105461],{"class":35,"line":51},[33,105456,32627],{"class":39},[33,105458,33610],{"class":47},[33,105460,33613],{"class":39},[33,105462,33616],{"class":47},[33,105464,105465],{"class":35,"line":64},[33,105466,100],{"emptyLinePlaceholder":99},[33,105468,105469],{"class":35,"line":76},[33,105470,100],{"emptyLinePlaceholder":99},[33,105472,105473,105475,105477],{"class":35,"line":87},[33,105474,103520],{"class":72},[33,105476,15804],{"class":39},[33,105478,103525],{"class":60},[33,105480,105481],{"class":35,"line":96},[33,105482,105483],{"class":60},"\u003Cmujoco model=\"xml_basic\">\n",[33,105485,105486],{"class":35,"line":103},[33,105487,103535],{"class":60},[33,105489,105490],{"class":35,"line":108},[33,105491,100],{"emptyLinePlaceholder":99},[33,105493,105494],{"class":35,"line":119},[33,105495,103544],{"class":60},[33,105497,105498],{"class":35,"line":128},[33,105499,105500],{"class":60},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[33,105502,105503],{"class":35,"line":1753},[33,105504,100],{"emptyLinePlaceholder":99},[33,105506,105507],{"class":35,"line":1763},[33,105508,105509],{"class":60},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[33,105511,105512],{"class":35,"line":1775},[33,105513,105514],{"class":60},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[33,105516,105517],{"class":35,"line":1780},[33,105518,105519],{"class":60},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,105521,105522],{"class":35,"line":1785},[33,105523,105524],{"class":60},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,105526,105527],{"class":35,"line":1940},[33,105528,103573],{"class":60},[33,105530,105531],{"class":35,"line":2183},[33,105532,103578],{"class":60},[33,105534,105535],{"class":35,"line":2208},[33,105536,103583],{"class":60},[33,105538,105539],{"class":35,"line":2234},[33,105540,97905],{"class":60},[33,105542,105543],{"class":35,"line":2239},[33,105544,100],{"emptyLinePlaceholder":99},[33,105546,105547],{"class":35,"line":2247},[33,105548,100],{"emptyLinePlaceholder":99},[33,105550,105551,105553,105555,105557,105559],{"class":35,"line":2255},[33,105552,40],{"class":39},[33,105554,4232],{"class":43},[33,105556,103604],{"class":47},[33,105558,586],{"class":72},[33,105560,605],{"class":47},[33,105562,105563,105565,105567,105569,105571],{"class":35,"line":3992},[33,105564,103613],{"class":47},[33,105566,57],{"class":39},[33,105568,103618],{"class":47},[33,105570,103520],{"class":72},[33,105572,226],{"class":47},[33,105574,105575,105577,105579],{"class":35,"line":4009},[33,105576,103627],{"class":47},[33,105578,57],{"class":39},[33,105580,103632],{"class":47},[33,105582,105583],{"class":35,"line":4014},[33,105584,100],{"emptyLinePlaceholder":99},[33,105586,105587,105590,105592,105595,105598],{"class":35,"line":4019},[33,105588,105589],{"class":47},"    box_body_id ",[33,105591,57],{"class":39},[33,105593,105594],{"class":47}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[33,105596,105597],{"class":60},"\"red_box\"",[33,105599,226],{"class":47},[33,105601,105602,105605,105607,105610,105613],{"class":35,"line":4024},[33,105603,105604],{"class":47},"    site_id ",[33,105606,57],{"class":39},[33,105608,105609],{"class":47}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[33,105611,105612],{"class":60},"\"box_center\"",[33,105614,226],{"class":47},[33,105616,105617],{"class":35,"line":4038},[33,105618,100],{"emptyLinePlaceholder":99},[33,105620,105621,105623,105626,105628,105630],{"class":35,"line":4043},[33,105622,593],{"class":39},[33,105624,105625],{"class":47}," box_body_id ",[33,105627,2226],{"class":39},[33,105629,1437],{"class":72},[33,105631,605],{"class":47},[33,105633,105634,105637,105640,105642,105645],{"class":35,"line":4834},[33,105635,105636],{"class":39},"        raise",[33,105638,105639],{"class":72}," RuntimeError",[33,105641,133],{"class":47},[33,105643,105644],{"class":60},"\"body red_box not found\"",[33,105646,226],{"class":47},[33,105648,105649,105651,105654,105656,105658],{"class":35,"line":4848},[33,105650,593],{"class":39},[33,105652,105653],{"class":47}," site_id ",[33,105655,2226],{"class":39},[33,105657,1437],{"class":72},[33,105659,605],{"class":47},[33,105661,105662,105664,105666,105668,105671],{"class":35,"line":4856},[33,105663,105636],{"class":39},[33,105665,105639],{"class":72},[33,105667,133],{"class":47},[33,105669,105670],{"class":60},"\"site box_center not found\"",[33,105672,226],{"class":47},[33,105674,105675],{"class":35,"line":4861},[33,105676,100],{"emptyLinePlaceholder":99},[33,105678,105679,105681,105683,105685,105687,105689,105691],{"class":35,"line":4867},[33,105680,675],{"class":39},[33,105682,103707],{"class":47},[33,105684,681],{"class":39},[33,105686,34670],{"class":72},[33,105688,133],{"class":47},[33,105690,3983],{"class":72},[33,105692,366],{"class":47},[33,105694,105695],{"class":35,"line":4873},[33,105696,103722],{"class":47},[33,105698,105699],{"class":35,"line":4878},[33,105700,100],{"emptyLinePlaceholder":99},[33,105702,105703,105705,105707,105710],{"class":35,"line":10194},[33,105704,193],{"class":72},[33,105706,133],{"class":47},[33,105708,105709],{"class":60},"\"simulation time:\"",[33,105711,103684],{"class":47},[33,105713,105714,105716,105718,105721],{"class":35,"line":10218},[33,105715,193],{"class":72},[33,105717,133],{"class":47},[33,105719,105720],{"class":60},"\"box body position:\"",[33,105722,105723],{"class":47},", data.xpos[box_body_id].copy())\n",[33,105725,105726,105728,105730,105733],{"class":35,"line":10223},[33,105727,193],{"class":72},[33,105729,133],{"class":47},[33,105731,105732],{"class":60},"\"site position:\"",[33,105734,105735],{"class":47},", data.site_xpos[site_id].copy())\n",[33,105737,105738,105740,105742,105745],{"class":35,"line":10229},[33,105739,193],{"class":72},[33,105741,133],{"class":47},[33,105743,105744],{"class":60},"\"box qpos:\"",[33,105746,105747],{"class":47},", np.array(data.qpos))\n",[33,105749,105750],{"class":35,"line":10256},[33,105751,100],{"emptyLinePlaceholder":99},[33,105753,105754],{"class":35,"line":10261},[33,105755,100],{"emptyLinePlaceholder":99},[33,105757,105758,105760,105762,105764,105766],{"class":35,"line":10267},[33,105759,3805],{"class":39},[33,105761,33451],{"class":72},[33,105763,1434],{"class":39},[33,105765,103767],{"class":60},[33,105767,605],{"class":47},[33,105769,105770],{"class":35,"line":10279},[33,105771,103774],{"class":47},[19,105773,105774],{},"保存为：",[23,105776,105778],{"className":26060,"code":105777,"language":26062,"meta":28,"style":28},"touch ch2_xml_basic.py\n",[30,105779,105780],{"__ignoreMap":28},[33,105781,105782,105784],{"class":35,"line":36},[33,105783,103489],{"class":43},[33,105785,105786],{"class":60}," ch2_xml_basic.py\n",[19,105788,104506],{},[23,105790,105792],{"className":26060,"code":105791,"language":26062,"meta":28,"style":28},"python ch2_xml_basic.py\n",[30,105793,105794],{"__ignoreMap":28},[33,105795,105796,105798],{"class":35,"line":36},[33,105797,27],{"class":43},[33,105799,105786],{"class":60},[631,105801,103777],{"id":103777},[19,105803,105804],{},"用名字查找 body：",[23,105806,105808],{"className":25,"code":105807,"language":27,"meta":28,"style":28},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[30,105809,105810],{"__ignoreMap":28},[33,105811,105812,105815,105817,105819,105821],{"class":35,"line":36},[33,105813,105814],{"class":47},"box_body_id ",[33,105816,57],{"class":39},[33,105818,105594],{"class":47},[33,105820,105597],{"class":60},[33,105822,226],{"class":47},[19,105824,105825],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105827,105828],{},"用名字查找 site：",[23,105830,105832],{"className":25,"code":105831,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[30,105833,105834],{"__ignoreMap":28},[33,105835,105836,105839,105841,105843,105845],{"class":35,"line":36},[33,105837,105838],{"class":47},"site_id ",[33,105840,57],{"class":39},[33,105842,105609],{"class":47},[33,105844,105612],{"class":60},[33,105846,226],{"class":47},[19,105848,105849,105850,105853,105854,105857],{},"注意第二个参数是对象类型。查 body 就用 ",[30,105851,105852],{},"mjOBJ_BODY","，查 site 就用 ",[30,105855,105856],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105859,105860],{},"读取世界坐标：",[23,105862,105864],{"className":25,"code":105863,"language":27,"meta":28,"style":28},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[30,105865,105866,105871],{"__ignoreMap":28},[33,105867,105868],{"class":35,"line":36},[33,105869,105870],{"class":47},"data.xpos[box_body_id]\n",[33,105872,105873],{"class":35,"line":51},[33,105874,105875],{"class":47},"data.site_xpos[site_id]\n",[19,105877,105878,105881,105882,105885],{},[30,105879,105880],{},"xpos"," 是 body 的世界坐标，",[30,105883,105884],{},"site_xpos"," 是 site 的世界坐标。",[631,105887,103913],{"id":103913},[23,105889,105891],{"className":25,"code":105890,"language":27,"meta":28,"style":28},"import mujoco\nimport numpy as np\n",[30,105892,105893,105899],{"__ignoreMap":28},[33,105894,105895,105897],{"class":35,"line":36},[33,105896,32627],{"class":39},[33,105898,103507],{"class":47},[33,105900,105901,105903,105905,105907],{"class":35,"line":51},[33,105902,32627],{"class":39},[33,105904,33610],{"class":47},[33,105906,33613],{"class":39},[33,105908,33616],{"class":47},[19,105910,105911,105912,105915,105916,105919,105920,2638,105923,30622],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[30,105913,105914],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[30,105917,105918],{},"as np"," 是习惯写法，后面就可以写 ",[30,105921,105922],{},"np.array(...)",[30,105924,105925],{},"np.round(...)",[23,105927,105928],{"className":25,"code":103800,"language":27,"meta":28,"style":28},[30,105929,105930,105938,105942],{"__ignoreMap":28},[33,105931,105932,105934,105936],{"class":35,"line":36},[33,105933,103520],{"class":72},[33,105935,15804],{"class":39},[33,105937,103525],{"class":60},[33,105939,105940],{"class":35,"line":51},[33,105941,103815],{"class":60},[33,105943,105944],{"class":35,"line":64},[33,105945,97905],{"class":60},[19,105947,105948,105949,30622],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[30,105950,105951],{},"mujoco.MjModel.from_xml_string(XML)",[23,105953,105955],{"className":55286,"code":105954,"language":55288,"meta":28,"style":28},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,105956,105957],{"__ignoreMap":28},[33,105958,105959,105961,105963,105965,105967,105969,105971,105973,105976,105978,105980,105983,105985,105987,105990],{"class":35,"line":36},[33,105960,2226],{"class":47},[33,105962,105414],{"class":53522},[33,105964,17158],{"class":43},[33,105966,57],{"class":47},[33,105968,105612],{"class":60},[33,105970,103312],{"class":43},[33,105972,57],{"class":47},[33,105974,105975],{"class":60},"\"0 0 0\"",[33,105977,103342],{"class":43},[33,105979,57],{"class":47},[33,105981,105982],{"class":60},"\"0.03\"",[33,105984,80978],{"class":43},[33,105986,57],{"class":47},[33,105988,105989],{"class":60},"\"0 1 0 1\"",[33,105991,103350],{"class":47},[19,105993,105994,105996,105997,106000,106001,106003,106004,106007],{},[30,105995,105414],{}," 是标记点。",[30,105998,105999],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[30,106002,105374],{}," 表示显示出来的小球大小。",[30,106005,106006],{},"rgba=\"0 1 0 1\""," 表示绿色。",[23,106009,106010],{"className":25,"code":105807,"language":27,"meta":28,"style":28},[30,106011,106012],{"__ignoreMap":28},[33,106013,106014,106016,106018,106020,106022],{"class":35,"line":36},[33,106015,105814],{"class":47},[33,106017,57],{"class":39},[33,106019,105594],{"class":47},[33,106021,105597],{"class":60},[33,106023,226],{"class":47},[19,106025,106026,106027,106029],{},"这行的作用是：根据名字 ",[30,106028,105597],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,106031,106032],{},"拆开看：",[328,106034,106035,106041,106046,106052],{},[331,106036,106037,106040],{},[30,106038,106039],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[331,106042,106043,106045],{},[30,106044,104290],{}," 是被查询的模型。",[331,106047,106048,106051],{},[30,106049,106050],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[331,106053,106054,106056],{},[30,106055,105597],{}," 是 XML 里写的名字。",[23,106058,106059],{"className":25,"code":105831,"language":27,"meta":28,"style":28},[30,106060,106061],{"__ignoreMap":28},[33,106062,106063,106065,106067,106069,106071],{"class":35,"line":36},[33,106064,105838],{"class":47},[33,106066,57],{"class":39},[33,106068,105609],{"class":47},[33,106070,105612],{"class":60},[33,106072,226],{"class":47},[19,106074,106075,106076,30622],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[30,106077,105612],{},[23,106079,106081],{"className":25,"code":106080,"language":27,"meta":28,"style":28},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[30,106082,106083,106095],{"__ignoreMap":28},[33,106084,106085,106087,106089,106091,106093],{"class":35,"line":36},[33,106086,3805],{"class":39},[33,106088,105625],{"class":47},[33,106090,2226],{"class":39},[33,106092,1437],{"class":72},[33,106094,605],{"class":47},[33,106096,106097,106100,106102,106104,106106],{"class":35,"line":51},[33,106098,106099],{"class":39},"    raise",[33,106101,105639],{"class":72},[33,106103,133],{"class":47},[33,106105,105644],{"class":60},[33,106107,226],{"class":47},[19,106109,106110,106112,106113,106116,106117,106120,106121,106124],{},[30,106111,3805],{}," 是条件判断。",[30,106114,106115],{},"mj_name2id"," 找不到对象时会返回 ",[30,106118,106119],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[30,106122,106123],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[23,106126,106128],{"className":25,"code":106127,"language":27,"meta":28,"style":28},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[30,106129,106130,106146],{"__ignoreMap":28},[33,106131,106132,106134,106136,106138,106140,106142,106144],{"class":35,"line":36},[33,106133,5282],{"class":39},[33,106135,103707],{"class":47},[33,106137,681],{"class":39},[33,106139,34670],{"class":72},[33,106141,133],{"class":47},[33,106143,3983],{"class":72},[33,106145,366],{"class":47},[33,106147,106148],{"class":35,"line":51},[33,106149,103904],{"class":47},[19,106151,106152],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[23,106154,106156],{"className":25,"code":106155,"language":27,"meta":28,"style":28},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[30,106157,106158],{"__ignoreMap":28},[33,106159,106160,106162,106164,106166],{"class":35,"line":36},[33,106161,122],{"class":72},[33,106163,133],{"class":47},[33,106165,105720],{"class":60},[33,106167,105723],{"class":47},[19,106169,106170,106172,106173,106176],{},[30,106171,103285],{}," 保存所有 body 的世界坐标。",[30,106174,106175],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[23,106178,106180],{"className":25,"code":106179,"language":27,"meta":28,"style":28},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[30,106181,106182],{"__ignoreMap":28},[33,106183,106184,106186,106188,106190],{"class":35,"line":36},[33,106185,122],{"class":72},[33,106187,133],{"class":47},[33,106189,105732],{"class":60},[33,106191,105735],{"class":47},[19,106193,106194,106197,106198,106200],{},[30,106195,106196],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[30,106199,105182],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[23,106202,106204],{"className":25,"code":106203,"language":27,"meta":28,"style":28},"print(\"box qpos:\", np.array(data.qpos))\n",[30,106205,106206],{"__ignoreMap":28},[33,106207,106208,106210,106212,106214],{"class":35,"line":36},[33,106209,122],{"class":72},[33,106211,133],{"class":47},[33,106213,105744],{"class":60},[33,106215,105747],{"class":47},[19,106217,106218,106219,106222],{},"这里打印广义位置数组。",[30,106220,106221],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,106224,104521],{"id":104520},[19,106226,106227,106228,106231,106232,30622],{},"程序会输出 ",[30,106229,106230],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[30,106233,106234],{},"qpos",[19,106236,106237,106239,106240,106243,106244,106247],{},[30,106238,106175],{}," 是 body 的世界坐标位置。",[30,106241,106242],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[30,106245,106246],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,106249,84431,106250,84739,106252,106254],{},[30,106251,105182],{},[30,106253,105999],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,106256,106257],{},"如果你把 site 改成：",[23,106259,106261],{"className":55286,"code":106260,"language":55288,"meta":28,"style":28},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,106262,106263],{"__ignoreMap":28},[33,106264,106265,106267,106269,106271,106273,106276,106278,106280,106283,106285,106287,106289,106291,106293,106295],{"class":35,"line":36},[33,106266,2226],{"class":47},[33,106268,105414],{"class":53522},[33,106270,17158],{"class":43},[33,106272,57],{"class":47},[33,106274,106275],{"class":60},"\"box_top\"",[33,106277,103312],{"class":43},[33,106279,57],{"class":47},[33,106281,106282],{"class":60},"\"0 0 0.15\"",[33,106284,103342],{"class":43},[33,106286,57],{"class":47},[33,106288,105982],{"class":60},[33,106290,80978],{"class":43},[33,106292,57],{"class":47},[33,106294,105989],{"class":60},[33,106296,103350],{"class":47},[19,106298,106299,106300,106303],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[30,106301,106302],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106305,104553],{"id":104552},[328,106307,106308,106317,106320,106327,106333,106344],{},[331,106309,104616,106310,106312,106313,104619,106315,30622],{},[30,106311,105186],{}," 的初始高度从 ",[30,106314,720],{},[30,106316,725],{},[331,106318,106319],{},"重新运行程序。",[331,106321,106322,106323,106326],{},"观察 ",[30,106324,106325],{},"box qpos"," 和最终位置是否变化。",[331,106328,106329,106330,106332],{},"故意把 ",[30,106331,105414],{}," 名称改错，确认程序能报错。",[331,106334,104616,106335,106337,106338,104619,106340,106343],{},[30,106336,103326],{}," 的颜色 ",[30,106339,104237],{},[30,106341,106342],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[331,106345,104616,106346,84739,106348,104619,106351,106354,106355,106357],{},[30,106347,105182],{},[30,106349,106350],{},"pos",[30,106352,106353],{},"0 0 0.2","，观察 ",[30,106356,106302],{}," 如何变化。",[14,106359,104658],{"id":104657},[631,106361,106363],{"id":106362},"xml-error-schema-violation",[30,106364,106365],{},"XML Error: Schema violation",[19,106367,106368],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[631,106370,106372,83499,106374],{"id":106371},"mj_name2id-返回-1",[30,106373,106115],{},[30,106375,106119],{},[19,106377,106378,106379,106382],{},"说明名字没有找到。检查 XML 中 ",[30,106380,106381],{},"name=\"...\"","，并确认对象类型正确。",[631,106384,106385],{"id":106385},"物体不下落",[19,106387,104728],{},[328,106389,106390,106395,106400],{},[331,106391,106392,106393],{},"body 是否有 ",[30,106394,103825],{},[331,106396,106397,106398],{},"gravity 是否为 ",[30,106399,104794],{},[331,106401,106402,106403,106405],{},"body 是否被固定在 ",[30,106404,104046],{}," 中",[631,106407,106408],{"id":106408},"坐标看起来不符合预期",[19,106410,106411],{},"先区分两种坐标：",[2563,106413,106414,106423],{},[2566,106415,106416],{},[2569,106417,106418,106421],{},[2572,106419,106420],{"align":25974},"坐标",[2572,106422,102907],{"align":25974},[2610,106424,106425,106435],{},[2569,106426,106427,106432],{},[2615,106428,106429,106430],{"align":25974},"XML 里的 ",[30,106431,106350],{},[2615,106433,106434],{"align":25974},"相对父 body 的局部坐标",[2569,106436,106437,106443],{},[2615,106438,106439,27217,106441],{"align":25974},[30,106440,103285],{},[30,106442,106196],{},[2615,106444,106445],{"align":25974},"仿真更新后的世界坐标",[19,106447,106448,106449,106451,106452,84748,106455,106457],{},"如果你修改了 ",[30,106450,103276],{},"，但还没调用 ",[30,106453,106454],{},"mj_forward",[30,106456,103421],{},"，世界坐标可能还没有更新。",[14,106459,104812],{"id":104811},[19,106461,106462],{},"MJCF 建模先掌握四件事：",[328,106464,106465,106470,106475,106480],{},[331,106466,106467,106469],{},[30,106468,54021],{}," 表示刚体层级。",[331,106471,106472,106474],{},[30,106473,103326],{}," 表示形状、碰撞和质量。",[331,106476,106477,106479],{},[30,106478,105161],{}," 决定 body 能不能动、怎么动。",[331,106481,106482,106484],{},[30,106483,105414],{}," 用来标记关键点，方便 Python 读取位置。",[19,106486,106487],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2331,106489,106490],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":106492},[106493,106494,106495,106501,106505,106506,106507,106514],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":106496},[106497,106498,106499,106500],{"id":105165,"depth":64,"text":105165},{"id":105279,"depth":64,"text":105279},{"id":105305,"depth":64,"text":105306},{"id":105408,"depth":64,"text":105409},{"id":103458,"depth":51,"text":103459,"children":106502},[106503,106504],{"id":103777,"depth":64,"text":103777},{"id":103913,"depth":64,"text":103913},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":106508},[106509,106510,106512,106513],{"id":106362,"depth":64,"text":106365},{"id":106371,"depth":64,"text":106511},"mj_name2id 返回 -1",{"id":106385,"depth":64,"text":106385},{"id":106408,"depth":64,"text":106408},{"id":104811,"depth":51,"text":104812},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104859,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106521,"title":106522,"body":106523,"description":28,"extension":2360,"meta":108017,"navigation":99,"path":108018,"seo":108019,"stem":108020,"__hash__":108021},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106524,"toc":107989},[106525,106528,106530,106533,106536,106573,106576,106582,106585,106587,106589,106616,106618,106632,106634,106675,106677,106701,106703,106706,106715,106724,106727,106736,106744,106753,106756,106766,106769,106821,106828,106834,106842,106890,106893,106912,106915,106923,106927,106936,106969,106971,107319,107321,107333,107335,107346,107348,107351,107372,107378,107381,107406,107416,107419,107427,107430,107433,107454,107465,107467,107487,107490,107511,107520,107539,107545,107570,107573,107587,107594,107618,107621,107629,107638,107654,107666,107674,107683,107685,107688,107712,107717,107720,107742,107744,107783,107785,107792,107794,107802,107805,107808,107820,107861,107868,107879,107886,107889,107938,107941,107944,107950,107952,107957,107983,107986],[10,106526,106522],{"id":106527},"_3python-控制接口读取状态与推进仿真",[14,106529,102854],{"id":102853},[19,106531,106532],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106534,106535],{},"你将学习:",[328,106537,106538,106543,106548,106552,106557,106568],{},[331,106539,106540],{},[30,106541,106542],{},"MjModel.from_xml_string",[331,106544,106545],{},[30,106546,106547],{},"MjData(model)",[331,106549,106550],{},[30,106551,103421],{},[331,106553,106554],{},[30,106555,106556],{},"mj_resetData",[331,106558,106559,106560,2638,106562,2638,106565],{},"读取 ",[30,106561,106234],{},[30,106563,106564],{},"qvel",[30,106566,106567],{},"ctrl",[331,106569,2318,106570],{},[30,106571,106572],{},"model.opt.timestep",[19,106574,106575],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[23,106577,106580],{"className":106578,"code":106579,"language":7436,"meta":28},[7434],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[30,106581,106579],{"__ignoreMap":28},[19,106583,106584],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106586,102977],{"id":102976},[19,106588,102980],{},[23,106590,106592],{"className":26060,"code":106591,"language":26062,"meta":28,"style":28},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[30,106593,106594],{"__ignoreMap":28},[33,106595,106596,106598,106600,106602,106604,106607,106609,106611,106613],{"class":35,"line":36},[33,106597,26815],{"class":43},[33,106599,28553],{"class":60},[33,106601,26072],{"class":60},[33,106603,28638],{"class":72},[33,106605,106606],{"class":60}," python3",[33,106608,103005],{"class":60},[33,106610,104706],{"class":60},[33,106612,103021],{"class":60},[33,106614,106615],{"class":60}," glfw\n",[19,106617,105024],{},[23,106619,106620],{"className":26060,"code":103126,"language":26062,"meta":28,"style":28},[30,106621,106622],{"__ignoreMap":28},[33,106623,106624,106626,106628,106630],{"class":35,"line":36},[33,106625,26069],{"class":43},[33,106627,26072],{"class":60},[33,106629,103137],{"class":60},[33,106631,103140],{"class":60},[19,106633,105041],{},[23,106635,106637],{"className":26060,"code":106636,"language":26062,"meta":28,"style":28},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[30,106638,106639,106656,106665],{"__ignoreMap":28},[33,106640,106641,106643,106645,106647,106650,106652,106654],{"class":35,"line":36},[33,106642,32567],{"class":43},[33,106644,31413],{"class":60},[33,106646,27354],{"class":72},[33,106648,106649],{"class":60}," mujoco-python-api",[33,106651,103182],{"class":60},[33,106653,103185],{"class":72},[33,106655,103188],{"class":72},[33,106657,106658,106660,106662],{"class":35,"line":51},[33,106659,32567],{"class":43},[33,106661,103195],{"class":60},[33,106663,106664],{"class":60}," mujoco-python-api\n",[33,106666,106667,106669,106671,106673],{"class":35,"line":64},[33,106668,26069],{"class":43},[33,106670,26072],{"class":60},[33,106672,103137],{"class":60},[33,106674,103140],{"class":60},[19,106676,103211],{},[328,106678,106679,106686,106695],{},[331,106680,106681,1958,106683,106685],{},[30,106682,102882],{},[30,106684,102887],{}," 是官方 Python bindings 的类名。",[331,106687,106688,106689,106692,106693,30622],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[30,106690,106691],{},"mjModel"," 在 Python 中是 ",[30,106694,102916],{},[331,106696,106697,106698,30622],{},"不要使用 ",[30,106699,106700],{},"sim = mujoco_py.MjSim(...)",[14,106702,103251],{"id":103250},[19,106704,106705],{},"仿真推进核心代码:",[23,106707,106709],{"className":25,"code":106708,"language":27,"meta":28,"style":28},"mujoco.mj_step(model, data)\n",[30,106710,106711],{"__ignoreMap":28},[33,106712,106713],{"class":35,"line":36},[33,106714,106708],{"class":47},[19,106716,106717,106718,2638,106720,2638,106722,30622],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[30,106719,103276],{},[30,106721,103279],{},[30,106723,103273],{},[19,106725,106726],{},"重置仿真:",[23,106728,106730],{"className":25,"code":106729,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\n",[30,106731,106732],{"__ignoreMap":28},[33,106733,106734],{"class":35,"line":36},[33,106735,106729],{"class":47},[19,106737,106738,106739,84748,106741,106743],{},"如果手动修改了 ",[30,106740,103276],{},[30,106742,103279],{},"，通常应调用:",[23,106745,106747],{"className":25,"code":106746,"language":27,"meta":28,"style":28},"mujoco.mj_forward(model, data)\n",[30,106748,106749],{"__ignoreMap":28},[33,106750,106751],{"class":35,"line":36},[33,106752,106746],{"class":47},[19,106754,106755],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[631,106757,106759,2638,106761,2638,106763,106765],{"id":106758},"qposqvelctrl-是什么",[30,106760,106234],{},[30,106762,106564],{},[30,106764,106567],{}," 是什么",[19,106767,106768],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2563,106770,106771,106783],{},[2566,106772,106773],{},[2569,106774,106775,106778,106780],{},[2572,106776,106777],{"align":25974},"字段",[2572,106779,102907],{"align":25974},[2572,106781,106782],{"align":25974},"谁来修改",[2610,106784,106785,106797,106809],{},[2569,106786,106787,106791,106794],{},[2615,106788,106789],{"align":25974},[30,106790,103276],{},[2615,106792,106793],{"align":25974},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2615,106795,106796],{"align":25974},"MuJoCo 更新，也可以手动设置初始状态",[2569,106798,106799,106803,106806],{},[2615,106800,106801],{"align":25974},[30,106802,103279],{},[2615,106804,106805],{"align":25974},"广义速度，例如小车速度、关节角速度",[2615,106807,106808],{"align":25974},"MuJoCo 更新，也可以手动清零",[2569,106810,106811,106815,106818],{},[2615,106812,106813],{"align":25974},[30,106814,103282],{},[2615,106816,106817],{"align":25974},"actuator 的控制输入",[2615,106819,106820],{"align":25974},"主要由你的控制代码写入",[19,106822,11271,106823,1958,106825,106827],{},[30,106824,106234],{},[30,106826,106564],{}," 不一定同维。自由刚体就是典型例子：",[23,106829,106832],{"className":106830,"code":106831,"language":7436,"meta":28},[7434],"freejoint: qpos 7 维，qvel 6 维\n",[30,106833,106831],{"__ignoreMap":28},[631,106835,106837,1958,106839,106841],{"id":106836},"mj_step-和-mj_forward-的区别",[30,106838,103421],{},[30,106840,106454],{}," 的区别",[2563,106843,106844,106857],{},[2566,106845,106846],{},[2569,106847,106848,106851,106854],{},[2572,106849,106850],{"align":25974},"函数",[2572,106852,106853],{"align":25974},"是否推进时间",[2572,106855,106856],{"align":25974},"什么时候用",[2610,106858,106859,106872],{},[2569,106860,106861,106866,106869],{},[2615,106862,106863],{"align":25974},[30,106864,106865],{},"mj_step(model, data)",[2615,106867,106868],{"align":25974},"是",[2615,106870,106871],{"align":25974},"正常仿真循环，每调用一次前进一步",[2569,106873,106874,106879,106882],{},[2615,106875,106876],{"align":25974},[30,106877,106878],{},"mj_forward(model, data)",[2615,106880,106881],{"align":25974},"否",[2615,106883,106884,106885,2638,106887,106889],{"align":25974},"手动改了 ",[30,106886,106234],{},[30,106888,106564],{}," 后，刷新派生量",[19,106891,106892],{},"例如你写：",[23,106894,106896],{"className":25,"code":106895,"language":27,"meta":28,"style":28},"data.qpos[2] = 2.0\n",[30,106897,106898],{"__ignoreMap":28},[33,106899,106900,106903,106905,106907,106909],{"class":35,"line":36},[33,106901,106902],{"class":47},"data.qpos[",[33,106904,725],{"class":72},[33,106906,2172],{"class":47},[33,106908,57],{"class":39},[33,106910,106911],{"class":72}," 2.0\n",[19,106913,106914],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[23,106916,106917],{"className":25,"code":106746,"language":27,"meta":28,"style":28},[30,106918,106919],{"__ignoreMap":28},[33,106920,106921],{"class":35,"line":36},[33,106922,106746],{"class":47},[631,106924,106926],{"id":106925},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106928,106929,106932,106933,106935],{},[30,106930,106931],{},"mujoco.mj_resetData(model, data)"," 会把 ",[30,106934,35626],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[23,106937,106939],{"className":25,"code":106938,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[30,106940,106941,106945,106955,106965],{"__ignoreMap":28},[33,106942,106943],{"class":35,"line":36},[33,106944,106729],{"class":47},[33,106946,106947,106950,106952],{"class":35,"line":51},[33,106948,106949],{"class":47},"data.qpos[:] ",[33,106951,57],{"class":39},[33,106953,106954],{"class":47}," random_qpos\n",[33,106956,106957,106960,106962],{"class":35,"line":64},[33,106958,106959],{"class":47},"data.qvel[:] ",[33,106961,57],{"class":39},[33,106963,106964],{"class":72}," 0.0\n",[33,106966,106967],{"class":35,"line":76},[33,106968,106746],{"class":47},[14,106970,103459],{"id":103458},[23,106972,106974],{"className":25,"code":106973,"language":27,"meta":28,"style":28},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,106975,106976,106982,106992,106996,107000,107008,107013,107017,107021,107025,107030,107034,107039,107044,107049,107053,107057,107061,107065,107069,107073,107092,107099,107111,107122,107138,107154,107158,107162,107174,107186,107194,107198,107209,107213,107229,107233,107237,107246,107250,107255,107264,107268,107281,107286,107295,107299,107303,107315],{"__ignoreMap":28},[33,106977,106978,106980],{"class":35,"line":36},[33,106979,32627],{"class":39},[33,106981,103507],{"class":47},[33,106983,106984,106986,106988,106990],{"class":35,"line":51},[33,106985,32627],{"class":39},[33,106987,33610],{"class":47},[33,106989,33613],{"class":39},[33,106991,33616],{"class":47},[33,106993,106994],{"class":35,"line":64},[33,106995,100],{"emptyLinePlaceholder":99},[33,106997,106998],{"class":35,"line":76},[33,106999,100],{"emptyLinePlaceholder":99},[33,107001,107002,107004,107006],{"class":35,"line":87},[33,107003,103520],{"class":72},[33,107005,15804],{"class":39},[33,107007,103525],{"class":60},[33,107009,107010],{"class":35,"line":96},[33,107011,107012],{"class":60},"\u003Cmujoco model=\"state_api\">\n",[33,107014,107015],{"class":35,"line":103},[33,107016,103535],{"class":60},[33,107018,107019],{"class":35,"line":108},[33,107020,100],{"emptyLinePlaceholder":99},[33,107022,107023],{"class":35,"line":119},[33,107024,103544],{"class":60},[33,107026,107027],{"class":35,"line":128},[33,107028,107029],{"class":60},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[33,107031,107032],{"class":35,"line":1753},[33,107033,100],{"emptyLinePlaceholder":99},[33,107035,107036],{"class":35,"line":1763},[33,107037,107038],{"class":60},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[33,107040,107041],{"class":35,"line":1775},[33,107042,107043],{"class":60},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[33,107045,107046],{"class":35,"line":1780},[33,107047,107048],{"class":60},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[33,107050,107051],{"class":35,"line":1785},[33,107052,103573],{"class":60},[33,107054,107055],{"class":35,"line":1940},[33,107056,103578],{"class":60},[33,107058,107059],{"class":35,"line":2183},[33,107060,103583],{"class":60},[33,107062,107063],{"class":35,"line":2208},[33,107064,97905],{"class":60},[33,107066,107067],{"class":35,"line":2234},[33,107068,100],{"emptyLinePlaceholder":99},[33,107070,107071],{"class":35,"line":2239},[33,107072,100],{"emptyLinePlaceholder":99},[33,107074,107075,107077,107080,107083,107085,107088,107090],{"class":35,"line":2247},[33,107076,40],{"class":39},[33,107078,107079],{"class":43}," print_state",[33,107081,107082],{"class":47},"(prefix: ",[33,107084,3576],{"class":72},[33,107086,107087],{"class":47},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,107089,586],{"class":72},[33,107091,605],{"class":47},[33,107093,107094,107096],{"class":35,"line":2255},[33,107095,193],{"class":72},[33,107097,107098],{"class":47},"(prefix)\n",[33,107100,107101,107103,107105,107108],{"class":35,"line":3992},[33,107102,193],{"class":72},[33,107104,133],{"class":47},[33,107106,107107],{"class":60},"\"  timestep:\"",[33,107109,107110],{"class":47},", model.opt.timestep)\n",[33,107112,107113,107115,107117,107120],{"class":35,"line":4009},[33,107114,193],{"class":72},[33,107116,133],{"class":47},[33,107118,107119],{"class":60},"\"  time:\"",[33,107121,103684],{"class":47},[33,107123,107124,107126,107128,107131,107134,107136],{"class":35,"line":4014},[33,107125,193],{"class":72},[33,107127,133],{"class":47},[33,107129,107130],{"class":60},"\"  qpos:\"",[33,107132,107133],{"class":47},", np.round(data.qpos.copy(), ",[33,107135,753],{"class":72},[33,107137,551],{"class":47},[33,107139,107140,107142,107144,107147,107150,107152],{"class":35,"line":4019},[33,107141,193],{"class":72},[33,107143,133],{"class":47},[33,107145,107146],{"class":60},"\"  qvel:\"",[33,107148,107149],{"class":47},", np.round(data.qvel.copy(), ",[33,107151,753],{"class":72},[33,107153,551],{"class":47},[33,107155,107156],{"class":35,"line":4024},[33,107157,100],{"emptyLinePlaceholder":99},[33,107159,107160],{"class":35,"line":4038},[33,107161,100],{"emptyLinePlaceholder":99},[33,107163,107164,107166,107168,107170,107172],{"class":35,"line":4043},[33,107165,40],{"class":39},[33,107167,4232],{"class":43},[33,107169,103604],{"class":47},[33,107171,586],{"class":72},[33,107173,605],{"class":47},[33,107175,107176,107178,107180,107182,107184],{"class":35,"line":4834},[33,107177,103613],{"class":47},[33,107179,57],{"class":39},[33,107181,103618],{"class":47},[33,107183,103520],{"class":72},[33,107185,226],{"class":47},[33,107187,107188,107190,107192],{"class":35,"line":4848},[33,107189,103627],{"class":47},[33,107191,57],{"class":39},[33,107193,103632],{"class":47},[33,107195,107196],{"class":35,"line":4856},[33,107197,100],{"emptyLinePlaceholder":99},[33,107199,107200,107203,107206],{"class":35,"line":4861},[33,107201,107202],{"class":47},"    print_state(",[33,107204,107205],{"class":60},"\"initial\"",[33,107207,107208],{"class":47},", model, data)\n",[33,107210,107211],{"class":35,"line":4867},[33,107212,100],{"emptyLinePlaceholder":99},[33,107214,107215,107217,107219,107221,107223,107225,107227],{"class":35,"line":4873},[33,107216,675],{"class":39},[33,107218,103707],{"class":47},[33,107220,681],{"class":39},[33,107222,34670],{"class":72},[33,107224,133],{"class":47},[33,107226,3071],{"class":72},[33,107228,366],{"class":47},[33,107230,107231],{"class":35,"line":4878},[33,107232,103722],{"class":47},[33,107234,107235],{"class":35,"line":10194},[33,107236,100],{"emptyLinePlaceholder":99},[33,107238,107239,107241,107244],{"class":35,"line":10218},[33,107240,107202],{"class":47},[33,107242,107243],{"class":60},"\"after 50 steps\"",[33,107245,107208],{"class":47},[33,107247,107248],{"class":35,"line":10223},[33,107249,100],{"emptyLinePlaceholder":99},[33,107251,107252],{"class":35,"line":10229},[33,107253,107254],{"class":47},"    mujoco.mj_resetData(model, data)\n",[33,107256,107257,107259,107262],{"class":35,"line":10256},[33,107258,107202],{"class":47},[33,107260,107261],{"class":60},"\"after reset\"",[33,107263,107208],{"class":47},[33,107265,107266],{"class":35,"line":10261},[33,107267,100],{"emptyLinePlaceholder":99},[33,107269,107270,107273,107275,107277,107279],{"class":35,"line":10267},[33,107271,107272],{"class":47},"    data.qpos[",[33,107274,725],{"class":72},[33,107276,2172],{"class":47},[33,107278,57],{"class":39},[33,107280,106911],{"class":72},[33,107282,107283],{"class":35,"line":10279},[33,107284,107285],{"class":47},"    mujoco.mj_forward(model, data)\n",[33,107287,107288,107290,107293],{"class":35,"line":10291},[33,107289,107202],{"class":47},[33,107291,107292],{"class":60},"\"after manual qpos edit\"",[33,107294,107208],{"class":47},[33,107296,107297],{"class":35,"line":10303},[33,107298,100],{"emptyLinePlaceholder":99},[33,107300,107301],{"class":35,"line":11961},[33,107302,100],{"emptyLinePlaceholder":99},[33,107304,107305,107307,107309,107311,107313],{"class":35,"line":11986},[33,107306,3805],{"class":39},[33,107308,33451],{"class":72},[33,107310,1434],{"class":39},[33,107312,103767],{"class":60},[33,107314,605],{"class":47},[33,107316,107317],{"class":35,"line":12009},[33,107318,103774],{"class":47},[19,107320,105774],{},[23,107322,107324],{"className":26060,"code":107323,"language":26062,"meta":28,"style":28},"touch ch3_python_state.py\n",[30,107325,107326],{"__ignoreMap":28},[33,107327,107328,107330],{"class":35,"line":36},[33,107329,103489],{"class":43},[33,107331,107332],{"class":60}," ch3_python_state.py\n",[19,107334,104506],{},[23,107336,107338],{"className":26060,"code":107337,"language":26062,"meta":28,"style":28},"python ch3_python_state.py\n",[30,107339,107340],{"__ignoreMap":28},[33,107341,107342,107344],{"class":35,"line":36},[33,107343,27],{"class":43},[33,107345,107332],{"class":60},[631,107347,103777],{"id":103777},[19,107349,107350],{},"打印状态的函数：",[23,107352,107354],{"className":25,"code":107353,"language":27,"meta":28,"style":28},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[30,107355,107356],{"__ignoreMap":28},[33,107357,107358,107360,107362,107364,107366,107368,107370],{"class":35,"line":36},[33,107359,40],{"class":39},[33,107361,107079],{"class":43},[33,107363,107082],{"class":47},[33,107365,3576],{"class":72},[33,107367,107087],{"class":47},[33,107369,586],{"class":72},[33,107371,605],{"class":47},[19,107373,107374,107375,107377],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[30,107376,35626],{}," 里发生了什么。",[19,107379,107380],{},"推进 50 步：",[23,107382,107384],{"className":25,"code":107383,"language":27,"meta":28,"style":28},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[30,107385,107386,107402],{"__ignoreMap":28},[33,107387,107388,107390,107392,107394,107396,107398,107400],{"class":35,"line":36},[33,107389,5282],{"class":39},[33,107391,103707],{"class":47},[33,107393,681],{"class":39},[33,107395,34670],{"class":72},[33,107397,133],{"class":47},[33,107399,3071],{"class":72},[33,107401,366],{"class":47},[33,107403,107404],{"class":35,"line":51},[33,107405,103904],{"class":47},[19,107407,107408,107409,107412,107413,107415],{},"由于 ",[30,107410,107411],{},"timestep=0.01","，所以 50 步后时间约为 ",[30,107414,37554],{}," 秒。",[19,107417,107418],{},"重置：",[23,107420,107421],{"className":25,"code":106729,"language":27,"meta":28,"style":28},[30,107422,107423],{"__ignoreMap":28},[33,107424,107425],{"class":35,"line":36},[33,107426,106729],{"class":47},[19,107428,107429],{},"这会把时间、位置、速度恢复到初始状态。",[19,107431,107432],{},"手动改高度：",[23,107434,107436],{"className":25,"code":107435,"language":27,"meta":28,"style":28},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[30,107437,107438,107450],{"__ignoreMap":28},[33,107439,107440,107442,107444,107446,107448],{"class":35,"line":36},[33,107441,106902],{"class":47},[33,107443,725],{"class":72},[33,107445,2172],{"class":47},[33,107447,57],{"class":39},[33,107449,106911],{"class":72},[33,107451,107452],{"class":35,"line":51},[33,107453,106746],{"class":47},[19,107455,107456,107457,107460,107461,107464],{},"这个例子里 ",[30,107458,107459],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[30,107462,107463],{},"2.0"," 表示把小球放到更高的位置。",[631,107466,103913],{"id":103913},[23,107468,107469],{"className":25,"code":107353,"language":27,"meta":28,"style":28},[30,107470,107471],{"__ignoreMap":28},[33,107472,107473,107475,107477,107479,107481,107483,107485],{"class":35,"line":36},[33,107474,40],{"class":39},[33,107476,107079],{"class":43},[33,107478,107082],{"class":47},[33,107480,3576],{"class":72},[33,107482,107087],{"class":47},[33,107484,586],{"class":72},[33,107486,605],{"class":47},[19,107488,107489],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[328,107491,107492,107501,107506],{},[331,107493,107494,107497,107498,107500],{},[30,107495,107496],{},"prefix","：一段文字，比如 ",[30,107499,107205],{},"，用来说明现在打印的是哪个阶段。",[331,107502,107503,107505],{},[30,107504,104290],{},"：MuJoCo 模型。",[331,107507,107508,107510],{},[30,107509,35626],{},"：MuJoCo 当前状态。",[19,107512,107513,2638,107516,107519],{},[30,107514,107515],{},"prefix: str",[30,107517,107518],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[23,107521,107523],{"className":25,"code":107522,"language":27,"meta":28,"style":28},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[30,107524,107525],{"__ignoreMap":28},[33,107526,107527,107529,107531,107533,107535,107537],{"class":35,"line":36},[33,107528,122],{"class":72},[33,107530,133],{"class":47},[33,107532,107130],{"class":60},[33,107534,107133],{"class":47},[33,107536,753],{"class":72},[33,107538,551],{"class":47},[19,107540,107541,107544],{},[30,107542,107543],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[23,107546,107548],{"className":25,"code":107547,"language":27,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[30,107549,107550,107562],{"__ignoreMap":28},[33,107551,107552,107554,107556,107558,107560],{"class":35,"line":36},[33,107553,103839],{"class":47},[33,107555,57],{"class":39},[33,107557,103618],{"class":47},[33,107559,103520],{"class":72},[33,107561,226],{"class":47},[33,107563,107564,107566,107568],{"class":35,"line":51},[33,107565,103863],{"class":47},[33,107567,57],{"class":39},[33,107569,103632],{"class":47},[19,107571,107572],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[23,107574,107576],{"className":25,"code":107575,"language":27,"meta":28,"style":28},"print_state(\"initial\", model, data)\n",[30,107577,107578],{"__ignoreMap":28},[33,107579,107580,107583,107585],{"class":35,"line":36},[33,107581,107582],{"class":47},"print_state(",[33,107584,107205],{"class":60},[33,107586,107208],{"class":47},[19,107588,107589,107590,107593],{},"调用刚才定义的 ",[30,107591,107592],{},"print_state"," 函数，打印初始状态。",[23,107595,107596],{"className":25,"code":107383,"language":27,"meta":28,"style":28},[30,107597,107598,107614],{"__ignoreMap":28},[33,107599,107600,107602,107604,107606,107608,107610,107612],{"class":35,"line":36},[33,107601,5282],{"class":39},[33,107603,103707],{"class":47},[33,107605,681],{"class":39},[33,107607,34670],{"class":72},[33,107609,133],{"class":47},[33,107611,3071],{"class":72},[33,107613,366],{"class":47},[33,107615,107616],{"class":35,"line":51},[33,107617,103904],{"class":47},[19,107619,107620],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[23,107622,107623],{"className":25,"code":106729,"language":27,"meta":28,"style":28},[30,107624,107625],{"__ignoreMap":28},[33,107626,107627],{"class":35,"line":36},[33,107628,106729],{"class":47},[19,107630,107631,107632,107634,107635,107637],{},"重置 ",[30,107633,35626],{},"。注意它不会重新创建 ",[30,107636,104290],{},"，因为模型结构没有变，只是状态回到初始值。",[23,107639,107640],{"className":25,"code":106895,"language":27,"meta":28,"style":28},[30,107641,107642],{"__ignoreMap":28},[33,107643,107644,107646,107648,107650,107652],{"class":35,"line":36},[33,107645,106902],{"class":47},[33,107647,725],{"class":72},[33,107649,2172],{"class":47},[33,107651,57],{"class":39},[33,107653,106911],{"class":72},[19,107655,107656,107657,2638,107660,2638,107663,107665],{},"这行是“手动改状态”。在 freejoint 中，",[30,107658,107659],{},"qpos[0]",[30,107661,107662],{},"qpos[1]",[30,107664,107459],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[23,107667,107668],{"className":25,"code":106746,"language":27,"meta":28,"style":28},[30,107669,107670],{"__ignoreMap":28},[33,107671,107672],{"class":35,"line":36},[33,107673,106746],{"class":47},[19,107675,107676,107677,107679,107680,107682],{},"手动改完 ",[30,107678,106234],{}," 后，调用 ",[30,107681,106454],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107684,104521],{"id":104520},[19,107686,107687],{},"你会看到:",[328,107689,107690,107695,107700,107703],{},[331,107691,107692,107693],{},"初始时间为 ",[30,107694,2617],{},[331,107696,107697,107698],{},"50 步后时间约为 ",[30,107699,37554],{},[331,107701,107702],{},"reset 后状态恢复",[331,107704,107705,107706,107709,107710],{},"手动修改 ",[30,107707,107708],{},"data.qpos[2]"," 后，小球高度变为 ",[30,107711,107463],{},[19,107713,107714,107716],{},[30,107715,107459],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107718,107719],{},"输出里可以重点看三件事：",[328,107721,107722,107730,107735],{},[331,107723,107724,107726,107727,107729],{},[30,107725,4646],{}," 是否随着 ",[30,107728,103421],{}," 增加。",[331,107731,107732,107734],{},[30,107733,106234],{}," 的 z 坐标是否因为下落而变化。",[331,107736,107737,107739,107740,30622],{},[30,107738,106556],{}," 后时间是否回到 ",[30,107741,2617],{},[14,107743,104553],{"id":104552},[328,107745,107746,107752,107758,107764,107767,107776],{},[331,107747,107748,107749,30622],{},"修改 timestep 为 ",[30,107750,107751],{},"0.005",[331,107753,107754,107755,30622],{},"重新运行，检查 50 步后时间是否约为 ",[30,107756,107757],{},"0.25",[331,107759,107760,107761,30622],{},"修改重力为 ",[30,107762,107763],{},"0 0 -1.0",[331,107765,107766],{},"观察小球下降速度是否变慢。",[331,107768,104616,107769,104619,107772,107775],{},[30,107770,107771],{},"data.qpos[2] = 2.0",[30,107773,107774],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[331,107777,107778,107779,107782],{},"注释掉 ",[30,107780,107781],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107784,104658],{"id":104657},[631,107786,107788,107789,107791],{"id":107787},"修改-dataqpos-后位置没有更新","修改 ",[30,107790,103276],{}," 后位置没有更新",[19,107793,104667],{},[23,107795,107796],{"className":25,"code":106746,"language":27,"meta":28,"style":28},[30,107797,107798],{"__ignoreMap":28},[33,107799,107800],{"class":35,"line":36},[33,107801,106746],{"class":47},[631,107803,107804],{"id":107804},"数组维度看不懂",[19,107806,107807],{},"打印模型维度:",[23,107809,107811],{"className":25,"code":107810,"language":27,"meta":28,"style":28},"print(model.nq, model.nv, model.nu)\n",[30,107812,107813],{"__ignoreMap":28},[33,107814,107815,107817],{"class":35,"line":36},[33,107816,122],{"class":72},[33,107818,107819],{"class":47},"(model.nq, model.nv, model.nu)\n",[2563,107821,107822,107830],{},[2566,107823,107824],{},[2569,107825,107826,107828],{},[2572,107827,106777],{"align":25974},[2572,107829,102907],{"align":25974},[2610,107831,107832,107842,107852],{},[2569,107833,107834,107839],{},[2615,107835,107836],{"align":25974},[30,107837,107838],{},"nq",[2615,107840,107841],{"align":25974},"位置变量数量",[2569,107843,107844,107849],{},[2615,107845,107846],{"align":25974},[30,107847,107848],{},"nv",[2615,107850,107851],{"align":25974},"速度变量数量",[2569,107853,107854,107858],{},[2615,107855,107856],{"align":25974},[30,107857,104367],{},[2615,107859,107860],{"align":25974},"控制输入数量",[631,107862,107864,107865,107867],{"id":107863},"误以为-qpos-一定等于关节数","误以为 ",[30,107866,106234],{}," 一定等于关节数",[19,107869,107870,107871,84739,107873,107875,107876,107878],{},"不是。例如 ",[30,107872,103825],{},[30,107874,106234],{}," 是 7 维，但 ",[30,107877,106564],{}," 是 6 维。",[631,107880,107882,107883,107885],{"id":107881},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[30,107884,106234],{}," 的第几位",[19,107887,107888],{},"初学时可以先打印：",[23,107890,107892],{"className":25,"code":107891,"language":27,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[30,107893,107894,107904,107914,107926],{"__ignoreMap":28},[33,107895,107896,107898,107900,107902],{"class":35,"line":36},[33,107897,122],{"class":72},[33,107899,133],{"class":47},[33,107901,103645],{"class":60},[33,107903,103648],{"class":47},[33,107905,107906,107908,107910,107912],{"class":35,"line":51},[33,107907,122],{"class":72},[33,107909,133],{"class":47},[33,107911,103657],{"class":60},[33,107913,103660],{"class":47},[33,107915,107916,107918,107920,107923],{"class":35,"line":64},[33,107917,122],{"class":72},[33,107919,133],{"class":47},[33,107921,107922],{"class":60},"\"qpos:\"",[33,107924,107925],{"class":47},", data.qpos)\n",[33,107927,107928,107930,107932,107935],{"class":35,"line":76},[33,107929,122],{"class":72},[33,107931,133],{"class":47},[33,107933,107934],{"class":60},"\"qvel:\"",[33,107936,107937],{"class":47},", data.qvel)\n",[19,107939,107940],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[631,107942,107943],{"id":107943},"仿真结果每次都一样",[19,107945,107946,107947,107949],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[30,107948,106234],{},"、目标点或控制输入。",[14,107951,104812],{"id":104811},[19,107953,107954,107955,26857],{},"Python 控制 MuJoCo 的核心就是读写 ",[30,107956,35626],{},[328,107958,107959,107967,107972,107977],{},[331,107960,107961,107962,1958,107964,107966],{},"用 ",[30,107963,103276],{},[30,107965,103279],{}," 读取状态。",[331,107968,107961,107969,107971],{},[30,107970,103282],{}," 写入控制。",[331,107973,107961,107974,107976],{},[30,107975,103421],{}," 推进时间。",[331,107978,107979,107980,107982],{},"手动改状态后用 ",[30,107981,106454],{}," 刷新派生量。",[19,107984,107985],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2331,107987,107988],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":107990},[107991,107992,107993,108000,108004,108005,108006,108016],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":107994},[107995,107997,107999],{"id":106758,"depth":64,"text":107996},"qpos、qvel、ctrl 是什么",{"id":106836,"depth":64,"text":107998},"mj_step 和 mj_forward 的区别",{"id":106925,"depth":64,"text":106926},{"id":103458,"depth":51,"text":103459,"children":108001},[108002,108003],{"id":103777,"depth":64,"text":103777},{"id":103913,"depth":64,"text":103913},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":108007},[108008,108010,108011,108013,108015],{"id":107787,"depth":64,"text":108009},"修改 data.qpos 后位置没有更新",{"id":107804,"depth":64,"text":107804},{"id":107863,"depth":64,"text":108012},"误以为 qpos 一定等于关节数",{"id":107881,"depth":64,"text":108014},"不知道某个元素在 qpos 的第几位",{"id":107943,"depth":64,"text":107943},{"id":104811,"depth":51,"text":104812},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106522,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":108023,"title":108024,"body":108025,"description":28,"extension":2360,"meta":109715,"navigation":99,"path":109716,"seo":109717,"stem":109718,"__hash__":109719},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":108026,"toc":109691},[108027,108030,108032,108035,108037,108062,108065,108084,108087,108089,108091,108115,108117,108131,108133,108174,108176,108200,108202,108205,108239,108241,108254,108257,108325,108334,108338,108341,108375,108381,108384,108388,108427,108430,108450,108454,108497,108499,108528,108531,108537,108540,108542,108936,108938,108950,108952,108963,108965,108968,108997,109005,109008,109043,109046,109048,109056,109059,109061,109072,109082,109102,109105,109141,109153,109201,109220,109262,109275,109303,109308,109329,109339,109357,109360,109394,109397,109417,109420,109439,109445,109447,109450,109456,109462,109472,109475,109481,109490,109492,109538,109540,109546,109552,109555,109558,109578,109581,109587,109593,109595,109618,109621,109624,109633,109636,109674,109676,109679,109685,109688],[10,108028,108024],{"id":108029},"_4关节actuator-与力控制",[14,108031,102854],{"id":102853},[19,108033,108034],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,108036,106535],{},[328,108038,108039,108045,108050,108054,108059],{},[331,108040,108041,108044],{},[30,108042,108043],{},"hinge"," 关节",[331,108046,108047],{},[30,108048,108049],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[331,108051,108052],{},[30,108053,103282],{},[331,108055,108056],{},[30,108057,108058],{},"ctrlrange",[331,108060,108061],{},"读取关节角和角速度",[19,108063,108064],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[23,108066,108068],{"className":25,"code":108067,"language":27,"meta":28,"style":28},"data.ctrl[0] = ...\n",[30,108069,108070],{"__ignoreMap":28},[33,108071,108072,108075,108077,108079,108081],{"class":35,"line":36},[33,108073,108074],{"class":47},"data.ctrl[",[33,108076,2617],{"class":72},[33,108078,2172],{"class":47},[33,108080,57],{"class":39},[33,108082,108083],{"class":72}," ...\n",[19,108085,108086],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,108088,102977],{"id":102976},[19,108090,102980],{},[23,108092,108093],{"className":26060,"code":106591,"language":26062,"meta":28,"style":28},[30,108094,108095],{"__ignoreMap":28},[33,108096,108097,108099,108101,108103,108105,108107,108109,108111,108113],{"class":35,"line":36},[33,108098,26815],{"class":43},[33,108100,28553],{"class":60},[33,108102,26072],{"class":60},[33,108104,28638],{"class":72},[33,108106,106606],{"class":60},[33,108108,103005],{"class":60},[33,108110,104706],{"class":60},[33,108112,103021],{"class":60},[33,108114,106615],{"class":60},[19,108116,105024],{},[23,108118,108119],{"className":26060,"code":103126,"language":26062,"meta":28,"style":28},[30,108120,108121],{"__ignoreMap":28},[33,108122,108123,108125,108127,108129],{"class":35,"line":36},[33,108124,26069],{"class":43},[33,108126,26072],{"class":60},[33,108128,103137],{"class":60},[33,108130,103140],{"class":60},[19,108132,105041],{},[23,108134,108136],{"className":26060,"code":108135,"language":26062,"meta":28,"style":28},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[30,108137,108138,108155,108164],{"__ignoreMap":28},[33,108139,108140,108142,108144,108146,108149,108151,108153],{"class":35,"line":36},[33,108141,32567],{"class":43},[33,108143,31413],{"class":60},[33,108145,27354],{"class":72},[33,108147,108148],{"class":60}," mujoco-control",[33,108150,103182],{"class":60},[33,108152,103185],{"class":72},[33,108154,103188],{"class":72},[33,108156,108157,108159,108161],{"class":35,"line":51},[33,108158,32567],{"class":43},[33,108160,103195],{"class":60},[33,108162,108163],{"class":60}," mujoco-control\n",[33,108165,108166,108168,108170,108172],{"class":35,"line":64},[33,108167,26069],{"class":43},[33,108169,26072],{"class":60},[33,108171,103137],{"class":60},[33,108173,103140],{"class":60},[19,108175,103211],{},[328,108177,108178,108184,108191,108197],{},[331,108179,108180,108183],{},[30,108181,108182],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[331,108185,108186,108188,108189,30622],{},[30,108187,103282],{}," 长度等于 ",[30,108190,104363],{},[331,108192,84431,108193,108196],{},[30,108194,108195],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[331,108198,108199],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,108201,103251],{"id":103250},[19,108203,108204],{},"关节决定 body 如何运动:",[23,108206,108208],{"className":55286,"code":108207,"language":55288,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,108209,108210],{"__ignoreMap":28},[33,108211,108212,108214,108216,108218,108220,108223,108225,108227,108229,108232,108234,108237],{"class":35,"line":36},[33,108213,2226],{"class":47},[33,108215,105161],{"class":53522},[33,108217,17158],{"class":43},[33,108219,57],{"class":47},[33,108221,108222],{"class":60},"\"hinge\"",[33,108224,56043],{"class":43},[33,108226,57],{"class":47},[33,108228,108222],{"class":60},[33,108230,108231],{"class":43}," axis",[33,108233,57],{"class":47},[33,108235,108236],{"class":60},"\"0 1 0\"",[33,108238,103350],{"class":47},[19,108240,105257],{},[328,108242,108243,108248,108251],{},[331,108244,108245,108246],{},"名字是 ",[30,108247,108043],{},[331,108249,108250],{},"类型是旋转关节",[331,108252,108253],{},"绕 y 轴旋转",[19,108255,108256],{},"actuator 决定如何施加控制:",[23,108258,108260],{"className":55286,"code":108259,"language":55288,"meta":28,"style":28},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[30,108261,108262,108271,108317],{"__ignoreMap":28},[33,108263,108264,108266,108269],{"class":35,"line":36},[33,108265,2226],{"class":47},[33,108267,108268],{"class":53522},"actuator",[33,108270,53529],{"class":47},[33,108272,108273,108275,108278,108280,108282,108285,108288,108290,108292,108295,108297,108299,108302,108304,108307,108310,108312,108315],{"class":35,"line":51},[33,108274,54364],{"class":47},[33,108276,108277],{"class":53522},"motor",[33,108279,17158],{"class":43},[33,108281,57],{"class":47},[33,108283,108284],{"class":60},"\"hinge_motor\"",[33,108286,108287],{"class":43}," joint",[33,108289,57],{"class":47},[33,108291,108222],{"class":60},[33,108293,108294],{"class":43}," gear",[33,108296,57],{"class":47},[33,108298,5933],{"class":60},[33,108300,108301],{"class":43}," ctrlrange",[33,108303,57],{"class":47},[33,108305,108306],{"class":60},"\"-2 2\"",[33,108308,108309],{"class":43}," ctrllimited",[33,108311,57],{"class":47},[33,108313,108314],{"class":60},"\"true\"",[33,108316,103350],{"class":47},[33,108318,108319,108321,108323],{"class":35,"line":64},[33,108320,54006],{"class":47},[33,108322,108268],{"class":53522},[33,108324,53529],{"class":47},[19,108326,108327,108330,108331,30622],{},[30,108328,108329],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[30,108332,108333],{},"[-2, 2]",[631,108335,108337],{"id":108336},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108339,108340],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2563,108342,108343,108353],{},[2566,108344,108345],{},[2569,108346,108347,108349,108351],{},[2572,108348,27992],{"align":25974},[2572,108350,104901],{"align":25974},[2572,108352,102941],{"align":25974},[2610,108354,108355,108365],{},[2569,108356,108357,108359,108362],{},[2615,108358,105161],{"align":25974},[2615,108360,108361],{"align":25974},"定义能怎么动",[2615,108363,108364],{"align":25974},"门轴允许门旋转",[2569,108366,108367,108369,108372],{},[2615,108368,108268],{"align":25974},[2615,108370,108371],{"align":25974},"定义怎么施力或控制",[2615,108373,108374],{"align":25974},"人推门、马达带动门",[19,108376,108377,108378,108380],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[30,108379,103282],{}," 主动控制它。",[19,108382,108383],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[631,108385,108387],{"id":108386},"hinge-joint","hinge joint",[23,108389,108391],{"className":55286,"code":108390,"language":55288,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,108392,108393],{"__ignoreMap":28},[33,108394,108395,108397,108399,108401,108403,108405,108407,108409,108411,108413,108415,108417,108420,108422,108425],{"class":35,"line":36},[33,108396,2226],{"class":47},[33,108398,105161],{"class":53522},[33,108400,17158],{"class":43},[33,108402,57],{"class":47},[33,108404,108222],{"class":60},[33,108406,56043],{"class":43},[33,108408,57],{"class":47},[33,108410,108222],{"class":60},[33,108412,108231],{"class":43},[33,108414,57],{"class":47},[33,108416,108236],{"class":60},[33,108418,108419],{"class":43}," damping",[33,108421,57],{"class":47},[33,108423,108424],{"class":60},"\"0.1\"",[33,108426,103350],{"class":47},[19,108428,108429],{},"含义：",[328,108431,108432,108438,108444],{},[331,108433,108434,108437],{},[30,108435,108436],{},"type=\"hinge\"","：只能绕一个轴旋转。",[331,108439,108440,108443],{},[30,108441,108442],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[331,108445,108446,108449],{},[30,108447,108448],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[631,108451,108453],{"id":108452},"motor-actuator","motor actuator",[23,108455,108457],{"className":55286,"code":108456,"language":55288,"meta":28,"style":28},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[30,108458,108459],{"__ignoreMap":28},[33,108460,108461,108463,108465,108467,108469,108471,108473,108475,108477,108479,108481,108483,108485,108487,108489,108491,108493,108495],{"class":35,"line":36},[33,108462,2226],{"class":47},[33,108464,108277],{"class":53522},[33,108466,17158],{"class":43},[33,108468,57],{"class":47},[33,108470,108284],{"class":60},[33,108472,108287],{"class":43},[33,108474,57],{"class":47},[33,108476,108222],{"class":60},[33,108478,108294],{"class":43},[33,108480,57],{"class":47},[33,108482,5933],{"class":60},[33,108484,108301],{"class":43},[33,108486,57],{"class":47},[33,108488,108306],{"class":60},[33,108490,108309],{"class":43},[33,108492,57],{"class":47},[33,108494,108314],{"class":60},[33,108496,103350],{"class":47},[19,108498,108429],{},[328,108500,108501,108510,108516,108522],{},[331,108502,108503,108506,108507,108509],{},[30,108504,108505],{},"joint=\"hinge\"","：这个电机作用在名为 ",[30,108508,108043],{}," 的关节上。",[331,108511,108512,108515],{},[30,108513,108514],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[331,108517,108518,108521],{},[30,108519,108520],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[331,108523,108524,108527],{},[30,108525,108526],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108529,108530],{},"简单理解：",[23,108532,108535],{"className":108533,"code":108534,"language":7436,"meta":28},[7434],"实际施加效果 ≈ data.ctrl[0] * gear\n",[30,108536,108534],{"__ignoreMap":28},[19,108538,108539],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108541,103459],{"id":103458},[23,108543,108545],{"className":25,"code":108544,"language":27,"meta":28,"style":28},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,108546,108547,108554,108558,108564,108574,108578,108582,108590,108595,108600,108604,108608,108613,108618,108622,108627,108632,108637,108642,108646,108650,108654,108659,108664,108669,108673,108677,108681,108685,108697,108709,108717,108721,108731,108741,108751,108755,108768,108781,108785,108802,108816,108851,108855,108859,108870,108885,108900,108912,108916,108920,108932],{"__ignoreMap":28},[33,108548,108549,108551],{"class":35,"line":36},[33,108550,32627],{"class":39},[33,108552,108553],{"class":47}," math\n",[33,108555,108556],{"class":35,"line":51},[33,108557,100],{"emptyLinePlaceholder":99},[33,108559,108560,108562],{"class":35,"line":64},[33,108561,32627],{"class":39},[33,108563,103507],{"class":47},[33,108565,108566,108568,108570,108572],{"class":35,"line":76},[33,108567,32627],{"class":39},[33,108569,33610],{"class":47},[33,108571,33613],{"class":39},[33,108573,33616],{"class":47},[33,108575,108576],{"class":35,"line":87},[33,108577,100],{"emptyLinePlaceholder":99},[33,108579,108580],{"class":35,"line":96},[33,108581,100],{"emptyLinePlaceholder":99},[33,108583,108584,108586,108588],{"class":35,"line":103},[33,108585,103520],{"class":72},[33,108587,15804],{"class":39},[33,108589,103525],{"class":60},[33,108591,108592],{"class":35,"line":108},[33,108593,108594],{"class":60},"\u003Cmujoco model=\"one_link_motor\">\n",[33,108596,108597],{"class":35,"line":119},[33,108598,108599],{"class":60},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[33,108601,108602],{"class":35,"line":128},[33,108603,100],{"emptyLinePlaceholder":99},[33,108605,108606],{"class":35,"line":1753},[33,108607,103544],{"class":60},[33,108609,108610],{"class":35,"line":1763},[33,108611,108612],{"class":60},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[33,108614,108615],{"class":35,"line":1775},[33,108616,108617],{"class":60},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[33,108619,108620],{"class":35,"line":1780},[33,108621,100],{"emptyLinePlaceholder":99},[33,108623,108624],{"class":35,"line":1785},[33,108625,108626],{"class":60},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[33,108628,108629],{"class":35,"line":1940},[33,108630,108631],{"class":60},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,108633,108634],{"class":35,"line":2183},[33,108635,108636],{"class":60},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[33,108638,108639],{"class":35,"line":2208},[33,108640,108641],{"class":60},"      \u003C\u002Fbody>\n",[33,108643,108644],{"class":35,"line":2234},[33,108645,103573],{"class":60},[33,108647,108648],{"class":35,"line":2239},[33,108649,103578],{"class":60},[33,108651,108652],{"class":35,"line":2247},[33,108653,100],{"emptyLinePlaceholder":99},[33,108655,108656],{"class":35,"line":2255},[33,108657,108658],{"class":60},"  \u003Cactuator>\n",[33,108660,108661],{"class":35,"line":3992},[33,108662,108663],{"class":60},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,108665,108666],{"class":35,"line":4009},[33,108667,108668],{"class":60},"  \u003C\u002Factuator>\n",[33,108670,108671],{"class":35,"line":4014},[33,108672,103583],{"class":60},[33,108674,108675],{"class":35,"line":4019},[33,108676,97905],{"class":60},[33,108678,108679],{"class":35,"line":4024},[33,108680,100],{"emptyLinePlaceholder":99},[33,108682,108683],{"class":35,"line":4038},[33,108684,100],{"emptyLinePlaceholder":99},[33,108686,108687,108689,108691,108693,108695],{"class":35,"line":4043},[33,108688,40],{"class":39},[33,108690,4232],{"class":43},[33,108692,103604],{"class":47},[33,108694,586],{"class":72},[33,108696,605],{"class":47},[33,108698,108699,108701,108703,108705,108707],{"class":35,"line":4834},[33,108700,103613],{"class":47},[33,108702,57],{"class":39},[33,108704,103618],{"class":47},[33,108706,103520],{"class":72},[33,108708,226],{"class":47},[33,108710,108711,108713,108715],{"class":35,"line":4848},[33,108712,103627],{"class":47},[33,108714,57],{"class":39},[33,108716,103632],{"class":47},[33,108718,108719],{"class":35,"line":4856},[33,108720,100],{"emptyLinePlaceholder":99},[33,108722,108723,108725,108727,108729],{"class":35,"line":4861},[33,108724,193],{"class":72},[33,108726,133],{"class":47},[33,108728,103645],{"class":60},[33,108730,103648],{"class":47},[33,108732,108733,108735,108737,108739],{"class":35,"line":4867},[33,108734,193],{"class":72},[33,108736,133],{"class":47},[33,108738,103657],{"class":60},[33,108740,103660],{"class":47},[33,108742,108743,108745,108747,108749],{"class":35,"line":4873},[33,108744,193],{"class":72},[33,108746,133],{"class":47},[33,108748,103669],{"class":60},[33,108750,103672],{"class":47},[33,108752,108753],{"class":35,"line":4878},[33,108754,100],{"emptyLinePlaceholder":99},[33,108756,108757,108759,108762,108764,108766],{"class":35,"line":10194},[33,108758,593],{"class":39},[33,108760,108761],{"class":47}," model.nu ",[33,108763,23186],{"class":39},[33,108765,27357],{"class":72},[33,108767,605],{"class":47},[33,108769,108770,108772,108774,108776,108779],{"class":35,"line":10218},[33,108771,105636],{"class":39},[33,108773,105639],{"class":72},[33,108775,133],{"class":47},[33,108777,108778],{"class":60},"\"expected exactly one actuator\"",[33,108780,226],{"class":47},[33,108782,108783],{"class":35,"line":10223},[33,108784,100],{"emptyLinePlaceholder":99},[33,108786,108787,108789,108791,108793,108795,108797,108800],{"class":35,"line":10229},[33,108788,675],{"class":39},[33,108790,33845],{"class":47},[33,108792,681],{"class":39},[33,108794,34670],{"class":72},[33,108796,133],{"class":47},[33,108798,108799],{"class":72},"2000",[33,108801,366],{"class":47},[33,108803,108804,108807,108809,108811,108813],{"class":35,"line":10256},[33,108805,108806],{"class":47},"        t ",[33,108808,57],{"class":39},[33,108810,33845],{"class":47},[33,108812,657],{"class":39},[33,108814,108815],{"class":47}," model.opt.timestep\n",[33,108817,108818,108821,108823,108825,108827,108830,108832,108835,108837,108839,108842,108844,108846,108848],{"class":35,"line":10261},[33,108819,108820],{"class":47},"        data.ctrl[",[33,108822,2617],{"class":72},[33,108824,2172],{"class":47},[33,108826,57],{"class":39},[33,108828,108829],{"class":72}," 1.5",[33,108831,8764],{"class":39},[33,108833,108834],{"class":47}," math.sin(",[33,108836,107463],{"class":72},[33,108838,8764],{"class":39},[33,108840,108841],{"class":47}," math.pi ",[33,108843,657],{"class":39},[33,108845,64085],{"class":72},[33,108847,8764],{"class":39},[33,108849,108850],{"class":47}," t)\n",[33,108852,108853],{"class":35,"line":10267},[33,108854,103722],{"class":47},[33,108856,108857],{"class":35,"line":10279},[33,108858,100],{"emptyLinePlaceholder":99},[33,108860,108861,108863,108865,108868],{"class":35,"line":10291},[33,108862,193],{"class":72},[33,108864,133],{"class":47},[33,108866,108867],{"class":60},"\"time:\"",[33,108869,103684],{"class":47},[33,108871,108872,108874,108876,108879,108881,108883],{"class":35,"line":10303},[33,108873,193],{"class":72},[33,108875,133],{"class":47},[33,108877,108878],{"class":60},"\"joint qpos:\"",[33,108880,107133],{"class":47},[33,108882,753],{"class":72},[33,108884,551],{"class":47},[33,108886,108887,108889,108891,108894,108896,108898],{"class":35,"line":11961},[33,108888,193],{"class":72},[33,108890,133],{"class":47},[33,108892,108893],{"class":60},"\"joint qvel:\"",[33,108895,107149],{"class":47},[33,108897,753],{"class":72},[33,108899,551],{"class":47},[33,108901,108902,108904,108906,108909],{"class":35,"line":11986},[33,108903,193],{"class":72},[33,108905,133],{"class":47},[33,108907,108908],{"class":60},"\"last ctrl:\"",[33,108910,108911],{"class":47},", data.ctrl.copy())\n",[33,108913,108914],{"class":35,"line":12009},[33,108915,100],{"emptyLinePlaceholder":99},[33,108917,108918],{"class":35,"line":12033},[33,108919,100],{"emptyLinePlaceholder":99},[33,108921,108922,108924,108926,108928,108930],{"class":35,"line":12038},[33,108923,3805],{"class":39},[33,108925,33451],{"class":72},[33,108927,1434],{"class":39},[33,108929,103767],{"class":60},[33,108931,605],{"class":47},[33,108933,108934],{"class":35,"line":12043},[33,108935,103774],{"class":47},[19,108937,105774],{},[23,108939,108941],{"className":26060,"code":108940,"language":26062,"meta":28,"style":28},"touch ch4_joint_motor.py\n",[30,108942,108943],{"__ignoreMap":28},[33,108944,108945,108947],{"class":35,"line":36},[33,108946,103489],{"class":43},[33,108948,108949],{"class":60}," ch4_joint_motor.py\n",[19,108951,104506],{},[23,108953,108955],{"className":26060,"code":108954,"language":26062,"meta":28,"style":28},"python ch4_joint_motor.py\n",[30,108956,108957],{"__ignoreMap":28},[33,108958,108959,108961],{"class":35,"line":36},[33,108960,27],{"class":43},[33,108962,108949],{"class":60},[631,108964,103777],{"id":103777},[19,108966,108967],{},"检查 actuator 数量：",[23,108969,108971],{"className":25,"code":108970,"language":27,"meta":28,"style":28},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[30,108972,108973,108985],{"__ignoreMap":28},[33,108974,108975,108977,108979,108981,108983],{"class":35,"line":36},[33,108976,3805],{"class":39},[33,108978,108761],{"class":47},[33,108980,23186],{"class":39},[33,108982,27357],{"class":72},[33,108984,605],{"class":47},[33,108986,108987,108989,108991,108993,108995],{"class":35,"line":51},[33,108988,106099],{"class":39},[33,108990,105639],{"class":72},[33,108992,133],{"class":47},[33,108994,108778],{"class":60},[33,108996,226],{"class":47},[19,108998,108999,109001,109002,109004],{},[30,109000,104363],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[30,109003,103282],{}," 长度应该是 1。",[19,109006,109007],{},"产生正弦控制信号：",[23,109009,109011],{"className":25,"code":109010,"language":27,"meta":28,"style":28},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[30,109012,109013],{"__ignoreMap":28},[33,109014,109015,109017,109019,109021,109023,109025,109027,109029,109031,109033,109035,109037,109039,109041],{"class":35,"line":36},[33,109016,108074],{"class":47},[33,109018,2617],{"class":72},[33,109020,2172],{"class":47},[33,109022,57],{"class":39},[33,109024,108829],{"class":72},[33,109026,8764],{"class":39},[33,109028,108834],{"class":47},[33,109030,107463],{"class":72},[33,109032,8764],{"class":39},[33,109034,108841],{"class":47},[33,109036,657],{"class":39},[33,109038,64085],{"class":72},[33,109040,8764],{"class":39},[33,109042,108850],{"class":47},[19,109044,109045],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,109047,103878],{},[23,109049,109050],{"className":25,"code":106708,"language":27,"meta":28,"style":28},[30,109051,109052],{"__ignoreMap":28},[33,109053,109054],{"class":35,"line":36},[33,109055,106708],{"class":47},[19,109057,109058],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[631,109060,103913],{"id":103913},[23,109062,109064],{"className":25,"code":109063,"language":27,"meta":28,"style":28},"import math\n",[30,109065,109066],{"__ignoreMap":28},[33,109067,109068,109070],{"class":35,"line":36},[33,109069,32627],{"class":39},[33,109071,108553],{"class":47},[19,109073,109074,109075,1958,109078,109081],{},"导入 Python 标准库里的数学模块。后面要用 ",[30,109076,109077],{},"math.sin",[30,109079,109080],{},"math.pi"," 生成周期变化的控制信号。",[23,109083,109084],{"className":25,"code":105890,"language":27,"meta":28,"style":28},[30,109085,109086,109092],{"__ignoreMap":28},[33,109087,109088,109090],{"class":35,"line":36},[33,109089,32627],{"class":39},[33,109091,103507],{"class":47},[33,109093,109094,109096,109098,109100],{"class":35,"line":51},[33,109095,32627],{"class":39},[33,109097,33610],{"class":47},[33,109099,33613],{"class":39},[33,109101,33616],{"class":47},[19,109103,109104],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[23,109106,109107],{"className":55286,"code":108390,"language":55288,"meta":28,"style":28},[30,109108,109109],{"__ignoreMap":28},[33,109110,109111,109113,109115,109117,109119,109121,109123,109125,109127,109129,109131,109133,109135,109137,109139],{"class":35,"line":36},[33,109112,2226],{"class":47},[33,109114,105161],{"class":53522},[33,109116,17158],{"class":43},[33,109118,57],{"class":47},[33,109120,108222],{"class":60},[33,109122,56043],{"class":43},[33,109124,57],{"class":47},[33,109126,108222],{"class":60},[33,109128,108231],{"class":43},[33,109130,57],{"class":47},[33,109132,108236],{"class":60},[33,109134,108419],{"class":43},[33,109136,57],{"class":47},[33,109138,108424],{"class":60},[33,109140,103350],{"class":47},[19,109142,109143,109144,109146,109147,109149,109150,109152],{},"这行定义关节。",[30,109145,108043],{}," 表示旋转关节。",[30,109148,108442],{}," 表示绕 y 轴旋转。",[30,109151,108448],{}," 表示有一点阻尼，运动不会完全无损耗。",[23,109154,109156],{"className":55286,"code":109155,"language":55288,"meta":28,"style":28},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[30,109157,109158],{"__ignoreMap":28},[33,109159,109160,109162,109164,109166,109168,109171,109173,109175,109178,109181,109183,109186,109188,109190,109192,109194,109196,109199],{"class":35,"line":36},[33,109161,2226],{"class":47},[33,109163,103326],{"class":53522},[33,109165,17158],{"class":43},[33,109167,57],{"class":47},[33,109169,109170],{"class":60},"\"link_geom\"",[33,109172,56043],{"class":43},[33,109174,57],{"class":47},[33,109176,109177],{"class":60},"\"capsule\"",[33,109179,109180],{"class":43}," fromto",[33,109182,57],{"class":47},[33,109184,109185],{"class":60},"\"0 0 0 0 0 0.5\"",[33,109187,103342],{"class":43},[33,109189,57],{"class":47},[33,109191,105982],{"class":60},[33,109193,104206],{"class":43},[33,109195,57],{"class":47},[33,109197,109198],{"class":60},"\"0.5\"",[33,109200,103350],{"class":47},[19,109202,109203,109204,109206,109207,109209,109210,109213,109214,30622,109217,109219],{},"这行定义摆杆的形状。",[30,109205,105369],{}," 是胶囊体，适合表示杆子。",[30,109208,105380],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[30,109211,109212],{},"(0,0,0)"," 延伸到 ",[30,109215,109216],{},"(0,0,0.5)",[30,109218,105374],{}," 是半径。",[23,109221,109222],{"className":55286,"code":108456,"language":55288,"meta":28,"style":28},[30,109223,109224],{"__ignoreMap":28},[33,109225,109226,109228,109230,109232,109234,109236,109238,109240,109242,109244,109246,109248,109250,109252,109254,109256,109258,109260],{"class":35,"line":36},[33,109227,2226],{"class":47},[33,109229,108277],{"class":53522},[33,109231,17158],{"class":43},[33,109233,57],{"class":47},[33,109235,108284],{"class":60},[33,109237,108287],{"class":43},[33,109239,57],{"class":47},[33,109241,108222],{"class":60},[33,109243,108294],{"class":43},[33,109245,57],{"class":47},[33,109247,5933],{"class":60},[33,109249,108301],{"class":43},[33,109251,57],{"class":47},[33,109253,108306],{"class":60},[33,109255,108309],{"class":43},[33,109257,57],{"class":47},[33,109259,108314],{"class":60},[33,109261,103350],{"class":47},[19,109263,109264,109265,109267,109268,109271,109272,109274],{},"这行定义电机。它作用在 ",[30,109266,108043],{}," 关节上。",[30,109269,109270],{},"gear"," 可以理解成放大倍数。",[30,109273,108058],{}," 限制控制输入范围。",[23,109276,109277],{"className":25,"code":108970,"language":27,"meta":28,"style":28},[30,109278,109279,109291],{"__ignoreMap":28},[33,109280,109281,109283,109285,109287,109289],{"class":35,"line":36},[33,109282,3805],{"class":39},[33,109284,108761],{"class":47},[33,109286,23186],{"class":39},[33,109288,27357],{"class":72},[33,109290,605],{"class":47},[33,109292,109293,109295,109297,109299,109301],{"class":35,"line":51},[33,109294,106099],{"class":39},[33,109296,105639],{"class":72},[33,109298,133],{"class":47},[33,109300,108778],{"class":60},[33,109302,226],{"class":47},[19,109304,109305,109307],{},[30,109306,104363],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[23,109309,109311],{"className":25,"code":109310,"language":27,"meta":28,"style":28},"for step in range(2000):\n",[30,109312,109313],{"__ignoreMap":28},[33,109314,109315,109317,109319,109321,109323,109325,109327],{"class":35,"line":36},[33,109316,5282],{"class":39},[33,109318,33845],{"class":47},[33,109320,681],{"class":39},[33,109322,34670],{"class":72},[33,109324,133],{"class":47},[33,109326,108799],{"class":72},[33,109328,366],{"class":47},[19,109330,109331,109332,109334,109335,109338],{},"循环 2000 步。这里没有用 ",[30,109333,3398],{},"，而是用 ",[30,109336,109337],{},"step","，因为后面要用当前步数计算时间。",[23,109340,109342],{"className":25,"code":109341,"language":27,"meta":28,"style":28},"t = step * model.opt.timestep\n",[30,109343,109344],{"__ignoreMap":28},[33,109345,109346,109349,109351,109353,109355],{"class":35,"line":36},[33,109347,109348],{"class":47},"t ",[33,109350,57],{"class":39},[33,109352,33845],{"class":47},[33,109354,657],{"class":39},[33,109356,108815],{"class":47},[19,109358,109359],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[23,109361,109362],{"className":25,"code":109010,"language":27,"meta":28,"style":28},[30,109363,109364],{"__ignoreMap":28},[33,109365,109366,109368,109370,109372,109374,109376,109378,109380,109382,109384,109386,109388,109390,109392],{"class":35,"line":36},[33,109367,108074],{"class":47},[33,109369,2617],{"class":72},[33,109371,2172],{"class":47},[33,109373,57],{"class":39},[33,109375,108829],{"class":72},[33,109377,8764],{"class":39},[33,109379,108834],{"class":47},[33,109381,107463],{"class":72},[33,109383,8764],{"class":39},[33,109385,108841],{"class":47},[33,109387,657],{"class":39},[33,109389,64085],{"class":72},[33,109391,8764],{"class":39},[33,109393,108850],{"class":47},[19,109395,109396],{},"这行给电机输入一个正弦波。拆开看：",[328,109398,109399,109405,109411],{},[331,109400,109401,109404],{},[30,109402,109403],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[331,109406,109407,109410],{},[30,109408,109409],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[331,109412,109413,109416],{},[30,109414,109415],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109418,109419],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[23,109421,109423],{"className":25,"code":109422,"language":27,"meta":28,"style":28},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[30,109424,109425],{"__ignoreMap":28},[33,109426,109427,109429,109431,109433,109435,109437],{"class":35,"line":36},[33,109428,122],{"class":72},[33,109430,133],{"class":47},[33,109432,108878],{"class":60},[33,109434,107133],{"class":47},[33,109436,753],{"class":72},[33,109438,551],{"class":47},[19,109440,109441,109442,109444],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[30,109443,103276],{}," 只有一个数。",[14,109446,104521],{"id":104520},[19,109448,109449],{},"输出类似:",[23,109451,109454],{"className":109452,"code":109453,"language":7436,"meta":28},[7434],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[30,109455,109453],{"__ignoreMap":28},[19,109457,109458,109459,109461],{},"这里 ",[30,109460,108329],{}," 是电机输入。",[19,109463,109464,109467,109468,109471],{},[30,109465,109466],{},"joint qpos"," 是关节角度，单位通常是弧度。",[30,109469,109470],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109473,109474],{},"角度单位提示：",[23,109476,109479],{"className":109477,"code":109478,"language":7436,"meta":28},[7434],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[30,109480,109478],{"__ignoreMap":28},[19,109482,109483,109484,109486,109487,109489],{},"如果你看到 ",[30,109485,106234],{}," 是 ",[30,109488,37554],{},"，大约就是 28.6 度。",[14,109491,104553],{"id":104552},[328,109493,109494,109501,109504,109511,109514,109522,109530],{},[331,109495,104616,109496,104619,109498,30622],{},[30,109497,108514],{},[30,109499,109500],{},"gear=\"5\"",[331,109502,109503],{},"重新运行，观察关节运动是否更剧烈。",[331,109505,104616,109506,104619,109508,30622],{},[30,109507,108058],{},[30,109509,109510],{},"-0.2 0.2",[331,109512,109513],{},"重新运行，观察控制能力是否变弱。",[331,109515,109516,109517,109519,109520,30622],{},"去掉 actuator，确认 ",[30,109518,104363],{}," 变成 ",[30,109521,2617],{},[331,109523,104616,109524,104619,109526,109529],{},[30,109525,108448],{},[30,109527,109528],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[331,109531,104616,109532,104619,109534,109537],{},[30,109533,108442],{},[30,109535,109536],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109539,104658],{"id":104657},[631,109541,109543],{"id":109542},"indexerror-index-0-is-out-of-bounds",[30,109544,109545],{},"IndexError: index 0 is out of bounds",[19,109547,109548,109549,109551],{},"原因是 ",[30,109550,108195],{},"，没有 actuator。",[631,109553,109554],{"id":109554},"关节几乎不动",[19,109556,109557],{},"可能原因:",[328,109559,109560,109565,109569,109575],{},[331,109561,109562,109564],{},[30,109563,109270],{}," 太小",[331,109566,109567,109564],{},[30,109568,108058],{},[331,109570,109571,109574],{},[30,109572,109573],{},"damping"," 太大",[331,109576,109577],{},"重力方向导致运动不明显",[631,109579,109580],{"id":109580},"模型编译失败",[19,109582,109583,109584,109586],{},"检查 actuator 引用的 ",[30,109585,108505],{}," 是否存在，joint 名称是否拼写一致。",[631,109588,109590,109592],{"id":109589},"datactrl0-写了但没有效果",[30,109591,108329],{}," 写了但没有效果",[19,109594,104780],{},[328,109596,109597,109602,109605,109610,109615],{},[331,109598,109599,109601],{},[30,109600,104363],{}," 是否大于 0。",[331,109603,109604],{},"motor 是否引用了正确 joint。",[331,109606,109607,109609],{},[30,109608,109270],{}," 是否太小。",[331,109611,109612,109614],{},[30,109613,108058],{}," 是否把输入限制得太小。",[331,109616,109617],{},"body 是否真的有可动 joint。",[631,109619,109620],{"id":109620},"控制输入超过范围会怎样",[19,109622,109623],{},"如果设置了：",[23,109625,109627],{"className":55286,"code":109626,"language":55288,"meta":28,"style":28},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[30,109628,109629],{"__ignoreMap":28},[33,109630,109631],{"class":35,"line":36},[33,109632,109626],{"class":47},[19,109634,109635],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[23,109637,109639],{"className":25,"code":109638,"language":27,"meta":28,"style":28},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[30,109640,109641,109661],{"__ignoreMap":28},[33,109642,109643,109646,109648,109651,109653,109655,109657,109659],{"class":35,"line":36},[33,109644,109645],{"class":47},"action ",[33,109647,57],{"class":39},[33,109649,109650],{"class":47}," np.clip(action, ",[33,109652,2949],{"class":39},[33,109654,107463],{"class":72},[33,109656,245],{"class":47},[33,109658,107463],{"class":72},[33,109660,226],{"class":47},[33,109662,109663,109665,109667,109669,109671],{"class":35,"line":51},[33,109664,108074],{"class":47},[33,109666,2617],{"class":72},[33,109668,2172],{"class":47},[33,109670,57],{"class":39},[33,109672,109673],{"class":47}," action\n",[14,109675,104812],{"id":104811},[19,109677,109678],{},"这一章建立了控制任务的基本形式：",[23,109680,109683],{"className":109681,"code":109682,"language":7436,"meta":28},[7434],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[30,109684,109682],{"__ignoreMap":28},[19,109686,109687],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2331,109689,109690],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":28,"searchDepth":51,"depth":51,"links":109692},[109693,109694,109695,109700,109704,109705,109706,109714],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":109696},[109697,109698,109699],{"id":108336,"depth":64,"text":108337},{"id":108386,"depth":64,"text":108387},{"id":108452,"depth":64,"text":108453},{"id":103458,"depth":51,"text":103459,"children":109701},[109702,109703],{"id":103777,"depth":64,"text":103777},{"id":103913,"depth":64,"text":103913},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":109707},[109708,109709,109710,109711,109713],{"id":109542,"depth":64,"text":109545},{"id":109554,"depth":64,"text":109554},{"id":109580,"depth":64,"text":109580},{"id":109589,"depth":64,"text":109712},"data.ctrl[0] 写了但没有效果",{"id":109620,"depth":64,"text":109620},{"id":104811,"depth":51,"text":104812},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":108024,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109721,"title":109722,"body":109723,"description":28,"extension":2360,"meta":111632,"navigation":99,"path":111633,"seo":111634,"stem":111635,"__hash__":111636},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109724,"toc":111608},[109725,109728,109730,109733,109741,109744,109761,109764,109789,109792,109838,109840,109842,109897,109899,109918,109920,109963,109966,109983,109986,110002,110012,110019,110021,110024,110027,110061,110064,110112,110116,110119,110133,110142,110146,110149,110174,110177,110181,110194,110197,110203,110206,110221,110223,110226,110486,110488,110500,110503,110815,110817,110829,110831,110834,110849,110854,110857,110879,110882,110885,110919,110922,110926,110937,110940,110957,110960,110974,110981,111001,111008,111022,111025,111037,111052,111072,111075,111097,111100,111104,111119,111130,111145,111148,111178,111194,111223,111231,111255,111258,111276,111286,111298,111305,111314,111320,111329,111332,111334,111343,111346,111361,111363,111366,111377,111380,111391,111394,111412,111414,111431,111434,111462,111464,111468,111471,111501,111507,111510,111514,111522,111525,111527,111548,111551,111554,111570,111573,111589,111591,111594,111605],[10,109726,109722],{"id":109727},"_5viewer-可视化与-renderer-离屏渲染",[14,109729,102854],{"id":102853},[19,109731,109732],{},"本章掌握两类可视化方式:",[328,109734,109735,109738],{},[331,109736,109737],{},"交互式 viewer: 适合人工观察仿真",[331,109739,109740],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109742,109743],{},"使用官方接口:",[23,109745,109747],{"className":25,"code":109746,"language":27,"meta":28,"style":28},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[30,109748,109749,109756],{"__ignoreMap":28},[33,109750,109751,109753],{"class":35,"line":36},[33,109752,32627],{"class":39},[33,109754,109755],{"class":47}," mujoco.viewer\n",[33,109757,109758],{"class":35,"line":51},[33,109759,109760],{"class":47},"mujoco.viewer.launch_passive(model, data)\n",[19,109762,109763],{},"以及:",[23,109765,109767],{"className":25,"code":109766,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[30,109768,109769,109779],{"__ignoreMap":28},[33,109770,109771,109774,109776],{"class":35,"line":36},[33,109772,109773],{"class":47},"renderer ",[33,109775,57],{"class":39},[33,109777,109778],{"class":47}," mujoco.Renderer(model)\n",[33,109780,109781,109784,109786],{"class":35,"line":51},[33,109782,109783],{"class":47},"image ",[33,109785,57],{"class":39},[33,109787,109788],{"class":47}," renderer.render()\n",[19,109790,109791],{},"新手建议先理解二者区别：",[2563,109793,109794,109810],{},[2566,109795,109796],{},[2569,109797,109798,109801,109804,109807],{},[2572,109799,109800],{"align":25974},"工具",[2572,109802,109803],{"align":25974},"用途",[2572,109805,109806],{"align":25974},"是否打开窗口",[2572,109808,109809],{"align":25974},"常见场景",[2610,109811,109812,109825],{},[2569,109813,109814,109817,109820,109822],{},[2615,109815,109816],{"align":25974},"Viewer",[2615,109818,109819],{"align":25974},"人眼实时观察仿真",[2615,109821,106868],{"align":25974},[2615,109823,109824],{"align":25974},"调试模型、看控制效果",[2569,109826,109827,109830,109833,109835],{},[2615,109828,109829],{"align":25974},"Renderer",[2615,109831,109832],{"align":25974},"生成图像数组",[2615,109834,106881],{"align":25974},[2615,109836,109837],{"align":25974},"保存图片、训练视觉策略、服务器批量采集",[14,109839,102977],{"id":102976},[19,109841,102980],{},[23,109843,109845],{"className":26060,"code":109844,"language":26062,"meta":28,"style":28},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[30,109846,109847,109859,109869,109877,109885],{"__ignoreMap":28},[33,109848,109849,109851,109853,109855,109857],{"class":35,"line":36},[33,109850,26815],{"class":43},[33,109852,28553],{"class":60},[33,109854,26072],{"class":60},[33,109856,28638],{"class":72},[33,109858,26917],{"class":72},[33,109860,109861,109863,109865,109867],{"class":35,"line":51},[33,109862,103015],{"class":60},[33,109864,103018],{"class":60},[33,109866,103021],{"class":60},[33,109868,26917],{"class":72},[33,109870,109871,109873,109875],{"class":35,"line":64},[33,109872,103028],{"class":60},[33,109874,103031],{"class":60},[33,109876,26917],{"class":72},[33,109878,109879,109881,109883],{"class":35,"line":76},[33,109880,103038],{"class":60},[33,109882,103041],{"class":60},[33,109884,26917],{"class":72},[33,109886,109887,109889,109891,109893,109895],{"class":35,"line":87},[33,109888,103048],{"class":60},[33,109890,103051],{"class":60},[33,109892,103054],{"class":60},[33,109894,103057],{"class":60},[33,109896,104721],{"class":60},[19,109898,105024],{},[23,109900,109902],{"className":26060,"code":109901,"language":26062,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy pillow\n",[30,109903,109904],{"__ignoreMap":28},[33,109905,109906,109908,109910,109912,109915],{"class":35,"line":36},[33,109907,26069],{"class":43},[33,109909,26072],{"class":60},[33,109911,103137],{"class":60},[33,109913,109914],{"class":60}," numpy",[33,109916,109917],{"class":60}," pillow\n",[19,109919,105041],{},[23,109921,109923],{"className":26060,"code":109922,"language":26062,"meta":28,"style":28},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[30,109924,109925,109942,109951],{"__ignoreMap":28},[33,109926,109927,109929,109931,109933,109936,109938,109940],{"class":35,"line":36},[33,109928,32567],{"class":43},[33,109930,31413],{"class":60},[33,109932,27354],{"class":72},[33,109934,109935],{"class":60}," mujoco-render",[33,109937,103182],{"class":60},[33,109939,103185],{"class":72},[33,109941,103188],{"class":72},[33,109943,109944,109946,109948],{"class":35,"line":51},[33,109945,32567],{"class":43},[33,109947,103195],{"class":60},[33,109949,109950],{"class":60}," mujoco-render\n",[33,109952,109953,109955,109957,109959,109961],{"class":35,"line":64},[33,109954,26069],{"class":43},[33,109956,26072],{"class":60},[33,109958,103137],{"class":60},[33,109960,109914],{"class":60},[33,109962,109917],{"class":60},[19,109964,109965],{},"离屏渲染后端:",[23,109967,109969],{"className":26060,"code":109968,"language":26062,"meta":28,"style":28},"export MUJOCO_GL=egl\n",[30,109970,109971],{"__ignoreMap":28},[33,109972,109973,109975,109978,109980],{"class":35,"line":36},[33,109974,27281],{"class":39},[33,109976,109977],{"class":47}," MUJOCO_GL",[33,109979,57],{"class":39},[33,109981,109982],{"class":47},"egl\n",[19,109984,109985],{},"或:",[23,109987,109989],{"className":26060,"code":109988,"language":26062,"meta":28,"style":28},"export MUJOCO_GL=osmesa\n",[30,109990,109991],{"__ignoreMap":28},[33,109992,109993,109995,109997,109999],{"class":35,"line":36},[33,109994,27281],{"class":39},[33,109996,109977],{"class":47},[33,109998,57],{"class":39},[33,110000,110001],{"class":47},"osmesa\n",[19,110003,110004,110005,110008,110009,30622],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[30,110006,110007],{},"egl"," 失败，再尝试 ",[30,110010,110011],{},"osmesa",[19,110013,110014,110015,110018],{},"如果你在本机桌面环境运行，通常先不要设置 ",[30,110016,110017],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,110020,103251],{"id":103250},[19,110022,110023],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,110025,110026],{},"典型 viewer 流程:",[23,110028,110030],{"className":25,"code":110029,"language":27,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[30,110031,110032,110045,110052,110056],{"__ignoreMap":28},[33,110033,110034,110037,110040,110042],{"class":35,"line":36},[33,110035,110036],{"class":39},"with",[33,110038,110039],{"class":47}," mujoco.viewer.launch_passive(model, data) ",[33,110041,33613],{"class":39},[33,110043,110044],{"class":47}," viewer:\n",[33,110046,110047,110049],{"class":35,"line":51},[33,110048,4510],{"class":39},[33,110050,110051],{"class":47}," viewer.is_running():\n",[33,110053,110054],{"class":35,"line":64},[33,110055,103722],{"class":47},[33,110057,110058],{"class":35,"line":76},[33,110059,110060],{"class":47},"        viewer.sync()\n",[19,110062,110063],{},"典型 renderer 流程:",[23,110065,110067],{"className":25,"code":110066,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[30,110068,110069,110095,110099,110104],{"__ignoreMap":28},[33,110070,110071,110073,110075,110078,110080,110082,110084,110086,110088,110090,110093],{"class":35,"line":36},[33,110072,109773],{"class":47},[33,110074,57],{"class":39},[33,110076,110077],{"class":47}," mujoco.Renderer(model, ",[33,110079,27220],{"class":289},[33,110081,57],{"class":39},[33,110083,44565],{"class":72},[33,110085,245],{"class":47},[33,110087,27216],{"class":289},[33,110089,57],{"class":39},[33,110091,110092],{"class":72},"640",[33,110094,226],{"class":47},[33,110096,110097],{"class":35,"line":51},[33,110098,106708],{"class":47},[33,110100,110101],{"class":35,"line":64},[33,110102,110103],{"class":47},"renderer.update_scene(data)\n",[33,110105,110106,110108,110110],{"class":35,"line":76},[33,110107,109783],{"class":47},[33,110109,57],{"class":39},[33,110111,109788],{"class":47},[631,110113,110115],{"id":110114},"viewer-的同步逻辑","viewer 的同步逻辑",[19,110117,110118],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[23,110120,110122],{"className":25,"code":110121,"language":27,"meta":28,"style":28},"mujoco.mj_step(model, data)\nviewer.sync()\n",[30,110123,110124,110128],{"__ignoreMap":28},[33,110125,110126],{"class":35,"line":36},[33,110127,106708],{"class":47},[33,110129,110130],{"class":35,"line":51},[33,110131,110132],{"class":47},"viewer.sync()\n",[19,110134,110135,110137,110138,110141],{},[30,110136,103421],{}," 负责算物理，",[30,110139,110140],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[631,110143,110145],{"id":110144},"为什么要-sleep","为什么要 sleep",[19,110147,110148],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[23,110150,110152],{"className":25,"code":110151,"language":27,"meta":28,"style":28},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[30,110153,110154],{"__ignoreMap":28},[33,110155,110156,110159,110161,110164,110166,110169,110171],{"class":35,"line":36},[33,110157,110158],{"class":47},"sleep_time ",[33,110160,57],{"class":39},[33,110162,110163],{"class":47}," model.opt.timestep ",[33,110165,2949],{"class":39},[33,110167,110168],{"class":47}," (time.time() ",[33,110170,2949],{"class":39},[33,110172,110173],{"class":47}," step_start)\n",[19,110175,110176],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[631,110178,110180],{"id":110179},"renderer-输出是什么","renderer 输出是什么",[23,110182,110184],{"className":25,"code":110183,"language":27,"meta":28,"style":28},"image = renderer.render()\n",[30,110185,110186],{"__ignoreMap":28},[33,110187,110188,110190,110192],{"class":35,"line":36},[33,110189,109783],{"class":47},[33,110191,57],{"class":39},[33,110193,109788],{"class":47},[19,110195,110196],{},"得到的是 NumPy 数组，形状通常是：",[23,110198,110201],{"className":110199,"code":110200,"language":7436,"meta":28},[7434],"(height, width, 3)\n",[30,110202,110200],{"__ignoreMap":28},[19,110204,110205],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[23,110207,110209],{"className":25,"code":110208,"language":27,"meta":28,"style":28},"Image.fromarray(image).save(\"render_output.png\")\n",[30,110210,110211],{"__ignoreMap":28},[33,110212,110213,110216,110219],{"class":35,"line":36},[33,110214,110215],{"class":47},"Image.fromarray(image).save(",[33,110217,110218],{"class":60},"\"render_output.png\"",[33,110220,226],{"class":47},[14,110222,103459],{"id":103458},[19,110224,110225],{},"交互式 Viewer:",[23,110227,110229],{"className":25,"code":110228,"language":27,"meta":28,"style":28},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,110230,110231,110237,110241,110247,110253,110257,110261,110269,110274,110278,110282,110286,110291,110296,110300,110304,110308,110313,110317,110321,110325,110329,110333,110337,110349,110361,110369,110373,110383,110403,110413,110418,110423,110427,110444,110457,110462,110466,110470,110482],{"__ignoreMap":28},[33,110232,110233,110235],{"class":35,"line":36},[33,110234,32627],{"class":39},[33,110236,34058],{"class":47},[33,110238,110239],{"class":35,"line":51},[33,110240,100],{"emptyLinePlaceholder":99},[33,110242,110243,110245],{"class":35,"line":64},[33,110244,32627],{"class":39},[33,110246,103507],{"class":47},[33,110248,110249,110251],{"class":35,"line":76},[33,110250,32627],{"class":39},[33,110252,109755],{"class":47},[33,110254,110255],{"class":35,"line":87},[33,110256,100],{"emptyLinePlaceholder":99},[33,110258,110259],{"class":35,"line":96},[33,110260,100],{"emptyLinePlaceholder":99},[33,110262,110263,110265,110267],{"class":35,"line":103},[33,110264,103520],{"class":72},[33,110266,15804],{"class":39},[33,110268,103525],{"class":60},[33,110270,110271],{"class":35,"line":108},[33,110272,110273],{"class":60},"\u003Cmujoco model=\"viewer_demo\">\n",[33,110275,110276],{"class":35,"line":119},[33,110277,103535],{"class":60},[33,110279,110280],{"class":35,"line":128},[33,110281,100],{"emptyLinePlaceholder":99},[33,110283,110284],{"class":35,"line":1753},[33,110285,103544],{"class":60},[33,110287,110288],{"class":35,"line":1763},[33,110289,110290],{"class":60},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[33,110292,110293],{"class":35,"line":1775},[33,110294,110295],{"class":60},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,110297,110298],{"class":35,"line":1780},[33,110299,100],{"emptyLinePlaceholder":99},[33,110301,110302],{"class":35,"line":1785},[33,110303,103558],{"class":60},[33,110305,110306],{"class":35,"line":1940},[33,110307,103563],{"class":60},[33,110309,110310],{"class":35,"line":2183},[33,110311,110312],{"class":60},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,110314,110315],{"class":35,"line":2208},[33,110316,103573],{"class":60},[33,110318,110319],{"class":35,"line":2234},[33,110320,103578],{"class":60},[33,110322,110323],{"class":35,"line":2239},[33,110324,103583],{"class":60},[33,110326,110327],{"class":35,"line":2247},[33,110328,97905],{"class":60},[33,110330,110331],{"class":35,"line":2255},[33,110332,100],{"emptyLinePlaceholder":99},[33,110334,110335],{"class":35,"line":3992},[33,110336,100],{"emptyLinePlaceholder":99},[33,110338,110339,110341,110343,110345,110347],{"class":35,"line":4009},[33,110340,40],{"class":39},[33,110342,4232],{"class":43},[33,110344,103604],{"class":47},[33,110346,586],{"class":72},[33,110348,605],{"class":47},[33,110350,110351,110353,110355,110357,110359],{"class":35,"line":4014},[33,110352,103613],{"class":47},[33,110354,57],{"class":39},[33,110356,103618],{"class":47},[33,110358,103520],{"class":72},[33,110360,226],{"class":47},[33,110362,110363,110365,110367],{"class":35,"line":4019},[33,110364,103627],{"class":47},[33,110366,57],{"class":39},[33,110368,103632],{"class":47},[33,110370,110371],{"class":35,"line":4024},[33,110372,100],{"emptyLinePlaceholder":99},[33,110374,110375,110377,110379,110381],{"class":35,"line":4038},[33,110376,36403],{"class":39},[33,110378,110039],{"class":47},[33,110380,33613],{"class":39},[33,110382,110044],{"class":47},[33,110384,110385,110388,110391,110393,110396,110398,110401],{"class":35,"line":4043},[33,110386,110387],{"class":39},"        while",[33,110389,110390],{"class":47}," viewer.is_running() ",[33,110392,32696],{"class":39},[33,110394,110395],{"class":47}," data.time ",[33,110397,2226],{"class":39},[33,110399,110400],{"class":72}," 5.0",[33,110402,605],{"class":47},[33,110404,110405,110408,110410],{"class":35,"line":4834},[33,110406,110407],{"class":47},"            step_start ",[33,110409,57],{"class":39},[33,110411,110412],{"class":47}," time.time()\n",[33,110414,110415],{"class":35,"line":4848},[33,110416,110417],{"class":47},"            mujoco.mj_step(model, data)\n",[33,110419,110420],{"class":35,"line":4856},[33,110421,110422],{"class":47},"            viewer.sync()\n",[33,110424,110425],{"class":35,"line":4861},[33,110426,100],{"emptyLinePlaceholder":99},[33,110428,110429,110432,110434,110436,110438,110440,110442],{"class":35,"line":4867},[33,110430,110431],{"class":47},"            sleep_time ",[33,110433,57],{"class":39},[33,110435,110163],{"class":47},[33,110437,2949],{"class":39},[33,110439,110168],{"class":47},[33,110441,2949],{"class":39},[33,110443,110173],{"class":47},[33,110445,110446,110448,110451,110453,110455],{"class":35,"line":4873},[33,110447,6892],{"class":39},[33,110449,110450],{"class":47}," sleep_time ",[33,110452,3367],{"class":39},[33,110454,1437],{"class":72},[33,110456,605],{"class":47},[33,110458,110459],{"class":35,"line":4878},[33,110460,110461],{"class":47},"                time.sleep(sleep_time)\n",[33,110463,110464],{"class":35,"line":10194},[33,110465,100],{"emptyLinePlaceholder":99},[33,110467,110468],{"class":35,"line":10218},[33,110469,100],{"emptyLinePlaceholder":99},[33,110471,110472,110474,110476,110478,110480],{"class":35,"line":10223},[33,110473,3805],{"class":39},[33,110475,33451],{"class":72},[33,110477,1434],{"class":39},[33,110479,103767],{"class":60},[33,110481,605],{"class":47},[33,110483,110484],{"class":35,"line":10229},[33,110485,103774],{"class":47},[19,110487,105774],{},[23,110489,110491],{"className":26060,"code":110490,"language":26062,"meta":28,"style":28},"touch ch5_viewer.py\n",[30,110492,110493],{"__ignoreMap":28},[33,110494,110495,110497],{"class":35,"line":36},[33,110496,103489],{"class":43},[33,110498,110499],{"class":60}," ch5_viewer.py\n",[19,110501,110502],{},"离屏 Renderer 保存图片:",[23,110504,110506],{"className":25,"code":110505,"language":27,"meta":28,"style":28},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,110507,110508,110520,110524,110530,110540,110544,110548,110556,110561,110565,110569,110573,110577,110582,110586,110590,110594,110598,110602,110606,110610,110614,110618,110622,110626,110638,110650,110658,110683,110687,110703,110707,110711,110726,110735,110739,110753,110758,110763,110767,110779,110791,110795,110799,110811],{"__ignoreMap":28},[33,110509,110510,110512,110515,110517],{"class":35,"line":36},[33,110511,32970],{"class":39},[33,110513,110514],{"class":47}," pathlib ",[33,110516,32627],{"class":39},[33,110518,110519],{"class":47}," Path\n",[33,110521,110522],{"class":35,"line":51},[33,110523,100],{"emptyLinePlaceholder":99},[33,110525,110526,110528],{"class":35,"line":64},[33,110527,32627],{"class":39},[33,110529,103507],{"class":47},[33,110531,110532,110534,110536,110538],{"class":35,"line":76},[33,110533,32970],{"class":39},[33,110535,49486],{"class":72},[33,110537,49489],{"class":39},[33,110539,49492],{"class":47},[33,110541,110542],{"class":35,"line":87},[33,110543,100],{"emptyLinePlaceholder":99},[33,110545,110546],{"class":35,"line":96},[33,110547,100],{"emptyLinePlaceholder":99},[33,110549,110550,110552,110554],{"class":35,"line":103},[33,110551,103520],{"class":72},[33,110553,15804],{"class":39},[33,110555,103525],{"class":60},[33,110557,110558],{"class":35,"line":108},[33,110559,110560],{"class":60},"\u003Cmujoco model=\"renderer_demo\">\n",[33,110562,110563],{"class":35,"line":119},[33,110564,103535],{"class":60},[33,110566,110567],{"class":35,"line":128},[33,110568,100],{"emptyLinePlaceholder":99},[33,110570,110571],{"class":35,"line":1753},[33,110572,103544],{"class":60},[33,110574,110575],{"class":35,"line":1763},[33,110576,110290],{"class":60},[33,110578,110579],{"class":35,"line":1775},[33,110580,110581],{"class":60},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,110583,110584],{"class":35,"line":1780},[33,110585,110295],{"class":60},[33,110587,110588],{"class":35,"line":1785},[33,110589,100],{"emptyLinePlaceholder":99},[33,110591,110592],{"class":35,"line":1940},[33,110593,103558],{"class":60},[33,110595,110596],{"class":35,"line":2183},[33,110597,103563],{"class":60},[33,110599,110600],{"class":35,"line":2208},[33,110601,110312],{"class":60},[33,110603,110604],{"class":35,"line":2234},[33,110605,103573],{"class":60},[33,110607,110608],{"class":35,"line":2239},[33,110609,103578],{"class":60},[33,110611,110612],{"class":35,"line":2247},[33,110613,103583],{"class":60},[33,110615,110616],{"class":35,"line":2255},[33,110617,97905],{"class":60},[33,110619,110620],{"class":35,"line":3992},[33,110621,100],{"emptyLinePlaceholder":99},[33,110623,110624],{"class":35,"line":4009},[33,110625,100],{"emptyLinePlaceholder":99},[33,110627,110628,110630,110632,110634,110636],{"class":35,"line":4014},[33,110629,40],{"class":39},[33,110631,4232],{"class":43},[33,110633,103604],{"class":47},[33,110635,586],{"class":72},[33,110637,605],{"class":47},[33,110639,110640,110642,110644,110646,110648],{"class":35,"line":4019},[33,110641,103613],{"class":47},[33,110643,57],{"class":39},[33,110645,103618],{"class":47},[33,110647,103520],{"class":72},[33,110649,226],{"class":47},[33,110651,110652,110654,110656],{"class":35,"line":4024},[33,110653,103627],{"class":47},[33,110655,57],{"class":39},[33,110657,103632],{"class":47},[33,110659,110660,110663,110665,110667,110669,110671,110673,110675,110677,110679,110681],{"class":35,"line":4038},[33,110661,110662],{"class":47},"    renderer ",[33,110664,57],{"class":39},[33,110666,110077],{"class":47},[33,110668,27220],{"class":289},[33,110670,57],{"class":39},[33,110672,44565],{"class":72},[33,110674,245],{"class":47},[33,110676,27216],{"class":289},[33,110678,57],{"class":39},[33,110680,110092],{"class":72},[33,110682,226],{"class":47},[33,110684,110685],{"class":35,"line":4043},[33,110686,100],{"emptyLinePlaceholder":99},[33,110688,110689,110691,110693,110695,110697,110699,110701],{"class":35,"line":4834},[33,110690,675],{"class":39},[33,110692,103707],{"class":47},[33,110694,681],{"class":39},[33,110696,34670],{"class":72},[33,110698,133],{"class":47},[33,110700,2734],{"class":72},[33,110702,366],{"class":47},[33,110704,110705],{"class":35,"line":4848},[33,110706,103722],{"class":47},[33,110708,110709],{"class":35,"line":4856},[33,110710,100],{"emptyLinePlaceholder":99},[33,110712,110713,110716,110719,110721,110724],{"class":35,"line":4861},[33,110714,110715],{"class":47},"    renderer.update_scene(data, ",[33,110717,110718],{"class":289},"camera",[33,110720,57],{"class":39},[33,110722,110723],{"class":60},"\"fixed_camera\"",[33,110725,226],{"class":47},[33,110727,110728,110731,110733],{"class":35,"line":4867},[33,110729,110730],{"class":47},"    image ",[33,110732,57],{"class":39},[33,110734,109788],{"class":47},[33,110736,110737],{"class":35,"line":4873},[33,110738,100],{"emptyLinePlaceholder":99},[33,110740,110741,110744,110746,110749,110751],{"class":35,"line":4878},[33,110742,110743],{"class":47},"    output_path ",[33,110745,57],{"class":39},[33,110747,110748],{"class":47}," Path(",[33,110750,110218],{"class":60},[33,110752,226],{"class":47},[33,110754,110755],{"class":35,"line":10194},[33,110756,110757],{"class":47},"    Image.fromarray(image).save(output_path)\n",[33,110759,110760],{"class":35,"line":10218},[33,110761,110762],{"class":47},"    renderer.close()\n",[33,110764,110765],{"class":35,"line":10223},[33,110766,100],{"emptyLinePlaceholder":99},[33,110768,110769,110771,110773,110776],{"class":35,"line":10229},[33,110770,193],{"class":72},[33,110772,133],{"class":47},[33,110774,110775],{"class":60},"\"saved:\"",[33,110777,110778],{"class":47},", output_path.resolve())\n",[33,110780,110781,110783,110785,110788],{"class":35,"line":10256},[33,110782,193],{"class":72},[33,110784,133],{"class":47},[33,110786,110787],{"class":60},"\"image shape:\"",[33,110789,110790],{"class":47},", image.shape)\n",[33,110792,110793],{"class":35,"line":10261},[33,110794,100],{"emptyLinePlaceholder":99},[33,110796,110797],{"class":35,"line":10267},[33,110798,100],{"emptyLinePlaceholder":99},[33,110800,110801,110803,110805,110807,110809],{"class":35,"line":10279},[33,110802,3805],{"class":39},[33,110804,33451],{"class":72},[33,110806,1434],{"class":39},[33,110808,103767],{"class":60},[33,110810,605],{"class":47},[33,110812,110813],{"class":35,"line":10291},[33,110814,103774],{"class":47},[19,110816,105774],{},[23,110818,110820],{"className":26060,"code":110819,"language":26062,"meta":28,"style":28},"touch ch5_renderer.py\n",[30,110821,110822],{"__ignoreMap":28},[33,110823,110824,110826],{"class":35,"line":36},[33,110825,103489],{"class":43},[33,110827,110828],{"class":60}," ch5_renderer.py\n",[631,110830,103777],{"id":103777},[19,110832,110833],{},"viewer 上下文：",[23,110835,110837],{"className":25,"code":110836,"language":27,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[30,110838,110839],{"__ignoreMap":28},[33,110840,110841,110843,110845,110847],{"class":35,"line":36},[33,110842,110036],{"class":39},[33,110844,110039],{"class":47},[33,110846,33613],{"class":39},[33,110848,110044],{"class":47},[19,110850,110851,110853],{},[30,110852,110036],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110855,110856],{},"窗口循环：",[23,110858,110860],{"className":25,"code":110859,"language":27,"meta":28,"style":28},"while viewer.is_running() and data.time \u003C 5.0:\n",[30,110861,110862],{"__ignoreMap":28},[33,110863,110864,110867,110869,110871,110873,110875,110877],{"class":35,"line":36},[33,110865,110866],{"class":39},"while",[33,110868,110390],{"class":47},[33,110870,32696],{"class":39},[33,110872,110395],{"class":47},[33,110874,2226],{"class":39},[33,110876,110400],{"class":72},[33,110878,605],{"class":47},[19,110880,110881],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110883,110884],{},"固定相机：",[23,110886,110888],{"className":55286,"code":110887,"language":55288,"meta":28,"style":28},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[30,110889,110890],{"__ignoreMap":28},[33,110891,110892,110894,110896,110898,110900,110902,110904,110906,110909,110912,110914,110917],{"class":35,"line":36},[33,110893,2226],{"class":47},[33,110895,110718],{"class":53522},[33,110897,17158],{"class":43},[33,110899,57],{"class":47},[33,110901,110723],{"class":60},[33,110903,103312],{"class":43},[33,110905,57],{"class":47},[33,110907,110908],{"class":60},"\"1.5 -2.0 1.2\"",[33,110910,110911],{"class":43}," xyaxes",[33,110913,57],{"class":47},[33,110915,110916],{"class":60},"\"1 0.75 0 0 0 1\"",[33,110918,103350],{"class":47},[19,110920,110921],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[631,110923,110925],{"id":110924},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[23,110927,110929],{"className":25,"code":110928,"language":27,"meta":28,"style":28},"import time\n",[30,110930,110931],{"__ignoreMap":28},[33,110932,110933,110935],{"class":35,"line":36},[33,110934,32627],{"class":39},[33,110936,34058],{"class":47},[19,110938,110939],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[23,110941,110943],{"className":25,"code":110942,"language":27,"meta":28,"style":28},"import mujoco\nimport mujoco.viewer\n",[30,110944,110945,110951],{"__ignoreMap":28},[33,110946,110947,110949],{"class":35,"line":36},[33,110948,32627],{"class":39},[33,110950,103507],{"class":47},[33,110952,110953,110955],{"class":35,"line":51},[33,110954,32627],{"class":39},[33,110956,109755],{"class":47},[19,110958,110959],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[23,110961,110962],{"className":25,"code":110836,"language":27,"meta":28,"style":28},[30,110963,110964],{"__ignoreMap":28},[33,110965,110966,110968,110970,110972],{"class":35,"line":36},[33,110967,110036],{"class":39},[33,110969,110039],{"class":47},[33,110971,33613],{"class":39},[33,110973,110044],{"class":47},[19,110975,110976,110977,110980],{},"打开一个 viewer 窗口。",[30,110978,110979],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[23,110982,110983],{"className":25,"code":110859,"language":27,"meta":28,"style":28},[30,110984,110985],{"__ignoreMap":28},[33,110986,110987,110989,110991,110993,110995,110997,110999],{"class":35,"line":36},[33,110988,110866],{"class":39},[33,110990,110390],{"class":47},[33,110992,32696],{"class":39},[33,110994,110395],{"class":47},[33,110996,2226],{"class":39},[33,110998,110400],{"class":72},[33,111000,605],{"class":47},[19,111002,111003,111004,111007],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[30,111005,111006],{},"viewer.is_running()"," 会变成 false，循环结束。",[23,111009,111011],{"className":25,"code":111010,"language":27,"meta":28,"style":28},"step_start = time.time()\n",[30,111012,111013],{"__ignoreMap":28},[33,111014,111015,111018,111020],{"class":35,"line":36},[33,111016,111017],{"class":47},"step_start ",[33,111019,57],{"class":39},[33,111021,110412],{"class":47},[19,111023,111024],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[23,111026,111027],{"className":25,"code":110121,"language":27,"meta":28,"style":28},[30,111028,111029,111033],{"__ignoreMap":28},[33,111030,111031],{"class":35,"line":36},[33,111032,106708],{"class":47},[33,111034,111035],{"class":35,"line":51},[33,111036,110132],{"class":47},[19,111038,111039,111041,111042,111044,111045,111047,111048,111051],{},[30,111040,103421],{}," 推进物理仿真。",[30,111043,110140],{}," 把最新的 ",[30,111046,35626],{}," 同步到窗口里显示。没有 ",[30,111049,111050],{},"sync()","，窗口可能看不到最新状态。",[23,111053,111054],{"className":25,"code":110151,"language":27,"meta":28,"style":28},[30,111055,111056],{"__ignoreMap":28},[33,111057,111058,111060,111062,111064,111066,111068,111070],{"class":35,"line":36},[33,111059,110158],{"class":47},[33,111061,57],{"class":39},[33,111063,110163],{"class":47},[33,111065,2949],{"class":39},[33,111067,110168],{"class":47},[33,111069,2949],{"class":39},[33,111071,110173],{"class":47},[19,111073,111074],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[23,111076,111078],{"className":25,"code":111077,"language":27,"meta":28,"style":28},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[30,111079,111080,111092],{"__ignoreMap":28},[33,111081,111082,111084,111086,111088,111090],{"class":35,"line":36},[33,111083,3805],{"class":39},[33,111085,110450],{"class":47},[33,111087,3367],{"class":39},[33,111089,1437],{"class":72},[33,111091,605],{"class":47},[33,111093,111094],{"class":35,"line":51},[33,111095,111096],{"class":47},"    time.sleep(sleep_time)\n",[19,111098,111099],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[631,111101,111103],{"id":111102},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[23,111105,111107],{"className":25,"code":111106,"language":27,"meta":28,"style":28},"from pathlib import Path\n",[30,111108,111109],{"__ignoreMap":28},[33,111110,111111,111113,111115,111117],{"class":35,"line":36},[33,111112,32970],{"class":39},[33,111114,110514],{"class":47},[33,111116,32627],{"class":39},[33,111118,110519],{"class":47},[19,111120,111121,111122,111125,111126,111129],{},"导入 ",[30,111123,111124],{},"Path","，用来处理文件路径。相比直接写字符串，",[30,111127,111128],{},"Path(\"render_output.png\")"," 更清晰。",[23,111131,111133],{"className":25,"code":111132,"language":27,"meta":28,"style":28},"from PIL import Image\n",[30,111134,111135],{"__ignoreMap":28},[33,111136,111137,111139,111141,111143],{"class":35,"line":36},[33,111138,32970],{"class":39},[33,111140,49486],{"class":72},[33,111142,49489],{"class":39},[33,111144,49492],{"class":47},[19,111146,111147],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[23,111149,111150],{"className":55286,"code":110887,"language":55288,"meta":28,"style":28},[30,111151,111152],{"__ignoreMap":28},[33,111153,111154,111156,111158,111160,111162,111164,111166,111168,111170,111172,111174,111176],{"class":35,"line":36},[33,111155,2226],{"class":47},[33,111157,110718],{"class":53522},[33,111159,17158],{"class":43},[33,111161,57],{"class":47},[33,111163,110723],{"class":60},[33,111165,103312],{"class":43},[33,111167,57],{"class":47},[33,111169,110908],{"class":60},[33,111171,110911],{"class":43},[33,111173,57],{"class":47},[33,111175,110916],{"class":60},[33,111177,103350],{"class":47},[19,111179,111180,111181,111183,111184,111186,111187,111190,111191,111193],{},"定义一个相机。",[30,111182,207],{}," 是相机名字。",[30,111185,106350],{}," 是相机在世界里的位置。",[30,111188,111189],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[30,111192,106350],{}," 来调视角。",[23,111195,111197],{"className":25,"code":111196,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[30,111198,111199],{"__ignoreMap":28},[33,111200,111201,111203,111205,111207,111209,111211,111213,111215,111217,111219,111221],{"class":35,"line":36},[33,111202,109773],{"class":47},[33,111204,57],{"class":39},[33,111206,110077],{"class":47},[33,111208,27220],{"class":289},[33,111210,57],{"class":39},[33,111212,44565],{"class":72},[33,111214,245],{"class":47},[33,111216,27216],{"class":289},[33,111218,57],{"class":39},[33,111220,110092],{"class":72},[33,111222,226],{"class":47},[19,111224,111225,111226,1958,111228,111230],{},"创建离屏渲染器。",[30,111227,27220],{},[30,111229,27216],{}," 决定输出图片大小。",[23,111232,111233],{"className":25,"code":103881,"language":27,"meta":28,"style":28},[30,111234,111235,111251],{"__ignoreMap":28},[33,111236,111237,111239,111241,111243,111245,111247,111249],{"class":35,"line":36},[33,111238,5282],{"class":39},[33,111240,103707],{"class":47},[33,111242,681],{"class":39},[33,111244,34670],{"class":72},[33,111246,133],{"class":47},[33,111248,2734],{"class":72},[33,111250,366],{"class":47},[33,111252,111253],{"class":35,"line":51},[33,111254,103904],{"class":47},[19,111256,111257],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[23,111259,111261],{"className":25,"code":111260,"language":27,"meta":28,"style":28},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[30,111262,111263],{"__ignoreMap":28},[33,111264,111265,111268,111270,111272,111274],{"class":35,"line":36},[33,111266,111267],{"class":47},"renderer.update_scene(data, ",[33,111269,110718],{"class":289},[33,111271,57],{"class":39},[33,111273,110723],{"class":60},[33,111275,226],{"class":47},[19,111277,111278,111279,111281,111282,111285],{},"告诉 renderer：用当前 ",[30,111280,35626],{}," 的状态更新画面，并使用名为 ",[30,111283,111284],{},"fixed_camera"," 的相机视角。",[23,111287,111288],{"className":25,"code":110183,"language":27,"meta":28,"style":28},[30,111289,111290],{"__ignoreMap":28},[33,111291,111292,111294,111296],{"class":35,"line":36},[33,111293,109783],{"class":47},[33,111295,57],{"class":39},[33,111297,109788],{"class":47},[19,111299,111300,111301,111304],{},"真正渲染出图像。",[30,111302,111303],{},"image"," 是一个 NumPy 数组，不是文件。",[23,111306,111308],{"className":25,"code":111307,"language":27,"meta":28,"style":28},"Image.fromarray(image).save(output_path)\n",[30,111309,111310],{"__ignoreMap":28},[33,111311,111312],{"class":35,"line":36},[33,111313,111307],{"class":47},[19,111315,111316,111317,30622],{},"把数组转换成图片，并保存到 ",[30,111318,111319],{},"render_output.png",[23,111321,111323],{"className":25,"code":111322,"language":27,"meta":28,"style":28},"renderer.close()\n",[30,111324,111325],{"__ignoreMap":28},[33,111326,111327],{"class":35,"line":36},[33,111328,111322],{"class":47},[19,111330,111331],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111333,104521],{"id":104520},[19,111335,111336,111337,111339,111340,30622],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[30,111338,111319],{},"，并输出图像数组形状，例如 ",[30,111341,111342],{},"(480, 640, 3)",[19,111344,111345],{},"如果图片里看不到方块，先检查：",[328,111347,111348,111351,111354],{},[331,111349,111350],{},"方块是否掉到相机视野外。",[331,111352,111353],{},"camera 位置是否合理。",[331,111355,111356,111357,111360],{},"是否在 ",[30,111358,111359],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111362,104553],{"id":104552},[19,111364,111365],{},"运行 viewer:",[23,111367,111369],{"className":26060,"code":111368,"language":26062,"meta":28,"style":28},"python ch5_viewer.py\n",[30,111370,111371],{"__ignoreMap":28},[33,111372,111373,111375],{"class":35,"line":36},[33,111374,27],{"class":43},[33,111376,110499],{"class":60},[19,111378,111379],{},"运行 renderer:",[23,111381,111383],{"className":26060,"code":111382,"language":26062,"meta":28,"style":28},"python ch5_renderer.py\n",[30,111384,111385],{"__ignoreMap":28},[33,111386,111387,111389],{"class":35,"line":36},[33,111388,27],{"class":43},[33,111390,110828],{"class":60},[19,111392,111393],{},"如果在服务器上运行:",[23,111395,111397],{"className":26060,"code":111396,"language":26062,"meta":28,"style":28},"MUJOCO_GL=egl python ch5_renderer.py\n",[30,111398,111399],{"__ignoreMap":28},[33,111400,111401,111403,111405,111407,111410],{"class":35,"line":36},[33,111402,110017],{"class":47},[33,111404,57],{"class":39},[33,111406,110007],{"class":60},[33,111408,111409],{"class":43}," python",[33,111411,110828],{"class":60},[19,111413,109985],{},[23,111415,111417],{"className":26060,"code":111416,"language":26062,"meta":28,"style":28},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[30,111418,111419],{"__ignoreMap":28},[33,111420,111421,111423,111425,111427,111429],{"class":35,"line":36},[33,111422,110017],{"class":47},[33,111424,57],{"class":39},[33,111426,110011],{"class":60},[33,111428,111409],{"class":43},[33,111430,110828],{"class":60},[19,111432,111433],{},"再做几个练习：",[328,111435,111436,111443,111446,111452],{},[331,111437,111438,111439,111442],{},"把 renderer 分辨率改成 ",[30,111440,111441],{},"height=240, width=320","，观察输出 shape。",[331,111444,111445],{},"把方块颜色改成蓝色，重新保存图片。",[331,111447,111448,111449,111451],{},"把相机 ",[30,111450,106350],{}," 改远一点，观察画面中物体是否变小。",[331,111453,111454,111455,104619,111458,111461],{},"把 viewer 示例中的 ",[30,111456,111457],{},"data.time \u003C 5.0",[30,111459,111460],{},"data.time \u003C 20.0","，观察更长时间。",[14,111463,104658],{"id":104657},[631,111465,111467],{"id":111466},"viewer-窗口打不开","viewer 窗口打不开",[19,111469,111470],{},"安装:",[23,111472,111474],{"className":26060,"code":111473,"language":26062,"meta":28,"style":28},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[30,111475,111476],{"__ignoreMap":28},[33,111477,111478,111480,111482,111484,111486,111488,111490,111492,111494,111496,111498],{"class":35,"line":36},[33,111479,26815],{"class":43},[33,111481,28553],{"class":60},[33,111483,26072],{"class":60},[33,111485,28638],{"class":72},[33,111487,104711],{"class":60},[33,111489,103041],{"class":60},[33,111491,104716],{"class":60},[33,111493,103054],{"class":60},[33,111495,103060],{"class":60},[33,111497,103051],{"class":60},[33,111499,111500],{"class":60}," libXinerama\n",[631,111502,111504],{"id":111503},"glfwerror",[30,111505,111506],{},"GLFWError",[19,111508,111509],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[631,111511,111513],{"id":111512},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111515,111516,111517,84748,111519,111521],{},"尝试 ",[30,111518,103243],{},[30,111520,103246],{},"。可能存在版本差异。",[631,111523,111524],{"id":111524},"保存图片是黑的",[19,111526,104780],{},[328,111528,111529,111532,111535,111545],{},[331,111530,111531],{},"XML 里是否有 light。",[331,111533,111534],{},"相机是否对着模型。",[331,111536,111537,111538,111541,111542,30622],{},"是否先 ",[30,111539,111540],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[30,111543,111544],{},"renderer.render()",[331,111546,111547],{},"物体是否已经掉出视野。",[631,111549,111550],{"id":111550},"远程服务器没有显示器",[19,111552,111553],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[23,111555,111556],{"className":26060,"code":111396,"language":26062,"meta":28,"style":28},[30,111557,111558],{"__ignoreMap":28},[33,111559,111560,111562,111564,111566,111568],{"class":35,"line":36},[33,111561,110017],{"class":47},[33,111563,57],{"class":39},[33,111565,110007],{"class":60},[33,111567,111409],{"class":43},[33,111569,110828],{"class":60},[19,111571,111572],{},"如果 EGL 不可用，再尝试：",[23,111574,111575],{"className":26060,"code":111416,"language":26062,"meta":28,"style":28},[30,111576,111577],{"__ignoreMap":28},[33,111578,111579,111581,111583,111585,111587],{"class":35,"line":36},[33,111580,110017],{"class":47},[33,111582,57],{"class":39},[33,111584,110011],{"class":60},[33,111586,111409],{"class":43},[33,111588,110828],{"class":60},[14,111590,104812],{"id":104811},[19,111592,111593],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[328,111595,111596,111599,111602],{},[331,111597,111598],{},"先用 viewer 看模型和控制是否正常。",[331,111600,111601],{},"再用 renderer 保存图片或构造视觉观测。",[331,111603,111604],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2331,111606,111607],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":28,"searchDepth":51,"depth":51,"links":111609},[111610,111611,111612,111617,111622,111623,111624,111631],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":111613},[111614,111615,111616],{"id":110114,"depth":64,"text":110115},{"id":110144,"depth":64,"text":110145},{"id":110179,"depth":64,"text":110180},{"id":103458,"depth":51,"text":103459,"children":111618},[111619,111620,111621],{"id":103777,"depth":64,"text":103777},{"id":110924,"depth":64,"text":110925},{"id":111102,"depth":64,"text":111103},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":111625},[111626,111627,111628,111629,111630],{"id":111466,"depth":64,"text":111467},{"id":111503,"depth":64,"text":111506},{"id":111512,"depth":64,"text":111513},{"id":111524,"depth":64,"text":111524},{"id":111550,"depth":64,"text":111550},{"id":104811,"depth":51,"text":104812},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109722,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111638,"title":111639,"body":111640,"description":28,"extension":2360,"meta":113551,"navigation":99,"path":113552,"seo":113553,"stem":113554,"__hash__":113555},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111641,"toc":113527},[111642,111645,111647,111650,111652,111671,111674,111680,111683,111685,111687,111711,111713,111727,111729,111770,111772,111783,111785,111788,111794,111797,111831,111834,111866,111869,111901,111905,111908,111948,111951,111957,111960,111966,111970,111973,111979,111982,111986,111989,112029,112031,112044,112047,112049,112631,112633,112645,112648,112659,112661,112664,112683,112695,112698,112719,112722,112725,112768,112771,112774,112794,112801,112803,112821,112836,112839,112845,112848,112854,112871,112878,112909,112920,112954,112965,112982,112991,112999,113004,113018,113021,113042,113048,113062,113067,113097,113107,113132,113140,113163,113166,113182,113185,113193,113199,113221,113234,113255,113264,113303,113314,113316,113319,113325,113328,113331,113337,113340,113360,113363,113365,113404,113406,113409,113417,113420,113423,113450,113453,113463,113469,113472,113478,113480,113486,113490,113493,113495,113498,113522,113525],[10,111643,111639],{"id":111644},"_6控制任务cartpole",[14,111646,102854],{"id":102853},[19,111648,111649],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111651,106535],{},[328,111653,111654,111657,111659,111662,111665,111668],{},[331,111655,111656],{},"slide joint",[331,111658,108387],{},[331,111660,111661],{},"cart force actuator",[331,111663,111664],{},"状态观测",[331,111666,111667],{},"简单控制循环",[331,111669,111670],{},"reward 设计雏形",[19,111672,111673],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[23,111675,111678],{"className":111676,"code":111677,"language":7436,"meta":28},[7434],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[30,111679,111677],{"__ignoreMap":28},[19,111681,111682],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111684,102977],{"id":102976},[19,111686,102980],{},[23,111688,111689],{"className":26060,"code":106591,"language":26062,"meta":28,"style":28},[30,111690,111691],{"__ignoreMap":28},[33,111692,111693,111695,111697,111699,111701,111703,111705,111707,111709],{"class":35,"line":36},[33,111694,26815],{"class":43},[33,111696,28553],{"class":60},[33,111698,26072],{"class":60},[33,111700,28638],{"class":72},[33,111702,106606],{"class":60},[33,111704,103005],{"class":60},[33,111706,104706],{"class":60},[33,111708,103021],{"class":60},[33,111710,106615],{"class":60},[19,111712,105024],{},[23,111714,111715],{"className":26060,"code":103126,"language":26062,"meta":28,"style":28},[30,111716,111717],{"__ignoreMap":28},[33,111718,111719,111721,111723,111725],{"class":35,"line":36},[33,111720,26069],{"class":43},[33,111722,26072],{"class":60},[33,111724,103137],{"class":60},[33,111726,103140],{"class":60},[19,111728,105041],{},[23,111730,111732],{"className":26060,"code":111731,"language":26062,"meta":28,"style":28},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[30,111733,111734,111751,111760],{"__ignoreMap":28},[33,111735,111736,111738,111740,111742,111745,111747,111749],{"class":35,"line":36},[33,111737,32567],{"class":43},[33,111739,31413],{"class":60},[33,111741,27354],{"class":72},[33,111743,111744],{"class":60}," mujoco-cartpole",[33,111746,103182],{"class":60},[33,111748,103185],{"class":72},[33,111750,103188],{"class":72},[33,111752,111753,111755,111757],{"class":35,"line":51},[33,111754,32567],{"class":43},[33,111756,103195],{"class":60},[33,111758,111759],{"class":60}," mujoco-cartpole\n",[33,111761,111762,111764,111766,111768],{"class":35,"line":64},[33,111763,26069],{"class":43},[33,111765,26072],{"class":60},[33,111767,103137],{"class":60},[33,111769,103140],{"class":60},[19,111771,103211],{},[328,111773,111774,111777,111780],{},[331,111775,111776],{},"本章不依赖 Gymnasium。",[331,111778,111779],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[331,111781,111782],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111784,103251],{"id":103250},[19,111786,111787],{},"Cartpole 的模型结构:",[23,111789,111792],{"className":111790,"code":111791,"language":7436,"meta":28},[7434],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[30,111793,111791],{"__ignoreMap":28},[19,111795,111796],{},"小车通过 slide joint 左右移动:",[23,111798,111800],{"className":55286,"code":111799,"language":55288,"meta":28,"style":28},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[30,111801,111802],{"__ignoreMap":28},[33,111803,111804,111806,111808,111810,111812,111815,111817,111819,111822,111824,111826,111829],{"class":35,"line":36},[33,111805,2226],{"class":47},[33,111807,105161],{"class":53522},[33,111809,17158],{"class":43},[33,111811,57],{"class":47},[33,111813,111814],{"class":60},"\"cart_x\"",[33,111816,56043],{"class":43},[33,111818,57],{"class":47},[33,111820,111821],{"class":60},"\"slide\"",[33,111823,108231],{"class":43},[33,111825,57],{"class":47},[33,111827,111828],{"class":60},"\"1 0 0\"",[33,111830,103350],{"class":47},[19,111832,111833],{},"杆子通过 hinge joint 旋转:",[23,111835,111837],{"className":55286,"code":111836,"language":55288,"meta":28,"style":28},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,111838,111839],{"__ignoreMap":28},[33,111840,111841,111843,111845,111847,111849,111852,111854,111856,111858,111860,111862,111864],{"class":35,"line":36},[33,111842,2226],{"class":47},[33,111844,105161],{"class":53522},[33,111846,17158],{"class":43},[33,111848,57],{"class":47},[33,111850,111851],{"class":60},"\"pole_hinge\"",[33,111853,56043],{"class":43},[33,111855,57],{"class":47},[33,111857,108222],{"class":60},[33,111859,108231],{"class":43},[33,111861,57],{"class":47},[33,111863,108236],{"class":60},[33,111865,103350],{"class":47},[19,111867,111868],{},"控制力作用在小车 slide joint 上:",[23,111870,111872],{"className":55286,"code":111871,"language":55288,"meta":28,"style":28},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[30,111873,111874],{"__ignoreMap":28},[33,111875,111876,111878,111880,111882,111884,111887,111889,111891,111893,111895,111897,111899],{"class":35,"line":36},[33,111877,2226],{"class":47},[33,111879,108277],{"class":53522},[33,111881,17158],{"class":43},[33,111883,57],{"class":47},[33,111885,111886],{"class":60},"\"cart_motor\"",[33,111888,108287],{"class":43},[33,111890,57],{"class":47},[33,111892,111814],{"class":60},[33,111894,108294],{"class":43},[33,111896,57],{"class":47},[33,111898,56535],{"class":60},[33,111900,103350],{"class":47},[631,111902,111904],{"id":111903},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111906,111907],{},"这个简化模型有两个关节：",[2563,111909,111910,111921],{},[2566,111911,111912],{},[2569,111913,111914,111916,111918],{},[2572,111915,104964],{"align":25974},[2572,111917,25975],{"align":25974},[2572,111919,111920],{"align":25974},"对应状态",[2610,111922,111923,111936],{},[2569,111924,111925,111930,111933],{},[2615,111926,111927],{"align":25974},[30,111928,111929],{},"cart_x",[2615,111931,111932],{"align":25974},"slide",[2615,111934,111935],{"align":25974},"小车 x 位置",[2569,111937,111938,111943,111945],{},[2615,111939,111940],{"align":25974},[30,111941,111942],{},"pole_hinge",[2615,111944,108043],{"align":25974},[2615,111946,111947],{"align":25974},"杆子角度",[19,111949,111950],{},"所以：",[23,111952,111955],{"className":111953,"code":111954,"language":7436,"meta":28},[7434],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[30,111956,111954],{"__ignoreMap":28},[19,111958,111959],{},"把它们拼起来就是观测：",[23,111961,111964],{"className":111962,"code":111963,"language":7436,"meta":28},[7434],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,111965,111963],{"__ignoreMap":28},[631,111967,111969],{"id":111968},"action-是什么","action 是什么",[19,111971,111972],{},"本章只有一个 actuator：",[23,111974,111977],{"className":111975,"code":111976,"language":7436,"meta":28},[7434],"data.ctrl[0] = action\n",[30,111978,111976],{"__ignoreMap":28},[19,111980,111981],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[631,111983,111985],{"id":111984},"reward-是什么","reward 是什么",[19,111987,111988],{},"奖励函数：",[23,111990,111992],{"className":25,"code":111991,"language":27,"meta":28,"style":28},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[30,111993,111994],{"__ignoreMap":28},[33,111995,111996,111998,112001,112003,112005,112007,112010,112012,112015,112017,112019,112021,112024,112026],{"class":35,"line":36},[33,111997,19284],{"class":39},[33,111999,112000],{"class":72}," float",[33,112002,133],{"class":47},[33,112004,104608],{"class":72},[33,112006,54490],{"class":39},[33,112008,112009],{"class":72}," 0.1",[33,112011,8764],{"class":39},[33,112013,112014],{"class":47}," cart_x ",[33,112016,657],{"class":39},[33,112018,112014],{"class":47},[33,112020,2949],{"class":39},[33,112022,112023],{"class":47}," pole_angle ",[33,112025,657],{"class":39},[33,112027,112028],{"class":47}," pole_angle)\n",[19,112030,108429],{},[328,112032,112033,112038,112041],{},[331,112034,112035,112036,30622],{},"基础奖励是 ",[30,112037,104608],{},[331,112039,112040],{},"小车离中心越远，扣分越多。",[331,112042,112043],{},"杆子角度越大，扣分越多。",[19,112045,112046],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,112048,103459],{"id":103458},[23,112050,112052],{"className":25,"code":112051,"language":27,"meta":28,"style":28},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,112053,112054,112060,112070,112074,112078,112086,112091,112095,112099,112103,112108,112112,112117,112122,112127,112131,112136,112141,112146,112150,112154,112158,112162,112166,112171,112175,112179,112183,112187,112191,112201,112208,112212,112216,112230,112244,112257,112287,112291,112295,112307,112319,112327,112331,112344,112348,112352,112361,112365,112381,112391,112404,112417,112421,112444,112462,112466,112478,112482,112486,112496,112506,112510,112526,112567,112571,112591,112607,112611,112615,112627],{"__ignoreMap":28},[33,112055,112056,112058],{"class":35,"line":36},[33,112057,32627],{"class":39},[33,112059,103507],{"class":47},[33,112061,112062,112064,112066,112068],{"class":35,"line":51},[33,112063,32627],{"class":39},[33,112065,33610],{"class":47},[33,112067,33613],{"class":39},[33,112069,33616],{"class":47},[33,112071,112072],{"class":35,"line":64},[33,112073,100],{"emptyLinePlaceholder":99},[33,112075,112076],{"class":35,"line":76},[33,112077,100],{"emptyLinePlaceholder":99},[33,112079,112080,112082,112084],{"class":35,"line":87},[33,112081,103520],{"class":72},[33,112083,15804],{"class":39},[33,112085,103525],{"class":60},[33,112087,112088],{"class":35,"line":96},[33,112089,112090],{"class":60},"\u003Cmujoco model=\"cartpole\">\n",[33,112092,112093],{"class":35,"line":103},[33,112094,103535],{"class":60},[33,112096,112097],{"class":35,"line":108},[33,112098,100],{"emptyLinePlaceholder":99},[33,112100,112101],{"class":35,"line":119},[33,112102,103544],{"class":60},[33,112104,112105],{"class":35,"line":128},[33,112106,112107],{"class":60},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,112109,112110],{"class":35,"line":1753},[33,112111,100],{"emptyLinePlaceholder":99},[33,112113,112114],{"class":35,"line":1763},[33,112115,112116],{"class":60},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[33,112118,112119],{"class":35,"line":1775},[33,112120,112121],{"class":60},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[33,112123,112124],{"class":35,"line":1780},[33,112125,112126],{"class":60},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[33,112128,112129],{"class":35,"line":1785},[33,112130,100],{"emptyLinePlaceholder":99},[33,112132,112133],{"class":35,"line":1940},[33,112134,112135],{"class":60},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[33,112137,112138],{"class":35,"line":2183},[33,112139,112140],{"class":60},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[33,112142,112143],{"class":35,"line":2208},[33,112144,112145],{"class":60},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[33,112147,112148],{"class":35,"line":2234},[33,112149,108641],{"class":60},[33,112151,112152],{"class":35,"line":2239},[33,112153,103573],{"class":60},[33,112155,112156],{"class":35,"line":2247},[33,112157,103578],{"class":60},[33,112159,112160],{"class":35,"line":2255},[33,112161,100],{"emptyLinePlaceholder":99},[33,112163,112164],{"class":35,"line":3992},[33,112165,108658],{"class":60},[33,112167,112168],{"class":35,"line":4009},[33,112169,112170],{"class":60},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,112172,112173],{"class":35,"line":4014},[33,112174,108668],{"class":60},[33,112176,112177],{"class":35,"line":4019},[33,112178,103583],{"class":60},[33,112180,112181],{"class":35,"line":4024},[33,112182,97905],{"class":60},[33,112184,112185],{"class":35,"line":4038},[33,112186,100],{"emptyLinePlaceholder":99},[33,112188,112189],{"class":35,"line":4043},[33,112190,100],{"emptyLinePlaceholder":99},[33,112192,112193,112195,112198],{"class":35,"line":4834},[33,112194,40],{"class":39},[33,112196,112197],{"class":43}," get_observation",[33,112199,112200],{"class":47},"(data: mujoco.MjData) -> np.ndarray:\n",[33,112202,112203,112205],{"class":35,"line":4848},[33,112204,90],{"class":39},[33,112206,112207],{"class":47}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,112209,112210],{"class":35,"line":4856},[33,112211,100],{"emptyLinePlaceholder":99},[33,112213,112214],{"class":35,"line":4861},[33,112215,100],{"emptyLinePlaceholder":99},[33,112217,112218,112220,112223,112226,112228],{"class":35,"line":4867},[33,112219,40],{"class":39},[33,112221,112222],{"class":43}," compute_reward",[33,112224,112225],{"class":47},"(obs: np.ndarray) -> ",[33,112227,2471],{"class":72},[33,112229,605],{"class":47},[33,112231,112232,112235,112237,112240,112242],{"class":35,"line":4873},[33,112233,112234],{"class":47},"    cart_x ",[33,112236,57],{"class":39},[33,112238,112239],{"class":47}," obs[",[33,112241,2617],{"class":72},[33,112243,919],{"class":47},[33,112245,112246,112249,112251,112253,112255],{"class":35,"line":4878},[33,112247,112248],{"class":47},"    pole_angle ",[33,112250,57],{"class":39},[33,112252,112239],{"class":47},[33,112254,720],{"class":72},[33,112256,919],{"class":47},[33,112258,112259,112261,112263,112265,112267,112269,112271,112273,112275,112277,112279,112281,112283,112285],{"class":35,"line":10194},[33,112260,90],{"class":39},[33,112262,112000],{"class":72},[33,112264,133],{"class":47},[33,112266,104608],{"class":72},[33,112268,54490],{"class":39},[33,112270,112009],{"class":72},[33,112272,8764],{"class":39},[33,112274,112014],{"class":47},[33,112276,657],{"class":39},[33,112278,112014],{"class":47},[33,112280,2949],{"class":39},[33,112282,112023],{"class":47},[33,112284,657],{"class":39},[33,112286,112028],{"class":47},[33,112288,112289],{"class":35,"line":10218},[33,112290,100],{"emptyLinePlaceholder":99},[33,112292,112293],{"class":35,"line":10223},[33,112294,100],{"emptyLinePlaceholder":99},[33,112296,112297,112299,112301,112303,112305],{"class":35,"line":10229},[33,112298,40],{"class":39},[33,112300,4232],{"class":43},[33,112302,103604],{"class":47},[33,112304,586],{"class":72},[33,112306,605],{"class":47},[33,112308,112309,112311,112313,112315,112317],{"class":35,"line":10256},[33,112310,103613],{"class":47},[33,112312,57],{"class":39},[33,112314,103618],{"class":47},[33,112316,103520],{"class":72},[33,112318,226],{"class":47},[33,112320,112321,112323,112325],{"class":35,"line":10261},[33,112322,103627],{"class":47},[33,112324,57],{"class":39},[33,112326,103632],{"class":47},[33,112328,112329],{"class":35,"line":10267},[33,112330,100],{"emptyLinePlaceholder":99},[33,112332,112333,112335,112337,112339,112341],{"class":35,"line":10279},[33,112334,107272],{"class":47},[33,112336,720],{"class":72},[33,112338,2172],{"class":47},[33,112340,57],{"class":39},[33,112342,112343],{"class":72}," 0.1\n",[33,112345,112346],{"class":35,"line":10291},[33,112347,107285],{"class":47},[33,112349,112350],{"class":35,"line":10303},[33,112351,100],{"emptyLinePlaceholder":99},[33,112353,112354,112357,112359],{"class":35,"line":11961},[33,112355,112356],{"class":47},"    total_reward ",[33,112358,57],{"class":39},[33,112360,106964],{"class":72},[33,112362,112363],{"class":35,"line":11986},[33,112364,100],{"emptyLinePlaceholder":99},[33,112366,112367,112369,112371,112373,112375,112377,112379],{"class":35,"line":12009},[33,112368,675],{"class":39},[33,112370,33845],{"class":47},[33,112372,681],{"class":39},[33,112374,34670],{"class":72},[33,112376,133],{"class":47},[33,112378,8656],{"class":72},[33,112380,366],{"class":47},[33,112382,112383,112386,112388],{"class":35,"line":12033},[33,112384,112385],{"class":47},"        obs ",[33,112387,57],{"class":39},[33,112389,112390],{"class":47}," get_observation(data)\n",[33,112392,112393,112396,112398,112400,112402],{"class":35,"line":12038},[33,112394,112395],{"class":47},"        pole_angle ",[33,112397,57],{"class":39},[33,112399,112239],{"class":47},[33,112401,720],{"class":72},[33,112403,919],{"class":47},[33,112405,112406,112409,112411,112413,112415],{"class":35,"line":12043},[33,112407,112408],{"class":47},"        pole_angular_velocity ",[33,112410,57],{"class":39},[33,112412,112239],{"class":47},[33,112414,730],{"class":72},[33,112416,919],{"class":47},[33,112418,112419],{"class":35,"line":12048},[33,112420,100],{"emptyLinePlaceholder":99},[33,112422,112423,112426,112428,112431,112433,112435,112437,112439,112441],{"class":35,"line":12057},[33,112424,112425],{"class":47},"        action ",[33,112427,57],{"class":39},[33,112429,112430],{"class":72}," 2.0",[33,112432,8764],{"class":39},[33,112434,112023],{"class":47},[33,112436,880],{"class":39},[33,112438,64085],{"class":72},[33,112440,8764],{"class":39},[33,112442,112443],{"class":47}," pole_angular_velocity\n",[33,112445,112446,112448,112450,112452,112454,112456,112458,112460],{"class":35,"line":12062},[33,112447,112425],{"class":47},[33,112449,57],{"class":39},[33,112451,109650],{"class":47},[33,112453,2949],{"class":39},[33,112455,104608],{"class":72},[33,112457,245],{"class":47},[33,112459,104608],{"class":72},[33,112461,226],{"class":47},[33,112463,112464],{"class":35,"line":12068},[33,112465,100],{"emptyLinePlaceholder":99},[33,112467,112468,112470,112472,112474,112476],{"class":35,"line":12089},[33,112469,108820],{"class":47},[33,112471,2617],{"class":72},[33,112473,2172],{"class":47},[33,112475,57],{"class":39},[33,112477,109673],{"class":47},[33,112479,112480],{"class":35,"line":12095},[33,112481,103722],{"class":47},[33,112483,112484],{"class":35,"line":12109},[33,112485,100],{"emptyLinePlaceholder":99},[33,112487,112488,112491,112493],{"class":35,"line":12115},[33,112489,112490],{"class":47},"        reward ",[33,112492,57],{"class":39},[33,112494,112495],{"class":47}," compute_reward(get_observation(data))\n",[33,112497,112498,112501,112503],{"class":35,"line":12142},[33,112499,112500],{"class":47},"        total_reward ",[33,112502,692],{"class":39},[33,112504,112505],{"class":47}," reward\n",[33,112507,112508],{"class":35,"line":12151},[33,112509,100],{"emptyLinePlaceholder":99},[33,112511,112512,112514,112516,112518,112520,112522,112524],{"class":35,"line":12157},[33,112513,2130],{"class":39},[33,112515,33845],{"class":47},[33,112517,1429],{"class":39},[33,112519,8001],{"class":72},[33,112521,1434],{"class":39},[33,112523,1437],{"class":72},[33,112525,605],{"class":47},[33,112527,112528,112530,112532,112535,112538,112541,112544,112546,112549,112552,112554,112556,112558,112560,112563,112565],{"class":35,"line":12165},[33,112529,36875],{"class":72},[33,112531,133],{"class":47},[33,112533,112534],{"class":60},"\"step:\"",[33,112536,112537],{"class":47},", step, ",[33,112539,112540],{"class":60},"\"obs:\"",[33,112542,112543],{"class":47},", np.round(obs, ",[33,112545,730],{"class":72},[33,112547,112548],{"class":47},"), ",[33,112550,112551],{"class":60},"\"action:\"",[33,112553,245],{"class":47},[33,112555,34245],{"class":72},[33,112557,133],{"class":47},[33,112559,2471],{"class":72},[33,112561,112562],{"class":47},"(action), ",[33,112564,730],{"class":72},[33,112566,551],{"class":47},[33,112568,112569],{"class":35,"line":12170},[33,112570,100],{"emptyLinePlaceholder":99},[33,112572,112573,112575,112577,112580,112582,112584,112587,112589],{"class":35,"line":18842},[33,112574,193],{"class":72},[33,112576,133],{"class":47},[33,112578,112579],{"class":60},"\"total_reward:\"",[33,112581,245],{"class":47},[33,112583,34245],{"class":72},[33,112585,112586],{"class":47},"(total_reward, ",[33,112588,730],{"class":72},[33,112590,551],{"class":47},[33,112592,112593,112595,112597,112600,112603,112605],{"class":35,"line":18848},[33,112594,193],{"class":72},[33,112596,133],{"class":47},[33,112598,112599],{"class":60},"\"final obs:\"",[33,112601,112602],{"class":47},", np.round(get_observation(data), ",[33,112604,730],{"class":72},[33,112606,551],{"class":47},[33,112608,112609],{"class":35,"line":18871},[33,112610,100],{"emptyLinePlaceholder":99},[33,112612,112613],{"class":35,"line":18877},[33,112614,100],{"emptyLinePlaceholder":99},[33,112616,112617,112619,112621,112623,112625],{"class":35,"line":18900},[33,112618,3805],{"class":39},[33,112620,33451],{"class":72},[33,112622,1434],{"class":39},[33,112624,103767],{"class":60},[33,112626,605],{"class":47},[33,112628,112629],{"class":35,"line":18914},[33,112630,103774],{"class":47},[19,112632,105774],{},[23,112634,112636],{"className":26060,"code":112635,"language":26062,"meta":28,"style":28},"touch ch6_cartpole.py\n",[30,112637,112638],{"__ignoreMap":28},[33,112639,112640,112642],{"class":35,"line":36},[33,112641,103489],{"class":43},[33,112643,112644],{"class":60}," ch6_cartpole.py\n",[19,112646,112647],{},"运行：",[23,112649,112651],{"className":26060,"code":112650,"language":26062,"meta":28,"style":28},"python ch6_cartpole.py\n",[30,112652,112653],{"__ignoreMap":28},[33,112654,112655,112657],{"class":35,"line":36},[33,112656,27],{"class":43},[33,112658,112644],{"class":60},[631,112660,103777],{"id":103777},[19,112662,112663],{},"构造观测：",[23,112665,112667],{"className":25,"code":112666,"language":27,"meta":28,"style":28},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[30,112668,112669,112677],{"__ignoreMap":28},[33,112670,112671,112673,112675],{"class":35,"line":36},[33,112672,40],{"class":39},[33,112674,112197],{"class":43},[33,112676,112200],{"class":47},[33,112678,112679,112681],{"class":35,"line":51},[33,112680,90],{"class":39},[33,112682,112207],{"class":47},[19,112684,112685,112688,112689,112691,112692,112694],{},[30,112686,112687],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[30,112690,106234],{}," 2 维，",[30,112693,106564],{}," 2 维，所以 obs 是 4 维。",[19,112696,112697],{},"设置初始角度：",[23,112699,112701],{"className":25,"code":112700,"language":27,"meta":28,"style":28},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[30,112702,112703,112715],{"__ignoreMap":28},[33,112704,112705,112707,112709,112711,112713],{"class":35,"line":36},[33,112706,106902],{"class":47},[33,112708,720],{"class":72},[33,112710,2172],{"class":47},[33,112712,57],{"class":39},[33,112714,112343],{"class":72},[33,112716,112717],{"class":35,"line":51},[33,112718,106746],{"class":47},[19,112720,112721],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112723,112724],{},"简单反馈控制：",[23,112726,112728],{"className":25,"code":112727,"language":27,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[30,112729,112730,112750],{"__ignoreMap":28},[33,112731,112732,112734,112736,112738,112740,112742,112744,112746,112748],{"class":35,"line":36},[33,112733,109645],{"class":47},[33,112735,57],{"class":39},[33,112737,112430],{"class":72},[33,112739,8764],{"class":39},[33,112741,112023],{"class":47},[33,112743,880],{"class":39},[33,112745,64085],{"class":72},[33,112747,8764],{"class":39},[33,112749,112443],{"class":47},[33,112751,112752,112754,112756,112758,112760,112762,112764,112766],{"class":35,"line":51},[33,112753,109645],{"class":47},[33,112755,57],{"class":39},[33,112757,109650],{"class":47},[33,112759,2949],{"class":39},[33,112761,104608],{"class":72},[33,112763,245],{"class":47},[33,112765,104608],{"class":72},[33,112767,226],{"class":47},[19,112769,112770],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112772,112773],{},"限制动作：",[23,112775,112777],{"className":25,"code":112776,"language":27,"meta":28,"style":28},"np.clip(action, -1.0, 1.0)\n",[30,112778,112779],{"__ignoreMap":28},[33,112780,112781,112784,112786,112788,112790,112792],{"class":35,"line":36},[33,112782,112783],{"class":47},"np.clip(action, ",[33,112785,2949],{"class":39},[33,112787,104608],{"class":72},[33,112789,245],{"class":47},[33,112791,104608],{"class":72},[33,112793,226],{"class":47},[19,112795,112796,112797,112800],{},"因为 XML 里 ",[30,112798,112799],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[631,112802,103913],{"id":103913},[23,112804,112805],{"className":25,"code":112666,"language":27,"meta":28,"style":28},[30,112806,112807,112815],{"__ignoreMap":28},[33,112808,112809,112811,112813],{"class":35,"line":36},[33,112810,40],{"class":39},[33,112812,112197],{"class":43},[33,112814,112200],{"class":47},[33,112816,112817,112819],{"class":35,"line":51},[33,112818,90],{"class":39},[33,112820,112207],{"class":47},[19,112822,112823,112824,112827,112828,112831,112832,112835],{},"这段定义了一个函数，用来获取当前观测。",[30,112825,112826],{},"data.qpos.copy()"," 是位置数组副本，",[30,112829,112830],{},"data.qvel.copy()"," 是速度数组副本。",[30,112833,112834],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112837,112838],{},"在本章模型里：",[23,112840,112843],{"className":112841,"code":112842,"language":7436,"meta":28},[7434],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[30,112844,112842],{"__ignoreMap":28},[19,112846,112847],{},"所以返回的 obs 是：",[23,112849,112852],{"className":112850,"code":112851,"language":7436,"meta":28},[7434],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[30,112853,112851],{"__ignoreMap":28},[23,112855,112857],{"className":25,"code":112856,"language":27,"meta":28,"style":28},"def compute_reward(obs: np.ndarray) -> float:\n",[30,112858,112859],{"__ignoreMap":28},[33,112860,112861,112863,112865,112867,112869],{"class":35,"line":36},[33,112862,40],{"class":39},[33,112864,112222],{"class":43},[33,112866,112225],{"class":47},[33,112868,2471],{"class":72},[33,112870,605],{"class":47},[19,112872,112873,112874,112877],{},"这行定义奖励函数。输入是观测 ",[30,112875,112876],{},"obs","，输出是一个浮点数奖励。",[23,112879,112881],{"className":25,"code":112880,"language":27,"meta":28,"style":28},"cart_x = obs[0]\npole_angle = obs[1]\n",[30,112882,112883,112896],{"__ignoreMap":28},[33,112884,112885,112888,112890,112892,112894],{"class":35,"line":36},[33,112886,112887],{"class":47},"cart_x ",[33,112889,57],{"class":39},[33,112891,112239],{"class":47},[33,112893,2617],{"class":72},[33,112895,919],{"class":47},[33,112897,112898,112901,112903,112905,112907],{"class":35,"line":51},[33,112899,112900],{"class":47},"pole_angle ",[33,112902,57],{"class":39},[33,112904,112239],{"class":47},[33,112906,720],{"class":72},[33,112908,919],{"class":47},[19,112910,112911,112912,112915,112916,112919],{},"数组索引从 0 开始。",[30,112913,112914],{},"obs[0]"," 是第一个元素，也就是小车位置。",[30,112917,112918],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[23,112921,112922],{"className":25,"code":111991,"language":27,"meta":28,"style":28},[30,112923,112924],{"__ignoreMap":28},[33,112925,112926,112928,112930,112932,112934,112936,112938,112940,112942,112944,112946,112948,112950,112952],{"class":35,"line":36},[33,112927,19284],{"class":39},[33,112929,112000],{"class":72},[33,112931,133],{"class":47},[33,112933,104608],{"class":72},[33,112935,54490],{"class":39},[33,112937,112009],{"class":72},[33,112939,8764],{"class":39},[33,112941,112014],{"class":47},[33,112943,657],{"class":39},[33,112945,112014],{"class":47},[33,112947,2949],{"class":39},[33,112949,112023],{"class":47},[33,112951,657],{"class":39},[33,112953,112028],{"class":47},[19,112955,112956,112957,112960,112961,112964],{},"这行计算奖励。",[30,112958,112959],{},"cart_x * cart_x"," 是小车位置的平方，",[30,112962,112963],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[23,112966,112968],{"className":25,"code":112967,"language":27,"meta":28,"style":28},"data.qpos[1] = 0.1\n",[30,112969,112970],{"__ignoreMap":28},[33,112971,112972,112974,112976,112978,112980],{"class":35,"line":36},[33,112973,106902],{"class":47},[33,112975,720],{"class":72},[33,112977,2172],{"class":47},[33,112979,57],{"class":39},[33,112981,112343],{"class":72},[19,112983,112984,112985,112987,112988,112990],{},"手动设置杆子的初始角度。因为 ",[30,112986,107659],{}," 是小车位置，",[30,112989,107662],{}," 是杆子角度，所以这里改的是杆子。",[23,112992,112993],{"className":25,"code":106746,"language":27,"meta":28,"style":28},[30,112994,112995],{"__ignoreMap":28},[33,112996,112997],{"class":35,"line":36},[33,112998,106746],{"class":47},[19,113000,107705,113001,113003],{},[30,113002,106234],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[23,113005,113007],{"className":25,"code":113006,"language":27,"meta":28,"style":28},"total_reward = 0.0\n",[30,113008,113009],{"__ignoreMap":28},[33,113010,113011,113014,113016],{"class":35,"line":36},[33,113012,113013],{"class":47},"total_reward ",[33,113015,57],{"class":39},[33,113017,106964],{"class":72},[19,113019,113020],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[23,113022,113024],{"className":25,"code":113023,"language":27,"meta":28,"style":28},"for step in range(1000):\n",[30,113025,113026],{"__ignoreMap":28},[33,113027,113028,113030,113032,113034,113036,113038,113040],{"class":35,"line":36},[33,113029,5282],{"class":39},[33,113031,33845],{"class":47},[33,113033,681],{"class":39},[33,113035,34670],{"class":72},[33,113037,133],{"class":47},[33,113039,8656],{"class":72},[33,113041,366],{"class":47},[19,113043,113044,113045,113047],{},"循环 1000 步。",[30,113046,109337],{}," 是当前步数，从 0 到 999。",[23,113049,113051],{"className":25,"code":113050,"language":27,"meta":28,"style":28},"obs = get_observation(data)\n",[30,113052,113053],{"__ignoreMap":28},[33,113054,113055,113058,113060],{"class":35,"line":36},[33,113056,113057],{"class":47},"obs ",[33,113059,57],{"class":39},[33,113061,112390],{"class":47},[19,113063,113064,113065,30622],{},"读取当前状态，保存到 ",[30,113066,112876],{},[23,113068,113070],{"className":25,"code":113069,"language":27,"meta":28,"style":28},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[30,113071,113072,113084],{"__ignoreMap":28},[33,113073,113074,113076,113078,113080,113082],{"class":35,"line":36},[33,113075,112900],{"class":47},[33,113077,57],{"class":39},[33,113079,112239],{"class":47},[33,113081,720],{"class":72},[33,113083,919],{"class":47},[33,113085,113086,113089,113091,113093,113095],{"class":35,"line":51},[33,113087,113088],{"class":47},"pole_angular_velocity ",[33,113090,57],{"class":39},[33,113092,112239],{"class":47},[33,113094,730],{"class":72},[33,113096,919],{"class":47},[19,113098,113099,113100,113103,113104,30622],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[30,113101,113102],{},"obs[3]","？因为 obs 的顺序是 ",[30,113105,113106],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[23,113108,113110],{"className":25,"code":113109,"language":27,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[30,113111,113112],{"__ignoreMap":28},[33,113113,113114,113116,113118,113120,113122,113124,113126,113128,113130],{"class":35,"line":36},[33,113115,109645],{"class":47},[33,113117,57],{"class":39},[33,113119,112430],{"class":72},[33,113121,8764],{"class":39},[33,113123,112023],{"class":47},[33,113125,880],{"class":39},[33,113127,64085],{"class":72},[33,113129,8764],{"class":39},[33,113131,112443],{"class":47},[19,113133,113134,113135,1958,113137,113139],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[30,113136,107463],{},[30,113138,37554],{}," 是人为设置的系数，不是固定公式。",[23,113141,113143],{"className":25,"code":113142,"language":27,"meta":28,"style":28},"action = np.clip(action, -1.0, 1.0)\n",[30,113144,113145],{"__ignoreMap":28},[33,113146,113147,113149,113151,113153,113155,113157,113159,113161],{"class":35,"line":36},[33,113148,109645],{"class":47},[33,113150,57],{"class":39},[33,113152,109650],{"class":47},[33,113154,2949],{"class":39},[33,113156,104608],{"class":72},[33,113158,245],{"class":47},[33,113160,104608],{"class":72},[33,113162,226],{"class":47},[19,113164,113165],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[23,113167,113168],{"className":25,"code":111976,"language":27,"meta":28,"style":28},[30,113169,113170],{"__ignoreMap":28},[33,113171,113172,113174,113176,113178,113180],{"class":35,"line":36},[33,113173,108074],{"class":47},[33,113175,2617],{"class":72},[33,113177,2172],{"class":47},[33,113179,57],{"class":39},[33,113181,109673],{"class":47},[19,113183,113184],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[23,113186,113187],{"className":25,"code":106708,"language":27,"meta":28,"style":28},[30,113188,113189],{"__ignoreMap":28},[33,113190,113191],{"class":35,"line":36},[33,113192,106708],{"class":47},[19,113194,113195,113196,113198],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[30,113197,108329],{}," 计算小车和杆子的下一刻状态。",[23,113200,113202],{"className":25,"code":113201,"language":27,"meta":28,"style":28},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[30,113203,113204,113213],{"__ignoreMap":28},[33,113205,113206,113209,113211],{"class":35,"line":36},[33,113207,113208],{"class":47},"reward ",[33,113210,57],{"class":39},[33,113212,112495],{"class":47},[33,113214,113215,113217,113219],{"class":35,"line":51},[33,113216,113013],{"class":47},[33,113218,692],{"class":39},[33,113220,112505],{"class":47},[19,113222,113223,113224,113226,113227,113230,113231,30622],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[30,113225,692],{}," 是简写，",[30,113228,113229],{},"total_reward += reward"," 等价于 ",[30,113232,113233],{},"total_reward = total_reward + reward",[23,113235,113237],{"className":25,"code":113236,"language":27,"meta":28,"style":28},"if step % 100 == 0:\n",[30,113238,113239],{"__ignoreMap":28},[33,113240,113241,113243,113245,113247,113249,113251,113253],{"class":35,"line":36},[33,113242,3805],{"class":39},[33,113244,33845],{"class":47},[33,113246,1429],{"class":39},[33,113248,8001],{"class":72},[33,113250,1434],{"class":39},[33,113252,1437],{"class":72},[33,113254,605],{"class":47},[19,113256,113257,113259,113260,113263],{},[30,113258,1429],{}," 是取余数。",[30,113261,113262],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[23,113265,113267],{"className":25,"code":113266,"language":27,"meta":28,"style":28},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[30,113268,113269],{"__ignoreMap":28},[33,113270,113271,113273,113275,113277,113279,113281,113283,113285,113287,113289,113291,113293,113295,113297,113299,113301],{"class":35,"line":36},[33,113272,122],{"class":72},[33,113274,133],{"class":47},[33,113276,112534],{"class":60},[33,113278,112537],{"class":47},[33,113280,112540],{"class":60},[33,113282,112543],{"class":47},[33,113284,730],{"class":72},[33,113286,112548],{"class":47},[33,113288,112551],{"class":60},[33,113290,245],{"class":47},[33,113292,34245],{"class":72},[33,113294,133],{"class":47},[33,113296,2471],{"class":72},[33,113298,112562],{"class":47},[33,113300,730],{"class":72},[33,113302,551],{"class":47},[19,113304,113305,113306,113309,113310,113313],{},"打印当前步数、观测和动作。",[30,113307,113308],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[30,113311,113312],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113315,104521],{"id":104520},[19,113317,113318],{},"观测向量:",[23,113320,113323],{"className":113321,"code":113322,"language":7436,"meta":28},[7434],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,113324,113322],{"__ignoreMap":28},[19,113326,113327],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113329,113330],{},"每隔 100 步会打印一次：",[23,113332,113335],{"className":113333,"code":113334,"language":7436,"meta":28},[7434],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[30,113336,113334],{"__ignoreMap":28},[19,113338,113339],{},"重点观察：",[328,113341,113342,113348,113353],{},[331,113343,113344,113347],{},[30,113345,113346],{},"pole_angle"," 是否越来越大。",[331,113349,113350,113352],{},[30,113351,111929],{}," 是否跑得太远。",[331,113354,113355,113356,84748,113358,30622],{},"action 是否经常被 clip 到 ",[30,113357,106119],{},[30,113359,720],{},[19,113361,113362],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113364,104553],{"id":104552},[328,113366,113367,113373,113376,113382,113392,113398,113401],{},[331,113368,113369,113370,30622],{},"把初始角度改为 ",[30,113371,113372],{},"data.qpos[1] = 0.3",[331,113374,113375],{},"重新运行，观察控制是否变差。",[331,113377,113378,113379,113381],{},"把 actuator ",[30,113380,109270],{}," 改小。",[331,113383,113384,113385,113388,113389,30622],{},"打印 ",[30,113386,113387],{},"model.nq, model.nv, model.nu","，应为 ",[30,113390,113391],{},"2 2 1",[331,113393,113394,113395,113397],{},"把 reward 里的 ",[30,113396,112963],{}," 系数改大，观察总奖励变化。",[331,113399,113400],{},"把控制器改成反号，观察杆子是否更容易倒。",[331,113402,113403],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113405,104658],{"id":104657},[631,113407,113408],{"id":113408},"杆子方向和预期不一致",[19,113410,104601,113411,113413,113414,113416],{},[30,113412,108442],{}," 和 capsule 的 ",[30,113415,105380],{},"，必要时用 viewer 可视化确认。",[631,113418,113419],{"id":113419},"控制器越控越倒",[19,113421,113422],{},"说明反馈符号可能反了，尝试:",[23,113424,113426],{"className":25,"code":113425,"language":27,"meta":28,"style":28},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[30,113427,113428],{"__ignoreMap":28},[33,113429,113430,113432,113434,113436,113438,113440,113442,113444,113446,113448],{"class":35,"line":36},[33,113431,109645],{"class":47},[33,113433,57],{"class":39},[33,113435,54490],{"class":39},[33,113437,107463],{"class":72},[33,113439,8764],{"class":39},[33,113441,112023],{"class":47},[33,113443,2949],{"class":39},[33,113445,64085],{"class":72},[33,113447,8764],{"class":39},[33,113449,112443],{"class":47},[631,113451,113452],{"id":113452},"小车飞走",[19,113454,113455,113456,113458,113459,113462],{},"降低 ",[30,113457,109270],{}," 或缩小 ",[30,113460,113461],{},"action"," 的 clip 范围。",[631,113464,113466,113468],{"id":113465},"obs3-为什么是杆子角速度",[30,113467,113102],{}," 为什么是杆子角速度",[19,113470,113471],{},"因为这个模型里：",[23,113473,113476],{"className":113474,"code":113475,"language":7436,"meta":28},[7434],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[30,113477,113475],{"__ignoreMap":28},[19,113479,111950],{},[23,113481,113484],{"className":113482,"code":113483,"language":7436,"meta":28},[7434],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[30,113485,113483],{"__ignoreMap":28},[631,113487,113489],{"id":113488},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113491,113492],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113494,104812],{"id":104811},[19,113496,113497],{},"一个控制任务通常包含：",[328,113499,113500,113503,113511,113516,113519],{},[331,113501,113502],{},"模型：Cartpole 的 body、joint、actuator。",[331,113504,113505,113506,2638,113508,113510],{},"观测：从 ",[30,113507,106234],{},[30,113509,106564],{}," 里取状态。",[331,113512,113513,113514,30622],{},"动作：写入 ",[30,113515,103282],{},[331,113517,113518],{},"奖励：根据任务目标打分。",[331,113520,113521],{},"循环：obs -> action -> step -> reward。",[19,113523,113524],{},"这就是后面 Gymnasium 环境的基本骨架。",[2331,113526,106490],{},{"title":28,"searchDepth":51,"depth":51,"links":113528},[113529,113530,113531,113536,113540,113541,113542,113550],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":113532},[113533,113534,113535],{"id":111903,"depth":64,"text":111904},{"id":111968,"depth":64,"text":111969},{"id":111984,"depth":64,"text":111985},{"id":103458,"depth":51,"text":103459,"children":113537},[113538,113539],{"id":103777,"depth":64,"text":103777},{"id":103913,"depth":64,"text":103913},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":113543},[113544,113545,113546,113547,113549],{"id":113408,"depth":64,"text":113408},{"id":113419,"depth":64,"text":113419},{"id":113452,"depth":64,"text":113452},{"id":113465,"depth":64,"text":113548},"obs[3] 为什么是杆子角速度",{"id":113488,"depth":64,"text":113489},{"id":104811,"depth":51,"text":104812},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111639,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113557,"title":113558,"body":113559,"description":28,"extension":2360,"meta":115572,"navigation":99,"path":115573,"seo":115574,"stem":115575,"__hash__":115576},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113560,"toc":115548},[113561,113564,113566,113569,113571,113588,113591,113594,113600,113603,113605,113607,113631,113633,113647,113649,113690,113692,113710,113712,113715,113721,113724,113752,113756,113762,113787,113790,113821,113828,113831,113834,113840,113843,113849,113852,113858,113862,113865,113890,113893,113895,114654,114656,114668,114670,114681,114683,114686,114703,114706,114708,114719,114722,114724,114770,114773,114786,114789,114871,114874,114876,114892,114902,114915,114918,114957,114967,114978,114988,115001,115004,115033,115036,115046,115049,115055,115072,115083,115085,115091,115108,115119,115140,115143,115155,115158,115179,115182,115190,115198,115215,115218,115287,115294,115302,115305,115318,115325,115327,115330,115336,115339,115342,115348,115354,115356,115396,115398,115404,115413,115416,115418,115438,115441,115444,115450,115454,115456,115483,115486,115489,115516,115522,115525,115528,115530,115533,115536,115542,115545],[10,113562,113558],{"id":113563},"_7控制任务reacher-机械臂到达目标",[14,113565,102854],{"id":102853},[19,113567,113568],{},"本章搭建一个二维两关节 reacher 任务。",[19,113570,106535],{},[328,113572,113573,113576,113579,113582,113585],{},[331,113574,113575],{},"两个 hinge joint",[331,113577,113578],{},"两个 motor actuator",[331,113580,113581],{},"site 作为末端点和目标点",[331,113583,113584],{},"根据末端和目标距离设计 reward",[331,113586,113587],{},"构造机械臂任务的基本形式",[19,113589,113590],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113592,113593],{},"Reacher 任务可以理解为：",[23,113595,113598],{"className":113596,"code":113597,"language":7436,"meta":28},[7434],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[30,113599,113597],{"__ignoreMap":28},[19,113601,113602],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113604,102977],{"id":102976},[19,113606,102980],{},[23,113608,113609],{"className":26060,"code":106591,"language":26062,"meta":28,"style":28},[30,113610,113611],{"__ignoreMap":28},[33,113612,113613,113615,113617,113619,113621,113623,113625,113627,113629],{"class":35,"line":36},[33,113614,26815],{"class":43},[33,113616,28553],{"class":60},[33,113618,26072],{"class":60},[33,113620,28638],{"class":72},[33,113622,106606],{"class":60},[33,113624,103005],{"class":60},[33,113626,104706],{"class":60},[33,113628,103021],{"class":60},[33,113630,106615],{"class":60},[19,113632,105024],{},[23,113634,113635],{"className":26060,"code":103126,"language":26062,"meta":28,"style":28},[30,113636,113637],{"__ignoreMap":28},[33,113638,113639,113641,113643,113645],{"class":35,"line":36},[33,113640,26069],{"class":43},[33,113642,26072],{"class":60},[33,113644,103137],{"class":60},[33,113646,103140],{"class":60},[19,113648,105041],{},[23,113650,113652],{"className":26060,"code":113651,"language":26062,"meta":28,"style":28},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[30,113653,113654,113671,113680],{"__ignoreMap":28},[33,113655,113656,113658,113660,113662,113665,113667,113669],{"class":35,"line":36},[33,113657,32567],{"class":43},[33,113659,31413],{"class":60},[33,113661,27354],{"class":72},[33,113663,113664],{"class":60}," mujoco-reacher",[33,113666,103182],{"class":60},[33,113668,103185],{"class":72},[33,113670,103188],{"class":72},[33,113672,113673,113675,113677],{"class":35,"line":51},[33,113674,32567],{"class":43},[33,113676,103195],{"class":60},[33,113678,113679],{"class":60}," mujoco-reacher\n",[33,113681,113682,113684,113686,113688],{"class":35,"line":64},[33,113683,26069],{"class":43},[33,113685,26072],{"class":60},[33,113687,103137],{"class":60},[33,113689,103140],{"class":60},[19,113691,103211],{},[328,113693,113694,113697,113700],{},[331,113695,113696],{},"本章使用低维状态，不使用图像输入。",[331,113698,113699],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[331,113701,113702,113703,2638,113705,2638,113707,113709],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[30,113704,106234],{},[30,113706,106564],{},[30,113708,105884],{}," 的方法一致。",[14,113711,103251],{"id":103250},[19,113713,113714],{},"Reacher 任务核心:",[23,113716,113719],{"className":113717,"code":113718,"language":7436,"meta":28},[7434],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[30,113720,113718],{"__ignoreMap":28},[19,113722,113723],{},"读取 site 世界坐标:",[23,113725,113727],{"className":25,"code":113726,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[30,113728,113729,113742],{"__ignoreMap":28},[33,113730,113731,113733,113735,113737,113740],{"class":35,"line":36},[33,113732,105838],{"class":47},[33,113734,57],{"class":39},[33,113736,105609],{"class":47},[33,113738,113739],{"class":60},"\"tip\"",[33,113741,226],{"class":47},[33,113743,113744,113747,113749],{"class":35,"line":51},[33,113745,113746],{"class":47},"tip_pos ",[33,113748,57],{"class":39},[33,113750,113751],{"class":47}," data.site_xpos[site_id]\n",[631,113753,113755],{"id":113754},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113757,113758,113759,113761],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[30,113760,106234],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[23,113763,113765],{"className":25,"code":113764,"language":27,"meta":28,"style":28},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[30,113766,113767,113777],{"__ignoreMap":28},[33,113768,113769,113772,113774],{"class":35,"line":36},[33,113770,113771],{"class":47},"tip ",[33,113773,57],{"class":39},[33,113775,113776],{"class":47}," data.site_xpos[tip_site_id]\n",[33,113778,113779,113782,113784],{"class":35,"line":51},[33,113780,113781],{"class":47},"target ",[33,113783,57],{"class":39},[33,113785,113786],{"class":47}," data.site_xpos[target_site_id]\n",[19,113788,113789],{},"这样 reward 就很容易写：",[23,113791,113793],{"className":25,"code":113792,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[30,113794,113795,113810],{"__ignoreMap":28},[33,113796,113797,113800,113802,113805,113807],{"class":35,"line":36},[33,113798,113799],{"class":47},"dist ",[33,113801,57],{"class":39},[33,113803,113804],{"class":47}," np.linalg.norm(tip ",[33,113806,2949],{"class":39},[33,113808,113809],{"class":47}," target)\n",[33,113811,113812,113814,113816,113818],{"class":35,"line":51},[33,113813,113208],{"class":47},[33,113815,57],{"class":39},[33,113817,54490],{"class":39},[33,113819,113820],{"class":47},"dist\n",[19,113822,113823,113824,113827],{},"距离越小，",[30,113825,113826],{},"-dist"," 越接近 0，奖励越高。",[631,113829,113830],{"id":113830},"两关节机械臂的状态",[19,113832,113833],{},"这个模型有两个 hinge joint：",[23,113835,113838],{"className":113836,"code":113837,"language":7436,"meta":28},[7434],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[30,113839,113837],{"__ignoreMap":28},[19,113841,113842],{},"再加上末端和目标位置：",[23,113844,113847],{"className":113845,"code":113846,"language":7436,"meta":28},[7434],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[30,113848,113846],{"__ignoreMap":28},[19,113850,113851],{},"总维度：",[23,113853,113856],{"className":113854,"code":113855,"language":7436,"meta":28},[7434],"2 + 2 + 3 + 3 = 10\n",[30,113857,113855],{"__ignoreMap":28},[631,113859,113861],{"id":113860},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113863,113864],{},"本章把重力设为：",[23,113866,113868],{"className":55286,"code":113867,"language":55288,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[30,113869,113870],{"__ignoreMap":28},[33,113871,113872,113874,113876,113878,113880,113882,113884,113886,113888],{"class":35,"line":36},[33,113873,2226],{"class":47},[33,113875,71382],{"class":53522},[33,113877,103400],{"class":43},[33,113879,57],{"class":47},[33,113881,103405],{"class":60},[33,113883,103408],{"class":43},[33,113885,57],{"class":47},[33,113887,105975],{"class":60},[33,113889,103350],{"class":47},[19,113891,113892],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113894,103459],{"id":103458},[23,113896,113898],{"className":25,"code":113897,"language":27,"meta":28,"style":28},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,113899,113900,113906,113916,113920,113924,113932,113937,113942,113946,113950,113955,113960,113964,113969,113974,113979,113983,113988,113993,113998,114003,114007,114011,114015,114019,114023,114028,114033,114037,114041,114045,114049,114053,114068,114077,114089,114112,114119,114123,114127,114137,114151,114165,114172,114176,114180,114194,114206,114218,114231,114246,114263,114267,114271,114283,114295,114303,114311,114315,114331,114336,114349,114362,114377,114381,114415,114447,114451,114455,114464,114468,114484,114494,114505,114521,114537,114553,114569,114573,114591,114611,114630,114634,114638,114650],{"__ignoreMap":28},[33,113901,113902,113904],{"class":35,"line":36},[33,113903,32627],{"class":39},[33,113905,103507],{"class":47},[33,113907,113908,113910,113912,113914],{"class":35,"line":51},[33,113909,32627],{"class":39},[33,113911,33610],{"class":47},[33,113913,33613],{"class":39},[33,113915,33616],{"class":47},[33,113917,113918],{"class":35,"line":64},[33,113919,100],{"emptyLinePlaceholder":99},[33,113921,113922],{"class":35,"line":76},[33,113923,100],{"emptyLinePlaceholder":99},[33,113925,113926,113928,113930],{"class":35,"line":87},[33,113927,103520],{"class":72},[33,113929,15804],{"class":39},[33,113931,103525],{"class":60},[33,113933,113934],{"class":35,"line":96},[33,113935,113936],{"class":60},"\u003Cmujoco model=\"two_link_reacher\">\n",[33,113938,113939],{"class":35,"line":103},[33,113940,113941],{"class":60},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,113943,113944],{"class":35,"line":108},[33,113945,100],{"emptyLinePlaceholder":99},[33,113947,113948],{"class":35,"line":119},[33,113949,103544],{"class":60},[33,113951,113952],{"class":35,"line":128},[33,113953,113954],{"class":60},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[33,113956,113957],{"class":35,"line":1753},[33,113958,113959],{"class":60},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[33,113961,113962],{"class":35,"line":1763},[33,113963,100],{"emptyLinePlaceholder":99},[33,113965,113966],{"class":35,"line":1775},[33,113967,113968],{"class":60},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[33,113970,113971],{"class":35,"line":1780},[33,113972,113973],{"class":60},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,113975,113976],{"class":35,"line":1785},[33,113977,113978],{"class":60},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[33,113980,113981],{"class":35,"line":1940},[33,113982,100],{"emptyLinePlaceholder":99},[33,113984,113985],{"class":35,"line":2183},[33,113986,113987],{"class":60},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[33,113989,113990],{"class":35,"line":2208},[33,113991,113992],{"class":60},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,113994,113995],{"class":35,"line":2234},[33,113996,113997],{"class":60},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[33,113999,114000],{"class":35,"line":2239},[33,114001,114002],{"class":60},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[33,114004,114005],{"class":35,"line":2247},[33,114006,108641],{"class":60},[33,114008,114009],{"class":35,"line":2255},[33,114010,103573],{"class":60},[33,114012,114013],{"class":35,"line":3992},[33,114014,103578],{"class":60},[33,114016,114017],{"class":35,"line":4009},[33,114018,100],{"emptyLinePlaceholder":99},[33,114020,114021],{"class":35,"line":4014},[33,114022,108658],{"class":60},[33,114024,114025],{"class":35,"line":4019},[33,114026,114027],{"class":60},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,114029,114030],{"class":35,"line":4024},[33,114031,114032],{"class":60},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,114034,114035],{"class":35,"line":4038},[33,114036,108668],{"class":60},[33,114038,114039],{"class":35,"line":4043},[33,114040,103583],{"class":60},[33,114042,114043],{"class":35,"line":4834},[33,114044,97905],{"class":60},[33,114046,114047],{"class":35,"line":4848},[33,114048,100],{"emptyLinePlaceholder":99},[33,114050,114051],{"class":35,"line":4856},[33,114052,100],{"emptyLinePlaceholder":99},[33,114054,114055,114057,114060,114063,114065],{"class":35,"line":4861},[33,114056,40],{"class":39},[33,114058,114059],{"class":43}," site_position",[33,114061,114062],{"class":47},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[33,114064,3576],{"class":72},[33,114066,114067],{"class":47},") -> np.ndarray:\n",[33,114069,114070,114072,114074],{"class":35,"line":4867},[33,114071,105604],{"class":47},[33,114073,57],{"class":39},[33,114075,114076],{"class":47}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,114078,114079,114081,114083,114085,114087],{"class":35,"line":4873},[33,114080,593],{"class":39},[33,114082,105653],{"class":47},[33,114084,2226],{"class":39},[33,114086,1437],{"class":72},[33,114088,605],{"class":47},[33,114090,114091,114093,114095,114097,114099,114102,114104,114106,114108,114110],{"class":35,"line":4878},[33,114092,105636],{"class":39},[33,114094,105639],{"class":72},[33,114096,133],{"class":47},[33,114098,198],{"class":39},[33,114100,114101],{"class":60},"\"site not found: ",[33,114103,204],{"class":72},[33,114105,207],{"class":47},[33,114107,210],{"class":72},[33,114109,397],{"class":60},[33,114111,226],{"class":47},[33,114113,114114,114116],{"class":35,"line":10194},[33,114115,90],{"class":39},[33,114117,114118],{"class":47}," data.site_xpos[site_id].copy()\n",[33,114120,114121],{"class":35,"line":10218},[33,114122,100],{"emptyLinePlaceholder":99},[33,114124,114125],{"class":35,"line":10223},[33,114126,100],{"emptyLinePlaceholder":99},[33,114128,114129,114131,114134],{"class":35,"line":10229},[33,114130,40],{"class":39},[33,114132,114133],{"class":43}," get_obs",[33,114135,114136],{"class":47},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,114138,114139,114142,114144,114147,114149],{"class":35,"line":10256},[33,114140,114141],{"class":47},"    tip ",[33,114143,57],{"class":39},[33,114145,114146],{"class":47}," site_position(model, data, ",[33,114148,113739],{"class":60},[33,114150,226],{"class":47},[33,114152,114153,114156,114158,114160,114163],{"class":35,"line":10261},[33,114154,114155],{"class":47},"    target ",[33,114157,57],{"class":39},[33,114159,114146],{"class":47},[33,114161,114162],{"class":60},"\"target\"",[33,114164,226],{"class":47},[33,114166,114167,114169],{"class":35,"line":10267},[33,114168,90],{"class":39},[33,114170,114171],{"class":47}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,114173,114174],{"class":35,"line":10279},[33,114175,100],{"emptyLinePlaceholder":99},[33,114177,114178],{"class":35,"line":10291},[33,114179,100],{"emptyLinePlaceholder":99},[33,114181,114182,114184,114187,114190,114192],{"class":35,"line":10303},[33,114183,40],{"class":39},[33,114185,114186],{"class":43}," reward",[33,114188,114189],{"class":47},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,114191,2471],{"class":72},[33,114193,605],{"class":47},[33,114195,114196,114198,114200,114202,114204],{"class":35,"line":11961},[33,114197,114141],{"class":47},[33,114199,57],{"class":39},[33,114201,114146],{"class":47},[33,114203,113739],{"class":60},[33,114205,226],{"class":47},[33,114207,114208,114210,114212,114214,114216],{"class":35,"line":11986},[33,114209,114155],{"class":47},[33,114211,57],{"class":39},[33,114213,114146],{"class":47},[33,114215,114162],{"class":60},[33,114217,226],{"class":47},[33,114219,114220,114223,114225,114227,114229],{"class":35,"line":12009},[33,114221,114222],{"class":47},"    dist ",[33,114224,57],{"class":39},[33,114226,113804],{"class":47},[33,114228,2949],{"class":39},[33,114230,113809],{"class":47},[33,114232,114233,114236,114238,114241,114243],{"class":35,"line":12033},[33,114234,114235],{"class":47},"    control_cost ",[33,114237,57],{"class":39},[33,114239,114240],{"class":72}," 0.01",[33,114242,8764],{"class":39},[33,114244,114245],{"class":47}," np.sum(np.square(data.ctrl))\n",[33,114247,114248,114250,114252,114254,114256,114258,114260],{"class":35,"line":12038},[33,114249,90],{"class":39},[33,114251,112000],{"class":72},[33,114253,133],{"class":47},[33,114255,2949],{"class":39},[33,114257,113799],{"class":47},[33,114259,2949],{"class":39},[33,114261,114262],{"class":47}," control_cost)\n",[33,114264,114265],{"class":35,"line":12043},[33,114266,100],{"emptyLinePlaceholder":99},[33,114268,114269],{"class":35,"line":12048},[33,114270,100],{"emptyLinePlaceholder":99},[33,114272,114273,114275,114277,114279,114281],{"class":35,"line":12057},[33,114274,40],{"class":39},[33,114276,4232],{"class":43},[33,114278,103604],{"class":47},[33,114280,586],{"class":72},[33,114282,605],{"class":47},[33,114284,114285,114287,114289,114291,114293],{"class":35,"line":12062},[33,114286,103613],{"class":47},[33,114288,57],{"class":39},[33,114290,103618],{"class":47},[33,114292,103520],{"class":72},[33,114294,226],{"class":47},[33,114296,114297,114299,114301],{"class":35,"line":12068},[33,114298,103627],{"class":47},[33,114300,57],{"class":39},[33,114302,103632],{"class":47},[33,114304,114305,114307,114309],{"class":35,"line":12089},[33,114306,112356],{"class":47},[33,114308,57],{"class":39},[33,114310,106964],{"class":72},[33,114312,114313],{"class":35,"line":12095},[33,114314,100],{"emptyLinePlaceholder":99},[33,114316,114317,114319,114321,114323,114325,114327,114329],{"class":35,"line":12109},[33,114318,675],{"class":39},[33,114320,33845],{"class":47},[33,114322,681],{"class":39},[33,114324,34670],{"class":72},[33,114326,133],{"class":47},[33,114328,67291],{"class":72},[33,114330,366],{"class":47},[33,114332,114333],{"class":35,"line":12115},[33,114334,114335],{"class":47},"        mujoco.mj_forward(model, data)\n",[33,114337,114338,114341,114343,114345,114347],{"class":35,"line":12142},[33,114339,114340],{"class":47},"        tip ",[33,114342,57],{"class":39},[33,114344,114146],{"class":47},[33,114346,113739],{"class":60},[33,114348,226],{"class":47},[33,114350,114351,114354,114356,114358,114360],{"class":35,"line":12151},[33,114352,114353],{"class":47},"        target ",[33,114355,57],{"class":39},[33,114357,114146],{"class":47},[33,114359,114162],{"class":60},[33,114361,226],{"class":47},[33,114363,114364,114367,114369,114372,114374],{"class":35,"line":12157},[33,114365,114366],{"class":47},"        error ",[33,114368,57],{"class":39},[33,114370,114371],{"class":47}," target ",[33,114373,2949],{"class":39},[33,114375,114376],{"class":47}," tip\n",[33,114378,114379],{"class":35,"line":12165},[33,114380,100],{"emptyLinePlaceholder":99},[33,114382,114383,114385,114387,114389,114391,114394,114396,114398,114401,114403,114405,114407,114409,114411,114413],{"class":35,"line":12170},[33,114384,108820],{"class":47},[33,114386,2617],{"class":72},[33,114388,2172],{"class":47},[33,114390,57],{"class":39},[33,114392,114393],{"class":47}," np.clip(",[33,114395,107463],{"class":72},[33,114397,8764],{"class":39},[33,114399,114400],{"class":47}," error[",[33,114402,725],{"class":72},[33,114404,1182],{"class":47},[33,114406,2949],{"class":39},[33,114408,104608],{"class":72},[33,114410,245],{"class":47},[33,114412,104608],{"class":72},[33,114414,226],{"class":47},[33,114416,114417,114419,114421,114423,114425,114427,114429,114431,114433,114435,114437,114439,114441,114443,114445],{"class":35,"line":18842},[33,114418,108820],{"class":47},[33,114420,720],{"class":72},[33,114422,2172],{"class":47},[33,114424,57],{"class":39},[33,114426,114393],{"class":47},[33,114428,107463],{"class":72},[33,114430,8764],{"class":39},[33,114432,114400],{"class":47},[33,114434,2617],{"class":72},[33,114436,1182],{"class":47},[33,114438,2949],{"class":39},[33,114440,104608],{"class":72},[33,114442,245],{"class":47},[33,114444,104608],{"class":72},[33,114446,226],{"class":47},[33,114448,114449],{"class":35,"line":18848},[33,114450,100],{"emptyLinePlaceholder":99},[33,114452,114453],{"class":35,"line":18871},[33,114454,103722],{"class":47},[33,114456,114457,114459,114461],{"class":35,"line":18877},[33,114458,112500],{"class":47},[33,114460,692],{"class":39},[33,114462,114463],{"class":47}," reward(model, data)\n",[33,114465,114466],{"class":35,"line":18900},[33,114467,100],{"emptyLinePlaceholder":99},[33,114469,114470,114472,114474,114476,114478,114480,114482],{"class":35,"line":18914},[33,114471,2130],{"class":39},[33,114473,33845],{"class":47},[33,114475,1429],{"class":39},[33,114477,8001],{"class":72},[33,114479,1434],{"class":39},[33,114481,1437],{"class":72},[33,114483,605],{"class":47},[33,114485,114486,114489,114491],{"class":35,"line":18934},[33,114487,114488],{"class":47},"            obs ",[33,114490,57],{"class":39},[33,114492,114493],{"class":47}," get_obs(model, data)\n",[33,114495,114496,114498,114500,114502],{"class":35,"line":18940},[33,114497,36875],{"class":72},[33,114499,133],{"class":47},[33,114501,112534],{"class":60},[33,114503,114504],{"class":47},", step)\n",[33,114506,114507,114509,114511,114514,114517,114519],{"class":35,"line":18951},[33,114508,36875],{"class":72},[33,114510,133],{"class":47},[33,114512,114513],{"class":60},"\"  tip:\"",[33,114515,114516],{"class":47},", np.round(tip, ",[33,114518,730],{"class":72},[33,114520,551],{"class":47},[33,114522,114523,114525,114527,114530,114533,114535],{"class":35,"line":18974},[33,114524,36875],{"class":72},[33,114526,133],{"class":47},[33,114528,114529],{"class":60},"\"  target:\"",[33,114531,114532],{"class":47},", np.round(target, ",[33,114534,730],{"class":72},[33,114536,551],{"class":47},[33,114538,114539,114541,114543,114546,114549,114551],{"class":35,"line":18996},[33,114540,36875],{"class":72},[33,114542,133],{"class":47},[33,114544,114545],{"class":60},"\"  ctrl:\"",[33,114547,114548],{"class":47},", np.round(data.ctrl.copy(), ",[33,114550,730],{"class":72},[33,114552,551],{"class":47},[33,114554,114555,114557,114559,114562,114565,114567],{"class":35,"line":19001},[33,114556,36875],{"class":72},[33,114558,133],{"class":47},[33,114560,114561],{"class":60},"\"  obs_dim:\"",[33,114563,114564],{"class":47},", obs.shape[",[33,114566,2617],{"class":72},[33,114568,6907],{"class":47},[33,114570,114571],{"class":35,"line":19007},[33,114572,100],{"emptyLinePlaceholder":99},[33,114574,114575,114577,114579,114581,114583,114585,114587,114589],{"class":35,"line":19021},[33,114576,193],{"class":72},[33,114578,133],{"class":47},[33,114580,112579],{"class":60},[33,114582,245],{"class":47},[33,114584,34245],{"class":72},[33,114586,112586],{"class":47},[33,114588,730],{"class":72},[33,114590,551],{"class":47},[33,114592,114593,114595,114597,114600,114603,114605,114607,114609],{"class":35,"line":19034},[33,114594,193],{"class":72},[33,114596,133],{"class":47},[33,114598,114599],{"class":60},"\"final tip:\"",[33,114601,114602],{"class":47},", np.round(site_position(model, data, ",[33,114604,113739],{"class":60},[33,114606,112548],{"class":47},[33,114608,730],{"class":72},[33,114610,551],{"class":47},[33,114612,114613,114615,114617,114620,114622,114624,114626,114628],{"class":35,"line":19039},[33,114614,193],{"class":72},[33,114616,133],{"class":47},[33,114618,114619],{"class":60},"\"target:\"",[33,114621,114602],{"class":47},[33,114623,114162],{"class":60},[33,114625,112548],{"class":47},[33,114627,730],{"class":72},[33,114629,551],{"class":47},[33,114631,114632],{"class":35,"line":19053},[33,114633,100],{"emptyLinePlaceholder":99},[33,114635,114636],{"class":35,"line":19058},[33,114637,100],{"emptyLinePlaceholder":99},[33,114639,114640,114642,114644,114646,114648],{"class":35,"line":19064},[33,114641,3805],{"class":39},[33,114643,33451],{"class":72},[33,114645,1434],{"class":39},[33,114647,103767],{"class":60},[33,114649,605],{"class":47},[33,114651,114652],{"class":35,"line":19069},[33,114653,103774],{"class":47},[19,114655,105774],{},[23,114657,114659],{"className":26060,"code":114658,"language":26062,"meta":28,"style":28},"touch ch7_reacher.py\n",[30,114660,114661],{"__ignoreMap":28},[33,114662,114663,114665],{"class":35,"line":36},[33,114664,103489],{"class":43},[33,114666,114667],{"class":60}," ch7_reacher.py\n",[19,114669,112647],{},[23,114671,114673],{"className":26060,"code":114672,"language":26062,"meta":28,"style":28},"python ch7_reacher.py\n",[30,114674,114675],{"__ignoreMap":28},[33,114676,114677,114679],{"class":35,"line":36},[33,114678,27],{"class":43},[33,114680,114667],{"class":60},[631,114682,103777],{"id":103777},[19,114684,114685],{},"读取 site 坐标：",[23,114687,114689],{"className":25,"code":114688,"language":27,"meta":28,"style":28},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[30,114690,114691],{"__ignoreMap":28},[33,114692,114693,114695,114697,114699,114701],{"class":35,"line":36},[33,114694,40],{"class":39},[33,114696,114059],{"class":43},[33,114698,114062],{"class":47},[33,114700,3576],{"class":72},[33,114702,114067],{"class":47},[19,114704,114705],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114707,112663],{},[23,114709,114711],{"className":25,"code":114710,"language":27,"meta":28,"style":28},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[30,114712,114713],{"__ignoreMap":28},[33,114714,114715,114717],{"class":35,"line":36},[33,114716,19284],{"class":39},[33,114718,114171],{"class":47},[19,114720,114721],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114723,111988],{},[23,114725,114727],{"className":25,"code":114726,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[30,114728,114729,114741,114754],{"__ignoreMap":28},[33,114730,114731,114733,114735,114737,114739],{"class":35,"line":36},[33,114732,113799],{"class":47},[33,114734,57],{"class":39},[33,114736,113804],{"class":47},[33,114738,2949],{"class":39},[33,114740,113809],{"class":47},[33,114742,114743,114746,114748,114750,114752],{"class":35,"line":51},[33,114744,114745],{"class":47},"control_cost ",[33,114747,57],{"class":39},[33,114749,114240],{"class":72},[33,114751,8764],{"class":39},[33,114753,114245],{"class":47},[33,114755,114756,114758,114760,114762,114764,114766,114768],{"class":35,"line":64},[33,114757,19284],{"class":39},[33,114759,112000],{"class":72},[33,114761,133],{"class":47},[33,114763,2949],{"class":39},[33,114765,113799],{"class":47},[33,114767,2949],{"class":39},[33,114769,114262],{"class":47},[19,114771,114772],{},"奖励由两部分组成：",[328,114774,114775,114780],{},[331,114776,114777,114779],{},[30,114778,113826],{},"：末端离目标越远，奖励越低。",[331,114781,114782,114785],{},[30,114783,114784],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114787,114788],{},"简单控制器：",[23,114790,114792],{"className":25,"code":114791,"language":27,"meta":28,"style":28},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[30,114793,114794,114807,114839],{"__ignoreMap":28},[33,114795,114796,114799,114801,114803,114805],{"class":35,"line":36},[33,114797,114798],{"class":47},"error ",[33,114800,57],{"class":39},[33,114802,114371],{"class":47},[33,114804,2949],{"class":39},[33,114806,114376],{"class":47},[33,114808,114809,114811,114813,114815,114817,114819,114821,114823,114825,114827,114829,114831,114833,114835,114837],{"class":35,"line":51},[33,114810,108074],{"class":47},[33,114812,2617],{"class":72},[33,114814,2172],{"class":47},[33,114816,57],{"class":39},[33,114818,114393],{"class":47},[33,114820,107463],{"class":72},[33,114822,8764],{"class":39},[33,114824,114400],{"class":47},[33,114826,725],{"class":72},[33,114828,1182],{"class":47},[33,114830,2949],{"class":39},[33,114832,104608],{"class":72},[33,114834,245],{"class":47},[33,114836,104608],{"class":72},[33,114838,226],{"class":47},[33,114840,114841,114843,114845,114847,114849,114851,114853,114855,114857,114859,114861,114863,114865,114867,114869],{"class":35,"line":64},[33,114842,108074],{"class":47},[33,114844,720],{"class":72},[33,114846,2172],{"class":47},[33,114848,57],{"class":39},[33,114850,114393],{"class":47},[33,114852,107463],{"class":72},[33,114854,8764],{"class":39},[33,114856,114400],{"class":47},[33,114858,2617],{"class":72},[33,114860,1182],{"class":47},[33,114862,2949],{"class":39},[33,114864,104608],{"class":72},[33,114866,245],{"class":47},[33,114868,104608],{"class":72},[33,114870,226],{"class":47},[19,114872,114873],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[631,114875,103913],{"id":103913},[23,114877,114878],{"className":25,"code":114688,"language":27,"meta":28,"style":28},[30,114879,114880],{"__ignoreMap":28},[33,114881,114882,114884,114886,114888,114890],{"class":35,"line":36},[33,114883,40],{"class":39},[33,114885,114059],{"class":43},[33,114887,114062],{"class":47},[33,114889,3576],{"class":72},[33,114891,114067],{"class":47},[19,114893,114894,114895,114897,114898,84748,114900,30622],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[30,114896,207],{}," 是 site 的名字，比如 ",[30,114899,113739],{},[30,114901,114162],{},[23,114903,114905],{"className":25,"code":114904,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[30,114906,114907],{"__ignoreMap":28},[33,114908,114909,114911,114913],{"class":35,"line":36},[33,114910,105838],{"class":47},[33,114912,57],{"class":39},[33,114914,114076],{"class":47},[19,114916,114917],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[23,114919,114921],{"className":25,"code":114920,"language":27,"meta":28,"style":28},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[30,114922,114923,114935],{"__ignoreMap":28},[33,114924,114925,114927,114929,114931,114933],{"class":35,"line":36},[33,114926,3805],{"class":39},[33,114928,105653],{"class":47},[33,114930,2226],{"class":39},[33,114932,1437],{"class":72},[33,114934,605],{"class":47},[33,114936,114937,114939,114941,114943,114945,114947,114949,114951,114953,114955],{"class":35,"line":51},[33,114938,106099],{"class":39},[33,114940,105639],{"class":72},[33,114942,133],{"class":47},[33,114944,198],{"class":39},[33,114946,114101],{"class":60},[33,114948,204],{"class":72},[33,114950,207],{"class":47},[33,114952,210],{"class":72},[33,114954,397],{"class":60},[33,114956,226],{"class":47},[19,114958,114959,114960,114963,114964,114966],{},"如果 site 没找到，就主动报错。",[30,114961,114962],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[30,114965,207],{}," 的值放进字符串里。",[23,114968,114970],{"className":25,"code":114969,"language":27,"meta":28,"style":28},"return data.site_xpos[site_id].copy()\n",[30,114971,114972],{"__ignoreMap":28},[33,114973,114974,114976],{"class":35,"line":36},[33,114975,19284],{"class":39},[33,114977,114118],{"class":47},[19,114979,114980,114981,114983,114984,114987],{},"返回这个 site 的世界坐标。",[30,114982,105884],{}," 里的每一行都是一个 site 的 ",[30,114985,114986],{},"(x, y, z)"," 坐标。",[23,114989,114991],{"className":25,"code":114990,"language":27,"meta":28,"style":28},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[30,114992,114993],{"__ignoreMap":28},[33,114994,114995,114997,114999],{"class":35,"line":36},[33,114996,40],{"class":39},[33,114998,114133],{"class":43},[33,115000,114136],{"class":47},[19,115002,115003],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[23,115005,115007],{"className":25,"code":115006,"language":27,"meta":28,"style":28},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[30,115008,115009,115021],{"__ignoreMap":28},[33,115010,115011,115013,115015,115017,115019],{"class":35,"line":36},[33,115012,113771],{"class":47},[33,115014,57],{"class":39},[33,115016,114146],{"class":47},[33,115018,113739],{"class":60},[33,115020,226],{"class":47},[33,115022,115023,115025,115027,115029,115031],{"class":35,"line":51},[33,115024,113781],{"class":47},[33,115026,57],{"class":39},[33,115028,114146],{"class":47},[33,115030,114162],{"class":60},[33,115032,226],{"class":47},[19,115034,115035],{},"分别读取末端点和目标点的世界坐标。",[23,115037,115038],{"className":25,"code":114710,"language":27,"meta":28,"style":28},[30,115039,115040],{"__ignoreMap":28},[33,115041,115042,115044],{"class":35,"line":36},[33,115043,19284],{"class":39},[33,115045,114171],{"class":47},[19,115047,115048],{},"把四部分拼成一个观测数组：",[23,115050,115053],{"className":115051,"code":115052,"language":7436,"meta":28},[7434],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[30,115054,115052],{"__ignoreMap":28},[23,115056,115058],{"className":25,"code":115057,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\n",[30,115059,115060],{"__ignoreMap":28},[33,115061,115062,115064,115066,115068,115070],{"class":35,"line":36},[33,115063,113799],{"class":47},[33,115065,57],{"class":39},[33,115067,113804],{"class":47},[33,115069,2949],{"class":39},[33,115071,113809],{"class":47},[19,115073,115074,115075,115078,115079,115082],{},"计算 tip 到 target 的距离。",[30,115076,115077],{},"tip - target"," 得到一个三维向量，",[30,115080,115081],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,115084,16873],{},[23,115086,115089],{"className":115087,"code":115088,"language":7436,"meta":28},[7434],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[30,115090,115088],{"__ignoreMap":28},[23,115092,115094],{"className":25,"code":115093,"language":27,"meta":28,"style":28},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[30,115095,115096],{"__ignoreMap":28},[33,115097,115098,115100,115102,115104,115106],{"class":35,"line":36},[33,115099,114745],{"class":47},[33,115101,57],{"class":39},[33,115103,114240],{"class":72},[33,115105,8764],{"class":39},[33,115107,114245],{"class":47},[19,115109,115110,115111,115114,115115,115118],{},"计算动作惩罚。",[30,115112,115113],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[30,115116,115117],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[23,115120,115122],{"className":25,"code":115121,"language":27,"meta":28,"style":28},"return float(-dist - control_cost)\n",[30,115123,115124],{"__ignoreMap":28},[33,115125,115126,115128,115130,115132,115134,115136,115138],{"class":35,"line":36},[33,115127,19284],{"class":39},[33,115129,112000],{"class":72},[33,115131,133],{"class":47},[33,115133,2949],{"class":39},[33,115135,113799],{"class":47},[33,115137,2949],{"class":39},[33,115139,114262],{"class":47},[19,115141,115142],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[23,115144,115145],{"className":25,"code":113006,"language":27,"meta":28,"style":28},[30,115146,115147],{"__ignoreMap":28},[33,115148,115149,115151,115153],{"class":35,"line":36},[33,115150,113013],{"class":47},[33,115152,57],{"class":39},[33,115154,106964],{"class":72},[19,115156,115157],{},"累计奖励变量，记录整个运行过程的总分。",[23,115159,115161],{"className":25,"code":115160,"language":27,"meta":28,"style":28},"for step in range(500):\n",[30,115162,115163],{"__ignoreMap":28},[33,115164,115165,115167,115169,115171,115173,115175,115177],{"class":35,"line":36},[33,115166,5282],{"class":39},[33,115168,33845],{"class":47},[33,115170,681],{"class":39},[33,115172,34670],{"class":72},[33,115174,133],{"class":47},[33,115176,67291],{"class":72},[33,115178,366],{"class":47},[19,115180,115181],{},"运行 500 个控制步。",[23,115183,115184],{"className":25,"code":106746,"language":27,"meta":28,"style":28},[30,115185,115186],{"__ignoreMap":28},[33,115187,115188],{"class":35,"line":36},[33,115189,106746],{"class":47},[19,115191,115192,115193,1958,115195,115197],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[30,115194,105435],{},[30,115196,105438],{}," 是当前状态下的坐标。",[23,115199,115201],{"className":25,"code":115200,"language":27,"meta":28,"style":28},"error = target - tip\n",[30,115202,115203],{"__ignoreMap":28},[33,115204,115205,115207,115209,115211,115213],{"class":35,"line":36},[33,115206,114798],{"class":47},[33,115208,57],{"class":39},[33,115210,114371],{"class":47},[33,115212,2949],{"class":39},[33,115214,114376],{"class":47},[19,115216,115217],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[23,115219,115221],{"className":25,"code":115220,"language":27,"meta":28,"style":28},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[30,115222,115223,115255],{"__ignoreMap":28},[33,115224,115225,115227,115229,115231,115233,115235,115237,115239,115241,115243,115245,115247,115249,115251,115253],{"class":35,"line":36},[33,115226,108074],{"class":47},[33,115228,2617],{"class":72},[33,115230,2172],{"class":47},[33,115232,57],{"class":39},[33,115234,114393],{"class":47},[33,115236,107463],{"class":72},[33,115238,8764],{"class":39},[33,115240,114400],{"class":47},[33,115242,725],{"class":72},[33,115244,1182],{"class":47},[33,115246,2949],{"class":39},[33,115248,104608],{"class":72},[33,115250,245],{"class":47},[33,115252,104608],{"class":72},[33,115254,226],{"class":47},[33,115256,115257,115259,115261,115263,115265,115267,115269,115271,115273,115275,115277,115279,115281,115283,115285],{"class":35,"line":51},[33,115258,108074],{"class":47},[33,115260,720],{"class":72},[33,115262,2172],{"class":47},[33,115264,57],{"class":39},[33,115266,114393],{"class":47},[33,115268,107463],{"class":72},[33,115270,8764],{"class":39},[33,115272,114400],{"class":47},[33,115274,2617],{"class":72},[33,115276,1182],{"class":47},[33,115278,2949],{"class":39},[33,115280,104608],{"class":72},[33,115282,245],{"class":47},[33,115284,104608],{"class":72},[33,115286,226],{"class":47},[19,115288,115289,115290,115293],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[30,115291,115292],{},"error -> ctrl -> step"," 的流程。",[23,115295,115296],{"className":25,"code":106708,"language":27,"meta":28,"style":28},[30,115297,115298],{"__ignoreMap":28},[33,115299,115300],{"class":35,"line":36},[33,115301,106708],{"class":47},[19,115303,115304],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[23,115306,115308],{"className":25,"code":115307,"language":27,"meta":28,"style":28},"obs = get_obs(model, data)\n",[30,115309,115310],{"__ignoreMap":28},[33,115311,115312,115314,115316],{"class":35,"line":36},[33,115313,113057],{"class":47},[33,115315,57],{"class":39},[33,115317,114493],{"class":47},[19,115319,115320,115321,115324],{},"读取最新观测。后面打印 ",[30,115322,115323],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115326,104521],{"id":104520},[19,115328,115329],{},"观测维度为:",[23,115331,115334],{"className":115332,"code":115333,"language":7436,"meta":28},[7434],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[30,115335,115333],{"__ignoreMap":28},[19,115337,115338],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115340,115341],{},"程序每 100 步打印：",[23,115343,115346],{"className":115344,"code":115345,"language":7436,"meta":28},[7434],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[30,115347,115345],{"__ignoreMap":28},[19,115349,115350,115351,115353],{},"如果控制有效，你应该看到最终 ",[30,115352,105435],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115355,104553],{"id":104552},[328,115357,115358,115361,115364,115370,115376,115383,115393],{},[331,115359,115360],{},"修改目标点位置。",[331,115362,115363],{},"重新运行，观察最终 tip 是否变化。",[331,115365,115366,115367,115369],{},"把 gravity 改成 ",[30,115368,104794],{},"，观察控制是否变差。",[331,115371,113384,115372,113388,115374,30622],{},[30,115373,104363],{},[30,115375,725],{},[331,115377,104616,115378,104619,115380,115382],{},[30,115379,112799],{},[30,115381,109510],{},"，观察机械臂是否更难移动。",[331,115384,104616,115385,84739,115387,104619,115389,115392],{},[30,115386,105438],{},[30,115388,106350],{},[30,115390,115391],{},"0.2 0 0.6","，观察 reward 和 final tip。",[331,115394,115395],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115397,104658],{"id":104657},[631,115399,115401],{"id":115400},"site-not-found",[30,115402,115403],{},"site not found",[19,115405,115406,115407,1958,115410,30622],{},"检查 XML 中是否有 ",[30,115408,115409],{},"site name=\"tip\"",[30,115411,115412],{},"site name=\"target\"",[631,115414,115415],{"id":115415},"机械臂完全不动",[19,115417,104728],{},[328,115419,115420,115425,115428,115433],{},[331,115421,115422,115424],{},[30,115423,104363],{}," 是否为 2",[331,115426,115427],{},"actuator 是否引用正确 joint",[331,115429,115430,115432],{},[30,115431,103282],{}," 是否被赋值",[331,115434,115435,115436],{},"是否执行了 ",[30,115437,102892],{},[631,115439,115440],{"id":115440},"控制效果不好",[19,115442,115443],{},"正常。本章重点不是控制器最优，而是任务结构:",[23,115445,115448],{"className":115446,"code":115447,"language":7436,"meta":28},[7434],"obs → action → mj_step → reward → next_obs\n",[30,115449,115447],{"__ignoreMap":28},[631,115451,115453],{"id":115452},"tip-坐标不变化","tip 坐标不变化",[19,115455,104780],{},[328,115457,115458,115463,115471,115480],{},[331,115459,115460,115461,30622],{},"是否每步调用了 ",[30,115462,102892],{},[331,115464,115465,115466,1958,115468,30622],{},"是否写入了 ",[30,115467,108329],{},[30,115469,115470],{},"data.ctrl[1]",[331,115472,115473,115474,2638,115477,30622],{},"actuator 是否正确引用 ",[30,115475,115476],{},"joint1",[30,115478,115479],{},"joint2",[331,115481,115482],{},"控制输入是否太小。",[631,115484,115485],{"id":115485},"目标点不会动",[19,115487,115488],{},"本章的 target 是固定 site：",[23,115490,115492],{"className":55286,"code":115491,"language":55288,"meta":28,"style":28},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[30,115493,115494],{"__ignoreMap":28},[33,115495,115496,115498,115500,115502,115504,115506,115508,115510,115513],{"class":35,"line":36},[33,115497,2226],{"class":47},[33,115499,105414],{"class":53522},[33,115501,17158],{"class":43},[33,115503,57],{"class":47},[33,115505,114162],{"class":60},[33,115507,103312],{"class":43},[33,115509,57],{"class":47},[33,115511,115512],{"class":60},"\"0.5 0 0.4\"",[33,115514,115515],{"class":47}," ...\u002F>\n",[19,115517,115518,115519,115521],{},"它直接挂在 ",[30,115520,104046],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[631,115523,115524],{"id":115524},"机械臂不像真实机械臂",[19,115526,115527],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115529,104812],{"id":104811},[19,115531,115532],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115534,115535],{},"核心公式：",[23,115537,115540],{"className":115538,"code":115539,"language":7436,"meta":28},[7434],"distance = ||tip - target||\nreward = -distance - action_cost\n",[30,115541,115539],{"__ignoreMap":28},[19,115543,115544],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2331,115546,115547],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":28,"searchDepth":51,"depth":51,"links":115549},[115550,115551,115552,115557,115561,115562,115563,115571],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":115553},[115554,115555,115556],{"id":113754,"depth":64,"text":113755},{"id":113830,"depth":64,"text":113830},{"id":113860,"depth":64,"text":113861},{"id":103458,"depth":51,"text":103459,"children":115558},[115559,115560],{"id":103777,"depth":64,"text":103777},{"id":103913,"depth":64,"text":103913},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":115564},[115565,115566,115567,115568,115569,115570],{"id":115400,"depth":64,"text":115403},{"id":115415,"depth":64,"text":115415},{"id":115440,"depth":64,"text":115440},{"id":115452,"depth":64,"text":115453},{"id":115485,"depth":64,"text":115485},{"id":115524,"depth":64,"text":115524},{"id":104811,"depth":51,"text":104812},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113558,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115578,"title":115579,"body":115580,"description":28,"extension":2360,"meta":119041,"navigation":99,"path":119042,"seo":119043,"stem":119044,"__hash__":119045},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115581,"toc":119012},[115582,115585,115587,115590,115593,115618,115621,115627,115630,115636,115638,115640,115664,115666,115684,115686,115729,115731,115758,115760,115763,115815,115818,115824,115833,115836,115874,115877,115916,115919,115927,115934,115937,115943,115945,115999,116006,116051,116054,116058,116074,116084,116086,117347,117349,117361,117363,117374,117376,117379,117400,117403,117406,117439,117445,117448,117481,117484,117487,117528,117533,117547,117550,117563,117568,117591,117593,117608,117618,117633,117640,117660,117675,117693,117696,117713,117721,117737,117743,117775,117788,117820,117830,117865,117879,117925,117939,117981,117992,118005,118011,118044,118047,118074,118084,118124,118134,118151,118158,118176,118179,118220,118233,118248,118251,118274,118277,118289,118292,118311,118316,118337,118340,118355,118358,118392,118404,118419,118422,118447,118450,118469,118472,118504,118507,118530,118536,118566,118573,118586,118589,118591,118593,118599,118602,118605,118617,118620,118622,118676,118678,118682,118688,118697,118700,118707,118709,118732,118735,118739,118741,118759,118765,118767,118800,118803,118809,118813,118816,118836,118841,118845,118852,118872,118877,118881,118884,118904,118907,118993,118997,119000,119006,119009],[10,115583,115579],{"id":115584},"_8gymnasium-风格强化学习接口基础",[14,115586,102854],{"id":102853},[19,115588,115589],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115591,115592],{},"你将实现:",[23,115594,115596],{"className":25,"code":115595,"language":27,"meta":28,"style":28},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[30,115597,115598,115608],{"__ignoreMap":28},[33,115599,115600,115603,115605],{"class":35,"line":36},[33,115601,115602],{"class":47},"obs, info ",[33,115604,57],{"class":39},[33,115606,115607],{"class":47}," env.reset()\n",[33,115609,115610,115613,115615],{"class":35,"line":51},[33,115611,115612],{"class":47},"obs, reward, terminated, truncated, info ",[33,115614,57],{"class":39},[33,115616,115617],{"class":47}," env.step(action)\n",[19,115619,115620],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115622,115623,115624,115626],{},"前面章节的代码都是“脚本式”的：在 ",[30,115625,104500],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115628,115629],{},"可以先记住 Gymnasium 环境的核心交互：",[23,115631,115634],{"className":115632,"code":115633,"language":7436,"meta":28},[7434],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[30,115635,115633],{"__ignoreMap":28},[14,115637,102977],{"id":102976},[19,115639,102980],{},[23,115641,115642],{"className":26060,"code":106591,"language":26062,"meta":28,"style":28},[30,115643,115644],{"__ignoreMap":28},[33,115645,115646,115648,115650,115652,115654,115656,115658,115660,115662],{"class":35,"line":36},[33,115647,26815],{"class":43},[33,115649,28553],{"class":60},[33,115651,26072],{"class":60},[33,115653,28638],{"class":72},[33,115655,106606],{"class":60},[33,115657,103005],{"class":60},[33,115659,104706],{"class":60},[33,115661,103021],{"class":60},[33,115663,106615],{"class":60},[19,115665,105024],{},[23,115667,115669],{"className":26060,"code":115668,"language":26062,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[30,115670,115671],{"__ignoreMap":28},[33,115672,115673,115675,115677,115679,115681],{"class":35,"line":36},[33,115674,26069],{"class":43},[33,115676,26072],{"class":60},[33,115678,103137],{"class":60},[33,115680,109914],{"class":60},[33,115682,115683],{"class":60}," gymnasium\n",[19,115685,105041],{},[23,115687,115689],{"className":26060,"code":115688,"language":26062,"meta":28,"style":28},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[30,115690,115691,115708,115717],{"__ignoreMap":28},[33,115692,115693,115695,115697,115699,115702,115704,115706],{"class":35,"line":36},[33,115694,32567],{"class":43},[33,115696,31413],{"class":60},[33,115698,27354],{"class":72},[33,115700,115701],{"class":60}," mujoco-gym-api",[33,115703,103182],{"class":60},[33,115705,103185],{"class":72},[33,115707,103188],{"class":72},[33,115709,115710,115712,115714],{"class":35,"line":51},[33,115711,32567],{"class":43},[33,115713,103195],{"class":60},[33,115715,115716],{"class":60}," mujoco-gym-api\n",[33,115718,115719,115721,115723,115725,115727],{"class":35,"line":64},[33,115720,26069],{"class":43},[33,115722,26072],{"class":60},[33,115724,103137],{"class":60},[33,115726,109914],{"class":60},[33,115728,115683],{"class":60},[19,115730,103211],{},[328,115732,115733,115743,115746,115752],{},[331,115734,115735,115736,115739,115740,30622],{},"本章使用 ",[30,115737,115738],{},"gymnasium","，不是旧版 ",[30,115741,115742],{},"gym",[331,115744,115745],{},"Gymnasium API 与旧 Gym API 有差异。",[331,115747,115748,115749,30622],{},"旧 Gym 常见返回值是 4 个: ",[30,115750,115751],{},"obs, reward, done, info",[331,115753,115754,115755,30622],{},"Gymnasium 返回值是 5 个: ",[30,115756,115757],{},"obs, reward, terminated, truncated, info",[14,115759,103251],{"id":103250},[19,115761,115762],{},"强化学习环境接口包含:",[2563,115764,115765,115774],{},[2566,115766,115767],{},[2569,115768,115769,115772],{},[2572,115770,115771],{"align":25974},"方法",[2572,115773,104901],{"align":25974},[2610,115775,115776,115786,115796,115806],{},[2569,115777,115778,115783],{},[2615,115779,115780],{"align":25974},[30,115781,115782],{},"reset()",[2615,115784,115785],{"align":25974},"重置环境",[2569,115787,115788,115793],{},[2615,115789,115790],{"align":25974},[30,115791,115792],{},"step(action)",[2615,115794,115795],{"align":25974},"执行动作",[2569,115797,115798,115803],{},[2615,115799,115800],{"align":25974},[30,115801,115802],{},"observation_space",[2615,115804,115805],{"align":25974},"观测空间",[2569,115807,115808,115813],{},[2615,115809,115810],{"align":25974},[30,115811,115812],{},"action_space",[2615,115814,25892],{"align":25974},[19,115816,115817],{},"一个最小环境需要完成:",[23,115819,115822],{"className":115820,"code":115821,"language":7436,"meta":28},[7434],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[30,115823,115821],{"__ignoreMap":28},[631,115825,115827,1958,115830,106841],{"id":115826},"terminated-和-truncated-的区别",[30,115828,115829],{},"terminated",[30,115831,115832],{},"truncated",[19,115834,115835],{},"Gymnasium 把“结束”拆成两个概念：",[2563,115837,115838,115848],{},[2566,115839,115840],{},[2569,115841,115842,115844,115846],{},[2572,115843,106777],{"align":25974},[2572,115845,102907],{"align":25974},[2572,115847,23425],{"align":25974},[2610,115849,115850,115862],{},[2569,115851,115852,115856,115859],{},[2615,115853,115854],{"align":25974},[30,115855,115829],{},[2615,115857,115858],{"align":25974},"任务自然结束",[2615,115860,115861],{"align":25974},"机械臂到达目标、机器人摔倒",[2569,115863,115864,115868,115871],{},[2615,115865,115866],{"align":25974},[30,115867,115832],{},[2615,115869,115870],{"align":25974},"因外部限制截断",[2615,115872,115873],{"align":25974},"达到最大步数、时间限制",[19,115875,115876],{},"本章中：",[23,115878,115880],{"className":25,"code":115879,"language":27,"meta":28,"style":28},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[30,115881,115882,115897],{"__ignoreMap":28},[33,115883,115884,115887,115889,115892,115894],{"class":35,"line":36},[33,115885,115886],{"class":47},"terminated ",[33,115888,57],{"class":39},[33,115890,115891],{"class":47}," dist ",[33,115893,2226],{"class":39},[33,115895,115896],{"class":72}," 0.05\n",[33,115898,115899,115902,115904,115906,115909,115911,115913],{"class":35,"line":51},[33,115900,115901],{"class":47},"truncated ",[33,115903,57],{"class":39},[33,115905,41098],{"class":72},[33,115907,115908],{"class":47},".steps ",[33,115910,2175],{"class":39},[33,115912,41098],{"class":72},[33,115914,115915],{"class":47},".max_steps\n",[19,115917,115918],{},"也就是：",[328,115920,115921,115924],{},[331,115922,115923],{},"末端距离目标小于 0.05，任务成功结束。",[331,115925,115926],{},"步数超过上限，episode 被截断。",[631,115928,115930,1958,115932],{"id":115929},"observation_space-和-action_space",[30,115931,115802],{},[30,115933,115812],{},[19,115935,115936],{},"这两个对象告诉算法：",[23,115938,115941],{"className":115939,"code":115940,"language":7436,"meta":28},[7434],"观测长什么样\n动作允许多大\n",[30,115942,115940],{"__ignoreMap":28},[19,115944,16873],{},[23,115946,115948],{"className":25,"code":115947,"language":27,"meta":28,"style":28},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[30,115949,115950],{"__ignoreMap":28},[33,115951,115952,115954,115957,115959,115962,115965,115968,115970,115972,115975,115977,115979,115981,115983,115985,115987,115989,115992,115994,115996],{"class":35,"line":36},[33,115953,33054],{"class":72},[33,115955,115956],{"class":47},".action_space ",[33,115958,57],{"class":39},[33,115960,115961],{"class":47}," spaces.Box(",[33,115963,115964],{"class":289},"low",[33,115966,115967],{"class":39},"=-",[33,115969,104608],{"class":72},[33,115971,245],{"class":47},[33,115973,115974],{"class":289},"high",[33,115976,57],{"class":39},[33,115978,104608],{"class":72},[33,115980,245],{"class":47},[33,115982,98170],{"class":289},[33,115984,57],{"class":39},[33,115986,133],{"class":47},[33,115988,725],{"class":72},[33,115990,115991],{"class":47},",), ",[33,115993,95708],{"class":289},[33,115995,57],{"class":39},[33,115997,115998],{"class":47},"np.float32)\n",[19,116000,116001,116002,116005],{},"表示动作是 2 维数组，每个值都在 ",[30,116003,116004],{},"[-1, 1]"," 范围内。",[23,116007,116009],{"className":25,"code":116008,"language":27,"meta":28,"style":28},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[30,116010,116011],{"__ignoreMap":28},[33,116012,116013,116015,116018,116020,116022,116024,116026,116029,116031,116033,116035,116037,116039,116041,116043,116045,116047,116049],{"class":35,"line":36},[33,116014,33054],{"class":72},[33,116016,116017],{"class":47},".observation_space ",[33,116019,57],{"class":39},[33,116021,115961],{"class":47},[33,116023,115964],{"class":289},[33,116025,115967],{"class":39},[33,116027,116028],{"class":47},"np.inf, ",[33,116030,115974],{"class":289},[33,116032,57],{"class":39},[33,116034,116028],{"class":47},[33,116036,98170],{"class":289},[33,116038,57],{"class":39},[33,116040,133],{"class":47},[33,116042,1279],{"class":72},[33,116044,115991],{"class":47},[33,116046,95708],{"class":289},[33,116048,57],{"class":39},[33,116050,115998],{"class":47},[19,116052,116053],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[631,116055,116057],{"id":116056},"frame_skip-是什么","frame_skip 是什么",[23,116059,116061],{"className":25,"code":116060,"language":27,"meta":28,"style":28},"self.frame_skip = 5\n",[30,116062,116063],{"__ignoreMap":28},[33,116064,116065,116067,116070,116072],{"class":35,"line":36},[33,116066,33054],{"class":72},[33,116068,116069],{"class":47},".frame_skip ",[33,116071,57],{"class":39},[33,116073,56646],{"class":72},[19,116075,116076,116077,116080,116081,116083],{},"表示外部调用一次 ",[30,116078,116079],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[30,116082,103421],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,116085,103459],{"id":103458},[23,116087,116089],{"className":25,"code":116088,"language":27,"meta":28,"style":28},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,116090,116091,116103,116109,116119,116130,116134,116138,116146,116151,116155,116159,116163,116167,116171,116175,116179,116184,116188,116192,116196,116201,116205,116209,116213,116217,116221,116225,116229,116233,116237,116241,116245,116249,116253,116271,116286,116290,116303,116313,116328,116345,116349,116370,116389,116414,116428,116432,116442,116454,116464,116468,116510,116548,116552,116562,116578,116593,116612,116619,116623,116636,116651,116666,116679,116698,116714,116718,116759,116774,116789,116793,116832,116843,116856,116860,116870,116879,116883,116893,116908,116926,116930,116941,116958,116971,116975,116985,116989,117000,117011,117015,117029,117043,117059,117063,117076,117093,117108,117115,117119,117123,117135,117145,117163,117175,117187,117191,117199,117215,117224,117233,117241,117283,117296,117301,117305,117323,117327,117331,117343],{"__ignoreMap":28},[33,116092,116093,116095,116098,116100],{"class":35,"line":36},[33,116094,32627],{"class":39},[33,116096,116097],{"class":47}," gymnasium ",[33,116099,33613],{"class":39},[33,116101,116102],{"class":47}," gym\n",[33,116104,116105,116107],{"class":35,"line":51},[33,116106,32627],{"class":39},[33,116108,103507],{"class":47},[33,116110,116111,116113,116115,116117],{"class":35,"line":64},[33,116112,32627],{"class":39},[33,116114,33610],{"class":47},[33,116116,33613],{"class":39},[33,116118,33616],{"class":47},[33,116120,116121,116123,116125,116127],{"class":35,"line":76},[33,116122,32970],{"class":39},[33,116124,116097],{"class":47},[33,116126,32627],{"class":39},[33,116128,116129],{"class":47}," spaces\n",[33,116131,116132],{"class":35,"line":87},[33,116133,100],{"emptyLinePlaceholder":99},[33,116135,116136],{"class":35,"line":96},[33,116137,100],{"emptyLinePlaceholder":99},[33,116139,116140,116142,116144],{"class":35,"line":103},[33,116141,103520],{"class":72},[33,116143,15804],{"class":39},[33,116145,103525],{"class":60},[33,116147,116148],{"class":35,"line":108},[33,116149,116150],{"class":60},"\u003Cmujoco model=\"gym_reacher\">\n",[33,116152,116153],{"class":35,"line":119},[33,116154,113941],{"class":60},[33,116156,116157],{"class":35,"line":128},[33,116158,100],{"emptyLinePlaceholder":99},[33,116160,116161],{"class":35,"line":1753},[33,116162,103544],{"class":60},[33,116164,116165],{"class":35,"line":1763},[33,116166,113959],{"class":60},[33,116168,116169],{"class":35,"line":1775},[33,116170,100],{"emptyLinePlaceholder":99},[33,116172,116173],{"class":35,"line":1780},[33,116174,113968],{"class":60},[33,116176,116177],{"class":35,"line":1785},[33,116178,113973],{"class":60},[33,116180,116181],{"class":35,"line":1940},[33,116182,116183],{"class":60},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,116185,116186],{"class":35,"line":2183},[33,116187,100],{"emptyLinePlaceholder":99},[33,116189,116190],{"class":35,"line":2208},[33,116191,113987],{"class":60},[33,116193,116194],{"class":35,"line":2234},[33,116195,113992],{"class":60},[33,116197,116198],{"class":35,"line":2239},[33,116199,116200],{"class":60},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,116202,116203],{"class":35,"line":2247},[33,116204,114002],{"class":60},[33,116206,116207],{"class":35,"line":2255},[33,116208,108641],{"class":60},[33,116210,116211],{"class":35,"line":3992},[33,116212,103573],{"class":60},[33,116214,116215],{"class":35,"line":4009},[33,116216,103578],{"class":60},[33,116218,116219],{"class":35,"line":4014},[33,116220,100],{"emptyLinePlaceholder":99},[33,116222,116223],{"class":35,"line":4019},[33,116224,108658],{"class":60},[33,116226,116227],{"class":35,"line":4024},[33,116228,114027],{"class":60},[33,116230,116231],{"class":35,"line":4038},[33,116232,114032],{"class":60},[33,116234,116235],{"class":35,"line":4043},[33,116236,108668],{"class":60},[33,116238,116239],{"class":35,"line":4834},[33,116240,103583],{"class":60},[33,116242,116243],{"class":35,"line":4848},[33,116244,97905],{"class":60},[33,116246,116247],{"class":35,"line":4856},[33,116248,100],{"emptyLinePlaceholder":99},[33,116250,116251],{"class":35,"line":4861},[33,116252,100],{"emptyLinePlaceholder":99},[33,116254,116255,116257,116260,116262,116264,116266,116269],{"class":35,"line":4867},[33,116256,16934],{"class":39},[33,116258,116259],{"class":43}," ReacherEnv",[33,116261,133],{"class":47},[33,116263,115742],{"class":43},[33,116265,2975],{"class":47},[33,116267,116268],{"class":43},"Env",[33,116270,366],{"class":47},[33,116272,116273,116276,116278,116280,116283],{"class":35,"line":4873},[33,116274,116275],{"class":47},"    metadata ",[33,116277,57],{"class":39},[33,116279,965],{"class":47},[33,116281,116282],{"class":60},"\"render_modes\"",[33,116284,116285],{"class":47},": []}\n",[33,116287,116288],{"class":35,"line":4878},[33,116289,100],{"emptyLinePlaceholder":99},[33,116291,116292,116294,116296,116299,116301],{"class":35,"line":10194},[33,116293,1603],{"class":39},[33,116295,33035],{"class":72},[33,116297,116298],{"class":47},"(self) -> ",[33,116300,586],{"class":72},[33,116302,605],{"class":47},[33,116304,116305,116307,116309,116311],{"class":35,"line":10218},[33,116306,33048],{"class":72},[33,116308,19499],{"class":47},[33,116310,33060],{"class":72},[33,116312,4235],{"class":47},[33,116314,116315,116317,116320,116322,116324,116326],{"class":35,"line":10223},[33,116316,33076],{"class":72},[33,116318,116319],{"class":47},".model ",[33,116321,57],{"class":39},[33,116323,103618],{"class":47},[33,116325,103520],{"class":72},[33,116327,226],{"class":47},[33,116329,116330,116332,116335,116337,116340,116342],{"class":35,"line":10229},[33,116331,33076],{"class":72},[33,116333,116334],{"class":47},".data ",[33,116336,57],{"class":39},[33,116338,116339],{"class":47}," mujoco.MjData(",[33,116341,33054],{"class":72},[33,116343,116344],{"class":47},".model)\n",[33,116346,116347],{"class":35,"line":10256},[33,116348,100],{"emptyLinePlaceholder":99},[33,116350,116351,116353,116356,116358,116361,116363,116366,116368],{"class":35,"line":10261},[33,116352,33076],{"class":72},[33,116354,116355],{"class":47},".tip_site_id ",[33,116357,57],{"class":39},[33,116359,116360],{"class":47}," mujoco.mj_name2id(",[33,116362,33054],{"class":72},[33,116364,116365],{"class":47},".model, mujoco.mjtObj.mjOBJ_SITE, ",[33,116367,113739],{"class":60},[33,116369,226],{"class":47},[33,116371,116372,116374,116377,116379,116381,116383,116385,116387],{"class":35,"line":10267},[33,116373,33076],{"class":72},[33,116375,116376],{"class":47},".target_site_id ",[33,116378,57],{"class":39},[33,116380,116360],{"class":47},[33,116382,33054],{"class":72},[33,116384,116365],{"class":47},[33,116386,114162],{"class":60},[33,116388,226],{"class":47},[33,116390,116391,116393,116395,116397,116399,116401,116404,116406,116408,116410,116412],{"class":35,"line":10279},[33,116392,2130],{"class":39},[33,116394,41098],{"class":72},[33,116396,116355],{"class":47},[33,116398,2226],{"class":39},[33,116400,1437],{"class":72},[33,116402,116403],{"class":39}," or",[33,116405,41098],{"class":72},[33,116407,116376],{"class":47},[33,116409,2226],{"class":39},[33,116411,1437],{"class":72},[33,116413,605],{"class":47},[33,116415,116416,116419,116421,116423,116426],{"class":35,"line":10291},[33,116417,116418],{"class":39},"            raise",[33,116420,105639],{"class":72},[33,116422,133],{"class":47},[33,116424,116425],{"class":60},"\"required sites not found\"",[33,116427,226],{"class":47},[33,116429,116430],{"class":35,"line":10303},[33,116431,100],{"emptyLinePlaceholder":99},[33,116433,116434,116436,116438,116440],{"class":35,"line":11961},[33,116435,33076],{"class":72},[33,116437,116069],{"class":47},[33,116439,57],{"class":39},[33,116441,56646],{"class":72},[33,116443,116444,116446,116449,116451],{"class":35,"line":11986},[33,116445,33076],{"class":72},[33,116447,116448],{"class":47},".max_steps ",[33,116450,57],{"class":39},[33,116452,116453],{"class":72}," 200\n",[33,116455,116456,116458,116460,116462],{"class":35,"line":12009},[33,116457,33076],{"class":72},[33,116459,115908],{"class":47},[33,116461,57],{"class":39},[33,116463,670],{"class":72},[33,116465,116466],{"class":35,"line":12033},[33,116467,100],{"emptyLinePlaceholder":99},[33,116469,116470,116472,116474,116476,116478,116480,116482,116484,116486,116488,116490,116492,116494,116496,116498,116500,116502,116504,116506,116508],{"class":35,"line":12038},[33,116471,33076],{"class":72},[33,116473,115956],{"class":47},[33,116475,57],{"class":39},[33,116477,115961],{"class":47},[33,116479,115964],{"class":289},[33,116481,115967],{"class":39},[33,116483,104608],{"class":72},[33,116485,245],{"class":47},[33,116487,115974],{"class":289},[33,116489,57],{"class":39},[33,116491,104608],{"class":72},[33,116493,245],{"class":47},[33,116495,98170],{"class":289},[33,116497,57],{"class":39},[33,116499,133],{"class":47},[33,116501,725],{"class":72},[33,116503,115991],{"class":47},[33,116505,95708],{"class":289},[33,116507,57],{"class":39},[33,116509,115998],{"class":47},[33,116511,116512,116514,116516,116518,116520,116522,116524,116526,116528,116530,116532,116534,116536,116538,116540,116542,116544,116546],{"class":35,"line":12043},[33,116513,33076],{"class":72},[33,116515,116017],{"class":47},[33,116517,57],{"class":39},[33,116519,115961],{"class":47},[33,116521,115964],{"class":289},[33,116523,115967],{"class":39},[33,116525,116028],{"class":47},[33,116527,115974],{"class":289},[33,116529,57],{"class":39},[33,116531,116028],{"class":47},[33,116533,98170],{"class":289},[33,116535,57],{"class":39},[33,116537,133],{"class":47},[33,116539,1279],{"class":72},[33,116541,115991],{"class":47},[33,116543,95708],{"class":289},[33,116545,57],{"class":39},[33,116547,115998],{"class":47},[33,116549,116550],{"class":35,"line":12048},[33,116551,100],{"emptyLinePlaceholder":99},[33,116553,116554,116556,116559],{"class":35,"line":12057},[33,116555,1603],{"class":39},[33,116557,116558],{"class":43}," _get_obs",[33,116560,116561],{"class":47},"(self) -> np.ndarray:\n",[33,116563,116564,116566,116568,116570,116573,116575],{"class":35,"line":12062},[33,116565,114340],{"class":47},[33,116567,57],{"class":39},[33,116569,41098],{"class":72},[33,116571,116572],{"class":47},".data.site_xpos[",[33,116574,33054],{"class":72},[33,116576,116577],{"class":47},".tip_site_id].copy()\n",[33,116579,116580,116582,116584,116586,116588,116590],{"class":35,"line":12068},[33,116581,114353],{"class":47},[33,116583,57],{"class":39},[33,116585,41098],{"class":72},[33,116587,116572],{"class":47},[33,116589,33054],{"class":72},[33,116591,116592],{"class":47},".target_site_id].copy()\n",[33,116594,116595,116597,116599,116602,116604,116607,116609],{"class":35,"line":12089},[33,116596,112385],{"class":47},[33,116598,57],{"class":39},[33,116600,116601],{"class":47}," np.concatenate([",[33,116603,33054],{"class":72},[33,116605,116606],{"class":47},".data.qpos.copy(), ",[33,116608,33054],{"class":72},[33,116610,116611],{"class":47},".data.qvel.copy(), tip, target])\n",[33,116613,116614,116616],{"class":35,"line":12095},[33,116615,1614],{"class":39},[33,116617,116618],{"class":47}," obs.astype(np.float32)\n",[33,116620,116621],{"class":35,"line":12109},[33,116622,100],{"emptyLinePlaceholder":99},[33,116624,116625,116627,116630,116632,116634],{"class":35,"line":12115},[33,116626,1603],{"class":39},[33,116628,116629],{"class":43}," _get_reward",[33,116631,116298],{"class":47},[33,116633,2471],{"class":72},[33,116635,605],{"class":47},[33,116637,116638,116640,116642,116644,116646,116648],{"class":35,"line":12142},[33,116639,114340],{"class":47},[33,116641,57],{"class":39},[33,116643,41098],{"class":72},[33,116645,116572],{"class":47},[33,116647,33054],{"class":72},[33,116649,116650],{"class":47},".tip_site_id]\n",[33,116652,116653,116655,116657,116659,116661,116663],{"class":35,"line":12151},[33,116654,114353],{"class":47},[33,116656,57],{"class":39},[33,116658,41098],{"class":72},[33,116660,116572],{"class":47},[33,116662,33054],{"class":72},[33,116664,116665],{"class":47},".target_site_id]\n",[33,116667,116668,116671,116673,116675,116677],{"class":35,"line":12157},[33,116669,116670],{"class":47},"        dist ",[33,116672,57],{"class":39},[33,116674,113804],{"class":47},[33,116676,2949],{"class":39},[33,116678,113809],{"class":47},[33,116680,116681,116684,116686,116688,116690,116693,116695],{"class":35,"line":12165},[33,116682,116683],{"class":47},"        control_cost ",[33,116685,57],{"class":39},[33,116687,114240],{"class":72},[33,116689,8764],{"class":39},[33,116691,116692],{"class":47}," np.sum(np.square(",[33,116694,33054],{"class":72},[33,116696,116697],{"class":47},".data.ctrl))\n",[33,116699,116700,116702,116704,116706,116708,116710,116712],{"class":35,"line":12170},[33,116701,1614],{"class":39},[33,116703,112000],{"class":72},[33,116705,133],{"class":47},[33,116707,2949],{"class":39},[33,116709,113799],{"class":47},[33,116711,2949],{"class":39},[33,116713,114262],{"class":47},[33,116715,116716],{"class":35,"line":18842},[33,116717,100],{"emptyLinePlaceholder":99},[33,116719,116720,116722,116725,116728,116730,116733,116735,116737,116739,116741,116743,116746,116749,116751,116753,116755,116757],{"class":35,"line":18848},[33,116721,1603],{"class":39},[33,116723,116724],{"class":43}," reset",[33,116726,116727],{"class":47},"(self, ",[33,116729,657],{"class":39},[33,116731,116732],{"class":47},", seed: ",[33,116734,2436],{"class":72},[33,116736,27348],{"class":39},[33,116738,602],{"class":72},[33,116740,15804],{"class":39},[33,116742,602],{"class":72},[33,116744,116745],{"class":47},", options: ",[33,116747,116748],{"class":72},"dict",[33,116750,27348],{"class":39},[33,116752,602],{"class":72},[33,116754,15804],{"class":39},[33,116756,602],{"class":72},[33,116758,366],{"class":47},[33,116760,116761,116763,116766,116769,116771],{"class":35,"line":18871},[33,116762,33048],{"class":72},[33,116764,116765],{"class":47},"().reset(",[33,116767,116768],{"class":289},"seed",[33,116770,57],{"class":39},[33,116772,116773],{"class":47},"seed)\n",[33,116775,116776,116779,116781,116784,116786],{"class":35,"line":18877},[33,116777,116778],{"class":47},"        mujoco.mj_resetData(",[33,116780,33054],{"class":72},[33,116782,116783],{"class":47},".model, ",[33,116785,33054],{"class":72},[33,116787,116788],{"class":47},".data)\n",[33,116790,116791],{"class":35,"line":18900},[33,116792,100],{"emptyLinePlaceholder":99},[33,116794,116795,116797,116800,116802,116804,116807,116809,116811,116813,116815,116817,116819,116821,116823,116825,116827,116829],{"class":35,"line":18914},[33,116796,33076],{"class":72},[33,116798,116799],{"class":47},".data.qpos[:] ",[33,116801,57],{"class":39},[33,116803,41098],{"class":72},[33,116805,116806],{"class":47},".np_random.uniform(",[33,116808,115964],{"class":289},[33,116810,115967],{"class":39},[33,116812,88419],{"class":72},[33,116814,245],{"class":47},[33,116816,115974],{"class":289},[33,116818,57],{"class":39},[33,116820,88419],{"class":72},[33,116822,245],{"class":47},[33,116824,33725],{"class":289},[33,116826,57],{"class":39},[33,116828,33054],{"class":72},[33,116830,116831],{"class":47},".model.nq)\n",[33,116833,116834,116836,116839,116841],{"class":35,"line":18934},[33,116835,33076],{"class":72},[33,116837,116838],{"class":47},".data.qvel[:] ",[33,116840,57],{"class":39},[33,116842,106964],{"class":72},[33,116844,116845,116848,116850,116852,116854],{"class":35,"line":18940},[33,116846,116847],{"class":47},"        mujoco.mj_forward(",[33,116849,33054],{"class":72},[33,116851,116783],{"class":47},[33,116853,33054],{"class":72},[33,116855,116788],{"class":47},[33,116857,116858],{"class":35,"line":18951},[33,116859,100],{"emptyLinePlaceholder":99},[33,116861,116862,116864,116866,116868],{"class":35,"line":18974},[33,116863,33076],{"class":72},[33,116865,115908],{"class":47},[33,116867,57],{"class":39},[33,116869,670],{"class":72},[33,116871,116872,116874,116876],{"class":35,"line":18996},[33,116873,1614],{"class":39},[33,116875,41098],{"class":72},[33,116877,116878],{"class":47},"._get_obs(), {}\n",[33,116880,116881],{"class":35,"line":19001},[33,116882,100],{"emptyLinePlaceholder":99},[33,116884,116885,116887,116890],{"class":35,"line":19007},[33,116886,1603],{"class":39},[33,116888,116889],{"class":43}," step",[33,116891,116892],{"class":47},"(self, action):\n",[33,116894,116895,116897,116899,116902,116904,116906],{"class":35,"line":19021},[33,116896,112425],{"class":47},[33,116898,57],{"class":39},[33,116900,116901],{"class":47}," np.asarray(action, ",[33,116903,95708],{"class":289},[33,116905,57],{"class":39},[33,116907,115998],{"class":47},[33,116909,116910,116912,116914,116916,116918,116921,116923],{"class":35,"line":19034},[33,116911,112425],{"class":47},[33,116913,57],{"class":39},[33,116915,109650],{"class":47},[33,116917,33054],{"class":72},[33,116919,116920],{"class":47},".action_space.low, ",[33,116922,33054],{"class":72},[33,116924,116925],{"class":47},".action_space.high)\n",[33,116927,116928],{"class":35,"line":19039},[33,116929,100],{"emptyLinePlaceholder":99},[33,116931,116932,116934,116937,116939],{"class":35,"line":19053},[33,116933,33076],{"class":72},[33,116935,116936],{"class":47},".data.ctrl[:] ",[33,116938,57],{"class":39},[33,116940,109673],{"class":47},[33,116942,116943,116945,116947,116949,116951,116953,116955],{"class":35,"line":19058},[33,116944,5658],{"class":39},[33,116946,103707],{"class":47},[33,116948,681],{"class":39},[33,116950,34670],{"class":72},[33,116952,133],{"class":47},[33,116954,33054],{"class":72},[33,116956,116957],{"class":47},".frame_skip):\n",[33,116959,116960,116963,116965,116967,116969],{"class":35,"line":19064},[33,116961,116962],{"class":47},"            mujoco.mj_step(",[33,116964,33054],{"class":72},[33,116966,116783],{"class":47},[33,116968,33054],{"class":72},[33,116970,116788],{"class":47},[33,116972,116973],{"class":35,"line":19069},[33,116974,100],{"emptyLinePlaceholder":99},[33,116976,116977,116979,116981,116983],{"class":35,"line":19083},[33,116978,33076],{"class":72},[33,116980,115908],{"class":47},[33,116982,692],{"class":39},[33,116984,57917],{"class":72},[33,116986,116987],{"class":35,"line":19088},[33,116988,100],{"emptyLinePlaceholder":99},[33,116990,116991,116993,116995,116997],{"class":35,"line":19093},[33,116992,112385],{"class":47},[33,116994,57],{"class":39},[33,116996,41098],{"class":72},[33,116998,116999],{"class":47},"._get_obs()\n",[33,117001,117002,117004,117006,117008],{"class":35,"line":19107},[33,117003,112490],{"class":47},[33,117005,57],{"class":39},[33,117007,41098],{"class":72},[33,117009,117010],{"class":47},"._get_reward()\n",[33,117012,117013],{"class":35,"line":19119},[33,117014,100],{"emptyLinePlaceholder":99},[33,117016,117017,117019,117021,117023,117025,117027],{"class":35,"line":19124},[33,117018,114340],{"class":47},[33,117020,57],{"class":39},[33,117022,41098],{"class":72},[33,117024,116572],{"class":47},[33,117026,33054],{"class":72},[33,117028,116650],{"class":47},[33,117030,117031,117033,117035,117037,117039,117041],{"class":35,"line":19137},[33,117032,114353],{"class":47},[33,117034,57],{"class":39},[33,117036,41098],{"class":72},[33,117038,116572],{"class":47},[33,117040,33054],{"class":72},[33,117042,116665],{"class":47},[33,117044,117045,117047,117049,117051,117054,117056],{"class":35,"line":19142},[33,117046,116670],{"class":47},[33,117048,57],{"class":39},[33,117050,112000],{"class":72},[33,117052,117053],{"class":47},"(np.linalg.norm(tip ",[33,117055,2949],{"class":39},[33,117057,117058],{"class":47}," target))\n",[33,117060,117061],{"class":35,"line":19147},[33,117062,100],{"emptyLinePlaceholder":99},[33,117064,117065,117068,117070,117072,117074],{"class":35,"line":19152},[33,117066,117067],{"class":47},"        terminated ",[33,117069,57],{"class":39},[33,117071,115891],{"class":47},[33,117073,2226],{"class":39},[33,117075,115896],{"class":72},[33,117077,117078,117081,117083,117085,117087,117089,117091],{"class":35,"line":19165},[33,117079,117080],{"class":47},"        truncated ",[33,117082,57],{"class":39},[33,117084,41098],{"class":72},[33,117086,115908],{"class":47},[33,117088,2175],{"class":39},[33,117090,41098],{"class":72},[33,117092,115915],{"class":47},[33,117094,117095,117098,117100,117102,117105],{"class":35,"line":19170},[33,117096,117097],{"class":47},"        info ",[33,117099,57],{"class":39},[33,117101,965],{"class":47},[33,117103,117104],{"class":60},"\"distance\"",[33,117106,117107],{"class":47},": dist}\n",[33,117109,117110,117112],{"class":35,"line":34859},[33,117111,1614],{"class":39},[33,117113,117114],{"class":47}," obs, reward, terminated, truncated, info\n",[33,117116,117117],{"class":35,"line":34865},[33,117118,100],{"emptyLinePlaceholder":99},[33,117120,117121],{"class":35,"line":34871},[33,117122,100],{"emptyLinePlaceholder":99},[33,117124,117125,117127,117129,117131,117133],{"class":35,"line":34877},[33,117126,40],{"class":39},[33,117128,4232],{"class":43},[33,117130,103604],{"class":47},[33,117132,586],{"class":72},[33,117134,605],{"class":47},[33,117136,117137,117140,117142],{"class":35,"line":34883},[33,117138,117139],{"class":47},"    env ",[33,117141,57],{"class":39},[33,117143,117144],{"class":47}," ReacherEnv()\n",[33,117146,117147,117150,117152,117155,117157,117159,117161],{"class":35,"line":34894},[33,117148,117149],{"class":47},"    obs, info ",[33,117151,57],{"class":39},[33,117153,117154],{"class":47}," env.reset(",[33,117156,116768],{"class":289},[33,117158,57],{"class":39},[33,117160,2617],{"class":72},[33,117162,226],{"class":47},[33,117164,117165,117167,117169,117172],{"class":35,"line":34900},[33,117166,193],{"class":72},[33,117168,133],{"class":47},[33,117170,117171],{"class":60},"\"initial obs shape:\"",[33,117173,117174],{"class":47},", obs.shape)\n",[33,117176,117177,117179,117181,117184],{"class":35,"line":34920},[33,117178,193],{"class":72},[33,117180,133],{"class":47},[33,117182,117183],{"class":60},"\"initial info:\"",[33,117185,117186],{"class":47},", info)\n",[33,117188,117189],{"class":35,"line":34926},[33,117190,100],{"emptyLinePlaceholder":99},[33,117192,117193,117195,117197],{"class":35,"line":34937},[33,117194,112356],{"class":47},[33,117196,57],{"class":39},[33,117198,106964],{"class":72},[33,117200,117201,117203,117205,117207,117209,117211,117213],{"class":35,"line":34943},[33,117202,675],{"class":39},[33,117204,33845],{"class":47},[33,117206,681],{"class":39},[33,117208,34670],{"class":72},[33,117210,133],{"class":47},[33,117212,1284],{"class":72},[33,117214,366],{"class":47},[33,117216,117217,117219,117221],{"class":35,"line":34949},[33,117218,112425],{"class":47},[33,117220,57],{"class":39},[33,117222,117223],{"class":47}," env.action_space.sample()\n",[33,117225,117226,117229,117231],{"class":35,"line":34955},[33,117227,117228],{"class":47},"        obs, reward, terminated, truncated, info ",[33,117230,57],{"class":39},[33,117232,115617],{"class":47},[33,117234,117235,117237,117239],{"class":35,"line":34961},[33,117236,112500],{"class":47},[33,117238,692],{"class":39},[33,117240,112505],{"class":47},[33,117242,117243,117245,117247,117249,117251,117254,117256,117258,117261,117263,117265,117268,117270,117272,117275,117277,117279,117281],{"class":35,"line":34967},[33,117244,807],{"class":72},[33,117246,133],{"class":47},[33,117248,112534],{"class":60},[33,117250,112537],{"class":47},[33,117252,117253],{"class":60},"\"reward:\"",[33,117255,245],{"class":47},[33,117257,34245],{"class":72},[33,117259,117260],{"class":47},"(reward, ",[33,117262,730],{"class":72},[33,117264,112548],{"class":47},[33,117266,117267],{"class":60},"\"distance:\"",[33,117269,245],{"class":47},[33,117271,34245],{"class":72},[33,117273,117274],{"class":47},"(info[",[33,117276,117104],{"class":60},[33,117278,1182],{"class":47},[33,117280,730],{"class":72},[33,117282,551],{"class":47},[33,117284,117285,117287,117290,117293],{"class":35,"line":34973},[33,117286,2130],{"class":39},[33,117288,117289],{"class":47}," terminated ",[33,117291,117292],{"class":39},"or",[33,117294,117295],{"class":47}," truncated:\n",[33,117297,117298],{"class":35,"line":34979},[33,117299,117300],{"class":39},"            break\n",[33,117302,117303],{"class":35,"line":34999},[33,117304,100],{"emptyLinePlaceholder":99},[33,117306,117307,117309,117311,117313,117315,117317,117319,117321],{"class":35,"line":35005},[33,117308,193],{"class":72},[33,117310,133],{"class":47},[33,117312,112579],{"class":60},[33,117314,245],{"class":47},[33,117316,34245],{"class":72},[33,117318,112586],{"class":47},[33,117320,730],{"class":72},[33,117322,551],{"class":47},[33,117324,117325],{"class":35,"line":35021},[33,117326,100],{"emptyLinePlaceholder":99},[33,117328,117329],{"class":35,"line":35027},[33,117330,100],{"emptyLinePlaceholder":99},[33,117332,117333,117335,117337,117339,117341],{"class":35,"line":35041},[33,117334,3805],{"class":39},[33,117336,33451],{"class":72},[33,117338,1434],{"class":39},[33,117340,103767],{"class":60},[33,117342,605],{"class":47},[33,117344,117345],{"class":35,"line":35047},[33,117346,103774],{"class":47},[19,117348,105774],{},[23,117350,117352],{"className":26060,"code":117351,"language":26062,"meta":28,"style":28},"touch ch8_gym_env.py\n",[30,117353,117354],{"__ignoreMap":28},[33,117355,117356,117358],{"class":35,"line":36},[33,117357,103489],{"class":43},[33,117359,117360],{"class":60}," ch8_gym_env.py\n",[19,117362,112647],{},[23,117364,117366],{"className":26060,"code":117365,"language":26062,"meta":28,"style":28},"python ch8_gym_env.py\n",[30,117367,117368],{"__ignoreMap":28},[33,117369,117370,117372],{"class":35,"line":36},[33,117371,27],{"class":43},[33,117373,117360],{"class":60},[631,117375,103777],{"id":103777},[19,117377,117378],{},"继承 Gymnasium 环境：",[23,117380,117382],{"className":25,"code":117381,"language":27,"meta":28,"style":28},"class ReacherEnv(gym.Env):\n",[30,117383,117384],{"__ignoreMap":28},[33,117385,117386,117388,117390,117392,117394,117396,117398],{"class":35,"line":36},[33,117387,16934],{"class":39},[33,117389,116259],{"class":43},[33,117391,133],{"class":47},[33,117393,115742],{"class":43},[33,117395,2975],{"class":47},[33,117397,116268],{"class":43},[33,117399,366],{"class":47},[19,117401,117402],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117404,117405],{},"初始化模型：",[23,117407,117409],{"className":25,"code":117408,"language":27,"meta":28,"style":28},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[30,117410,117411,117425],{"__ignoreMap":28},[33,117412,117413,117415,117417,117419,117421,117423],{"class":35,"line":36},[33,117414,33054],{"class":72},[33,117416,116319],{"class":47},[33,117418,57],{"class":39},[33,117420,103618],{"class":47},[33,117422,103520],{"class":72},[33,117424,226],{"class":47},[33,117426,117427,117429,117431,117433,117435,117437],{"class":35,"line":51},[33,117428,33054],{"class":72},[33,117430,116334],{"class":47},[33,117432,57],{"class":39},[33,117434,116339],{"class":47},[33,117436,33054],{"class":72},[33,117438,116344],{"class":47},[19,117440,117441,117442,117444],{},"这和前面章节一样，只是现在放到了类的 ",[30,117443,33060],{}," 里。",[19,117446,117447],{},"缓存 site ID：",[23,117449,117451],{"className":25,"code":117450,"language":27,"meta":28,"style":28},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[30,117452,117453,117467],{"__ignoreMap":28},[33,117454,117455,117457,117459,117461,117463,117465],{"class":35,"line":36},[33,117456,33054],{"class":72},[33,117458,116355],{"class":47},[33,117460,57],{"class":39},[33,117462,116360],{"class":47},[33,117464,91762],{"class":72},[33,117466,226],{"class":47},[33,117468,117469,117471,117473,117475,117477,117479],{"class":35,"line":51},[33,117470,33054],{"class":72},[33,117472,116376],{"class":47},[33,117474,57],{"class":39},[33,117476,116360],{"class":47},[33,117478,91762],{"class":72},[33,117480,226],{"class":47},[19,117482,117483],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117485,117486],{},"reset：",[23,117488,117490],{"className":25,"code":117489,"language":27,"meta":28,"style":28},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[30,117491,117492],{"__ignoreMap":28},[33,117493,117494,117496,117498,117500,117502,117504,117506,117508,117510,117512,117514,117516,117518,117520,117522,117524,117526],{"class":35,"line":36},[33,117495,40],{"class":39},[33,117497,116724],{"class":43},[33,117499,116727],{"class":47},[33,117501,657],{"class":39},[33,117503,116732],{"class":47},[33,117505,2436],{"class":72},[33,117507,27348],{"class":39},[33,117509,602],{"class":72},[33,117511,15804],{"class":39},[33,117513,602],{"class":72},[33,117515,116745],{"class":47},[33,117517,116748],{"class":72},[33,117519,27348],{"class":39},[33,117521,602],{"class":72},[33,117523,15804],{"class":39},[33,117525,602],{"class":72},[33,117527,366],{"class":47},[19,117529,117530,117532],{},[30,117531,72271],{}," 做四件事：",[328,117534,117535,117538,117541,117544],{},[331,117536,117537],{},"设置随机种子。",[331,117539,117540],{},"重置 MuJoCo data。",[331,117542,117543],{},"随机初始化关节角。",[331,117545,117546],{},"返回初始观测和 info。",[19,117548,117549],{},"step：",[23,117551,117553],{"className":25,"code":117552,"language":27,"meta":28,"style":28},"def step(self, action):\n",[30,117554,117555],{"__ignoreMap":28},[33,117556,117557,117559,117561],{"class":35,"line":36},[33,117558,40],{"class":39},[33,117560,116889],{"class":43},[33,117562,116892],{"class":47},[19,117564,117565,117567],{},[30,117566,109337],{}," 做六件事：",[328,117569,117570,117573,117579,117582,117585,117588],{},[331,117571,117572],{},"检查并裁剪 action。",[331,117574,117575,117576,30622],{},"写入 ",[30,117577,117578],{},"self.data.ctrl",[331,117580,117581],{},"连续推进若干个 MuJoCo 物理步。",[331,117583,117584],{},"计算新观测。",[331,117586,117587],{},"计算奖励和结束条件。",[331,117589,117590],{},"返回 Gymnasium 标准五元组。",[631,117592,103913],{"id":103913},[23,117594,117596],{"className":25,"code":117595,"language":27,"meta":28,"style":28},"import gymnasium as gym\n",[30,117597,117598],{"__ignoreMap":28},[33,117599,117600,117602,117604,117606],{"class":35,"line":36},[33,117601,32627],{"class":39},[33,117603,116097],{"class":47},[33,117605,33613],{"class":39},[33,117607,116102],{"class":47},[19,117609,117610,117611,117613,117614,117617],{},"导入 Gymnasium，并起别名 ",[30,117612,115742],{},"。后面写 ",[30,117615,117616],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[23,117619,117621],{"className":25,"code":117620,"language":27,"meta":28,"style":28},"from gymnasium import spaces\n",[30,117622,117623],{"__ignoreMap":28},[33,117624,117625,117627,117629,117631],{"class":35,"line":36},[33,117626,32970],{"class":39},[33,117628,116097],{"class":47},[33,117630,32627],{"class":39},[33,117632,116129],{"class":47},[19,117634,117635,117636,117639],{},"导入空间定义工具。",[30,117637,117638],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[23,117641,117642],{"className":25,"code":117381,"language":27,"meta":28,"style":28},[30,117643,117644],{"__ignoreMap":28},[33,117645,117646,117648,117650,117652,117654,117656,117658],{"class":35,"line":36},[33,117647,16934],{"class":39},[33,117649,116259],{"class":43},[33,117651,133],{"class":47},[33,117653,115742],{"class":43},[33,117655,2975],{"class":47},[33,117657,116268],{"class":43},[33,117659,366],{"class":47},[19,117661,117662,117663,117666,117667,117669,117670,1958,117672,117674],{},"定义一个类，名字叫 ",[30,117664,117665],{},"ReacherEnv","。括号里的 ",[30,117668,117616],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[30,117671,72271],{},[30,117673,109337],{}," 这两个核心方法。",[23,117676,117678],{"className":25,"code":117677,"language":27,"meta":28,"style":28},"metadata = {\"render_modes\": []}\n",[30,117679,117680],{"__ignoreMap":28},[33,117681,117682,117685,117687,117689,117691],{"class":35,"line":36},[33,117683,117684],{"class":47},"metadata ",[33,117686,57],{"class":39},[33,117688,965],{"class":47},[33,117690,116282],{"class":60},[33,117692,116285],{"class":47},[19,117694,117695],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[23,117697,117699],{"className":25,"code":117698,"language":27,"meta":28,"style":28},"def __init__(self) -> None:\n",[30,117700,117701],{"__ignoreMap":28},[33,117702,117703,117705,117707,117709,117711],{"class":35,"line":36},[33,117704,40],{"class":39},[33,117706,33035],{"class":72},[33,117708,116298],{"class":47},[33,117710,586],{"class":72},[33,117712,605],{"class":47},[19,117714,117715,117717,117718,30622],{},[30,117716,33060],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[30,117719,117720],{},"env = ReacherEnv()",[23,117722,117724],{"className":25,"code":117723,"language":27,"meta":28,"style":28},"super().__init__()\n",[30,117725,117726],{"__ignoreMap":28},[33,117727,117728,117731,117733,117735],{"class":35,"line":36},[33,117729,117730],{"class":72},"super",[33,117732,19499],{"class":47},[33,117734,33060],{"class":72},[33,117736,4235],{"class":47},[19,117738,117739,117740,117742],{},"调用父类 ",[30,117741,117616],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[23,117744,117745],{"className":25,"code":117408,"language":27,"meta":28,"style":28},[30,117746,117747,117761],{"__ignoreMap":28},[33,117748,117749,117751,117753,117755,117757,117759],{"class":35,"line":36},[33,117750,33054],{"class":72},[33,117752,116319],{"class":47},[33,117754,57],{"class":39},[33,117756,103618],{"class":47},[33,117758,103520],{"class":72},[33,117760,226],{"class":47},[33,117762,117763,117765,117767,117769,117771,117773],{"class":35,"line":51},[33,117764,33054],{"class":72},[33,117766,116334],{"class":47},[33,117768,57],{"class":39},[33,117770,116339],{"class":47},[33,117772,33054],{"class":72},[33,117774,116344],{"class":47},[19,117776,117777,117778,117780,117781,1958,117784,117787],{},"把 MuJoCo 模型和状态保存到 ",[30,117779,33054],{}," 上。",[30,117782,117783],{},"self.model",[30,117785,117786],{},"self.data"," 表示这个环境对象自己的模型和状态。",[23,117789,117790],{"className":25,"code":117450,"language":27,"meta":28,"style":28},[30,117791,117792,117806],{"__ignoreMap":28},[33,117793,117794,117796,117798,117800,117802,117804],{"class":35,"line":36},[33,117795,33054],{"class":72},[33,117797,116355],{"class":47},[33,117799,57],{"class":39},[33,117801,116360],{"class":47},[33,117803,91762],{"class":72},[33,117805,226],{"class":47},[33,117807,117808,117810,117812,117814,117816,117818],{"class":35,"line":51},[33,117809,33054],{"class":72},[33,117811,116376],{"class":47},[33,117813,57],{"class":39},[33,117815,116360],{"class":47},[33,117817,91762],{"class":72},[33,117819,226],{"class":47},[19,117821,117822,117823,1958,117826,117829],{},"提前查好 tip 和 target 的 site ID。这样 ",[30,117824,117825],{},"_get_obs",[30,117827,117828],{},"_get_reward"," 里就不用每次按名字查找。",[23,117831,117833],{"className":25,"code":117832,"language":27,"meta":28,"style":28},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[30,117834,117835,117845,117855],{"__ignoreMap":28},[33,117836,117837,117839,117841,117843],{"class":35,"line":36},[33,117838,33054],{"class":72},[33,117840,116069],{"class":47},[33,117842,57],{"class":39},[33,117844,56646],{"class":72},[33,117846,117847,117849,117851,117853],{"class":35,"line":51},[33,117848,33054],{"class":72},[33,117850,116448],{"class":47},[33,117852,57],{"class":39},[33,117854,116453],{"class":72},[33,117856,117857,117859,117861,117863],{"class":35,"line":64},[33,117858,33054],{"class":72},[33,117860,115908],{"class":47},[33,117862,57],{"class":39},[33,117864,670],{"class":72},[19,117866,117867,117870,117871,117874,117875,117878],{},[30,117868,117869],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[30,117872,117873],{},"max_steps"," 是一个 episode 最多运行多少步。",[30,117876,117877],{},"steps"," 记录当前 episode 已经走了多少步。",[23,117880,117881],{"className":25,"code":115947,"language":27,"meta":28,"style":28},[30,117882,117883],{"__ignoreMap":28},[33,117884,117885,117887,117889,117891,117893,117895,117897,117899,117901,117903,117905,117907,117909,117911,117913,117915,117917,117919,117921,117923],{"class":35,"line":36},[33,117886,33054],{"class":72},[33,117888,115956],{"class":47},[33,117890,57],{"class":39},[33,117892,115961],{"class":47},[33,117894,115964],{"class":289},[33,117896,115967],{"class":39},[33,117898,104608],{"class":72},[33,117900,245],{"class":47},[33,117902,115974],{"class":289},[33,117904,57],{"class":39},[33,117906,104608],{"class":72},[33,117908,245],{"class":47},[33,117910,98170],{"class":289},[33,117912,57],{"class":39},[33,117914,133],{"class":47},[33,117916,725],{"class":72},[33,117918,115991],{"class":47},[33,117920,95708],{"class":289},[33,117922,57],{"class":39},[33,117924,115998],{"class":47},[19,117926,117927,117928,117931,117932,1958,117935,117938],{},"定义动作空间。",[30,117929,117930],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[30,117933,117934],{},"low=-1.0",[30,117936,117937],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[23,117940,117941],{"className":25,"code":116008,"language":27,"meta":28,"style":28},[30,117942,117943],{"__ignoreMap":28},[33,117944,117945,117947,117949,117951,117953,117955,117957,117959,117961,117963,117965,117967,117969,117971,117973,117975,117977,117979],{"class":35,"line":36},[33,117946,33054],{"class":72},[33,117948,116017],{"class":47},[33,117950,57],{"class":39},[33,117952,115961],{"class":47},[33,117954,115964],{"class":289},[33,117956,115967],{"class":39},[33,117958,116028],{"class":47},[33,117960,115974],{"class":289},[33,117962,57],{"class":39},[33,117964,116028],{"class":47},[33,117966,98170],{"class":289},[33,117968,57],{"class":39},[33,117970,133],{"class":47},[33,117972,1279],{"class":72},[33,117974,115991],{"class":47},[33,117976,95708],{"class":289},[33,117978,57],{"class":39},[33,117980,115998],{"class":47},[19,117982,117983,117984,117987,117988,117991],{},"定义观测空间。",[30,117985,117986],{},"shape=(10,)"," 表示观测是 10 个数。",[30,117989,117990],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[23,117993,117995],{"className":25,"code":117994,"language":27,"meta":28,"style":28},"def _get_obs(self) -> np.ndarray:\n",[30,117996,117997],{"__ignoreMap":28},[33,117998,117999,118001,118003],{"class":35,"line":36},[33,118000,40],{"class":39},[33,118002,116558],{"class":43},[33,118004,116561],{"class":47},[19,118006,118007,118008,118010],{},"定义内部函数，用来生成观测。函数名前面的 ",[30,118009,3398],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[23,118012,118014],{"className":25,"code":118013,"language":27,"meta":28,"style":28},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[30,118015,118016,118030],{"__ignoreMap":28},[33,118017,118018,118020,118022,118024,118026,118028],{"class":35,"line":36},[33,118019,113771],{"class":47},[33,118021,57],{"class":39},[33,118023,41098],{"class":72},[33,118025,116572],{"class":47},[33,118027,33054],{"class":72},[33,118029,116577],{"class":47},[33,118031,118032,118034,118036,118038,118040,118042],{"class":35,"line":51},[33,118033,113781],{"class":47},[33,118035,57],{"class":39},[33,118037,41098],{"class":72},[33,118039,116572],{"class":47},[33,118041,33054],{"class":72},[33,118043,116592],{"class":47},[19,118045,118046],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[23,118048,118050],{"className":25,"code":118049,"language":27,"meta":28,"style":28},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[30,118051,118052,118068],{"__ignoreMap":28},[33,118053,118054,118056,118058,118060,118062,118064,118066],{"class":35,"line":36},[33,118055,113057],{"class":47},[33,118057,57],{"class":39},[33,118059,116601],{"class":47},[33,118061,33054],{"class":72},[33,118063,116606],{"class":47},[33,118065,33054],{"class":72},[33,118067,116611],{"class":47},[33,118069,118070,118072],{"class":35,"line":51},[33,118071,19284],{"class":39},[33,118073,116618],{"class":47},[19,118075,118076,118077,118080,118081,118083],{},"拼接观测，并转换成 ",[30,118078,118079],{},"float32","。很多强化学习库默认使用 ",[30,118082,118079],{},"，所以这里主动转换。",[23,118085,118086],{"className":25,"code":117489,"language":27,"meta":28,"style":28},[30,118087,118088],{"__ignoreMap":28},[33,118089,118090,118092,118094,118096,118098,118100,118102,118104,118106,118108,118110,118112,118114,118116,118118,118120,118122],{"class":35,"line":36},[33,118091,40],{"class":39},[33,118093,116724],{"class":43},[33,118095,116727],{"class":47},[33,118097,657],{"class":39},[33,118099,116732],{"class":47},[33,118101,2436],{"class":72},[33,118103,27348],{"class":39},[33,118105,602],{"class":72},[33,118107,15804],{"class":39},[33,118109,602],{"class":72},[33,118111,116745],{"class":47},[33,118113,116748],{"class":72},[33,118115,27348],{"class":39},[33,118117,602],{"class":72},[33,118119,15804],{"class":39},[33,118121,602],{"class":72},[33,118123,366],{"class":47},[19,118125,118126,118127,118129,118130,118133],{},"定义 reset。",[30,118128,116768],{}," 用来控制随机数，保证实验可以复现。",[30,118131,118132],{},"options"," 用来接收额外配置，本章暂时不用。",[23,118135,118137],{"className":25,"code":118136,"language":27,"meta":28,"style":28},"super().reset(seed=seed)\n",[30,118138,118139],{"__ignoreMap":28},[33,118140,118141,118143,118145,118147,118149],{"class":35,"line":36},[33,118142,117730],{"class":72},[33,118144,116765],{"class":47},[33,118146,116768],{"class":289},[33,118148,57],{"class":39},[33,118150,116773],{"class":47},[19,118152,118153,118154,118157],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[30,118155,118156],{},"self.np_random"," 生成可复现的随机数。",[23,118159,118161],{"className":25,"code":118160,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(self.model, self.data)\n",[30,118162,118163],{"__ignoreMap":28},[33,118164,118165,118168,118170,118172,118174],{"class":35,"line":36},[33,118166,118167],{"class":47},"mujoco.mj_resetData(",[33,118169,33054],{"class":72},[33,118171,116783],{"class":47},[33,118173,33054],{"class":72},[33,118175,116788],{"class":47},[19,118177,118178],{},"把 MuJoCo 状态重置到默认状态。",[23,118180,118182],{"className":25,"code":118181,"language":27,"meta":28,"style":28},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[30,118183,118184],{"__ignoreMap":28},[33,118185,118186,118188,118190,118192,118194,118196,118198,118200,118202,118204,118206,118208,118210,118212,118214,118216,118218],{"class":35,"line":36},[33,118187,33054],{"class":72},[33,118189,116799],{"class":47},[33,118191,57],{"class":39},[33,118193,41098],{"class":72},[33,118195,116806],{"class":47},[33,118197,115964],{"class":289},[33,118199,115967],{"class":39},[33,118201,88419],{"class":72},[33,118203,245],{"class":47},[33,118205,115974],{"class":289},[33,118207,57],{"class":39},[33,118209,88419],{"class":72},[33,118211,245],{"class":47},[33,118213,33725],{"class":289},[33,118215,57],{"class":39},[33,118217,33054],{"class":72},[33,118219,116831],{"class":47},[19,118221,117543,118222,118225,118226,118229,118230,118232],{},[30,118223,118224],{},"[:]"," 表示修改整个数组。",[30,118227,118228],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[30,118231,104355],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[23,118234,118236],{"className":25,"code":118235,"language":27,"meta":28,"style":28},"self.data.qvel[:] = 0.0\n",[30,118237,118238],{"__ignoreMap":28},[33,118239,118240,118242,118244,118246],{"class":35,"line":36},[33,118241,33054],{"class":72},[33,118243,116838],{"class":47},[33,118245,57],{"class":39},[33,118247,106964],{"class":72},[19,118249,118250],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[23,118252,118254],{"className":25,"code":118253,"language":27,"meta":28,"style":28},"self.steps = 0\nreturn self._get_obs(), {}\n",[30,118255,118256,118266],{"__ignoreMap":28},[33,118257,118258,118260,118262,118264],{"class":35,"line":36},[33,118259,33054],{"class":72},[33,118261,115908],{"class":47},[33,118263,57],{"class":39},[33,118265,670],{"class":72},[33,118267,118268,118270,118272],{"class":35,"line":51},[33,118269,19284],{"class":39},[33,118271,41098],{"class":72},[33,118273,116878],{"class":47},[19,118275,118276],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[23,118278,118279],{"className":25,"code":117552,"language":27,"meta":28,"style":28},[30,118280,118281],{"__ignoreMap":28},[33,118282,118283,118285,118287],{"class":35,"line":36},[33,118284,40],{"class":39},[33,118286,116889],{"class":43},[33,118288,116892],{"class":47},[19,118290,118291],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[23,118293,118295],{"className":25,"code":118294,"language":27,"meta":28,"style":28},"action = np.asarray(action, dtype=np.float32)\n",[30,118296,118297],{"__ignoreMap":28},[33,118298,118299,118301,118303,118305,118307,118309],{"class":35,"line":36},[33,118300,109645],{"class":47},[33,118302,57],{"class":39},[33,118304,116901],{"class":47},[33,118306,95708],{"class":289},[33,118308,57],{"class":39},[33,118310,115998],{"class":47},[19,118312,118313,118314,30622],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[30,118315,118079],{},[23,118317,118319],{"className":25,"code":118318,"language":27,"meta":28,"style":28},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[30,118320,118321],{"__ignoreMap":28},[33,118322,118323,118325,118327,118329,118331,118333,118335],{"class":35,"line":36},[33,118324,109645],{"class":47},[33,118326,57],{"class":39},[33,118328,109650],{"class":47},[33,118330,33054],{"class":72},[33,118332,116920],{"class":47},[33,118334,33054],{"class":72},[33,118336,116925],{"class":47},[19,118338,118339],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[23,118341,118343],{"className":25,"code":118342,"language":27,"meta":28,"style":28},"self.data.ctrl[:] = action\n",[30,118344,118345],{"__ignoreMap":28},[33,118346,118347,118349,118351,118353],{"class":35,"line":36},[33,118348,33054],{"class":72},[33,118350,116936],{"class":47},[33,118352,57],{"class":39},[33,118354,109673],{"class":47},[19,118356,118357],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[23,118359,118361],{"className":25,"code":118360,"language":27,"meta":28,"style":28},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[30,118362,118363,118379],{"__ignoreMap":28},[33,118364,118365,118367,118369,118371,118373,118375,118377],{"class":35,"line":36},[33,118366,5282],{"class":39},[33,118368,103707],{"class":47},[33,118370,681],{"class":39},[33,118372,34670],{"class":72},[33,118374,133],{"class":47},[33,118376,33054],{"class":72},[33,118378,116957],{"class":47},[33,118380,118381,118384,118386,118388,118390],{"class":35,"line":51},[33,118382,118383],{"class":47},"    mujoco.mj_step(",[33,118385,33054],{"class":72},[33,118387,116783],{"class":47},[33,118389,33054],{"class":72},[33,118391,116788],{"class":47},[19,118393,118394,118395,118398,118399,118401,118402,30622],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[30,118396,118397],{},"frame_skip=5","，所以外部调用一次 ",[30,118400,116079],{},"，内部实际执行 5 次 ",[30,118403,103421],{},[23,118405,118407],{"className":25,"code":118406,"language":27,"meta":28,"style":28},"self.steps += 1\n",[30,118408,118409],{"__ignoreMap":28},[33,118410,118411,118413,118415,118417],{"class":35,"line":36},[33,118412,33054],{"class":72},[33,118414,115908],{"class":47},[33,118416,692],{"class":39},[33,118418,57917],{"class":72},[19,118420,118421],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[23,118423,118425],{"className":25,"code":118424,"language":27,"meta":28,"style":28},"obs = self._get_obs()\nreward = self._get_reward()\n",[30,118426,118427,118437],{"__ignoreMap":28},[33,118428,118429,118431,118433,118435],{"class":35,"line":36},[33,118430,113057],{"class":47},[33,118432,57],{"class":39},[33,118434,41098],{"class":72},[33,118436,116999],{"class":47},[33,118438,118439,118441,118443,118445],{"class":35,"line":51},[33,118440,113208],{"class":47},[33,118442,57],{"class":39},[33,118444,41098],{"class":72},[33,118446,117010],{"class":47},[19,118448,118449],{},"计算新的观测和奖励。",[23,118451,118453],{"className":25,"code":118452,"language":27,"meta":28,"style":28},"dist = float(np.linalg.norm(tip - target))\n",[30,118454,118455],{"__ignoreMap":28},[33,118456,118457,118459,118461,118463,118465,118467],{"class":35,"line":36},[33,118458,113799],{"class":47},[33,118460,57],{"class":39},[33,118462,112000],{"class":72},[33,118464,117053],{"class":47},[33,118466,2949],{"class":39},[33,118468,117058],{"class":47},[19,118470,118471],{},"计算末端到目标的距离，并转换成 Python float。",[23,118473,118474],{"className":25,"code":115879,"language":27,"meta":28,"style":28},[30,118475,118476,118488],{"__ignoreMap":28},[33,118477,118478,118480,118482,118484,118486],{"class":35,"line":36},[33,118479,115886],{"class":47},[33,118481,57],{"class":39},[33,118483,115891],{"class":47},[33,118485,2226],{"class":39},[33,118487,115896],{"class":72},[33,118489,118490,118492,118494,118496,118498,118500,118502],{"class":35,"line":51},[33,118491,115901],{"class":47},[33,118493,57],{"class":39},[33,118495,41098],{"class":72},[33,118497,115908],{"class":47},[33,118499,2175],{"class":39},[33,118501,41098],{"class":72},[33,118503,115915],{"class":47},[19,118505,118506],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[23,118508,118510],{"className":25,"code":118509,"language":27,"meta":28,"style":28},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[30,118511,118512,118524],{"__ignoreMap":28},[33,118513,118514,118516,118518,118520,118522],{"class":35,"line":36},[33,118515,986],{"class":47},[33,118517,57],{"class":39},[33,118519,965],{"class":47},[33,118521,117104],{"class":60},[33,118523,117107],{"class":47},[33,118525,118526,118528],{"class":35,"line":51},[33,118527,19284],{"class":39},[33,118529,117114],{"class":47},[19,118531,118532,118535],{},[30,118533,118534],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[23,118537,118539],{"className":25,"code":118538,"language":27,"meta":28,"style":28},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[30,118540,118541,118550],{"__ignoreMap":28},[33,118542,118543,118546,118548],{"class":35,"line":36},[33,118544,118545],{"class":47},"env ",[33,118547,57],{"class":39},[33,118549,117144],{"class":47},[33,118551,118552,118554,118556,118558,118560,118562,118564],{"class":35,"line":51},[33,118553,115602],{"class":47},[33,118555,57],{"class":39},[33,118557,117154],{"class":47},[33,118559,116768],{"class":289},[33,118561,57],{"class":39},[33,118563,2617],{"class":72},[33,118565,226],{"class":47},[19,118567,118568,118569,118572],{},"创建环境并重置。",[30,118570,118571],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[23,118574,118576],{"className":25,"code":118575,"language":27,"meta":28,"style":28},"action = env.action_space.sample()\n",[30,118577,118578],{"__ignoreMap":28},[33,118579,118580,118582,118584],{"class":35,"line":36},[33,118581,109645],{"class":47},[33,118583,57],{"class":39},[33,118585,117223],{"class":47},[19,118587,118588],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118590,104521],{"id":104520},[19,118592,107687],{},[23,118594,118597],{"className":118595,"code":118596,"language":7436,"meta":28},[7434],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[30,118598,118596],{"__ignoreMap":28},[19,118600,118601],{},"这个环境已经具备强化学习环境的基本结构。",[19,118603,118604],{},"主函数里使用随机动作：",[23,118606,118607],{"className":25,"code":118575,"language":27,"meta":28,"style":28},[30,118608,118609],{"__ignoreMap":28},[33,118610,118611,118613,118615],{"class":35,"line":36},[33,118612,109645],{"class":47},[33,118614,57],{"class":39},[33,118616,117223],{"class":47},[19,118618,118619],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118621,104553],{"id":104552},[328,118623,118624,118627,118633,118642,118651,118660,118666],{},[331,118625,118626],{},"运行程序。",[331,118628,118629,118630,30622],{},"确认 ",[30,118631,118632],{},"obs.shape == (10,)",[331,118634,113384,118635,118638,118639,30622],{},[30,118636,118637],{},"env.action_space","，应类似 ",[30,118640,118641],{},"Box(-1.0, 1.0, (2,), float32)",[331,118643,107788,118644,118647,118648,30622],{},[30,118645,118646],{},"self.max_steps = 10","，确认环境会更快 ",[30,118649,118650],{},"truncated=True",[331,118652,104616,118653,104619,118656,118659],{},[30,118654,118655],{},"terminated = dist \u003C 0.05",[30,118657,118658],{},"dist \u003C 0.2","，观察是否更容易结束。",[331,118661,104616,118662,118665],{},[30,118663,118664],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[331,118667,118668,118669,118671,118672,118675],{},"在 ",[30,118670,118534],{}," 里加入 ",[30,118673,118674],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118677,104658],{"id":104657},[631,118679,118681],{"id":118680},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118683,118684,118685,118687],{},"Gymnasium 的 ",[30,118686,109337],{}," 返回 5 个值:",[23,118689,118691],{"className":25,"code":118690,"language":27,"meta":28,"style":28},"obs, reward, terminated, truncated, info\n",[30,118692,118693],{"__ignoreMap":28},[33,118694,118695],{"class":35,"line":36},[33,118696,118690],{"class":47},[19,118698,118699],{},"不是旧 Gym 的 4 个值。",[631,118701,118703,118706],{"id":118702},"datactrl-action-维度错误",[30,118704,118705],{},"data.ctrl[:] = action"," 维度错误",[19,118708,104728],{},[23,118710,118712],{"className":25,"code":118711,"language":27,"meta":28,"style":28},"print(self.model.nu)\nprint(action.shape)\n",[30,118713,118714,118725],{"__ignoreMap":28},[33,118715,118716,118718,118720,118722],{"class":35,"line":36},[33,118717,122],{"class":72},[33,118719,133],{"class":47},[33,118721,33054],{"class":72},[33,118723,118724],{"class":47},".model.nu)\n",[33,118726,118727,118729],{"class":35,"line":51},[33,118728,122],{"class":72},[33,118730,118731],{"class":47},"(action.shape)\n",[19,118733,118734],{},"两者必须匹配。",[631,118736,118738],{"id":118737},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118740,104667],{},[23,118742,118744],{"className":25,"code":118743,"language":27,"meta":28,"style":28},"mujoco.mj_forward(self.model, self.data)\n",[30,118745,118746],{"__ignoreMap":28},[33,118747,118748,118751,118753,118755,118757],{"class":35,"line":36},[33,118749,118750],{"class":47},"mujoco.mj_forward(",[33,118752,33054],{"class":72},[33,118754,116783],{"class":47},[33,118756,33054],{"class":72},[33,118758,116788],{"class":47},[631,118760,118762,118764],{"id":118761},"observation_space-维度和-obs-不一致",[30,118763,115802],{}," 维度和 obs 不一致",[19,118766,104780],{},[23,118768,118770],{"className":25,"code":118769,"language":27,"meta":28,"style":28},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[30,118771,118772,118782,118789],{"__ignoreMap":28},[33,118773,118774,118776,118778,118780],{"class":35,"line":36},[33,118775,113057],{"class":47},[33,118777,57],{"class":39},[33,118779,41098],{"class":72},[33,118781,116999],{"class":47},[33,118783,118784,118786],{"class":35,"line":51},[33,118785,122],{"class":72},[33,118787,118788],{"class":47},"(obs.shape)\n",[33,118790,118791,118793,118795,118797],{"class":35,"line":64},[33,118792,122],{"class":72},[33,118794,133],{"class":47},[33,118796,33054],{"class":72},[33,118798,118799],{"class":47},".observation_space.shape)\n",[19,118801,118802],{},"两者必须一致。本章观测是：",[23,118804,118807],{"className":118805,"code":118806,"language":7436,"meta":28},[7434],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[30,118808,118806],{"__ignoreMap":28},[631,118810,118812],{"id":118811},"action-超过范围","action 超过范围",[19,118814,118815],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[23,118817,118818],{"className":25,"code":118318,"language":27,"meta":28,"style":28},[30,118819,118820],{"__ignoreMap":28},[33,118821,118822,118824,118826,118828,118830,118832,118834],{"class":35,"line":36},[33,118823,109645],{"class":47},[33,118825,57],{"class":39},[33,118827,109650],{"class":47},[33,118829,33054],{"class":72},[33,118831,116920],{"class":47},[33,118833,33054],{"class":72},[33,118835,116925],{"class":47},[19,118837,118838,118839,30622],{},"这能避免无效动作直接写入 ",[30,118840,103282],{},[631,118842,118844],{"id":118843},"忘记返回-info","忘记返回 info",[19,118846,118684,118847,1958,118849,118851],{},[30,118848,72271],{},[30,118850,109337],{}," 都会返回 info：",[23,118853,118854],{"className":25,"code":115595,"language":27,"meta":28,"style":28},[30,118855,118856,118864],{"__ignoreMap":28},[33,118857,118858,118860,118862],{"class":35,"line":36},[33,118859,115602],{"class":47},[33,118861,57],{"class":39},[33,118863,115607],{"class":47},[33,118865,118866,118868,118870],{"class":35,"line":51},[33,118867,115612],{"class":47},[33,118869,57],{"class":39},[33,118871,115617],{"class":47},[19,118873,118874,118875,30622],{},"即使暂时没有额外信息，也返回 ",[30,118876,34685],{},[14,118878,118880],{"id":118879},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118882,118883],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[328,118885,118886,118889,118892,118895,118898,118901],{},[331,118887,118888],{},"更稳定的 reward。",[331,118890,118891],{},"合理的 episode 长度。",[331,118893,118894],{},"可重复的随机目标采样。",[331,118896,118897],{},"render 接口。",[331,118899,118900],{},"环境注册代码。",[331,118902,118903],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118905,118906],{},"如果只是自己写训练循环，最小形式是：",[23,118908,118910],{"className":25,"code":118909,"language":27,"meta":28,"style":28},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[30,118911,118912,118920,118936,118940,118956,118965,118974,118984],{"__ignoreMap":28},[33,118913,118914,118916,118918],{"class":35,"line":36},[33,118915,118545],{"class":47},[33,118917,57],{"class":39},[33,118919,117144],{"class":47},[33,118921,118922,118924,118926,118928,118930,118932,118934],{"class":35,"line":51},[33,118923,115602],{"class":47},[33,118925,57],{"class":39},[33,118927,117154],{"class":47},[33,118929,116768],{"class":289},[33,118931,57],{"class":39},[33,118933,2617],{"class":72},[33,118935,226],{"class":47},[33,118937,118938],{"class":35,"line":64},[33,118939,100],{"emptyLinePlaceholder":99},[33,118941,118942,118944,118946,118948,118950,118952,118954],{"class":35,"line":76},[33,118943,5282],{"class":39},[33,118945,103707],{"class":47},[33,118947,681],{"class":39},[33,118949,34670],{"class":72},[33,118951,133],{"class":47},[33,118953,8656],{"class":72},[33,118955,366],{"class":47},[33,118957,118958,118961,118963],{"class":35,"line":87},[33,118959,118960],{"class":47},"    action ",[33,118962,57],{"class":39},[33,118964,117223],{"class":47},[33,118966,118967,118970,118972],{"class":35,"line":96},[33,118968,118969],{"class":47},"    obs, reward, terminated, truncated, info ",[33,118971,57],{"class":39},[33,118973,115617],{"class":47},[33,118975,118976,118978,118980,118982],{"class":35,"line":103},[33,118977,593],{"class":39},[33,118979,117289],{"class":47},[33,118981,117292],{"class":39},[33,118983,117295],{"class":47},[33,118985,118986,118989,118991],{"class":35,"line":108},[33,118987,118988],{"class":47},"        obs, info ",[33,118990,57],{"class":39},[33,118992,115607],{"class":47},[14,118994,118996],{"id":118995},"_9本章小结","9.本章小结",[19,118998,118999],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[23,119001,119004],{"className":119002,"code":119003,"language":7436,"meta":28},[7434],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[30,119005,119003],{"__ignoreMap":28},[19,119007,119008],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2331,119010,119011],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":119013},[119014,119015,119016,119023,119027,119028,119029,119039,119040],{"id":102853,"depth":51,"text":102854},{"id":102976,"depth":51,"text":102977},{"id":103250,"depth":51,"text":103251,"children":119017},[119018,119020,119022],{"id":115826,"depth":64,"text":119019},"terminated 和 truncated 的区别",{"id":115929,"depth":64,"text":119021},"observation_space 和 action_space",{"id":116056,"depth":64,"text":116057},{"id":103458,"depth":51,"text":103459,"children":119024},[119025,119026],{"id":103777,"depth":64,"text":103777},{"id":103913,"depth":64,"text":103913},{"id":104520,"depth":51,"text":104521},{"id":104552,"depth":51,"text":104553},{"id":104657,"depth":51,"text":104658,"children":119030},[119031,119032,119034,119035,119037,119038],{"id":118680,"depth":64,"text":118681},{"id":118702,"depth":64,"text":119033},"data.ctrl[:] = action 维度错误",{"id":118737,"depth":64,"text":118738},{"id":118761,"depth":64,"text":119036},"observation_space 维度和 obs 不一致",{"id":118811,"depth":64,"text":118812},{"id":118843,"depth":64,"text":118844},{"id":118879,"depth":51,"text":118880},{"id":118995,"depth":51,"text":118996},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115579,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":119047,"title":119048,"body":119049,"description":119472,"extension":2360,"meta":119473,"navigation":99,"path":119474,"seo":119475,"stem":119476,"__hash__":119477},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":119050,"toc":119462},[119051,119055,119058,119061,119081,119087,119093,119103,119106,119109,119129,119132,119136,119139,119145,119148,119162,119165,119168,119242,119245,119251,119254,119277,119280,119330,119333,119339,119342,119345,119348,119367,119370,119376,119379,119382,119385,119405,119408,119411,119414,119459],[10,119052,119054],{"id":119053},"mujoco-学习","MuJoCo 学习",[19,119056,119057],{},"初版",[19,119059,119060],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[328,119062,119063,119066,119069,119078],{},[331,119064,119065],{},"MuJoCo 模型文件在描述什么。",[331,119067,119068],{},"Python 代码怎样读取和推进仿真。",[331,119070,119071,2638,119073,2638,119075,119077],{},[30,119072,106234],{},[30,119074,106564],{},[30,119076,106567],{}," 这些数组为什么重要。",[331,119079,119080],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,119082,119083,119084,119086],{},"默认环境为 Fedora 44、Python >= 3.10、",[30,119085,103233],{}," 官方 Python bindings。",[19,119088,119089,119090,119092],{},"注意：本文禁止使用 ",[30,119091,103219],{},"。所有示例均使用：",[23,119094,119095],{"className":25,"code":103783,"language":27,"meta":28,"style":28},[30,119096,119097],{"__ignoreMap":28},[33,119098,119099,119101],{"class":35,"line":36},[33,119100,32627],{"class":39},[33,119102,103507],{"class":47},[14,119104,119105],{"id":119105},"适合谁阅读",[19,119107,119108],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[328,119110,119111,119114,119117,119120],{},[331,119112,119113],{},"没学过 MuJoCo，只会一点 Python。",[331,119115,119116],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[331,119118,119119],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[331,119121,119122,119123,119125,119126,119128],{},"以前接触过 ",[30,119124,103219],{},"，现在想迁移到官方 ",[30,119127,103227],{}," Python bindings。",[19,119130,119131],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,119133,119135],{"id":119134},"mujoco-到底是什么","MuJoCo 到底是什么",[19,119137,119138],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[23,119140,119143],{"className":119141,"code":119142,"language":7436,"meta":28},[7434],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[30,119144,119142],{"__ignoreMap":28},[19,119146,119147],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[328,119149,119150,119153,119156,119159],{},[331,119151,119152],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[331,119154,119155],{},"快速测试控制算法，不必一开始就上真实机器人。",[331,119157,119158],{},"生成强化学习环境。",[331,119160,119161],{},"采集状态、动作、图像、奖励等训练数据。",[14,119163,119164],{"id":119164},"学习前的心智模型",[19,119166,119167],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2563,119169,119170,119182],{},[2566,119171,119172],{},[2569,119173,119174,119177,119180],{},[2572,119175,119176],{"align":25974},"部分",[2572,119178,119179],{"align":25974},"负责什么",[2572,119181,23425],{"align":25974},[2610,119183,119184,119195,119207,119219,119231],{},[2569,119185,119186,119189,119192],{},[2615,119187,119188],{"align":25974},"MJCF XML",[2615,119190,119191],{"align":25974},"定义世界和机器人结构",[2615,119193,119194],{"align":25974},"地面、盒子、关节、电机、摄像头",[2569,119196,119197,119201,119204],{},[2615,119198,119199],{"align":25974},[30,119200,102916],{},[2615,119202,119203],{"align":25974},"编译后的静态模型",[2615,119205,119206],{"align":25974},"有几个关节、有几个电机、时间步长是多少",[2569,119208,119209,119213,119216],{},[2615,119210,119211],{"align":25974},[30,119212,102926],{},[2615,119214,119215],{"align":25974},"运行中的动态状态",[2615,119217,119218],{"align":25974},"当前时间、位置、速度、电机输入",[2569,119220,119221,119225,119228],{},[2615,119222,119223],{"align":25974},[30,119224,103421],{},[2615,119226,119227],{"align":25974},"推进一步物理仿真",[2615,119229,119230],{"align":25974},"根据重力、力、碰撞更新状态",[2569,119232,119233,119236,119239],{},[2615,119234,119235],{"align":25974},"Viewer \u002F Renderer",[2615,119237,119238],{"align":25974},"把仿真显示出来",[2615,119240,119241],{"align":25974},"打开窗口或保存图片",[19,119243,119244],{},"一句话总结：",[23,119246,119249],{"className":119247,"code":119248,"language":7436,"meta":28},[7434],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[30,119250,119248],{"__ignoreMap":28},[19,119252,119253],{},"参考来源：",[3413,119255,119256,119263,119270],{},[331,119257,119258,119259],{},"MuJoCo Python 官方文档：",[2663,119260,119261],{"href":119261,"rel":119262},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[26103],[331,119264,119265,119266],{},"MuJoCo XML Reference：",[2663,119267,119268],{"href":119268,"rel":119269},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[26103],[331,119271,119272,119273],{},"MuJoCo Overview：",[2663,119274,119275],{"href":119275,"rel":119276},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[26103],[14,119278,119279],{"id":119279},"章节目录",[328,119281,119282,119288,119294,119300,119306,119312,119318,119324],{},[331,119283,119284],{},[2663,119285,119287],{"href":119286},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[331,119289,119290],{},[2663,119291,119293],{"href":119292},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[331,119295,119296],{},[2663,119297,119299],{"href":119298},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[331,119301,119302],{},[2663,119303,119305],{"href":119304},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[331,119307,119308],{},[2663,119309,119311],{"href":119310},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[331,119313,119314],{},[2663,119315,119317],{"href":119316},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[331,119319,119320],{},[2663,119321,119323],{"href":119322},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[331,119325,119326],{},[2663,119327,119329],{"href":119328},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119331,119332],{"id":119332},"推荐学习路线",[23,119334,119337],{"className":119335,"code":119336,"language":7436,"meta":28},[7434],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[30,119338,119336],{"__ignoreMap":28},[19,119340,119341],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119343,119344],{"id":119344},"建议的目录结构",[19,119346,119347],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[23,119349,119351],{"className":26060,"code":119350,"language":26062,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[30,119352,119353,119361],{"__ignoreMap":28},[33,119354,119355,119357,119359],{"class":35,"line":36},[33,119356,103472],{"class":43},[33,119358,31453],{"class":72},[33,119360,103477],{"class":60},[33,119362,119363,119365],{"class":35,"line":51},[33,119364,103482],{"class":72},[33,119366,103477],{"class":60},[19,119368,119369],{},"每一章的代码都单独保存：",[23,119371,119374],{"className":119372,"code":119373,"language":7436,"meta":28},[7434],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[30,119375,119373],{"__ignoreMap":28},[19,119377,119378],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119380,119381],{"id":119381},"学习方法",[19,119383,119384],{},"每章建议按这个顺序操作：",[328,119386,119387,119390,119393,119396,119399,119402],{},[331,119388,119389],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[331,119391,119392],{},"复制最小可运行代码，保存成指定文件。",[331,119394,119395],{},"运行代码，确认没有报错。",[331,119397,119398],{},"对照“运行结果说明”理解输出。",[331,119400,119401],{},"做“验证步骤”，主动改一两个参数。",[331,119403,119404],{},"遇到报错先看“常见错误与解决方案”。",[19,119406,119407],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119409,119410],{"id":119410},"全局排错顺序",[19,119412,119413],{},"遇到问题时，按下面顺序查：",[328,119415,119416,119422,119428,119433,119436,119439,119446,119456],{},[331,119417,119418,119419],{},"Python 环境是否激活：",[30,119420,119421],{},"which python",[331,119423,119424,119425],{},"MuJoCo 是否能导入：",[30,119426,119427],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[331,119429,119430,119431],{},"是否误装了 ",[30,119432,103219],{},[331,119434,119435],{},"XML 标签是否闭合、属性是否拼写正确",[331,119437,119438],{},"actuator 引用的 joint 名字是否存在",[331,119440,119441,119443,119444],{},[30,119442,103282],{}," 的长度是否等于 ",[30,119445,104363],{},[331,119447,107788,119448,84748,119450,119452,119453],{},[30,119449,106234],{},[30,119451,106564],{}," 后是否调用了 ",[30,119454,119455],{},"mujoco.mj_forward",[331,119457,119458],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2331,119460,119461],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":119463},[119464,119465,119466,119467,119468,119469,119470,119471],{"id":119105,"depth":51,"text":119105},{"id":119134,"depth":51,"text":119135},{"id":119164,"depth":51,"text":119164},{"id":119279,"depth":51,"text":119279},{"id":119332,"depth":51,"text":119332},{"id":119344,"depth":51,"text":119344},{"id":119381,"depth":51,"text":119381},{"id":119410,"depth":51,"text":119410},"仿真搭建。",{"category":25616},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":119048,"description":119472},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119479,"title":119480,"body":119481,"description":2359,"extension":2360,"meta":119936,"navigation":99,"path":119937,"seo":119938,"stem":119939,"__hash__":119940},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119482,"toc":119934},[119483,119486,119489,119495,119931],[10,119484,119480],{"id":119485},"_1-最常用的基本操作更新",[19,119487,119488],{},"装linux系统教程：",[19,119490,119491],{},[2663,119492,119493],{"href":119493,"rel":119494},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[26103],[23,119496,119500],{"className":119497,"code":119498,"language":119499,"meta":28,"style":28},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[30,119501,119502,119507,119512,119521,119526,119535,119540,119560,119565,119576,119581,119590,119595,119623,119628,119647,119652,119671,119675,119680,119696,119700,119705,119735,119739,119744,119760,119764,119769,119784,119788,119793,119809,119813,119818,119830,119842,119846,119851,119868,119872,119877,119895,119899,119904,119913,119917,119922],{"__ignoreMap":28},[33,119503,119504],{"class":35,"line":36},[33,119505,119506],{"class":2487},"#更新相关的知识\n",[33,119508,119509],{"class":35,"line":51},[33,119510,119511],{"class":2487},"# 更新软件包列表（从服务器获取最新软件信息）\n",[33,119513,119514,119516,119519],{"class":35,"line":64},[33,119515,26815],{"class":43},[33,119517,119518],{"class":60}," apt",[33,119520,28480],{"class":60},[33,119522,119523],{"class":35,"line":76},[33,119524,119525],{"class":2487},"# 升级所有可更新的软件包（不删除旧包）\n",[33,119527,119528,119530,119532],{"class":35,"line":87},[33,119529,26815],{"class":43},[33,119531,119518],{"class":60},[33,119533,119534],{"class":60}," upgrade\n",[33,119536,119537],{"class":35,"line":96},[33,119538,119539],{"class":2487},"#更新和升级软件包\n",[33,119541,119542,119544,119546,119549,119551,119553,119555,119558],{"class":35,"line":103},[33,119543,26815],{"class":43},[33,119545,119518],{"class":60},[33,119547,119548],{"class":60}," update",[33,119550,28428],{"class":47},[33,119552,26815],{"class":43},[33,119554,119518],{"class":60},[33,119556,119557],{"class":60}," upgrade",[33,119559,103188],{"class":72},[33,119561,119562],{"class":35,"line":108},[33,119563,119564],{"class":2487},"#列出可更新的软件包及版本信息\n",[33,119566,119567,119570,119573],{"class":35,"line":119},[33,119568,119569],{"class":43},"apt",[33,119571,119572],{"class":60}," list",[33,119574,119575],{"class":72}," --upgradable\n",[33,119577,119578],{"class":35,"line":128},[33,119579,119580],{"class":2487},"#彻底升级（处理依赖关系，可能删除旧包）\n",[33,119582,119583,119585,119587],{"class":35,"line":1753},[33,119584,26815],{"class":43},[33,119586,119518],{"class":60},[33,119588,119589],{"class":60}," full-upgrade\n",[33,119591,119592],{"class":35,"line":1763},[33,119593,119594],{"class":2487},"#设置指定版本\n",[33,119596,119597,119599,119601,119603,119605,119608,119610,119612,119614,119616,119619,119621],{"class":35,"line":1775},[33,119598,26815],{"class":43},[33,119600,119518],{"class":60},[33,119602,26072],{"class":60},[33,119604,31139],{"class":39},[33,119606,119607],{"class":60},"package_nam",[33,119609,2502],{"class":47},[33,119611,3367],{"class":39},[33,119613,57],{"class":60},[33,119615,2226],{"class":39},[33,119617,119618],{"class":60},"version_numbe",[33,119620,3085],{"class":47},[33,119622,53529],{"class":39},[33,119624,119625],{"class":35,"line":1780},[33,119626,119627],{"class":2487},"#只安装软件包不升级\n",[33,119629,119630,119632,119634,119636,119638,119640,119642,119644],{"class":35,"line":1785},[33,119631,26815],{"class":43},[33,119633,119518],{"class":60},[33,119635,26072],{"class":60},[33,119637,31139],{"class":39},[33,119639,119607],{"class":60},[33,119641,2502],{"class":47},[33,119643,3367],{"class":39},[33,119645,119646],{"class":72}," --no-upgrade\n",[33,119648,119649],{"class":35,"line":1940},[33,119650,119651],{"class":2487},"#只升级，不存在就不安装\n",[33,119653,119654,119656,119658,119660,119662,119664,119666,119668],{"class":35,"line":2183},[33,119655,26815],{"class":43},[33,119657,119518],{"class":60},[33,119659,26072],{"class":60},[33,119661,31139],{"class":39},[33,119663,119607],{"class":60},[33,119665,2502],{"class":47},[33,119667,3367],{"class":39},[33,119669,119670],{"class":72}," --only-upgrade\n",[33,119672,119673],{"class":35,"line":2208},[33,119674,100],{"emptyLinePlaceholder":99},[33,119676,119677],{"class":35,"line":2234},[33,119678,119679],{"class":2487},"#安装指定的软件命令\n",[33,119681,119682,119684,119686,119688,119690,119692,119694],{"class":35,"line":2239},[33,119683,26815],{"class":43},[33,119685,119518],{"class":60},[33,119687,26072],{"class":60},[33,119689,31139],{"class":39},[33,119691,119607],{"class":60},[33,119693,2502],{"class":47},[33,119695,53529],{"class":39},[33,119697,119698],{"class":35,"line":2247},[33,119699,100],{"emptyLinePlaceholder":99},[33,119701,119702],{"class":35,"line":2255},[33,119703,119704],{"class":2487},"#安装多个软件包\n",[33,119706,119707,119709,119711,119713,119715,119718,119721,119723,119725,119728,119730,119732],{"class":35,"line":3992},[33,119708,26815],{"class":43},[33,119710,119518],{"class":60},[33,119712,26072],{"class":60},[33,119714,31139],{"class":39},[33,119716,119717],{"class":60},"package_",[33,119719,119720],{"class":39},"1>",[33,119722,31139],{"class":39},[33,119724,119717],{"class":60},[33,119726,119727],{"class":39},"2>",[33,119729,31139],{"class":39},[33,119731,119717],{"class":60},[33,119733,119734],{"class":39},"3>\n",[33,119736,119737],{"class":35,"line":4009},[33,119738,100],{"emptyLinePlaceholder":99},[33,119740,119741],{"class":35,"line":4014},[33,119742,119743],{"class":2487},"#更新指定的软件命令\n",[33,119745,119746,119748,119750,119752,119754,119756,119758],{"class":35,"line":4019},[33,119747,26815],{"class":43},[33,119749,119518],{"class":60},[33,119751,119548],{"class":60},[33,119753,31139],{"class":39},[33,119755,119607],{"class":60},[33,119757,2502],{"class":47},[33,119759,53529],{"class":39},[33,119761,119762],{"class":35,"line":4024},[33,119763,100],{"emptyLinePlaceholder":99},[33,119765,119766],{"class":35,"line":4038},[33,119767,119768],{"class":2487},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[33,119770,119771,119773,119776,119778,119780,119782],{"class":35,"line":4043},[33,119772,119569],{"class":43},[33,119774,119775],{"class":60}," show",[33,119777,31139],{"class":39},[33,119779,119607],{"class":60},[33,119781,2502],{"class":47},[33,119783,53529],{"class":39},[33,119785,119786],{"class":35,"line":4834},[33,119787,100],{"emptyLinePlaceholder":99},[33,119789,119790],{"class":35,"line":4848},[33,119791,119792],{"class":2487},"#删除软件包命令\n",[33,119794,119795,119797,119799,119801,119803,119805,119807],{"class":35,"line":4856},[33,119796,26815],{"class":43},[33,119798,119518],{"class":60},[33,119800,28317],{"class":60},[33,119802,31139],{"class":39},[33,119804,119607],{"class":60},[33,119806,2502],{"class":47},[33,119808,53529],{"class":39},[33,119810,119811],{"class":35,"line":4861},[33,119812,100],{"emptyLinePlaceholder":99},[33,119814,119815],{"class":35,"line":4867},[33,119816,119817],{"class":2487},"# 清理旧版本和缓存（释放磁盘空间）\n",[33,119819,119820,119822,119824,119827],{"class":35,"line":4873},[33,119821,26815],{"class":43},[33,119823,119518],{"class":60},[33,119825,119826],{"class":60}," autoremove",[33,119828,119829],{"class":2487},"  # 删除不再需要的依赖和库文件\n",[33,119831,119832,119834,119836,119839],{"class":35,"line":4878},[33,119833,26815],{"class":43},[33,119835,119518],{"class":60},[33,119837,119838],{"class":60}," clean",[33,119840,119841],{"class":2487},"       # 清理下载的缓存包\n",[33,119843,119844],{"class":35,"line":10194},[33,119845,100],{"emptyLinePlaceholder":99},[33,119847,119848],{"class":35,"line":10218},[33,119849,119850],{"class":2487},"#移除软件包及配置文件\n",[33,119852,119853,119855,119857,119860,119862,119864,119866],{"class":35,"line":10223},[33,119854,26815],{"class":43},[33,119856,119518],{"class":60},[33,119858,119859],{"class":60}," purge",[33,119861,31139],{"class":39},[33,119863,119607],{"class":60},[33,119865,2502],{"class":47},[33,119867,53529],{"class":39},[33,119869,119870],{"class":35,"line":10229},[33,119871,100],{"emptyLinePlaceholder":99},[33,119873,119874],{"class":35,"line":10256},[33,119875,119876],{"class":2487},"#查找软件包命令\n",[33,119878,119879,119881,119883,119886,119888,119891,119893],{"class":35,"line":10261},[33,119880,26815],{"class":43},[33,119882,119518],{"class":60},[33,119884,119885],{"class":60}," search",[33,119887,31139],{"class":39},[33,119889,119890],{"class":60},"keywor",[33,119892,2737],{"class":47},[33,119894,53529],{"class":39},[33,119896,119897],{"class":35,"line":10267},[33,119898,100],{"emptyLinePlaceholder":99},[33,119900,119901],{"class":35,"line":10279},[33,119902,119903],{"class":2487},"#列出所有已安装的包\n",[33,119905,119906,119908,119910],{"class":35,"line":10291},[33,119907,119569],{"class":43},[33,119909,119572],{"class":60},[33,119911,119912],{"class":72}," --installed\n",[33,119914,119915],{"class":35,"line":10303},[33,119916,100],{"emptyLinePlaceholder":99},[33,119918,119919],{"class":35,"line":11961},[33,119920,119921],{"class":2487},"#列出所有已安装的包的版本信息\n",[33,119923,119924,119926,119928],{"class":35,"line":11986},[33,119925,119569],{"class":43},[33,119927,119572],{"class":60},[33,119929,119930],{"class":72}," --all-versions\n",[2331,119932,119933],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":119935},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119480,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119942,"title":119943,"body":119944,"description":2359,"extension":2360,"meta":120684,"navigation":99,"path":120685,"seo":120686,"stem":120687,"__hash__":120688},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119945,"toc":120671},[119946,119949,119953,119956,119962,119966,119970,119976,119981,119986,119991,119996,120001,120004,120007,120010,120013,120017,120020,120025,120028,120033,120036,120041,120048,120051,120054,120057,120060,120063,120074,120078,120082,120087,120092,120096,120101,120105,120110,120114,120118,120123,120126,120170,120175,120179,120183,120188,120194,120199,120209,120214,120224,120229,120234,120261,120265,120268,120273,120276,120301,120305,120310,120313,120318,120323,120343,120348,120351,120366,120370,120423,120426,120431,120435,120438,120453,120456,120459,120464,120468,120472,120475,120479,120483,120486,120491,120496,120500,120507,120515,120518,120525,120530,120535,120538,120543,120550,120555,120562,120566,120568,120573,120577,120580,120583,120588,120591,120596,120599,120604,120609,120614,120618,120623,120627,120668],[10,119947,119943],{"id":119948},"_2-linux装机教程",[14,119950,119952],{"id":119951},"_21-实体机","2.1 实体机",[19,119954,119955],{},"使用清华源：（Ubuntu24.04）",[19,119957,119958],{},[2663,119959,119960],{"href":119960,"rel":119961},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[26103],[14,119963,119965],{"id":119964},"_22-普通虚拟机","2.2 普通虚拟机",[631,119967,119969],{"id":119968},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119971,119972],{},[2663,119973,119974],{"href":119974,"rel":119975},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[26103],[19,119977,119978],{},[3736,119979],{"alt":28,"src":119980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119982,119983],{},[3736,119984],{"alt":28,"src":119985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119987,119988],{},[3736,119989],{"alt":28,"src":119990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119992,119993],{},[3736,119994],{"alt":28,"src":119995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119997,119998],{},[3736,119999],{"alt":28,"src":120000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,120002,120003],{},"内存4G（4096MB）；",[19,120005,120006],{},"CPU给4个核；",[19,120008,120009],{},"硬盘动态分配60G；",[19,120011,120012],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[631,120014,120016],{"id":120015},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,120018,120019],{},"按照1.1的步骤下载Ubuntu",[19,120021,120022],{},[3736,120023],{"alt":28,"src":120024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,120026,120027],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,120029,120030],{},[3736,120031],{"alt":28,"src":120032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,120034,120035],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,120037,120038],{},[3736,120039],{"alt":28,"src":120040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,120042,120043,120044,120047],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2575,120045,120046],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,120049,120050],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,120052,120053],{},"将改动写入磁盘吗 继续",[19,120055,120056],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,120058,120059],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,120061,120062],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,120064,120065,120066,120069,120070,120073],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2575,120067,120068],{},"除了"," 选不发送系统信息与不升级之外， ",[2575,120071,120072],{},"其它"," 都跳过或前进）",[631,120075,120077],{"id":120076},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[24236,120079,120081],{"id":120080},"_2231-全屏","2.2.3.1 全屏",[19,120083,120084],{},[3736,120085],{"alt":28,"src":120086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,120088,120089],{},[3736,120090],{"alt":28,"src":120091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[24236,120093,120095],{"id":120094},"_2232-文件交换","2.2.3.2 文件交换",[19,120097,120098],{},[3736,120099],{"alt":28,"src":120100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[24236,120102,120104],{"id":120103},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,120106,120107],{},[3736,120108],{"alt":28,"src":120109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,120111,120113],{"id":120112},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[631,120115,120117],{"id":120116},"_231-简介与优缺点","2.3.1 简介与优缺点",[328,120119,120120],{},[331,120121,120122],{},"什么情况下推荐？",[19,120124,120125],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[328,120127,120128],{"start":51},[331,120129,120130,120131],{},"优缺点：",[328,120132,120133,120162],{},[331,120134,326,120135],{},[328,120136,120137,120140,120147,120150,120153,120156,120159],{},[331,120138,120139],{},"WSL2是最好的Linux发行版;(bushi)",[331,120141,120142,120143,120146],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2575,120144,120145],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[331,120148,120149],{},"非常方便调用USB设备，可以USB直通;",[331,120151,120152],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[331,120154,120155],{},"非常方便Win与WSL2互相传文件等协同操作;",[331,120157,120158],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[331,120160,120161],{},"非常方便使用Windows的VScode远程开发;",[331,120163,120164,120165],{},"缺点：",[328,120166,120167],{},[331,120168,120169],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,120171,120172],{},[3736,120173],{"alt":28,"src":120174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[631,120176,120178],{"id":120177},"_232-安装教程","2.3.2 安装教程",[24236,120180,120182],{"id":120181},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[328,120184,120185],{},[331,120186,120187],{},"方法一(图形界面)",[19,120189,120190,120191,26857],{},"用Win+R输入",[30,120192,120193],{},"appwiz.cpl",[19,120195,120196],{},[3736,120197],{"alt":28,"src":120198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,120200,120201,120202,120205,120206,28711],{},"点击OK进入 ",[2575,120203,120204],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2575,120207,120208],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,120210,120211],{},[3736,120212],{"alt":28,"src":120213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,120215,120216,120217,1958,120220,120223],{},"选择 ",[2575,120218,120219],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2575,120221,120222],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,120225,120226],{},[3736,120227],{"alt":28,"src":120228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[328,120230,120231],{"start":51},[331,120232,120233],{},"方法二(命令行)",[23,120235,120239],{"className":120236,"code":120237,"language":120238,"meta":28,"style":28},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[30,120240,120241,120246,120251,120256],{"__ignoreMap":28},[33,120242,120243],{"class":35,"line":36},[33,120244,120245],{},"# 开启 Linux 子系统\n",[33,120247,120248],{"class":35,"line":51},[33,120249,120250],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[33,120252,120253],{"class":35,"line":64},[33,120254,120255],{},"# 开启虚拟机平台\n",[33,120257,120258],{"class":35,"line":76},[33,120259,120260],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[24236,120262,120264],{"id":120263},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,120266,120267],{},"用管理员权限打开powershell",[19,120269,120270],{},[3736,120271],{"alt":28,"src":120272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,120274,120275],{},"升级WSL并设置默认版本为WSL2",[23,120277,120279],{"className":120236,"code":120278,"language":120238,"meta":28,"style":28},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[30,120280,120281,120286,120291,120296],{"__ignoreMap":28},[33,120282,120283],{"class":35,"line":36},[33,120284,120285],{},"# 更新 wsl\n",[33,120287,120288],{"class":35,"line":51},[33,120289,120290],{},"wsl --update\n",[33,120292,120293],{"class":35,"line":64},[33,120294,120295],{},"# 将 wsl 版本设置为 wsl2\n",[33,120297,120298],{"class":35,"line":76},[33,120299,120300],{},"wsl --set-default-version 2\n",[24236,120302,120304],{"id":120303},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[328,120306,120307],{},[331,120308,120309],{},"方式一(商店下载)",[19,120311,120312],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120314,120315],{},[3736,120316],{"alt":28,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[328,120319,120320],{"start":51},[331,120321,120322],{},"方式二(命令行安装)",[23,120324,120326],{"className":120236,"code":120325,"language":120238,"meta":28,"style":28},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[30,120327,120328,120333,120338],{"__ignoreMap":28},[33,120329,120330],{"class":35,"line":36},[33,120331,120332],{},"# 列出可安装的 Linux 版本\n",[33,120334,120335],{"class":35,"line":51},[33,120336,120337],{},"#（需要科学手段）\n",[33,120339,120340],{"class":35,"line":64},[33,120341,120342],{},"wsl --list --online\n",[19,120344,120345],{},[3736,120346],{"alt":28,"src":120347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120349,120350],{},"选择对应发行版并安装",[23,120352,120354],{"className":120236,"code":120353,"language":120238,"meta":28,"style":28},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[30,120355,120356,120361],{"__ignoreMap":28},[33,120357,120358],{"class":35,"line":36},[33,120359,120360],{},"# Ubuntu安装完毕后需要重启系统\n",[33,120362,120363],{"class":35,"line":51},[33,120364,120365],{},"wsl --install -d Ubuntu-24.04\n",[24236,120367,120369],{"id":120368},"_2324-查看系统状态","2.3.2.4 查看系统状态",[23,120371,120373],{"className":120236,"code":120372,"language":120238,"meta":28,"style":28},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[30,120374,120375,120380,120385,120390,120395,120399,120403,120408,120413,120418],{"__ignoreMap":28},[33,120376,120377],{"class":35,"line":36},[33,120378,120379],{},"# 查看 wsl\n",[33,120381,120382],{"class":35,"line":51},[33,120383,120384],{},"wsl -l\n",[33,120386,120387],{"class":35,"line":64},[33,120388,120389],{},"# 查看 wsl 运行版本或模式\n",[33,120391,120392],{"class":35,"line":76},[33,120393,120394],{},"wsl -l -v\n",[33,120396,120397],{"class":35,"line":87},[33,120398,100],{"emptyLinePlaceholder":99},[33,120400,120401],{"class":35,"line":96},[33,120402,100],{"emptyLinePlaceholder":99},[33,120404,120405],{"class":35,"line":103},[33,120406,120407],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[33,120409,120410],{"class":35,"line":108},[33,120411,120412],{},"wsl --set-version \u003Cdistro> 2\n",[33,120414,120415],{"class":35,"line":119},[33,120416,120417],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[33,120419,120420],{"class":35,"line":128},[33,120421,120422],{},"wsl --unregister \u003Cdistro>\n",[19,120424,120425],{},"输出Version为2即正常",[19,120427,120428],{},[3736,120429],{"alt":28,"src":120430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[24236,120432,120434],{"id":120433},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120436,120437],{},"直接在Powershell里输入wsl命令进入子系统",[23,120439,120441],{"className":120236,"code":120440,"language":120238,"meta":28,"style":28},"# 进入子系统\nwsl\n",[30,120442,120443,120448],{"__ignoreMap":28},[33,120444,120445],{"class":35,"line":36},[33,120446,120447],{},"# 进入子系统\n",[33,120449,120450],{"class":35,"line":51},[33,120451,120452],{},"wsl\n",[19,120454,120455],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120457,120458],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120460,120461],{},[3736,120462],{"alt":28,"src":120463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[631,120465,120467],{"id":120466},"_233-配置各种环境","2.3.3 配置各种环境",[24236,120469,120471],{"id":120470},"_2331-换源","2.3.3.1 换源",[19,120473,120474],{},"(同实体机LINUX，往下找教程)",[24236,120476,120478],{"id":120477},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[25148,120480,120482],{"id":120481},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120484,120485],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120487,120488],{},[3736,120489],{"alt":28,"src":120490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120492,120493],{},[3736,120494],{"alt":28,"src":120495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[25148,120497,120499],{"id":120498},"_23322-cuda","2.3.3.2.2 CUDA",[19,120501,120502,120503],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2663,120504,120505],{"href":120505,"rel":120506},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[26103],[19,120508,120509,120512],{},[3736,120510],{"alt":28,"src":120511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3736,120513],{"alt":28,"src":120514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120516,120517],{},"在下方的网站，选择合适的版本。",[19,120519,120520,120521],{},"WSL2 专属 CUDA 指南：",[2663,120522,120523],{"href":120523,"rel":120524},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[26103],[19,120526,120527],{},[2575,120528,120529],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120531,120532],{},[3736,120533],{"alt":28,"src":120534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120536,120537],{},"挨行敲一遍",[19,120539,120540],{},[3736,120541],{"alt":28,"src":120542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120544,120545,120546,120549],{},"敲完后，输入",[30,120547,120548],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120551,120552],{},[3736,120553],{"alt":28,"src":120554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120556,120557,120558,120561],{},"（请详看下方教程的",[2575,120559,120560],{},"安装CUDA的配置环境来看","如何配置环境）",[25148,120563,120565],{"id":120564},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120567,120474],{},[19,120569,120570],{},[3736,120571],{"alt":28,"src":120572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[24236,120574,120576],{"id":120575},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120578,120579],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120581,120582],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120584,120585],{},[3736,120586],{"alt":28,"src":120587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120589,120590],{},"连接WSL2",[19,120592,120593],{},[3736,120594],{"alt":28,"src":120595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120597,120598],{},"远程开发成功。",[19,120600,120601],{},[3736,120602],{"alt":28,"src":120603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120605,120606],{},[3736,120607],{"alt":28,"src":120608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120610,120611],{},[3736,120612],{"alt":28,"src":120613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[24236,120615,120617],{"id":120616},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120619,120620],{},[3736,120621],{"alt":28,"src":120622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[24236,120624,120626],{"id":120625},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[23,120628,120630],{"className":119497,"code":120629,"language":119499,"meta":28,"style":28},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[30,120631,120632,120640,120648,120659,120663],{"__ignoreMap":28},[33,120633,120634,120636,120638],{"class":35,"line":36},[33,120635,26815],{"class":43},[33,120637,119518],{"class":60},[33,120639,28480],{"class":60},[33,120641,120642,120644,120646],{"class":35,"line":51},[33,120643,26815],{"class":43},[33,120645,119518],{"class":60},[33,120647,119534],{"class":60},[33,120649,120650,120652,120654,120656],{"class":35,"line":64},[33,120651,26815],{"class":43},[33,120653,119518],{"class":60},[33,120655,26072],{"class":60},[33,120657,120658],{"class":60}," mesa-utils\n",[33,120660,120661],{"class":35,"line":76},[33,120662,100],{"emptyLinePlaceholder":99},[33,120664,120665],{"class":35,"line":87},[33,120666,120667],{"class":2487},"#然后重启wsl2即可\n",[2331,120669,120670],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":120672},[120673,120674,120679],{"id":119951,"depth":51,"text":119952},{"id":119964,"depth":51,"text":119965,"children":120675},[120676,120677,120678],{"id":119968,"depth":64,"text":119969},{"id":120015,"depth":64,"text":120016},{"id":120076,"depth":64,"text":120077},{"id":120112,"depth":51,"text":120113,"children":120680},[120681,120682,120683],{"id":120116,"depth":64,"text":120117},{"id":120177,"depth":64,"text":120178},{"id":120466,"depth":64,"text":120467},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119943,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120690,"title":120691,"body":120692,"description":2359,"extension":2360,"meta":123628,"navigation":99,"path":123629,"seo":123630,"stem":123631,"__hash__":123632},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120693,"toc":123600},[120694,120697,120701,120707,120711,120717,120721,120909,120912,120917,120921,120925,120928,120931,120937,120942,120945,120948,120953,120986,120991,120995,121072,121075,121080,121084,121087,121126,121129,121138,121156,121161,121168,121285,121290,121293,121320,121325,121329,121338,121388,121395,121399,121402,121416,121423,121457,121462,121466,121489,121492,121497,121501,121504,121507,121510,121552,121556,121559,121562,121603,121607,121611,121614,121619,121624,121627,121650,121653,121661,121666,121669,121674,121679,121682,121687,121691,121696,121719,121724,121786,121794,121799,121804,121807,121812,121815,121820,121825,121843,121848,121854,121859,121873,121877,121880,121883,121886,121929,121932,121937,122038,122041,122046,122050,122054,122091,122095,122099,122103,122149,122153,122198,122202,122209,122217,122272,122275,122352,122355,122378,122382,122385,122390,122395,122403,122406,122411,122416,122421,122424,122429,122438,122441,122446,122449,122520,122525,122528,122533,122536,122541,122544,122549,122552,122557,122562,122565,122640,122643,122656,122661,122664,122678,122681,122710,122715,122744,122747,122752,122756,122761,122770,122773,122778,122781,122786,122789,122792,122797,122800,122805,122810,122813,122818,122821,122946,122951,122981,122984,122989,122994,123011,123014,123057,123060,123087,123092,123105,123248,123252,123257,123271,123274,123325,123328,123358,123361,123377,123382,123396,123399,123466,123471,123480,123485,123488,123500,123505,123512,123536,123539,123544,123547,123566,123571,123578,123590,123597],[10,120695,120691],{"id":120696},"_3-安装必备配置",[14,120698,120700],{"id":120699},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[23,120702,120705],{"className":120703,"code":120704,"language":7436},[7434],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[30,120706,120704],{"__ignoreMap":28},[631,120708,120710],{"id":120709},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[23,120712,120715],{"className":120713,"code":120714,"language":7436},[7434],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[30,120716,120714],{"__ignoreMap":28},[631,120718,120720],{"id":120719},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[23,120722,120726],{"className":120723,"code":120724,"language":120725,"meta":28,"style":28},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[30,120727,120728,120736,120747,120759,120773,120777,120787,120792,120796,120800,120805,120809,120821,120825,120830,120834,120845,120849,120865,120869,120880,120884,120889,120893,120901],{"__ignoreMap":28},[33,120729,120730,120732,120734],{"class":35,"line":36},[33,120731,26815],{"class":43},[33,120733,119518],{"class":60},[33,120735,28480],{"class":60},[33,120737,120738,120740,120742,120744],{"class":35,"line":51},[33,120739,26815],{"class":43},[33,120741,119518],{"class":60},[33,120743,26072],{"class":60},[33,120745,120746],{"class":60}," vim\n",[33,120748,120749,120751,120754,120756],{"class":35,"line":64},[33,120750,26815],{"class":43},[33,120752,120753],{"class":60}," rm",[33,120755,27564],{"class":72},[33,120757,120758],{"class":60}," \u002Fetc\u002Fapt\u002Fsources.list\n",[33,120760,120761,120763,120765,120767,120770],{"class":35,"line":76},[33,120762,26815],{"class":43},[33,120764,120753],{"class":60},[33,120766,27564],{"class":72},[33,120768,120769],{"class":60}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[33,120771,120772],{"class":72},"**\n",[33,120774,120775],{"class":35,"line":87},[33,120776,100],{"emptyLinePlaceholder":99},[33,120778,120779,120781,120784],{"class":35,"line":96},[33,120780,26815],{"class":43},[33,120782,120783],{"class":60}," vim",[33,120785,120786],{"class":60}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[33,120788,120789],{"class":35,"line":103},[33,120790,120791],{"class":60},"```\n",[33,120793,120794],{"class":35,"line":108},[33,120795,100],{"emptyLinePlaceholder":99},[33,120797,120798],{"class":35,"line":119},[33,120799,100],{"emptyLinePlaceholder":99},[33,120801,120802],{"class":35,"line":128},[33,120803,120804],{"class":43},"选择好Ubuntu版本后，复制下方的内容。\n",[33,120806,120807],{"class":35,"line":1753},[33,120808,100],{"emptyLinePlaceholder":99},[33,120810,120811,120813,120816,120819],{"class":35,"line":1763},[33,120812,2651],{"class":39},[33,120814,120815],{"class":60},"[](",[33,120817,120818],{"class":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[33,120820,226],{"class":60},[33,120822,120823],{"class":35,"line":1775},[33,120824,100],{"emptyLinePlaceholder":99},[33,120826,120827],{"class":35,"line":1780},[33,120828,120829],{"class":43},"粘贴进去\n",[33,120831,120832],{"class":35,"line":1785},[33,120833,100],{"emptyLinePlaceholder":99},[33,120835,120836,120838,120840,120843],{"class":35,"line":1940},[33,120837,2651],{"class":39},[33,120839,120815],{"class":60},[33,120841,120842],{"class":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[33,120844,226],{"class":60},[33,120846,120847],{"class":35,"line":2183},[33,120848,100],{"emptyLinePlaceholder":99},[33,120850,120851,120854,120857,120860,120862],{"class":35,"line":2208},[33,120852,120853],{"class":43},"按一下ESC，然后英文冒号，输入",[33,120855,120856],{"class":60}," `",[33,120858,120859],{"class":43},":wq!",[33,120861,3379],{"class":60},[33,120863,120864],{"class":43},"然后回车\n",[33,120866,120867],{"class":35,"line":2234},[33,120868,100],{"emptyLinePlaceholder":99},[33,120870,120871,120873,120875,120878],{"class":35,"line":2239},[33,120872,2651],{"class":39},[33,120874,120815],{"class":60},[33,120876,120877],{"class":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[33,120879,226],{"class":60},[33,120881,120882],{"class":35,"line":2247},[33,120883,100],{"emptyLinePlaceholder":99},[33,120885,120886],{"class":35,"line":2255},[33,120887,120888],{"class":43},"输入以下命令\n",[33,120890,120891],{"class":35,"line":3992},[33,120892,100],{"emptyLinePlaceholder":99},[33,120894,120895,120898],{"class":35,"line":4009},[33,120896,120897],{"class":60},"```",[33,120899,120900],{"class":43},"Bash\n",[33,120902,120903,120905,120907],{"class":35,"line":4014},[33,120904,26815],{"class":43},[33,120906,119518],{"class":60},[33,120908,28480],{"class":60},[19,120910,120911],{},"这里被替换成对应学校则成功",[19,120913,120914],{},[3736,120915],{"alt":28,"src":120916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120918,120920],{"id":120919},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[631,120922,120924],{"id":120923},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120926,120927],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120929,120930],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120932,120933],{},[2663,120934,120935],{"href":120935,"rel":120936},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[26103],[19,120938,120939],{},[3736,120940],{"alt":28,"src":120941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120943,120944],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120946,120947],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120949,120950],{},[3736,120951],{"alt":28,"src":120952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[23,120954,120956],{"className":119497,"code":120955,"language":119499,"meta":28,"style":28},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[30,120957,120958,120963,120970,120975],{"__ignoreMap":28},[33,120959,120960],{"class":35,"line":36},[33,120961,120962],{"class":2487},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[33,120964,120965,120967],{"class":35,"line":51},[33,120966,103482],{"class":72},[33,120968,120969],{"class":60}," ~\u002FDownloads\n",[33,120971,120972],{"class":35,"line":64},[33,120973,120974],{"class":2487},"#下方chrome安装包名不一定是这个，根据名字来看\n",[33,120976,120977,120979,120981,120983],{"class":35,"line":76},[33,120978,26815],{"class":43},[33,120980,119518],{"class":60},[33,120982,26072],{"class":60},[33,120984,120985],{"class":60}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120987,120988],{},[3736,120989],{"alt":28,"src":120990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[631,120992,120994],{"id":120993},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[23,120996,120998],{"className":119497,"code":120997,"language":119499,"meta":28,"style":28},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[30,120999,121000,121005,121013,121024,121029,121033,121038,121048,121056,121067],{"__ignoreMap":28},[33,121001,121002],{"class":35,"line":36},[33,121003,121004],{"class":2487},"# 老版\n",[33,121006,121007,121009,121011],{"class":35,"line":51},[33,121008,26815],{"class":43},[33,121010,119518],{"class":60},[33,121012,28480],{"class":60},[33,121014,121015,121017,121019,121021],{"class":35,"line":64},[33,121016,26815],{"class":43},[33,121018,119518],{"class":60},[33,121020,26072],{"class":60},[33,121022,121023],{"class":60}," neofetch\n",[33,121025,121026],{"class":35,"line":76},[33,121027,121028],{"class":43},"neofetch\n",[33,121030,121031],{"class":35,"line":87},[33,121032,100],{"emptyLinePlaceholder":99},[33,121034,121035],{"class":35,"line":96},[33,121036,121037],{"class":2487},"# 新版\n",[33,121039,121040,121042,121045],{"class":35,"line":103},[33,121041,26815],{"class":43},[33,121043,121044],{"class":60}," add-apt-repository",[33,121046,121047],{"class":60}," ppa:zhangsongcui3371\u002Ffastfetch\n",[33,121049,121050,121052,121054],{"class":35,"line":108},[33,121051,26815],{"class":43},[33,121053,119518],{"class":60},[33,121055,28480],{"class":60},[33,121057,121058,121060,121062,121064],{"class":35,"line":119},[33,121059,26815],{"class":43},[33,121061,119518],{"class":60},[33,121063,26072],{"class":60},[33,121065,121066],{"class":60}," fastfetch\n",[33,121068,121069],{"class":35,"line":128},[33,121070,121071],{"class":43},"fastfetch\n",[19,121073,121074],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,121076,121077],{},[3736,121078],{"alt":28,"src":121079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[631,121081,121083],{"id":121082},"_323-移除snap应用","3.2.3 移除snap应用",[19,121085,121086],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[23,121088,121090],{"className":119497,"code":121089,"language":119499,"meta":28,"style":28},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[30,121091,121092,121104,121115],{"__ignoreMap":28},[33,121093,121094,121096,121098,121101],{"class":35,"line":36},[33,121095,26815],{"class":43},[33,121097,28751],{"class":60},[33,121099,121100],{"class":60}," disable",[33,121102,121103],{"class":60}," snapd.service\n",[33,121105,121106,121108,121110,121112],{"class":35,"line":51},[33,121107,26815],{"class":43},[33,121109,28751],{"class":60},[33,121111,121100],{"class":60},[33,121113,121114],{"class":60}," snapd.socket\n",[33,121116,121117,121119,121121,121123],{"class":35,"line":64},[33,121118,26815],{"class":43},[33,121120,28751],{"class":60},[33,121122,121100],{"class":60},[33,121124,121125],{"class":60}," snapd.seeded.service\n",[19,121127,121128],{},"然后查看snap应用列表",[19,121130,121131,121132,121137],{},"根据你安装的选择不同（最小安装或普通安装），有",[2663,121133,121136],{"href":121134,"rel":121135},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[26103],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[23,121139,121141],{"className":119497,"code":121140,"language":119499,"meta":28,"style":28},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[30,121142,121143,121148],{"__ignoreMap":28},[33,121144,121145],{"class":35,"line":36},[33,121146,121147],{"class":2487},"# 查询当前系统上snap安装了哪些app\n",[33,121149,121150,121153],{"class":35,"line":51},[33,121151,121152],{"class":43},"snap",[33,121154,121155],{"class":60}," list\n",[19,121157,121158],{},[3736,121159],{"alt":28,"src":121160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,121162,121163,121164,121167],{},"卸载掉图中所有应用，按照 ",[2575,121165,121166],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[23,121169,121171],{"className":119497,"code":121170,"language":119499,"meta":28,"style":28},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[30,121172,121173,121178,121190,121195,121206,121211,121222,121227,121238,121243,121247,121252,121263,121274],{"__ignoreMap":28},[33,121174,121175],{"class":35,"line":36},[33,121176,121177],{"class":2487},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[33,121179,121180,121182,121185,121187],{"class":35,"line":51},[33,121181,26815],{"class":43},[33,121183,121184],{"class":60}," snap",[33,121186,28317],{"class":60},[33,121188,121189],{"class":60}," snap-store\n",[33,121191,121192],{"class":35,"line":64},[33,121193,121194],{"class":2487},"#移除firefox浏览器\n",[33,121196,121197,121199,121201,121203],{"class":35,"line":76},[33,121198,26815],{"class":43},[33,121200,121184],{"class":60},[33,121202,28317],{"class":60},[33,121204,121205],{"class":60}," firefox\n",[33,121207,121208],{"class":35,"line":87},[33,121209,121210],{"class":2487},"#移除gnome-42-2204\n",[33,121212,121213,121215,121217,121219],{"class":35,"line":96},[33,121214,26815],{"class":43},[33,121216,121184],{"class":60},[33,121218,28317],{"class":60},[33,121220,121221],{"class":60}," gnome-42-2204\n",[33,121223,121224],{"class":35,"line":103},[33,121225,121226],{"class":2487},"#移除gtk-common-themes\n",[33,121228,121229,121231,121233,121235],{"class":35,"line":108},[33,121230,26815],{"class":43},[33,121232,121184],{"class":60},[33,121234,28317],{"class":60},[33,121236,121237],{"class":60}," gtk-common-themes\n",[33,121239,121240],{"class":35,"line":119},[33,121241,121242],{"class":2487},"#移除其它...\n",[33,121244,121245],{"class":35,"line":128},[33,121246,4931],{"class":47},[33,121248,121249],{"class":35,"line":1753},[33,121250,121251],{"class":2487},"#移除core22,bare以及snapd\n",[33,121253,121254,121256,121258,121260],{"class":35,"line":1763},[33,121255,26815],{"class":43},[33,121257,121184],{"class":60},[33,121259,28317],{"class":60},[33,121261,121262],{"class":60}," core22\n",[33,121264,121265,121267,121269,121271],{"class":35,"line":1775},[33,121266,26815],{"class":43},[33,121268,121184],{"class":60},[33,121270,28317],{"class":60},[33,121272,121273],{"class":60}," bare\n",[33,121275,121276,121278,121280,121282],{"class":35,"line":1780},[33,121277,26815],{"class":43},[33,121279,121184],{"class":60},[33,121281,28317],{"class":60},[33,121283,121284],{"class":60}," snapd\n",[19,121286,121287],{},[3736,121288],{"alt":28,"src":121289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121291,121292],{},"输入以下命令查看是否还有snap包",[23,121294,121296],{"className":119497,"code":121295,"language":119499,"meta":28,"style":28},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[30,121297,121298,121304,121308,121312,121316],{"__ignoreMap":28},[33,121299,121300,121302],{"class":35,"line":36},[33,121301,121152],{"class":43},[33,121303,121155],{"class":60},[33,121305,121306],{"class":35,"line":51},[33,121307,121004],{"class":2487},[33,121309,121310],{"class":35,"line":64},[33,121311,121028],{"class":43},[33,121313,121314],{"class":35,"line":76},[33,121315,121037],{"class":2487},[33,121317,121318],{"class":35,"line":87},[33,121319,121071],{"class":43},[19,121321,121322],{},[3736,121323],{"alt":28,"src":121324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[631,121326,121328],{"id":121327},"_324-移除snap","3.2.4 移除snap",[19,121330,121331,121332,121337],{},"在删除掉",[2663,121333,121336],{"href":121334,"rel":121335},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[26103],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[23,121339,121341],{"className":119497,"code":121340,"language":119499,"meta":28,"style":28}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[30,121342,121343,121348,121361,121366,121377],{"__ignoreMap":28},[33,121344,121345],{"class":35,"line":36},[33,121346,121347],{"class":2487}," #使用apt移除掉snap\n",[33,121349,121350,121352,121354,121356,121359],{"class":35,"line":51},[33,121351,26815],{"class":43},[33,121353,119518],{"class":60},[33,121355,119826],{"class":60},[33,121357,121358],{"class":72}," --purge",[33,121360,121284],{"class":60},[33,121362,121363],{"class":35,"line":64},[33,121364,121365],{"class":2487},"#移除snapd的一些目录\n",[33,121367,121368,121370,121372,121374],{"class":35,"line":76},[33,121369,26815],{"class":43},[33,121371,120753],{"class":60},[33,121373,27564],{"class":72},[33,121375,121376],{"class":60}," \u002Fvar\u002Fcache\u002Fsnapd\n",[33,121378,121379,121381,121383,121385],{"class":35,"line":87},[33,121380,26815],{"class":43},[33,121382,120753],{"class":60},[33,121384,27564],{"class":72},[33,121386,121387],{"class":60}," ~\u002Fsnap\n",[19,121389,121390,121391,121394],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[30,121392,121393],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[631,121396,121398],{"id":121397},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121400,121401],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[23,121403,121405],{"className":119497,"code":121404,"language":119499,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[30,121406,121407],{"__ignoreMap":28},[33,121408,121409,121411,121413],{"class":35,"line":36},[33,121410,26815],{"class":43},[33,121412,120783],{"class":60},[33,121414,121415],{"class":60}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121417,121418,121419,121422],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[30,121420,121421],{},":wq"," 回车",[23,121424,121426],{"className":119497,"code":121425,"language":119499,"meta":28,"style":28},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[30,121427,121428,121435,121449],{"__ignoreMap":28},[33,121429,121430,121433],{"class":35,"line":36},[33,121431,121432],{"class":43},"Package:",[33,121434,121284],{"class":60},[33,121436,121437,121440,121443,121446],{"class":35,"line":51},[33,121438,121439],{"class":43},"Pin:",[33,121441,121442],{"class":60}," release",[33,121444,121445],{"class":60}," a=",[33,121447,121448],{"class":72},"*\n",[33,121450,121451,121454],{"class":35,"line":64},[33,121452,121453],{"class":43},"Pin-Priority:",[33,121455,121456],{"class":72}," -10\n",[19,121458,121459],{},[3736,121460],{"alt":28,"src":121461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[631,121463,121465],{"id":121464},"_326-测试是否成功","3.2.6 测试是否成功",[23,121467,121469],{"className":119497,"code":121468,"language":119499,"meta":28,"style":28},"sudo apt update\nsudo apt install firefox\n",[30,121470,121471,121479],{"__ignoreMap":28},[33,121472,121473,121475,121477],{"class":35,"line":36},[33,121474,26815],{"class":43},[33,121476,119518],{"class":60},[33,121478,28480],{"class":60},[33,121480,121481,121483,121485,121487],{"class":35,"line":51},[33,121482,26815],{"class":43},[33,121484,119518],{"class":60},[33,121486,26072],{"class":60},[33,121488,121205],{"class":60},[19,121490,121491],{},"这里提示snapd无法被安装，就证明成功了",[19,121493,121494],{},[3736,121495],{"alt":28,"src":121496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[631,121498,121500],{"id":121499},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121502,121503],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121505,121506],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121508,121509],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[23,121511,121513],{"className":119497,"code":121512,"language":119499,"meta":28,"style":28},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[30,121514,121515,121520,121529,121534,121542],{"__ignoreMap":28},[33,121516,121517],{"class":35,"line":36},[33,121518,121519],{"class":2487},"# 添加Mozilla提供的源\n",[33,121521,121522,121524,121526],{"class":35,"line":51},[33,121523,26815],{"class":43},[33,121525,121044],{"class":60},[33,121527,121528],{"class":60}," ppa:mozillateam\u002Fppa\n",[33,121530,121531],{"class":35,"line":64},[33,121532,121533],{"class":2487},"# 安装Firefox\n",[33,121535,121536,121538,121540],{"class":35,"line":76},[33,121537,26815],{"class":43},[33,121539,119518],{"class":60},[33,121541,28480],{"class":60},[33,121543,121544,121546,121548,121550],{"class":35,"line":87},[33,121545,26815],{"class":43},[33,121547,119518],{"class":60},[33,121549,26072],{"class":60},[33,121551,121205],{"class":60},[631,121553,121555],{"id":121554},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121557,121558],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121560,121561],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[23,121563,121565],{"className":119497,"code":121564,"language":119499,"meta":28,"style":28},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[30,121566,121567,121572,121582,121590,121594],{"__ignoreMap":28},[33,121568,121569],{"class":35,"line":36},[33,121570,121571],{"class":2487},"#删掉禁止安装snap的配置文件\n",[33,121573,121574,121576,121578,121580],{"class":35,"line":51},[33,121575,26815],{"class":43},[33,121577,120753],{"class":60},[33,121579,27564],{"class":72},[33,121581,121415],{"class":60},[33,121583,121584,121586,121588],{"class":35,"line":64},[33,121585,26815],{"class":43},[33,121587,119518],{"class":60},[33,121589,28480],{"class":60},[33,121591,121592],{"class":35,"line":76},[33,121593,100],{"emptyLinePlaceholder":99},[33,121595,121596,121598,121600],{"class":35,"line":87},[33,121597,26815],{"class":43},[33,121599,119518],{"class":60},[33,121601,121602],{"class":60}," dist-update\n",[14,121604,121606],{"id":121605},"_33-中文输入法","3.3 中文输入法",[631,121608,121610],{"id":121609},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121612,121613],{},"官网下载搜狗输入法",[19,121615,121616],{},[3736,121617],{"alt":28,"src":121618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121620,121621],{},[3736,121622],{"alt":28,"src":121623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121625,121626],{},"打开终端输入如下",[23,121628,121630],{"className":119497,"code":121629,"language":119499,"meta":28,"style":28},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[30,121631,121632,121639],{"__ignoreMap":28},[33,121633,121634,121636],{"class":35,"line":36},[33,121635,103482],{"class":72},[33,121637,121638],{"class":60}," ~\u002FDownloads\u002F\n",[33,121640,121641,121643,121645,121647],{"class":35,"line":51},[33,121642,26815],{"class":43},[33,121644,119518],{"class":60},[33,121646,26072],{"class":60},[33,121648,121649],{"class":60}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121651,121652],{},"打开Fcitx",[19,121654,121655,121658],{},[3736,121656],{"alt":28,"src":121657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3736,121659],{"alt":28,"src":121660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121662,121663],{},[3736,121664],{"alt":28,"src":121665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121667,121668],{},"添加搜狗输入法",[19,121670,121671],{},[3736,121672],{"alt":28,"src":121673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121675,121676],{},[3736,121677],{"alt":28,"src":121678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121680,121681],{},"将搜狗输入法设置为唯一输入法",[19,121683,121684],{},[3736,121685],{"alt":28,"src":121686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[631,121688,121690],{"id":121689},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[328,121692,121693],{},[331,121694,121695],{},"卸载旧输入法",[23,121697,121699],{"className":120723,"code":121698,"language":120725,"meta":28,"style":28},"sudo apt purge fcitx* ibus*\n",[30,121700,121701],{"__ignoreMap":28},[33,121702,121703,121705,121707,121709,121712,121714,121717],{"class":35,"line":36},[33,121704,26815],{"class":43},[33,121706,119518],{"class":60},[33,121708,119859],{"class":60},[33,121710,121711],{"class":60}," fcitx",[33,121713,657],{"class":72},[33,121715,121716],{"class":60}," ibus",[33,121718,121448],{"class":72},[328,121720,121721],{"start":51},[331,121722,121723],{},"安装Fcitx5",[23,121725,121727],{"className":119497,"code":121726,"language":119499,"meta":28,"style":28},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[30,121728,121729,121734,121748,121752,121757,121766,121774],{"__ignoreMap":28},[33,121730,121731],{"class":35,"line":36},[33,121732,121733],{"class":2487},"# Ubuntu22.04及以上、Debian12及以上\n",[33,121735,121736,121738,121740,121742,121745],{"class":35,"line":51},[33,121737,26815],{"class":43},[33,121739,119518],{"class":60},[33,121741,26072],{"class":60},[33,121743,121744],{"class":60}," fcitx5",[33,121746,121747],{"class":60}," fcitx5-chinese-addons\n",[33,121749,121750],{"class":35,"line":64},[33,121751,100],{"emptyLinePlaceholder":99},[33,121753,121754],{"class":35,"line":76},[33,121755,121756],{"class":2487},"# Ubuntu20.04\n",[33,121758,121759,121761,121763],{"class":35,"line":87},[33,121760,26815],{"class":43},[33,121762,121044],{"class":60},[33,121764,121765],{"class":60}," ppa:zhsj\u002Ffcitx5\n",[33,121767,121768,121770,121772],{"class":35,"line":96},[33,121769,26815],{"class":43},[33,121771,119518],{"class":60},[33,121773,28480],{"class":60},[33,121775,121776,121778,121780,121782,121784],{"class":35,"line":103},[33,121777,26815],{"class":43},[33,121779,119518],{"class":60},[33,121781,26072],{"class":60},[33,121783,121744],{"class":60},[33,121785,121747],{"class":60},[328,121787,121788,121791],{"start":64},[331,121789,121790],{},"Reboot System",[331,121792,121793],{},"启动Fcitx5",[19,121795,121796],{},[3736,121797],{"alt":28,"src":121798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[328,121800,121801],{"start":87},[331,121802,121803],{},"修改一些设置",[19,121805,121806],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121808,121809],{},[3736,121810],{"alt":28,"src":121811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121813,121814],{},"添加快捷键以便于更好切换中英文",[19,121816,121817],{},[3736,121818],{"alt":28,"src":121819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[328,121821,121822],{"start":96},[331,121823,121824],{},"重启",[23,121826,121828],{"className":120723,"code":121827,"language":120725,"meta":28,"style":28},"sudo shutdown -r now\n",[30,121829,121830],{"__ignoreMap":28},[33,121831,121832,121834,121837,121840],{"class":35,"line":36},[33,121833,26815],{"class":43},[33,121835,121836],{"class":60}," shutdown",[33,121838,121839],{"class":72}," -r",[33,121841,121842],{"class":60}," now\n",[328,121844,121845],{"start":103},[331,121846,121847],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121849,121850],{},[2663,121851,121852],{"href":121852,"rel":121853},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[26103],[328,121855,121856],{"start":108},[331,121857,121858],{},"再重启",[23,121860,121861],{"className":120723,"code":121827,"language":120725,"meta":28,"style":28},[30,121862,121863],{"__ignoreMap":28},[33,121864,121865,121867,121869,121871],{"class":35,"line":36},[33,121866,26815],{"class":43},[33,121868,121836],{"class":60},[33,121870,121839],{"class":72},[33,121872,121842],{"class":60},[14,121874,121876],{"id":121875},"_34-pip3源替换","3.4 pip3源替换",[19,121878,121879],{},"非Debian系发行版需要做。",[19,121881,121882],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121884,121885],{},"使用dnf的系统也可能不用做。",[23,121887,121889],{"className":119497,"code":121888,"language":119499,"meta":28,"style":28},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,121890,121891,121896,121903,121908,121913],{"__ignoreMap":28},[33,121892,121893],{"class":35,"line":36},[33,121894,121895],{"class":2487},"# 检查是否已安装 pip\n",[33,121897,121898,121901],{"class":35,"line":51},[33,121899,121900],{"class":43},"pip3",[33,121902,28531],{"class":72},[33,121904,121905],{"class":35,"line":64},[33,121906,121907],{"class":2487},"# 如果未安装，先安装 pip3（见下方）\n",[33,121909,121910],{"class":35,"line":76},[33,121911,121912],{"class":2487},"# 配置 pip 使用清华源\n",[33,121914,121915,121917,121920,121923,121926],{"class":35,"line":87},[33,121916,121900],{"class":43},[33,121918,121919],{"class":60}," config",[33,121921,121922],{"class":60}," set",[33,121924,121925],{"class":60}," global.index-url",[33,121927,121928],{"class":60}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121930,121931],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121933,121934],{},[3736,121935],{"alt":28,"src":121936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[23,121938,121940],{"className":119497,"code":121939,"language":119499,"meta":28,"style":28},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[30,121941,121942,121947,121955,121966,121970,121975,121994,121998,122003,122015,122019,122024],{"__ignoreMap":28},[33,121943,121944],{"class":35,"line":36},[33,121945,121946],{"class":2487},"#安装pip3\n",[33,121948,121949,121951,121953],{"class":35,"line":51},[33,121950,26815],{"class":43},[33,121952,119518],{"class":60},[33,121954,28480],{"class":60},[33,121956,121957,121959,121961,121963],{"class":35,"line":64},[33,121958,26815],{"class":43},[33,121960,28314],{"class":60},[33,121962,26072],{"class":60},[33,121964,121965],{"class":60}," python3-pip\n",[33,121967,121968],{"class":35,"line":76},[33,121969,100],{"emptyLinePlaceholder":99},[33,121971,121972],{"class":35,"line":87},[33,121973,121974],{"class":2487},"#更新pip3\n",[33,121976,121977,121979,121981,121983,121985,121987,121990,121992],{"class":35,"line":96},[33,121978,103086],{"class":43},[33,121980,103089],{"class":72},[33,121982,103112],{"class":60},[33,121984,26072],{"class":60},[33,121986,28668],{"class":72},[33,121988,121989],{"class":60}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[33,121991,103117],{"class":72},[33,121993,103120],{"class":60},[33,121995,121996],{"class":35,"line":103},[33,121997,100],{"emptyLinePlaceholder":99},[33,121999,122000],{"class":35,"line":108},[33,122001,122002],{"class":2487},"#设置pip源为清华源\n",[33,122004,122005,122007,122009,122011,122013],{"class":35,"line":119},[33,122006,121900],{"class":43},[33,122008,121919],{"class":60},[33,122010,121922],{"class":60},[33,122012,121925],{"class":60},[33,122014,121928],{"class":60},[33,122016,122017],{"class":35,"line":128},[33,122018,100],{"emptyLinePlaceholder":99},[33,122020,122021],{"class":35,"line":1753},[33,122022,122023],{"class":2487},"#测试\n",[33,122025,122026,122028,122030,122032,122034,122036],{"class":35,"line":1763},[33,122027,103086],{"class":43},[33,122029,103089],{"class":72},[33,122031,103112],{"class":60},[33,122033,26072],{"class":60},[33,122035,103117],{"class":72},[33,122037,103120],{"class":60},[19,122039,122040],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,122042,122043],{},[3736,122044],{"alt":28,"src":122045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,122047,122049],{"id":122048},"_35-显卡驱动安装","3.5 显卡驱动安装",[631,122051,122053],{"id":122052},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[23,122055,122057],{"className":120723,"code":122056,"language":120725,"meta":28,"style":28},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[30,122058,122059,122064,122079,122084],{"__ignoreMap":28},[33,122060,122061],{"class":35,"line":36},[33,122062,122063],{"class":2487},"# 如果是使用apt安装的驱动\n",[33,122065,122066,122068,122070,122072,122074,122077],{"class":35,"line":51},[33,122067,26815],{"class":43},[33,122069,28314],{"class":60},[33,122071,28317],{"class":60},[33,122073,121358],{"class":72},[33,122075,122076],{"class":60}," nvidia",[33,122078,121448],{"class":72},[33,122080,122081],{"class":35,"line":64},[33,122082,122083],{"class":2487},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[33,122085,122086,122088],{"class":35,"line":76},[33,122087,26815],{"class":43},[33,122089,122090],{"class":60}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[631,122092,122094],{"id":122093},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[24236,122096,122098],{"id":122097},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[25148,122100,122102],{"id":122101},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[23,122104,122106],{"className":120723,"code":122105,"language":120725,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,122107,122108,122113,122124,122129,122139,122144],{"__ignoreMap":28},[33,122109,122110],{"class":35,"line":36},[33,122111,122112],{"class":2487},"# 安装英伟达驱动\n",[33,122114,122115,122117,122119,122121],{"class":35,"line":51},[33,122116,26815],{"class":43},[33,122118,119518],{"class":60},[33,122120,26072],{"class":60},[33,122122,122123],{"class":60}," nvidia-driver-版本号\n",[33,122125,122126],{"class":35,"line":64},[33,122127,122128],{"class":2487},"# 重启 \n",[33,122130,122131,122133,122135,122137],{"class":35,"line":76},[33,122132,26815],{"class":43},[33,122134,121836],{"class":60},[33,122136,121839],{"class":72},[33,122138,121842],{"class":60},[33,122140,122141],{"class":35,"line":87},[33,122142,122143],{"class":2487},"# 检查驱动是否安装成功\n",[33,122145,122146],{"class":35,"line":96},[33,122147,122148],{"class":43},"nvidia-smi\n",[25148,122150,122152],{"id":122151},"_35212-debian","3.5.2.1.2 Debian",[23,122154,122156],{"className":120723,"code":122155,"language":120725,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,122157,122158,122162,122176,122180,122190,122194],{"__ignoreMap":28},[33,122159,122160],{"class":35,"line":36},[33,122161,122112],{"class":2487},[33,122163,122164,122166,122168,122170,122173],{"class":35,"line":51},[33,122165,26815],{"class":43},[33,122167,119518],{"class":60},[33,122169,26072],{"class":60},[33,122171,122172],{"class":60}," nvidia-driver",[33,122174,122175],{"class":60}," nvidia-settings\n",[33,122177,122178],{"class":35,"line":64},[33,122179,122128],{"class":2487},[33,122181,122182,122184,122186,122188],{"class":35,"line":76},[33,122183,26815],{"class":43},[33,122185,121836],{"class":60},[33,122187,121839],{"class":72},[33,122189,121842],{"class":60},[33,122191,122192],{"class":35,"line":87},[33,122193,122143],{"class":2487},[33,122195,122196],{"class":35,"line":96},[33,122197,122148],{"class":43},[24236,122199,122201],{"id":122200},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,122203,122204,122205,122208],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2575,122206,122207],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,122210,122211,122212],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25791,122213,122214],{},[2575,122215,122216],{},"（也可以不禁用桌面环境，直接进行下一步。）",[23,122218,122220],{"className":120723,"code":122219,"language":120725,"meta":28,"style":28},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[30,122221,122222,122227,122237,122242,122255,122260],{"__ignoreMap":28},[33,122223,122224],{"class":35,"line":36},[33,122225,122226],{"class":2487},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[33,122228,122229,122231,122234],{"class":35,"line":51},[33,122230,26815],{"class":43},[33,122232,122233],{"class":60}," telinit",[33,122235,122236],{"class":72}," 3\n",[33,122238,122239],{"class":35,"line":64},[33,122240,122241],{"class":2487},"# ubuntu 使用下方命令\n",[33,122243,122244,122246,122249,122252],{"class":35,"line":76},[33,122245,26815],{"class":43},[33,122247,122248],{"class":60}," service",[33,122250,122251],{"class":60}," lightdm",[33,122253,122254],{"class":60}," stop\n",[33,122256,122257],{"class":35,"line":87},[33,122258,122259],{"class":2487},"# Fedora 使用下方命令\n",[33,122261,122262,122264,122266,122269],{"class":35,"line":96},[33,122263,26815],{"class":43},[33,122265,28751],{"class":60},[33,122267,122268],{"class":60}," isolate",[33,122270,122271],{"class":60}," multi-user.target\n",[19,122273,122274],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[23,122276,122278],{"className":120723,"code":122277,"language":120725,"meta":28,"style":28},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[30,122279,122280,122285,122296,122301,122308,122313,122325,122330,122337,122342],{"__ignoreMap":28},[33,122281,122282],{"class":35,"line":36},[33,122283,122284],{"class":2487},"# 编译环境+准备工作\n",[33,122286,122287,122289,122291,122293],{"class":35,"line":51},[33,122288,26815],{"class":43},[33,122290,119518],{"class":60},[33,122292,26072],{"class":60},[33,122294,122295],{"class":60}," build-essential\n",[33,122297,122298],{"class":35,"line":64},[33,122299,122300],{"class":2487},"# 进入到.run目录中\n",[33,122302,122303,122305],{"class":35,"line":76},[33,122304,103482],{"class":72},[33,122306,122307],{"class":60}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[33,122309,122310],{"class":35,"line":87},[33,122311,122312],{"class":2487},"# 给驱动文件增加可执行权限：\n",[33,122314,122315,122317,122319,122322],{"class":35,"line":96},[33,122316,26815],{"class":43},[33,122318,26818],{"class":60},[33,122320,122321],{"class":60}," a+x",[33,122323,122324],{"class":60}," NVIDIA-Linux-x86_64-550.107.02.run\n",[33,122326,122327],{"class":35,"line":103},[33,122328,122329],{"class":2487},"# 然后执行安装：\n",[33,122331,122332,122334],{"class":35,"line":108},[33,122333,26815],{"class":43},[33,122335,122336],{"class":60}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[33,122338,122339],{"class":35,"line":119},[33,122340,122341],{"class":2487},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[33,122343,122344,122346,122349],{"class":35,"line":128},[33,122345,26815],{"class":43},[33,122347,122348],{"class":60}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[33,122350,122351],{"class":72},"  --no-opengl-files\n",[19,122353,122354],{},"安装完毕重启即可",[23,122356,122358],{"className":120723,"code":122357,"language":120725,"meta":28,"style":28},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,122359,122360,122364,122370,122374],{"__ignoreMap":28},[33,122361,122362],{"class":35,"line":36},[33,122363,122128],{"class":2487},[33,122365,122366,122368],{"class":35,"line":51},[33,122367,26815],{"class":43},[33,122369,28885],{"class":60},[33,122371,122372],{"class":35,"line":64},[33,122373,122143],{"class":2487},[33,122375,122376],{"class":35,"line":76},[33,122377,122148],{"class":43},[631,122379,122381],{"id":122380},"_353-安装cuda","3.5.3 安装CUDA",[19,122383,122384],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122386,122387],{},[3736,122388],{"alt":28,"src":122389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[328,122391,122392],{},[331,122393,122394],{},"先查看显卡驱动所支持的最高CUDA版本",[23,122396,122397],{"className":120723,"code":122148,"language":120725,"meta":28,"style":28},[30,122398,122399],{"__ignoreMap":28},[33,122400,122401],{"class":35,"line":36},[33,122402,122148],{"class":43},[19,122404,122405],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122407,122408],{},[3736,122409],{"alt":28,"src":122410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[328,122412,122413],{"start":51},[331,122414,122415],{},"下载CUDA并安装CUDA",[19,122417,120502,122418],{},[2663,122419,120505],{"href":120505,"rel":122420},[26103],[19,122422,122423],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122425,122426],{},[3736,122427],{"alt":28,"src":122428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122430,122431,122432,122437],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2663,122433,122436],{"href":122434,"rel":122435},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[26103],"Vinci机器人队单片机教程","）",[19,122439,122440],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122442,122443],{},[3736,122444],{"alt":28,"src":122445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122447,122448],{},"将最下方框框里的命令敲入终端",[23,122450,122452],{"className":120723,"code":122451,"language":120725,"meta":28,"style":28},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[30,122453,122454,122459,122468,122473,122480,122485,122493,122498,122509,122514],{"__ignoreMap":28},[33,122455,122456],{"class":35,"line":36},[33,122457,122458],{"class":2487},"# 在当前文件夹下创建一个ttt的子文件夹\n",[33,122460,122461,122463,122465],{"class":35,"line":51},[33,122462,103472],{"class":43},[33,122464,31453],{"class":72},[33,122466,122467],{"class":60}," .\u002Fttt\n",[33,122469,122470],{"class":35,"line":64},[33,122471,122472],{"class":2487},"# 进入ttt文件夹\n",[33,122474,122475,122477],{"class":35,"line":76},[33,122476,103482],{"class":72},[33,122478,122479],{"class":60}," ttt\n",[33,122481,122482],{"class":35,"line":87},[33,122483,122484],{"class":2487},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[33,122486,122487,122490],{"class":35,"line":96},[33,122488,122489],{"class":43},"wget",[33,122491,122492],{"class":60}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,122494,122495],{"class":35,"line":103},[33,122496,122497],{"class":2487},"# 给予权限\n",[33,122499,122500,122502,122504,122506],{"class":35,"line":108},[33,122501,26815],{"class":43},[33,122503,26818],{"class":60},[33,122505,122321],{"class":60},[33,122507,122508],{"class":60}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,122510,122511],{"class":35,"line":119},[33,122512,122513],{"class":2487},"# 运行脚本\n",[33,122515,122516,122518],{"class":35,"line":128},[33,122517,26815],{"class":43},[33,122519,122508],{"class":60},[19,122521,122522],{},[3736,122523],{"alt":28,"src":122524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122526,122527],{},"正在安装中：",[19,122529,122530],{},[3736,122531],{"alt":28,"src":122532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122534,122535],{},"输入accept接受即可",[19,122537,122538],{},[3736,122539],{"alt":28,"src":122540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122542,122543],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122545,122546],{},[3736,122547],{"alt":28,"src":122548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122550,122551],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122553,122554],{},[3736,122555],{"alt":28,"src":122556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[328,122558,122559],{"start":64},[331,122560,122561],{},"配置环境",[19,122563,122564],{},"根据上方确认一下路径，比如我上面红色框起来的为",[23,122566,122568],{"className":120723,"code":122567,"language":120725,"meta":28,"style":28},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[30,122569,122570,122586,122601],{"__ignoreMap":28},[33,122571,122572,122575,122578,122581,122584],{"class":35,"line":36},[33,122573,122574],{"class":43},"Please",[33,122576,122577],{"class":60}," make",[33,122579,122580],{"class":60}," sure",[33,122582,122583],{"class":60}," that",[33,122585,4931],{"class":47},[33,122587,122588,122590,122593,122596,122599],{"class":35,"line":51},[33,122589,54490],{"class":43},[33,122591,122592],{"class":60},"   PATH",[33,122594,122595],{"class":60}," includes",[33,122597,122598],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[33,122600,4931],{"class":47},[33,122602,122603,122605,122608,122610,122613,122616,122618,122621,122624,122627,122630,122632,122635,122637],{"class":35,"line":64},[33,122604,54490],{"class":43},[33,122606,122607],{"class":60},"   LD_LIBRARY_PATH",[33,122609,122595],{"class":60},[33,122611,122612],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[33,122614,122615],{"class":60}," or,",[33,122617,652],{"class":60},[33,122619,122620],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[33,122622,122623],{"class":60}," to",[33,122625,122626],{"class":60}," \u002Fetc\u002Fld.so.conf",[33,122628,122629],{"class":60}," and",[33,122631,29468],{"class":60},[33,122633,122634],{"class":60}," ldconfig",[33,122636,66821],{"class":60},[33,122638,122639],{"class":60}," root\n",[19,122641,122642],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[23,122644,122646],{"className":120723,"code":122645,"language":120725,"meta":28,"style":28},"which nvcc\n",[30,122647,122648],{"__ignoreMap":28},[33,122649,122650,122653],{"class":35,"line":36},[33,122651,122652],{"class":72},"which",[33,122654,122655],{"class":60}," nvcc\n",[19,122657,122658],{},[3736,122659],{"alt":28,"src":122660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122662,122663],{},"所以我进行以下操作：",[23,122665,122667],{"className":120723,"code":122666,"language":120725,"meta":28,"style":28},"sudo vim ~\u002F.bashrc\n",[30,122668,122669],{"__ignoreMap":28},[33,122670,122671,122673,122675],{"class":35,"line":36},[33,122672,26815],{"class":43},[33,122674,120783],{"class":60},[33,122676,122677],{"class":60}," ~\u002F.bashrc\n",[19,122679,122680],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[23,122682,122684],{"className":120723,"code":122683,"language":120725,"meta":28,"style":28},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[30,122685,122686,122698],{"__ignoreMap":28},[33,122687,122688,122690,122693,122695],{"class":35,"line":36},[33,122689,27281],{"class":39},[33,122691,122692],{"class":47}," PATH",[33,122694,57],{"class":39},[33,122696,122697],{"class":47},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[33,122699,122700,122702,122705,122707],{"class":35,"line":51},[33,122701,27281],{"class":39},[33,122703,122704],{"class":47}," LD_LIBRARY_PATH",[33,122706,57],{"class":39},[33,122708,122709],{"class":47},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122711,122712],{},[3736,122713],{"alt":28,"src":122714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[23,122716,122718],{"className":120723,"code":122717,"language":120725,"meta":28,"style":28},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[30,122719,122720,122725,122731,122736],{"__ignoreMap":28},[33,122721,122722],{"class":35,"line":36},[33,122723,122724],{"class":2487},"# 刷新当前终端的环境变量\n",[33,122726,122727,122729],{"class":35,"line":51},[33,122728,103100],{"class":72},[33,122730,122677],{"class":60},[33,122732,122733],{"class":35,"line":64},[33,122734,122735],{"class":2487},"# 验证CUDA是否安装成功\n",[33,122737,122738,122741],{"class":35,"line":76},[33,122739,122740],{"class":43},"nvcc",[33,122742,122743],{"class":72}," -V\n",[19,122745,122746],{},"出现下图这种则安装成功。",[19,122748,122749],{},[3736,122750],{"alt":28,"src":122751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[631,122753,122755],{"id":122754},"_354-安装cudnn","3.5.4 安装cuDNN",[328,122757,122758],{},[331,122759,122760],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122762,122763,122764,122769],{},"前往 NVIDIA cuDNN 下载页面：",[2663,122765,122768],{"href":122766,"rel":122767},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[26103],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122771,122772],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122774,122775],{},[3736,122776],{"alt":28,"src":122777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122779,122780],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122782,122783],{},[3736,122784],{"alt":28,"src":122785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122787,122788],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122790,122791],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122793,122794],{},[2575,122795,122796],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122798,122799],{},"下载好的：",[19,122801,122802],{},[3736,122803],{"alt":28,"src":122804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[328,122806,122807],{"start":51},[331,122808,122809],{},"安装cuDNN",[19,122811,122812],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122814,122815],{},[3736,122816],{"alt":28,"src":122817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122819,122820],{},"解压文件，并复制到对应位置完成安装",[23,122822,122824],{"className":120723,"code":122823,"language":120725,"meta":28,"style":28},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[30,122825,122826,122831,122842,122847,122854,122859,122875,122889,122894,122905,122914,122918,122934],{"__ignoreMap":28},[33,122827,122828],{"class":35,"line":36},[33,122829,122830],{"class":2487},"# 解压cuDNN文件\n",[33,122832,122833,122836,122839],{"class":35,"line":51},[33,122834,122835],{"class":43},"tar",[33,122837,122838],{"class":72}," -xvf",[33,122840,122841],{"class":60}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[33,122843,122844],{"class":35,"line":64},[33,122845,122846],{"class":2487},"# cd进文件夹\n",[33,122848,122849,122851],{"class":35,"line":76},[33,122850,103482],{"class":72},[33,122852,122853],{"class":60}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[33,122855,122856],{"class":35,"line":87},[33,122857,122858],{"class":2487},"# 复制cuDNN文件到CUDA目录\n",[33,122860,122861,122863,122865,122868,122870,122873],{"class":35,"line":96},[33,122862,26815],{"class":43},[33,122864,30098],{"class":60},[33,122866,122867],{"class":60}," include\u002Fcudnn",[33,122869,657],{"class":72},[33,122871,122872],{"class":60},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[33,122874,4931],{"class":47},[33,122876,122877,122879,122881,122884,122886],{"class":35,"line":103},[33,122878,26815],{"class":43},[33,122880,30098],{"class":60},[33,122882,122883],{"class":60}," lib\u002Flibcudnn",[33,122885,657],{"class":72},[33,122887,122888],{"class":60},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[33,122890,122891],{"class":35,"line":108},[33,122892,122893],{"class":2487},"# 对比一下有没有缺文件\n",[33,122895,122896,122898,122901,122903],{"class":35,"line":119},[33,122897,28999],{"class":43},[33,122899,122900],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[33,122902,657],{"class":72},[33,122904,4931],{"class":47},[33,122906,122907,122909,122912],{"class":35,"line":128},[33,122908,28999],{"class":43},[33,122910,122911],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[33,122913,121448],{"class":72},[33,122915,122916],{"class":35,"line":1753},[33,122917,122497],{"class":2487},[33,122919,122920,122922,122924,122927,122929,122931],{"class":35,"line":1763},[33,122921,26815],{"class":43},[33,122923,26818],{"class":60},[33,122925,122926],{"class":60}," a+r",[33,122928,122900],{"class":60},[33,122930,657],{"class":72},[33,122932,122933],{"class":47},"   \n",[33,122935,122936,122938,122940,122942,122944],{"class":35,"line":1775},[33,122937,26815],{"class":43},[33,122939,26818],{"class":60},[33,122941,122926],{"class":60},[33,122943,122911],{"class":60},[33,122945,121448],{"class":72},[328,122947,122948],{"start":64},[331,122949,122950],{},"检查是否安装成功",[23,122952,122954],{"className":120723,"code":122953,"language":120725,"meta":28,"style":28},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[30,122955,122956,122961],{"__ignoreMap":28},[33,122957,122958],{"class":35,"line":36},[33,122959,122960],{"class":2487},"# 检查cuDNN版本命令\n",[33,122962,122963,122966,122969,122971,122973,122976,122979],{"class":35,"line":51},[33,122964,122965],{"class":43},"cat",[33,122967,122968],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[33,122970,27348],{"class":39},[33,122972,32473],{"class":43},[33,122974,122975],{"class":60}," CUDNN_MAJOR",[33,122977,122978],{"class":72}," -A",[33,122980,49945],{"class":72},[19,122982,122983],{},"出现下图这样的就是安装成功了",[19,122985,122986],{},[3736,122987],{"alt":28,"src":122988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[328,122990,122991],{"start":76},[331,122992,122993],{},"软链接(一般不需要)",[23,122995,122997],{"className":120723,"code":122996,"language":120725,"meta":28,"style":28},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[30,122998,122999,123004],{"__ignoreMap":28},[33,123000,123001],{"class":35,"line":36},[33,123002,123003],{"class":2487},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[33,123005,123006,123008],{"class":35,"line":51},[33,123007,26815],{"class":43},[33,123009,123010],{"class":60}," ldconfig\n",[19,123012,123013],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[23,123015,123020],{"className":123016,"code":123017,"language":123018,"meta":123019,"style":28},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[30,123021,123022,123027,123032,123037,123042,123047,123052],{"__ignoreMap":28},[33,123023,123024],{"class":35,"line":36},[33,123025,123026],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[33,123028,123029],{"class":35,"line":51},[33,123030,123031],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[33,123033,123034],{"class":35,"line":64},[33,123035,123036],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[33,123038,123039],{"class":35,"line":76},[33,123040,123041],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[33,123043,123044],{"class":35,"line":87},[33,123045,123046],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[33,123048,123049],{"class":35,"line":96},[33,123050,123051],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[33,123053,123054],{"class":35,"line":103},[33,123055,123056],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,123058,123059],{},"运行下方的命令",[23,123061,123063],{"className":120723,"code":123062,"language":120725,"meta":28,"style":28},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[30,123064,123065,123070,123077,123082],{"__ignoreMap":28},[33,123066,123067],{"class":35,"line":36},[33,123068,123069],{"class":2487},"# cd进入CUDA路径\n",[33,123071,123072,123074],{"class":35,"line":51},[33,123073,103482],{"class":72},[33,123075,123076],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[33,123078,123079],{"class":35,"line":64},[33,123080,123081],{"class":2487}," # 查看本路径下的需要软链接的文件名\n",[33,123083,123084],{"class":35,"line":76},[33,123085,123086],{"class":43}," ls\n",[19,123088,123089],{},[3736,123090],{"alt":28,"src":123091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,123093,123094,123095,20648,123098,20648,123101,123104],{},"如上图，我需要将",[30,123096,123097],{},"libcudnn_xxx_xxxxx.so.8.9.7",[30,123099,123100],{},"libcudnn_xxx_xxxxx.so.8",[30,123102,123103],{},"libcudnn_xxx_xxxxx.so","软链接",[23,123106,123108],{"className":120723,"code":123107,"language":120725,"meta":28,"style":28},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[30,123109,123110,123115,123131,123145,123159,123173,123187,123201,123215,123220,123226,123231],{"__ignoreMap":28},[33,123111,123112],{"class":35,"line":36},[33,123113,123114],{"class":2487},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[33,123116,123117,123119,123122,123125,123128],{"class":35,"line":51},[33,123118,26815],{"class":43},[33,123120,123121],{"class":60}," ln",[33,123123,123124],{"class":72}," -sf",[33,123126,123127],{"class":60}," libcudnn_cnn_train.so.8.9.7",[33,123129,123130],{"class":60}," libcudnn_cnn_train.so.8\n",[33,123132,123133,123135,123137,123139,123142],{"class":35,"line":64},[33,123134,26815],{"class":43},[33,123136,123121],{"class":60},[33,123138,123124],{"class":72},[33,123140,123141],{"class":60}," libcudnn_adv_infer.so.8.9.7",[33,123143,123144],{"class":60}," libcudnn_adv_infer.so.8\n",[33,123146,123147,123149,123151,123153,123156],{"class":35,"line":76},[33,123148,26815],{"class":43},[33,123150,123121],{"class":60},[33,123152,123124],{"class":72},[33,123154,123155],{"class":60}," libcudnn_adv_train.so.8.9.7",[33,123157,123158],{"class":60}," libcudnn_adv_train.so.8\n",[33,123160,123161,123163,123165,123167,123170],{"class":35,"line":87},[33,123162,26815],{"class":43},[33,123164,123121],{"class":60},[33,123166,123124],{"class":72},[33,123168,123169],{"class":60}," libcudnn_cnn_infer.so.8.9.7",[33,123171,123172],{"class":60}," libcudnn_cnn_infer.so.8\n",[33,123174,123175,123177,123179,123181,123184],{"class":35,"line":96},[33,123176,26815],{"class":43},[33,123178,123121],{"class":60},[33,123180,123124],{"class":72},[33,123182,123183],{"class":60}," libcudnn.so.8.9.7",[33,123185,123186],{"class":60}," libcudnn.so.8\n",[33,123188,123189,123191,123193,123195,123198],{"class":35,"line":103},[33,123190,26815],{"class":43},[33,123192,123121],{"class":60},[33,123194,123124],{"class":72},[33,123196,123197],{"class":60}," libcudnn_ops_infer.so.8.9.7",[33,123199,123200],{"class":60}," libcudnn_ops_infer.so.8\n",[33,123202,123203,123205,123207,123209,123212],{"class":35,"line":108},[33,123204,26815],{"class":43},[33,123206,123121],{"class":60},[33,123208,123124],{"class":72},[33,123210,123211],{"class":60}," libcudnn_ops_train.so.8.9.7",[33,123213,123214],{"class":60}," libcudnn_ops_train.so.8\n",[33,123216,123217],{"class":35,"line":119},[33,123218,123219],{"class":2487},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[33,123221,123222,123224],{"class":35,"line":128},[33,123223,26815],{"class":43},[33,123225,123010],{"class":60},[33,123227,123228],{"class":35,"line":1753},[33,123229,123230],{"class":2487},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[33,123232,123233,123235,123238,123241,123243,123246],{"class":35,"line":1763},[33,123234,28999],{"class":43},[33,123236,123237],{"class":72}," -l",[33,123239,123240],{"class":60}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[33,123242,657],{"class":72},[33,123244,123245],{"class":60},".so",[33,123247,121448],{"class":72},[631,123249,123251],{"id":123250},"_355-常见问题","3.5.5 常见问题",[328,123253,123254],{},[331,123255,123256],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[23,123258,123260],{"className":120723,"code":123259,"language":120725,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[30,123261,123262],{"__ignoreMap":28},[33,123263,123264,123266,123268],{"class":35,"line":36},[33,123265,26815],{"class":43},[33,123267,120783],{"class":60},[33,123269,123270],{"class":60}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,123272,123273],{},"blacklist-nouveau.conf文件内容如下：",[23,123275,123277],{"className":120723,"code":123276,"language":120725,"meta":28,"style":28},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[30,123278,123279,123287,123294,123306,123316],{"__ignoreMap":28},[33,123280,123281,123284],{"class":35,"line":36},[33,123282,123283],{"class":43},"blacklist",[33,123285,123286],{"class":60}," nouveau\n",[33,123288,123289,123291],{"class":35,"line":51},[33,123290,123283],{"class":43},[33,123292,123293],{"class":60}," lbm-nouveau\n",[33,123295,123296,123298,123301,123304],{"class":35,"line":64},[33,123297,118132],{"class":43},[33,123299,123300],{"class":60}," nouveau",[33,123302,123303],{"class":60}," modeset=",[33,123305,5342],{"class":72},[33,123307,123308,123311,123313],{"class":35,"line":76},[33,123309,123310],{"class":72},"alias",[33,123312,123300],{"class":60},[33,123314,123315],{"class":60}," off\n",[33,123317,123318,123320,123323],{"class":35,"line":87},[33,123319,123310],{"class":72},[33,123321,123322],{"class":60}," lbm-nouveau",[33,123324,123315],{"class":60},[19,123326,123327],{},"接着运行下方命令",[23,123329,123331],{"className":120723,"code":123330,"language":120725,"meta":28,"style":28},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[30,123332,123333,123343,123348],{"__ignoreMap":28},[33,123334,123335,123337,123340],{"class":35,"line":36},[33,123336,26815],{"class":43},[33,123338,123339],{"class":60}," update-initramfs",[33,123341,123342],{"class":72}," -u\n",[33,123344,123345],{"class":35,"line":51},[33,123346,123347],{"class":43},"或者\n",[33,123349,123350,123352,123355],{"class":35,"line":64},[33,123351,26815],{"class":43},[33,123353,123354],{"class":60}," dracut",[33,123356,123357],{"class":72}," --force\n",[19,123359,123360],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[23,123362,123364],{"className":120723,"code":123363,"language":120725,"meta":28,"style":28},"lsmod | grep nouveau\n",[30,123365,123366],{"__ignoreMap":28},[33,123367,123368,123371,123373,123375],{"class":35,"line":36},[33,123369,123370],{"class":43},"lsmod",[33,123372,27348],{"class":39},[33,123374,32473],{"class":43},[33,123376,123286],{"class":60},[328,123378,123379],{"start":51},[331,123380,123381],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[23,123383,123385],{"className":120723,"code":123384,"language":120725,"meta":28,"style":28},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[30,123386,123387],{"__ignoreMap":28},[33,123388,123389,123391,123393],{"class":35,"line":36},[33,123390,26815],{"class":43},[33,123392,120783],{"class":60},[33,123394,123395],{"class":60}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123397,123398],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[23,123400,123402],{"className":120723,"code":123401,"language":120725,"meta":28,"style":28},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[30,123403,123404,123412,123420,123428,123435,123443,123453,123461],{"__ignoreMap":28},[33,123405,123406,123409],{"class":35,"line":36},[33,123407,123408],{"class":43},"Section",[33,123410,123411],{"class":60}," \"OutputClass\"\n",[33,123413,123414,123417],{"class":35,"line":51},[33,123415,123416],{"class":43},"   Identifier",[33,123418,123419],{"class":60}," \"nvidia\"\n",[33,123421,123422,123425],{"class":35,"line":64},[33,123423,123424],{"class":43},"   MatchDriver",[33,123426,123427],{"class":60}," \"nvidia-drm\"\n",[33,123429,123430,123433],{"class":35,"line":76},[33,123431,123432],{"class":43},"   Driver",[33,123434,123419],{"class":60},[33,123436,123437,123440],{"class":35,"line":87},[33,123438,123439],{"class":43},"   Option",[33,123441,123442],{"class":60}," \"AllowEmptyInitialConfiguration\"\n",[33,123444,123445,123447,123450],{"class":35,"line":96},[33,123446,123439],{"class":43},[33,123448,123449],{"class":60}," \"PrimaryGPU\"",[33,123451,123452],{"class":60}," \"yes\"\n",[33,123454,123455,123458],{"class":35,"line":103},[33,123456,123457],{"class":43},"   ModulePath",[33,123459,123460],{"class":60}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[33,123462,123463],{"class":35,"line":108},[33,123464,123465],{"class":43},"EndSection\n",[328,123467,123468],{"start":64},[331,123469,123470],{},"安装N卡驱动提示错误",[23,123472,123474],{"className":123016,"code":123473,"language":123018,"meta":123019,"style":28},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[30,123475,123476],{"__ignoreMap":28},[33,123477,123478],{"class":35,"line":36},[33,123479,123473],{},[328,123481,123482],{},[331,123483,123484],{},"检查当前运行的内核版本：",[19,123486,123487],{},"运行以下命令以查看你当前正在使用的内核版本：",[23,123489,123491],{"className":119497,"code":123490,"language":119499,"meta":28,"style":28},"uname -r\n",[30,123492,123493],{"__ignoreMap":28},[33,123494,123495,123497],{"class":35,"line":36},[33,123496,72419],{"class":43},[33,123498,123499],{"class":72}," -r\n",[328,123501,123502],{"start":51},[331,123503,123504],{},"安装内核开发文件：",[19,123506,123507,123508,123511],{},"确保你已经安装了与当前内核版本相匹配的 ",[30,123509,123510],{},"kernel-devel"," 包。运行以下命令来安装：",[23,123513,123515],{"className":119497,"code":123514,"language":119499,"meta":28,"style":28},"sudo dnf install kernel-devel-$(uname -r)\n",[30,123516,123517],{"__ignoreMap":28},[33,123518,123519,123521,123523,123525,123528,123530,123532,123534],{"class":35,"line":36},[33,123520,26815],{"class":43},[33,123522,28553],{"class":60},[33,123524,26072],{"class":60},[33,123526,123527],{"class":60}," kernel-devel-",[33,123529,27338],{"class":47},[33,123531,72419],{"class":43},[33,123533,121839],{"class":72},[33,123535,226],{"class":47},[19,123537,123538],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[328,123540,123541],{"start":64},[331,123542,123543],{},"安装内核源代码（如果需要）：",[19,123545,123546],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[23,123548,123550],{"className":119497,"code":123549,"language":119499,"meta":28,"style":28},"sudo dnf install kernel-headers kernel-source\n",[30,123551,123552],{"__ignoreMap":28},[33,123553,123554,123556,123558,123560,123563],{"class":35,"line":36},[33,123555,26815],{"class":43},[33,123557,28553],{"class":60},[33,123559,26072],{"class":60},[33,123561,123562],{"class":60}," kernel-headers",[33,123564,123565],{"class":60}," kernel-source\n",[328,123567,123568],{"start":76},[331,123569,123570],{},"检查安装：",[19,123572,123573,123574,123577],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[30,123575,123576],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[23,123579,123581],{"className":119497,"code":123580,"language":119499,"meta":28,"style":28},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[30,123582,123583],{"__ignoreMap":28},[33,123584,123585,123587],{"class":35,"line":36},[33,123586,28999],{"class":43},[33,123588,123589],{"class":60}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123591,123592,123593,123596],{},"如果仍然遇到问题，可以通过 ",[30,123594,123595],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2331,123598,123599],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":28,"searchDepth":51,"depth":51,"links":123601},[123602,123606,123616,123620,123621],{"id":120699,"depth":51,"text":120700,"children":123603},[123604,123605],{"id":120709,"depth":64,"text":120710},{"id":120719,"depth":64,"text":120720},{"id":120919,"depth":51,"text":120920,"children":123607},[123608,123609,123610,123611,123612,123613,123614,123615],{"id":120923,"depth":64,"text":120924},{"id":120993,"depth":64,"text":120994},{"id":121082,"depth":64,"text":121083},{"id":121327,"depth":64,"text":121328},{"id":121397,"depth":64,"text":121398},{"id":121464,"depth":64,"text":121465},{"id":121499,"depth":64,"text":121500},{"id":121554,"depth":64,"text":121555},{"id":121605,"depth":51,"text":121606,"children":123617},[123618,123619],{"id":121609,"depth":64,"text":121610},{"id":121689,"depth":64,"text":121690},{"id":121875,"depth":51,"text":121876},{"id":122048,"depth":51,"text":122049,"children":123622},[123623,123624,123625,123626,123627],{"id":122052,"depth":64,"text":122053},{"id":122093,"depth":64,"text":122094},{"id":122380,"depth":64,"text":122381},{"id":122754,"depth":64,"text":122755},{"id":123250,"depth":64,"text":123251},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120691,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123634,"title":123635,"body":123636,"description":2359,"extension":2360,"meta":123976,"navigation":99,"path":123977,"seo":123978,"stem":123979,"__hash__":123980},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123637,"toc":123974},[123638,123641,123646,123649,123895,123900,123903,123939,123942,123971],[10,123639,123635],{"id":123640},"_4-命令教程长期积累",[328,123642,123643],{},[331,123644,123645],{},"大多数命令",[19,123647,123648],{},"常用 Linux 命令速查：",[23,123650,123652],{"className":119497,"code":123651,"language":119499,"meta":28,"style":28},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[30,123653,123654,123659,123666,123673,123681,123688,123695,123703,123711,123718,123725,123733,123737,123742,123749,123757,123764,123768,123773,123780,123788,123796,123804,123812,123816,123821,123829,123836,123843,123851,123859,123863,123868,123877,123886],{"__ignoreMap":28},[33,123655,123656],{"class":35,"line":36},[33,123657,123658],{"class":2487},"# 文件与目录\n",[33,123660,123661,123663],{"class":35,"line":51},[33,123662,28999],{"class":43},[33,123664,123665],{"class":2487},"        # 列出目录内容\n",[33,123667,123668,123670],{"class":35,"line":64},[33,123669,103482],{"class":72},[33,123671,123672],{"class":2487},"        # 切换目录\n",[33,123674,123675,123678],{"class":35,"line":76},[33,123676,123677],{"class":72},"pwd",[33,123679,123680],{"class":2487},"       # 显示当前路径\n",[33,123682,123683,123685],{"class":35,"line":87},[33,123684,103472],{"class":43},[33,123686,123687],{"class":2487},"     # 创建目录\n",[33,123689,123690,123692],{"class":35,"line":96},[33,123691,27561],{"class":43},[33,123693,123694],{"class":2487},"        # 删除文件或目录\n",[33,123696,123697,123700],{"class":35,"line":103},[33,123698,123699],{"class":43},"cp",[33,123701,123702],{"class":2487},"        # 复制文件或目录\n",[33,123704,123705,123708],{"class":35,"line":108},[33,123706,123707],{"class":43},"mv",[33,123709,123710],{"class":2487},"        # 移动\u002F重命名文件或目录\n",[33,123712,123713,123715],{"class":35,"line":119},[33,123714,103489],{"class":43},[33,123716,123717],{"class":2487},"     # 创建空文件\n",[33,123719,123720,123722],{"class":35,"line":128},[33,123721,122965],{"class":43},[33,123723,123724],{"class":2487},"       # 查看文件内容\n",[33,123726,123727,123730],{"class":35,"line":1753},[33,123728,123729],{"class":43},"head\u002Ftail",[33,123731,123732],{"class":2487}," # 查看文件头部\u002F尾部\n",[33,123734,123735],{"class":35,"line":1763},[33,123736,100],{"emptyLinePlaceholder":99},[33,123738,123739],{"class":35,"line":1775},[33,123740,123741],{"class":2487},"# 权限管理\n",[33,123743,123744,123746],{"class":35,"line":1780},[33,123745,26850],{"class":43},[33,123747,123748],{"class":2487},"     # 修改文件权限\n",[33,123750,123751,123754],{"class":35,"line":1785},[33,123752,123753],{"class":43},"chown",[33,123755,123756],{"class":2487},"     # 修改文件所有者\n",[33,123758,123759,123761],{"class":35,"line":1940},[33,123760,26815],{"class":43},[33,123762,123763],{"class":2487},"      # 以管理员身份执行\n",[33,123765,123766],{"class":35,"line":2183},[33,123767,100],{"emptyLinePlaceholder":99},[33,123769,123770],{"class":35,"line":2208},[33,123771,123772],{"class":2487},"# 系统信息\n",[33,123774,123775,123777],{"class":35,"line":2234},[33,123776,72419],{"class":43},[33,123778,123779],{"class":2487},"     # 系统信息\n",[33,123781,123782,123785],{"class":35,"line":2239},[33,123783,123784],{"class":43},"df",[33,123786,123787],{"class":2487},"        # 磁盘使用情况\n",[33,123789,123790,123793],{"class":35,"line":2247},[33,123791,123792],{"class":43},"free",[33,123794,123795],{"class":2487},"      # 内存使用情况\n",[33,123797,123798,123801],{"class":35,"line":2255},[33,123799,123800],{"class":43},"top\u002Fhtop",[33,123802,123803],{"class":2487},"  # 进程监控\n",[33,123805,123806,123809],{"class":35,"line":3992},[33,123807,123808],{"class":43},"ps",[33,123810,123811],{"class":2487},"        # 查看进程\n",[33,123813,123814],{"class":35,"line":4009},[33,123815,100],{"emptyLinePlaceholder":99},[33,123817,123818],{"class":35,"line":4014},[33,123819,123820],{"class":2487},"# 网络\n",[33,123822,123823,123826],{"class":35,"line":4019},[33,123824,123825],{"class":43},"ping",[33,123827,123828],{"class":2487},"      # 测试网络连通性\n",[33,123830,123831,123833],{"class":35,"line":4024},[33,123832,29087],{"class":43},[33,123834,123835],{"class":2487},"      # 发送 HTTP 请求\n",[33,123837,123838,123840],{"class":35,"line":4038},[33,123839,122489],{"class":43},[33,123841,123842],{"class":2487},"      # 下载文件\n",[33,123844,123845,123848],{"class":35,"line":4043},[33,123846,123847],{"class":43},"ssh",[33,123849,123850],{"class":2487},"       # 远程登录\n",[33,123852,123853,123856],{"class":35,"line":4834},[33,123854,123855],{"class":43},"scp",[33,123857,123858],{"class":2487},"       # 远程文件传输\n",[33,123860,123861],{"class":35,"line":4848},[33,123862,100],{"emptyLinePlaceholder":99},[33,123864,123865],{"class":35,"line":4856},[33,123866,123867],{"class":2487},"# 包管理（Debian\u002FUbuntu）\n",[33,123869,123870,123872,123874],{"class":35,"line":4861},[33,123871,119569],{"class":43},[33,123873,119548],{"class":60},[33,123875,123876],{"class":2487},"   # 更新软件源\n",[33,123878,123879,123881,123883],{"class":35,"line":4867},[33,123880,119569],{"class":43},[33,123882,26072],{"class":60},[33,123884,123885],{"class":2487},"  # 安装软件包\n",[33,123887,123888,123890,123892],{"class":35,"line":4873},[33,123889,119569],{"class":43},[33,123891,28317],{"class":60},[33,123893,123894],{"class":2487},"   # 卸载软件包\n",[328,123896,123897],{"start":51},[331,123898,123899],{},"KDE Dolphin 以root打开",[19,123901,123902],{},"kde5",[23,123904,123906],{"className":119497,"code":123905,"language":119499,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[30,123907,123908],{"__ignoreMap":28},[33,123909,123910,123913,123916,123919,123921,123923,123926,123929,123931,123934,123936],{"class":35,"line":36},[33,123911,123912],{"class":43},"pkexec",[33,123914,123915],{"class":60}," env",[33,123917,123918],{"class":60}," DISPLAY=",[33,123920,30380],{"class":47},[33,123922,30438],{"class":60},[33,123924,123925],{"class":47},"$XAUTHORITY ",[33,123927,123928],{"class":60},"KDE_SESSION_VERSION=",[33,123930,758],{"class":72},[33,123932,123933],{"class":60}," KDE_FULL_SESSION=",[33,123935,3636],{"class":72},[33,123937,123938],{"class":60}," dolphin\n",[19,123940,123941],{},"kde6",[23,123943,123945],{"className":119497,"code":123944,"language":119499,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[30,123946,123947],{"__ignoreMap":28},[33,123948,123949,123951,123953,123955,123957,123959,123961,123963,123965,123967,123969],{"class":35,"line":36},[33,123950,123912],{"class":43},[33,123952,123915],{"class":60},[33,123954,123918],{"class":60},[33,123956,30380],{"class":47},[33,123958,30438],{"class":60},[33,123960,123925],{"class":47},[33,123962,123928],{"class":60},[33,123964,2765],{"class":72},[33,123966,123933],{"class":60},[33,123968,3636],{"class":72},[33,123970,123938],{"class":60},[2331,123972,123973],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":28,"searchDepth":51,"depth":51,"links":123975},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123635,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123982,"title":123983,"body":123984,"description":2359,"extension":2360,"meta":123998,"navigation":99,"path":123999,"seo":124000,"stem":124001,"__hash__":124002},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123985,"toc":123996},[123986,123989],[10,123987,123983],{"id":123988},"_5-各种环境配置",[19,123990,123991],{},[2663,123992,123995],{"href":123993,"rel":123994},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[26103],"电控组环境搭建大全",{"title":28,"searchDepth":51,"depth":51,"links":123997},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123983,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":124004,"title":124005,"body":124006,"description":2359,"extension":2360,"meta":124353,"navigation":99,"path":124354,"seo":124355,"stem":124356,"__hash__":124357},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":124007,"toc":124345},[124008,124011,124015,124019,124023,124028,124035,124039,124331,124335,124342],[10,124009,124005],{"id":124010},"_6-拓展功能",[14,124012,124014],{"id":124013},"_61-wine","6.1 Wine",[14,124016,124018],{"id":124017},"_62-android","6.2 Android",[631,124020,124022],{"id":124021},"_621-i卡a卡","6.2.1 I卡、A卡",[328,124024,124025],{},[331,124026,124027],{},"Wayland-Waydroid(体验超级好)",[19,124029,124030,124031],{},"Waydroid 官网与安装指南：",[2663,124032,124033],{"href":124033,"rel":124034},"https:\u002F\u002Fwaydro.id\u002F",[26103],[631,124036,124038],{"id":124037},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[328,124040,124041],{},[331,124042,124043,124044,124046,124047,124051,124053,124056,124061,124258],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55935,124045],{},"BlissOS 官网下载：",[2663,124048,124049],{"href":124049,"rel":124050},"https:\u002F\u002Fblissos.org\u002F",[26103],[55935,124052],{},[3736,124054],{"alt":28,"src":124055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[328,124057,124058],{"start":64},[331,124059,124060],{},"比较推荐的配置",[23,124062,124064],{"className":119497,"code":124063,"language":119499,"meta":28,"style":28},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[30,124065,124066,124073,124083,124093,124103,124115,124125,124132,124142,124151,124160,124170,124180,124189,124199,124209,124221,124231,124240,124250],{"__ignoreMap":28},[33,124067,124068,124071],{"class":35,"line":36},[33,124069,124070],{"class":43},"qemu-system-x86_64",[33,124072,26917],{"class":72},[33,124074,124075,124078,124081],{"class":35,"line":51},[33,124076,124077],{"class":72},"        -M",[33,124079,124080],{"class":60}," q35,vmport=off",[33,124082,26917],{"class":72},[33,124084,124085,124088,124091],{"class":35,"line":64},[33,124086,124087],{"class":72},"        -accel",[33,124089,124090],{"class":60}," kvm",[33,124092,26917],{"class":72},[33,124094,124095,124098,124101],{"class":35,"line":76},[33,124096,124097],{"class":72},"        -cpu",[33,124099,124100],{"class":60}," qemu64,+sse3,+sse4.2",[33,124102,26917],{"class":72},[33,124104,124105,124108,124111,124113],{"class":35,"line":87},[33,124106,124107],{"class":72},"        -smp",[33,124109,124110],{"class":60}," 8,cores=",[33,124112,753],{"class":72},[33,124114,26917],{"class":72},[33,124116,124117,124120,124123],{"class":35,"line":96},[33,124118,124119],{"class":72},"        -m",[33,124121,124122],{"class":60}," 6G",[33,124124,26917],{"class":72},[33,124126,124127,124130],{"class":35,"line":103},[33,124128,124129],{"class":72},"        -usb",[33,124131,26917],{"class":72},[33,124133,124134,124137,124140],{"class":35,"line":108},[33,124135,124136],{"class":72},"        -device",[33,124138,124139],{"class":60}," virtio-tablet",[33,124141,26917],{"class":72},[33,124143,124144,124146,124149],{"class":35,"line":119},[33,124145,124136],{"class":72},[33,124147,124148],{"class":60}," virtio-keyboard",[33,124150,26917],{"class":72},[33,124152,124153,124155,124158],{"class":35,"line":128},[33,124154,124136],{"class":72},[33,124156,124157],{"class":60}," usb-tablet",[33,124159,26917],{"class":72},[33,124161,124162,124165,124168],{"class":35,"line":1753},[33,124163,124164],{"class":72},"        -bios",[33,124166,124167],{"class":60}," OVMF-pure-efi64.fd",[33,124169,26917],{"class":72},[33,124171,124172,124175,124178],{"class":35,"line":1763},[33,124173,124174],{"class":72},"        -net",[33,124176,124177],{"class":60}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[33,124179,26917],{"class":72},[33,124181,124182,124184,124187],{"class":35,"line":1775},[33,124183,124174],{"class":72},[33,124185,124186],{"class":60}," nic,model=virtio",[33,124188,26917],{"class":72},[33,124190,124191,124194,124197],{"class":35,"line":1780},[33,124192,124193],{"class":72},"        -audio",[33,124195,124196],{"class":60}," sdl,model=hda",[33,124198,26917],{"class":72},[33,124200,124201,124204,124207],{"class":35,"line":1785},[33,124202,124203],{"class":72},"        -display",[33,124205,124206],{"class":60}," sdl,gl=on,show-cursor=on",[33,124208,26917],{"class":72},[33,124210,124211,124213,124216,124219],{"class":35,"line":1940},[33,124212,124136],{"class":72},[33,124214,124215],{"class":60}," virtio-vga-gl,xres=1920,yres=",[33,124217,124218],{"class":72},"1080",[33,124220,26917],{"class":72},[33,124222,124223,124226,124229],{"class":35,"line":2183},[33,124224,124225],{"class":72},"        -drive",[33,124227,124228],{"class":60}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[33,124230,26917],{"class":72},[33,124232,124233,124235,124238],{"class":35,"line":2208},[33,124234,124225],{"class":72},[33,124236,124237],{"class":60}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[33,124239,26917],{"class":72},[33,124241,124242,124245,124248],{"class":35,"line":2234},[33,124243,124244],{"class":72},"        -monitor",[33,124246,124247],{"class":60}," stdio",[33,124249,26917],{"class":72},[33,124251,124252,124255],{"class":35,"line":2239},[33,124253,124254],{"class":72},"        -serial",[33,124256,124257],{"class":60}," none\n",[328,124259,124260],{"start":87},[331,124261,124262,124263],{},"常用操作：",[328,124264,124265,124268,124323],{},[331,124266,124267],{},"全屏：Ctrl+Alt+F",[331,124269,124270,124271,124276],{},"adb调试",[328,124272,124273],{},[331,124274,124275],{},"使Linux与Android用ADB连接。",[23,124277,124279],{"className":119497,"code":124278,"language":119499,"meta":28,"style":28},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[30,124280,124281,124286,124296,124301,124313,124318],{"__ignoreMap":28},[33,124282,124283],{"class":35,"line":36},[33,124284,124285],{"class":2487},"# 连接安卓\n",[33,124287,124288,124291,124293],{"class":35,"line":51},[33,124289,124290],{"class":43},"adb",[33,124292,355],{"class":60},[33,124294,124295],{"class":72}," 127.0.0.1\n",[33,124297,124298],{"class":35,"line":64},[33,124299,124300],{"class":2487},"# 打开shell\n",[33,124302,124303,124305,124307,124310],{"class":35,"line":76},[33,124304,124290],{"class":43},[33,124306,29121],{"class":72},[33,124308,124309],{"class":60}," 127.0.0.1:5555",[33,124311,124312],{"class":60}," shell\n",[33,124314,124315],{"class":35,"line":87},[33,124316,124317],{"class":2487},"# 使用root权限\n",[33,124319,124320],{"class":35,"line":96},[33,124321,124322],{"class":43},"su\n",[331,124324,124325,124326],{},"中文输入法",[328,124327,124328],{},[331,124329,124330],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124332,124334],{"id":124333},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124336,124337,124338],{},"rEFInd 官网与文档：",[2663,124339,124340],{"href":124340,"rel":124341},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[26103],[2331,124343,124344],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":124346},[124347,124348,124352],{"id":124013,"depth":51,"text":124014},{"id":124017,"depth":51,"text":124018,"children":124349},[124350,124351],{"id":124021,"depth":64,"text":124022},{"id":124037,"depth":64,"text":124038},{"id":124333,"depth":51,"text":124334},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":124005,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124359,"title":124360,"body":124361,"description":2359,"extension":2360,"meta":127659,"navigation":99,"path":127660,"seo":127661,"stem":127662,"__hash__":127663},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124362,"toc":127633},[124363,124366,124370,124373,124380,124630,124633,124705,124708,124712,124716,124721,124724,124727,124730,124735,124738,124741,124744,124749,124752,124757,124760,124763,124768,124771,124776,124779,124783,124787,124790,124795,124798,124812,124815,124818,124827,124830,124839,124842,124845,124854,124857,124866,124869,124872,124881,124884,124887,124902,124905,124908,124917,124922,124925,124928,124937,124940,124949,124952,124961,124964,124973,124978,124981,124989,124994,124997,125006,125009,125017,125022,125025,125034,125037,125040,125044,125047,125052,125055,125060,125074,125079,125084,125095,125100,125106,125111,125126,125131,125134,125139,125144,125149,125157,125162,125169,125174,125185,125190,125193,125197,125200,125203,125208,125211,125230,125235,125238,125247,125252,125255,125277,125280,125310,125313,125318,125321,125335,125340,125359,125362,125365,125370,125382,125387,125392,125395,125400,125403,125418,125421,125426,125431,125435,125440,125480,125483,125487,125492,125498,125503,125506,125513,125518,125525,125528,125531,125538,125552,125555,125615,125618,125632,125644,125647,125650,125653,125717,125720,125723,125726,125746,125749,125754,125761,125765,125768,125772,125777,125782,125786,125789,125792,125834,125839,125842,125864,125879,125881,125886,125898,125958,125960,125962,126016,126018,126020,126026,126031,126034,126039,126043,126046,126108,126113,126116,126118,126122,126134,126216,126218,126220,126274,126280,126282,126286,126291,126293,126298,126302,126322,126357,126361,126364,126367,126370,126377,126380,126392,126395,126410,126413,126432,126480,126483,126500,126503,126517,126522,126525,126534,126549,126561,126599,126604,126613,126618,126623,126649,126658,126662,126666,126671,126674,126678,126682,126687,126690,126695,126698,126703,126706,126711,126714,126718,126723,126726,126731,126734,126738,126743,126746,126751,126754,126759,126762,126766,126771,126774,126779,126782,126787,126790,126794,126799,126802,126807,126810,126815,126818,126823,126826,126831,126834,126839,126842,126846,126851,126854,126859,126866,126870,126875,126878,126883,126886,126890,126895,126898,126901,126904,126907,126910,126914,126917,126927,126932,126937,126959,126964,126969,126976,126980,126985,126988,126991,126996,126999,127002,127005,127008,127011,127014,127017,127020,127023,127026,127029,127032,127037,127042,127047,127052,127057,127062,127067,127070,127074,127077,127081,127086,127091,127096,127101,127105,127111,127119,127124,127127,127132,127147,127150,127155,127189,127204,127207,127262,127288,127300,127303,127312,127315,127330,127335,127338,127344,127349,127352,127357,127360,127365,127370,127377,127380,127395,127398,127433,127438,127446,127484,127487,127490,127495,127498,127503,127514,127548,127553,127556,127565,127570,127576,127579,127584,127593,127598,127601,127604,127609,127617,127620,127625,127630],[10,124364,124360],{"id":124365},"_7-其他操作",[14,124367,124369],{"id":124368},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124371,124372],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124374,124375,124376,124379],{},"进入工控机的硬盘目录，进入",[30,124377,124378],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[23,124381,124385],{"className":124382,"code":124383,"language":124384,"meta":28,"style":28},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[30,124386,124387,124395,124406,124413,124420,124432,124439,124451,124462,124473,124480,124487,124494,124506,124518,124525,124537,124549,124556,124568,124580,124592,124603,124610,124621],{"__ignoreMap":28},[33,124388,124389,124392],{"class":35,"line":36},[33,124390,124391],{"class":53522},"network",[33,124393,124394],{"class":47},": \n",[33,124396,124397,124400,124402,124404],{"class":35,"line":51},[33,124398,124399],{"class":53522},"  version",[33,124401,996],{"class":47},[33,124403,725],{"class":72},[33,124405,4931],{"class":47},[33,124407,124408,124411],{"class":35,"line":64},[33,124409,124410],{"class":53522},"  wifis",[33,124412,124394],{"class":47},[33,124414,124415,124418],{"class":35,"line":76},[33,124416,124417],{"class":53522},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[33,124419,124394],{"class":47},[33,124421,124422,124425,124427,124430],{"class":35,"line":87},[33,124423,124424],{"class":53522},"      renderer",[33,124426,996],{"class":47},[33,124428,124429],{"class":60},"NetworkManager",[33,124431,4931],{"class":47},[33,124433,124434,124437],{"class":35,"line":96},[33,124435,124436],{"class":53522},"      match",[33,124438,124394],{"class":47},[33,124440,124441,124444,124446,124449],{"class":35,"line":103},[33,124442,124443],{"class":53522},"        name",[33,124445,996],{"class":47},[33,124447,124448],{"class":60},"\"wlan0\"",[33,124450,4931],{"class":47},[33,124452,124453,124456,124458,124460],{"class":35,"line":108},[33,124454,124455],{"class":53522},"      dhcp4",[33,124457,996],{"class":47},[33,124459,3636],{"class":72},[33,124461,4931],{"class":47},[33,124463,124464,124467,124469,124471],{"class":35,"line":119},[33,124465,124466],{"class":53522},"      dhcp6",[33,124468,996],{"class":47},[33,124470,3636],{"class":72},[33,124472,4931],{"class":47},[33,124474,124475,124478],{"class":35,"line":128},[33,124476,124477],{"class":53522},"      access-points",[33,124479,124394],{"class":47},[33,124481,124482,124485],{"class":35,"line":1753},[33,124483,124484],{"class":60},"        \"EMIS_Vinci_Robocon_5G\"",[33,124486,124394],{"class":47},[33,124488,124489,124492],{"class":35,"line":1763},[33,124490,124491],{"class":53522},"          auth",[33,124493,124394],{"class":47},[33,124495,124496,124499,124501,124504],{"class":35,"line":1775},[33,124497,124498],{"class":53522},"            key-management",[33,124500,996],{"class":47},[33,124502,124503],{"class":60},"\"psk\"",[33,124505,4931],{"class":47},[33,124507,124508,124511,124513,124516],{"class":35,"line":1780},[33,124509,124510],{"class":53522},"            password",[33,124512,996],{"class":47},[33,124514,124515],{"class":60},"\"vinci666\"",[33,124517,4931],{"class":47},[33,124519,124520,124523],{"class":35,"line":1785},[33,124521,124522],{"class":53522},"          networkmanager",[33,124524,124394],{"class":47},[33,124526,124527,124530,124532,124535],{"class":35,"line":1940},[33,124528,124529],{"class":53522},"            uuid",[33,124531,996],{"class":47},[33,124533,124534],{"class":60},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[33,124536,4931],{"class":47},[33,124538,124539,124542,124544,124547],{"class":35,"line":2183},[33,124540,124541],{"class":53522},"            name",[33,124543,996],{"class":47},[33,124545,124546],{"class":60},"\"EMIS_Vinci_Robocon_5G\"",[33,124548,4931],{"class":47},[33,124550,124551,124554],{"class":35,"line":2208},[33,124552,124553],{"class":53522},"            passthrough",[33,124555,124394],{"class":47},[33,124557,124558,124561,124563,124566],{"class":35,"line":2234},[33,124559,124560],{"class":53522},"              wifi-security.auth-alg",[33,124562,996],{"class":47},[33,124564,124565],{"class":60},"\"open\"",[33,124567,4931],{"class":47},[33,124569,124570,124573,124575,124578],{"class":35,"line":2239},[33,124571,124572],{"class":53522},"              ipv6.addr-gen-mode",[33,124574,996],{"class":47},[33,124576,124577],{"class":60},"\"default\"",[33,124579,4931],{"class":47},[33,124581,124582,124585,124587,124590],{"class":35,"line":2247},[33,124583,124584],{"class":53522},"              ipv6.ip6-privacy",[33,124586,996],{"class":47},[33,124588,124589],{"class":60},"\"-1\"",[33,124591,4931],{"class":47},[33,124593,124594,124597,124599,124601],{"class":35,"line":2255},[33,124595,124596],{"class":53522},"              proxy._",[33,124598,996],{"class":47},[33,124600,9898],{"class":60},[33,124602,4931],{"class":47},[33,124604,124605,124608],{"class":35,"line":3992},[33,124606,124607],{"class":53522},"      networkmanager",[33,124609,124394],{"class":47},[33,124611,124612,124615,124617,124619],{"class":35,"line":4009},[33,124613,124614],{"class":53522},"        uuid",[33,124616,996],{"class":47},[33,124618,124534],{"class":60},[33,124620,4931],{"class":47},[33,124622,124623,124625,124627],{"class":35,"line":4014},[33,124624,124443],{"class":53522},[33,124626,996],{"class":47},[33,124628,124629],{"class":60},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124631,124632],{},"将其改为新wifi的名和密码：",[23,124634,124636],{"className":124382,"code":124635,"language":124384,"meta":28,"style":28},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[30,124637,124638,124644,124653,124659,124666,124675,124683,124689,124695],{"__ignoreMap":28},[33,124639,124640,124642],{"class":35,"line":36},[33,124641,124391],{"class":53522},[33,124643,605],{"class":47},[33,124645,124646,124648,124650],{"class":35,"line":51},[33,124647,124399],{"class":53522},[33,124649,996],{"class":47},[33,124651,124652],{"class":72},"2\n",[33,124654,124655,124657],{"class":35,"line":64},[33,124656,124410],{"class":53522},[33,124658,605],{"class":47},[33,124660,124661,124664],{"class":35,"line":76},[33,124662,124663],{"class":53522},"    wlan0",[33,124665,605],{"class":47},[33,124667,124668,124670,124672],{"class":35,"line":87},[33,124669,124455],{"class":53522},[33,124671,996],{"class":47},[33,124673,124674],{"class":72},"true\n",[33,124676,124677,124679,124681],{"class":35,"line":96},[33,124678,124466],{"class":53522},[33,124680,996],{"class":47},[33,124682,124674],{"class":72},[33,124684,124685,124687],{"class":35,"line":103},[33,124686,124477],{"class":53522},[33,124688,605],{"class":47},[33,124690,124691,124693],{"class":35,"line":108},[33,124692,124484],{"class":60},[33,124694,605],{"class":47},[33,124696,124697,124700,124702],{"class":35,"line":119},[33,124698,124699],{"class":53522},"          password",[33,124701,996],{"class":47},[33,124703,124704],{"class":60},"\"vinci666\"\n",[19,124706,124707],{},"工控机开机即可连上网。",[14,124709,124711],{"id":124710},"_72-ssh远程开发","7.2 SSH远程开发",[631,124713,124715],{"id":124714},"_721-环境准备","7.2.1 环境准备",[19,124717,124718],{},[2575,124719,124720],{},"1.硬件准备",[19,124722,124723],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124725,124726],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124728,124729],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124731,124732],{},[2575,124733,124734],{},"2.设置固定IP",[19,124736,124737],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124739,124740],{},"1.进入设置界面",[19,124742,124743],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124745,124746],{},[3736,124747],{"alt":28,"src":124748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124750,124751],{},"2.配置所连接的网络",[19,124753,124754],{},[3736,124755],{"alt":28,"src":124756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124758,124759],{},"3.设置固定IP",[19,124761,124762],{},"查看当前IP地址。",[19,124764,124765],{},[3736,124766],{"alt":28,"src":124767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124769,124770],{},"设置固定IP。",[19,124772,124773],{},[3736,124774],{"alt":28,"src":124775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124777,124778],{},"至此，IP配置完毕。",[631,124780,124782],{"id":124781},"_722-环境搭建","7.2.2 环境搭建",[19,124784,124785],{},[2575,124786,27992],{},[19,124788,124789],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124791,124792],{},[2575,124793,124794],{},"实现",[19,124796,124797],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[328,124799,124800,124803,124806,124809],{},[331,124801,124802],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[331,124804,124805],{},"远程主机启动SSH服务；",[331,124807,124808],{},"本地主机登陆远程主机；",[331,124810,124811],{},"实现数据传输。",[19,124813,124814],{},"1.安装SSH客户端与服务端",[19,124816,124817],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[23,124819,124821],{"className":123016,"code":124820,"language":123018,"meta":123019,"style":28}," sudo apt install openssh-server\n",[30,124822,124823],{"__ignoreMap":28},[33,124824,124825],{"class":35,"line":36},[33,124826,124820],{},[19,124828,124829],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[23,124831,124833],{"className":123016,"code":124832,"language":123018,"meta":123019,"style":28},"sudo apt install openssh-client\n",[30,124834,124835],{"__ignoreMap":28},[33,124836,124837],{"class":35,"line":36},[33,124838,124832],{},[19,124840,124841],{},"2.远程主机启动SSH服务",[19,124843,124844],{},"远程主机启动 ssh 服务命令如下：",[23,124846,124848],{"className":123016,"code":124847,"language":123018,"meta":123019,"style":28},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[30,124849,124850],{"__ignoreMap":28},[33,124851,124852],{"class":35,"line":36},[33,124853,124847],{},[19,124855,124856],{},"启动后可使用如下命令查看服务是否正常运行：",[23,124858,124860],{"className":123016,"code":124859,"language":123018,"meta":123019,"style":28},"ps -e | grep ssh\n",[30,124861,124862],{"__ignoreMap":28},[33,124863,124864],{"class":35,"line":36},[33,124865,124859],{},[19,124867,124868],{},"如果启动成功，会包含 sshd 程序。",[19,124870,124871],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[23,124873,124875],{"className":123016,"code":124874,"language":123018,"meta":123019,"style":28},"sudo systemctl enable ssh\n",[30,124876,124877],{"__ignoreMap":28},[33,124878,124879],{"class":35,"line":36},[33,124880,124874],{},[19,124882,124883],{},"3.本地远程登录",[19,124885,124886],{},"登录远程主机可以调用如下命令:",[23,124888,124890],{"className":119497,"code":124889,"language":119499,"meta":28,"style":28},"ssh -X 用户名@ip地址\n",[30,124891,124892],{"__ignoreMap":28},[33,124893,124894,124896,124899],{"class":35,"line":36},[33,124895,123847],{"class":43},[33,124897,124898],{"class":72}," -X",[33,124900,124901],{"class":60}," 用户名@ip地址\n",[19,124903,124904],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124906,124907],{},"如果退出，可以调用exit命令：",[23,124909,124911],{"className":123016,"code":124910,"language":123018,"meta":123019,"style":28},"exit\n",[30,124912,124913],{"__ignoreMap":28},[33,124914,124915],{"class":35,"line":36},[33,124916,124910],{},[19,124918,124919],{},[2575,124920,124921],{},"4.实现数据传输",[19,124923,124924],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124926,124927],{},"上传文件指令格式如下：",[23,124929,124931],{"className":123016,"code":124930,"language":123018,"meta":123019,"style":28},"scp 本地文件路径 账号@ip:路径\n",[30,124932,124933],{"__ignoreMap":28},[33,124934,124935],{"class":35,"line":36},[33,124936,124930],{},[19,124938,124939],{},"上传文件夹指令格式如下：",[23,124941,124943],{"className":123016,"code":124942,"language":123018,"meta":123019,"style":28},"scp -r 本地文件夹路径 账号@ip:路径\n",[30,124944,124945],{"__ignoreMap":28},[33,124946,124947],{"class":35,"line":36},[33,124948,124942],{},[19,124950,124951],{},"下载文件指令格式如下：",[23,124953,124955],{"className":123016,"code":124954,"language":123018,"meta":123019,"style":28},"scp 账号@ip:路径 本地文件夹路径\n",[30,124956,124957],{"__ignoreMap":28},[33,124958,124959],{"class":35,"line":36},[33,124960,124954],{},[19,124962,124963],{},"下载文件夹指令格式如下：",[23,124965,124967],{"className":123016,"code":124966,"language":123018,"meta":123019,"style":28},"scp -r 账号@ip:路径 本地文件夹路径\n",[30,124968,124969],{"__ignoreMap":28},[33,124970,124971],{"class":35,"line":36},[33,124972,124966],{},[19,124974,124975],{},[2575,124976,124977],{},"优化",[19,124979,124980],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[328,124982,124983,124986],{},[331,124984,124985],{},"本地生成密钥对；",[331,124987,124988],{},"将公钥上传至远程主机。",[19,124990,124991],{},[2575,124992,124993],{},"1.生成密钥对",[19,124995,124996],{},"本地客户端生成公私钥：（一路回车默认即可）",[23,124998,125000],{"className":123016,"code":124999,"language":123018,"meta":123019,"style":28},"ssh-keygen\n",[30,125001,125002],{"__ignoreMap":28},[33,125003,125004],{"class":35,"line":36},[33,125005,124999],{},[19,125007,125008],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[328,125010,125011,125014],{},[331,125012,125013],{},"id_rsa （私钥）；",[331,125015,125016],{},"id_rsa.pub (公钥)。",[19,125018,125019],{},[2575,125020,125021],{},"2.公钥上传",[19,125023,125024],{},"上传指令如下：",[23,125026,125028],{"className":123016,"code":125027,"language":123018,"meta":123019,"style":28},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[30,125029,125030],{"__ignoreMap":28},[33,125031,125032],{"class":35,"line":36},[33,125033,125027],{},[19,125035,125036],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,125038,125039],{},"以后再远程登录就无需录入密码了。",[631,125041,125043],{"id":125042},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,125045,125046],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,125048,125049],{},[2575,125050,125051],{},"1.准备工作",[19,125053,125054],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,125056,125057],{},[2575,125058,125059],{},"2.为VScode安装远程开发插件",[19,125061,125062,125063,125066,125067,125070,125071,30622],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[30,125064,125065],{},"扩展：商店","的搜索栏输入",[30,125068,125069],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[30,125072,125073],{},"安装",[19,125075,125076],{},[3736,125077],{"alt":28,"src":125078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,125080,125081],{},[2575,125082,125083],{},"3.配置远程连接",[19,125085,125086,125087,125090,125091,125094],{},"步骤1：使用快捷键",[30,125088,125089],{},"ctrl + shift + p","打开命令输入窗口，并输入",[30,125092,125093],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,125096,125097],{},[3736,125098],{"alt":28,"src":125099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,125101,125102,125103,30622],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[30,125104,125105],{},"Add New SSH Host",[19,125107,125108],{},[3736,125109],{"alt":28,"src":125110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,125112,125113,125114,125117,125118,125121,125122,125125],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[30,125115,125116],{},"ssh +X ubuntu@192.168.43.164","，其中，",[30,125119,125120],{},"ubuntu","需要替换为你的登录用户名，",[30,125123,125124],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,125127,125128],{},[3736,125129],{"alt":28,"src":125130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,125132,125133],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,125135,125136],{},[3736,125137],{"alt":28,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,125140,125141],{},[3736,125142],{"alt":28,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,125145,125146],{},[2575,125147,125148],{},"4.使用",[19,125150,125151,125152,125090,125154,125156],{},"步骤1：继续使用快捷键",[30,125153,125089],{},[30,125155,125093],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,125158,125159],{},[3736,125160],{"alt":28,"src":125161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,125163,125164,125165,125168],{},"或者，也可以点击侧边栏的",[30,125166,125167],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,125170,125171],{},[3736,125172],{"alt":28,"src":125173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,125175,125176,125177,125180,125181,125184],{},"步骤2：选择菜单栏的",[30,125178,125179],{},"文件","下的",[30,125182,125183],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,125186,125187],{},[3736,125188],{"alt":28,"src":125189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,125191,125192],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,125194,125196],{"id":125195},"_73-远程桌面","7.3 远程桌面",[19,125198,125199],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,125201,125202],{},"我们选择使用VNC来看。",[328,125204,125205],{},[331,125206,125207],{},"安装VNC服务器：",[19,125209,125210],{},"这里以TigerVNC为例进行安装：",[23,125212,125214],{"className":119497,"code":125213,"language":119499,"meta":28,"style":28},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[30,125215,125216],{"__ignoreMap":28},[33,125217,125218,125220,125222,125224,125227],{"class":35,"line":36},[33,125219,26815],{"class":43},[33,125221,119518],{"class":60},[33,125223,26072],{"class":60},[33,125225,125226],{"class":60}," tigervnc-standalone-server",[33,125228,125229],{"class":60}," tigervnc-common\n",[328,125231,125232],{"start":51},[331,125233,125234],{},"设置VNC密码：",[19,125236,125237],{},"为VNC用户设置密码，运行以下命令：",[23,125239,125241],{"className":119497,"code":125240,"language":119499,"meta":28,"style":28},"vncpasswd\n",[30,125242,125243],{"__ignoreMap":28},[33,125244,125245],{"class":35,"line":36},[33,125246,125240],{"class":43},[328,125248,125249],{"start":64},[331,125250,125251],{},"配置VNC启动脚本:",[19,125253,125254],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[23,125256,125258],{"className":119497,"code":125257,"language":119499,"meta":28,"style":28},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[30,125259,125260,125269],{"__ignoreMap":28},[33,125261,125262,125264,125266],{"class":35,"line":36},[33,125263,103472],{"class":43},[33,125265,31453],{"class":72},[33,125267,125268],{"class":60}," ~\u002F.vnc\n",[33,125270,125271,125274],{"class":35,"line":51},[33,125272,125273],{"class":43},"nano",[33,125275,125276],{"class":60}," ~\u002F.vnc\u002Fxstartup\n",[19,125278,125279],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[23,125281,125283],{"className":119497,"code":125282,"language":119499,"meta":28,"style":28},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[30,125284,125285,125290,125298,125305],{"__ignoreMap":28},[33,125286,125287],{"class":35,"line":36},[33,125288,125289],{"class":2487},"#!\u002Fbin\u002Fsh\n",[33,125291,125292,125295],{"class":35,"line":51},[33,125293,125294],{"class":72},"unset",[33,125296,125297],{"class":60}," SESSION_MANAGER\n",[33,125299,125300,125302],{"class":35,"line":64},[33,125301,125294],{"class":72},[33,125303,125304],{"class":60}," DBUS_SESSION_BUS_ADDRESS\n",[33,125306,125307],{"class":35,"line":76},[33,125308,125309],{"class":43},"gnome-session\n",[19,125311,125312],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[328,125314,125315],{"start":76},[331,125316,125317],{},"给予执行权限：",[19,125319,125320],{},"为xstartup文件设置执行权限：",[23,125322,125324],{"className":119497,"code":125323,"language":119499,"meta":28,"style":28},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[30,125325,125326],{"__ignoreMap":28},[33,125327,125328,125330,125333],{"class":35,"line":36},[33,125329,26850],{"class":43},[33,125331,125332],{"class":60}," +x",[33,125334,125276],{"class":60},[328,125336,125337],{"start":87},[331,125338,125339],{},"启动VNC服务器：",[23,125341,125343],{"className":119497,"code":125342,"language":119499,"meta":28,"style":28},"vncserver -geometry 1920x1080 -localhost=0\n",[30,125344,125345],{"__ignoreMap":28},[33,125346,125347,125350,125353,125356],{"class":35,"line":36},[33,125348,125349],{"class":43},"vncserver",[33,125351,125352],{"class":72}," -geometry",[33,125354,125355],{"class":60}," 1920x1080",[33,125357,125358],{"class":72}," -localhost=0\n",[19,125360,125361],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125363,125364],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[328,125366,125367],{"start":96},[331,125368,125369],{},"查看已开启的VNC服务器：",[23,125371,125373],{"className":119497,"code":125372,"language":119499,"meta":28,"style":28},"vncserver -list\n",[30,125374,125375],{"__ignoreMap":28},[33,125376,125377,125379],{"class":35,"line":36},[33,125378,125349],{"class":43},[33,125380,125381],{"class":72}," -list\n",[19,125383,125384],{},[3736,125385],{"alt":28,"src":125386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[328,125388,125389],{"start":103},[331,125390,125391],{},"连接到VNC服务器：",[19,125393,125394],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[328,125396,125397],{"start":108},[331,125398,125399],{},"停止VNC服务器：",[19,125401,125402],{},"如果需要停止VNC服务器，可以使用以下命令：",[23,125404,125406],{"className":119497,"code":125405,"language":119499,"meta":28,"style":28},"vncserver -kill :1\n",[30,125407,125408],{"__ignoreMap":28},[33,125409,125410,125412,125415],{"class":35,"line":36},[33,125411,125349],{"class":43},[33,125413,125414],{"class":72}," -kill",[33,125416,125417],{"class":60}," :1\n",[19,125419,125420],{},"将:1替换为你实际使用的显示编号。",[19,125422,125423],{},[3736,125424],{"alt":28,"src":125425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125427,125428],{},[3736,125429],{"alt":28,"src":125430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125432,125434],{"id":125433},"_74-usb端口设置","7.4 USB端口设置",[19,125436,125437],{},[2575,125438,125439],{},"首先先配置好权限",[23,125441,125443],{"className":119497,"code":125442,"language":119499,"meta":28,"style":28},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[30,125444,125445,125450,125463,125470,125475],{"__ignoreMap":28},[33,125446,125447],{"class":35,"line":36},[33,125448,125449],{"class":2487},"# 将用户权限提高\n",[33,125451,125452,125454,125456,125458,125461],{"class":35,"line":51},[33,125453,26815],{"class":43},[33,125455,28812],{"class":60},[33,125457,28815],{"class":72},[33,125459,125460],{"class":60}," dialout",[33,125462,28820],{"class":47},[33,125464,125465,125467],{"class":35,"line":64},[33,125466,28839],{"class":43},[33,125468,125469],{"class":60}," dialout\n",[33,125471,125472],{"class":35,"line":76},[33,125473,125474],{"class":2487},"# 查看下面命令是否输出dialout（若输出才正常）\n",[33,125476,125477],{"class":35,"line":87},[33,125478,125479],{"class":43},"groups\n",[19,125481,125482],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[631,125484,125486],{"id":125485},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125488,125489,125491],{},[2575,125490,1968],{}," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125493,125494,125497],{},[2575,125495,125496],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125499,125500],{},[2575,125501,125502],{},"流程如下：",[19,125504,125505],{},"（1）.查找设备idVendor和idProduct",[19,125507,125508,125509,125512],{},"接入两个USB设备，在终端调用指令",[30,125510,125511],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125514,125515],{},[3736,125516],{"alt":28,"src":125517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125519,125520,125521,125524],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[30,125522,125523],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125526,125527],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125529,125530],{},"（2）.编写映射规则",[19,125532,125533,125534,125537],{},"在",[30,125535,125536],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[23,125539,125541],{"className":119497,"code":125540,"language":119499,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[30,125542,125543],{"__ignoreMap":28},[33,125544,125545,125547,125549],{"class":35,"line":36},[33,125546,26815],{"class":43},[33,125548,120783],{"class":60},[33,125550,125551],{"class":60}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125553,125554],{},"输入如下内容：",[23,125556,125558],{"className":119497,"code":125557,"language":119499,"meta":28,"style":28},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[30,125559,125560,125590],{"__ignoreMap":28},[33,125561,125562,125565,125567,125570,125573,125576,125579,125581,125584,125587],{"class":35,"line":36},[33,125563,125564],{"class":47},"KERNEL",[33,125566,57],{"class":39},[33,125568,125569],{"class":60},"=\"ttyUSB*\",",[33,125571,125572],{"class":43}," ATTRS",[33,125574,125575],{"class":60},"{idVendor}==",[33,125577,125578],{"class":43},"\"10c4\"",[33,125580,2799],{"class":43},[33,125582,125583],{"class":60}," ATTRS{idProduct}==\"ea60\",",[33,125585,125586],{"class":60}," MODE:=\"0777\",",[33,125588,125589],{"class":60}," SYMLINK+=\"mylidar\"\n",[33,125591,125592,125594,125596,125598,125600,125602,125605,125607,125610,125612],{"class":35,"line":51},[33,125593,125564],{"class":47},[33,125595,57],{"class":39},[33,125597,125569],{"class":60},[33,125599,125572],{"class":43},[33,125601,125575],{"class":60},[33,125603,125604],{"class":43},"\"1a86\"",[33,125606,2799],{"class":43},[33,125608,125609],{"class":60}," ATTRS{idProduct}==\"7523\",",[33,125611,125586],{"class":60},[33,125613,125614],{"class":60}," SYMLINK+=\"mycar\"\n",[19,125616,125617],{},"代码解释：",[3413,125619,125620,125623,125626,125629],{},[331,125621,125622],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[331,125624,125625],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[331,125627,125628],{},"SYMLINK是符号连接，即绑定的别名；",[331,125630,125631],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125633,125634,125635,125638,125641],{},"***小提示：***",[25791,125636,125637],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[30,125639,125640],{},"\u002Fetc\u002Fudev\u002Frule.d",[25791,125642,125643],{},"目录即可。",[19,125645,125646],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125648,125649],{},"（3）.使规则生效",[19,125651,125652],{},"在终端下输入如下指令：",[23,125654,125656],{"className":119497,"code":125655,"language":119499,"meta":28,"style":28},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[30,125657,125658,125663,125675,125686,125690,125695,125708],{"__ignoreMap":28},[33,125659,125660],{"class":35,"line":36},[33,125661,125662],{"class":2487},"# Ubuntu用下方命令\n",[33,125664,125665,125667,125669,125672],{"class":35,"line":51},[33,125666,26815],{"class":43},[33,125668,122248],{"class":60},[33,125670,125671],{"class":60}," udev",[33,125673,125674],{"class":60}," reload\n",[33,125676,125677,125679,125681,125683],{"class":35,"line":64},[33,125678,26815],{"class":43},[33,125680,122248],{"class":60},[33,125682,125671],{"class":60},[33,125684,125685],{"class":60}," restart\n",[33,125687,125688],{"class":35,"line":76},[33,125689,100],{"emptyLinePlaceholder":99},[33,125691,125692],{"class":35,"line":87},[33,125693,125694],{"class":2487},"#Fedora用下方命令\n",[33,125696,125697,125699,125702,125705],{"class":35,"line":96},[33,125698,26815],{"class":43},[33,125700,125701],{"class":60}," udevadm",[33,125703,125704],{"class":60}," control",[33,125706,125707],{"class":72}," --reload\n",[33,125709,125710,125712,125714],{"class":35,"line":103},[33,125711,26815],{"class":43},[33,125713,125701],{"class":60},[33,125715,125716],{"class":60}," trigger\n",[19,125718,125719],{},"再重新插拔设备即可。",[19,125721,125722],{},"（4）.测试",[19,125724,125725],{},"终端下输入如下指令",[23,125727,125729],{"className":119497,"code":125728,"language":119499,"meta":28,"style":28},"ll \u002Fdev | grep ttyUSB\n",[30,125730,125731],{"__ignoreMap":28},[33,125732,125733,125736,125739,125741,125743],{"class":35,"line":36},[33,125734,125735],{"class":43},"ll",[33,125737,125738],{"class":60}," \u002Fdev",[33,125740,27348],{"class":39},[33,125742,32473],{"class":43},[33,125744,125745],{"class":60}," ttyUSB\n",[19,125747,125748],{},"运行结果如下：",[19,125750,125751],{},[3736,125752],{"alt":28,"src":125753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125755,125756,125757,125760],{},"也可以多次插拔USB设备，会发现设备端口",[30,125758,125759],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125762,125763],{},[2575,125764,120164],{},[19,125766,125767],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[631,125769,125771],{"id":125770},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125773,125774,125776],{},[2575,125775,1968],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125778,125779,125781],{},[2575,125780,125496],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125783,125784],{},[2575,125785,125502],{},[19,125787,125788],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125790,125791],{},"调用如下指令查看第一台雷达的USB信息：",[23,125793,125795],{"className":119497,"code":125794,"language":119499,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[30,125796,125797,125817],{"__ignoreMap":28},[33,125798,125799,125802,125804,125807,125810,125812,125814],{"class":35,"line":36},[33,125800,125801],{"class":43},"udevadm",[33,125803,72036],{"class":60},[33,125805,125806],{"class":72}," --attribute-walk",[33,125808,125809],{"class":72}," --name=\u002Fdev\u002FttyUSB0",[33,125811,27348],{"class":39},[33,125813,32473],{"class":43},[33,125815,125816],{"class":60}," KERNELS\n",[33,125818,125819,125821,125823,125825,125828,125830,125832],{"class":35,"line":51},[33,125820,125801],{"class":43},[33,125822,72036],{"class":60},[33,125824,125806],{"class":72},[33,125826,125827],{"class":72}," --name=\u002Fdev\u002FttyACM0",[33,125829,27348],{"class":39},[33,125831,32473],{"class":43},[33,125833,125816],{"class":60},[19,125835,125836],{},[3736,125837],{"alt":28,"src":125838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125840,125841],{},"调用如下指令查看第二台雷达的USB信息：",[23,125843,125845],{"className":119497,"code":125844,"language":119499,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[30,125846,125847],{"__ignoreMap":28},[33,125848,125849,125851,125853,125855,125858,125860,125862],{"class":35,"line":36},[33,125850,125801],{"class":43},[33,125852,72036],{"class":60},[33,125854,125806],{"class":72},[33,125856,125857],{"class":72}," --name=\u002Fdev\u002FttyUSB1",[33,125859,27348],{"class":39},[33,125861,32473],{"class":43},[33,125863,125816],{"class":60},[19,125865,125866,125867,125870,125871,125874,125875,125878],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[30,125868,125869],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[30,125872,125873],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2575,125876,125877],{},"唯一性标识","”。",[19,125880,125530],{},[19,125882,125533,125883,125885],{},[30,125884,125536],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[23,125887,125888],{"className":119497,"code":125540,"language":119499,"meta":28,"style":28},[30,125889,125890],{"__ignoreMap":28},[33,125891,125892,125894,125896],{"class":35,"line":36},[33,125893,26815],{"class":43},[33,125895,120783],{"class":60},[33,125897,125551],{"class":60},[23,125899,125901],{"className":119497,"code":125900,"language":119499,"meta":28,"style":28},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[30,125902,125903,125932],{"__ignoreMap":28},[33,125904,125905,125907,125909,125911,125914,125916,125919,125922,125924,125927,125929],{"class":35,"line":36},[33,125906,125564],{"class":47},[33,125908,57],{"class":39},[33,125910,125569],{"class":60},[33,125912,125913],{"class":47}," KERNELS",[33,125915,57],{"class":39},[33,125917,125918],{"class":60},"=\"1-1.3:1.0\",",[33,125920,125921],{"class":43}," MODE:",[33,125923,57],{"class":60},[33,125925,125926],{"class":43},"\"0777\"",[33,125928,2799],{"class":43},[33,125930,125931],{"class":60}," SYMLINK+=\"rplidar_front\"\n",[33,125933,125934,125936,125938,125940,125942,125944,125947,125949,125951,125953,125955],{"class":35,"line":51},[33,125935,125564],{"class":47},[33,125937,57],{"class":39},[33,125939,125569],{"class":60},[33,125941,125913],{"class":47},[33,125943,57],{"class":39},[33,125945,125946],{"class":60},"=\"1-1.4:1.0\",",[33,125948,125921],{"class":43},[33,125950,57],{"class":60},[33,125952,125926],{"class":43},[33,125954,2799],{"class":43},[33,125956,125957],{"class":60}," SYMLINK+=\"rplidar_back\"\n",[19,125959,125649],{},[19,125961,125652],{},[23,125963,125964],{"className":119497,"code":125655,"language":119499,"meta":28,"style":28},[30,125965,125966,125970,125980,125990,125994,125998,126008],{"__ignoreMap":28},[33,125967,125968],{"class":35,"line":36},[33,125969,125662],{"class":2487},[33,125971,125972,125974,125976,125978],{"class":35,"line":51},[33,125973,26815],{"class":43},[33,125975,122248],{"class":60},[33,125977,125671],{"class":60},[33,125979,125674],{"class":60},[33,125981,125982,125984,125986,125988],{"class":35,"line":64},[33,125983,26815],{"class":43},[33,125985,122248],{"class":60},[33,125987,125671],{"class":60},[33,125989,125685],{"class":60},[33,125991,125992],{"class":35,"line":76},[33,125993,100],{"emptyLinePlaceholder":99},[33,125995,125996],{"class":35,"line":87},[33,125997,125694],{"class":2487},[33,125999,126000,126002,126004,126006],{"class":35,"line":96},[33,126001,26815],{"class":43},[33,126003,125701],{"class":60},[33,126005,125704],{"class":60},[33,126007,125707],{"class":72},[33,126009,126010,126012,126014],{"class":35,"line":103},[33,126011,26815],{"class":43},[33,126013,125701],{"class":60},[33,126015,125716],{"class":60},[19,126017,125719],{},[19,126019,125722],{},[19,126021,125725,126022,126025],{},[30,126023,126024],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,126027,126028],{},[3736,126029],{"alt":28,"src":126030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,126032,126033],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,126035,126036,126038],{},[2575,126037,120164],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[631,126040,126042],{"id":126041},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,126044,126045],{},"（1）.查看所连接的主机USB接口的信息",[23,126047,126049],{"className":119497,"code":126048,"language":119499,"meta":28,"style":28},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[30,126050,126051,126081],{"__ignoreMap":28},[33,126052,126053,126055,126057,126060,126062,126064,126066,126068,126071,126074,126076,126079],{"class":35,"line":36},[33,126054,125801],{"class":43},[33,126056,72036],{"class":60},[33,126058,126059],{"class":72}," -a",[33,126061,31453],{"class":72},[33,126063,30659],{"class":47},[33,126065,125801],{"class":43},[33,126067,72036],{"class":60},[33,126069,126070],{"class":72}," -q",[33,126072,126073],{"class":60}," path",[33,126075,27354],{"class":72},[33,126077,126078],{"class":60}," \u002Fdev\u002FttyACM0",[33,126080,226],{"class":47},[33,126082,126083,126085,126087,126089,126091,126093,126095,126097,126099,126101,126103,126106],{"class":35,"line":51},[33,126084,125801],{"class":43},[33,126086,72036],{"class":60},[33,126088,126059],{"class":72},[33,126090,31453],{"class":72},[33,126092,30659],{"class":47},[33,126094,125801],{"class":43},[33,126096,72036],{"class":60},[33,126098,126070],{"class":72},[33,126100,126073],{"class":60},[33,126102,27354],{"class":72},[33,126104,126105],{"class":60}," \u002Fdev\u002FttyUSB0",[33,126107,226],{"class":47},[19,126109,126110],{},[3736,126111],{"alt":28,"src":126112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,126114,126115],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,126117,125530],{},[19,126119,125533,126120,125885],{},[30,126121,125536],{},[23,126123,126124],{"className":119497,"code":125540,"language":119499,"meta":28,"style":28},[30,126125,126126],{"__ignoreMap":28},[33,126127,126128,126130,126132],{"class":35,"line":36},[33,126129,26815],{"class":43},[33,126131,120783],{"class":60},[33,126133,125551],{"class":60},[23,126135,126137],{"className":119497,"code":126136,"language":119499,"meta":28,"style":28},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[30,126138,126139,126167,126193],{"__ignoreMap":28},[33,126140,126141,126143,126145,126148,126150,126152,126154,126156,126159,126162,126164],{"class":35,"line":36},[33,126142,125564],{"class":47},[33,126144,57],{"class":39},[33,126146,126147],{"class":60},"=\"ttyACM*\",",[33,126149,125572],{"class":43},[33,126151,125575],{"class":60},[33,126153,125604],{"class":43},[33,126155,2799],{"class":43},[33,126157,126158],{"class":60}," ATTRS{idProduct}==\"55d4\",",[33,126160,126161],{"class":60}," ATTRS{serial}==\"0001\",",[33,126163,125586],{"class":60},[33,126165,126166],{"class":60}," SYMLINK+=\"ttyACM_MCU\"\n",[33,126168,126169,126171,126173,126175,126177,126179,126181,126183,126185,126188,126190],{"class":35,"line":51},[33,126170,125564],{"class":47},[33,126172,57],{"class":39},[33,126174,126147],{"class":60},[33,126176,125572],{"class":43},[33,126178,125575],{"class":60},[33,126180,125604],{"class":43},[33,126182,2799],{"class":43},[33,126184,126158],{"class":60},[33,126186,126187],{"class":60}," ATTRS{serial}==\"0002\",",[33,126189,125586],{"class":60},[33,126191,126192],{"class":60}," SYMLINK+=\"ttyACM_Lidar\"\n",[33,126194,126195,126197,126199,126201,126203,126205,126207,126209,126211,126213],{"class":35,"line":64},[33,126196,125564],{"class":47},[33,126198,57],{"class":39},[33,126200,125569],{"class":60},[33,126202,125572],{"class":43},[33,126204,125575],{"class":60},[33,126206,125604],{"class":43},[33,126208,2799],{"class":43},[33,126210,125609],{"class":60},[33,126212,125586],{"class":60},[33,126214,126215],{"class":60}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,126217,125649],{},[19,126219,125652],{},[23,126221,126222],{"className":119497,"code":125655,"language":119499,"meta":28,"style":28},[30,126223,126224,126228,126238,126248,126252,126256,126266],{"__ignoreMap":28},[33,126225,126226],{"class":35,"line":36},[33,126227,125662],{"class":2487},[33,126229,126230,126232,126234,126236],{"class":35,"line":51},[33,126231,26815],{"class":43},[33,126233,122248],{"class":60},[33,126235,125671],{"class":60},[33,126237,125674],{"class":60},[33,126239,126240,126242,126244,126246],{"class":35,"line":64},[33,126241,26815],{"class":43},[33,126243,122248],{"class":60},[33,126245,125671],{"class":60},[33,126247,125685],{"class":60},[33,126249,126250],{"class":35,"line":76},[33,126251,100],{"emptyLinePlaceholder":99},[33,126253,126254],{"class":35,"line":87},[33,126255,125694],{"class":2487},[33,126257,126258,126260,126262,126264],{"class":35,"line":96},[33,126259,26815],{"class":43},[33,126261,125701],{"class":60},[33,126263,125704],{"class":60},[33,126265,125707],{"class":72},[33,126267,126268,126270,126272],{"class":35,"line":103},[33,126269,26815],{"class":43},[33,126271,125701],{"class":60},[33,126273,125716],{"class":60},[19,126275,126276,126277],{},"再重新插拔设备即可，或者 ",[2575,126278,126279],{},"直接重启系统。",[19,126281,125722],{},[19,126283,125725,126284,126025],{},[30,126285,126024],{},[19,126287,126288],{},[3736,126289],{"alt":28,"src":126290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126292,126033],{},[19,126294,126295,126297],{},[2575,126296,120164],{}," 一些设备可能没有串口号等。",[631,126299,126301],{"id":126300},"_744-其他注意事项","7.4.4 其他注意事项",[19,126303,126304,126305,126307,126308,126311,126312,20648,126315,126318,126319,126321],{},"并非所有的USB设备端口号都是",[30,126306,125759],{},"的格式，比如Arduino的端口号可能是",[30,126309,126310],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[30,126313,126314],{},"videon",[30,126316,126317],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[30,126320,126314],{},"端口，绑定时需要关联的也是该接口。",[19,126323,126324,126325,126328,126329,126332,126333,126335,126336,126339,126340,126343,126344,126347,126348,126347,126351,126347,126354,30622],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[30,126326,126327],{},"KERNEL==\"ttyUSB*\"","修改为",[30,126330,126331],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[30,126334,126327],{},"修改为类似于",[30,126337,126338],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[30,126341,126342],{},"video[0,2,4,6]","表示可以绑定的端口为",[30,126345,126346],{},"video0","或",[30,126349,126350],{},"video2",[30,126352,126353],{},"video4",[30,126355,126356],{},"video6",[14,126358,126360],{"id":126359},"_75-挂载内网网页","7.5 挂载内网网页",[19,126362,126363],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126365,126366],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126368,126369],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126371,126372,126373],{},"Termux 下载地址（F-Droid）：",[2663,126374,126375],{"href":126375,"rel":126376},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[26103],[19,126378,126379],{},"首先打开app后，先更新软件缓存：",[23,126381,126383],{"className":119497,"code":126382,"language":119499,"meta":28,"style":28},"pkg update\n",[30,126384,126385],{"__ignoreMap":28},[33,126386,126387,126390],{"class":35,"line":36},[33,126388,126389],{"class":43},"pkg",[33,126391,28480],{"class":60},[19,126393,126394],{},"然后换源",[23,126396,126398],{"className":119497,"code":126397,"language":119499,"meta":28,"style":28},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[30,126399,126400],{"__ignoreMap":28},[33,126401,126402,126404,126407],{"class":35,"line":36},[33,126403,125273],{"class":43},[33,126405,126406],{"class":47}," $PREFIX",[33,126408,126409],{"class":60},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126411,126412],{},"将该文件内容替换为下面：",[23,126414,126416],{"className":119497,"code":126415,"language":119499,"meta":28,"style":28},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[30,126417,126418],{"__ignoreMap":28},[33,126419,126420,126423,126426,126429],{"class":35,"line":36},[33,126421,126422],{"class":43},"deb",[33,126424,126425],{"class":60}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[33,126427,126428],{"class":60}," stable",[33,126430,126431],{"class":60}," main\n",[3413,126433,126434,126461],{},[331,126435,126436,126437,126439,126440],{},"如果你使用的是",[30,126438,125273],{},"编辑器：",[3413,126441,126442,126449,126455],{},[331,126443,126444,126445,126448],{},"按 ",[30,126446,126447],{},"Ctrl+O"," 保存文件。",[331,126450,126444,126451,126454],{},[30,126452,126453],{},"Enter"," 确认文件名。",[331,126456,126444,126457,126460],{},[30,126458,126459],{},"Ctrl+X"," 退出编辑器。",[331,126462,126436,126463,126439,126466],{},[30,126464,126465],{},"vim",[3413,126467,126468,126474],{},[331,126469,126444,126470,126473],{},[30,126471,126472],{},"Esc"," 退出编辑模式。",[331,126475,126476,126477,126479],{},"输入 ",[30,126478,121421],{}," 保存并退出。",[19,126481,126482],{},"接下来重新更新软件源：",[23,126484,126486],{"className":119497,"code":126485,"language":119499,"meta":28,"style":28},"pkg update && pkg upgrade\n",[30,126487,126488],{"__ignoreMap":28},[33,126489,126490,126492,126494,126496,126498],{"class":35,"line":36},[33,126491,126389],{"class":43},[33,126493,119548],{"class":60},[33,126495,28428],{"class":47},[33,126497,126389],{"class":43},[33,126499,119534],{"class":60},[19,126501,126502],{},"安装python：",[23,126504,126506],{"className":119497,"code":126505,"language":119499,"meta":28,"style":28},"pkg install python\n",[30,126507,126508],{"__ignoreMap":28},[33,126509,126510,126512,126514],{"class":35,"line":36},[33,126511,126389],{"class":43},[33,126513,26072],{"class":60},[33,126515,126516],{"class":60}," python\n",[19,126518,126519,28711],{},[2575,126520,126521],{},"通过Termux访问设备存储",[19,126523,126524],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[23,126526,126528],{"className":119497,"code":126527,"language":119499,"meta":28,"style":28},"termux-setup-storage\n",[30,126529,126530],{"__ignoreMap":28},[33,126531,126532],{"class":35,"line":36},[33,126533,126527],{"class":43},[328,126535,126536],{},[331,126537,126538,28711,126541],{},[2575,126539,126540],{},"进入HTML文件所在的目录",[328,126542,126543],{},[331,126544,126545,126546,126548],{},"使用",[30,126547,103482],{},"命令进入HTML文件所在的目录：",[23,126550,126552],{"className":119497,"code":126551,"language":119499,"meta":28,"style":28},"cd ~\u002Fyour_html_folder\n",[30,126553,126554],{"__ignoreMap":28},[33,126555,126556,126558],{"class":35,"line":36},[33,126557,103482],{"class":72},[33,126559,126560],{"class":60}," ~\u002Fyour_html_folder\n",[328,126562,126563],{"start":51},[331,126564,126565,28711,126568,126573,126590],{},[2575,126566,126567],{},"启动Python HTTP服务器",[328,126569,126570],{},[331,126571,126572],{},"运行以下命令启动一个简单的HTTP服务器：",[23,126574,126576],{"className":119497,"code":126575,"language":119499,"meta":28,"style":28},"python -m http.server 8000\n",[30,126577,126578],{"__ignoreMap":28},[33,126579,126580,126582,126584,126587],{"class":35,"line":36},[33,126581,27],{"class":43},[33,126583,103089],{"class":72},[33,126585,126586],{"class":60}," http.server",[33,126588,126589],{"class":72}," 8000\n",[328,126591,126592],{"start":64},[331,126593,126594,126595,126598],{},"这会在端口",[30,126596,126597],{},"8000","上启动一个Web服务器。",[3413,126600,126601],{},[331,126602,126603],{},"启动服务器后，Termux会显示日志信息，例如：",[23,126605,126607],{"className":123016,"code":126606,"language":123018,"meta":123019,"style":28},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[30,126608,126609],{"__ignoreMap":28},[33,126610,126611],{"class":35,"line":36},[33,126612,126606],{},[3413,126614,126615],{},[331,126616,126617],{},"这表示服务器已成功启动。",[19,126619,126620],{},[2575,126621,126622],{},"在浏览器中访问HTML文件",[328,126624,126625],{},[331,126626,126627,28711,126630,126635],{},[2575,126628,126629],{},"在同一设备上访问",[328,126631,126632],{},[331,126633,126634],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[23,126636,126639],{"className":126637,"code":126638,"language":73877,"meta":28,"style":28},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[30,126640,126641],{"__ignoreMap":28},[33,126642,126643,126646],{"class":35,"line":36},[33,126644,126645],{"class":47},"http:",[33,126647,126648],{"class":2487},"\u002F\u002Flocalhost:8000\n",[3413,126650,126651],{},[331,126652,126653,126654,126657],{},"如果HTML文件中有",[30,126655,126656],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126659,126661],{"id":126660},"_76-linux重点知识","7.6 Linux重点知识",[631,126663,126665],{"id":126664},"_761-关于点的说明","7.6.1 关于点的说明",[19,126667,126668],{},[3736,126669],{"alt":28,"src":126670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126672,126673],{},"一点本目录，两点上目录",[631,126675,126677],{"id":126676},"_762-目录","7.6.2 目录",[24236,126679,126681],{"id":126680},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126683,126684],{},[2575,126685,126686],{},"\u002Fboot:",[19,126688,126689],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126691,126692],{},[2575,126693,126694],{},"\u002Fetc:",[19,126696,126697],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126699,126700],{},[2575,126701,126702],{},"\u002Flib：",[19,126704,126705],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126707,126708],{},[2575,126709,126710],{},"\u002Fsys:",[19,126712,126713],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[24236,126715,126717],{"id":126716},"_7622-指令集合","7.6.2.2 指令集合",[19,126719,126720],{},[2575,126721,126722],{},"\u002Fbin:",[19,126724,126725],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126727,126728],{},[2575,126729,126730],{},"\u002Fsbin:",[19,126732,126733],{},"只有系统管理员才能使用的程序和指令",[24236,126735,126737],{"id":126736},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126739,126740],{},[2575,126741,126742],{},"\u002Fdev:",[19,126744,126745],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126747,126748],{},[2575,126749,126750],{},"\u002Fmedia:",[19,126752,126753],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126755,126756],{},[2575,126757,126758],{},"\u002Fmnt:",[19,126760,126761],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[24236,126763,126765],{"id":126764},"_7624-临时文件","7.6.2.4 临时文件",[19,126767,126768],{},[2575,126769,126770],{},"\u002Frun:",[19,126772,126773],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126775,126776],{},[2575,126777,126778],{},"\u002Flost+found:",[19,126780,126781],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126783,126784],{},[2575,126785,126786],{},"\u002Ftmp:",[19,126788,126789],{},"这个目录是用来存放一些临时文件的",[24236,126791,126793],{"id":126792},"_7625-账户","7.6.2.5 账户",[19,126795,126796],{},[2575,126797,126798],{},"\u002Froot：",[19,126800,126801],{},"系统管理员的用户主目录",[19,126803,126804,28711],{},[2575,126805,126806],{},"\u002Fhome",[19,126808,126809],{},"用户的主目录，以用户的账号命名的",[19,126811,126812,28711],{},[2575,126813,126814],{},"\u002Fusr",[19,126816,126817],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126819,126820],{},[2575,126821,126822],{},"\u002Fusr\u002Fbin：",[19,126824,126825],{},"系统用户使用的应用程序与指令",[19,126827,126828],{},[2575,126829,126830],{},"\u002Fusr\u002Fsbin：",[19,126832,126833],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126835,126836],{},[2575,126837,126838],{},"\u002Fusr\u002Fsrc：",[19,126840,126841],{},"内核源代码默认的放置目录",[24236,126843,126845],{"id":126844},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126847,126848],{},[2575,126849,126850],{},"\u002Fvar：",[19,126852,126853],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126855,126856],{},[2575,126857,126858],{},"\u002Fproc:",[19,126860,126861,126862,126865],{},"管理 ",[2575,126863,126864],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[24236,126867,126869],{"id":126868},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126871,126872],{},[2575,126873,126874],{},"\u002Fopt:",[19,126876,126877],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126879,126880],{},[2575,126881,126882],{},"\u002Fsrv:",[19,126884,126885],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[631,126887,126889],{"id":126888},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126891,126892],{},[3736,126893],{"alt":28,"src":126894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126896,126897],{},"windows-->linux:",[19,126899,126900],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126902,126903],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126905,126906],{},"linux传输文件到windows",[19,126908,126909],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[631,126911,126913],{"id":126912},"_764-易忘知识","7.6.4 易忘知识",[19,126915,126916],{},"操作系统内核查看",[23,126918,126919],{"className":119497,"code":123490,"language":119499,"meta":28,"style":28},[30,126920,126921],{"__ignoreMap":28},[33,126922,126923,126925],{"class":35,"line":36},[33,126924,72419],{"class":43},[33,126926,123499],{"class":72},[19,126928,126929],{},[3736,126930],{"alt":28,"src":126931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126933,126934],{},[3736,126935],{"alt":28,"src":126936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[23,126938,126940],{"className":119497,"code":126939,"language":119499,"meta":28,"style":28},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[30,126941,126942,126954],{"__ignoreMap":28},[33,126943,126944,126946,126949,126952],{"class":35,"line":36},[33,126945,123707],{"class":43},[33,126947,126948],{"class":60}," mvtest",[33,126950,126951],{"class":60}," mvtest2",[33,126953,4931],{"class":47},[33,126955,126956],{"class":35,"line":51},[33,126957,126958],{"class":43},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126960,126961],{},[3736,126962],{"alt":28,"src":126963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126965,126966],{},[3736,126967],{"alt":28,"src":126968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126970,126971,126972,126975],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[30,126973,126974],{},"du -a"," 可以快速查看磁盘使用细节。",[631,126977,126979],{"id":126978},"_765-vim","7.6.5 Vim",[19,126981,126982],{},[3736,126983],{"alt":28,"src":126984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126986,126987],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126989,126990],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126992,126993],{},[2575,126994,126995],{},"1.命令模式：",[19,126997,126998],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,127000,127001],{},"x 删除当前光标所在处的字符",[19,127003,127004],{},"：切换到底线命令模式，以在最底一行输入命令",[19,127006,127007],{},"a 进行插入模式，在光标下一个位置输入文本",[19,127009,127010],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,127012,127013],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,127015,127016],{},"dd 剪切当前行",[19,127018,127019],{},"yy 复制当前行",[19,127021,127022],{},"p 粘贴剪贴板内容到光标下方",[19,127024,127025],{},"P 粘贴剪贴板内容到光标上方",[19,127027,127028],{},"u 撤销上一次操作",[19,127030,127031],{},"ctrl+r 重做上一次操作",[19,127033,127034,127036],{},[3208,127035],{}," 保存文件",[19,127038,127039,127041],{},[3061,127040],{}," 退出Vim编辑器",[19,127043,127044,127046],{},[3061,127045],{},"! 强制退出Vim编辑器，不保存修改",[19,127048,127049],{},[2575,127050,127051],{},"2.输入模式：",[19,127053,127054],{},[3736,127055],{"alt":28,"src":127056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,127058,127059],{},[2575,127060,127061],{},"3.底线命令模式：",[19,127063,127064],{},[3736,127065],{"alt":28,"src":127066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,127068,127069],{},"按下esc可以退出底线命令模式",[631,127071,127073],{"id":127072},"_766-apt","7.6.6 apt",[19,127075,127076],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[631,127078,127080],{"id":127079},"_767-home与root的区别","7.6.7 home与root的区别",[19,127082,127083],{},[3736,127084],{"alt":28,"src":127085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,127087,127088],{},[3736,127089],{"alt":28,"src":127090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,127092,127093],{},[3736,127094],{"alt":28,"src":127095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,127097,127098],{},[3736,127099],{"alt":28,"src":127100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[631,127102,127104],{"id":127103},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,127106,127107],{},[2663,127108,127109],{"href":127109,"rel":127110},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[26103],[328,127112,127113,127116],{},[331,127114,127115],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[331,127117,127118],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,127120,127121],{},[3736,127122],{"alt":28,"src":127123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,127125,127126],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,127128,127129],{},[3736,127130],{"alt":28,"src":127131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[23,127133,127135],{"className":123016,"code":127134,"language":123018,"meta":123019,"style":28},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[30,127136,127137,127142],{"__ignoreMap":28},[33,127138,127139],{"class":35,"line":36},[33,127140,127141],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[33,127143,127144],{"class":35,"line":51},[33,127145,127146],{},".\u002Fpycharm.sh\n",[19,127148,127149],{},"3️⃣创建.desktop文件",[19,127151,127152],{},[2575,127153,127154],{},"原理：",[3413,127156,127157,127167],{},[331,127158,127159,127160,127166],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2575,127161,127162,127165],{},[30,127163,127164],{},".desktop"," 文件"," 来识别应用。",[331,127168,127169,127171,127172],{},[30,127170,127164],{}," 文件相当于一个“应用注册表”，告诉系统：",[3413,127173,127174,127177,127180,127183,127186],{},[331,127175,127176],{},"应用名字（Name）",[331,127178,127179],{},"图标（Icon）",[331,127181,127182],{},"执行命令（Exec）",[331,127184,127185],{},"分类（Categories）",[331,127187,127188],{},"是否需要终端（Terminal）",[23,127190,127192],{"className":123016,"code":127191,"language":123018,"meta":123019,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[30,127193,127194,127199],{"__ignoreMap":28},[33,127195,127196],{"class":35,"line":36},[33,127197,127198],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[33,127200,127201],{"class":35,"line":51},[33,127202,127203],{},"nano pycharm.desktop\n",[19,127205,127206],{},"nano是一个命令行下的编辑器，也可以使用vim",[23,127208,127210],{"className":123016,"code":127209,"language":123018,"meta":123019,"style":28},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[30,127211,127212,127217,127222,127227,127232,127237,127242,127247,127252,127257],{"__ignoreMap":28},[33,127213,127214],{"class":35,"line":36},[33,127215,127216],{},"[Desktop Entry]\n",[33,127218,127219],{"class":35,"line":51},[33,127220,127221],{},"Version=1.0\n",[33,127223,127224],{"class":35,"line":64},[33,127225,127226],{},"Type=Application\n",[33,127228,127229],{"class":35,"line":76},[33,127230,127231],{},"Name=PyCharm\n",[33,127233,127234],{"class":35,"line":87},[33,127235,127236],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[33,127238,127239],{"class":35,"line":96},[33,127240,127241],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[33,127243,127244],{"class":35,"line":103},[33,127245,127246],{},"Comment=JetBrains PyCharm IDE\n",[33,127248,127249],{"class":35,"line":108},[33,127250,127251],{},"Categories=Development;IDE;\n",[33,127253,127254],{"class":35,"line":119},[33,127255,127256],{},"Terminal=false\n",[33,127258,127259],{"class":35,"line":128},[33,127260,127261],{},"StartupWMClass=jetbrains-pycharm\n",[3413,127263,127264,127270,127276,127282],{},[331,127265,127266,127269],{},[30,127267,127268],{},"Exec"," → 点击图标时执行的命令",[331,127271,127272,127275],{},[30,127273,127274],{},"Icon"," → 显示在菜单和桌面上的图标",[331,127277,127278,127281],{},[30,127279,127280],{},"Terminal=false"," → 不打开终端",[331,127283,127284,127287],{},[30,127285,127286],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127289,127290,127291],"blockquote",{},[19,127292,127293,127294,127296,127297],{},"可以理解成 ",[30,127295,127164],{}," 文件是 Linux 的 ",[2575,127298,127299],{},"快捷方式配置文件",[19,127301,127302],{},"4️⃣设置可执行权限",[23,127304,127306],{"className":123016,"code":127305,"language":123018,"meta":123019,"style":28},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[30,127307,127308],{"__ignoreMap":28},[33,127309,127310],{"class":35,"line":36},[33,127311,127305],{},[19,127313,127314],{},"5️⃣桌面图标启动的话如下：",[23,127316,127318],{"className":123016,"code":127317,"language":123018,"meta":123019,"style":28},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[30,127319,127320,127325],{"__ignoreMap":28},[33,127321,127322],{"class":35,"line":36},[33,127323,127324],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[33,127326,127327],{"class":35,"line":51},[33,127328,127329],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[328,127331,127332],{"start":64},[331,127333,127334],{},"下载Appimage文件实现软件的安装",[19,127336,127337],{},"1️⃣先下载appimage",[19,127339,127340],{},[2663,127341,127342],{"href":127342,"rel":127343},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[26103],[19,127345,127346],{},[3736,127347],{"alt":28,"src":127348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127350,127351],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127353,127354],{},[3736,127355],{"alt":28,"src":127356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127358,127359],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127361,127362],{},[3736,127363],{"alt":28,"src":127364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127366,127367],{},[3736,127368],{"alt":28,"src":127369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127371,127372,127373,127376],{},"3️⃣给他们放在",[30,127374,127375],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127378,127379],{},"4️⃣给软件执行权限",[23,127381,127383],{"className":123016,"code":127382,"language":123018,"meta":123019,"style":28},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[30,127384,127385,127390],{"__ignoreMap":28},[33,127386,127387],{"class":35,"line":36},[33,127388,127389],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[33,127391,127392],{"class":35,"line":51},[33,127393,127394],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127396,127397],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[23,127399,127401],{"className":119497,"code":127400,"language":119499,"meta":28,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[30,127402,127403,127410,127417,127423],{"__ignoreMap":28},[33,127404,127405,127407],{"class":35,"line":36},[33,127406,103482],{"class":72},[33,127408,127409],{"class":60}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[33,127411,127412,127414],{"class":35,"line":51},[33,127413,103489],{"class":43},[33,127415,127416],{"class":60}," .\u002Fqqmusic.desktop\n",[33,127418,127419,127421],{"class":35,"line":64},[33,127420,126465],{"class":43},[33,127422,127416],{"class":60},[33,127424,127425,127427,127429,127431],{"class":35,"line":76},[33,127426,26815],{"class":43},[33,127428,26818],{"class":60},[33,127430,125332],{"class":60},[33,127432,127416],{"class":60},[19,127434,127435,127437],{},[30,127436,103489],{},"：一个 Linux 命令，主要功能是：",[3413,127439,127440,127443],{},[331,127441,127442],{},"如果文件不存在，就创建一个新的空文件",[331,127444,127445],{},"如果文件已存在，就更新该文件的最后修改时间",[23,127447,127449],{"className":123016,"code":127448,"language":123018,"meta":123019,"style":28},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[30,127450,127451,127455,127460,127465,127470,127474,127479],{"__ignoreMap":28},[33,127452,127453],{"class":35,"line":36},[33,127454,127216],{},[33,127456,127457],{"class":35,"line":51},[33,127458,127459],{},"Name=QQ音乐\n",[33,127461,127462],{"class":35,"line":64},[33,127463,127464],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[33,127466,127467],{"class":35,"line":76},[33,127468,127469],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[33,127471,127472],{"class":35,"line":87},[33,127473,127226],{},[33,127475,127476],{"class":35,"line":96},[33,127477,127478],{},"Categories=Audio;Music;Player;\n",[33,127480,127481],{"class":35,"line":103},[33,127482,127483],{},"Comment=QQ Music Client for Linux\n",[19,127485,127486],{},"将文件复制进去",[19,127488,127489],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127491,127492],{},[3736,127493],{"alt":28,"src":127494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127496,127497],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127499,127500],{},[3736,127501],{"alt":28,"src":127502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127504,127505,127506,127509,127510,127513],{},"如果你用的不是KDE，那么也可以直接修改",[30,127507,127508],{},"qqmuic.desktop","：在exec的末尾加上",[30,127511,127512],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[23,127515,127517],{"className":123016,"code":127516,"language":123018,"meta":123019,"style":28},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[30,127518,127519,127523,127527,127532,127536,127540,127544],{"__ignoreMap":28},[33,127520,127521],{"class":35,"line":36},[33,127522,127216],{},[33,127524,127525],{"class":35,"line":51},[33,127526,127459],{},[33,127528,127529],{"class":35,"line":64},[33,127530,127531],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[33,127533,127534],{"class":35,"line":76},[33,127535,127469],{},[33,127537,127538],{"class":35,"line":87},[33,127539,127226],{},[33,127541,127542],{"class":35,"line":96},[33,127543,127478],{},[33,127545,127546],{"class":35,"line":103},[33,127547,127483],{},[19,127549,127550],{},[3736,127551],{"alt":28,"src":127552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127554,127555],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[23,127557,127559],{"className":123016,"code":127558,"language":123018,"meta":123019,"style":28},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[30,127560,127561],{"__ignoreMap":28},[33,127562,127563],{"class":35,"line":36},[33,127564,127558],{},[328,127566,127567],{"start":76},[331,127568,127569],{},"去Flathub上安装软件",[19,127571,127572],{},[2663,127573,127574],{"href":127574,"rel":127575},"https:\u002F\u002Fflathub.org\u002F",[26103],[19,127577,127578],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127580,127581],{},[3736,127582],{"alt":28,"src":127583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[23,127585,127587],{"className":123016,"code":127586,"language":123018,"meta":123019,"style":28},"flatpak install flathub com.obsproject.Studio\n",[30,127588,127589],{"__ignoreMap":28},[33,127590,127591],{"class":35,"line":36},[33,127592,127586],{},[19,127594,127595],{},[3736,127596],{"alt":28,"src":127597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127599,127600],{},"2️⃣运行软件",[19,127602,127603],{},"a.官方方式：",[19,127605,127606],{},[3736,127607],{"alt":28,"src":127608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[23,127610,127611],{"className":123016,"code":127586,"language":123018,"meta":123019,"style":28},[30,127612,127613],{"__ignoreMap":28},[33,127614,127615],{"class":35,"line":36},[33,127616,127586],{},[19,127618,127619],{},"b.当普通软件运行：",[19,127621,127622],{},[3736,127623],{"alt":28,"src":127624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127626,127627],{},[3736,127628],{"alt":28,"src":127629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2331,127631,127632],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":28,"searchDepth":51,"depth":51,"links":127634},[127635,127636,127641,127642,127648,127649],{"id":124368,"depth":51,"text":124369},{"id":124710,"depth":51,"text":124711,"children":127637},[127638,127639,127640],{"id":124714,"depth":64,"text":124715},{"id":124781,"depth":64,"text":124782},{"id":125042,"depth":64,"text":125043},{"id":125195,"depth":51,"text":125196},{"id":125433,"depth":51,"text":125434,"children":127643},[127644,127645,127646,127647],{"id":125485,"depth":64,"text":125486},{"id":125770,"depth":64,"text":125771},{"id":126041,"depth":64,"text":126042},{"id":126300,"depth":64,"text":126301},{"id":126359,"depth":51,"text":126360},{"id":126660,"depth":51,"text":126661,"children":127650},[127651,127652,127653,127654,127655,127656,127657,127658],{"id":126664,"depth":64,"text":126665},{"id":126676,"depth":64,"text":126677},{"id":126888,"depth":64,"text":126889},{"id":126912,"depth":64,"text":126913},{"id":126978,"depth":64,"text":126979},{"id":127072,"depth":64,"text":127073},{"id":127079,"depth":64,"text":127080},{"id":127103,"depth":64,"text":127104},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124360,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127665,"title":127666,"body":127667,"description":2359,"extension":2360,"meta":127671,"navigation":99,"path":127672,"seo":127673,"stem":127674,"__hash__":127675},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127668,"toc":127669},[],{"title":28,"searchDepth":51,"depth":51,"links":127670},[],{"category":32500},"\u002Fwiki\u002F2025-01-27-linux",{"title":127666,"description":2359},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127677,"title":127678,"body":127679,"description":127683,"extension":2360,"meta":128074,"navigation":99,"path":128075,"seo":128076,"stem":128077,"__hash__":128078},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127680,"toc":128072},[127681,127684,127688,127705,127708,127761,127765,127767,127807,127816,127820,127823,128064,128069],[19,127682,127683],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127685,127687],{"id":127686},"_1ubuntu环境配置","1.Ubuntu环境配置",[328,127689,127690,127693,127696,127699,127702],{},[331,127691,127692],{},"ubuntu环境换源",[331,127694,127695],{},"安装cuda",[331,127697,127698],{},"安装miniconda",[331,127700,127701],{},"安装pytorch",[331,127703,127704],{},"安装genesis",[19,127706,127707],{},"参考链接：",[23,127709,127711],{"className":26060,"code":127710,"language":26062,"meta":28,"style":28},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[30,127712,127713],{"__ignoreMap":28},[33,127714,127715,127718,127721,127724,127726,127729,127732,127734,127737,127740,127742,127745,127748,127750,127753,127756,127758],{"class":35,"line":36},[33,127716,127717],{"class":43},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[33,127719,127720],{"class":60},"=blogdetail",[33,127722,127723],{"class":47},"&sharetype",[33,127725,57],{"class":39},[33,127727,127728],{"class":60},"blogdetail",[33,127730,127731],{"class":47},"&sharerId",[33,127733,57],{"class":39},[33,127735,127736],{"class":60},"144728092",[33,127738,127739],{"class":47},"&sharerefer",[33,127741,57],{"class":39},[33,127743,127744],{"class":60},"PC",[33,127746,127747],{"class":47},"&sharesource",[33,127749,57],{"class":39},[33,127751,127752],{"class":60},"qq_69379513",[33,127754,127755],{"class":47},"&sharefrom",[33,127757,57],{"class":39},[33,127759,127760],{"class":60},"from_link\n",[10,127762,127764],{"id":127763},"_2genesis-报错issue","2.Genesis 报错issue",[19,127766,127707],{},[23,127768,127769],{"className":26060,"code":127710,"language":26062,"meta":28,"style":28},[30,127770,127771],{"__ignoreMap":28},[33,127772,127773,127775,127777,127779,127781,127783,127785,127787,127789,127791,127793,127795,127797,127799,127801,127803,127805],{"class":35,"line":36},[33,127774,127717],{"class":43},[33,127776,127720],{"class":60},[33,127778,127723],{"class":47},[33,127780,57],{"class":39},[33,127782,127728],{"class":60},[33,127784,127731],{"class":47},[33,127786,57],{"class":39},[33,127788,127736],{"class":60},[33,127790,127739],{"class":47},[33,127792,57],{"class":39},[33,127794,127744],{"class":60},[33,127796,127747],{"class":47},[33,127798,57],{"class":39},[33,127800,127752],{"class":60},[33,127802,127755],{"class":47},[33,127804,57],{"class":39},[33,127806,127760],{"class":60},[23,127808,127810],{"className":26060,"code":127809,"language":26062,"meta":28,"style":28},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[30,127811,127812],{"__ignoreMap":28},[33,127813,127814],{"class":35,"line":36},[33,127815,127809],{"class":43},[10,127817,127819],{"id":127818},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127821,127822],{},"hello_robot.py",[23,127824,127826],{"className":25,"code":127825,"language":27,"meta":28,"style":28},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[30,127827,127828,127834,127849,127853,127865,127877,127881,127894,127898,127917,127927,127937,127951,127955,127959,127964,127968,127978,127985,127999,128006,128016,128021,128025,128043,128048,128052,128059],{"__ignoreMap":28},[33,127829,127830,127832],{"class":35,"line":36},[33,127831,32627],{"class":39},[33,127833,47528],{"class":47},[33,127835,127836,127839,127842,127844,127846],{"class":35,"line":51},[33,127837,127838],{"class":47},"os.environ[",[33,127840,127841],{"class":60},"'PYOPENGL_PLATFORM'",[33,127843,2172],{"class":47},[33,127845,57],{"class":39},[33,127847,127848],{"class":60}," 'glx'\n",[33,127850,127851],{"class":35,"line":64},[33,127852,100],{"emptyLinePlaceholder":99},[33,127854,127855,127857,127860,127862],{"class":35,"line":76},[33,127856,32627],{"class":39},[33,127858,127859],{"class":47}," genesis ",[33,127861,33613],{"class":39},[33,127863,127864],{"class":47}," gs\n",[33,127866,127867,127869,127872,127874],{"class":35,"line":87},[33,127868,32970],{"class":39},[33,127870,127871],{"class":47}," pynput ",[33,127873,32627],{"class":39},[33,127875,127876],{"class":47}," keyboard\n",[33,127878,127879],{"class":35,"line":96},[33,127880,100],{"emptyLinePlaceholder":99},[33,127882,127883,127886,127889,127891],{"class":35,"line":103},[33,127884,127885],{"class":47},"gs.init(",[33,127887,127888],{"class":289},"backend",[33,127890,57],{"class":39},[33,127892,127893],{"class":47},"gs.gpu)\n",[33,127895,127896],{"class":35,"line":108},[33,127897,100],{"emptyLinePlaceholder":99},[33,127899,127900,127903,127905,127908,127911,127913,127915],{"class":35,"line":119},[33,127901,127902],{"class":47},"scene ",[33,127904,57],{"class":39},[33,127906,127907],{"class":47}," gs.Scene(",[33,127909,127910],{"class":289},"show_viewer",[33,127912,57],{"class":39},[33,127914,1190],{"class":72},[33,127916,226],{"class":47},[33,127918,127919,127922,127924],{"class":35,"line":128},[33,127920,127921],{"class":47},"plane ",[33,127923,57],{"class":39},[33,127925,127926],{"class":47}," scene.add_entity(gs.morphs.Plane())\n",[33,127928,127929,127932,127934],{"class":35,"line":1753},[33,127930,127931],{"class":47},"franka ",[33,127933,57],{"class":39},[33,127935,127936],{"class":47}," scene.add_entity(\n",[33,127938,127939,127942,127944,127946,127949],{"class":35,"line":1763},[33,127940,127941],{"class":47},"    gs.morphs.MJCF(",[33,127943,47577],{"class":289},[33,127945,57],{"class":39},[33,127947,127948],{"class":60},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[33,127950,40272],{"class":47},[33,127952,127953],{"class":35,"line":1775},[33,127954,226],{"class":47},[33,127956,127957],{"class":35,"line":1780},[33,127958,100],{"emptyLinePlaceholder":99},[33,127960,127961],{"class":35,"line":1785},[33,127962,127963],{"class":47},"scene.build()\n",[33,127965,127966],{"class":35,"line":1940},[33,127967,100],{"emptyLinePlaceholder":99},[33,127969,127970,127972,127975],{"class":35,"line":2183},[33,127971,40],{"class":39},[33,127973,127974],{"class":43}," on_press",[33,127976,127977],{"class":47},"(key):\n",[33,127979,127980,127983],{"class":35,"line":2208},[33,127981,127982],{"class":39},"    try",[33,127984,605],{"class":47},[33,127986,127987,127989,127992,127994,127997],{"class":35,"line":2234},[33,127988,2130],{"class":39},[33,127990,127991],{"class":47}," key.char ",[33,127993,5206],{"class":39},[33,127995,127996],{"class":60}," 'q'",[33,127998,605],{"class":47},[33,128000,128001,128003],{"class":35,"line":2239},[33,128002,17970],{"class":39},[33,128004,128005],{"class":72}," False\n",[33,128007,128008,128011,128014],{"class":35,"line":2247},[33,128009,128010],{"class":39},"    except",[33,128012,128013],{"class":72}," AttributeError",[33,128015,605],{"class":47},[33,128017,128018],{"class":35,"line":2255},[33,128019,128020],{"class":39},"        pass\n",[33,128022,128023],{"class":35,"line":3992},[33,128024,100],{"emptyLinePlaceholder":99},[33,128026,128027,128030,128032,128035,128038,128040],{"class":35,"line":4009},[33,128028,128029],{"class":47},"listener ",[33,128031,57],{"class":39},[33,128033,128034],{"class":47}," keyboard.Listener(",[33,128036,128037],{"class":289},"on_press",[33,128039,57],{"class":39},[33,128041,128042],{"class":47},"on_press)\n",[33,128044,128045],{"class":35,"line":4014},[33,128046,128047],{"class":47},"listener.start()\n",[33,128049,128050],{"class":35,"line":4019},[33,128051,100],{"emptyLinePlaceholder":99},[33,128053,128054,128056],{"class":35,"line":4024},[33,128055,110866],{"class":39},[33,128057,128058],{"class":47}," listener.running:\n",[33,128060,128061],{"class":35,"line":4038},[33,128062,128063],{"class":47},"    scene.step()\n",[19,128065,128066],{},[3736,128067],{"alt":28,"src":128068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2331,128070,128071],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":28,"searchDepth":51,"depth":51,"links":128073},[],{"category":25616},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127678,"description":127683},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":128080,"title":128081,"body":128082,"description":2359,"extension":2360,"meta":128097,"navigation":99,"path":128098,"seo":128099,"stem":128100,"__hash__":128101},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":128083,"toc":128094},[128084,128087,128091],[10,128085,128081],{"id":128086},"_1-基础知识",[14,128088,128090],{"id":128089},"_11-js的组成","1.1 js的组成",[19,128092,128093],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":28,"searchDepth":51,"depth":51,"links":128095},[128096],{"id":128089,"depth":51,"text":128090},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":128081,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":128103,"title":128104,"body":128105,"description":2359,"extension":2360,"meta":128244,"navigation":99,"path":128245,"seo":128246,"stem":128247,"__hash__":128248},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":128106,"toc":128232},[128107,128110,128114,128117,128121,128131,128135,128138,128141,128144,128148,128155,128161,128165,128171,128182,128186,128189,128193,128196,128200,128203,128207,128210,128214,128217,128220,128223,128226,128229],[10,128108,128104],{"id":128109},"_2-vscode必备内容",[14,128111,128113],{"id":128112},"_21-标签分类","2.1 标签分类",[19,128115,128116],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,128118,128120],{"id":128119},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,128122,128123,128124,128126,128127,128130],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[30,128125,2651],{}," 然后按 ",[30,128128,128129],{},"Tab","，快速自动生成基本结构。",[14,128132,128134],{"id":128133},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,128136,128137],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,128139,128140],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,128142,128143],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,128145,128147],{"id":128146},"_24-视图缩放","2.4 视图缩放",[19,128149,128150,128151,128154],{},"缩放视图 ",[30,128152,128153],{},"ctrl+"," 可实现代码增大。",[19,128156,128157,128160],{},[30,128158,128159],{},"ctrl-"," 可实现代码减小。",[14,128162,128164],{"id":128163},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,128166,128167,128168,30622],{},"VSCode 新建文件快捷键为 ",[30,128169,128170],{},"ctrl+N",[19,128172,128173,128174,128177,128178,128181],{},"保存快捷键为 ",[30,128175,128176],{},"ctrl+S","，将文本保存为 ",[30,128179,128180],{},".html"," 文件。",[14,128183,128185],{"id":128184},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,128187,128188],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,128190,128192],{"id":128191},"_27-vscode-icons","2.7 vscode-icons",[19,128194,128195],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,128197,128199],{"id":128198},"_28-easy-less","2.8 Easy LESS",[19,128201,128202],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,128204,128206],{"id":128205},"_29-会了吧插件","2.9 会了吧插件",[19,128208,128209],{},"会了吧插件可以展示代码中英语单词的意思。",[14,128211,128213],{"id":128212},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,128215,128216],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,128218,128219],{},"②选定多个相同的单词:ctrl+D",[19,128221,128222],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,128224,128225],{},"④全局替换某些单词:ctrl+h",[19,128227,128228],{},"⑤快速定位到某一行:ctrl+g",[19,128230,128231],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":28,"searchDepth":51,"depth":51,"links":128233},[128234,128235,128236,128237,128238,128239,128240,128241,128242,128243],{"id":128112,"depth":51,"text":128113},{"id":128119,"depth":51,"text":128120},{"id":128133,"depth":51,"text":128134},{"id":128146,"depth":51,"text":128147},{"id":128163,"depth":51,"text":128164},{"id":128184,"depth":51,"text":128185},{"id":128191,"depth":51,"text":128192},{"id":128198,"depth":51,"text":128199},{"id":128205,"depth":51,"text":128206},{"id":128212,"depth":51,"text":128213},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":128104,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":128250,"title":128251,"body":128252,"description":2359,"extension":2360,"meta":128411,"navigation":99,"path":128412,"seo":128413,"stem":128414,"__hash__":128415},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":128253,"toc":128403},[128254,128257,128261,128271,128277,128283,128287,128296,128300,128305,128308,128311,128315,128318,128328,128337,128346,128355,128365,128372,128377,128382,128395],[10,128255,128251],{"id":128256},"_3-html文本与容器标签",[14,128258,128260],{"id":128259},"_31-标题标签","3.1 标题标签",[19,128262,128263,128266,128267,128270],{},[30,128264,128265],{},"\u003Ch1>","我是一级标签",[30,128268,128269],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,128272,128273,128266,128275],{},[30,128274,128265],{},[30,128276,128269],{},[19,128278,125533,128279,128282],{},[30,128280,128281],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,128284,128286],{"id":128285},"_32-段落标签","3.2 段落标签",[19,128288,128289,128292,128293],{},[30,128290,128291],{},"\u003Cp>","....",[30,128294,128295],{},"\u003C\u002Fp>",[14,128297,128299],{"id":128298},"_33-换行标签","3.3 换行标签",[19,128301,128302],{},[30,128303,128304],{},"\u003Cbr \u002F>",[19,128306,128307],{},"具有强制换行的作用",[19,128309,128310],{},"单标签",[14,128312,128314],{"id":128313},"_34-文本格式化标签","3.4 文本格式化标签",[19,128316,128317],{},"提供粗体、斜体和下划线等效果",[19,128319,128320,128321,84748,128324,128327],{},"加粗：",[30,128322,128323],{},"\u003Cstrong>...\u003C\u002Fstrong>",[30,128325,128326],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128329,128330,128331,84748,128334,128327],{},"斜体：",[30,128332,128333],{},"\u003Cem>...\u003C\u002Fem>",[30,128335,128336],{},"\u003Ci>...\u003C\u002Fi>",[19,128338,128339,128340,84748,128343,128327],{},"删除线：",[30,128341,128342],{},"\u003Cdel>...\u003C\u002Fdel>",[30,128344,128345],{},"\u003Cs>...\u003C\u002Fs>",[19,128347,128348,128349,84748,128352,128327],{},"下划线：",[30,128350,128351],{},"\u003Cins>...\u003C\u002Fins>",[30,128353,128354],{},"\u003Cu>...\u003C\u002Fu>",[14,128356,128358,128359,20648,128362,104898],{"id":128357},"_35-div和span标签","3.5 ",[30,128360,128361],{},"\u003Cdiv>",[30,128363,128364],{},"\u003Cspan>",[19,128366,128367,1958,128369,128371],{},[30,128368,128361],{},[30,128370,128364],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128373,128374],{},[30,128375,128376],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128378,128379],{},[30,128380,128381],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128383,128384,128385,128387,128388,128390,128391,128394],{},"两者特点：①",[30,128386,128361],{}," 标签用来布局，但一行通常只放一个 ",[30,128389,128361],{},"。可以理解为一个大盒子，独占一行，在 ",[30,128392,128393],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128396,79460,128397,128399,128400,128402],{},[30,128398,128364],{}," 标签也可用于布局，一行可以放多个 ",[30,128401,128364],{},"，可理解为小盒子。",{"title":28,"searchDepth":51,"depth":51,"links":128404},[128405,128406,128407,128408,128409],{"id":128259,"depth":51,"text":128260},{"id":128285,"depth":51,"text":128286},{"id":128298,"depth":51,"text":128299},{"id":128313,"depth":51,"text":128314},{"id":128357,"depth":51,"text":128410},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":128251,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128417,"title":128418,"body":128419,"description":2359,"extension":2360,"meta":128616,"navigation":99,"path":128617,"seo":128618,"stem":128619,"__hash__":128620},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128420,"toc":128608},[128421,128424,128428,128431,128437,128444,128450,128456,128459,128462,128465,128468,128471,128474,128477,128481,128484,128487,128490,128496,128502,128508,128515,128519,128525,128531,128534,128537,128543,128549,128555,128558,128561,128565,128568,128578,128584,128588,128597,128601,128604],[10,128422,128418],{"id":128423},"_4-html图像与链接",[14,128425,128427],{"id":128426},"_41-图像标签","4.1 图像标签",[19,128429,128430],{},"（1）标签",[19,128432,128433,128436],{},[30,128434,128435],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128438,128439,128440,128443],{},"src是",[30,128441,128442],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128445,128446,128447],{},"alt:文本，替换文本。图像不能显示的文字 ",[30,128448,128449],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128451,128452,128453],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[30,128454,128455],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128457,128458],{},"width:像素，设置图像的宽度",[19,128460,128461],{},"height:像素，设置图像的高度",[19,128463,128464],{},"border：像素，设置图像的边框粗细",[19,128466,128467],{},"（2）图像标签属性的注意点：",[19,128469,128470],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128472,128473],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128475,128476],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128478,128480],{"id":128479},"_42-路径注意要点","4.2 路径注意要点：",[19,128482,128483],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128485,128486],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128488,128489],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128491,128492,128493],{},"①同一级路径：图像文件位于HTML文件同一级，如",[30,128494,128495],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128497,128498,128499],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[30,128500,128501],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128503,128504,128505],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[30,128506,128507],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128509,128510,128511,397],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2663,128512,128513],{"href":128513,"rel":128514},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[26103],[14,128516,128518],{"id":128517},"_43-超链接标签","4.3 超链接标签",[19,128520,128521,128524],{},[30,128522,128523],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128526,128527,128528],{},"①语法格式：",[30,128529,128530],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128532,128533],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128535,128536],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128538,128539,128540],{},"③链接分类：外部链接：",[30,128541,128542],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128544,128545,128546],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[30,128547,128548],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128550,128551,128552],{},"空链接：如果当时没有确定链接目标时，",[30,128553,128554],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128556,128557],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128559,128560],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128562,128564],{"id":128563},"_44-锚点链接","4.4 锚点链接",[19,128566,128567],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128569,128570,128571,128574,128575],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[30,128572,128573],{},"\u003Ca href=\"#two\">","第二级",[30,128576,128577],{},"\u003C\u002Fa>",[19,128579,128580,128581],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[30,128582,128583],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128585,128587],{"id":128586},"_45-注释标签","4.5 注释标签",[19,128589,128590,128593,128594],{},[30,128591,128592],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[30,128595,128596],{},"ctrl+\u002F",[14,128598,128600],{"id":128599},"_46-特殊字符","4.6 特殊字符",[19,128602,128603],{},"可以实现添加多个空格",[3736,128605],{"style":128606,"src":128607},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":28,"searchDepth":51,"depth":51,"links":128609},[128610,128611,128612,128613,128614,128615],{"id":128426,"depth":51,"text":128427},{"id":128479,"depth":51,"text":128480},{"id":128517,"depth":51,"text":128518},{"id":128563,"depth":51,"text":128564},{"id":128586,"depth":51,"text":128587},{"id":128599,"depth":51,"text":128600},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128418,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128622,"title":128623,"body":128624,"description":2359,"extension":2360,"meta":128917,"navigation":99,"path":128918,"seo":128919,"stem":128920,"__hash__":128921},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128625,"toc":128908},[128626,128629,128633,128636,128639,128642,128645,128648,128651,128654,128657,128660,128680,128686,128690,128693,128696,128699,128702,128705,128708,128712,128715,128718,128721,128724,128737,128742,128745,128748,128763,128766,128769,128772,128775,128778,128782,128785,128792,128795,128798,128801,128804,128807,128813,128816,128819,128825,128828,128831,128834,128840,128843,128846,128860,128867,128870,128873,128880,128889,128892,128895,128898,128902,128905],[10,128627,128623],{"id":128628},"_5-html表格列表与表单",[14,128630,128632],{"id":128631},"_51-表格标签","5.1 表格标签",[19,128634,128635],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128637,128638],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128640,128641],{},"②表格基本语法：",[3736,128643],{"style":128606,"src":128644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128646,128647],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3736,128649],{"style":128606,"src":128650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128652,128653],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3736,128655],{"style":128606,"src":128656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128658,128659],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128661,128662,128665,128666,128668,128669,128672,128673,128675,128676,128679],{},[30,128663,128664],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[30,128667,128664],{},"内部必须拥有",[30,128670,128671],{},"\u003Ctr>","标签，一般位于第一行，",[30,128674,128664],{},"比",[30,128677,128678],{},"\u003Cth>","范围广",[19,128681,128682,128685],{},[30,128683,128684],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128687,128689],{"id":128688},"_52-合并单元格","5.2 合并单元格",[19,128691,128692],{},"（1）合并单元格方式：",[19,128694,128695],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128697,128698],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128700,128701],{},"（2）目标单元格：",[19,128703,128704],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128706,128707],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128709,128711],{"id":128710},"_53-列表标签","5.3 列表标签",[19,128713,128714],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128716,128717],{},"①无序列表：",[3736,128719],{"style":128606,"src":128720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128722,128723],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128725,128726,128729,128730,128733,128734,128736],{},[30,128727,128728],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[30,128731,128732],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[30,128735,128728],{},"中输入其他标签或文字是不对的",[19,128738,128739,128741],{},[30,128740,128732],{},"之间相当于一个容器，可以容纳所有元素",[19,128743,128744],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128746,128747],{},"在css中去除前边的小圆点采用如下代码:",[23,128749,128753],{"className":128750,"code":128751,"language":128752,"meta":28,"style":28},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[30,128754,128755],{"__ignoreMap":28},[33,128756,128757,128760],{"class":35,"line":36},[33,128758,128759],{"class":53522},"list-style",[33,128761,128762],{"class":47},": none;\n",[19,128764,128765],{},"②有序列表：",[3736,128767],{"style":128606,"src":128768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128770,128771],{},"③自定义列表：",[3736,128773],{"style":128606,"src":128774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3736,128776],{"style":128606,"src":128777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128779,128781],{"id":128780},"_54-表单标签","5.4 表单标签",[19,128783,128784],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128786,128787,128788,128791],{},"（1）表单域：包含单元素的区域，",[30,128789,128790],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3736,128793],{"style":128606,"src":128794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128796,128797],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128799,128800],{},"表单元素提交必须有name属性",[19,128802,128803],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128805,128806],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128808,79437,128809,128812],{},[30,128810,128811],{},"\u003Cinput>","输入表单元素",[3736,128814],{"style":128606,"src":128815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3736,128817],{"style":128606,"src":128818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128820,128821,128822],{},"单选按钮：",[30,128823,128824],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3736,128826],{"style":128606,"src":128827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128829,128830],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3736,128832],{"style":128606,"src":128833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128835,128836,128839],{},[2575,128837,128838],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128841,128842],{},"②select下拉表单元素：可以节约页面控件",[3736,128844],{"style":128606,"src":128845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128847,128848,16035,128850,128853,128854,128856,128857,128859],{},[2575,128849,2461],{},[30,128851,128852],{},"\u003Cselect>","中至少包含一对",[30,128855,104919],{},"；在",[30,128858,104919],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128861,128862,128863,128866],{},"③",[30,128864,128865],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3736,128868],{"style":128606,"src":128869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128871,128872],{},"3行20列",[14,128874,128876,128877,104898],{"id":128875},"_55-lable标签","5.5 ",[30,128878,128879],{},"\u003Clable>",[19,128881,128882,128883,128885,128886,128888],{},"它不是表单标签，但常常与表单标签搭配使用，",[30,128884,128879],{},"标签用于绑定一个表单标签，当点击",[30,128887,128879],{},"标签内的文本",[19,128890,128891],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3736,128893],{"style":128606,"src":128894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3736,128896],{"style":128606,"src":128897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128899,128901],{"id":128900},"_56-实例","5.6 实例",[3736,128903],{"style":128606,"src":128904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2331,128906,128907],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":128909},[128910,128911,128912,128913,128914,128916],{"id":128631,"depth":51,"text":128632},{"id":128688,"depth":51,"text":128689},{"id":128710,"depth":51,"text":128711},{"id":128780,"depth":51,"text":128781},{"id":128875,"depth":51,"text":128915},"5.5 \u003Clable>标签",{"id":128900,"depth":51,"text":128901},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128623,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128923,"title":128924,"body":128925,"description":2359,"extension":2360,"meta":129474,"navigation":99,"path":129475,"seo":129476,"stem":129477,"__hash__":129478},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128926,"toc":129449},[128927,128930,128934,128937,128940,128944,128947,128950,128953,128956,128959,128962,128965,128969,128972,128976,128979,128982,128985,128989,128992,128995,128998,129004,129007,129010,129013,129016,129019,129022,129025,129058,129062,129065,129068,129071,129075,129078,129081,129084,129087,129090,129094,129097,129100,129103,129107,129110,129114,129117,129121,129124,129129,129133,129136,129140,129143,129146,129149,129152,129179,129182,129186,129189,129192,129197,129200,129203,129207,129210,129215,129218,129221,129224,129228,129231,129234,129237,129241,129244,129247,129250,129254,129258,129261,129301,129304,129308,129315,129318,129322,129325,129371,129375,129378,129381,129384,129412,129416,129419,129446],[10,128928,128924],{"id":128929},"_6-css语法与文本样式",[14,128931,128933],{"id":128932},"_61-css语法规范","6.1 css语法规范",[19,128935,128936],{},"由两部分组成，选择器及一条或多条声明",[3736,128938],{"style":128606,"src":128939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128941,128942],{},[2575,128943,2461],{},[19,128945,128946],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128948,128949],{},"②属性与属性值以“键值对”的形式出现",[19,128951,128952],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128954,128955],{},"④属性和属性值之间用英文“;”分开",[3736,128957],{"style":128606,"src":128958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3736,128960],{"style":128606,"src":128961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3736,128963],{"style":128606,"src":128964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128966,128968],{"id":128967},"_62-css选择器","6.2 css选择器",[19,128970,128971],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[631,128973,128975],{"id":128974},"_621-标签选择器","6.2.1 标签选择器",[19,128977,128978],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128980,128981],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3736,128983],{"style":128606,"src":128984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[631,128986,128988],{"id":128987},"_622-类选择器","6.2.2 类选择器",[19,128990,128991],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128993,128994],{},"②样例",[3736,128996],{"style":128606,"src":128997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128999,129000,129001,129003],{},"③ ",[2575,129002,128838],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,129005,129006],{},"可以理解为给这个标签起了个名字，来表示；",[19,129008,129009],{},"长名称或词组可以使用横线来为选择器命名；",[19,129011,129012],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,129014,129015],{},"命名要有意义；",[3736,129017],{"style":128606,"src":129018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,129020,129021],{},"类选择器也可以指定特殊的元素p.center{}",[19,129023,129024],{},"p.center和.center都对",[23,129026,129028],{"className":128750,"code":129027,"language":128752,"meta":28,"style":28},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[30,129029,129030,129035,129044,129054],{"__ignoreMap":28},[33,129031,129032],{"class":35,"line":36},[33,129033,129034],{"class":2487},"\u002F* 类选择器指定特殊元素 *\u002F\n",[33,129036,129037,129039,129042],{"class":35,"line":51},[33,129038,19],{"class":53522},[33,129040,129041],{"class":43},".center",[33,129043,17810],{"class":47},[33,129045,129046,129048,129050,129052],{"class":35,"line":64},[33,129047,72739],{"class":72},[33,129049,996],{"class":47},[33,129051,53813],{"class":72},[33,129053,3567],{"class":47},[33,129055,129056],{"class":35,"line":76},[33,129057,1010],{"class":47},[631,129059,129061],{"id":129060},"_623-多类名使用","6.2.3 多类名使用",[19,129063,129064],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3736,129066],{"style":128606,"src":129067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,129069,129070],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[631,129072,129074],{"id":129073},"_624-id选择器","6.2.4 id选择器",[19,129076,129077],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,129079,129080],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3736,129082],{"style":128606,"src":129083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,129085,129086],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,129088,129089],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[631,129091,129093],{"id":129092},"_625-通配符选择器","6.2.5 通配符选择器",[19,129095,129096],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,129098,129099],{},"* {",[19,129101,129102],{},"color=\"red\"}",[631,129104,129106],{"id":129105},"_626-总结","6.2.6 总结",[3736,129108],{"style":128606,"src":129109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,129111,129113],{"id":129112},"_63-css字体属性","6.3 css字体属性",[19,129115,129116],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[631,129118,129120],{"id":129119},"_631-字体系列","6.3.1 字体系列",[19,129122,129123],{},"font-family: '宋体';",[19,129125,129126,129128],{},[2575,129127,2461],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[631,129130,129132],{"id":129131},"_632-字体大小","6.3.2 字体大小",[19,129134,129135],{},"font-size: 20px",[19,129137,129138,28711],{},[2575,129139,128838],{},[19,129141,129142],{},"①px（像素）大小是网页的最常用单位",[19,129144,129145],{},"②谷歌浏览器默认为16px",[19,129147,129148],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,129150,129151],{},"④可以给body指定整个页面的大小：会自动引用",[23,129153,129155],{"className":128750,"code":129154,"language":128752,"meta":28,"style":28},"body {\n  font-size: 16px;\n}\n",[30,129156,129157,129163,129175],{"__ignoreMap":28},[33,129158,129159,129161],{"class":35,"line":36},[33,129160,54021],{"class":53522},[33,129162,17810],{"class":47},[33,129164,129165,129167,129169,129171,129173],{"class":35,"line":51},[33,129166,72839],{"class":72},[33,129168,996],{"class":47},[33,129170,3018],{"class":72},[33,129172,53713],{"class":39},[33,129174,3567],{"class":47},[33,129176,129177],{"class":35,"line":64},[33,129178,1010],{"class":47},[19,129180,129181],{},"⑤标题标签比较特殊，需要单独指定大小",[631,129183,129185],{"id":129184},"_633-字体粗细","6.3.3 字体粗细",[19,129187,129188],{},"font-weight: bold;",[19,129190,129191],{},"font-weight: 100；",[19,129193,129194,129196],{},[2575,129195,2461],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,129198,129199],{},"font-weight= 400;",[19,129201,129202],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[631,129204,129206],{"id":129205},"_634-文字样式","6.3.4 文字样式",[19,129208,129209],{},"font-style: normal；",[19,129211,129212,28711],{},[2575,129213,129214],{},"属性值",[19,129216,129217],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,129219,129220],{},"②italic：浏览器会显示斜体的字体样式",[3736,129222],{"style":128606,"src":129223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[631,129225,129227],{"id":129226},"_635-字体符合属性","6.3.5 字体符合属性",[3736,129229],{"style":128606,"src":129230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3736,129232],{"style":128606,"src":129233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,129235,129236],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,129238,129239,28711],{},[2575,129240,128838],{},[19,129242,129243],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,129245,129246],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,129248,129249],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,129251,129253],{"id":129252},"_64-css-test文本属性","6.4 css test文本属性",[631,129255,129257],{"id":129256},"_641-文本颜色","6.4.1 文本颜色",[19,129259,129260],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[23,129262,129264],{"className":128750,"code":129263,"language":128752,"meta":28,"style":28},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[30,129265,129266,129271,129277,129287,129292,129297],{"__ignoreMap":28},[33,129267,129268],{"class":35,"line":36},[33,129269,129270],{"class":2487},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[33,129272,129273,129275],{"class":35,"line":51},[33,129274,19],{"class":53522},[33,129276,17810],{"class":47},[33,129278,129279,129281,129283,129285],{"class":35,"line":64},[33,129280,73118],{"class":72},[33,129282,996],{"class":47},[33,129284,59639],{"class":72},[33,129286,3567],{"class":47},[33,129288,129289],{"class":35,"line":76},[33,129290,129291],{"class":2487},"  \u002F* color: #ff0000; *\u002F\n",[33,129293,129294],{"class":35,"line":87},[33,129295,129296],{"class":2487},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[33,129298,129299],{"class":35,"line":96},[33,129300,1010],{"class":47},[3736,129302],{"style":128606,"src":129303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[631,129305,129307],{"id":129306},"_642-对齐文本","6.4.2 对齐文本",[19,129309,129310,129311,129314],{},"text-align属于用于设置元素内文本内容的 ",[2575,129312,129313],{},"水平对齐"," 方式",[19,129316,129317],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[631,129319,129321],{"id":129320},"_643-装饰文本","6.4.3 装饰文本",[19,129323,129324],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[23,129326,129328],{"className":128750,"code":129327,"language":128752,"meta":28,"style":28},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[30,129329,129330,129336,129346,129350,129356,129367],{"__ignoreMap":28},[33,129331,129332,129334],{"class":35,"line":36},[33,129333,2663],{"class":53522},[33,129335,17810],{"class":47},[33,129337,129338,129340,129342,129344],{"class":35,"line":51},[33,129339,72715],{"class":72},[33,129341,996],{"class":47},[33,129343,56956],{"class":72},[33,129345,3567],{"class":47},[33,129347,129348],{"class":35,"line":64},[33,129349,1010],{"class":47},[33,129351,129352,129354],{"class":35,"line":76},[33,129353,19],{"class":53522},[33,129355,17810],{"class":47},[33,129357,129358,129360,129362,129365],{"class":35,"line":87},[33,129359,72715],{"class":72},[33,129361,996],{"class":47},[33,129363,129364],{"class":72},"underline",[33,129366,3567],{"class":47},[33,129368,129369],{"class":35,"line":96},[33,129370,1010],{"class":47},[631,129372,129374],{"id":129373},"_644-文本缩进","6.4.4 文本缩进",[19,129376,129377],{},"实现文本的第一行首行缩进自己指定的距离",[19,129379,129380],{},"20px往右边走；-20px往左边走",[19,129382,129383],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[23,129385,129387],{"className":128750,"code":129386,"language":128752,"meta":28,"style":28},"p {\n  text-indent: 2em;\n}\n",[30,129388,129389,129395,129408],{"__ignoreMap":28},[33,129390,129391,129393],{"class":35,"line":36},[33,129392,19],{"class":53522},[33,129394,17810],{"class":47},[33,129396,129397,129400,129402,129404,129406],{"class":35,"line":51},[33,129398,129399],{"class":72},"  text-indent",[33,129401,996],{"class":47},[33,129403,725],{"class":72},[33,129405,25791],{"class":39},[33,129407,3567],{"class":47},[33,129409,129410],{"class":35,"line":64},[33,129411,1010],{"class":47},[631,129413,129415],{"id":129414},"_645-行间距","6.4.5 行间距",[19,129417,129418],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[23,129420,129422],{"className":128750,"code":129421,"language":128752,"meta":28,"style":28},"p {\n  line-height: 1.6;\n}\n",[30,129423,129424,129430,129442],{"__ignoreMap":28},[33,129425,129426,129428],{"class":35,"line":36},[33,129427,19],{"class":53522},[33,129429,17810],{"class":47},[33,129431,129432,129435,129437,129440],{"class":35,"line":51},[33,129433,129434],{"class":72},"  line-height",[33,129436,996],{"class":47},[33,129438,129439],{"class":72},"1.6",[33,129441,3567],{"class":47},[33,129443,129444],{"class":35,"line":64},[33,129445,1010],{"class":47},[2331,129447,129448],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":129450},[129451,129452,129460,129467],{"id":128932,"depth":51,"text":128933},{"id":128967,"depth":51,"text":128968,"children":129453},[129454,129455,129456,129457,129458,129459],{"id":128974,"depth":64,"text":128975},{"id":128987,"depth":64,"text":128988},{"id":129060,"depth":64,"text":129061},{"id":129073,"depth":64,"text":129074},{"id":129092,"depth":64,"text":129093},{"id":129105,"depth":64,"text":129106},{"id":129112,"depth":51,"text":129113,"children":129461},[129462,129463,129464,129465,129466],{"id":129119,"depth":64,"text":129120},{"id":129131,"depth":64,"text":129132},{"id":129184,"depth":64,"text":129185},{"id":129205,"depth":64,"text":129206},{"id":129226,"depth":64,"text":129227},{"id":129252,"depth":51,"text":129253,"children":129468},[129469,129470,129471,129472,129473],{"id":129256,"depth":64,"text":129257},{"id":129306,"depth":64,"text":129307},{"id":129320,"depth":64,"text":129321},{"id":129373,"depth":64,"text":129374},{"id":129414,"depth":64,"text":129415},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128924,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129480,"title":129481,"body":129482,"description":2359,"extension":2360,"meta":130131,"navigation":99,"path":130132,"seo":130133,"stem":130134,"__hash__":130135},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129483,"toc":130112},[129484,129487,129491,129495,129555,129559,129569,129572,129575,129579,129604,129608,129611,129614,129617,129620,129623,129627,129630,129633,129675,129678,129704,129710,129713,129717,129721,129727,129730,129733,129736,129739,129742,129745,129790,129794,129797,129800,129804,129808,129837,129840,129845,129848,129851,129854,129857,129861,129865,129868,129870,129873,129877,129880,129884,129887,129890,129893,129897,129901,129907,129917,129920,129923,129926,129929,129932,130055,130063,130071,130109],[10,129485,129481],{"id":129486},"_7-css引入方式与选择器进阶",[14,129488,129490],{"id":129489},"_71-css引入方式","7.1 css引入方式",[631,129492,129494],{"id":129493},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[23,129496,129500],{"className":129497,"code":129498,"language":129499,"meta":28,"style":28},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[30,129501,129502,129510,129517,129529,129542,129547],{"__ignoreMap":28},[33,129503,129504,129506,129508],{"class":35,"line":36},[33,129505,2226],{"class":47},[33,129507,2331],{"class":53522},[33,129509,53529],{"class":47},[33,129511,129512,129515],{"class":35,"line":51},[33,129513,129514],{"class":53522},"  h1",[33,129516,17810],{"class":47},[33,129518,129519,129522,129524,129527],{"class":35,"line":64},[33,129520,129521],{"class":72},"    color",[33,129523,996],{"class":47},[33,129525,129526],{"class":72},"blue",[33,129528,3567],{"class":47},[33,129530,129531,129534,129536,129538,129540],{"class":35,"line":76},[33,129532,129533],{"class":72},"    font-size",[33,129535,996],{"class":47},[33,129537,3213],{"class":72},[33,129539,53713],{"class":39},[33,129541,3567],{"class":47},[33,129543,129544],{"class":35,"line":87},[33,129545,129546],{"class":47},"  }\n",[33,129548,129549,129551,129553],{"class":35,"line":96},[33,129550,54006],{"class":47},[33,129552,2331],{"class":53522},[33,129554,53529],{"class":47},[19,129556,129557,28711],{},[2575,129558,128838],{},[19,129560,79437,129561,129564,129565,129568],{},[30,129562,129563],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[30,129566,129567],{},"\u003Chead>","标签中",[19,129570,129571],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129573,129574],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[631,129576,129578],{"id":129577},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[23,129580,129582],{"className":129497,"code":129581,"language":129499,"meta":28,"style":28},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[30,129583,129584],{"__ignoreMap":28},[33,129585,129586,129588,129590,129592,129594,129597,129600,129602],{"class":35,"line":36},[33,129587,2226],{"class":47},[33,129589,19],{"class":53522},[33,129591,64844],{"class":43},[33,129593,57],{"class":47},[33,129595,129596],{"class":60},"\"color: red; font-size: 16px;\"",[33,129598,129599],{"class":47},">这是一个段落\u003C\u002F",[33,129601,19],{"class":53522},[33,129603,53529],{"class":47},[19,129605,129606,28711],{},[2575,129607,128838],{},[19,129609,129610],{},"①style其实就是标签的属性",[19,129612,129613],{},"②在双引号中间，写法要符合css规范",[19,129615,129616],{},"③可以控制当前的标签设置样式",[19,129618,129619],{},"④书写繁琐，简单时才用",[19,129621,129622],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[631,129624,129626],{"id":129625},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129628,129629],{},"使用最多，单独建一个css文件，然后html引用",[19,129631,129632],{},"①css文件部分： style.css",[23,129634,129636],{"className":128750,"code":129635,"language":128752,"meta":28,"style":28},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[30,129637,129638,129643,129649,129659,129671],{"__ignoreMap":28},[33,129639,129640],{"class":35,"line":36},[33,129641,129642],{"class":2487},"\u002F* style.css *\u002F\n",[33,129644,129645,129647],{"class":35,"line":51},[33,129646,10],{"class":53522},[33,129648,17810],{"class":47},[33,129650,129651,129653,129655,129657],{"class":35,"line":64},[33,129652,73118],{"class":72},[33,129654,996],{"class":47},[33,129656,129526],{"class":72},[33,129658,3567],{"class":47},[33,129660,129661,129663,129665,129667,129669],{"class":35,"line":76},[33,129662,72839],{"class":72},[33,129664,996],{"class":47},[33,129666,3213],{"class":72},[33,129668,53713],{"class":39},[33,129670,3567],{"class":47},[33,129672,129673],{"class":35,"line":87},[33,129674,1010],{"class":47},[19,129676,129677],{},"②html部分",[23,129679,129681],{"className":129497,"code":129680,"language":129499,"meta":28,"style":28},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[30,129682,129683],{"__ignoreMap":28},[33,129684,129685,129687,129689,129691,129693,129695,129697,129699,129702],{"class":35,"line":36},[33,129686,2226],{"class":47},[33,129688,71222],{"class":53522},[33,129690,71225],{"class":43},[33,129692,57],{"class":47},[33,129694,71230],{"class":60},[33,129696,63275],{"class":43},[33,129698,57],{"class":47},[33,129700,129701],{"class":60},"\"style.css\"",[33,129703,53529],{"class":47},[19,129705,129706,129709],{},[30,129707,129708],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129711,129712],{},"ctrl+0回到页面原来大小",[14,129714,129716],{"id":129715},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[631,129718,129720],{"id":129719},"_721-快速生成html","7.2.1 快速生成html",[19,129722,129723,129724],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[30,129725,129726],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129728,129729],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129731,129732],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129734,129735],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129737,129738],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129740,129741],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129743,129744],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[23,129746,129748],{"className":129497,"code":129747,"language":129499,"meta":28,"style":28},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[30,129749,129750,129755,129760,129765,129770,129775,129780,129785],{"__ignoreMap":28},[33,129751,129752],{"class":35,"line":36},[33,129753,129754],{"class":2487},"\u003C!-- Emmet 语法示例 -->\n",[33,129756,129757],{"class":35,"line":51},[33,129758,129759],{"class":2487},"\u003C!-- div*3        → 生成3个div -->\n",[33,129761,129762],{"class":35,"line":64},[33,129763,129764],{"class":2487},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[33,129766,129767],{"class":35,"line":76},[33,129768,129769],{"class":2487},"\u003C!-- div+p        → 兄弟div和p -->\n",[33,129771,129772],{"class":35,"line":87},[33,129773,129774],{"class":2487},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[33,129776,129777],{"class":35,"line":96},[33,129778,129779],{"class":2487},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[33,129781,129782],{"class":35,"line":103},[33,129783,129784],{"class":2487},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[33,129786,129787],{"class":35,"line":108},[33,129788,129789],{"class":2487},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[631,129791,129793],{"id":129792},"_722-快速生成css","7.2.2 快速生成css",[19,129795,129796],{},"简写开头",[19,129798,129799],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129801,129803],{"id":129802},"_73-css复合选择器","7.3 css复合选择器",[631,129805,129807],{"id":129806},"_731-后代选择器","7.3.1 后代选择器",[23,129809,129811],{"className":128750,"code":129810,"language":128752,"meta":28,"style":28},".parent .child {\n  color: blue;\n}\n",[30,129812,129813,129823,129833],{"__ignoreMap":28},[33,129814,129815,129818,129821],{"class":35,"line":36},[33,129816,129817],{"class":43},".parent",[33,129819,129820],{"class":43}," .child",[33,129822,17810],{"class":47},[33,129824,129825,129827,129829,129831],{"class":35,"line":51},[33,129826,73118],{"class":72},[33,129828,996],{"class":47},[33,129830,129526],{"class":72},[33,129832,3567],{"class":47},[33,129834,129835],{"class":35,"line":64},[33,129836,1010],{"class":47},[19,129838,129839],{},"元素1 元素2 {样式声明}",[19,129841,129842],{},[2575,129843,129844],{},"注意点:",[19,129846,129847],{},"①元素1和元素2中间用空格隔开",[19,129849,129850],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129852,129853],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129855,129856],{},"④元素1和元素2可以是任意基础选择器",[631,129858,129860],{"id":129859},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129862,129863],{},[2575,129864,129844],{},[19,129866,129867],{},"①元素1和元素2中间用大于号隔开",[19,129869,129850],{},[19,129871,129872],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[631,129874,129876],{"id":129875},"_733-并集选择器","7.3.3 并集选择器",[19,129878,129879],{},"元素1，元素2 {样式声明}",[19,129881,129882],{},[2575,129883,129844],{},[19,129885,129886],{},"①元素1和元素2中间用逗号隔开",[19,129888,129889],{},"②逗号可以理解为和的意思",[19,129891,129892],{},"③并集选择器通常用于集体声明",[631,129894,129896],{"id":129895},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129898,129899],{},[2575,129900,129844],{},[19,129902,129903,129904,129906],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[71222,129905],{},"－:visited－:hover－:active。",[19,129908,129909,129910,129913,129914,27979],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129911,129912],"hover",{}," 、 ",[129915,129916],"first-child",{},[19,129918,129919],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129921,129922],{},"link对没访问的进行设置",[19,129924,129925],{},"vistied对已访问的进行改变",[19,129927,129928],{},"hover鼠标经过就会变",[19,129930,129931],{},"active常按(点)就会变",[23,129933,129935],{"className":128750,"code":129934,"language":128752,"meta":28,"style":28},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[30,129936,129937,129942,129951,129961,129971,129975,129984,129995,129999,130007,130017,130027,130031,130040,130051],{"__ignoreMap":28},[33,129938,129939],{"class":35,"line":36},[33,129940,129941],{"class":2487},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[33,129943,129944,129946,129949],{"class":35,"line":51},[33,129945,2663],{"class":53522},[33,129947,129948],{"class":43},":link",[33,129950,17810],{"class":47},[33,129952,129953,129955,129957,129959],{"class":35,"line":64},[33,129954,73118],{"class":72},[33,129956,996],{"class":47},[33,129958,64587],{"class":72},[33,129960,3567],{"class":47},[33,129962,129963,129965,129967,129969],{"class":35,"line":76},[33,129964,72715],{"class":72},[33,129966,996],{"class":47},[33,129968,56956],{"class":72},[33,129970,3567],{"class":47},[33,129972,129973],{"class":35,"line":87},[33,129974,1010],{"class":47},[33,129976,129977,129979,129982],{"class":35,"line":96},[33,129978,2663],{"class":53522},[33,129980,129981],{"class":43},":visited",[33,129983,17810],{"class":47},[33,129985,129986,129988,129990,129993],{"class":35,"line":103},[33,129987,73118],{"class":72},[33,129989,996],{"class":47},[33,129991,129992],{"class":72},"purple",[33,129994,3567],{"class":47},[33,129996,129997],{"class":35,"line":108},[33,129998,1010],{"class":47},[33,130000,130001,130003,130005],{"class":35,"line":119},[33,130002,2663],{"class":53522},[33,130004,63158],{"class":43},[33,130006,17810],{"class":47},[33,130008,130009,130011,130013,130015],{"class":35,"line":128},[33,130010,73118],{"class":72},[33,130012,996],{"class":47},[33,130014,57108],{"class":72},[33,130016,3567],{"class":47},[33,130018,130019,130021,130023,130025],{"class":35,"line":1753},[33,130020,72715],{"class":72},[33,130022,996],{"class":47},[33,130024,129364],{"class":72},[33,130026,3567],{"class":47},[33,130028,130029],{"class":35,"line":1763},[33,130030,1010],{"class":47},[33,130032,130033,130035,130038],{"class":35,"line":1775},[33,130034,2663],{"class":53522},[33,130036,130037],{"class":43},":active",[33,130039,17810],{"class":47},[33,130041,130042,130044,130046,130049],{"class":35,"line":1780},[33,130043,73118],{"class":72},[33,130045,996],{"class":47},[33,130047,130048],{"class":72},"green",[33,130050,3567],{"class":47},[33,130052,130053],{"class":35,"line":1785},[33,130054,1010],{"class":47},[631,130056,130058,130059,130062],{"id":130057},"_735-伪类选择器","7.3.5 ",[130060,130061],"focus",{},"伪类选择器",[19,130064,130065,130067,130068,130070],{},[130060,130066],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[30,130069,128811],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[23,130072,130074],{"className":128750,"code":130073,"language":128752,"meta":28,"style":28},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[30,130075,130076,130084,130095,130105],{"__ignoreMap":28},[33,130077,130078,130080,130082],{"class":35,"line":36},[33,130079,56040],{"class":53522},[33,130081,64118],{"class":43},[33,130083,17810],{"class":47},[33,130085,130086,130089,130091,130093],{"class":35,"line":51},[33,130087,130088],{"class":72},"  border-color",[33,130090,996],{"class":47},[33,130092,57108],{"class":72},[33,130094,3567],{"class":47},[33,130096,130097,130099,130101,130103],{"class":35,"line":64},[33,130098,73011],{"class":72},[33,130100,996],{"class":47},[33,130102,56956],{"class":72},[33,130104,3567],{"class":47},[33,130106,130107],{"class":35,"line":76},[33,130108,1010],{"class":47},[2331,130110,130111],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":130113},[130114,130119,130123],{"id":129489,"depth":51,"text":129490,"children":130115},[130116,130117,130118],{"id":129493,"depth":64,"text":129494},{"id":129577,"depth":64,"text":129578},{"id":129625,"depth":64,"text":129626},{"id":129715,"depth":51,"text":129716,"children":130120},[130121,130122],{"id":129719,"depth":64,"text":129720},{"id":129792,"depth":64,"text":129793},{"id":129802,"depth":51,"text":129803,"children":130124},[130125,130126,130127,130128,130129],{"id":129806,"depth":64,"text":129807},{"id":129859,"depth":64,"text":129860},{"id":129875,"depth":64,"text":129876},{"id":129895,"depth":64,"text":129896},{"id":130057,"depth":64,"text":130130},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129481,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":130137,"title":130138,"body":130139,"description":2359,"extension":2360,"meta":132062,"navigation":99,"path":132063,"seo":132064,"stem":132065,"__hash__":132066},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":130140,"toc":132036},[130141,130144,130148,130157,130161,130187,130192,130195,130198,130201,130204,130208,130211,130221,130229,130233,130268,130273,130276,130279,130282,130285,130289,130292,130301,130305,130318,130323,130326,130329,130332,130336,130339,130343,130346,130401,130404,130435,130438,130492,130496,130499,130665,130788,130791,130794,130797,130800,130804,130807,130811,130814,130817,130821,130824,130855,130882,130910,130913,130917,130943,130986,130990,131084,131087,131114,131117,131120,131123,131126,131129,131132,131135,131138,131141,131145,131202,131229,131233,131281,131285,131326,131328,131331,131334,131337,131340,131344,131436,131439,131442,131445,131449,131572,131773,131777,131781,131784,131787,131790,131794,131797,131800,131825,131828,131831,131834,131837,131840,131844,131852,131914,131917,131975,131978,131981,131984,131987,131990,131993,131996,132033],[10,130142,130138],{"id":130143},"_8-css显示模式与背景特性",[14,130145,130147],{"id":130146},"_81-css元素显示模式","8.1 css元素显示模式",[19,130149,130150,130151,130153,130154,130156],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[30,130152,128361],{},"自己占一行，比如一行可以放多个",[30,130155,128364],{},"，HTML 元素一般分为块元素和行内元素两种类型",[631,130158,130160],{"id":130159},"_811-块元素","8.1.1 块元素",[19,130162,130163,130164,130166,130167,2638,130170,2638,130172,2638,130174,2638,130177,2638,130180,130183,130184,130186],{},"常见的块元素有",[30,130165,128265],{},"~",[30,130168,130169],{},"\u003Ch6>",[30,130171,128291],{},[30,130173,128361],{},[30,130175,130176],{},"\u003Cul>",[30,130178,130179],{},"\u003Col>",[30,130181,130182],{},"\u003Cli>","等，其中 ",[30,130185,128361],{}," 标签是最典型的块元素",[19,130188,130189],{},[2575,130190,130191],{},"块级元素的特点：",[19,130193,130194],{},"① 比较霸道，自己独占一行。",[19,130196,130197],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,130199,130200],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,130202,130203],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,130205,130206],{},[2575,130207,2461],{},[19,130209,130210],{},"①文字类的元素内不能使用块级元素",[19,130212,79460,130213,130215,130216,130218,130219],{},[30,130214,128291],{}," 标签主要用于存放文字，因此 ",[30,130217,128291],{}," 里面不能放块级元素，特别是不能放",[30,130220,128361],{},[19,130222,130223,130224,130166,130226,130228],{},"⑥同理， ",[30,130225,128265],{},[30,130227,130169],{},"等都是文字类块级标签，里面也不能放其他块级元素",[631,130230,130232],{"id":130231},"_812-行内元素","8.1.2 行内元素",[19,130234,130235,130236,2638,130238,2638,130241,2638,130244,2638,130247,2638,130250,2638,130253,2638,130256,2638,130259,2638,130262,130264,130265,130267],{},"常见的行内元素有 ",[30,130237,128523],{},[30,130239,130240],{},"\u003Cstrong>",[30,130242,130243],{},"\u003Cb>",[30,130245,130246],{},"\u003Cem>",[30,130248,130249],{},"\u003Ci>",[30,130251,130252],{},"\u003Cdel>",[30,130254,130255],{},"\u003Cs>",[30,130257,130258],{},"\u003Cins>",[30,130260,130261],{},"\u003Cu>",[30,130263,128364],{}," 等，其中 ",[30,130266,128364],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,130269,130270],{},[2575,130271,130272],{},"特点：",[19,130274,130275],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,130277,130278],{},"② 高、宽直接设置是无效的。",[19,130280,130281],{},"③ 默认宽度就是它本身内容的宽度。",[19,130283,130284],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,130286,130287],{},[2575,130288,2461],{},[19,130290,130291],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,130293,130294,130295,130297,130298,130300],{},"②特殊情况链接 ",[30,130296,128523],{}," 里面可以放块级元素，但是给 ",[30,130299,128523],{}," 转换一下块级模式最安全",[631,130302,130304],{"id":130303},"_813-行内块元素","8.1.3 行内块元素",[19,130306,130307,130308,2638,130311,2638,130314,130317],{},"在行内元素中有几个特殊的标签 —— ",[30,130309,130310],{},"\u003Cimg \u002F>",[30,130312,130313],{},"\u003Cinput \u002F>",[30,130315,130316],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,130319,130320],{},[2575,130321,130322],{},"行内块元素的特点：",[19,130324,130325],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,130327,130328],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,130330,130331],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[631,130333,130335],{"id":130334},"_814-总结","8.1.4 总结",[3736,130337],{"style":128606,"src":130338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[631,130340,130342],{"id":130341},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,130344,130345],{},"①转换为块元素：display:block;",[23,130347,130349],{"className":128750,"code":130348,"language":128752,"meta":28,"style":28},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[30,130350,130351,130356,130362,130373,130385,130397],{"__ignoreMap":28},[33,130352,130353],{"class":35,"line":36},[33,130354,130355],{"class":2487},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[33,130357,130358,130360],{"class":35,"line":51},[33,130359,2663],{"class":53522},[33,130361,17810],{"class":47},[33,130363,130364,130367,130369,130371],{"class":35,"line":64},[33,130365,130366],{"class":72},"  display",[33,130368,996],{"class":47},[33,130370,63087],{"class":72},[33,130372,3567],{"class":47},[33,130374,130375,130377,130379,130381,130383],{"class":35,"line":76},[33,130376,72781],{"class":72},[33,130378,996],{"class":47},[33,130380,2734],{"class":72},[33,130382,53713],{"class":39},[33,130384,3567],{"class":47},[33,130386,130387,130389,130391,130393,130395],{"class":35,"line":87},[33,130388,73001],{"class":72},[33,130390,996],{"class":47},[33,130392,2822],{"class":72},[33,130394,53713],{"class":39},[33,130396,3567],{"class":47},[33,130398,130399],{"class":35,"line":96},[33,130400,1010],{"class":47},[19,130402,130403],{},"②转换为行内元素：display:inline;",[23,130405,130407],{"className":128750,"code":130406,"language":128752,"meta":28,"style":28},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[30,130408,130409,130414,130420,130431],{"__ignoreMap":28},[33,130410,130411],{"class":35,"line":36},[33,130412,130413],{"class":2487},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[33,130415,130416,130418],{"class":35,"line":51},[33,130417,53832],{"class":53522},[33,130419,17810],{"class":47},[33,130421,130422,130424,130426,130429],{"class":35,"line":64},[33,130423,130366],{"class":72},[33,130425,996],{"class":47},[33,130427,130428],{"class":72},"inline",[33,130430,3567],{"class":47},[33,130432,130433],{"class":35,"line":76},[33,130434,1010],{"class":47},[19,130436,130437],{},"③转换为行内块：display:inline-block;",[23,130439,130441],{"className":128750,"code":130440,"language":128752,"meta":28,"style":28},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[30,130442,130443,130448,130454,130464,130476,130488],{"__ignoreMap":28},[33,130444,130445],{"class":35,"line":36},[33,130446,130447],{"class":2487},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[33,130449,130450,130452],{"class":35,"line":51},[33,130451,33],{"class":53522},[33,130453,17810],{"class":47},[33,130455,130456,130458,130460,130462],{"class":35,"line":64},[33,130457,130366],{"class":72},[33,130459,996],{"class":47},[33,130461,74596],{"class":72},[33,130463,3567],{"class":47},[33,130465,130466,130468,130470,130472,130474],{"class":35,"line":76},[33,130467,72781],{"class":72},[33,130469,996],{"class":47},[33,130471,3029],{"class":72},[33,130473,53713],{"class":39},[33,130475,3567],{"class":47},[33,130477,130478,130480,130482,130484,130486],{"class":35,"line":87},[33,130479,73001],{"class":72},[33,130481,996],{"class":47},[33,130483,3358],{"class":72},[33,130485,53713],{"class":39},[33,130487,3567],{"class":47},[33,130489,130490],{"class":35,"line":96},[33,130491,1010],{"class":47},[631,130493,130495],{"id":130494},"_816-小米侧边栏","8.1.6 小米侧边栏",[3736,130497],{"style":128606,"src":130498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[23,130500,130502],{"className":129497,"code":130501,"language":129499,"meta":28,"style":28},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[30,130503,130504,130509,130524,130543,130562,130581,130600,130619,130638,130657],{"__ignoreMap":28},[33,130505,130506],{"class":35,"line":36},[33,130507,130508],{"class":2487},"\u003C!-- 小米侧边栏案例 -->\n",[33,130510,130511,130513,130515,130517,130519,130522],{"class":35,"line":51},[33,130512,2226],{"class":47},[33,130514,53832],{"class":53522},[33,130516,55705],{"class":43},[33,130518,57],{"class":47},[33,130520,130521],{"class":60},"\"sidebar\"",[33,130523,53529],{"class":47},[33,130525,130526,130528,130530,130532,130534,130536,130539,130541],{"class":35,"line":64},[33,130527,54364],{"class":47},[33,130529,2663],{"class":53522},[33,130531,63275],{"class":43},[33,130533,57],{"class":47},[33,130535,63280],{"class":60},[33,130537,130538],{"class":47},">手机 电话卡\u003C\u002F",[33,130540,2663],{"class":53522},[33,130542,53529],{"class":47},[33,130544,130545,130547,130549,130551,130553,130555,130558,130560],{"class":35,"line":76},[33,130546,54364],{"class":47},[33,130548,2663],{"class":53522},[33,130550,63275],{"class":43},[33,130552,57],{"class":47},[33,130554,63280],{"class":60},[33,130556,130557],{"class":47},">电视 盒子\u003C\u002F",[33,130559,2663],{"class":53522},[33,130561,53529],{"class":47},[33,130563,130564,130566,130568,130570,130572,130574,130577,130579],{"class":35,"line":87},[33,130565,54364],{"class":47},[33,130567,2663],{"class":53522},[33,130569,63275],{"class":43},[33,130571,57],{"class":47},[33,130573,63280],{"class":60},[33,130575,130576],{"class":47},">笔记本 平板\u003C\u002F",[33,130578,2663],{"class":53522},[33,130580,53529],{"class":47},[33,130582,130583,130585,130587,130589,130591,130593,130596,130598],{"class":35,"line":96},[33,130584,54364],{"class":47},[33,130586,2663],{"class":53522},[33,130588,63275],{"class":43},[33,130590,57],{"class":47},[33,130592,63280],{"class":60},[33,130594,130595],{"class":47},">出行 穿戴\u003C\u002F",[33,130597,2663],{"class":53522},[33,130599,53529],{"class":47},[33,130601,130602,130604,130606,130608,130610,130612,130615,130617],{"class":35,"line":103},[33,130603,54364],{"class":47},[33,130605,2663],{"class":53522},[33,130607,63275],{"class":43},[33,130609,57],{"class":47},[33,130611,63280],{"class":60},[33,130613,130614],{"class":47},">智能 路由器\u003C\u002F",[33,130616,2663],{"class":53522},[33,130618,53529],{"class":47},[33,130620,130621,130623,130625,130627,130629,130631,130634,130636],{"class":35,"line":108},[33,130622,54364],{"class":47},[33,130624,2663],{"class":53522},[33,130626,63275],{"class":43},[33,130628,57],{"class":47},[33,130630,63280],{"class":60},[33,130632,130633],{"class":47},">健康 儿童\u003C\u002F",[33,130635,2663],{"class":53522},[33,130637,53529],{"class":47},[33,130639,130640,130642,130644,130646,130648,130650,130653,130655],{"class":35,"line":119},[33,130641,54364],{"class":47},[33,130643,2663],{"class":53522},[33,130645,63275],{"class":43},[33,130647,57],{"class":47},[33,130649,63280],{"class":60},[33,130651,130652],{"class":47},">耳机 音响\u003C\u002F",[33,130654,2663],{"class":53522},[33,130656,53529],{"class":47},[33,130658,130659,130661,130663],{"class":35,"line":128},[33,130660,54006],{"class":47},[33,130662,53832],{"class":53522},[33,130664,53529],{"class":47},[23,130666,130668],{"className":128750,"code":130667,"language":128752,"meta":28,"style":28},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[30,130669,130670,130679,130689,130702,130714,130726,130738,130748,130759,130763,130773,130784],{"__ignoreMap":28},[33,130671,130672,130675,130677],{"class":35,"line":36},[33,130673,130674],{"class":43},".sidebar",[33,130676,3672],{"class":53522},[33,130678,17810],{"class":47},[33,130680,130681,130683,130685,130687],{"class":35,"line":51},[33,130682,130366],{"class":72},[33,130684,996],{"class":47},[33,130686,63087],{"class":72},[33,130688,3567],{"class":47},[33,130690,130691,130693,130695,130698,130700],{"class":35,"line":64},[33,130692,72781],{"class":72},[33,130694,996],{"class":47},[33,130696,130697],{"class":72},"234",[33,130699,53713],{"class":39},[33,130701,3567],{"class":47},[33,130703,130704,130706,130708,130710,130712],{"class":35,"line":76},[33,130705,73001],{"class":72},[33,130707,996],{"class":47},[33,130709,2871],{"class":72},[33,130711,53713],{"class":39},[33,130713,3567],{"class":47},[33,130715,130716,130718,130720,130722,130724],{"class":35,"line":87},[33,130717,129434],{"class":72},[33,130719,996],{"class":47},[33,130721,2871],{"class":72},[33,130723,53713],{"class":39},[33,130725,3567],{"class":47},[33,130727,130728,130730,130732,130734,130736],{"class":35,"line":96},[33,130729,73036],{"class":72},[33,130731,996],{"class":47},[33,130733,3358],{"class":72},[33,130735,53713],{"class":39},[33,130737,3567],{"class":47},[33,130739,130740,130742,130744,130746],{"class":35,"line":103},[33,130741,73118],{"class":72},[33,130743,996],{"class":47},[33,130745,63060],{"class":72},[33,130747,3567],{"class":47},[33,130749,130750,130752,130754,130757],{"class":35,"line":108},[33,130751,73091],{"class":72},[33,130753,996],{"class":47},[33,130755,130756],{"class":72},"#55585a",[33,130758,3567],{"class":47},[33,130760,130761],{"class":35,"line":119},[33,130762,1010],{"class":47},[33,130764,130765,130767,130769,130771],{"class":35,"line":128},[33,130766,130674],{"class":43},[33,130768,3672],{"class":53522},[33,130770,63158],{"class":43},[33,130772,17810],{"class":47},[33,130774,130775,130777,130779,130782],{"class":35,"line":1753},[33,130776,73091],{"class":72},[33,130778,996],{"class":47},[33,130780,130781],{"class":72},"#ff6700",[33,130783,3567],{"class":47},[33,130785,130786],{"class":35,"line":1763},[33,130787,1010],{"class":47},[3736,130789],{"style":128606,"src":130790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130792,130793],{},"行高=盒子高度：实现文字的垂直居中",[19,130795,130796],{},"原理讲解：",[3736,130798],{"style":128606,"src":130799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130801,130803],{"id":130802},"_82-css背景","8.2 css背景",[19,130805,130806],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[631,130808,130810],{"id":130809},"_821-背景颜色","8.2.1 背景颜色",[19,130812,130813],{},"background-color:颜色值;",[19,130815,130816],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[631,130818,130820],{"id":130819},"_822-背景图片","8.2.2 背景图片",[19,130822,130823],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[23,130825,130827],{"className":128750,"code":130826,"language":128752,"meta":28,"style":28},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[30,130828,130829,130835,130851],{"__ignoreMap":28},[33,130830,130831,130833],{"class":35,"line":36},[33,130832,53832],{"class":53522},[33,130834,17810],{"class":47},[33,130836,130837,130840,130842,130844,130846,130849],{"class":35,"line":51},[33,130838,130839],{"class":72},"  background-image",[33,130841,996],{"class":47},[33,130843,63944],{"class":72},[33,130845,133],{"class":47},[33,130847,130848],{"class":289},"images\u002Fbg.png",[33,130850,4976],{"class":47},[33,130852,130853],{"class":35,"line":64},[33,130854,1010],{"class":47},[2563,130856,130857,130866],{},[2566,130858,130859],{},[2569,130860,130861,130864],{},[2572,130862,130863],{"align":25974},"参数值",[2572,130865,104901],{"align":25974},[2610,130867,130868,130875],{},[2569,130869,130870,130872],{},[2615,130871,56956],{"align":25974},[2615,130873,130874],{"align":25974},"无背景图（默认的）",[2569,130876,130877,130879],{},[2615,130878,63944],{"align":25974},[2615,130880,130881],{"align":25974},"使用绝对或相对地址指定背景图像",[23,130883,130884],{"className":128750,"code":130826,"language":128752,"meta":28,"style":28},[30,130885,130886,130892,130906],{"__ignoreMap":28},[33,130887,130888,130890],{"class":35,"line":36},[33,130889,53832],{"class":53522},[33,130891,17810],{"class":47},[33,130893,130894,130896,130898,130900,130902,130904],{"class":35,"line":51},[33,130895,130839],{"class":72},[33,130897,996],{"class":47},[33,130899,63944],{"class":72},[33,130901,133],{"class":47},[33,130903,130848],{"class":289},[33,130905,4976],{"class":47},[33,130907,130908],{"class":35,"line":64},[33,130909,1010],{"class":47},[19,130911,130912],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[631,130914,130916],{"id":130915},"_823-背景平铺","8.2.3 背景平铺",[23,130918,130920],{"className":128750,"code":130919,"language":128752,"meta":28,"style":28},"div {\n  background-repeat: no-repeat;\n}\n",[30,130921,130922,130928,130939],{"__ignoreMap":28},[33,130923,130924,130926],{"class":35,"line":36},[33,130925,53832],{"class":53522},[33,130927,17810],{"class":47},[33,130929,130930,130933,130935,130937],{"class":35,"line":51},[33,130931,130932],{"class":72},"  background-repeat",[33,130934,996],{"class":47},[33,130936,63954],{"class":72},[33,130938,3567],{"class":47},[33,130940,130941],{"class":35,"line":64},[33,130942,1010],{"class":47},[2563,130944,130945,130953],{},[2566,130946,130947],{},[2569,130948,130949,130951],{},[2572,130950,130863],{"align":25974},[2572,130952,104901],{"align":25974},[2610,130954,130955,130963,130970,130978],{},[2569,130956,130957,130960],{},[2615,130958,130959],{"align":25974},"repeat",[2615,130961,130962],{"align":25974},"背景图像在纵向和横向上平铺（默认的）",[2569,130964,130965,130967],{},[2615,130966,63954],{"align":25974},[2615,130968,130969],{"align":25974},"背景图像不平铺",[2569,130971,130972,130975],{},[2615,130973,130974],{"align":25974},"repeat-x",[2615,130976,130977],{"align":25974},"背景图像在横向上平铺",[2569,130979,130980,130983],{},[2615,130981,130982],{"align":25974},"repeat-y",[2615,130984,130985],{"align":25974},"背景图像在纵向平铺",[631,130987,130989],{"id":130988},"_824-背景图片位置","8.2.4 背景图片位置",[23,130991,130993],{"className":128750,"code":130992,"language":128752,"meta":28,"style":28},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[30,130994,130995,131000,131006,131020,131024,131029,131035,131051,131055,131060,131066,131080],{"__ignoreMap":28},[33,130996,130997],{"class":35,"line":36},[33,130998,130999],{"class":2487},"\u002F* 方位名词 *\u002F\n",[33,131001,131002,131004],{"class":35,"line":51},[33,131003,53832],{"class":53522},[33,131005,17810],{"class":47},[33,131007,131008,131011,131013,131015,131018],{"class":35,"line":64},[33,131009,131010],{"class":72},"  background-position",[33,131012,996],{"class":47},[33,131014,53813],{"class":72},[33,131016,131017],{"class":72}," top",[33,131019,3567],{"class":47},[33,131021,131022],{"class":35,"line":76},[33,131023,1010],{"class":47},[33,131025,131026],{"class":35,"line":87},[33,131027,131028],{"class":2487},"\u002F* 精确单位 *\u002F\n",[33,131030,131031,131033],{"class":35,"line":96},[33,131032,53832],{"class":53522},[33,131034,17810],{"class":47},[33,131036,131037,131039,131041,131043,131045,131047,131049],{"class":35,"line":103},[33,131038,131010],{"class":72},[33,131040,996],{"class":47},[33,131042,1284],{"class":72},[33,131044,53713],{"class":39},[33,131046,59722],{"class":72},[33,131048,53713],{"class":39},[33,131050,3567],{"class":47},[33,131052,131053],{"class":35,"line":108},[33,131054,1010],{"class":47},[33,131056,131057],{"class":35,"line":119},[33,131058,131059],{"class":2487},"\u002F* 混合单位 *\u002F\n",[33,131061,131062,131064],{"class":35,"line":128},[33,131063,53832],{"class":53522},[33,131065,17810],{"class":47},[33,131067,131068,131070,131072,131074,131076,131078],{"class":35,"line":1753},[33,131069,131010],{"class":72},[33,131071,996],{"class":47},[33,131073,1284],{"class":72},[33,131075,53713],{"class":39},[33,131077,19382],{"class":72},[33,131079,3567],{"class":47},[33,131081,131082],{"class":35,"line":1763},[33,131083,1010],{"class":47},[19,131085,131086],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2563,131088,131089,131097],{},[2566,131090,131091],{},[2569,131092,131093,131095],{},[2572,131094,130863],{"align":25974},[2572,131096,28108],{"align":25974},[2610,131098,131099,131106],{},[2569,131100,131101,131103],{},[2615,131102,54188],{"align":25974},[2615,131104,131105],{"align":25974},"百分数|由浮点数和单位标识符组成的长度值",[2569,131107,131108,131111],{},[2615,131109,131110],{"align":25974},"position",[2615,131112,131113],{"align":25974},"top|center|bottom|left|center|right 方位名词",[19,131115,131116],{},"其他说明：",[19,131118,131119],{},"①参数是方位名词",[19,131121,131122],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,131124,131125],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,131127,131128],{},"②参数是精确单位",[19,131130,131131],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,131133,131134],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,131136,131137],{},"③参数是混合单位",[19,131139,131140],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[631,131142,131144],{"id":131143},"_825-背景图片固定","8.2.5 背景图片固定",[23,131146,131148],{"className":128750,"code":131147,"language":128752,"meta":28,"style":28},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[30,131149,131150,131155,131161,131173,131177,131182,131188,131198],{"__ignoreMap":28},[33,131151,131152],{"class":35,"line":36},[33,131153,131154],{"class":2487},"\u002F* 背景滚动（默认） *\u002F\n",[33,131156,131157,131159],{"class":35,"line":51},[33,131158,53832],{"class":53522},[33,131160,17810],{"class":47},[33,131162,131163,131166,131168,131171],{"class":35,"line":64},[33,131164,131165],{"class":72},"  background-attachment",[33,131167,996],{"class":47},[33,131169,131170],{"class":72},"scroll",[33,131172,3567],{"class":47},[33,131174,131175],{"class":35,"line":76},[33,131176,1010],{"class":47},[33,131178,131179],{"class":35,"line":87},[33,131180,131181],{"class":2487},"\u002F* 背景固定 *\u002F\n",[33,131183,131184,131186],{"class":35,"line":96},[33,131185,53832],{"class":53522},[33,131187,17810],{"class":47},[33,131189,131190,131192,131194,131196],{"class":35,"line":103},[33,131191,131165],{"class":72},[33,131193,996],{"class":47},[33,131195,88442],{"class":72},[33,131197,3567],{"class":47},[33,131199,131200],{"class":35,"line":108},[33,131201,1010],{"class":47},[2563,131203,131204,131213],{},[2566,131205,131206],{},[2569,131207,131208,131211],{},[2572,131209,131210],{"align":25974},"参数",[2572,131212,104901],{"align":25974},[2610,131214,131215,131222],{},[2569,131216,131217,131219],{},[2615,131218,131170],{"align":25974},[2615,131220,131221],{"align":25974},"背景图像是随对象内容滚动",[2569,131223,131224,131226],{},[2615,131225,88442],{"align":25974},[2615,131227,131228],{"align":25974},"背景图像固定",[631,131230,131232],{"id":131231},"_826-背景样式合写","8.2.6 背景样式合写",[23,131234,131236],{"className":128750,"code":131235,"language":128752,"meta":28,"style":28},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[30,131237,131238,131243,131249,131277],{"__ignoreMap":28},[33,131239,131240],{"class":35,"line":36},[33,131241,131242],{"class":2487},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[33,131244,131245,131247],{"class":35,"line":51},[33,131246,53832],{"class":53522},[33,131248,17810],{"class":47},[33,131250,131251,131253,131255,131257,131260,131262,131264,131266,131268,131271,131273,131275],{"class":35,"line":64},[33,131252,72824],{"class":72},[33,131254,996],{"class":47},[33,131256,63060],{"class":72},[33,131258,131259],{"class":72}," url",[33,131261,133],{"class":47},[33,131263,130848],{"class":289},[33,131265,15954],{"class":47},[33,131267,63954],{"class":72},[33,131269,131270],{"class":72}," fixed",[33,131272,19382],{"class":72},[33,131274,131017],{"class":72},[33,131276,3567],{"class":47},[33,131278,131279],{"class":35,"line":76},[33,131280,1010],{"class":47},[631,131282,131284],{"id":131283},"_827-背景色半透明","8.2.7 背景色半透明",[23,131286,131288],{"className":128750,"code":131287,"language":128752,"meta":28,"style":28},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[30,131289,131290,131296,131322],{"__ignoreMap":28},[33,131291,131292,131294],{"class":35,"line":36},[33,131293,53832],{"class":53522},[33,131295,17810],{"class":47},[33,131297,131298,131300,131302,131304,131306,131308,131310,131312,131314,131316,131318,131320],{"class":35,"line":51},[33,131299,72824],{"class":72},[33,131301,996],{"class":47},[33,131303,57329],{"class":72},[33,131305,133],{"class":47},[33,131307,2617],{"class":72},[33,131309,245],{"class":47},[33,131311,2617],{"class":72},[33,131313,245],{"class":47},[33,131315,2617],{"class":72},[33,131317,245],{"class":47},[33,131319,102728],{"class":72},[33,131321,4976],{"class":47},[33,131323,131324],{"class":35,"line":64},[33,131325,1010],{"class":47},[19,131327,101603],{},[19,131329,131330],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,131332,131333],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,131335,131336],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,131338,131339],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[631,131341,131343],{"id":131342},"_828-总结","8.2.8 总结",[2563,131345,131346,131357],{},[2566,131347,131348],{},[2569,131349,131350,131353,131355],{},[2572,131351,131352],{"align":25974},"属性",[2572,131354,104901],{"align":25974},[2572,131356,2578],{"align":25974},[2610,131358,131359,131370,131381,131392,131403,131414,131425],{},[2569,131360,131361,131364,131367],{},[2615,131362,131363],{"align":25974},"background-color",[2615,131365,131366],{"align":25974},"背景颜色",[2615,131368,131369],{"align":25974},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2569,131371,131372,131375,131378],{},[2615,131373,131374],{"align":25974},"background-image",[2615,131376,131377],{"align":25974},"背景图片",[2615,131379,131380],{"align":25974},"url(图片路径)",[2569,131382,131383,131386,131389],{},[2615,131384,131385],{"align":25974},"background-repeat",[2615,131387,131388],{"align":25974},"是否平铺",[2615,131390,131391],{"align":25974},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2569,131393,131394,131397,131400],{},[2615,131395,131396],{"align":25974},"background-position",[2615,131398,131399],{"align":25974},"背景位置",[2615,131401,131402],{"align":25974},"length\u002Fposition 分别是x和y坐标",[2569,131404,131405,131408,131411],{},[2615,131406,131407],{"align":25974},"background-attachment",[2615,131409,131410],{"align":25974},"背景附着",[2615,131412,131413],{"align":25974},"scroll(背景滚动) \u002Ffixed (背景固定)",[2569,131415,131416,131419,131422],{},[2615,131417,131418],{"align":25974},"背景简写",[2615,131420,131421],{"align":25974},"书写更简单",[2615,131423,131424],{"align":25974},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2569,131426,131427,131430,131433],{},[2615,131428,131429],{"align":25974},"背景半透明",[2615,131431,131432],{"align":25974},"背景颜色半透明",[2615,131434,131435],{"align":25974},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131437,131438],{},"颜色渐变：",[3736,131440],{"style":128606,"src":131441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3736,131443],{"style":128606,"src":131444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[631,131446,131448],{"id":131447},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[23,131450,131452],{"className":129497,"code":131451,"language":129499,"meta":28,"style":28},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[30,131453,131454,131469,131488,131507,131526,131545,131564],{"__ignoreMap":28},[33,131455,131456,131458,131460,131462,131464,131467],{"class":35,"line":36},[33,131457,2226],{"class":47},[33,131459,53832],{"class":53522},[33,131461,55705],{"class":43},[33,131463,57],{"class":47},[33,131465,131466],{"class":60},"\"nav\"",[33,131468,53529],{"class":47},[33,131470,131471,131473,131475,131477,131479,131481,131484,131486],{"class":35,"line":51},[33,131472,54364],{"class":47},[33,131474,2663],{"class":53522},[33,131476,63275],{"class":43},[33,131478,57],{"class":47},[33,131480,63280],{"class":60},[33,131482,131483],{"class":47},">五彩导航1\u003C\u002F",[33,131485,2663],{"class":53522},[33,131487,53529],{"class":47},[33,131489,131490,131492,131494,131496,131498,131500,131503,131505],{"class":35,"line":64},[33,131491,54364],{"class":47},[33,131493,2663],{"class":53522},[33,131495,63275],{"class":43},[33,131497,57],{"class":47},[33,131499,63280],{"class":60},[33,131501,131502],{"class":47},">五彩导航2\u003C\u002F",[33,131504,2663],{"class":53522},[33,131506,53529],{"class":47},[33,131508,131509,131511,131513,131515,131517,131519,131522,131524],{"class":35,"line":76},[33,131510,54364],{"class":47},[33,131512,2663],{"class":53522},[33,131514,63275],{"class":43},[33,131516,57],{"class":47},[33,131518,63280],{"class":60},[33,131520,131521],{"class":47},">五彩导航3\u003C\u002F",[33,131523,2663],{"class":53522},[33,131525,53529],{"class":47},[33,131527,131528,131530,131532,131534,131536,131538,131541,131543],{"class":35,"line":87},[33,131529,54364],{"class":47},[33,131531,2663],{"class":53522},[33,131533,63275],{"class":43},[33,131535,57],{"class":47},[33,131537,63280],{"class":60},[33,131539,131540],{"class":47},">五彩导航4\u003C\u002F",[33,131542,2663],{"class":53522},[33,131544,53529],{"class":47},[33,131546,131547,131549,131551,131553,131555,131557,131560,131562],{"class":35,"line":96},[33,131548,54364],{"class":47},[33,131550,2663],{"class":53522},[33,131552,63275],{"class":43},[33,131554,57],{"class":47},[33,131556,63280],{"class":60},[33,131558,131559],{"class":47},">五彩导航5\u003C\u002F",[33,131561,2663],{"class":53522},[33,131563,53529],{"class":47},[33,131565,131566,131568,131570],{"class":35,"line":103},[33,131567,54006],{"class":47},[33,131569,53832],{"class":53522},[33,131571,53529],{"class":47},[23,131573,131575],{"className":128750,"code":131574,"language":128752,"meta":28,"style":28},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[30,131576,131577,131586,131596,131608,131620,131630,131642,131652,131656,131681,131704,131727,131750],{"__ignoreMap":28},[33,131578,131579,131582,131584],{"class":35,"line":36},[33,131580,131581],{"class":43},".nav",[33,131583,3672],{"class":53522},[33,131585,17810],{"class":47},[33,131587,131588,131590,131592,131594],{"class":35,"line":51},[33,131589,130366],{"class":72},[33,131591,996],{"class":47},[33,131593,74596],{"class":72},[33,131595,3567],{"class":47},[33,131597,131598,131600,131602,131604,131606],{"class":35,"line":64},[33,131599,72781],{"class":72},[33,131601,996],{"class":47},[33,131603,3229],{"class":72},[33,131605,53713],{"class":39},[33,131607,3567],{"class":47},[33,131609,131610,131612,131614,131616,131618],{"class":35,"line":76},[33,131611,73001],{"class":72},[33,131613,996],{"class":47},[33,131615,3268],{"class":72},[33,131617,53713],{"class":39},[33,131619,3567],{"class":47},[33,131621,131622,131624,131626,131628],{"class":35,"line":87},[33,131623,72739],{"class":72},[33,131625,996],{"class":47},[33,131627,53813],{"class":72},[33,131629,3567],{"class":47},[33,131631,131632,131634,131636,131638,131640],{"class":35,"line":96},[33,131633,129434],{"class":72},[33,131635,996],{"class":47},[33,131637,3268],{"class":72},[33,131639,53713],{"class":39},[33,131641,3567],{"class":47},[33,131643,131644,131646,131648,131650],{"class":35,"line":103},[33,131645,73118],{"class":72},[33,131647,996],{"class":47},[33,131649,63060],{"class":72},[33,131651,3567],{"class":47},[33,131653,131654],{"class":35,"line":108},[33,131655,1010],{"class":47},[33,131657,131658,131660,131662,131665,131667,131669,131672,131674,131676,131678],{"class":35,"line":119},[33,131659,131581],{"class":43},[33,131661,3672],{"class":53522},[33,131663,131664],{"class":43},":nth-child",[33,131666,133],{"class":47},[33,131668,720],{"class":72},[33,131670,131671],{"class":47},") { ",[33,131673,131363],{"class":72},[33,131675,996],{"class":47},[33,131677,130781],{"class":72},[33,131679,131680],{"class":47},"; }\n",[33,131682,131683,131685,131687,131689,131691,131693,131695,131697,131699,131702],{"class":35,"line":128},[33,131684,131581],{"class":43},[33,131686,3672],{"class":53522},[33,131688,131664],{"class":43},[33,131690,133],{"class":47},[33,131692,725],{"class":72},[33,131694,131671],{"class":47},[33,131696,131363],{"class":72},[33,131698,996],{"class":47},[33,131700,131701],{"class":72},"#ff0000",[33,131703,131680],{"class":47},[33,131705,131706,131708,131710,131712,131714,131716,131718,131720,131722,131725],{"class":35,"line":1753},[33,131707,131581],{"class":43},[33,131709,3672],{"class":53522},[33,131711,131664],{"class":43},[33,131713,133],{"class":47},[33,131715,730],{"class":72},[33,131717,131671],{"class":47},[33,131719,131363],{"class":72},[33,131721,996],{"class":47},[33,131723,131724],{"class":72},"#00a4ff",[33,131726,131680],{"class":47},[33,131728,131729,131731,131733,131735,131737,131739,131741,131743,131745,131748],{"class":35,"line":1763},[33,131730,131581],{"class":43},[33,131732,3672],{"class":53522},[33,131734,131664],{"class":43},[33,131736,133],{"class":47},[33,131738,753],{"class":72},[33,131740,131671],{"class":47},[33,131742,131363],{"class":72},[33,131744,996],{"class":47},[33,131746,131747],{"class":72},"#ff00ff",[33,131749,131680],{"class":47},[33,131751,131752,131754,131756,131758,131760,131762,131764,131766,131768,131771],{"class":35,"line":1775},[33,131753,131581],{"class":43},[33,131755,3672],{"class":53522},[33,131757,131664],{"class":43},[33,131759,133],{"class":47},[33,131761,758],{"class":72},[33,131763,131671],{"class":47},[33,131765,131363],{"class":72},[33,131767,996],{"class":47},[33,131769,131770],{"class":72},"#00ff00",[33,131772,131680],{"class":47},[14,131774,131776],{"id":131775},"_83-css三大特性","8.3 css三大特性",[631,131778,131780],{"id":131779},"_831-层叠性","8.3.1 层叠性",[19,131782,131783],{},"为了解决样式冲突问题",[19,131785,131786],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131788,131789],{},"   ②样式不冲突，不会层叠",[631,131791,131793],{"id":131792},"_832-继承性","8.3.2 继承性",[19,131795,131796],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131798,131799],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[23,131801,131803],{"className":128750,"code":131802,"language":128752,"meta":28,"style":28},"p {\n  color: #333;\n}\n",[30,131804,131805,131811,131821],{"__ignoreMap":28},[33,131806,131807,131809],{"class":35,"line":36},[33,131808,19],{"class":53522},[33,131810,17810],{"class":47},[33,131812,131813,131815,131817,131819],{"class":35,"line":51},[33,131814,73118],{"class":72},[33,131816,996],{"class":47},[33,131818,64587],{"class":72},[33,131820,3567],{"class":47},[33,131822,131823],{"class":35,"line":64},[33,131824,1010],{"class":47},[3736,131826],{"style":128606,"src":131827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131829,131830],{},"解释：①行高可以跟单位也可以不跟单位",[19,131832,131833],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131835,131836],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131838,131839],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[631,131841,131843],{"id":131842},"_833-优先级","8.3.3 优先级",[328,131845,131846,131849],{},[331,131847,131848],{},"选择器相同，则执行层叠性",[331,131850,131851],{},"选择器不同，则根据选择器权重执行",[2563,131853,131854,131864],{},[2566,131855,131856],{},[2569,131857,131858,131861],{},[2572,131859,131860],{"align":25974},"选择器",[2572,131862,131863],{"align":25974},"选择器权重",[2610,131865,131866,131874,131882,131890,131898,131906],{},[2569,131867,131868,131871],{},[2615,131869,131870],{"align":25974},"继承 或者*",[2615,131872,131873],{"align":25974},"0，0，0，0",[2569,131875,131876,131879],{},[2615,131877,131878],{"align":25974},"标签选择器",[2615,131880,131881],{"align":25974},"0，0，0，1",[2569,131883,131884,131887],{},[2615,131885,131886],{"align":25974},"类选择器，伪类选择器",[2615,131888,131889],{"align":25974},"0，0，1，0",[2569,131891,131892,131895],{},[2615,131893,131894],{"align":25974},"ID选择器",[2615,131896,131897],{"align":25974},"0，1，0，0",[2569,131899,131900,131903],{},[2615,131901,131902],{"align":25974},"行内样式",[2615,131904,131905],{"align":25974},"1，0，0，0",[2569,131907,131908,131911],{},[2615,131909,131910],{"align":25974},"！important",[2615,131912,131913],{"align":25974},"无穷大",[19,131915,131916],{},"! important用法：",[23,131918,131920],{"className":128750,"code":131919,"language":128752,"meta":28,"style":28},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[30,131921,131922,131927,131933,131946,131950,131955,131961,131971],{"__ignoreMap":28},[33,131923,131924],{"class":35,"line":36},[33,131925,131926],{"class":2487},"\u002F* !important 拥有最高优先级 *\u002F\n",[33,131928,131929,131931],{"class":35,"line":51},[33,131930,53832],{"class":53522},[33,131932,17810],{"class":47},[33,131934,131935,131937,131939,131941,131944],{"class":35,"line":64},[33,131936,73118],{"class":72},[33,131938,996],{"class":47},[33,131940,53866],{"class":72},[33,131942,131943],{"class":39}," !important",[33,131945,3567],{"class":47},[33,131947,131948],{"class":35,"line":76},[33,131949,1010],{"class":47},[33,131951,131952],{"class":35,"line":87},[33,131953,131954],{"class":2487},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[33,131956,131957,131959],{"class":35,"line":96},[33,131958,53832],{"class":53522},[33,131960,17810],{"class":47},[33,131962,131963,131965,131967,131969],{"class":35,"line":103},[33,131964,73118],{"class":72},[33,131966,996],{"class":47},[33,131968,59639],{"class":72},[33,131970,3567],{"class":47},[33,131972,131973],{"class":35,"line":108},[33,131974,1010],{"class":47},[19,131976,131977],{},"优先级注意点：",[19,131979,131980],{},"①权重是有4组数字组成,但是不会有进位",[19,131982,131983],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131985,131986],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131988,131989],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131991,131992],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131994,131995],{},"⑥复合选择器",[2563,131997,131998,132008],{},[2566,131999,132000],{},[2569,132001,132002,132005],{},[2572,132003,132004],{"align":25974},"div ul li",[2572,132006,132007],{"align":25974},"0,0,0,3",[2610,132009,132010,132018,132026],{},[2569,132011,132012,132015],{},[2615,132013,132014],{"align":25974},".nav ul li",[2615,132016,132017],{"align":25974},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2569,132019,132020,132023],{},[2615,132021,132022],{"align":25974},"a:hover",[2615,132024,132025],{"align":25974},"0,0,1,1",[2569,132027,132028,132031],{},[2615,132029,132030],{"align":25974},".nav a",[2615,132032,132025],{"align":25974},[2331,132034,132035],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":132037},[132038,132046,132057],{"id":130146,"depth":51,"text":130147,"children":132039},[132040,132041,132042,132043,132044,132045],{"id":130159,"depth":64,"text":130160},{"id":130231,"depth":64,"text":130232},{"id":130303,"depth":64,"text":130304},{"id":130334,"depth":64,"text":130335},{"id":130341,"depth":64,"text":130342},{"id":130494,"depth":64,"text":130495},{"id":130802,"depth":51,"text":130803,"children":132047},[132048,132049,132050,132051,132052,132053,132054,132055,132056],{"id":130809,"depth":64,"text":130810},{"id":130819,"depth":64,"text":130820},{"id":130915,"depth":64,"text":130916},{"id":130988,"depth":64,"text":130989},{"id":131143,"depth":64,"text":131144},{"id":131231,"depth":64,"text":131232},{"id":131283,"depth":64,"text":131284},{"id":131342,"depth":64,"text":131343},{"id":131447,"depth":64,"text":131448},{"id":131775,"depth":51,"text":131776,"children":132058},[132059,132060,132061],{"id":131779,"depth":64,"text":131780},{"id":131792,"depth":64,"text":131793},{"id":131842,"depth":64,"text":131843},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":130138,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":132068,"title":132069,"body":132070,"description":2359,"extension":2360,"meta":133660,"navigation":99,"path":133661,"seo":133662,"stem":133663,"__hash__":133664},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":132071,"toc":133639},[132072,132075,132079,132082,132085,132088,132091,132094,132097,132100,132104,132112,132149,132185,132188,132202,132207,132241,132244,132337,132342,132345,132375,132378,132383,132391,132395,132402,132448,132492,132497,132500,132503,132506,132509,132512,132515,132517,132520,132524,132529,132573,132578,132581,132584,132621,132626,132629,132632,132635,132638,132670,132673,132676,132679,132711,132714,132717,132720,132724,132727,132759,132762,132766,132786,132789,132797,132800,132804,132809,132812,132844,132849,132852,132890,132894,132899,132902,132905,132936,132939,132956,132961,133013,133073,133078,133132,133170,133174,133178,133181,133185,133193,133196,133198,133209,133214,133262,133296,133299,133302,133305,133308,133352,133355,133358,133361,133364,133367,133370,133414,133417,133420,133423,133426,133429,133432,133438,133441,133485,133488,133491,133494,133497,133500,133544,133547,133549,133552,133556,133560,133598,133602,133605,133608,133612,133620,133624,133627,133630,133633,133636],[10,132073,132069],{"id":132074},"_9-css盒模型浮动与切图",[14,132076,132078],{"id":132077},"_91-盒子模型","9.1 盒子模型",[19,132080,132081],{},"利用盒子来设计网页",[19,132083,132084],{},"盒子包含：边框、外边距、内边距、实际内容",[19,132086,132087],{},"网页布局设置：",[19,132089,132090],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,132092,132093],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,132095,132096],{},"③往盒子里装内容",[3736,132098],{"style":128606,"src":132099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[631,132101,132103],{"id":132102},"_911-边框border","9.1.1 边框（border）",[328,132105,132106,132109],{},[331,132107,132108],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[331,132110,132111],{},"语法",[23,132113,132115],{"className":128750,"code":132114,"language":128752,"meta":28,"style":28},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[30,132116,132117,132122,132128,132145],{"__ignoreMap":28},[33,132118,132119],{"class":35,"line":36},[33,132120,132121],{"class":2487},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[33,132123,132124,132126],{"class":35,"line":51},[33,132125,53832],{"class":53522},[33,132127,17810],{"class":47},[33,132129,132130,132132,132134,132136,132138,132140,132143],{"class":35,"line":64},[33,132131,73109],{"class":72},[33,132133,996],{"class":47},[33,132135,720],{"class":72},[33,132137,53713],{"class":39},[33,132139,53742],{"class":72},[33,132141,132142],{"class":72}," #ccc",[33,132144,3567],{"class":47},[33,132146,132147],{"class":35,"line":76},[33,132148,1010],{"class":47},[2563,132150,132151,132159],{},[2566,132152,132153],{},[2569,132154,132155,132157],{},[2572,132156,131352],{"align":25974},[2572,132158,104901],{"align":25974},[2610,132160,132161,132169,132177],{},[2569,132162,132163,132166],{},[2615,132164,132165],{"align":25974},"border-width",[2615,132167,132168],{"align":25974},"定义边框粗细，单位是px",[2569,132170,132171,132174],{},[2615,132172,132173],{"align":25974},"border-style",[2615,132175,132176],{"align":25974},"边框的样式",[2569,132178,132179,132182],{},[2615,132180,132181],{"align":25974},"border-color",[2615,132183,132184],{"align":25974},"边框的颜色",[19,132186,132187],{},"边框样式 border-style 可以设置如下值：",[3413,132189,132190,132193,132196,132199],{},[331,132191,132192],{},"none：没有边框即忽略所有边框的宽度（默认值）",[331,132194,132195],{},"solid：边框为单实线(最为常用的)",[331,132197,132198],{},"dashed：边框为虚线",[331,132200,132201],{},"dotted：边框为点线",[328,132203,132204],{"start":64},[331,132205,132206],{},"边框的合写分写",[23,132208,132209],{"className":128750,"code":132114,"language":128752,"meta":28,"style":28},[30,132210,132211,132215,132221,132237],{"__ignoreMap":28},[33,132212,132213],{"class":35,"line":36},[33,132214,132121],{"class":2487},[33,132216,132217,132219],{"class":35,"line":51},[33,132218,53832],{"class":53522},[33,132220,17810],{"class":47},[33,132222,132223,132225,132227,132229,132231,132233,132235],{"class":35,"line":64},[33,132224,73109],{"class":72},[33,132226,996],{"class":47},[33,132228,720],{"class":72},[33,132230,53713],{"class":39},[33,132232,53742],{"class":72},[33,132234,132142],{"class":72},[33,132236,3567],{"class":47},[33,132238,132239],{"class":35,"line":76},[33,132240,1010],{"class":47},[19,132242,132243],{},"边框分开写法：",[23,132245,132247],{"className":128750,"code":132246,"language":128752,"meta":28,"style":28},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[30,132248,132249,132254,132260,132278,132296,132315,132333],{"__ignoreMap":28},[33,132250,132251],{"class":35,"line":36},[33,132252,132253],{"class":2487},"\u002F* 边框分开写法 *\u002F\n",[33,132255,132256,132258],{"class":35,"line":51},[33,132257,53832],{"class":53522},[33,132259,17810],{"class":47},[33,132261,132262,132265,132267,132269,132271,132273,132276],{"class":35,"line":64},[33,132263,132264],{"class":72},"  border-top",[33,132266,996],{"class":47},[33,132268,720],{"class":72},[33,132270,53713],{"class":39},[33,132272,53742],{"class":72},[33,132274,132275],{"class":72}," #000",[33,132277,3567],{"class":47},[33,132279,132280,132283,132285,132287,132289,132291,132294],{"class":35,"line":76},[33,132281,132282],{"class":72},"  border-right",[33,132284,996],{"class":47},[33,132286,725],{"class":72},[33,132288,53713],{"class":39},[33,132290,64459],{"class":72},[33,132292,132293],{"class":72}," #333",[33,132295,3567],{"class":47},[33,132297,132298,132301,132303,132305,132307,132310,132313],{"class":35,"line":87},[33,132299,132300],{"class":72},"  border-bottom",[33,132302,996],{"class":47},[33,132304,730],{"class":72},[33,132306,53713],{"class":39},[33,132308,132309],{"class":72}," dotted",[33,132311,132312],{"class":72}," #666",[33,132314,3567],{"class":47},[33,132316,132317,132320,132322,132324,132326,132328,132331],{"class":35,"line":96},[33,132318,132319],{"class":72},"  border-left",[33,132321,996],{"class":47},[33,132323,720],{"class":72},[33,132325,53713],{"class":39},[33,132327,53742],{"class":72},[33,132329,132330],{"class":72}," #999",[33,132332,3567],{"class":47},[33,132334,132335],{"class":35,"line":103},[33,132336,1010],{"class":47},[328,132338,132339],{"start":76},[331,132340,132341],{},"表格的细线边框",[19,132343,132344],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[23,132346,132348],{"className":128750,"code":132347,"language":128752,"meta":28,"style":28},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[30,132349,132350,132355,132361,132371],{"__ignoreMap":28},[33,132351,132352],{"class":35,"line":36},[33,132353,132354],{"class":2487},"\u002F* 表格细线边框合并 *\u002F\n",[33,132356,132357,132359],{"class":35,"line":51},[33,132358,2563],{"class":53522},[33,132360,17810],{"class":47},[33,132362,132363,132365,132367,132369],{"class":35,"line":64},[33,132364,72791],{"class":72},[33,132366,996],{"class":47},[33,132368,67252],{"class":72},[33,132370,3567],{"class":47},[33,132372,132373],{"class":35,"line":76},[33,132374,1010],{"class":47},[19,132376,132377],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[328,132379,132380],{"start":87},[331,132381,132382],{},"解决边框额外增加盒子的实际大小的方法：",[3413,132384,132385,132388],{},[331,132386,132387],{},"测量盒子大小的时候,不量边框",[331,132389,132390],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[631,132392,132394],{"id":132393},"_912-内边距","9.1.2 内边距",[328,132396,132397,132400],{},[331,132398,132399],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[331,132401,132111],{},[2563,132403,132404,132414],{},[2566,132405,132406],{},[2569,132407,132408,132411],{},[2572,132409,132410],{"align":25974},"值的个数",[2572,132412,132413],{"align":25974},"表达意思",[2610,132415,132416,132424,132432,132440],{},[2569,132417,132418,132421],{},[2615,132419,132420],{"align":25974},"padding: 5px;",[2615,132422,132423],{"align":25974},"1个值，代表上下左右都有5个元素",[2569,132425,132426,132429],{},[2615,132427,132428],{"align":25974},"padding: 5px 10px;",[2615,132430,132431],{"align":25974},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2569,132433,132434,132437],{},[2615,132435,132436],{"align":25974},"padding: 5px 10px 20px;",[2615,132438,132439],{"align":25974},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2569,132441,132442,132445],{},[2615,132443,132444],{"align":25974},"padding: 5px 10px 20px 30px;",[2615,132446,132447],{"align":25974},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2563,132449,132450,132458],{},[2566,132451,132452],{},[2569,132453,132454,132456],{},[2572,132455,131352],{"align":25974},[2572,132457,104901],{"align":25974},[2610,132459,132460,132468,132476,132484],{},[2569,132461,132462,132465],{},[2615,132463,132464],{"align":25974},"padding-left",[2615,132466,132467],{"align":25974},"左内边距",[2569,132469,132470,132473],{},[2615,132471,132472],{"align":25974},"padding-right",[2615,132474,132475],{"align":25974},"右内边距",[2569,132477,132478,132481],{},[2615,132479,132480],{"align":25974},"padding-top",[2615,132482,132483],{"align":25974},"上内边距",[2569,132485,132486,132489],{},[2615,132487,132488],{"align":25974},"padding-bottom",[2615,132490,132491],{"align":25974},"下内边距",[328,132493,132494],{"start":64},[331,132495,132496],{},"内边距会影响盒子的实际大小",[19,132498,132499],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132501,132502],{},"①内容和边框有了距离，添加了内边距",[19,132504,132505],{},"②padding影响了盒子实际大小",[19,132507,132508],{},"内边距对盒子大小的影响：",[19,132510,132511],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132513,132514],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132516,97428],{},[19,132518,132519],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[631,132521,132523],{"id":132522},"_913-外边距","9.1.3 外边距",[328,132525,132526],{},[331,132527,132528],{},"控制盒子与盒子之间的距离",[2563,132530,132531,132539],{},[2566,132532,132533],{},[2569,132534,132535,132537],{},[2572,132536,131352],{"align":25974},[2572,132538,104901],{"align":25974},[2610,132540,132541,132549,132557,132565],{},[2569,132542,132543,132546],{},[2615,132544,132545],{"align":25974},"margin-left",[2615,132547,132548],{"align":25974},"左外边距",[2569,132550,132551,132554],{},[2615,132552,132553],{"align":25974},"margin-right",[2615,132555,132556],{"align":25974},"右外边距",[2569,132558,132559,132562],{},[2615,132560,132561],{"align":25974},"margin-top",[2615,132563,132564],{"align":25974},"上外边距",[2569,132566,132567,132570],{},[2615,132568,132569],{"align":25974},"margin-bottom",[2615,132571,132572],{"align":25974},"下外边距",[328,132574,132575],{"start":51},[331,132576,132577],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132579,132580],{},"①盒子必须指定了宽度（width）",[19,132582,132583],{},"②盒子左右的外边距都设置为 auto",[23,132585,132587],{"className":128750,"code":132586,"language":128752,"meta":28,"style":28},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,132588,132589,132594,132601,132617],{"__ignoreMap":28},[33,132590,132591],{"class":35,"line":36},[33,132592,132593],{"class":2487},"\u002F* margin 复合写法（同上） *\u002F\n",[33,132595,132596,132599],{"class":35,"line":51},[33,132597,132598],{"class":43},".box",[33,132600,17810],{"class":47},[33,132602,132603,132605,132607,132609,132611,132614],{"class":35,"line":64},[33,132604,72683],{"class":72},[33,132606,996],{"class":47},[33,132608,2617],{"class":72},[33,132610,53777],{"class":72},[33,132612,132613],{"class":47},";  ",[33,132615,132616],{"class":2487},"\u002F* 块级盒子水平居中 *\u002F\n",[33,132618,132619],{"class":35,"line":76},[33,132620,1010],{"class":47},[328,132622,132623],{"start":64},[331,132624,132625],{},"外边距塌陷问题",[19,132627,132628],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3736,132630],{"style":128606,"src":132631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132633,132634],{},"解决方案：",[19,132636,132637],{},"①可以为父亲元素定义上边距",[23,132639,132640],{"className":128750,"code":132586,"language":128752,"meta":28,"style":28},[30,132641,132642,132646,132652,132666],{"__ignoreMap":28},[33,132643,132644],{"class":35,"line":36},[33,132645,132593],{"class":2487},[33,132647,132648,132650],{"class":35,"line":51},[33,132649,132598],{"class":43},[33,132651,17810],{"class":47},[33,132653,132654,132656,132658,132660,132662,132664],{"class":35,"line":64},[33,132655,72683],{"class":72},[33,132657,996],{"class":47},[33,132659,2617],{"class":72},[33,132661,53777],{"class":72},[33,132663,132613],{"class":47},[33,132665,132616],{"class":2487},[33,132667,132668],{"class":35,"line":76},[33,132669,1010],{"class":47},[19,132671,132672],{},"②可以为父亲元素定义上内边距",[19,132674,132675],{},"③可以为父亲元素添加overflow:hidden",[3736,132677],{"style":128606,"src":132678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[23,132680,132681],{"className":128750,"code":132586,"language":128752,"meta":28,"style":28},[30,132682,132683,132687,132693,132707],{"__ignoreMap":28},[33,132684,132685],{"class":35,"line":36},[33,132686,132593],{"class":2487},[33,132688,132689,132691],{"class":35,"line":51},[33,132690,132598],{"class":43},[33,132692,17810],{"class":47},[33,132694,132695,132697,132699,132701,132703,132705],{"class":35,"line":64},[33,132696,72683],{"class":72},[33,132698,996],{"class":47},[33,132700,2617],{"class":72},[33,132702,53777],{"class":72},[33,132704,132613],{"class":47},[33,132706,132616],{"class":2487},[33,132708,132709],{"class":35,"line":76},[33,132710,1010],{"class":47},[3736,132712],{"style":128606,"src":132713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132715,132716],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132718,132719],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[631,132721,132723],{"id":132722},"_914-清除内外边距","9.1.4 清除内外边距",[19,132725,132726],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[23,132728,132729],{"className":128750,"code":132586,"language":128752,"meta":28,"style":28},[30,132730,132731,132735,132741,132755],{"__ignoreMap":28},[33,132732,132733],{"class":35,"line":36},[33,132734,132593],{"class":2487},[33,132736,132737,132739],{"class":35,"line":51},[33,132738,132598],{"class":43},[33,132740,17810],{"class":47},[33,132742,132743,132745,132747,132749,132751,132753],{"class":35,"line":64},[33,132744,72683],{"class":72},[33,132746,996],{"class":47},[33,132748,2617],{"class":72},[33,132750,53777],{"class":72},[33,132752,132613],{"class":47},[33,132754,132616],{"class":2487},[33,132756,132757],{"class":35,"line":76},[33,132758,1010],{"class":47},[19,132760,132761],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[631,132763,132765],{"id":132764},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3413,132767,132768,132771,132774,132777,132780,132783],{},[331,132769,132770],{},"文件→打开 ：可以打开我们要测量的图片",[331,132772,132773],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[331,132775,132776],{},"右击标尺，把里面的单位改为像素",[331,132778,132779],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[331,132781,132782],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[331,132784,132785],{},"用选区拖动 可以测量大小",[3736,132787],{"style":128606,"src":132788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3413,132790,132791,132794],{},[331,132792,132793],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[331,132795,132796],{},"吸管取色工具",[3736,132798],{"style":128606,"src":132799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[631,132801,132803],{"id":132802},"_916-案例","9.1.6 案例",[328,132805,132806],{},[331,132807,132808],{},"小米商品",[3736,132810],{"style":128606,"src":132811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[23,132813,132814],{"className":128750,"code":132586,"language":128752,"meta":28,"style":28},[30,132815,132816,132820,132826,132840],{"__ignoreMap":28},[33,132817,132818],{"class":35,"line":36},[33,132819,132593],{"class":2487},[33,132821,132822,132824],{"class":35,"line":51},[33,132823,132598],{"class":43},[33,132825,17810],{"class":47},[33,132827,132828,132830,132832,132834,132836,132838],{"class":35,"line":64},[33,132829,72683],{"class":72},[33,132831,996],{"class":47},[33,132833,2617],{"class":72},[33,132835,53777],{"class":72},[33,132837,132613],{"class":47},[33,132839,132616],{"class":2487},[33,132841,132842],{"class":35,"line":76},[33,132843,1010],{"class":47},[328,132845,132846],{"start":51},[331,132847,132848],{},"快报模块",[3736,132850],{"style":128606,"src":132851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[23,132853,132855],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[30,132856,132857,132862,132877,132882],{"__ignoreMap":28},[33,132858,132859],{"class":35,"line":36},[33,132860,132861],{"class":2487},"\u003C!-- HTML 代码示例 -->\n",[33,132863,132864,132866,132868,132870,132872,132875],{"class":35,"line":51},[33,132865,2226],{"class":47},[33,132867,53832],{"class":53522},[33,132869,55705],{"class":43},[33,132871,57],{"class":47},[33,132873,132874],{"class":60},"\"example\"",[33,132876,53529],{"class":47},[33,132878,132879],{"class":35,"line":64},[33,132880,132881],{"class":47},"  示例内容\n",[33,132883,132884,132886,132888],{"class":35,"line":76},[33,132885,54006],{"class":47},[33,132887,53832],{"class":53522},[33,132889,53529],{"class":47},[631,132891,132893],{"id":132892},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[328,132895,132896],{},[331,132897,132898],{},"圆角边框",[19,132900,132901],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3736,132903],{"style":128606,"src":132904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[23,132906,132908],{"className":128750,"code":132907,"language":128752,"meta":28,"style":28},"div {\n  border: 1px solid #ccc;\n}\n",[30,132909,132910,132916,132932],{"__ignoreMap":28},[33,132911,132912,132914],{"class":35,"line":36},[33,132913,53832],{"class":53522},[33,132915,17810],{"class":47},[33,132917,132918,132920,132922,132924,132926,132928,132930],{"class":35,"line":51},[33,132919,73109],{"class":72},[33,132921,996],{"class":47},[33,132923,720],{"class":72},[33,132925,53713],{"class":39},[33,132927,53742],{"class":72},[33,132929,132142],{"class":72},[33,132931,3567],{"class":47},[33,132933,132934],{"class":35,"line":64},[33,132935,1010],{"class":47},[19,132937,132938],{},"解释:",[3413,132940,132941,132944,132947,132950,132953],{},[331,132942,132943],{},"参数值可以为数值或百分比的形式",[331,132945,132946],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[331,132948,132949],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[331,132951,132952],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[331,132954,132955],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[328,132957,132958],{"start":51},[331,132959,132960],{},"盒子阴影",[23,132962,132964],{"className":128750,"code":132963,"language":128752,"meta":28,"style":28},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[30,132965,132966,132972,133009],{"__ignoreMap":28},[33,132967,132968,132970],{"class":35,"line":36},[33,132969,53832],{"class":53522},[33,132971,17810],{"class":47},[33,132973,132974,132977,132979,132981,132983,132985,132987,132989,132991,132993,132995,132997,132999,133001,133003,133005,133007],{"class":35,"line":51},[33,132975,132976],{"class":72},"  box-shadow",[33,132978,996],{"class":47},[33,132980,2617],{"class":72},[33,132982,1354],{"class":72},[33,132984,53713],{"class":39},[33,132986,4297],{"class":72},[33,132988,53713],{"class":39},[33,132990,80978],{"class":72},[33,132992,133],{"class":47},[33,132994,2617],{"class":72},[33,132996,245],{"class":47},[33,132998,2617],{"class":72},[33,133000,245],{"class":47},[33,133002,2617],{"class":72},[33,133004,245],{"class":47},[33,133006,88419],{"class":72},[33,133008,4976],{"class":47},[33,133010,133011],{"class":35,"line":64},[33,133012,1010],{"class":47},[2563,133014,133015,133023],{},[2566,133016,133017],{},[2569,133018,133019,133021],{},[2572,133020,2578],{"align":25974},[2572,133022,29726],{"align":25974},[2610,133024,133025,133033,133041,133049,133057,133065],{},[2569,133026,133027,133030],{},[2615,133028,133029],{"align":25974},"h-shadow",[2615,133031,133032],{"align":25974},"必需,水平阴影的位置,允许负值",[2569,133034,133035,133038],{},[2615,133036,133037],{"align":25974},"v-shadow",[2615,133039,133040],{"align":25974},"必需,垂直阴影的位置,允许负值",[2569,133042,133043,133046],{},[2615,133044,133045],{"align":25974},"blur",[2615,133047,133048],{"align":25974},"可选,模糊距离,就是影子的虚实",[2569,133050,133051,133054],{},[2615,133052,133053],{"align":25974},"spread",[2615,133055,133056],{"align":25974},"可选,阴影尺寸",[2569,133058,133059,133062],{},[2615,133060,133061],{"align":25974},"color",[2615,133063,133064],{"align":25974},"可选,阴影的颜色",[2569,133066,133067,133070],{},[2615,133068,133069],{"align":25974},"inset",[2615,133071,133072],{"align":25974},"可选,将外部阴影(outset)改为内部阴影",[328,133074,133075],{"start":64},[331,133076,133077],{},"文字阴影",[23,133079,133081],{"className":128750,"code":133080,"language":128752,"meta":28,"style":28},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[30,133082,133083,133089,133128],{"__ignoreMap":28},[33,133084,133085,133087],{"class":35,"line":36},[33,133086,19],{"class":53522},[33,133088,17810],{"class":47},[33,133090,133091,133094,133096,133098,133100,133102,133104,133106,133108,133110,133112,133114,133116,133118,133120,133122,133124,133126],{"class":35,"line":51},[33,133092,133093],{"class":72},"  text-shadow",[33,133095,996],{"class":47},[33,133097,720],{"class":72},[33,133099,53713],{"class":39},[33,133101,27357],{"class":72},[33,133103,53713],{"class":39},[33,133105,1354],{"class":72},[33,133107,53713],{"class":39},[33,133109,80978],{"class":72},[33,133111,133],{"class":47},[33,133113,2617],{"class":72},[33,133115,245],{"class":47},[33,133117,2617],{"class":72},[33,133119,245],{"class":47},[33,133121,2617],{"class":72},[33,133123,245],{"class":47},[33,133125,102728],{"class":72},[33,133127,4976],{"class":47},[33,133129,133130],{"class":35,"line":64},[33,133131,1010],{"class":47},[2563,133133,133134,133142],{},[2566,133135,133136],{},[2569,133137,133138,133140],{},[2572,133139,2578],{"align":25974},[2572,133141,29726],{"align":25974},[2610,133143,133144,133150,133157,133164],{},[2569,133145,133146,133148],{},[2615,133147,133029],{"align":25974},[2615,133149,133032],{"align":25974},[2569,133151,133152,133154],{},[2615,133153,133037],{"align":25974},[2615,133155,133156],{"align":25974},"必需,垂直阴影位置,允许负值",[2569,133158,133159,133161],{},[2615,133160,133045],{"align":25974},[2615,133162,133163],{"align":25974},"可选,模糊的距离",[2569,133165,133166,133168],{},[2615,133167,133061],{"align":25974},[2615,133169,133064],{"align":25974},[14,133171,133173],{"id":133172},"_92-浮动","9.2 浮动",[631,133175,133177],{"id":133176},"_921-浮动介绍","9.2.1 浮动介绍",[19,133179,133180],{},"在16.2中详细介绍",[631,133182,133184],{"id":133183},"_922-清除浮动","9.2.2 清除浮动",[328,133186,133187,133190],{},[331,133188,133189],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[331,133191,133192],{},"清除浮动的本质",[19,133194,133195],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,133197,11271],{},[3413,133199,133200,133203,133206],{},[331,133201,133202],{},"如果父盒子本身有高度，则不需要清除浮动",[331,133204,133205],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[331,133207,133208],{},"父级有了高度，就不会影响下面的标准流了",[328,133210,133211],{"start":64},[331,133212,133213],{},"清除浮动样式",[23,133215,133217],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[30,133218,133219,133226,133237,133241,133248,133258],{"__ignoreMap":28},[33,133220,133221,133224],{"class":35,"line":36},[33,133222,133223],{"class":43},".left",[33,133225,17810],{"class":47},[33,133227,133228,133231,133233,133235],{"class":35,"line":51},[33,133229,133230],{"class":72},"  float",[33,133232,996],{"class":47},[33,133234,25974],{"class":72},[33,133236,3567],{"class":47},[33,133238,133239],{"class":35,"line":64},[33,133240,1010],{"class":47},[33,133242,133243,133246],{"class":35,"line":76},[33,133244,133245],{"class":43},".right",[33,133247,17810],{"class":47},[33,133249,133250,133252,133254,133256],{"class":35,"line":87},[33,133251,133230],{"class":72},[33,133253,996],{"class":47},[33,133255,74735],{"class":72},[33,133257,3567],{"class":47},[33,133259,133260],{"class":35,"line":96},[33,133261,1010],{"class":47},[2563,133263,133264,133272],{},[2566,133265,133266],{},[2569,133267,133268,133270],{},[2572,133269,129214],{"align":25974},[2572,133271,29726],{"align":25974},[2610,133273,133274,133281,133288],{},[2569,133275,133276,133278],{},[2615,133277,25974],{"align":25974},[2615,133279,133280],{"align":25974},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2569,133282,133283,133285],{},[2615,133284,74735],{"align":25974},[2615,133286,133287],{"align":25974},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2569,133289,133290,133293],{},[2615,133291,133292],{"align":25974},"both",[2615,133294,133295],{"align":25974},"同时清除左右侧浮动的影响",[19,133297,133298],{},"法一",[19,133300,133301],{},"额外标签法也称为隔墙法",[19,133303,133304],{},"使用方式：",[19,133306,133307],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[23,133309,133310],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,133311,133312,133318,133328,133332,133338,133348],{"__ignoreMap":28},[33,133313,133314,133316],{"class":35,"line":36},[33,133315,133223],{"class":43},[33,133317,17810],{"class":47},[33,133319,133320,133322,133324,133326],{"class":35,"line":51},[33,133321,133230],{"class":72},[33,133323,996],{"class":47},[33,133325,25974],{"class":72},[33,133327,3567],{"class":47},[33,133329,133330],{"class":35,"line":64},[33,133331,1010],{"class":47},[33,133333,133334,133336],{"class":35,"line":76},[33,133335,133245],{"class":43},[33,133337,17810],{"class":47},[33,133339,133340,133342,133344,133346],{"class":35,"line":87},[33,133341,133230],{"class":72},[33,133343,996],{"class":47},[33,133345,74735],{"class":72},[33,133347,3567],{"class":47},[33,133349,133350],{"class":35,"line":96},[33,133351,1010],{"class":47},[19,133353,133354],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,133356,133357],{},"优点： 通俗易懂，书写方便",[19,133359,133360],{},"缺点： 添加许多无意义的标签，结构化较差",[19,133362,133363],{},"注意： 要求这个新的空标签必须是块级元素。",[19,133365,133366],{},"法二",[19,133368,133369],{},"父级添加overflow属性",[23,133371,133372],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,133373,133374,133380,133390,133394,133400,133410],{"__ignoreMap":28},[33,133375,133376,133378],{"class":35,"line":36},[33,133377,133223],{"class":43},[33,133379,17810],{"class":47},[33,133381,133382,133384,133386,133388],{"class":35,"line":51},[33,133383,133230],{"class":72},[33,133385,996],{"class":47},[33,133387,25974],{"class":72},[33,133389,3567],{"class":47},[33,133391,133392],{"class":35,"line":64},[33,133393,1010],{"class":47},[33,133395,133396,133398],{"class":35,"line":76},[33,133397,133245],{"class":43},[33,133399,17810],{"class":47},[33,133401,133402,133404,133406,133408],{"class":35,"line":87},[33,133403,133230],{"class":72},[33,133405,996],{"class":47},[33,133407,74735],{"class":72},[33,133409,3567],{"class":47},[33,133411,133412],{"class":35,"line":96},[33,133413,1010],{"class":47},[19,133415,133416],{},"overflow: hidden;",[19,133418,133419],{},"优点：代码简洁",[19,133421,133422],{},"缺点：无法显示溢出的部分",[19,133424,133425],{},"注意：是给父元素添加代码",[19,133427,133428],{},"法三",[19,133430,133431],{},"父级添加after伪元素",[19,133433,133434,133437],{},[133435,133436],"after",{}," 方式是额外标签法的升级版",[19,133439,133440],{},"使用的时候复制就可以",[23,133442,133443],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,133444,133445,133451,133461,133465,133471,133481],{"__ignoreMap":28},[33,133446,133447,133449],{"class":35,"line":36},[33,133448,133223],{"class":43},[33,133450,17810],{"class":47},[33,133452,133453,133455,133457,133459],{"class":35,"line":51},[33,133454,133230],{"class":72},[33,133456,996],{"class":47},[33,133458,25974],{"class":72},[33,133460,3567],{"class":47},[33,133462,133463],{"class":35,"line":64},[33,133464,1010],{"class":47},[33,133466,133467,133469],{"class":35,"line":76},[33,133468,133245],{"class":43},[33,133470,17810],{"class":47},[33,133472,133473,133475,133477,133479],{"class":35,"line":87},[33,133474,133230],{"class":72},[33,133476,996],{"class":47},[33,133478,74735],{"class":72},[33,133480,3567],{"class":47},[33,133482,133483],{"class":35,"line":96},[33,133484,1010],{"class":47},[19,133486,133487],{},"优点：没有增加标签，结构更简单",[19,133489,133490],{},"缺点：照顾低版本浏览器",[19,133492,133493],{},"代表网站： 百度、淘宝网、网易等",[19,133495,133496],{},"法四",[19,133498,133499],{},"父级添加双伪元素",[23,133501,133502],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,133503,133504,133510,133520,133524,133530,133540],{"__ignoreMap":28},[33,133505,133506,133508],{"class":35,"line":36},[33,133507,133223],{"class":43},[33,133509,17810],{"class":47},[33,133511,133512,133514,133516,133518],{"class":35,"line":51},[33,133513,133230],{"class":72},[33,133515,996],{"class":47},[33,133517,25974],{"class":72},[33,133519,3567],{"class":47},[33,133521,133522],{"class":35,"line":64},[33,133523,1010],{"class":47},[33,133525,133526,133528],{"class":35,"line":76},[33,133527,133245],{"class":43},[33,133529,17810],{"class":47},[33,133531,133532,133534,133536,133538],{"class":35,"line":87},[33,133533,133230],{"class":72},[33,133535,996],{"class":47},[33,133537,74735],{"class":72},[33,133539,3567],{"class":47},[33,133541,133542],{"class":35,"line":96},[33,133543,1010],{"class":47},[19,133545,133546],{},"优点：代码更简洁",[19,133548,133490],{},[19,133550,133551],{},"代表网站：小米、腾讯等",[14,133553,133555],{"id":133554},"_93-ps切图","9.3 PS切图",[631,133557,133559],{"id":133558},"_931-常见图片格式","9.3.1 常见图片格式",[2563,133561,133562,133572],{},[2566,133563,133564],{},[2569,133565,133566,133569],{},[2572,133567,133568],{"align":25974},"jpg图像格式",[2572,133570,133571],{"align":25974},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2610,133573,133574,133582,133590],{},[2569,133575,133576,133579],{},[2615,133577,133578],{"align":25974},"gif图像格式",[2615,133580,133581],{"align":25974},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2569,133583,133584,133587],{},[2615,133585,133586],{"align":25974},"png图像格式",[2615,133588,133589],{"align":25974},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2569,133591,133592,133595],{},[2615,133593,133594],{"align":25974},"PSD图像格式",[2615,133596,133597],{"align":25974},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[631,133599,133601],{"id":133600},"_932-图层切图","9.3.2 图层切图",[19,133603,133604],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133606,133607],{},"按住shift选中两个图层->图层菜单->合并图层",[631,133609,133611],{"id":133610},"_933-切片切图","9.3.3 切片切图",[3413,133613,133614,133617],{},[331,133615,133616],{},"利用切片工具手动划出",[331,133618,133619],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[631,133621,133623],{"id":133622},"_934-切图步骤","9.3.4 切图步骤",[19,133625,133626],{},"用切片工具选中：",[3736,133628],{"style":128606,"src":133629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133631,133632],{},"文件 -> 导出",[3736,133634],{"style":128606,"src":133635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2331,133637,133638],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":133640},[133641,133650,133654],{"id":132077,"depth":51,"text":132078,"children":133642},[133643,133644,133645,133646,133647,133648,133649],{"id":132102,"depth":64,"text":132103},{"id":132393,"depth":64,"text":132394},{"id":132522,"depth":64,"text":132523},{"id":132722,"depth":64,"text":132723},{"id":132764,"depth":64,"text":132765},{"id":132802,"depth":64,"text":132803},{"id":132892,"depth":64,"text":132893},{"id":133172,"depth":51,"text":133173,"children":133651},[133652,133653],{"id":133176,"depth":64,"text":133177},{"id":133183,"depth":64,"text":133184},{"id":133554,"depth":51,"text":133555,"children":133655},[133656,133657,133658,133659],{"id":133558,"depth":64,"text":133559},{"id":133600,"depth":64,"text":133601},{"id":133610,"depth":64,"text":133611},{"id":133622,"depth":64,"text":133623},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":132069,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133666,"title":133667,"body":133668,"description":2359,"extension":2360,"meta":134309,"navigation":99,"path":134310,"seo":134311,"stem":134312,"__hash__":134313},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133669,"toc":134297},[133670,133673,133677,133703,133737,133741,133745,133748,133790,133797,133807,133815,133817,133820,133823,133826,133833,133847,133851,133854,133883,133887,133890,133904,133908,133911,133939,133943,133946,133972,133976,133981,134014,134019,134047,134051,134068,134114,134119,134163,134180,134287,134295],[10,133671,133667],{"id":133672},"_10-css规范与学成在线案例",[14,133674,133676],{"id":133675},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[328,133678,133679,133685,133691,133697],{},[331,133680,133681,133684],{},[2575,133682,133683],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[331,133686,133687,133690],{},[2575,133688,133689],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[331,133692,133693,133696],{},[2575,133694,133695],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[331,133698,133699,133702],{},[2575,133700,133701],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[23,133704,133705],{"className":128750,"code":132114,"language":128752,"meta":28,"style":28},[30,133706,133707,133711,133717,133733],{"__ignoreMap":28},[33,133708,133709],{"class":35,"line":36},[33,133710,132121],{"class":2487},[33,133712,133713,133715],{"class":35,"line":51},[33,133714,53832],{"class":53522},[33,133716,17810],{"class":47},[33,133718,133719,133721,133723,133725,133727,133729,133731],{"class":35,"line":64},[33,133720,73109],{"class":72},[33,133722,996],{"class":47},[33,133724,720],{"class":72},[33,133726,53713],{"class":39},[33,133728,53742],{"class":72},[33,133730,132142],{"class":72},[33,133732,3567],{"class":47},[33,133734,133735],{"class":35,"line":76},[33,133736,1010],{"class":47},[14,133738,133740],{"id":133739},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[631,133742,133744],{"id":133743},"_1021-header头部制作","10.2.1 header头部制作",[3736,133746],{"style":128606,"src":133747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3413,133749,133750,133757,133764,133770,133777,133784],{},[331,133751,133752,133753,133756],{},"1号是版心盒子 ",[2575,133754,133755],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[331,133758,133759,133760,133763],{},"版心盒子 里面包含 2号盒子 ",[2575,133761,133762],{},"logo"," 图标",[331,133765,133766,133767,133769],{},"版心盒子 里面包含 3号盒子 ",[2575,133768,55932],{}," 导航栏",[331,133771,133772,133773,133776],{},"版心盒子 里面包含 4号盒子 ",[2575,133774,133775],{},"search"," 搜索框",[331,133778,133779,133780,133783],{},"版心盒子 里面包含 5号盒子 ",[2575,133781,133782],{},"user"," 个人信息",[331,133785,133786,133787],{},"注意，要求里面的 ",[2575,133788,133789],{},"4个子盒子 必须都浮动",[328,133791,133792],{},[331,133793,133794],{},[2575,133795,133796],{},"导航栏注意点:",[19,133798,133799,133800,133803,133804],{},"实际开发中， ",[2575,133801,133802],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2575,133805,133806],{},"用 li 包含链接(li+a)的做法",[3413,133808,133809,133812],{},[331,133810,133811],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[331,133813,133814],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133816,11271],{},[19,133818,133819],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133821,133822],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133824,133825],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[328,133827,133828],{"start":51},[331,133829,133830],{},[2575,133831,133832],{},"4号盒子search的细节：",[3413,133834,133835,133838,133841],{},[331,133836,133837],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[331,133839,133840],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[331,133842,133843,133846],{},[30,133844,133845],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[631,133848,133850],{"id":133849},"_1022-banner制作","10.2.2 banner制作",[3736,133852],{"style":128606,"src":133853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3413,133855,133856,133863,133869,133876],{},[331,133857,133858,133859,133862],{},"1号盒子是通栏的大盒子 ",[2575,133860,133861],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[331,133864,133865,133866,133868],{},"2号盒子是版心 ",[2575,133867,3208],{}," ， 要水平居中对齐",[331,133870,133871,133872,133875],{},"3号盒子版心内，左对齐 ",[2575,133873,133874],{},"subnav"," 侧导航栏",[331,133877,133878,133879,133882],{},"4号盒子版心内，右对齐 ",[2575,133880,133881],{},"course"," 课程",[631,133884,133886],{"id":133885},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3736,133888],{"style":128606,"src":133889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3413,133891,133892,133895,133898,133901],{},[331,133893,133894],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[331,133896,133897],{},"1号盒子是标题 H3 左侧浮动",[331,133899,133900],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[331,133902,133903],{},"3号盒子 右浮动 mod 修改",[631,133905,133907],{"id":133906},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3736,133909],{"style":128606,"src":133910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3413,133912,133913,133919,133926,133933,133936],{},[331,133914,133915,133916,133918],{},"1号盒子为最大的盒子 ",[2575,133917,55933],{}," 版心水平居中对齐",[331,133920,133921,133922,133925],{},"2号盒子为上面部分 ",[2575,133923,133924],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[331,133927,133928,133929,133932],{},"3号盒子为底下部分 ",[2575,133930,133931],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[331,133934,133935],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[331,133937,133938],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[631,133940,133942],{"id":133941},"_1025-底部模块制作","10.2.5 底部模块制作",[3736,133944],{"style":128606,"src":133945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3413,133947,133948,133955,133958,133965],{},[331,133949,133950,133951,133954],{},"1号盒子通栏大盒子 底部 ",[2575,133952,133953],{},"footer"," 给高度 底色是白色",[331,133956,133957],{},"2号盒子版心水平居中",[331,133959,133960,133961,133964],{},"3号盒子版权 ",[2575,133962,133963],{},"copyright"," 左对齐",[331,133966,133967,133968,133971],{},"4号盒子 链接组 ",[2575,133969,133970],{},"links"," 右对齐",[631,133973,133975],{"id":133974},"_1026-代码模块","10.2.6 代码模块",[328,133977,133978],{},[331,133979,133980],{},"html部分",[23,133982,133984],{"className":129497,"code":133983,"language":129499,"meta":28,"style":28},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[30,133985,133986],{"__ignoreMap":28},[33,133987,133988,133990,133992,133994,133996,133999,134002,134004,134007,134010,134012],{"class":35,"line":36},[33,133989,2226],{"class":47},[33,133991,2663],{"class":53522},[33,133993,63275],{"class":43},[33,133995,57],{"class":47},[33,133997,133998],{"class":60},"\"https:\u002F\u002Fexample.com\"",[33,134000,134001],{"class":43}," target",[33,134003,57],{"class":47},[33,134005,134006],{"class":60},"\"_blank\"",[33,134008,134009],{"class":47},">链接文字\u003C\u002F",[33,134011,2663],{"class":53522},[33,134013,53529],{"class":47},[328,134015,134016],{"start":51},[331,134017,134018],{},"css部分",[23,134020,134021],{"className":129497,"code":133983,"language":129499,"meta":28,"style":28},[30,134022,134023],{"__ignoreMap":28},[33,134024,134025,134027,134029,134031,134033,134035,134037,134039,134041,134043,134045],{"class":35,"line":36},[33,134026,2226],{"class":47},[33,134028,2663],{"class":53522},[33,134030,63275],{"class":43},[33,134032,57],{"class":47},[33,134034,133998],{"class":60},[33,134036,134001],{"class":43},[33,134038,57],{"class":47},[33,134040,134006],{"class":60},[33,134042,134009],{"class":47},[33,134044,2663],{"class":53522},[33,134046,53529],{"class":47},[631,134048,134050],{"id":134049},"_1027-收获","10.2.7 收获",[328,134052,134053,134056,134059,134062,134065],{},[331,134054,134055],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[331,134057,134058],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[331,134060,134061],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[331,134063,134064],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[331,134066,134067],{},"遗忘代码",[23,134069,134071],{"className":128750,"code":134070,"language":128752,"meta":28,"style":28},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[30,134072,134073,134095,134100,134110],{"__ignoreMap":28},[33,134074,134075,134077,134079,134081,134083,134085,134087,134089,134091,134093],{"class":35,"line":36},[33,134076,53832],{"class":53522},[33,134078,245],{"class":47},[33,134080,19],{"class":53522},[33,134082,245],{"class":47},[33,134084,10],{"class":53522},[33,134086,245],{"class":47},[33,134088,3413],{"class":53522},[33,134090,245],{"class":47},[33,134092,331],{"class":53522},[33,134094,17810],{"class":47},[33,134096,134097],{"class":35,"line":51},[33,134098,134099],{"class":2487},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[33,134101,134102,134104,134106,134108],{"class":35,"line":64},[33,134103,130366],{"class":72},[33,134105,996],{"class":47},[33,134107,63087],{"class":72},[33,134109,3567],{"class":47},[33,134111,134112],{"class":35,"line":76},[33,134113,1010],{"class":47},[328,134115,134116],{"start":96},[331,134117,134118],{},"html引css的程序",[23,134120,134121],{"className":128750,"code":134070,"language":128752,"meta":28,"style":28},[30,134122,134123,134145,134149,134159],{"__ignoreMap":28},[33,134124,134125,134127,134129,134131,134133,134135,134137,134139,134141,134143],{"class":35,"line":36},[33,134126,53832],{"class":53522},[33,134128,245],{"class":47},[33,134130,19],{"class":53522},[33,134132,245],{"class":47},[33,134134,10],{"class":53522},[33,134136,245],{"class":47},[33,134138,3413],{"class":53522},[33,134140,245],{"class":47},[33,134142,331],{"class":53522},[33,134144,17810],{"class":47},[33,134146,134147],{"class":35,"line":51},[33,134148,134099],{"class":2487},[33,134150,134151,134153,134155,134157],{"class":35,"line":64},[33,134152,130366],{"class":72},[33,134154,996],{"class":47},[33,134156,63087],{"class":72},[33,134158,3567],{"class":47},[33,134160,134161],{"class":35,"line":76},[33,134162,1010],{"class":47},[328,134164,134165,134168,134171,134174,134177],{"start":103},[331,134166,134167],{},"浮动的盒子不会有外边距合并问题",[331,134169,134170],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[331,134172,134173],{},"ctrl+g快速定位行；shift+alt多个光标",[331,134175,134176],{},"学习上方各个模块的选择器起名方法，以后就这样用",[331,134178,134179],{},"在写选择器时尽量写全一些，例如",[23,134181,134183],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[30,134184,134185,134190,134206,134211,134226,134231,134246,134251,134266,134271],{"__ignoreMap":28},[33,134186,134187],{"class":35,"line":36},[33,134188,134189],{"class":2487},"\u002F* 静态定位（默认） *\u002F\n",[33,134191,134192,134195,134197,134199,134201,134204],{"class":35,"line":51},[33,134193,134194],{"class":43},".static",[33,134196,82018],{"class":47},[33,134198,131110],{"class":72},[33,134200,996],{"class":47},[33,134202,134203],{"class":72},"static",[33,134205,131680],{"class":47},[33,134207,134208],{"class":35,"line":64},[33,134209,134210],{"class":2487},"\u002F* 相对定位 *\u002F\n",[33,134212,134213,134216,134218,134220,134222,134224],{"class":35,"line":76},[33,134214,134215],{"class":43},".relative",[33,134217,82018],{"class":47},[33,134219,131110],{"class":72},[33,134221,996],{"class":47},[33,134223,56983],{"class":72},[33,134225,131680],{"class":47},[33,134227,134228],{"class":35,"line":87},[33,134229,134230],{"class":2487},"\u002F* 绝对定位 *\u002F\n",[33,134232,134233,134236,134238,134240,134242,134244],{"class":35,"line":96},[33,134234,134235],{"class":43},".absolute",[33,134237,82018],{"class":47},[33,134239,131110],{"class":72},[33,134241,996],{"class":47},[33,134243,57050],{"class":72},[33,134245,131680],{"class":47},[33,134247,134248],{"class":35,"line":103},[33,134249,134250],{"class":2487},"\u002F* 固定定位 *\u002F\n",[33,134252,134253,134256,134258,134260,134262,134264],{"class":35,"line":108},[33,134254,134255],{"class":43},".fixed",[33,134257,82018],{"class":47},[33,134259,131110],{"class":72},[33,134261,996],{"class":47},[33,134263,88442],{"class":72},[33,134265,131680],{"class":47},[33,134267,134268],{"class":35,"line":119},[33,134269,134270],{"class":2487},"\u002F* 粘性定位 *\u002F\n",[33,134272,134273,134276,134278,134280,134282,134285],{"class":35,"line":128},[33,134274,134275],{"class":43},".sticky",[33,134277,82018],{"class":47},[33,134279,131110],{"class":72},[33,134281,996],{"class":47},[33,134283,134284],{"class":72},"sticky",[33,134286,131680],{"class":47},[328,134288,134289,134292],{"start":1763},[331,134290,134291],{},"一定要用好注释",[331,134293,134294],{},"浮动的盒子不会有外边距合并的问题",[2331,134296,133638],{},{"title":28,"searchDepth":51,"depth":51,"links":134298},[134299,134300],{"id":133675,"depth":51,"text":133676},{"id":133739,"depth":51,"text":133740,"children":134301},[134302,134303,134304,134305,134306,134307,134308],{"id":133743,"depth":64,"text":133744},{"id":133849,"depth":64,"text":133850},{"id":133885,"depth":64,"text":133886},{"id":133906,"depth":64,"text":133907},{"id":133941,"depth":64,"text":133942},{"id":133974,"depth":64,"text":133975},{"id":134049,"depth":64,"text":134050},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133667,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":134315,"title":134316,"body":134317,"description":2359,"extension":2360,"meta":135803,"navigation":99,"path":135804,"seo":135805,"stem":135806,"__hash__":135807},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":134318,"toc":135795},[134319,134322,134326,134330,134341,134345,134362,134406,134439,134442,134459,134462,134465,134509,134513,134517,134520,134523,134527,134530,134541,134604,134645,134648,134663,134717,134725,134728,134739,134793,134819,134822,134835,134889,134921,134975,134998,135052,135055,135058,135065,135119,135140,135194,135197,135200,135285,135293,135350,135373,135377,135380,135398,135402,135421,135475,135513,135517,135520,135523,135545,135549,135557,135560,135565,135576,135579,135583,135597,135641,135644,135648,135651,135656,135682,135687,135764,135767,135771,135774,135777,135780,135783,135786,135789,135792],[10,134320,134316],{"id":134321},"_11-传统布局与定位体系",[14,134323,134325],{"id":134324},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[631,134327,134329],{"id":134328},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3413,134331,134332,134335,134338],{},[331,134333,134334],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[331,134336,134337],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[331,134339,134340],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[631,134342,134344],{"id":134343},"_1112-浮动","11.1.2 浮动",[3413,134346,134347,134350,134353,134356,134359],{},[331,134348,134349],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[331,134351,134352],{},"浮动可以改变元素标签默认的排列方式",[331,134354,134355],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[331,134357,134358],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[331,134360,134361],{},"在使用行内块转换时盒子之间是有空隙的",[23,134363,134364],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,134365,134366,134372,134382,134386,134392,134402],{"__ignoreMap":28},[33,134367,134368,134370],{"class":35,"line":36},[33,134369,133223],{"class":43},[33,134371,17810],{"class":47},[33,134373,134374,134376,134378,134380],{"class":35,"line":51},[33,134375,133230],{"class":72},[33,134377,996],{"class":47},[33,134379,25974],{"class":72},[33,134381,3567],{"class":47},[33,134383,134384],{"class":35,"line":64},[33,134385,1010],{"class":47},[33,134387,134388,134390],{"class":35,"line":76},[33,134389,133245],{"class":43},[33,134391,17810],{"class":47},[33,134393,134394,134396,134398,134400],{"class":35,"line":87},[33,134395,133230],{"class":72},[33,134397,996],{"class":47},[33,134399,74735],{"class":72},[33,134401,3567],{"class":47},[33,134403,134404],{"class":35,"line":96},[33,134405,1010],{"class":47},[2563,134407,134408,134416],{},[2566,134409,134410],{},[2569,134411,134412,134414],{},[2572,134413,129214],{"align":25974},[2572,134415,29726],{"align":25974},[2610,134417,134418,134425,134432],{},[2569,134419,134420,134422],{},[2615,134421,56956],{"align":25974},[2615,134423,134424],{"align":25974},"元素不浮动（默认值）",[2569,134426,134427,134429],{},[2615,134428,25974],{"align":25974},[2615,134430,134431],{"align":25974},"元素向左浮动",[2569,134433,134434,134436],{},[2615,134435,74735],{"align":25974},[2615,134437,134438],{"align":25974},"元素向右浮动",[19,134440,134441],{},"浮动重点：",[3413,134443,134444,134447,134450,134453,134456],{},[331,134445,134446],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[331,134448,134449],{},"浮动的元素会一行内显示并且元素顶部对齐",[331,134451,134452],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[331,134454,134455],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[331,134457,134458],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134460,134461],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134463,134464],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[23,134466,134467],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,134468,134469,134475,134485,134489,134495,134505],{"__ignoreMap":28},[33,134470,134471,134473],{"class":35,"line":36},[33,134472,133223],{"class":43},[33,134474,17810],{"class":47},[33,134476,134477,134479,134481,134483],{"class":35,"line":51},[33,134478,133230],{"class":72},[33,134480,996],{"class":47},[33,134482,25974],{"class":72},[33,134484,3567],{"class":47},[33,134486,134487],{"class":35,"line":64},[33,134488,1010],{"class":47},[33,134490,134491,134493],{"class":35,"line":76},[33,134492,133245],{"class":43},[33,134494,17810],{"class":47},[33,134496,134497,134499,134501,134503],{"class":35,"line":87},[33,134498,133230],{"class":72},[33,134500,996],{"class":47},[33,134502,74735],{"class":72},[33,134504,3567],{"class":47},[33,134506,134507],{"class":35,"line":96},[33,134508,1010],{"class":47},[631,134510,134512],{"id":134511},"_1113-定位","11.1.3 定位",[24236,134514,134516],{"id":134515},"_11131-使用场景","11.1.3.1 使用场景",[19,134518,134519],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134521,134522],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[24236,134524,134526],{"id":134525},"_11132-定位组成","11.1.3.2 定位组成",[19,134528,134529],{},"定位 = 定位模式 + 边偏移",[328,134531,134532],{},[331,134533,134534,134537,134538],{},[2575,134535,134536],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2575,134539,134540],{},"定位模式",[23,134542,134544],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[30,134545,134546,134552,134566,134583,134600],{"__ignoreMap":28},[33,134547,134548,134550],{"class":35,"line":36},[33,134549,132598],{"class":43},[33,134551,17810],{"class":47},[33,134553,134554,134557,134559,134561,134563],{"class":35,"line":51},[33,134555,134556],{"class":72},"  position",[33,134558,996],{"class":47},[33,134560,56983],{"class":72},[33,134562,132613],{"class":47},[33,134564,134565],{"class":2487},"\u002F* 定位模式 *\u002F\n",[33,134567,134568,134571,134573,134575,134577,134580],{"class":35,"line":64},[33,134569,134570],{"class":72},"  top",[33,134572,996],{"class":47},[33,134574,1279],{"class":72},[33,134576,53713],{"class":39},[33,134578,134579],{"class":47},";           ",[33,134581,134582],{"class":2487},"\u002F* 边偏移：上 *\u002F\n",[33,134584,134585,134588,134590,134592,134594,134597],{"class":35,"line":76},[33,134586,134587],{"class":72},"  left",[33,134589,996],{"class":47},[33,134591,1284],{"class":72},[33,134593,53713],{"class":39},[33,134595,134596],{"class":47},";          ",[33,134598,134599],{"class":2487},"\u002F* 边偏移：左 *\u002F\n",[33,134601,134602],{"class":35,"line":87},[33,134603,1010],{"class":47},[2563,134605,134606,134615],{},[2566,134607,134608],{},[2569,134609,134610,134612],{},[2572,134611,2578],{"align":25974},[2572,134613,134614],{"align":25974},"语义",[2610,134616,134617,134624,134631,134638],{},[2569,134618,134619,134621],{},[2615,134620,134203],{"align":25974},[2615,134622,134623],{"align":25974},"静态定位",[2569,134625,134626,134628],{},[2615,134627,56983],{"align":25974},[2615,134629,134630],{"align":25974},"相对定位",[2569,134632,134633,134635],{},[2615,134634,57050],{"align":25974},[2615,134636,134637],{"align":25974},"绝对定位",[2569,134639,134640,134642],{},[2615,134641,88442],{"align":25974},[2615,134643,134644],{"align":25974},"固定定位",[19,134646,134647],{},"（1）静态定位：",[3413,134649,134650,134661],{},[331,134651,134652,134653,134656,134657,134660],{},"静态定位是元素的 ",[2575,134654,134655],{},"默认定位方式"," ， ",[2575,134658,134659],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[331,134662,7430],{},[23,134664,134665],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,134666,134667,134673,134685,134699,134713],{"__ignoreMap":28},[33,134668,134669,134671],{"class":35,"line":36},[33,134670,132598],{"class":43},[33,134672,17810],{"class":47},[33,134674,134675,134677,134679,134681,134683],{"class":35,"line":51},[33,134676,134556],{"class":72},[33,134678,996],{"class":47},[33,134680,56983],{"class":72},[33,134682,132613],{"class":47},[33,134684,134565],{"class":2487},[33,134686,134687,134689,134691,134693,134695,134697],{"class":35,"line":64},[33,134688,134570],{"class":72},[33,134690,996],{"class":47},[33,134692,1279],{"class":72},[33,134694,53713],{"class":39},[33,134696,134579],{"class":47},[33,134698,134582],{"class":2487},[33,134700,134701,134703,134705,134707,134709,134711],{"class":35,"line":76},[33,134702,134587],{"class":72},[33,134704,996],{"class":47},[33,134706,1284],{"class":72},[33,134708,53713],{"class":39},[33,134710,134596],{"class":47},[33,134712,134599],{"class":2487},[33,134714,134715],{"class":35,"line":87},[33,134716,1010],{"class":47},[3413,134718,134719,134722],{},[331,134720,134721],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[331,134723,134724],{},"静态定位在布局时我们几乎不用的",[19,134726,134727],{},"（2）相对定位",[3413,134729,134730,134737],{},[331,134731,134732,134733,134736],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2575,134734,134735],{},"原来的位置"," 来说的（自恋型）",[331,134738,7430],{},[23,134740,134741],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,134742,134743,134749,134761,134775,134789],{"__ignoreMap":28},[33,134744,134745,134747],{"class":35,"line":36},[33,134746,132598],{"class":43},[33,134748,17810],{"class":47},[33,134750,134751,134753,134755,134757,134759],{"class":35,"line":51},[33,134752,134556],{"class":72},[33,134754,996],{"class":47},[33,134756,56983],{"class":72},[33,134758,132613],{"class":47},[33,134760,134565],{"class":2487},[33,134762,134763,134765,134767,134769,134771,134773],{"class":35,"line":64},[33,134764,134570],{"class":72},[33,134766,996],{"class":47},[33,134768,1279],{"class":72},[33,134770,53713],{"class":39},[33,134772,134579],{"class":47},[33,134774,134582],{"class":2487},[33,134776,134777,134779,134781,134783,134785,134787],{"class":35,"line":76},[33,134778,134587],{"class":72},[33,134780,996],{"class":47},[33,134782,1284],{"class":72},[33,134784,53713],{"class":39},[33,134786,134596],{"class":47},[33,134788,134599],{"class":2487},[33,134790,134791],{"class":35,"line":87},[33,134792,1010],{"class":47},[3413,134794,134795],{},[331,134796,134797,134798,134800,134801,134803,134804,134807,134808,134811,134812,134814,134815,134818],{},"相对定位的特点：",[55935,134799],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55935,134802],{},"  ② ",[2575,134805,134806],{},"原来"," 在标准流的 ",[2575,134809,134810],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55935,134813],{},"  ③因此， ",[2575,134816,134817],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134820,134821],{},"（3）绝对定位",[3413,134823,134824,134833],{},[331,134825,134826,134828,134829,134832],{},[2575,134827,134637],{}," 是元素在移动位置的时候，是相对于它 ",[2575,134830,134831],{},"祖先元素"," 来说的（拼爹型）",[331,134834,7430],{},[23,134836,134837],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,134838,134839,134845,134857,134871,134885],{"__ignoreMap":28},[33,134840,134841,134843],{"class":35,"line":36},[33,134842,132598],{"class":43},[33,134844,17810],{"class":47},[33,134846,134847,134849,134851,134853,134855],{"class":35,"line":51},[33,134848,134556],{"class":72},[33,134850,996],{"class":47},[33,134852,56983],{"class":72},[33,134854,132613],{"class":47},[33,134856,134565],{"class":2487},[33,134858,134859,134861,134863,134865,134867,134869],{"class":35,"line":64},[33,134860,134570],{"class":72},[33,134862,996],{"class":47},[33,134864,1279],{"class":72},[33,134866,53713],{"class":39},[33,134868,134579],{"class":47},[33,134870,134582],{"class":2487},[33,134872,134873,134875,134877,134879,134881,134883],{"class":35,"line":76},[33,134874,134587],{"class":72},[33,134876,996],{"class":47},[33,134878,1284],{"class":72},[33,134880,53713],{"class":39},[33,134882,134596],{"class":47},[33,134884,134599],{"class":2487},[33,134886,134887],{"class":35,"line":87},[33,134888,1010],{"class":47},[3413,134890,134891,134906,134915,134918],{},[331,134892,134893,134894,134896,134897,134899,134900,134902,134903,134905],{},"绝对定位的特点：",[55935,134895],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55935,134898],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55935,134901],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55935,134904],{},"  (4)固定定位",[331,134907,134908,134910,134911,134914],{},[2575,134909,134644],{}," 是元素 ",[2575,134912,134913],{},"固定于浏览器可视区的位置"," 。（认死理型）",[331,134916,134917],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[331,134919,134920],{},"语法:",[23,134922,134923],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,134924,134925,134931,134943,134957,134971],{"__ignoreMap":28},[33,134926,134927,134929],{"class":35,"line":36},[33,134928,132598],{"class":43},[33,134930,17810],{"class":47},[33,134932,134933,134935,134937,134939,134941],{"class":35,"line":51},[33,134934,134556],{"class":72},[33,134936,996],{"class":47},[33,134938,56983],{"class":72},[33,134940,132613],{"class":47},[33,134942,134565],{"class":2487},[33,134944,134945,134947,134949,134951,134953,134955],{"class":35,"line":64},[33,134946,134570],{"class":72},[33,134948,996],{"class":47},[33,134950,1279],{"class":72},[33,134952,53713],{"class":39},[33,134954,134579],{"class":47},[33,134956,134582],{"class":2487},[33,134958,134959,134961,134963,134965,134967,134969],{"class":35,"line":76},[33,134960,134587],{"class":72},[33,134962,996],{"class":47},[33,134964,1284],{"class":72},[33,134966,53713],{"class":39},[33,134968,134596],{"class":47},[33,134970,134599],{"class":2487},[33,134972,134973],{"class":35,"line":87},[33,134974,1010],{"class":47},[3413,134976,134977,134986],{},[331,134978,134979,134980,134982,134983,134985],{},"特点:",[55935,134981],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55935,134984],{},"  ②固定定位不再占有原先的位置,完全脱标",[331,134987,134988,134989,134991,134992,134994,134995,134997],{},"固定在版心位置的方法:",[55935,134990],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55935,134993],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55935,134996],{},"  实例：",[23,134999,135000],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,135001,135002,135008,135020,135034,135048],{"__ignoreMap":28},[33,135003,135004,135006],{"class":35,"line":36},[33,135005,132598],{"class":43},[33,135007,17810],{"class":47},[33,135009,135010,135012,135014,135016,135018],{"class":35,"line":51},[33,135011,134556],{"class":72},[33,135013,996],{"class":47},[33,135015,56983],{"class":72},[33,135017,132613],{"class":47},[33,135019,134565],{"class":2487},[33,135021,135022,135024,135026,135028,135030,135032],{"class":35,"line":64},[33,135023,134570],{"class":72},[33,135025,996],{"class":47},[33,135027,1279],{"class":72},[33,135029,53713],{"class":39},[33,135031,134579],{"class":47},[33,135033,134582],{"class":2487},[33,135035,135036,135038,135040,135042,135044,135046],{"class":35,"line":76},[33,135037,134587],{"class":72},[33,135039,996],{"class":47},[33,135041,1284],{"class":72},[33,135043,53713],{"class":39},[33,135045,134596],{"class":47},[33,135047,134599],{"class":2487},[33,135049,135050],{"class":35,"line":87},[33,135051,1010],{"class":47},[3736,135053],{"style":128606,"src":135054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,135056,135057],{},"(5)粘性定位",[3413,135059,135060,135063],{},[331,135061,135062],{},"粘性定位可以被认为是相对定位和固定定位的混合",[331,135064,7430],{},[23,135066,135067],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,135068,135069,135075,135087,135101,135115],{"__ignoreMap":28},[33,135070,135071,135073],{"class":35,"line":36},[33,135072,132598],{"class":43},[33,135074,17810],{"class":47},[33,135076,135077,135079,135081,135083,135085],{"class":35,"line":51},[33,135078,134556],{"class":72},[33,135080,996],{"class":47},[33,135082,56983],{"class":72},[33,135084,132613],{"class":47},[33,135086,134565],{"class":2487},[33,135088,135089,135091,135093,135095,135097,135099],{"class":35,"line":64},[33,135090,134570],{"class":72},[33,135092,996],{"class":47},[33,135094,1279],{"class":72},[33,135096,53713],{"class":39},[33,135098,134579],{"class":47},[33,135100,134582],{"class":2487},[33,135102,135103,135105,135107,135109,135111,135113],{"class":35,"line":76},[33,135104,134587],{"class":72},[33,135106,996],{"class":47},[33,135108,1284],{"class":72},[33,135110,53713],{"class":39},[33,135112,134596],{"class":47},[33,135114,134599],{"class":2487},[33,135116,135117],{"class":35,"line":87},[33,135118,1010],{"class":47},[3413,135120,135121],{},[331,135122,135123,135124,135126,135127,135129,135130,135132,135133,135136,135137,135139],{},"粘性定位的特点：",[55935,135125],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55935,135128],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55935,135131],{},"  ③必须添加 top 、left、right、bottom ",[2575,135134,135135],{},"其中一个"," 才有效",[55935,135138],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[23,135141,135142],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,135143,135144,135150,135162,135176,135190],{"__ignoreMap":28},[33,135145,135146,135148],{"class":35,"line":36},[33,135147,132598],{"class":43},[33,135149,17810],{"class":47},[33,135151,135152,135154,135156,135158,135160],{"class":35,"line":51},[33,135153,134556],{"class":72},[33,135155,996],{"class":47},[33,135157,56983],{"class":72},[33,135159,132613],{"class":47},[33,135161,134565],{"class":2487},[33,135163,135164,135166,135168,135170,135172,135174],{"class":35,"line":64},[33,135165,134570],{"class":72},[33,135167,996],{"class":47},[33,135169,1279],{"class":72},[33,135171,53713],{"class":39},[33,135173,134579],{"class":47},[33,135175,134582],{"class":2487},[33,135177,135178,135180,135182,135184,135186,135188],{"class":35,"line":76},[33,135179,134587],{"class":72},[33,135181,996],{"class":47},[33,135183,1284],{"class":72},[33,135185,53713],{"class":39},[33,135187,134596],{"class":47},[33,135189,134599],{"class":2487},[33,135191,135192],{"class":35,"line":87},[33,135193,1010],{"class":47},[3736,135195],{"style":128606,"src":135196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,135198,135199],{},"(6)总结",[2563,135201,135202,135217],{},[2566,135203,135204],{},[2569,135205,135206,135208,135211,135214],{},[2572,135207,134540],{"align":25974},[2572,135209,135210],{"align":25974},"是否脱标",[2572,135212,135213],{"align":25974},"移动位置",[2572,135215,135216],{"align":25974},"是否常用",[2610,135218,135219,135232,135246,135260,135273],{},[2569,135220,135221,135224,135226,135229],{},[2615,135222,135223],{"align":25974},"Static 静态定位",[2615,135225,106881],{"align":25974},[2615,135227,135228],{"align":25974},"不能使用边偏移",[2615,135230,135231],{"align":25974},"很少",[2569,135233,135234,135237,135240,135243],{},[2615,135235,135236],{"align":25974},"Relative 相对定位",[2615,135238,135239],{"align":25974},"否(占有位置)",[2615,135241,135242],{"align":25974},"相对于自身位置移动",[2615,135244,135245],{"align":25974},"基本单独使用",[2569,135247,135248,135251,135254,135257],{},[2615,135249,135250],{"align":25974},"Absolute 绝对定位",[2615,135252,135253],{"align":25974},"是(不占有位置)",[2615,135255,135256],{"align":25974},"带有定位的父级",[2615,135258,135259],{"align":25974},"要和定位父级元素搭配使用",[2569,135261,135262,135265,135267,135270],{},[2615,135263,135264],{"align":25974},"Fixed 固定定位",[2615,135266,135253],{"align":25974},[2615,135268,135269],{"align":25974},"浏览器可视区",[2615,135271,135272],{"align":25974},"单独使用,不需要父级",[2569,135274,135275,135278,135280,135282],{},[2615,135276,135277],{"align":25974},"Sticky 粘性定位",[2615,135279,135239],{"align":25974},[2615,135281,135269],{"align":25974},[2615,135283,135284],{"align":25974},"当前阶段少",[328,135286,135287],{"start":51},[331,135288,135289,135292],{},[2575,135290,135291],{},"边偏移"," 则决定了该元素的最终位置",[2563,135294,135295,135306],{},[2566,135296,135297],{},[2569,135298,135299,135302,135304],{},[2572,135300,135301],{"align":25974},"边偏移属性",[2572,135303,29729],{"align":25974},[2572,135305,29726],{"align":25974},[2610,135307,135308,135319,135330,135340],{},[2569,135309,135310,135313,135316],{},[2615,135311,135312],{"align":25974},"top",[2615,135314,135315],{"align":25974},"top: 80px;",[2615,135317,135318],{"align":25974},"顶端偏移量，定义元素相对于父元素上边线的距离",[2569,135320,135321,135324,135327],{},[2615,135322,135323],{"align":25974},"bottom",[2615,135325,135326],{"align":25974},"bottom: 80px ;",[2615,135328,135329],{"align":25974},"底部偏移量，定义元素相对于其父元素下边线的距离",[2569,135331,135332,135334,135337],{},[2615,135333,25974],{"align":25974},[2615,135335,135336],{"align":25974},"left: 80px ;",[2615,135338,135339],{"align":25974},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2569,135341,135342,135344,135347],{},[2615,135343,74735],{"align":25974},[2615,135345,135346],{"align":25974},"right: 80px ;",[2615,135348,135349],{"align":25974},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3413,135351,135352],{},[331,135353,11271,135354,135356,135357,135359,135360,135362,135363,135366,135367,135369,135370,135372],{},[55935,135355],{},"  ① ",[2575,135358,135291],{}," 需要和 ",[2575,135361,134540],{}," 联合使用， ",[2575,135364,135365],{},"单独使用无效"," ；",[55935,135368],{},"  ②top和bottom不要同时使用",[55935,135371],{},"  ③left和right不要同时使用",[24236,135374,135376],{"id":135375},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,135378,135379],{},"子级是绝对定位的话，父级要用相对定位",[3413,135381,135382,135385,135388,135391],{},[331,135383,135384],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[331,135386,135387],{},"父盒子需要加定位限制子盒子在父盒子内显示",[331,135389,135390],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[331,135392,135393,135394,135397],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2575,135395,135396],{},"子绝父绝"," 也会遇到",[24236,135399,135401],{"id":135400},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3413,135403,135404,135419],{},[331,135405,135406,135407,135410,135411,135414,135415,135418],{},"在使用 ",[2575,135408,135409],{},"定位"," 布局时，可能会 ",[2575,135412,135413],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2575,135416,135417],{},"z-index"," 来控制盒子的前后次序 (z轴)",[331,135420,7430],{},[23,135422,135423],{"className":128750,"code":134543,"language":128752,"meta":28,"style":28},[30,135424,135425,135431,135443,135457,135471],{"__ignoreMap":28},[33,135426,135427,135429],{"class":35,"line":36},[33,135428,132598],{"class":43},[33,135430,17810],{"class":47},[33,135432,135433,135435,135437,135439,135441],{"class":35,"line":51},[33,135434,134556],{"class":72},[33,135436,996],{"class":47},[33,135438,56983],{"class":72},[33,135440,132613],{"class":47},[33,135442,134565],{"class":2487},[33,135444,135445,135447,135449,135451,135453,135455],{"class":35,"line":64},[33,135446,134570],{"class":72},[33,135448,996],{"class":47},[33,135450,1279],{"class":72},[33,135452,53713],{"class":39},[33,135454,134579],{"class":47},[33,135456,134582],{"class":2487},[33,135458,135459,135461,135463,135465,135467,135469],{"class":35,"line":76},[33,135460,134587],{"class":72},[33,135462,996],{"class":47},[33,135464,1284],{"class":72},[33,135466,53713],{"class":39},[33,135468,134596],{"class":47},[33,135470,134599],{"class":2487},[33,135472,135473],{"class":35,"line":87},[33,135474,1010],{"class":47},[3413,135476,135477],{},[331,135478,135479,135480,135356,135482,135484,135485,129913,135488,84748,135491,135493,135494,135496,135497,135500,135501,135366,135504,135506,135507,135510,135512],{},"z-index的特性",[55935,135481],{},[2575,135483,129214],{}," ： ",[2575,135486,135487],{},"正整数",[2575,135489,135490],{},"负整数",[2575,135492,2617],{}," ，默认值是 0，数值越大，盒子越靠上；",[55935,135495],{},"  ②如果 ",[2575,135498,135499],{},"属性值相同"," ，则按照书写顺序， ",[2575,135502,135503],{},"后来居上",[55935,135505],{},"  ③数字后面 ",[2575,135508,135509],{},"不能加单位",[55935,135511],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[24236,135514,135516],{"id":135515},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135518,135519],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135521,135522],{},"方法:",[3413,135524,135525,135535],{},[331,135526,135527,135528,135531,135532],{},"left: 50%; 让 ",[2575,135529,135530],{},"盒子的左侧"," 移动到 ",[2575,135533,135534],{},"父级元素的水平中心位置",[331,135536,135537,135538,135541,135542],{},"margin-left: -100px; 让盒子 ",[2575,135539,135540],{},"向左"," 移动 ",[2575,135543,135544],{},"自身宽度的一半",[24236,135546,135548],{"id":135547},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[328,135550,135551,135554],{},[331,135552,135553],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[331,135555,135556],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135558,135559],{},"也就是说绝对定位和固定定位和浮动类似",[328,135561,135562],{"start":64},[331,135563,135564],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3413,135566,135567,135570,135573],{},[331,135568,135569],{},"可以用inline-block 转换为行内块",[331,135571,135572],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[331,135574,135575],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135577,135578],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[24236,135580,135582],{"id":135581},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[328,135584,135585,135588,135591,135594],{},[331,135586,135587],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[331,135589,135590],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[331,135592,135593],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[331,135595,135596],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[23,135598,135599],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,135600,135601,135607,135617,135621,135627,135637],{"__ignoreMap":28},[33,135602,135603,135605],{"class":35,"line":36},[33,135604,133223],{"class":43},[33,135606,17810],{"class":47},[33,135608,135609,135611,135613,135615],{"class":35,"line":51},[33,135610,133230],{"class":72},[33,135612,996],{"class":47},[33,135614,25974],{"class":72},[33,135616,3567],{"class":47},[33,135618,135619],{"class":35,"line":64},[33,135620,1010],{"class":47},[33,135622,135623,135625],{"class":35,"line":76},[33,135624,133245],{"class":43},[33,135626,17810],{"class":47},[33,135628,135629,135631,135633,135635],{"class":35,"line":87},[33,135630,133230],{"class":72},[33,135632,996],{"class":47},[33,135634,74735],{"class":72},[33,135636,3567],{"class":47},[33,135638,135639],{"class":35,"line":96},[33,135640,1010],{"class":47},[3736,135642],{"style":128606,"src":135643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[24236,135645,135647],{"id":135646},"_11138-轮播图","11.1.3.8 轮播图",[3736,135649],{"style":128606,"src":135650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[328,135652,135653],{},[331,135654,135655],{},"制作顺序:",[3413,135657,135658,135661,135664,135673],{},[331,135659,135660],{},"大盒子我们类名为： tb-promo 淘宝广告",[331,135662,135663],{},"里面先放一张图片",[331,135665,135666,135667,135669,135670,135672],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55935,135668],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55935,135671],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[331,135674,135675,135676,135678,135679,135681],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55935,135677],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55935,135680],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[328,135683,135684],{"start":51},[331,135685,135686],{},"代码模块",[23,135688,135690],{"className":128750,"code":135689,"language":128752,"meta":28,"style":28},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[30,135691,135692,135697,135704,135714,135724,135734,135738,135743,135750,135760],{"__ignoreMap":28},[33,135693,135694],{"class":35,"line":36},[33,135695,135696],{"class":2487},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[33,135698,135699,135702],{"class":35,"line":51},[33,135700,135701],{"class":43},".son",[33,135703,17810],{"class":47},[33,135705,135706,135708,135710,135712],{"class":35,"line":64},[33,135707,134556],{"class":72},[33,135709,996],{"class":47},[33,135711,57050],{"class":72},[33,135713,3567],{"class":47},[33,135715,135716,135718,135720,135722],{"class":35,"line":76},[33,135717,134570],{"class":72},[33,135719,996],{"class":47},[33,135721,2617],{"class":72},[33,135723,3567],{"class":47},[33,135725,135726,135728,135730,135732],{"class":35,"line":87},[33,135727,134587],{"class":72},[33,135729,996],{"class":47},[33,135731,2617],{"class":72},[33,135733,3567],{"class":47},[33,135735,135736],{"class":35,"line":96},[33,135737,1010],{"class":47},[33,135739,135740],{"class":35,"line":103},[33,135741,135742],{"class":2487},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[33,135744,135745,135748],{"class":35,"line":108},[33,135746,135747],{"class":43},".father",[33,135749,17810],{"class":47},[33,135751,135752,135754,135756,135758],{"class":35,"line":119},[33,135753,134556],{"class":72},[33,135755,996],{"class":47},[33,135757,56983],{"class":72},[33,135759,3567],{"class":47},[33,135761,135762],{"class":35,"line":128},[33,135763,1010],{"class":47},[19,135765,135766],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[631,135768,135770],{"id":135769},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3736,135772],{"style":128606,"src":135773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135775,135776],{},"✨ 黄金口诀：",[19,135778,135779],{},"\"TOP正下负上，LEFT正右负左\"",[19,135781,135782],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135784,135785],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135787,135788],{},"✨ 简单记：",[19,135790,135791],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2331,135793,135794],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":135796},[135797],{"id":134324,"depth":51,"text":134325,"children":135798},[135799,135800,135801,135802],{"id":134328,"depth":64,"text":134329},{"id":134343,"depth":64,"text":134344},{"id":134511,"depth":64,"text":134512},{"id":135769,"depth":64,"text":135770},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":134316,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135809,"title":135810,"body":135811,"description":2359,"extension":2360,"meta":137234,"navigation":99,"path":137235,"seo":137236,"stem":137237,"__hash__":137238},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135812,"toc":137213},[135813,135816,135820,135828,135832,135837,135845,135857,135861,135866,135874,135885,135889,135894,135935,135943,135947,135950,135953,135956,136050,136053,136147,136150,136244,136247,136250,136285,136288,136291,136321,136324,136327,136330,136333,136336,136339,136342,136412,136415,136419,136423,136464,136468,136474,136477,136480,136484,136487,136490,136493,136574,136577,136580,136584,136588,136591,136594,136597,136600,136603,136609,136618,136622,136641,136645,136655,136658,136661,136664,136667,136670,136673,136676,136679,136688,136692,136701,136704,136709,136762,136767,136933,136936,136939,136944,136947,136950,136953,136956,136961,137109,137112,137115,137120,137123,137128,137162,137165,137168,137172,137175,137182,137185,137188,137191,137194,137197,137200,137203,137207,137210],[10,135814,135810],{"id":135815},"_12-显示隐藏与图形资源",[14,135817,135819],{"id":135818},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3413,135821,135822,135825],{},[331,135823,135824],{},"目的:让一个元素在页面中消失或者显示出来",[331,135826,135827],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[631,135829,135831],{"id":135830},"_1211-display-显示","12.1.1 display 显示",[328,135833,135834],{},[331,135835,135836],{},"display 设置或检索对象是否及如何显示",[3413,135838,135839,135842],{},[331,135840,135841],{},"display: none;隐藏对象",[331,135843,135844],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[328,135846,135847,135854],{"start":51},[331,135848,135849,135850,135853],{},"特点： display 隐藏元素后， ",[2575,135851,135852],{},"不再占"," 有原来的位置",[331,135855,135856],{},"在js中使用非常的广泛",[631,135858,135860],{"id":135859},"_1212-visibility可见性","12.1.2 visibility可见性",[328,135862,135863],{},[331,135864,135865],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3413,135867,135868,135871],{},[331,135869,135870],{},"visibility： visible；元素可见",[331,135872,135873],{},"visibility：hidden；元素隐藏",[328,135875,135876,135879,135882],{"start":51},[331,135877,135878],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[331,135880,135881],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[331,135883,135884],{},"隐藏后继续占有原有位置",[631,135886,135888],{"id":135887},"_1213-overflow溢出","12.1.3 overflow溢出",[3413,135890,135891],{},[331,135892,135893],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2563,135895,135896,135904],{},[2566,135897,135898],{},[2569,135899,135900,135902],{},[2572,135901,129214],{"align":25974},[2572,135903,29726],{"align":25974},[2610,135905,135906,135914,135921,135928],{},[2569,135907,135908,135911],{},[2615,135909,135910],{"align":25974},"visible",[2615,135912,135913],{"align":25974},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2569,135915,135916,135918],{},[2615,135917,63932],{"align":25974},[2615,135919,135920],{"align":25974},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2569,135922,135923,135925],{},[2615,135924,131170],{"align":25974},[2615,135926,135927],{"align":25974},"不管超出内容否，总是显示滚动条",[2569,135929,135930,135932],{},[2615,135931,74876],{"align":25974},[2615,135933,135934],{"align":25974},"超出自动显示滚动条，不超出不显示滚动条",[3413,135936,135937,135940],{},[331,135938,135939],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[331,135941,135942],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[631,135944,135946],{"id":135945},"_1214-案例收获","12.1.4 案例收获",[3736,135948],{"style":128606,"src":135949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135951,135952],{},"问题：没做出来动态效果，使用hover没实现",[19,135954,135955],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[23,135957,135958],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},[30,135959,135960,135964,135978,135982,135996,136000,136014,136018,136032,136036],{"__ignoreMap":28},[33,135961,135962],{"class":35,"line":36},[33,135963,134189],{"class":2487},[33,135965,135966,135968,135970,135972,135974,135976],{"class":35,"line":51},[33,135967,134194],{"class":43},[33,135969,82018],{"class":47},[33,135971,131110],{"class":72},[33,135973,996],{"class":47},[33,135975,134203],{"class":72},[33,135977,131680],{"class":47},[33,135979,135980],{"class":35,"line":64},[33,135981,134210],{"class":2487},[33,135983,135984,135986,135988,135990,135992,135994],{"class":35,"line":76},[33,135985,134215],{"class":43},[33,135987,82018],{"class":47},[33,135989,131110],{"class":72},[33,135991,996],{"class":47},[33,135993,56983],{"class":72},[33,135995,131680],{"class":47},[33,135997,135998],{"class":35,"line":87},[33,135999,134230],{"class":2487},[33,136001,136002,136004,136006,136008,136010,136012],{"class":35,"line":96},[33,136003,134235],{"class":43},[33,136005,82018],{"class":47},[33,136007,131110],{"class":72},[33,136009,996],{"class":47},[33,136011,57050],{"class":72},[33,136013,131680],{"class":47},[33,136015,136016],{"class":35,"line":103},[33,136017,134250],{"class":2487},[33,136019,136020,136022,136024,136026,136028,136030],{"class":35,"line":108},[33,136021,134255],{"class":43},[33,136023,82018],{"class":47},[33,136025,131110],{"class":72},[33,136027,996],{"class":47},[33,136029,88442],{"class":72},[33,136031,131680],{"class":47},[33,136033,136034],{"class":35,"line":119},[33,136035,134270],{"class":2487},[33,136037,136038,136040,136042,136044,136046,136048],{"class":35,"line":128},[33,136039,134275],{"class":43},[33,136041,82018],{"class":47},[33,136043,131110],{"class":72},[33,136045,996],{"class":47},[33,136047,134284],{"class":72},[33,136049,131680],{"class":47},[19,136051,136052],{},"完整代码：",[23,136054,136055],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},[30,136056,136057,136061,136075,136079,136093,136097,136111,136115,136129,136133],{"__ignoreMap":28},[33,136058,136059],{"class":35,"line":36},[33,136060,134189],{"class":2487},[33,136062,136063,136065,136067,136069,136071,136073],{"class":35,"line":51},[33,136064,134194],{"class":43},[33,136066,82018],{"class":47},[33,136068,131110],{"class":72},[33,136070,996],{"class":47},[33,136072,134203],{"class":72},[33,136074,131680],{"class":47},[33,136076,136077],{"class":35,"line":64},[33,136078,134210],{"class":2487},[33,136080,136081,136083,136085,136087,136089,136091],{"class":35,"line":76},[33,136082,134215],{"class":43},[33,136084,82018],{"class":47},[33,136086,131110],{"class":72},[33,136088,996],{"class":47},[33,136090,56983],{"class":72},[33,136092,131680],{"class":47},[33,136094,136095],{"class":35,"line":87},[33,136096,134230],{"class":2487},[33,136098,136099,136101,136103,136105,136107,136109],{"class":35,"line":96},[33,136100,134235],{"class":43},[33,136102,82018],{"class":47},[33,136104,131110],{"class":72},[33,136106,996],{"class":47},[33,136108,57050],{"class":72},[33,136110,131680],{"class":47},[33,136112,136113],{"class":35,"line":103},[33,136114,134250],{"class":2487},[33,136116,136117,136119,136121,136123,136125,136127],{"class":35,"line":108},[33,136118,134255],{"class":43},[33,136120,82018],{"class":47},[33,136122,131110],{"class":72},[33,136124,996],{"class":47},[33,136126,88442],{"class":72},[33,136128,131680],{"class":47},[33,136130,136131],{"class":35,"line":119},[33,136132,134270],{"class":2487},[33,136134,136135,136137,136139,136141,136143,136145],{"class":35,"line":128},[33,136136,134275],{"class":43},[33,136138,82018],{"class":47},[33,136140,131110],{"class":72},[33,136142,996],{"class":47},[33,136144,134284],{"class":72},[33,136146,131680],{"class":47},[19,136148,136149],{},"分布思路重点详解：",[23,136151,136152],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},[30,136153,136154,136158,136172,136176,136190,136194,136208,136212,136226,136230],{"__ignoreMap":28},[33,136155,136156],{"class":35,"line":36},[33,136157,134189],{"class":2487},[33,136159,136160,136162,136164,136166,136168,136170],{"class":35,"line":51},[33,136161,134194],{"class":43},[33,136163,82018],{"class":47},[33,136165,131110],{"class":72},[33,136167,996],{"class":47},[33,136169,134203],{"class":72},[33,136171,131680],{"class":47},[33,136173,136174],{"class":35,"line":64},[33,136175,134210],{"class":2487},[33,136177,136178,136180,136182,136184,136186,136188],{"class":35,"line":76},[33,136179,134215],{"class":43},[33,136181,82018],{"class":47},[33,136183,131110],{"class":72},[33,136185,996],{"class":47},[33,136187,56983],{"class":72},[33,136189,131680],{"class":47},[33,136191,136192],{"class":35,"line":87},[33,136193,134230],{"class":2487},[33,136195,136196,136198,136200,136202,136204,136206],{"class":35,"line":96},[33,136197,134235],{"class":43},[33,136199,82018],{"class":47},[33,136201,131110],{"class":72},[33,136203,996],{"class":47},[33,136205,57050],{"class":72},[33,136207,131680],{"class":47},[33,136209,136210],{"class":35,"line":103},[33,136211,134250],{"class":2487},[33,136213,136214,136216,136218,136220,136222,136224],{"class":35,"line":108},[33,136215,134255],{"class":43},[33,136217,82018],{"class":47},[33,136219,131110],{"class":72},[33,136221,996],{"class":47},[33,136223,88442],{"class":72},[33,136225,131680],{"class":47},[33,136227,136228],{"class":35,"line":119},[33,136229,134270],{"class":2487},[33,136231,136232,136234,136236,136238,136240,136242],{"class":35,"line":128},[33,136233,134275],{"class":43},[33,136235,82018],{"class":47},[33,136237,131110],{"class":72},[33,136239,996],{"class":47},[33,136241,134284],{"class":72},[33,136243,131680],{"class":47},[3736,136245],{"style":128606,"src":136246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,136248,136249],{},"图片太大，盒子太小，此时需要修改图片的大小",[23,136251,136253],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[30,136254,136255],{"__ignoreMap":28},[33,136256,136257,136259,136261,136263,136265,136268,136270,136272,136275,136278,136280,136283],{"class":35,"line":36},[33,136258,2226],{"class":47},[33,136260,3736],{"class":53522},[33,136262,57458],{"class":43},[33,136264,57],{"class":47},[33,136266,136267],{"class":60},"\"images\u002Fpic.jpg\"",[33,136269,57466],{"class":43},[33,136271,57],{"class":47},[33,136273,136274],{"class":60},"\"描述文字\"",[33,136276,136277],{"class":43}," title",[33,136279,57],{"class":47},[33,136281,136282],{"class":60},"\"悬停提示\"",[33,136284,53529],{"class":47},[3736,136286],{"style":128606,"src":136287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,136289,136290],{},"制造遮罩层",[23,136292,136293],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,136294,136295],{"__ignoreMap":28},[33,136296,136297,136299,136301,136303,136305,136307,136309,136311,136313,136315,136317,136319],{"class":35,"line":36},[33,136298,2226],{"class":47},[33,136300,3736],{"class":53522},[33,136302,57458],{"class":43},[33,136304,57],{"class":47},[33,136306,136267],{"class":60},[33,136308,57466],{"class":43},[33,136310,57],{"class":47},[33,136312,136274],{"class":60},[33,136314,136277],{"class":43},[33,136316,57],{"class":47},[33,136318,136282],{"class":60},[33,136320,53529],{"class":47},[19,136322,136323],{},"此时是这样的为标准流",[3736,136325],{"style":128606,"src":136326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,136328,136329],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,136331,136332],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,136334,136335],{},"让他在中间，用center(background-position)",[19,136337,136338],{},"将需要变的尽可能放到一个盒子中",[19,136340,136341],{},"放大盒子上内部盒子发生变化",[23,136343,136345],{"className":128750,"code":136344,"language":128752,"meta":28,"style":28},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[30,136346,136347,136353,136363,136367,136374,136384,136396,136408],{"__ignoreMap":28},[33,136348,136349,136351],{"class":35,"line":36},[33,136350,129817],{"class":43},[33,136352,17810],{"class":47},[33,136354,136355,136357,136359,136361],{"class":35,"line":51},[33,136356,134556],{"class":72},[33,136358,996],{"class":47},[33,136360,56983],{"class":72},[33,136362,3567],{"class":47},[33,136364,136365],{"class":35,"line":64},[33,136366,1010],{"class":47},[33,136368,136369,136372],{"class":35,"line":76},[33,136370,136371],{"class":43},".child",[33,136373,17810],{"class":47},[33,136375,136376,136378,136380,136382],{"class":35,"line":87},[33,136377,134556],{"class":72},[33,136379,996],{"class":47},[33,136381,57050],{"class":72},[33,136383,3567],{"class":47},[33,136385,136386,136388,136390,136392,136394],{"class":35,"line":96},[33,136387,134570],{"class":72},[33,136389,996],{"class":47},[33,136391,3071],{"class":72},[33,136393,1429],{"class":39},[33,136395,3567],{"class":47},[33,136397,136398,136400,136402,136404,136406],{"class":35,"line":103},[33,136399,134587],{"class":72},[33,136401,996],{"class":47},[33,136403,3071],{"class":72},[33,136405,1429],{"class":39},[33,136407,3567],{"class":47},[33,136409,136410],{"class":35,"line":108},[33,136411,1010],{"class":47},[19,136413,136414],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,136416,136418],{"id":136417},"_122-精灵图","12.2 精灵图",[631,136420,136422],{"id":136421},"_1221-理解","12.2.1 理解",[328,136424,136425,136443],{},[331,136426,136427,136428,134656,136431,136434,136435,136438,136439,136442],{},"目的： ",[2575,136429,136430],{},"为了有效地减少服务器接收和发送请求的次数",[2575,136432,136433],{},"提高"," 页面的 ",[2575,136436,136437],{},"加载速度"," ，出现了 ",[2575,136440,136441],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[331,136444,136445,136446,136448,136449,136451,136452,136454,136455,136457,136458,136460,136461,136463],{},"使用精灵图核心：",[55935,136447],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55935,136450],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55935,136453],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55935,136456],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55935,136459],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55935,136462],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[631,136465,136467],{"id":136466},"_1222-扒图","12.2.2 扒图",[23,136469,136472],{"className":136470,"code":136471,"language":7436},[7434],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[30,136473,136471],{"__ignoreMap":28},[3736,136475],{"style":128606,"src":136476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3736,136478],{"style":128606,"src":136479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[631,136481,136483],{"id":136482},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3736,136485],{"style":128606,"src":136486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136488,136489],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3736,136491],{"style":128606,"src":136492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[23,136494,136496],{"className":128750,"code":136495,"language":128752,"meta":28,"style":28},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[30,136497,136498,136503,136510,136522,136534,136553,136570],{"__ignoreMap":28},[33,136499,136500],{"class":35,"line":36},[33,136501,136502],{"class":2487},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[33,136504,136505,136508],{"class":35,"line":51},[33,136506,136507],{"class":43},".icon",[33,136509,17810],{"class":47},[33,136511,136512,136514,136516,136518,136520],{"class":35,"line":64},[33,136513,72781],{"class":72},[33,136515,996],{"class":47},[33,136517,1284],{"class":72},[33,136519,53713],{"class":39},[33,136521,3567],{"class":47},[33,136523,136524,136526,136528,136530,136532],{"class":35,"line":76},[33,136525,73001],{"class":72},[33,136527,996],{"class":47},[33,136529,1284],{"class":72},[33,136531,53713],{"class":39},[33,136533,3567],{"class":47},[33,136535,136536,136538,136540,136542,136544,136547,136549,136551],{"class":35,"line":87},[33,136537,72824],{"class":72},[33,136539,996],{"class":47},[33,136541,63944],{"class":72},[33,136543,133],{"class":47},[33,136545,136546],{"class":289},"sprites.png",[33,136548,15954],{"class":47},[33,136550,63954],{"class":72},[33,136552,3567],{"class":47},[33,136554,136555,136557,136559,136561,136563,136566,136568],{"class":35,"line":96},[33,136556,131010],{"class":72},[33,136558,996],{"class":47},[33,136560,53984],{"class":72},[33,136562,53713],{"class":39},[33,136564,136565],{"class":72}," -20",[33,136567,53713],{"class":39},[33,136569,3567],{"class":47},[33,136571,136572],{"class":35,"line":103},[33,136573,1010],{"class":47},[3736,136575],{"style":128606,"src":136576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136578,136579],{},"在前端中坐标轴的正方向是右和下",[14,136581,136583],{"id":136582},"_123-字体图标","12.3 字体图标",[631,136585,136587],{"id":136586},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136589,136590],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136592,136593],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136595,136596],{},"1.图片文件还是比较大的。",[19,136598,136599],{},"2.图片本身放大和缩小会失真。",[19,136601,136602],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136604,136605,136606,27979],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2575,136607,136608],{},"字体图标 iconfont",[19,136610,136611,136614,136615,30622],{},[2575,136612,136613],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2575,136616,136617],{},"展示的是图标，本质属于字体",[631,136619,136621],{"id":136620},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3413,136623,136624,136629,136632,136635,136638],{},[331,136625,136626,136628],{},[2575,136627,28115],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[331,136630,136631],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[331,136633,136634],{},"兼容性：几乎支持所有的浏览器，请放心使用",[331,136636,136637],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[331,136639,136640],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[631,136642,136644],{"id":136643},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3413,136646,136647],{},[331,136648,136649,136650],{},"icomoon字体库：",[2663,136651,136654],{"href":136652,"rel":136653},"http:\u002F\u002Ficomoon.io\u002F",[26103],"http:\u002F\u002Ficomoon.io",[19,136656,136657],{},"进去之后点icomoon app",[3736,136659],{"style":128606,"src":136660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136662,136663],{},"可以对其编辑：",[3736,136665],{"style":128606,"src":136666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136668,136669],{},"生成字体：",[3736,136671],{"style":128606,"src":136672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136674,136675],{},"下载：",[3736,136677],{"style":128606,"src":136678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3413,136680,136681],{},[331,136682,136683,136684],{},"阿里iconfont字体库： ",[2663,136685,136686],{"href":136686,"rel":136687},"http:\u002F\u002Fwww.iconfont.cn\u002F",[26103],[631,136689,136691],{"id":136690},"_1234-字体图标的引入","12.3.4 字体图标的引入",[328,136693,136694],{},[331,136695,136696,136697,136700],{},"把下载包里面的 ",[2575,136698,136699],{},"fonts"," 文件夹放入页面根目录下",[3736,136702],{"style":128606,"src":136703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[328,136705,136706],{"start":51},[331,136707,136708],{},"字体文件格式",[2563,136710,136711,136720],{},[2566,136712,136713],{},[2569,136714,136715,136718],{},[2572,136716,136717],{"align":25974},"格式",[2572,136719,25978],{"align":25974},[2610,136721,136722,136732,136742,136752],{},[2569,136723,136724,136729],{},[2615,136725,136726],{"align":25974},[2575,136727,136728],{},".ttf",[2615,136730,136731],{"align":25974},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2569,136733,136734,136739],{},[2615,136735,136736],{"align":25974},[2575,136737,136738],{},".woff",[2615,136740,136741],{"align":25974},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2569,136743,136744,136749],{},[2615,136745,136746],{"align":25974},[2575,136747,136748],{},".eot",[2615,136750,136751],{"align":25974},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2569,136753,136754,136759],{},[2615,136755,136756],{"align":25974},[2575,136757,136758],{},"svg",[2615,136760,136761],{"align":25974},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[328,136763,136764],{"start":64},[331,136765,136766],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[23,136768,136770],{"className":128750,"code":136769,"language":128752,"meta":28,"style":28},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[30,136771,136772,136777,136784,136796,136812,136837,136858,136878,136898,136902,136908,136918,136929],{"__ignoreMap":28},[33,136773,136774],{"class":35,"line":36},[33,136775,136776],{"class":2487},"\u002F* 引入字体图标 *\u002F\n",[33,136778,136779,136782],{"class":35,"line":51},[33,136780,136781],{"class":39},"@font-face",[33,136783,17810],{"class":47},[33,136785,136786,136789,136791,136794],{"class":35,"line":64},[33,136787,136788],{"class":72},"  font-family",[33,136790,996],{"class":47},[33,136792,136793],{"class":60},"'icomoon'",[33,136795,3567],{"class":47},[33,136797,136798,136801,136803,136805,136807,136810],{"class":35,"line":76},[33,136799,136800],{"class":72},"  src",[33,136802,996],{"class":47},[33,136804,63944],{"class":72},[33,136806,133],{"class":47},[33,136808,136809],{"class":60},"'fonts\u002Ficomoon.eot'",[33,136811,4976],{"class":47},[33,136813,136814,136816,136818,136820,136822,136825,136827,136830,136832,136835],{"class":35,"line":87},[33,136815,136800],{"class":72},[33,136817,996],{"class":47},[33,136819,63944],{"class":72},[33,136821,133],{"class":47},[33,136823,136824],{"class":60},"'fonts\u002Ficomoon.eot?#iefix'",[33,136826,15954],{"class":47},[33,136828,136829],{"class":72},"format",[33,136831,133],{"class":47},[33,136833,136834],{"class":60},"'embedded-opentype'",[33,136836,40272],{"class":47},[33,136838,136839,136842,136844,136847,136849,136851,136853,136856],{"class":35,"line":96},[33,136840,136841],{"class":72},"       url",[33,136843,133],{"class":47},[33,136845,136846],{"class":60},"'fonts\u002Ficomoon.woff'",[33,136848,15954],{"class":47},[33,136850,136829],{"class":72},[33,136852,133],{"class":47},[33,136854,136855],{"class":60},"'woff'",[33,136857,40272],{"class":47},[33,136859,136860,136862,136864,136867,136869,136871,136873,136876],{"class":35,"line":103},[33,136861,136841],{"class":72},[33,136863,133],{"class":47},[33,136865,136866],{"class":60},"'fonts\u002Ficomoon.ttf'",[33,136868,15954],{"class":47},[33,136870,136829],{"class":72},[33,136872,133],{"class":47},[33,136874,136875],{"class":60},"'truetype'",[33,136877,40272],{"class":47},[33,136879,136880,136882,136884,136887,136889,136891,136893,136896],{"class":35,"line":108},[33,136881,136841],{"class":72},[33,136883,133],{"class":47},[33,136885,136886],{"class":60},"'fonts\u002Ficomoon.svg#icomoon'",[33,136888,15954],{"class":47},[33,136890,136829],{"class":72},[33,136892,133],{"class":47},[33,136894,136895],{"class":60},"'svg'",[33,136897,4976],{"class":47},[33,136899,136900],{"class":35,"line":119},[33,136901,1010],{"class":47},[33,136903,136904,136906],{"class":35,"line":128},[33,136905,136507],{"class":43},[33,136907,17810],{"class":47},[33,136909,136910,136912,136914,136916],{"class":35,"line":1753},[33,136911,136788],{"class":72},[33,136913,996],{"class":47},[33,136915,136793],{"class":60},[33,136917,3567],{"class":47},[33,136919,136920,136923,136925,136927],{"class":35,"line":1763},[33,136921,136922],{"class":72},"  font-style",[33,136924,996],{"class":47},[33,136926,66058],{"class":72},[33,136928,3567],{"class":47},[33,136930,136931],{"class":35,"line":1775},[33,136932,1010],{"class":47},[19,136934,136935],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3736,136937],{"style":128606,"src":136938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[328,136940,136941],{"start":76},[331,136942,136943],{},"添加字体",[3736,136945],{"style":128606,"src":136946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136948,136949],{},"复制：",[3736,136951],{"style":128606,"src":136952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136954,136955],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[328,136957,136958],{"start":87},[331,136959,136960],{},"代码展示：",[23,136962,136963],{"className":128750,"code":136769,"language":128752,"meta":28,"style":28},[30,136964,136965,136969,136975,136985,136999,137021,137039,137057,137075,137079,137085,137095,137105],{"__ignoreMap":28},[33,136966,136967],{"class":35,"line":36},[33,136968,136776],{"class":2487},[33,136970,136971,136973],{"class":35,"line":51},[33,136972,136781],{"class":39},[33,136974,17810],{"class":47},[33,136976,136977,136979,136981,136983],{"class":35,"line":64},[33,136978,136788],{"class":72},[33,136980,996],{"class":47},[33,136982,136793],{"class":60},[33,136984,3567],{"class":47},[33,136986,136987,136989,136991,136993,136995,136997],{"class":35,"line":76},[33,136988,136800],{"class":72},[33,136990,996],{"class":47},[33,136992,63944],{"class":72},[33,136994,133],{"class":47},[33,136996,136809],{"class":60},[33,136998,4976],{"class":47},[33,137000,137001,137003,137005,137007,137009,137011,137013,137015,137017,137019],{"class":35,"line":87},[33,137002,136800],{"class":72},[33,137004,996],{"class":47},[33,137006,63944],{"class":72},[33,137008,133],{"class":47},[33,137010,136824],{"class":60},[33,137012,15954],{"class":47},[33,137014,136829],{"class":72},[33,137016,133],{"class":47},[33,137018,136834],{"class":60},[33,137020,40272],{"class":47},[33,137022,137023,137025,137027,137029,137031,137033,137035,137037],{"class":35,"line":96},[33,137024,136841],{"class":72},[33,137026,133],{"class":47},[33,137028,136846],{"class":60},[33,137030,15954],{"class":47},[33,137032,136829],{"class":72},[33,137034,133],{"class":47},[33,137036,136855],{"class":60},[33,137038,40272],{"class":47},[33,137040,137041,137043,137045,137047,137049,137051,137053,137055],{"class":35,"line":103},[33,137042,136841],{"class":72},[33,137044,133],{"class":47},[33,137046,136866],{"class":60},[33,137048,15954],{"class":47},[33,137050,136829],{"class":72},[33,137052,133],{"class":47},[33,137054,136875],{"class":60},[33,137056,40272],{"class":47},[33,137058,137059,137061,137063,137065,137067,137069,137071,137073],{"class":35,"line":108},[33,137060,136841],{"class":72},[33,137062,133],{"class":47},[33,137064,136886],{"class":60},[33,137066,15954],{"class":47},[33,137068,136829],{"class":72},[33,137070,133],{"class":47},[33,137072,136895],{"class":60},[33,137074,4976],{"class":47},[33,137076,137077],{"class":35,"line":119},[33,137078,1010],{"class":47},[33,137080,137081,137083],{"class":35,"line":128},[33,137082,136507],{"class":43},[33,137084,17810],{"class":47},[33,137086,137087,137089,137091,137093],{"class":35,"line":1753},[33,137088,136788],{"class":72},[33,137090,996],{"class":47},[33,137092,136793],{"class":60},[33,137094,3567],{"class":47},[33,137096,137097,137099,137101,137103],{"class":35,"line":1763},[33,137098,136922],{"class":72},[33,137100,996],{"class":47},[33,137102,66058],{"class":72},[33,137104,3567],{"class":47},[33,137106,137107],{"class":35,"line":1775},[33,137108,1010],{"class":47},[3736,137110],{"style":128606,"src":137111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,137113,137114],{},"更加细节展示：",[328,137116,137117],{},[331,137118,137119],{},"html 标签内添加小图标",[3736,137121],{"style":128606,"src":137122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[328,137124,137125],{"start":51},[331,137126,137127],{},"给标签定义字体",[23,137129,137130],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,137131,137132,137136,137150,137154],{"__ignoreMap":28},[33,137133,137134],{"class":35,"line":36},[33,137135,132861],{"class":2487},[33,137137,137138,137140,137142,137144,137146,137148],{"class":35,"line":51},[33,137139,2226],{"class":47},[33,137141,53832],{"class":53522},[33,137143,55705],{"class":43},[33,137145,57],{"class":47},[33,137147,132874],{"class":60},[33,137149,53529],{"class":47},[33,137151,137152],{"class":35,"line":64},[33,137153,132881],{"class":47},[33,137155,137156,137158,137160],{"class":35,"line":76},[33,137157,54006],{"class":47},[33,137159,53832],{"class":53522},[33,137161,53529],{"class":47},[19,137163,137164],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3736,137166],{"style":128606,"src":137167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[631,137169,137171],{"id":137170},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,137173,137174],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,137176,137177,137178,137181],{},"把压缩包里面的 ",[2575,137179,137180],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,137183,137184],{},"打开网站，点下方：",[3736,137186],{"style":128606,"src":137187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3736,137189],{"style":128606,"src":137190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3736,137192],{"style":128606,"src":137193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,137195,137196],{},"点yes重新加载",[19,137198,137199],{},"然后重复之前的操作就可以实现了",[19,137201,137202],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[631,137204,137206],{"id":137205},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3736,137208],{"style":128606,"src":137209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2331,137211,137212],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":137214},[137215,137221,137226],{"id":135818,"depth":51,"text":135819,"children":137216},[137217,137218,137219,137220],{"id":135830,"depth":64,"text":135831},{"id":135859,"depth":64,"text":135860},{"id":135887,"depth":64,"text":135888},{"id":135945,"depth":64,"text":135946},{"id":136417,"depth":51,"text":136418,"children":137222},[137223,137224,137225],{"id":136421,"depth":64,"text":136422},{"id":136466,"depth":64,"text":136467},{"id":136482,"depth":64,"text":136483},{"id":136582,"depth":51,"text":136583,"children":137227},[137228,137229,137230,137231,137232,137233],{"id":136586,"depth":64,"text":136587},{"id":136620,"depth":64,"text":136621},{"id":136643,"depth":64,"text":136644},{"id":136690,"depth":64,"text":136691},{"id":137170,"depth":64,"text":137171},{"id":137205,"depth":64,"text":137206},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135810,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":137240,"title":137241,"body":137242,"description":2359,"extension":2360,"meta":138469,"navigation":99,"path":138470,"seo":138471,"stem":138472,"__hash__":138473},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":137243,"toc":138450},[137244,137247,137251,137254,137268,137336,137366,137369,137373,137377,137479,137526,137530,137533,137536,137570,137573,137576,137579,137582,137585,137588,137591,137593,137596,137599,137602,137605,137608,137611,137614,137642,137645,137649,137652,137659,137662,137665,137691,137694,137698,137701,137704,137711,137715,137718,137720,137752,137755,137758,137770,137776,137779,137782,137785,137787,137791,137794,137797,137800,137845,137849,137851,137854,137861,137903,137906,137910,137915,137929,137933,137936,137939,137942,137945,137948,137982,137985,137988,138042,138045,138048,138051,138054,138106,138109,138112,138161,138165,138167,138170,138173,138176,138179,138182,138240,138243,138249,138252,138255,138287,138290,138294,138298,138301,138333,138337,138340,138384,138388,138391,138394,138397,138400,138403,138406,138409,138411,138414,138416,138419,138422,138425,138428,138433,138436,138438,138441,138444,138447],[10,137245,137241],{"id":137246},"_13-界面样式与布局技巧",[14,137248,137250],{"id":137249},"_131-css三角","13.1 css三角",[19,137252,137253],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3413,137255,137256,137259,137262,137265],{},[331,137257,137258],{},"用css 边框可以模拟三角效果",[331,137260,137261],{},"宽度高度为0",[331,137263,137264],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[331,137266,137267],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[23,137269,137271],{"className":128750,"code":137270,"language":128752,"meta":28,"style":28},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[30,137272,137273,137278,137285,137295,137305,137321,137332],{"__ignoreMap":28},[33,137274,137275],{"class":35,"line":36},[33,137276,137277],{"class":2487},"\u002F* CSS 实现三角形 *\u002F\n",[33,137279,137280,137283],{"class":35,"line":51},[33,137281,137282],{"class":43},".triangle",[33,137284,17810],{"class":47},[33,137286,137287,137289,137291,137293],{"class":35,"line":64},[33,137288,72781],{"class":72},[33,137290,996],{"class":47},[33,137292,2617],{"class":72},[33,137294,3567],{"class":47},[33,137296,137297,137299,137301,137303],{"class":35,"line":76},[33,137298,73001],{"class":72},[33,137300,996],{"class":47},[33,137302,2617],{"class":72},[33,137304,3567],{"class":47},[33,137306,137307,137309,137311,137313,137315,137317,137319],{"class":35,"line":87},[33,137308,73109],{"class":72},[33,137310,996],{"class":47},[33,137312,1279],{"class":72},[33,137314,53713],{"class":39},[33,137316,53742],{"class":72},[33,137318,66208],{"class":72},[33,137320,3567],{"class":47},[33,137322,137323,137326,137328,137330],{"class":35,"line":96},[33,137324,137325],{"class":72},"  border-bottom-color",[33,137327,996],{"class":47},[33,137329,64587],{"class":72},[33,137331,3567],{"class":47},[33,137333,137334],{"class":35,"line":103},[33,137335,1010],{"class":47},[23,137337,137338],{"className":128750,"code":132907,"language":128752,"meta":28,"style":28},[30,137339,137340,137346,137362],{"__ignoreMap":28},[33,137341,137342,137344],{"class":35,"line":36},[33,137343,53832],{"class":53522},[33,137345,17810],{"class":47},[33,137347,137348,137350,137352,137354,137356,137358,137360],{"class":35,"line":51},[33,137349,73109],{"class":72},[33,137351,996],{"class":47},[33,137353,720],{"class":72},[33,137355,53713],{"class":39},[33,137357,53742],{"class":72},[33,137359,132142],{"class":72},[33,137361,3567],{"class":47},[33,137363,137364],{"class":35,"line":64},[33,137365,1010],{"class":47},[3736,137367],{"style":128606,"src":137368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,137370,137372],{"id":137371},"_132-css用户界面样式","13.2 css用户界面样式",[631,137374,137376],{"id":137375},"_1321-鼠标样式","13.2.1 鼠标样式",[23,137378,137380],{"className":128750,"code":137379,"language":128752,"meta":28,"style":28},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[30,137381,137382,137387,137406,137424,137443,137460],{"__ignoreMap":28},[33,137383,137384],{"class":35,"line":36},[33,137385,137386],{"class":2487},"\u002F* 鼠标样式 *\u002F\n",[33,137388,137389,137391,137393,137396,137398,137400,137403],{"class":35,"line":51},[33,137390,53832],{"class":53522},[33,137392,82018],{"class":47},[33,137394,137395],{"class":72},"cursor",[33,137397,996],{"class":47},[33,137399,64248],{"class":72},[33,137401,137402],{"class":47},"; }   ",[33,137404,137405],{"class":2487},"\u002F* 手型 *\u002F\n",[33,137407,137408,137410,137412,137414,137416,137419,137421],{"class":35,"line":64},[33,137409,53832],{"class":53522},[33,137411,82018],{"class":47},[33,137413,137395],{"class":72},[33,137415,996],{"class":47},[33,137417,137418],{"class":72},"default",[33,137420,137402],{"class":47},[33,137422,137423],{"class":2487},"\u002F* 默认 *\u002F\n",[33,137425,137426,137428,137430,137432,137434,137437,137440],{"class":35,"line":76},[33,137427,53832],{"class":53522},[33,137429,82018],{"class":47},[33,137431,137395],{"class":72},[33,137433,996],{"class":47},[33,137435,137436],{"class":72},"move",[33,137438,137439],{"class":47},"; }      ",[33,137441,137442],{"class":2487},"\u002F* 移动 *\u002F\n",[33,137444,137445,137447,137449,137451,137453,137455,137457],{"class":35,"line":87},[33,137446,53832],{"class":53522},[33,137448,82018],{"class":47},[33,137450,137395],{"class":72},[33,137452,996],{"class":47},[33,137454,7436],{"class":72},[33,137456,137439],{"class":47},[33,137458,137459],{"class":2487},"\u002F* 文本 *\u002F\n",[33,137461,137462,137464,137466,137468,137470,137473,137476],{"class":35,"line":96},[33,137463,53832],{"class":53522},[33,137465,82018],{"class":47},[33,137467,137395],{"class":72},[33,137469,996],{"class":47},[33,137471,137472],{"class":72},"not-allowed",[33,137474,137475],{"class":47},"; } ",[33,137477,137478],{"class":2487},"\u002F* 禁止 *\u002F\n",[2563,137480,137481,137489],{},[2566,137482,137483],{},[2569,137484,137485,137487],{},[2572,137486,129214],{"align":25974},[2572,137488,29726],{"align":25974},[2610,137490,137491,137498,137505,137512,137519],{},[2569,137492,137493,137495],{},[2615,137494,137418],{"align":25974},[2615,137496,137497],{"align":25974},"小白 默认",[2569,137499,137500,137502],{},[2615,137501,64248],{"align":25974},[2615,137503,137504],{"align":25974},"小手",[2569,137506,137507,137509],{},[2615,137508,137436],{"align":25974},[2615,137510,137511],{"align":25974},"移动",[2569,137513,137514,137516],{},[2615,137515,7436],{"align":25974},[2615,137517,137518],{"align":25974},"文本",[2569,137520,137521,137523],{},[2615,137522,137472],{"align":25974},[2615,137524,137525],{"align":25974},"禁止",[631,137527,137529],{"id":137528},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137531,137532],{},"去除表单轮廓线",[19,137534,137535],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[23,137537,137538],{"className":128750,"code":132114,"language":128752,"meta":28,"style":28},[30,137539,137540,137544,137550,137566],{"__ignoreMap":28},[33,137541,137542],{"class":35,"line":36},[33,137543,132121],{"class":2487},[33,137545,137546,137548],{"class":35,"line":51},[33,137547,53832],{"class":53522},[33,137549,17810],{"class":47},[33,137551,137552,137554,137556,137558,137560,137562,137564],{"class":35,"line":64},[33,137553,73109],{"class":72},[33,137555,996],{"class":47},[33,137557,720],{"class":72},[33,137559,53713],{"class":39},[33,137561,53742],{"class":72},[33,137563,132142],{"class":72},[33,137565,3567],{"class":47},[33,137567,137568],{"class":35,"line":76},[33,137569,1010],{"class":47},[19,137571,137572],{},"文本域：",[3736,137574],{"style":128606,"src":137575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137577,137578],{},"此时会有一个空白区域",[3736,137580],{"style":128606,"src":137581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137583,137584],{},"写在同一行就不会出现这个问题",[3736,137586],{"style":128606,"src":137587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137589,137590],{},"文本域是行内块元素，一定记住！！！",[19,137592,100440],{},[3736,137594],{"style":128606,"src":137595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137597,137598],{},"文本域尽量放在一行",[19,137600,137601],{},"知识回顾：cols是列，rols是行",[3736,137603],{"style":128606,"src":137604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137606,137607],{},"它可以进行拖动，显然这是我们不愿意看到的",[3736,137609],{"style":128606,"src":137610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137612,137613],{},"使用resize进行解决",[23,137615,137617],{"className":128750,"code":137616,"language":128752,"meta":28,"style":28},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[30,137618,137619,137625,137638],{"__ignoreMap":28},[33,137620,137621,137623],{"class":35,"line":36},[33,137622,56040],{"class":53522},[33,137624,17810],{"class":47},[33,137626,137627,137629,137631,137633,137635],{"class":35,"line":51},[33,137628,73011],{"class":72},[33,137630,996],{"class":47},[33,137632,56956],{"class":72},[33,137634,132613],{"class":47},[33,137636,137637],{"class":2487},"\u002F* 取消表单轮廓线 *\u002F\n",[33,137639,137640],{"class":35,"line":64},[33,137641,1010],{"class":47},[19,137643,137644],{},"此时就无法通过右下方实现拖动了",[631,137646,137648],{"id":137647},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137650,137651],{},"实现一个盒子中的文字和图片对齐",[19,137653,137654,137655,137658],{},"用于设置一个元素的 ",[2575,137656,137657],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137660,137661],{},"图片和文字默认是基线对齐",[3736,137663],{"style":128606,"src":137664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[23,137666,137667],{"className":128750,"code":137616,"language":128752,"meta":28,"style":28},[30,137668,137669,137675,137687],{"__ignoreMap":28},[33,137670,137671,137673],{"class":35,"line":36},[33,137672,56040],{"class":53522},[33,137674,17810],{"class":47},[33,137676,137677,137679,137681,137683,137685],{"class":35,"line":51},[33,137678,73011],{"class":72},[33,137680,996],{"class":47},[33,137682,56956],{"class":72},[33,137684,132613],{"class":47},[33,137686,137637],{"class":2487},[33,137688,137689],{"class":35,"line":64},[33,137690,1010],{"class":47},[3736,137692],{"style":128606,"src":137693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[24236,137695,137697],{"id":137696},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137699,137700],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3736,137702],{"style":128606,"src":137703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137705,137706,137707,137710],{},"此时可以给图片、表单这些行内块元素的 ",[2575,137708,137709],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[24236,137712,137714],{"id":137713},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137716,137717],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137719,16873],{},[23,137721,137723],{"className":128750,"code":137722,"language":128752,"meta":28,"style":28},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[30,137724,137725,137730,137736,137748],{"__ignoreMap":28},[33,137726,137727],{"class":35,"line":36},[33,137728,137729],{"class":2487},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[33,137731,137732,137734],{"class":35,"line":51},[33,137733,3736],{"class":53522},[33,137735,17810],{"class":47},[33,137737,137738,137741,137743,137746],{"class":35,"line":64},[33,137739,137740],{"class":72},"  vertical-align",[33,137742,996],{"class":47},[33,137744,137745],{"class":72},"middle",[33,137747,3567],{"class":47},[33,137749,137750],{"class":35,"line":76},[33,137751,1010],{"class":47},[3736,137753],{"style":128606,"src":137754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137756,137757],{},"主要解决方法有两种：",[328,137759,137760],{},[331,137761,137762,137765,137766,137769],{},[2575,137763,137764],{},"给图片"," 添加 ",[2575,137767,137768],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137771,137772,137773],{},"2.把图片转换为块级元素 ",[2575,137774,137775],{},"display: block",[19,137777,137778],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137780,137781],{},"img {",[19,137783,137784],{},"vertical-align:middle;",[19,137786,210],{},[631,137788,137790],{"id":137789},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137792,137793],{},"效果：",[3736,137795],{"style":128606,"src":137796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137798,137799],{},"单行文本溢出显示省略号--必须满足三个条件：",[23,137801,137803],{"className":128750,"code":137802,"language":128752,"meta":28,"style":28},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[30,137804,137805,137810,137816,137826,137831,137841],{"__ignoreMap":28},[33,137806,137807],{"class":35,"line":36},[33,137808,137809],{"class":2487},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[33,137811,137812,137814],{"class":35,"line":51},[33,137813,3736],{"class":53522},[33,137815,17810],{"class":47},[33,137817,137818,137820,137822,137824],{"class":35,"line":64},[33,137819,137740],{"class":72},[33,137821,996],{"class":47},[33,137823,137745],{"class":72},[33,137825,3567],{"class":47},[33,137827,137828],{"class":35,"line":76},[33,137829,137830],{"class":2487},"  \u002F* 或 *\u002F\n",[33,137832,137833,137835,137837,137839],{"class":35,"line":87},[33,137834,130366],{"class":72},[33,137836,996],{"class":47},[33,137838,63087],{"class":72},[33,137840,3567],{"class":47},[33,137842,137843],{"class":35,"line":96},[33,137844,1010],{"class":47},[631,137846,137848],{"id":137847},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137850,137793],{},[3736,137852],{"style":128606,"src":137853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137855,137856,137857,137860],{},"多行文本溢出显示省略号， ",[2575,137858,137859],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[23,137862,137863],{"className":128750,"code":137802,"language":128752,"meta":28,"style":28},[30,137864,137865,137869,137875,137885,137889,137899],{"__ignoreMap":28},[33,137866,137867],{"class":35,"line":36},[33,137868,137809],{"class":2487},[33,137870,137871,137873],{"class":35,"line":51},[33,137872,3736],{"class":53522},[33,137874,17810],{"class":47},[33,137876,137877,137879,137881,137883],{"class":35,"line":64},[33,137878,137740],{"class":72},[33,137880,996],{"class":47},[33,137882,137745],{"class":72},[33,137884,3567],{"class":47},[33,137886,137887],{"class":35,"line":76},[33,137888,137830],{"class":2487},[33,137890,137891,137893,137895,137897],{"class":35,"line":87},[33,137892,130366],{"class":72},[33,137894,996],{"class":47},[33,137896,63087],{"class":72},[33,137898,3567],{"class":47},[33,137900,137901],{"class":35,"line":96},[33,137902,1010],{"class":47},[19,137904,137905],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137907,137909],{"id":137908},"_133-常见布局技巧","13.3 常见布局技巧",[19,137911,137912],{},[2575,137913,137914],{},"巧妙利用一个技术更快更好的布局：",[328,137916,137917,137920,137923,137926],{},[331,137918,137919],{},"margin负值的运用",[331,137921,137922],{},"文字围绕浮动元素",[331,137924,137925],{},"行内块的巧妙运用",[331,137927,137928],{},"CSS三角强化",[631,137930,137932],{"id":137931},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137934,137935],{},"应用场景：",[3736,137937],{"style":128606,"src":137938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3736,137940],{"style":128606,"src":137941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137943,137944],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137946,137947],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[23,137949,137950],{"className":128750,"code":132114,"language":128752,"meta":28,"style":28},[30,137951,137952,137956,137962,137978],{"__ignoreMap":28},[33,137953,137954],{"class":35,"line":36},[33,137955,132121],{"class":2487},[33,137957,137958,137960],{"class":35,"line":51},[33,137959,53832],{"class":53522},[33,137961,17810],{"class":47},[33,137963,137964,137966,137968,137970,137972,137974,137976],{"class":35,"line":64},[33,137965,73109],{"class":72},[33,137967,996],{"class":47},[33,137969,720],{"class":72},[33,137971,53713],{"class":39},[33,137973,53742],{"class":72},[33,137975,132142],{"class":72},[33,137977,3567],{"class":47},[33,137979,137980],{"class":35,"line":76},[33,137981,1010],{"class":47},[3736,137983],{"style":128606,"src":137984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137986,137987],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[23,137989,137991],{"className":128750,"code":137990,"language":128752,"meta":28,"style":28},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,137992,137993,137998,138004,138014,138026,138038],{"__ignoreMap":28},[33,137994,137995],{"class":35,"line":36},[33,137996,137997],{"class":2487},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[33,137999,138000,138002],{"class":35,"line":51},[33,138001,132598],{"class":43},[33,138003,17810],{"class":47},[33,138005,138006,138008,138010,138012],{"class":35,"line":64},[33,138007,134556],{"class":72},[33,138009,996],{"class":47},[33,138011,56983],{"class":72},[33,138013,3567],{"class":47},[33,138015,138016,138018,138020,138022,138024],{"class":35,"line":76},[33,138017,134570],{"class":72},[33,138019,996],{"class":47},[33,138021,1279],{"class":72},[33,138023,53713],{"class":39},[33,138025,3567],{"class":47},[33,138027,138028,138030,138032,138034,138036],{"class":35,"line":87},[33,138029,134587],{"class":72},[33,138031,996],{"class":47},[33,138033,1284],{"class":72},[33,138035,53713],{"class":39},[33,138037,3567],{"class":47},[33,138039,138040],{"class":35,"line":96},[33,138041,1010],{"class":47},[19,138043,138044],{},"加上上述代码会发现：",[3736,138046],{"style":128606,"src":138047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,138049,138050],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,138052,138053],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[23,138055,138056],{"className":128750,"code":137990,"language":128752,"meta":28,"style":28},[30,138057,138058,138062,138068,138078,138090,138102],{"__ignoreMap":28},[33,138059,138060],{"class":35,"line":36},[33,138061,137997],{"class":2487},[33,138063,138064,138066],{"class":35,"line":51},[33,138065,132598],{"class":43},[33,138067,17810],{"class":47},[33,138069,138070,138072,138074,138076],{"class":35,"line":64},[33,138071,134556],{"class":72},[33,138073,996],{"class":47},[33,138075,56983],{"class":72},[33,138077,3567],{"class":47},[33,138079,138080,138082,138084,138086,138088],{"class":35,"line":76},[33,138081,134570],{"class":72},[33,138083,996],{"class":47},[33,138085,1279],{"class":72},[33,138087,53713],{"class":39},[33,138089,3567],{"class":47},[33,138091,138092,138094,138096,138098,138100],{"class":35,"line":87},[33,138093,134587],{"class":72},[33,138095,996],{"class":47},[33,138097,1284],{"class":72},[33,138099,53713],{"class":39},[33,138101,3567],{"class":47},[33,138103,138104],{"class":35,"line":96},[33,138105,1010],{"class":47},[19,138107,138108],{},"解决方式2：",[19,138110,138111],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[23,138113,138115],{"className":128750,"code":138114,"language":128752,"meta":28,"style":28},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,138116,138117,138123,138133,138145,138157],{"__ignoreMap":28},[33,138118,138119,138121],{"class":35,"line":36},[33,138120,53832],{"class":53522},[33,138122,17810],{"class":47},[33,138124,138125,138127,138129,138131],{"class":35,"line":51},[33,138126,134556],{"class":72},[33,138128,996],{"class":47},[33,138130,56983],{"class":72},[33,138132,3567],{"class":47},[33,138134,138135,138137,138139,138141,138143],{"class":35,"line":64},[33,138136,134570],{"class":72},[33,138138,996],{"class":47},[33,138140,1279],{"class":72},[33,138142,53713],{"class":39},[33,138144,3567],{"class":47},[33,138146,138147,138149,138151,138153,138155],{"class":35,"line":76},[33,138148,134587],{"class":72},[33,138150,996],{"class":47},[33,138152,1284],{"class":72},[33,138154,53713],{"class":39},[33,138156,3567],{"class":47},[33,138158,138159],{"class":35,"line":87},[33,138160,1010],{"class":47},[631,138162,138164],{"id":138163},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,138166,137935],{},[3736,138168],{"style":128606,"src":138169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,138171,138172],{},"实现结构图：",[3736,138174],{"style":128606,"src":138175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,138177,138178],{},"巧妙运用浮动元素不会压住文字的特性",[19,138180,138181],{},"代码显示：",[23,138183,138185],{"className":128750,"code":138184,"language":128752,"meta":28,"style":28},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,138186,138187,138193,138203,138207,138212,138216,138222,138236],{"__ignoreMap":28},[33,138188,138189,138191],{"class":35,"line":36},[33,138190,132598],{"class":43},[33,138192,17810],{"class":47},[33,138194,138195,138197,138199,138201],{"class":35,"line":51},[33,138196,133230],{"class":72},[33,138198,996],{"class":47},[33,138200,25974],{"class":72},[33,138202,3567],{"class":47},[33,138204,138205],{"class":35,"line":64},[33,138206,1010],{"class":47},[33,138208,138209],{"class":35,"line":76},[33,138210,138211],{"class":47},"```Css\n",[33,138213,138214],{"class":35,"line":87},[33,138215,132593],{"class":2487},[33,138217,138218,138220],{"class":35,"line":96},[33,138219,132598],{"class":43},[33,138221,17810],{"class":47},[33,138223,138224,138226,138228,138230,138232,138234],{"class":35,"line":103},[33,138225,72683],{"class":72},[33,138227,996],{"class":47},[33,138229,2617],{"class":72},[33,138231,53777],{"class":72},[33,138233,132613],{"class":47},[33,138235,132616],{"class":2487},[33,138237,138238],{"class":35,"line":108},[33,138239,1010],{"class":47},[19,138241,138242],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[23,138244,138247],{"className":138245,"code":138246,"language":7436},[7434],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,138248,138246],{"__ignoreMap":28},[3736,138250],{"style":128606,"src":138251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,138253,138254],{},"最终展示结果：",[23,138256,138257],{"className":128750,"code":132586,"language":128752,"meta":28,"style":28},[30,138258,138259,138263,138269,138283],{"__ignoreMap":28},[33,138260,138261],{"class":35,"line":36},[33,138262,132593],{"class":2487},[33,138264,138265,138267],{"class":35,"line":51},[33,138266,132598],{"class":43},[33,138268,17810],{"class":47},[33,138270,138271,138273,138275,138277,138279,138281],{"class":35,"line":64},[33,138272,72683],{"class":72},[33,138274,996],{"class":47},[33,138276,2617],{"class":72},[33,138278,53777],{"class":72},[33,138280,132613],{"class":47},[33,138282,132616],{"class":2487},[33,138284,138285],{"class":35,"line":76},[33,138286,1010],{"class":47},[3736,138288],{"style":128606,"src":138289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,138291,138293],{"id":138292},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[631,138295,138297],{"id":138296},"_1341-原理","13.4.1 原理",[3736,138299],{"style":128606,"src":138300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[23,138302,138303],{"className":128750,"code":132586,"language":128752,"meta":28,"style":28},[30,138304,138305,138309,138315,138329],{"__ignoreMap":28},[33,138306,138307],{"class":35,"line":36},[33,138308,132593],{"class":2487},[33,138310,138311,138313],{"class":35,"line":51},[33,138312,132598],{"class":43},[33,138314,17810],{"class":47},[33,138316,138317,138319,138321,138323,138325,138327],{"class":35,"line":64},[33,138318,72683],{"class":72},[33,138320,996],{"class":47},[33,138322,2617],{"class":72},[33,138324,53777],{"class":72},[33,138326,132613],{"class":47},[33,138328,132616],{"class":2487},[33,138330,138331],{"class":35,"line":76},[33,138332,1010],{"class":47},[631,138334,138336],{"id":138335},"_1342-实例","13.4.2 实例",[3736,138338],{"style":128606,"src":138339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[23,138341,138342],{"className":128750,"code":133216,"language":128752,"meta":28,"style":28},[30,138343,138344,138350,138360,138364,138370,138380],{"__ignoreMap":28},[33,138345,138346,138348],{"class":35,"line":36},[33,138347,133223],{"class":43},[33,138349,17810],{"class":47},[33,138351,138352,138354,138356,138358],{"class":35,"line":51},[33,138353,133230],{"class":72},[33,138355,996],{"class":47},[33,138357,25974],{"class":72},[33,138359,3567],{"class":47},[33,138361,138362],{"class":35,"line":64},[33,138363,1010],{"class":47},[33,138365,138366,138368],{"class":35,"line":76},[33,138367,133245],{"class":43},[33,138369,17810],{"class":47},[33,138371,138372,138374,138376,138378],{"class":35,"line":87},[33,138373,133230],{"class":72},[33,138375,996],{"class":47},[33,138377,74735],{"class":72},[33,138379,3567],{"class":47},[33,138381,138382],{"class":35,"line":96},[33,138383,1010],{"class":47},[14,138385,138387],{"id":138386},"_135-css的初始化","13.5 css的初始化",[19,138389,138390],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,138392,138393],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,138395,138396],{},"每个网页都必须首先进行 CSS初始化。",[19,138398,138399],{},"这里我们以 京东CSS初始化代码为例。",[19,138401,138402],{},"在网页右键查看网页源代码",[19,138404,138405],{},"找到css的link引入语句",[19,138407,138408],{},"然后ctrl+f 输入body",[19,138410,79437],{},[3736,138412],{"style":128606,"src":138413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,138415,79460],{},[3736,138417],{"style":128606,"src":138418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,138420,138421],{},"③打开了网页上传压缩的代码",[3736,138423],{"style":128606,"src":138424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,138426,138427],{},"④从body前可以查看这个网页的初始化代码",[19,138429,138430],{},[2575,138431,138432],{},"Unicode编码字体：",[19,138434,138435],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138437,85416],{},[19,138439,138440],{},"黑体 \\9ED1\\4F53",[19,138442,138443],{},"宋体 \\5B8B\\4F53",[19,138445,138446],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2331,138448,138449],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":28,"searchDepth":51,"depth":51,"links":138451},[138452,138453,138460,138464,138468],{"id":137249,"depth":51,"text":137250},{"id":137371,"depth":51,"text":137372,"children":138454},[138455,138456,138457,138458,138459],{"id":137375,"depth":64,"text":137376},{"id":137528,"depth":64,"text":137529},{"id":137647,"depth":64,"text":137648},{"id":137789,"depth":64,"text":137790},{"id":137847,"depth":64,"text":137848},{"id":137908,"depth":51,"text":137909,"children":138461},[138462,138463],{"id":137931,"depth":64,"text":137932},{"id":138163,"depth":64,"text":138164},{"id":138292,"depth":51,"text":138293,"children":138465},[138466,138467],{"id":138296,"depth":64,"text":138297},{"id":138335,"depth":64,"text":138336},{"id":138386,"depth":51,"text":138387},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":137241,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138475,"title":138476,"body":138477,"description":2359,"extension":2360,"meta":140163,"navigation":99,"path":140164,"seo":140165,"stem":140166,"__hash__":140167},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138478,"toc":140152},[138479,138482,138486,138490,138493,138500,138503,138506,138544,138547,138549,138563,138567,138576,138580,138585,138588,138591,138594,138629,138634,138637,138667,138670,138675,138678,138681,138711,138714,138768,138771,138775,138780,138792,138795,138799,138829,138832,138837,138840,138870,138873,138877,138894,138898,138902,138905,138938,138941,138945,138948,138951,138954,138957,138960,139071,139074,139077,139080,139182,139185,139189,139193,139197,139200,139240,139243,139245,139261,139265,139268,139273,139354,139357,139360,139486,139491,139494,139502,139505,139510,139595,139598,139602,139605,139608,139612,139632,139637,139721,139724,139729,139732,139735,139813,139816,139819,139822,139825,139828,139833,139836,139839,139911,139914,139919,139922,140019,140022,140028,140031,140034,140037,140040,140043,140046,140049,140052,140056,140061,140064,140097,140102,140105,140146,140149],[10,138480,138476],{"id":138481},"_14-html5与css3新特性",[14,138483,138485],{"id":138484},"_141-html5的新特性","14.1 HTML5的新特性",[631,138487,138489],{"id":138488},"_1411-基本标签","14.1.1 基本标签",[19,138491,138492],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138494,138495,138496,138499],{},"这些新特性都有兼容性问题，基本是 ",[2575,138497,138498],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138501,138502],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138504,138505],{},"现在使用的是新特性：",[3413,138507,138508,138514,138520,138526,138532,138538],{},[331,138509,138510,138513],{},[30,138511,138512],{},"\u003Cheader>"," 头部标签",[331,138515,138516,138519],{},[30,138517,138518],{},"\u003Cnav>"," 导航标签",[331,138521,138522,138525],{},[30,138523,138524],{},"\u003Carticle>"," 内容标签",[331,138527,138528,138531],{},[30,138529,138530],{},"\u003Csection>"," 定义文档某个区域",[331,138533,138534,138537],{},[30,138535,138536],{},"\u003Caside>"," 侧边栏标签",[331,138539,138540,138543],{},[30,138541,138542],{},"\u003Cfooter>"," 尾部标签",[3736,138545],{"style":128606,"src":138546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138548,2461],{},[3413,138550,138551,138554,138557,138560],{},[331,138552,138553],{},"这种语义化标准主要是针对搜索引擎的",[331,138555,138556],{},"这些标签页面中可以经常使用",[331,138558,138559],{},"在IE9中，需要把这些元素转换为块级元素",[331,138561,138562],{},"移动端更喜欢使用这些标签",[631,138564,138566],{"id":138565},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138568,138569,138570,138572,138573,138575],{},"音频 ",[2575,138571,30411],{}," 和视频 ",[2575,138574,30420],{}," 两个标签",[24236,138577,138579],{"id":138578},"_14121-视频标签-video","14.1.2.1 视频标签- video",[328,138581,138582],{},[331,138583,138584],{},"支持格式：",[3736,138586],{"style":128606,"src":138587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138589,138590],{},"尽量使用MP4，兼容性好",[19,138592,138593],{},"用MP4就可以",[23,138595,138597],{"className":129497,"code":138596,"language":129499,"meta":28,"style":28},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[30,138598,138599],{"__ignoreMap":28},[33,138600,138601,138603,138605,138607,138609,138612,138614,138617,138620,138623,138625,138627],{"class":35,"line":36},[33,138602,2226],{"class":47},[33,138604,30420],{"class":53522},[33,138606,57458],{"class":43},[33,138608,57],{"class":47},[33,138610,138611],{"class":60},"\"movie.mp4\"",[33,138613,94631],{"class":43},[33,138615,138616],{"class":43}," autoplay",[33,138618,138619],{"class":43}," muted",[33,138621,138622],{"class":43}," loop",[33,138624,57533],{"class":47},[33,138626,30420],{"class":53522},[33,138628,53529],{"class":47},[328,138630,138631],{"start":51},[331,138632,138633],{},"兼容写法",[19,138635,138636],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[23,138638,138639],{"className":129497,"code":138596,"language":129499,"meta":28,"style":28},[30,138640,138641],{"__ignoreMap":28},[33,138642,138643,138645,138647,138649,138651,138653,138655,138657,138659,138661,138663,138665],{"class":35,"line":36},[33,138644,2226],{"class":47},[33,138646,30420],{"class":53522},[33,138648,57458],{"class":43},[33,138650,57],{"class":47},[33,138652,138611],{"class":60},[33,138654,94631],{"class":43},[33,138656,138616],{"class":43},[33,138658,138619],{"class":43},[33,138660,138622],{"class":43},[33,138662,57533],{"class":47},[33,138664,30420],{"class":53522},[33,138666,53529],{"class":47},[19,138668,138669],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[328,138671,138672],{"start":64},[331,138673,138674],{},"video常用属性",[3736,138676],{"style":128606,"src":138677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138679,138680],{},"poster属性后面是跟的等待加载图片的地址",[23,138682,138683],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,138684,138685],{"__ignoreMap":28},[33,138686,138687,138689,138691,138693,138695,138697,138699,138701,138703,138705,138707,138709],{"class":35,"line":36},[33,138688,2226],{"class":47},[33,138690,3736],{"class":53522},[33,138692,57458],{"class":43},[33,138694,57],{"class":47},[33,138696,136267],{"class":60},[33,138698,57466],{"class":43},[33,138700,57],{"class":47},[33,138702,136274],{"class":60},[33,138704,136277],{"class":43},[33,138706,57],{"class":47},[33,138708,136282],{"class":60},[33,138710,53529],{"class":47},[19,138712,138713],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[23,138715,138717],{"className":128750,"code":138716,"language":128752,"meta":28,"style":28},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[30,138718,138719,138724,138730,138754,138759,138764],{"__ignoreMap":28},[33,138720,138721],{"class":35,"line":36},[33,138722,138723],{"class":2487},"\u002F* 2D 位移 *\u002F\n",[33,138725,138726,138728],{"class":35,"line":51},[33,138727,53832],{"class":53522},[33,138729,17810],{"class":47},[33,138731,138732,138735,138737,138740,138742,138744,138746,138748,138750,138752],{"class":35,"line":64},[33,138733,138734],{"class":72},"  transform",[33,138736,996],{"class":47},[33,138738,138739],{"class":72},"translate",[33,138741,133],{"class":47},[33,138743,2734],{"class":72},[33,138745,53713],{"class":39},[33,138747,245],{"class":47},[33,138749,3071],{"class":72},[33,138751,53713],{"class":39},[33,138753,4976],{"class":47},[33,138755,138756],{"class":35,"line":76},[33,138757,138758],{"class":2487},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[33,138760,138761],{"class":35,"line":87},[33,138762,138763],{"class":2487},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[33,138765,138766],{"class":35,"line":96},[33,138767,1010],{"class":47},[19,138769,138770],{},"muted:自动静音属性",[24236,138772,138774],{"id":138773},"_14122-音频标签audio","14.1.2.2 音频标签audio",[328,138776,138777],{},[331,138778,138779],{},"基本使用",[19,138781,138782,138783,138788,138789],{},"当前 ",[2575,138784,138785],{},[30,138786,138787],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2575,138790,138791],{},"mp3格式",[3736,138793],{"style":128606,"src":138794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[328,138796,138797],{"start":51},[331,138798,138633],{},[23,138800,138801],{"className":129497,"code":138596,"language":129499,"meta":28,"style":28},[30,138802,138803],{"__ignoreMap":28},[33,138804,138805,138807,138809,138811,138813,138815,138817,138819,138821,138823,138825,138827],{"class":35,"line":36},[33,138806,2226],{"class":47},[33,138808,30420],{"class":53522},[33,138810,57458],{"class":43},[33,138812,57],{"class":47},[33,138814,138611],{"class":60},[33,138816,94631],{"class":43},[33,138818,138616],{"class":43},[33,138820,138619],{"class":43},[33,138822,138622],{"class":43},[33,138824,57533],{"class":47},[33,138826,30420],{"class":53522},[33,138828,53529],{"class":47},[19,138830,138831],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[328,138833,138834],{"start":64},[331,138835,138836],{},"常用属性",[3736,138838],{"style":128606,"src":138839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[23,138841,138842],{"className":129497,"code":138596,"language":129499,"meta":28,"style":28},[30,138843,138844],{"__ignoreMap":28},[33,138845,138846,138848,138850,138852,138854,138856,138858,138860,138862,138864,138866,138868],{"class":35,"line":36},[33,138847,2226],{"class":47},[33,138849,30420],{"class":53522},[33,138851,57458],{"class":43},[33,138853,57],{"class":47},[33,138855,138611],{"class":60},[33,138857,94631],{"class":43},[33,138859,138616],{"class":43},[33,138861,138619],{"class":43},[33,138863,138622],{"class":43},[33,138865,57533],{"class":47},[33,138867,30420],{"class":53522},[33,138869,53529],{"class":47},[19,138871,138872],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[24236,138874,138876],{"id":138875},"_14123-总结","14.1.2.3 总结",[3413,138878,138879,138882,138885,138888,138891],{},[331,138880,138881],{},"音频标签和视频标签使用方式基本一致",[331,138883,138884],{},"浏览器支持情况不同",[331,138886,138887],{},"谷歌浏览器把音频和视频自动播放禁止了",[331,138889,138890],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[331,138892,138893],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[631,138895,138897],{"id":138896},"_1413-表单元素","14.1.3 表单元素",[24236,138899,138901],{"id":138900},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3736,138903],{"style":128606,"src":138904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[23,138906,138908],{"className":129497,"code":138907,"language":129499,"meta":28,"style":28},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[30,138909,138910],{"__ignoreMap":28},[33,138911,138912,138914,138916,138918,138920,138922,138924,138926,138929,138931,138933,138936],{"class":35,"line":36},[33,138913,2226],{"class":47},[33,138915,56040],{"class":53522},[33,138917,56043],{"class":43},[33,138919,57],{"class":47},[33,138921,64916],{"class":60},[33,138923,17158],{"class":43},[33,138925,57],{"class":47},[33,138927,138928],{"class":60},"\"username\"",[33,138930,63238],{"class":43},[33,138932,57],{"class":47},[33,138934,138935],{"class":60},"\"请输入用户名\"",[33,138937,53529],{"class":47},[3736,138939],{"style":128606,"src":138940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[24236,138942,138944],{"id":138943},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3736,138946],{"style":128606,"src":138947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138949,138950],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138952,138953],{},"快捷操作：",[3736,138955],{"style":128606,"src":138956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138958,138959],{},"例子1：",[23,138961,138963],{"className":129497,"code":138962,"language":129499,"meta":28,"style":28},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[30,138964,138965,138988,139015,139044,139063],{"__ignoreMap":28},[33,138966,138967,138969,138971,138973,138975,138978,138981,138983,138986],{"class":35,"line":36},[33,138968,2226],{"class":47},[33,138970,68842],{"class":53522},[33,138972,68845],{"class":43},[33,138974,57],{"class":47},[33,138976,138977],{"class":60},"\"\u002Fsubmit\"",[33,138979,138980],{"class":43}," method",[33,138982,57],{"class":47},[33,138984,138985],{"class":60},"\"post\"",[33,138987,53529],{"class":47},[33,138989,138990,138992,138994,138996,138998,139000,139002,139004,139006,139008,139010,139013],{"class":35,"line":51},[33,138991,54364],{"class":47},[33,138993,56040],{"class":53522},[33,138995,56043],{"class":43},[33,138997,57],{"class":47},[33,138999,64916],{"class":60},[33,139001,17158],{"class":43},[33,139003,57],{"class":47},[33,139005,138928],{"class":60},[33,139007,63238],{"class":43},[33,139009,57],{"class":47},[33,139011,139012],{"class":60},"\"用户名\"",[33,139014,53529],{"class":47},[33,139016,139017,139019,139021,139023,139025,139028,139030,139032,139035,139037,139039,139042],{"class":35,"line":64},[33,139018,54364],{"class":47},[33,139020,56040],{"class":53522},[33,139022,56043],{"class":43},[33,139024,57],{"class":47},[33,139026,139027],{"class":60},"\"password\"",[33,139029,17158],{"class":43},[33,139031,57],{"class":47},[33,139033,139034],{"class":60},"\"pwd\"",[33,139036,63238],{"class":43},[33,139038,57],{"class":47},[33,139040,139041],{"class":60},"\"密码\"",[33,139043,53529],{"class":47},[33,139045,139046,139048,139050,139052,139054,139056,139059,139061],{"class":35,"line":76},[33,139047,54364],{"class":47},[33,139049,56106],{"class":53522},[33,139051,56043],{"class":43},[33,139053,57],{"class":47},[33,139055,68865],{"class":60},[33,139057,139058],{"class":47},">提交\u003C\u002F",[33,139060,56106],{"class":53522},[33,139062,53529],{"class":47},[33,139064,139065,139067,139069],{"class":35,"line":87},[33,139066,54006],{"class":47},[33,139068,68842],{"class":53522},[33,139070,53529],{"class":47},[3736,139072],{"style":128606,"src":139073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,139075,139076],{},"value是表单域的内容",[19,139078,139079],{},"例子2：",[23,139081,139082],{"className":129497,"code":138962,"language":129499,"meta":28,"style":28},[30,139083,139084,139104,139130,139156,139174],{"__ignoreMap":28},[33,139085,139086,139088,139090,139092,139094,139096,139098,139100,139102],{"class":35,"line":36},[33,139087,2226],{"class":47},[33,139089,68842],{"class":53522},[33,139091,68845],{"class":43},[33,139093,57],{"class":47},[33,139095,138977],{"class":60},[33,139097,138980],{"class":43},[33,139099,57],{"class":47},[33,139101,138985],{"class":60},[33,139103,53529],{"class":47},[33,139105,139106,139108,139110,139112,139114,139116,139118,139120,139122,139124,139126,139128],{"class":35,"line":51},[33,139107,54364],{"class":47},[33,139109,56040],{"class":53522},[33,139111,56043],{"class":43},[33,139113,57],{"class":47},[33,139115,64916],{"class":60},[33,139117,17158],{"class":43},[33,139119,57],{"class":47},[33,139121,138928],{"class":60},[33,139123,63238],{"class":43},[33,139125,57],{"class":47},[33,139127,139012],{"class":60},[33,139129,53529],{"class":47},[33,139131,139132,139134,139136,139138,139140,139142,139144,139146,139148,139150,139152,139154],{"class":35,"line":64},[33,139133,54364],{"class":47},[33,139135,56040],{"class":53522},[33,139137,56043],{"class":43},[33,139139,57],{"class":47},[33,139141,139027],{"class":60},[33,139143,17158],{"class":43},[33,139145,57],{"class":47},[33,139147,139034],{"class":60},[33,139149,63238],{"class":43},[33,139151,57],{"class":47},[33,139153,139041],{"class":60},[33,139155,53529],{"class":47},[33,139157,139158,139160,139162,139164,139166,139168,139170,139172],{"class":35,"line":76},[33,139159,54364],{"class":47},[33,139161,56106],{"class":53522},[33,139163,56043],{"class":43},[33,139165,57],{"class":47},[33,139167,68865],{"class":60},[33,139169,139058],{"class":47},[33,139171,56106],{"class":53522},[33,139173,53529],{"class":47},[33,139175,139176,139178,139180],{"class":35,"line":87},[33,139177,54006],{"class":47},[33,139179,68842],{"class":53522},[33,139181,53529],{"class":47},[3736,139183],{"style":128606,"src":139184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,139186,139188],{"id":139187},"_142-css新特性","14.2 CSS新特性",[631,139190,139192],{"id":139191},"_1421-新增选择器","14.2.1 新增选择器",[24236,139194,139196],{"id":139195},"_14211-属性选择器","14.2.1.1 属性选择器",[3736,139198],{"style":128606,"src":139199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[23,139201,139203],{"className":128750,"code":139202,"language":128752,"meta":28,"style":28},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[30,139204,139205,139220,139236],{"__ignoreMap":28},[33,139206,139207,139209,139211,139213,139215,139217],{"class":35,"line":36},[33,139208,56040],{"class":53522},[33,139210,3300],{"class":47},[33,139212,136],{"class":43},[33,139214,57],{"class":39},[33,139216,64916],{"class":60},[33,139218,139219],{"class":47},"] {\n",[33,139221,139222,139224,139226,139228,139230,139232,139234],{"class":35,"line":51},[33,139223,73109],{"class":72},[33,139225,996],{"class":47},[33,139227,720],{"class":72},[33,139229,53713],{"class":39},[33,139231,53742],{"class":72},[33,139233,132330],{"class":72},[33,139235,3567],{"class":47},[33,139237,139238],{"class":35,"line":64},[33,139239,1010],{"class":47},[3736,139241],{"style":128606,"src":139242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,139244,2461],{},[3413,139246,139247,139250,139253,139256],{},[331,139248,139249],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[331,139251,139252],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[331,139254,139255],{},"属性选择器也可以选择出来自定义的属性",[331,139257,139258,139260],{},[2575,139259,11271],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[24236,139262,139264],{"id":139263},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3736,139266],{"style":128606,"src":139267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[328,139269,139270],{},[331,139271,139272],{},"fist-child",[23,139274,139276],{"className":128750,"code":139275,"language":128752,"meta":28,"style":28},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[30,139277,139278,139283,139298,139318,139336],{"__ignoreMap":28},[33,139279,139280],{"class":35,"line":36},[33,139281,139282],{"class":2487},"\u002F* 属性选择器 *\u002F\n",[33,139284,139285,139287,139289,139291,139293,139295],{"class":35,"line":51},[33,139286,56040],{"class":53522},[33,139288,3300],{"class":47},[33,139290,136],{"class":43},[33,139292,57],{"class":39},[33,139294,64916],{"class":60},[33,139296,139297],{"class":47},"] { }\n",[33,139299,139300,139302,139304,139306,139309,139312,139315],{"class":35,"line":64},[33,139301,56040],{"class":53522},[33,139303,3300],{"class":47},[33,139305,16934],{"class":43},[33,139307,139308],{"class":39},"^=",[33,139310,139311],{"class":60},"\"icon\"",[33,139313,139314],{"class":47},"] { }  ",[33,139316,139317],{"class":2487},"\u002F* 以 icon 开头 *\u002F\n",[33,139319,139320,139322,139324,139326,139329,139331,139333],{"class":35,"line":76},[33,139321,56040],{"class":53522},[33,139323,3300],{"class":47},[33,139325,16934],{"class":43},[33,139327,139328],{"class":39},"$=",[33,139330,139311],{"class":60},[33,139332,139314],{"class":47},[33,139334,139335],{"class":2487},"\u002F* 以 icon 结尾 *\u002F\n",[33,139337,139338,139340,139342,139344,139347,139349,139351],{"class":35,"line":87},[33,139339,56040],{"class":53522},[33,139341,3300],{"class":47},[33,139343,16934],{"class":43},[33,139345,139346],{"class":39},"*=",[33,139348,139311],{"class":60},[33,139350,139314],{"class":47},[33,139352,139353],{"class":2487},"\u002F* 包含 icon *\u002F\n",[19,139355,139356],{},"ul的第一个儿子文本为红色",[19,139358,139359],{},"一定要在冒号前加空格，不然就是选中所有的了",[23,139361,139363],{"className":128750,"code":139362,"language":128752,"meta":28,"style":28},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[30,139364,139365,139371,139381,139385,139389,139394,139407,139420,139436,139453,139470],{"__ignoreMap":28},[33,139366,139367,139369],{"class":35,"line":36},[33,139368,129041],{"class":43},[33,139370,17810],{"class":47},[33,139372,139373,139375,139377,139379],{"class":35,"line":51},[33,139374,73118],{"class":72},[33,139376,996],{"class":47},[33,139378,59639],{"class":72},[33,139380,3567],{"class":47},[33,139382,139383],{"class":35,"line":64},[33,139384,1010],{"class":47},[33,139386,139387],{"class":35,"line":76},[33,139388,138211],{"class":47},[33,139390,139391],{"class":35,"line":87},[33,139392,139393],{"class":2487},"\u002F* 结构伪类选择器 *\u002F\n",[33,139395,139396,139398,139401,139404],{"class":35,"line":96},[33,139397,331],{"class":53522},[33,139399,139400],{"class":43},":first-child",[33,139402,139403],{"class":47}," { }           ",[33,139405,139406],{"class":2487},"\u002F* 第一个 *\u002F\n",[33,139408,139409,139411,139414,139417],{"class":35,"line":103},[33,139410,331],{"class":53522},[33,139412,139413],{"class":43},":last-child",[33,139415,139416],{"class":47}," { }            ",[33,139418,139419],{"class":2487},"\u002F* 最后一个 *\u002F\n",[33,139421,139422,139424,139426,139428,139430,139433],{"class":35,"line":108},[33,139423,331],{"class":53522},[33,139425,131664],{"class":43},[33,139427,133],{"class":47},[33,139429,725],{"class":72},[33,139431,139432],{"class":47},") { }          ",[33,139434,139435],{"class":2487},"\u002F* 第2个 *\u002F\n",[33,139437,139438,139440,139442,139444,139447,139450],{"class":35,"line":119},[33,139439,331],{"class":53522},[33,139441,131664],{"class":43},[33,139443,133],{"class":47},[33,139445,139446],{"class":72},"2n",[33,139448,139449],{"class":47},") { }         ",[33,139451,139452],{"class":2487},"\u002F* 偶数 *\u002F\n",[33,139454,139455,139457,139459,139461,139464,139467],{"class":35,"line":128},[33,139456,331],{"class":53522},[33,139458,131664],{"class":43},[33,139460,133],{"class":47},[33,139462,139463],{"class":72},"2n+1",[33,139465,139466],{"class":47},") { }       ",[33,139468,139469],{"class":2487},"\u002F* 奇数 *\u002F\n",[33,139471,139472,139474,139476,139478,139481,139483],{"class":35,"line":1753},[33,139473,331],{"class":53522},[33,139475,131664],{"class":43},[33,139477,133],{"class":47},[33,139479,139480],{"class":72},"-n+3",[33,139482,139466],{"class":47},[33,139484,139485],{"class":2487},"\u002F* 前3个 *\u002F\n",[53832,139487,139490],{"className":139488},[139489],"example","\n  示例内容\n",[19,139492,139493],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3413,139495,139496],{},[331,139497,139498,139501],{},[30,139499,139500],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139503,139504],{},"也就是说它选择的是熊大",[328,139506,139507],{"start":96},[331,139508,139509],{},"权重",[23,139511,139513],{"className":128750,"code":139512,"language":128752,"meta":28,"style":28},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[30,139514,139515,139519,139529,139539,139553,139567,139581],{"__ignoreMap":28},[33,139516,139517],{"class":35,"line":36},[33,139518,139393],{"class":2487},[33,139520,139521,139523,139525,139527],{"class":35,"line":51},[33,139522,331],{"class":53522},[33,139524,139400],{"class":43},[33,139526,139403],{"class":47},[33,139528,139406],{"class":2487},[33,139530,139531,139533,139535,139537],{"class":35,"line":64},[33,139532,331],{"class":53522},[33,139534,139413],{"class":43},[33,139536,139416],{"class":47},[33,139538,139419],{"class":2487},[33,139540,139541,139543,139545,139547,139549,139551],{"class":35,"line":76},[33,139542,331],{"class":53522},[33,139544,131664],{"class":43},[33,139546,133],{"class":47},[33,139548,725],{"class":72},[33,139550,139432],{"class":47},[33,139552,139435],{"class":2487},[33,139554,139555,139557,139559,139561,139563,139565],{"class":35,"line":87},[33,139556,331],{"class":53522},[33,139558,131664],{"class":43},[33,139560,133],{"class":47},[33,139562,139446],{"class":72},[33,139564,139449],{"class":47},[33,139566,139452],{"class":2487},[33,139568,139569,139571,139573,139575,139577,139579],{"class":35,"line":96},[33,139570,331],{"class":53522},[33,139572,131664],{"class":43},[33,139574,133],{"class":47},[33,139576,139463],{"class":72},[33,139578,139466],{"class":47},[33,139580,139469],{"class":2487},[33,139582,139583,139585,139587,139589,139591,139593],{"class":35,"line":103},[33,139584,331],{"class":53522},[33,139586,131664],{"class":43},[33,139588,133],{"class":47},[33,139590,139480],{"class":72},[33,139592,139466],{"class":47},[33,139594,139485],{"class":2487},[19,139596,139597],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[24236,139599,139601],{"id":139600},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139603,139604],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3736,139606],{"style":128606,"src":139607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[328,139609,139610],{},[331,139611,2461],{},[3413,139613,139614,139617,139620,139623,139626,139629],{},[331,139615,139616],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[331,139618,139619],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[331,139621,139622],{},"语法： element::before {}",[331,139624,139625],{},"before 和 after 必须有 content 属性",[331,139627,139628],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[331,139630,139631],{},"伪元素选择器和标签选择器一样，权重为 1",[328,139633,139634],{"start":51},[331,139635,139636],{},"实例",[23,139638,139639],{"className":128750,"code":139512,"language":128752,"meta":28,"style":28},[30,139640,139641,139645,139655,139665,139679,139693,139707],{"__ignoreMap":28},[33,139642,139643],{"class":35,"line":36},[33,139644,139393],{"class":2487},[33,139646,139647,139649,139651,139653],{"class":35,"line":51},[33,139648,331],{"class":53522},[33,139650,139400],{"class":43},[33,139652,139403],{"class":47},[33,139654,139406],{"class":2487},[33,139656,139657,139659,139661,139663],{"class":35,"line":64},[33,139658,331],{"class":53522},[33,139660,139413],{"class":43},[33,139662,139416],{"class":47},[33,139664,139419],{"class":2487},[33,139666,139667,139669,139671,139673,139675,139677],{"class":35,"line":76},[33,139668,331],{"class":53522},[33,139670,131664],{"class":43},[33,139672,133],{"class":47},[33,139674,725],{"class":72},[33,139676,139432],{"class":47},[33,139678,139435],{"class":2487},[33,139680,139681,139683,139685,139687,139689,139691],{"class":35,"line":87},[33,139682,331],{"class":53522},[33,139684,131664],{"class":43},[33,139686,133],{"class":47},[33,139688,139446],{"class":72},[33,139690,139449],{"class":47},[33,139692,139452],{"class":2487},[33,139694,139695,139697,139699,139701,139703,139705],{"class":35,"line":96},[33,139696,331],{"class":53522},[33,139698,131664],{"class":43},[33,139700,133],{"class":47},[33,139702,139463],{"class":72},[33,139704,139466],{"class":47},[33,139706,139469],{"class":2487},[33,139708,139709,139711,139713,139715,139717,139719],{"class":35,"line":103},[33,139710,331],{"class":53522},[33,139712,131664],{"class":43},[33,139714,133],{"class":47},[33,139716,139480],{"class":72},[33,139718,139466],{"class":47},[33,139720,139485],{"class":2487},[3736,139722],{"style":128606,"src":139723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[328,139725,139726],{"start":64},[331,139727,139728],{},"使用场景1",[3736,139730],{"style":128606,"src":139731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139733,139734],{},"不需要再加盒子来整红色那部分了",[23,139736,139738],{"className":128750,"code":139737,"language":128752,"meta":28,"style":28},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[30,139739,139740,139745,139754,139765,139775,139779,139788,139799,139809],{"__ignoreMap":28},[33,139741,139742],{"class":35,"line":36},[33,139743,139744],{"class":2487},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[33,139746,139747,139749,139752],{"class":35,"line":51},[33,139748,53832],{"class":53522},[33,139750,139751],{"class":43},"::before",[33,139753,17810],{"class":47},[33,139755,139756,139759,139761,139763],{"class":35,"line":64},[33,139757,139758],{"class":72},"  content",[33,139760,996],{"class":47},[33,139762,9898],{"class":60},[33,139764,3567],{"class":47},[33,139766,139767,139769,139771,139773],{"class":35,"line":76},[33,139768,130366],{"class":72},[33,139770,996],{"class":47},[33,139772,63087],{"class":72},[33,139774,3567],{"class":47},[33,139776,139777],{"class":35,"line":87},[33,139778,1010],{"class":47},[33,139780,139781,139783,139786],{"class":35,"line":96},[33,139782,53832],{"class":53522},[33,139784,139785],{"class":43},"::after",[33,139787,17810],{"class":47},[33,139789,139790,139792,139794,139797],{"class":35,"line":103},[33,139791,139758],{"class":72},[33,139793,996],{"class":47},[33,139795,139796],{"class":60},"\"→\"",[33,139798,3567],{"class":47},[33,139800,139801,139803,139805,139807],{"class":35,"line":108},[33,139802,73118],{"class":72},[33,139804,996],{"class":47},[33,139806,64288],{"class":72},[33,139808,3567],{"class":47},[33,139810,139811],{"class":35,"line":119},[33,139812,1010],{"class":47},[3736,139814],{"style":128606,"src":139815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139817,139818],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3736,139820],{"style":128606,"src":139821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139823,139824],{},"但是在引用时需要先转义一下",[19,139826,139827],{},"content='\\e930'",[328,139829,139830],{"start":76},[331,139831,139832],{},"使用场景2",[19,139834,139835],{},"仿土豆效果",[19,139837,139838],{},"通过使用伪元素选择器可以减少body中盒子的数量",[23,139840,139841],{"className":128750,"code":139737,"language":128752,"meta":28,"style":28},[30,139842,139843,139847,139855,139865,139875,139879,139887,139897,139907],{"__ignoreMap":28},[33,139844,139845],{"class":35,"line":36},[33,139846,139744],{"class":2487},[33,139848,139849,139851,139853],{"class":35,"line":51},[33,139850,53832],{"class":53522},[33,139852,139751],{"class":43},[33,139854,17810],{"class":47},[33,139856,139857,139859,139861,139863],{"class":35,"line":64},[33,139858,139758],{"class":72},[33,139860,996],{"class":47},[33,139862,9898],{"class":60},[33,139864,3567],{"class":47},[33,139866,139867,139869,139871,139873],{"class":35,"line":76},[33,139868,130366],{"class":72},[33,139870,996],{"class":47},[33,139872,63087],{"class":72},[33,139874,3567],{"class":47},[33,139876,139877],{"class":35,"line":87},[33,139878,1010],{"class":47},[33,139880,139881,139883,139885],{"class":35,"line":96},[33,139882,53832],{"class":53522},[33,139884,139785],{"class":43},[33,139886,17810],{"class":47},[33,139888,139889,139891,139893,139895],{"class":35,"line":103},[33,139890,139758],{"class":72},[33,139892,996],{"class":47},[33,139894,139796],{"class":60},[33,139896,3567],{"class":47},[33,139898,139899,139901,139903,139905],{"class":35,"line":108},[33,139900,73118],{"class":72},[33,139902,996],{"class":47},[33,139904,64288],{"class":72},[33,139906,3567],{"class":47},[33,139908,139909],{"class":35,"line":119},[33,139910,1010],{"class":47},[3736,139912],{"style":128606,"src":139913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[328,139915,139916],{"start":87},[331,139917,139918],{},"使用场景3",[19,139920,139921],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[23,139923,139925],{"className":128750,"code":139924,"language":128752,"meta":28,"style":28},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[30,139926,139927,139933,139943,139947,139951,139955,139963,139973,139983,139987,139995,140005,140015],{"__ignoreMap":28},[33,139928,139929,139931],{"class":35,"line":36},[33,139930,132598],{"class":43},[33,139932,17810],{"class":47},[33,139934,139935,139937,139939,139941],{"class":35,"line":51},[33,139936,133230],{"class":72},[33,139938,996],{"class":47},[33,139940,25974],{"class":72},[33,139942,3567],{"class":47},[33,139944,139945],{"class":35,"line":64},[33,139946,1010],{"class":47},[33,139948,139949],{"class":35,"line":76},[33,139950,138211],{"class":47},[33,139952,139953],{"class":35,"line":87},[33,139954,139744],{"class":2487},[33,139956,139957,139959,139961],{"class":35,"line":96},[33,139958,53832],{"class":53522},[33,139960,139751],{"class":43},[33,139962,17810],{"class":47},[33,139964,139965,139967,139969,139971],{"class":35,"line":103},[33,139966,139758],{"class":72},[33,139968,996],{"class":47},[33,139970,9898],{"class":60},[33,139972,3567],{"class":47},[33,139974,139975,139977,139979,139981],{"class":35,"line":108},[33,139976,130366],{"class":72},[33,139978,996],{"class":47},[33,139980,63087],{"class":72},[33,139982,3567],{"class":47},[33,139984,139985],{"class":35,"line":119},[33,139986,1010],{"class":47},[33,139988,139989,139991,139993],{"class":35,"line":128},[33,139990,53832],{"class":53522},[33,139992,139785],{"class":43},[33,139994,17810],{"class":47},[33,139996,139997,139999,140001,140003],{"class":35,"line":1753},[33,139998,139758],{"class":72},[33,140000,996],{"class":47},[33,140002,139796],{"class":60},[33,140004,3567],{"class":47},[33,140006,140007,140009,140011,140013],{"class":35,"line":1763},[33,140008,73118],{"class":72},[33,140010,996],{"class":47},[33,140012,64288],{"class":72},[33,140014,3567],{"class":47},[33,140016,140017],{"class":35,"line":1775},[33,140018,1010],{"class":47},[19,140020,140021],{},"div {\nmargin: 0 auto;\n}",[23,140023,140026],{"className":140024,"code":140025,"language":7436},[7434],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[30,140027,140025],{"__ignoreMap":28},[19,140029,140030],{},"如果想让多个元素都发生变化",[19,140032,140033],{},"不能如下操作：",[19,140035,140036],{},"transition: width 2s ease 0.5s;",[19,140038,140039],{},"transition: height 2s ease 0.5s;不对！！！",[19,140041,140042],{},"上方会样式冲突，导致不显示任何过渡效果",[19,140044,140045],{},"使用如下：加逗号隔开",[19,140047,140048],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,140050,140051],{},"transition all 2s ease;",[631,140053,140055],{"id":140054},"_1426-过渡练习","14.2.6 过渡练习",[328,140057,140058],{},[331,140059,140060],{},"进度条",[3736,140062],{"style":128606,"src":140063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[23,140065,140067],{"className":128750,"code":140066,"language":128752,"meta":28,"style":28},"div {\n  transition: all 0.3s ease;\n}\n",[30,140068,140069,140075,140093],{"__ignoreMap":28},[33,140070,140071,140073],{"class":35,"line":36},[33,140072,53832],{"class":53522},[33,140074,17810],{"class":47},[33,140076,140077,140080,140082,140084,140087,140089,140091],{"class":35,"line":51},[33,140078,140079],{"class":72},"  transition",[33,140081,996],{"class":47},[33,140083,30358],{"class":72},[33,140085,140086],{"class":72}," 0.3",[33,140088,3109],{"class":39},[33,140090,80891],{"class":72},[33,140092,3567],{"class":47},[33,140094,140095],{"class":35,"line":64},[33,140096,1010],{"class":47},[328,140098,140099],{"start":51},[331,140100,140101],{},"小米logo",[19,140103,140104],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[23,140106,140108],{"className":128750,"code":140107,"language":128752,"meta":28,"style":28},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[30,140109,140110,140115,140121,140137,140142],{"__ignoreMap":28},[33,140111,140112],{"class":35,"line":36},[33,140113,140114],{"class":2487},"\u002F* CSS3 过渡 *\u002F\n",[33,140116,140117,140119],{"class":35,"line":51},[33,140118,53832],{"class":53522},[33,140120,17810],{"class":47},[33,140122,140123,140125,140127,140129,140131,140133,140135],{"class":35,"line":64},[33,140124,140079],{"class":72},[33,140126,996],{"class":47},[33,140128,30358],{"class":72},[33,140130,140086],{"class":72},[33,140132,3109],{"class":39},[33,140134,80891],{"class":72},[33,140136,3567],{"class":47},[33,140138,140139],{"class":35,"line":76},[33,140140,140141],{"class":2487},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[33,140143,140144],{"class":35,"line":87},[33,140145,1010],{"class":47},[19,140147,140148],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2331,140150,140151],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":140153},[140154,140159],{"id":138484,"depth":51,"text":138485,"children":140155},[140156,140157,140158],{"id":138488,"depth":64,"text":138489},{"id":138565,"depth":64,"text":138566},{"id":138896,"depth":64,"text":138897},{"id":139187,"depth":51,"text":139188,"children":140160},[140161,140162],{"id":139191,"depth":64,"text":139192},{"id":140054,"depth":64,"text":140055},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138476,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":140169,"title":140170,"body":140171,"description":2359,"extension":2360,"meta":141915,"navigation":99,"path":141916,"seo":141917,"stem":141918,"__hash__":141919},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":140172,"toc":141896},[140173,140176,140180,140183,140189,140195,140199,140201,140204,140207,140210,140213,140216,140219,140222,140226,140230,140233,140236,140239,140243,140246,140249,140254,140257,140260,140263,140267,140270,140279,140282,140285,140289,140292,140295,140300,140307,140321,140329,140336,140341,140344,140347,140350,140357,140361,140367,140373,140376,140379,140384,140390,140392,140400,140405,140408,140414,140416,140421,140426,140429,140431,140436,140439,140444,140449,140483,140487,140491,140494,140498,140501,140587,140590,140627,140630,140666,140670,140675,140688,140742,140744,140772,140774,140802,140808,140822,140824,140868,140870,140914,140917,140924,140935,140937,140964,140966,140992,140999,141015,141017,141111,141113,141207,141214,141217,141222,141228,141302,141305,141307,141343,141345,141381,141384,141391,141410,141413,141416,141418,141443,141445,141469,141472,141475,141505,141509,141512,141575,141577,141643,141645,141709,141712,141744,141746,141772,141774,141800,141803,141834,141836,141862,141864,141890,141893],[10,140174,140170],{"id":140175},"_15-品优购项目上篇-搭建与公共模块",[14,140177,140179],{"id":140178},"_151-项目规划","15.1 项目规划",[3736,140181],{"style":128606,"src":140182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,140184,140185,140188],{},[2575,140186,140187],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,140190,140191,140194],{},[2575,140192,140193],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,140196,140198],{"id":140197},"_152-项目介绍","15.2 项目介绍",[19,140200,140187],{},[3736,140202],{"style":128606,"src":140203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,140205,140206],{},"主页：",[3736,140208],{"style":128606,"src":140209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,140211,140212],{},"列表页：",[3736,140214],{"style":128606,"src":140215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,140217,140218],{},"注册页：",[3736,140220],{"style":128606,"src":140221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,140223,140225],{"id":140224},"_153-项目搭建工作","15.3 项目搭建工作",[631,140227,140229],{"id":140228},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3736,140231],{"style":128606,"src":140232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,140234,140235],{},"经常更换的图片要放到upload文件夹中",[19,140237,140238],{},"不经常换的放到images文件夹中",[631,140240,140242],{"id":140241},"_1532-创建文件如下","15.3.2 创建文件如下",[3736,140244],{"style":128606,"src":140245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3736,140247],{"style":128606,"src":140248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,140250,140251],{},[2575,140252,140253],{},"初始化样式：",[19,140255,140256],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,140258,140259],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,140261,140262],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[631,140264,140266],{"id":140265},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,140268,140269],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,140271,140272,140273,140278],{},"这里最典型的应用就是 ",[2575,140274,140275],{},[30,140276,140277],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3736,140280],{"style":128606,"src":140281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,140283,140284],{},"通过link方法来引入",[631,140286,140288],{"id":140287},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3736,140290],{"style":128606,"src":140291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,140293,140294],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[328,140296,140297],{},[331,140298,140299],{},"制作favicon图标",[19,140301,140302,140303,140306],{},"①把品优购图标切成 ",[30,140304,140305],{},"png"," 图片",[19,140308,140309,140310,140312,140313,140316,140317],{},"②把 ",[30,140311,140305],{}," 图片转换为 ",[30,140314,140315],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2663,140318,140319],{"href":140319,"rel":140320},"http:\u002F\u002Fwww.bitbug.net\u002F",[26103],[328,140322,140323,140326],{"start":51},[331,140324,140325],{},"favicon图标放到网站根目录下",[331,140327,140328],{},"HTML页面引入favicon",[19,140330,140331,140332,140335],{},"在html 页面里面的 ",[30,140333,140334],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,140337,140338],{},[30,140339,140340],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,140342,140343],{},"复制这行代码或者在生成这个的网站进行复制",[3736,140345],{"style":128606,"src":140346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,140348,140349],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,140351,140352,140353],{},"例如:",[2663,140354,140355],{"href":140355,"rel":140356},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[26103],[631,140358,140360],{"id":140359},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,140362,140363,140366],{},[2575,140364,140365],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,140368,140369,140372],{},[2575,140370,140371],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,140374,140375],{},"页面必须有三个标签用来符合 SEO 优化",[3736,140377],{"style":128606,"src":140378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[328,140380,140381],{},[331,140382,140383],{},"title网站标题",[19,140385,140386,140389],{},[2575,140387,140388],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,140391,71007],{},[3413,140393,140394,140397],{},[331,140395,140396],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[331,140398,140399],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[328,140401,140402],{"start":51},[331,140403,140404],{},"description网站描述",[19,140406,140407],{},"简要说明我们网站主要是做什么的",[19,140409,140410,140413],{},[2575,140411,140412],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,140415,71007],{},[19,140417,140418],{},[30,140419,140420],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[328,140422,140423],{"start":64},[331,140424,140425],{},"keywords关键词",[19,140427,140428],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140430,71007],{},[19,140432,140433],{},[30,140434,140435],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140437,140438],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140440,140441],{},[2575,140442,140443],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[328,140445,140446],{"start":76},[331,140447,140448],{},"代码总结",[23,140450,140451],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,140452,140453,140457,140471,140475],{"__ignoreMap":28},[33,140454,140455],{"class":35,"line":36},[33,140456,132861],{"class":2487},[33,140458,140459,140461,140463,140465,140467,140469],{"class":35,"line":51},[33,140460,2226],{"class":47},[33,140462,53832],{"class":53522},[33,140464,55705],{"class":43},[33,140466,57],{"class":47},[33,140468,132874],{"class":60},[33,140470,53529],{"class":47},[33,140472,140473],{"class":35,"line":64},[33,140474,132881],{"class":47},[33,140476,140477,140479,140481],{"class":35,"line":76},[33,140478,54006],{"class":47},[33,140480,53832],{"class":53522},[33,140482,53529],{"class":47},[14,140484,140486],{"id":140485},"_154-项目公共部分制作","15.4 项目公共部分制作",[631,140488,140490],{"id":140489},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3736,140492],{"style":128606,"src":140493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[631,140495,140497],{"id":140496},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140499,140500],{},"布局思路：",[3413,140502,140503,140506,140509,140531,140564],{},[331,140504,140505],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[331,140507,140508],{},"里面包含版心的盒子",[331,140510,140511,140512],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3413,140513,140514,140522,140528],{},[331,140515,140516,140517,23738,140519,140521],{},"1 号盒子 里面包含一个",[30,140518,3413],{},[30,140520,3413],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[331,140523,140524,140525,140527],{},"里面的内容是水平排列，所以需要给",[30,140526,331],{},"设置浮动",[331,140529,140530],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[331,140532,140533,140534],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3413,140535,140536,140550,140555],{},[331,140537,140538,140539,23738,140541,140543,140544,140546,140547,140549],{},"2 号盒子 里面包含一个",[30,140540,3413],{},[30,140542,3413],{},"包裹",[30,140545,331],{},"，中间的",[30,140548,3329],{},"可以用样式去设置，也可以用字符 |",[331,140551,140552,140553,140527],{},"里面内容水平排列，给",[30,140554,331],{},[331,140556,140557,140558,140560,140561,140563],{},"找到里面所有偶数的 ",[30,140559,331],{}," 设置样式（偶数的 ",[30,140562,331],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[331,140565,140566,140567],{},"需要用到字体图标",[3413,140568,140569,140575,140578,140581,140584],{},[331,140570,140571,140572],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[30,140573,140574],{},"arrow-icon",[331,140576,140577],{},"先要引入字体图片的资源",[331,140579,140580],{},"在样式里面利用 font-face 来进行声明",[331,140582,140583],{},"在伪元素的 content属性设置 图标的编码",[331,140585,140586],{},"给伪元素设置font-family属性",[19,140588,140589],{},"结构实例代码：",[23,140591,140593],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},"div::before {\n  content: \"\";\n  display: block;\n}\n",[30,140594,140595,140603,140613,140623],{"__ignoreMap":28},[33,140596,140597,140599,140601],{"class":35,"line":36},[33,140598,53832],{"class":53522},[33,140600,139751],{"class":43},[33,140602,17810],{"class":47},[33,140604,140605,140607,140609,140611],{"class":35,"line":51},[33,140606,139758],{"class":72},[33,140608,996],{"class":47},[33,140610,9898],{"class":60},[33,140612,3567],{"class":47},[33,140614,140615,140617,140619,140621],{"class":35,"line":64},[33,140616,130366],{"class":72},[33,140618,996],{"class":47},[33,140620,63087],{"class":72},[33,140622,3567],{"class":47},[33,140624,140625],{"class":35,"line":76},[33,140626,1010],{"class":47},[19,140628,140629],{},"样式实例代码：",[23,140631,140632],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},[30,140633,140634,140642,140652,140662],{"__ignoreMap":28},[33,140635,140636,140638,140640],{"class":35,"line":36},[33,140637,53832],{"class":53522},[33,140639,139751],{"class":43},[33,140641,17810],{"class":47},[33,140643,140644,140646,140648,140650],{"class":35,"line":51},[33,140645,139758],{"class":72},[33,140647,996],{"class":47},[33,140649,9898],{"class":60},[33,140651,3567],{"class":47},[33,140653,140654,140656,140658,140660],{"class":35,"line":64},[33,140655,130366],{"class":72},[33,140657,996],{"class":47},[33,140659,63087],{"class":72},[33,140661,3567],{"class":47},[33,140663,140664],{"class":35,"line":76},[33,140665,1010],{"class":47},[631,140667,140669],{"id":140668},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3413,140671,140672],{},[331,140673,140674],{},"header 盒子必须要有高度",[19,140676,140677,140678,140680,140681],{},"1 号盒子是 ",[30,140679,133762],{}," 标志定位，在正常开发过程中， ",[2575,140682,140683,140684,140687],{},"logo的布局其实是有讲究的，需要进行 ",[30,140685,140686],{},"logoSEO","的优化 （★★★）",[3413,140689,140690,140698,140706,140733],{},[331,140691,140692,140694,140695,140697],{},[30,140693,133762],{}," 里面首先放一个 ",[30,140696,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[331,140699,140700,140702,140703,140705],{},[30,140701,10],{}," 里面再放一个链接，可以返回首页的，把 ",[30,140704,133762],{}," 的背景图片给链接即可",[331,140707,140708,140709],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3413,140710,140711,140726],{},[331,140712,140713,140714,140717,140718,140721,140722,140725],{},"方法1：",[30,140715,140716],{},"text-indent"," 移到盒子外面（",[30,140719,140720],{},"text-indent: -9999px",") ，然后 ",[30,140723,140724],{},"overflow:hidden"," ，淘宝的做法",[331,140727,140728,140729,140732],{},"方法2：直接给 ",[30,140730,140731],{},"font-size: 0;"," 就看不到文字了，京东的做法",[331,140734,140735,140736,140738,140739,140741],{},"最后给链接一个 ",[30,140737,53629],{}," 属性，这样鼠标放到 ",[30,140740,133762],{}," 上就可以看到提示文字了",[19,140743,140589],{},[23,140745,140746],{"className":129497,"code":133983,"language":129499,"meta":28,"style":28},[30,140747,140748],{"__ignoreMap":28},[33,140749,140750,140752,140754,140756,140758,140760,140762,140764,140766,140768,140770],{"class":35,"line":36},[33,140751,2226],{"class":47},[33,140753,2663],{"class":53522},[33,140755,63275],{"class":43},[33,140757,57],{"class":47},[33,140759,133998],{"class":60},[33,140761,134001],{"class":43},[33,140763,57],{"class":47},[33,140765,134006],{"class":60},[33,140767,134009],{"class":47},[33,140769,2663],{"class":53522},[33,140771,53529],{"class":47},[19,140773,140629],{},[23,140775,140776],{"className":129497,"code":133983,"language":129499,"meta":28,"style":28},[30,140777,140778],{"__ignoreMap":28},[33,140779,140780,140782,140784,140786,140788,140790,140792,140794,140796,140798,140800],{"class":35,"line":36},[33,140781,2226],{"class":47},[33,140783,2663],{"class":53522},[33,140785,63275],{"class":43},[33,140787,57],{"class":47},[33,140789,133998],{"class":60},[33,140791,134001],{"class":43},[33,140793,57],{"class":47},[33,140795,134006],{"class":60},[33,140797,134009],{"class":47},[33,140799,2663],{"class":53522},[33,140801,53529],{"class":47},[19,140803,140804,140805,140807],{},"2 号盒子是 ",[30,140806,133775],{}," 搜索模块定位",[3413,140809,140810,140813,140816,140819],{},[331,140811,140812],{},"search盒子利用定位的方式放在对应的位置",[331,140814,140815],{},"search盒子设置绝对定位，header盒子设置相对定位",[331,140817,140818],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[331,140820,140821],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140823,140589],{},[23,140825,140826],{"className":128750,"code":134070,"language":128752,"meta":28,"style":28},[30,140827,140828,140850,140854,140864],{"__ignoreMap":28},[33,140829,140830,140832,140834,140836,140838,140840,140842,140844,140846,140848],{"class":35,"line":36},[33,140831,53832],{"class":53522},[33,140833,245],{"class":47},[33,140835,19],{"class":53522},[33,140837,245],{"class":47},[33,140839,10],{"class":53522},[33,140841,245],{"class":47},[33,140843,3413],{"class":53522},[33,140845,245],{"class":47},[33,140847,331],{"class":53522},[33,140849,17810],{"class":47},[33,140851,140852],{"class":35,"line":51},[33,140853,134099],{"class":2487},[33,140855,140856,140858,140860,140862],{"class":35,"line":64},[33,140857,130366],{"class":72},[33,140859,996],{"class":47},[33,140861,63087],{"class":72},[33,140863,3567],{"class":47},[33,140865,140866],{"class":35,"line":76},[33,140867,1010],{"class":47},[19,140869,140629],{},[23,140871,140872],{"className":128750,"code":134070,"language":128752,"meta":28,"style":28},[30,140873,140874,140896,140900,140910],{"__ignoreMap":28},[33,140875,140876,140878,140880,140882,140884,140886,140888,140890,140892,140894],{"class":35,"line":36},[33,140877,53832],{"class":53522},[33,140879,245],{"class":47},[33,140881,19],{"class":53522},[33,140883,245],{"class":47},[33,140885,10],{"class":53522},[33,140887,245],{"class":47},[33,140889,3413],{"class":53522},[33,140891,245],{"class":47},[33,140893,331],{"class":53522},[33,140895,17810],{"class":47},[33,140897,140898],{"class":35,"line":51},[33,140899,134099],{"class":2487},[33,140901,140902,140904,140906,140908],{"class":35,"line":64},[33,140903,130366],{"class":72},[33,140905,996],{"class":47},[33,140907,63087],{"class":72},[33,140909,3567],{"class":47},[33,140911,140912],{"class":35,"line":76},[33,140913,1010],{"class":47},[19,140915,140916],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140918,140919,140920,140923],{},"3 号盒子是 ",[30,140921,140922],{},"hotwords"," 热词模块定位",[3413,140925,140926,140929,140932],{},[331,140927,140928],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[331,140930,140931],{},"给里面所有的a标签设置 左右10px的外边距",[331,140933,140934],{},"给第一个a标签设置文字变红色（#c81623）",[19,140936,140589],{},[23,140938,140940],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},"div {\n  margin: 0 auto;\n}\n",[30,140941,140942,140948,140960],{"__ignoreMap":28},[33,140943,140944,140946],{"class":35,"line":36},[33,140945,53832],{"class":53522},[33,140947,17810],{"class":47},[33,140949,140950,140952,140954,140956,140958],{"class":35,"line":51},[33,140951,72683],{"class":72},[33,140953,996],{"class":47},[33,140955,2617],{"class":72},[33,140957,53777],{"class":72},[33,140959,3567],{"class":47},[33,140961,140962],{"class":35,"line":64},[33,140963,1010],{"class":47},[19,140965,140629],{},[23,140967,140968],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,140969,140970,140976,140988],{"__ignoreMap":28},[33,140971,140972,140974],{"class":35,"line":36},[33,140973,53832],{"class":53522},[33,140975,17810],{"class":47},[33,140977,140978,140980,140982,140984,140986],{"class":35,"line":51},[33,140979,72683],{"class":72},[33,140981,996],{"class":47},[33,140983,2617],{"class":72},[33,140985,53777],{"class":72},[33,140987,3567],{"class":47},[33,140989,140990],{"class":35,"line":64},[33,140991,1010],{"class":47},[19,140993,140994,140995,140998],{},"4 号盒子是 ",[30,140996,140997],{},"shopcar"," 购物车模块",[3413,141000,141001,141006,141009,141012],{},[331,141002,125533,141003,141005],{},[30,141004,140997],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[331,141007,141008],{},"count 统计部分用绝对定位做",[331,141010,141011],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[331,141013,141014],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,141016,140589],{},[23,141018,141019],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},[30,141020,141021,141025,141039,141043,141057,141061,141075,141079,141093,141097],{"__ignoreMap":28},[33,141022,141023],{"class":35,"line":36},[33,141024,134189],{"class":2487},[33,141026,141027,141029,141031,141033,141035,141037],{"class":35,"line":51},[33,141028,134194],{"class":43},[33,141030,82018],{"class":47},[33,141032,131110],{"class":72},[33,141034,996],{"class":47},[33,141036,134203],{"class":72},[33,141038,131680],{"class":47},[33,141040,141041],{"class":35,"line":64},[33,141042,134210],{"class":2487},[33,141044,141045,141047,141049,141051,141053,141055],{"class":35,"line":76},[33,141046,134215],{"class":43},[33,141048,82018],{"class":47},[33,141050,131110],{"class":72},[33,141052,996],{"class":47},[33,141054,56983],{"class":72},[33,141056,131680],{"class":47},[33,141058,141059],{"class":35,"line":87},[33,141060,134230],{"class":2487},[33,141062,141063,141065,141067,141069,141071,141073],{"class":35,"line":96},[33,141064,134235],{"class":43},[33,141066,82018],{"class":47},[33,141068,131110],{"class":72},[33,141070,996],{"class":47},[33,141072,57050],{"class":72},[33,141074,131680],{"class":47},[33,141076,141077],{"class":35,"line":103},[33,141078,134250],{"class":2487},[33,141080,141081,141083,141085,141087,141089,141091],{"class":35,"line":108},[33,141082,134255],{"class":43},[33,141084,82018],{"class":47},[33,141086,131110],{"class":72},[33,141088,996],{"class":47},[33,141090,88442],{"class":72},[33,141092,131680],{"class":47},[33,141094,141095],{"class":35,"line":119},[33,141096,134270],{"class":2487},[33,141098,141099,141101,141103,141105,141107,141109],{"class":35,"line":128},[33,141100,134275],{"class":43},[33,141102,82018],{"class":47},[33,141104,131110],{"class":72},[33,141106,996],{"class":47},[33,141108,134284],{"class":72},[33,141110,131680],{"class":47},[19,141112,140629],{},[23,141114,141115],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},[30,141116,141117,141121,141135,141139,141153,141157,141171,141175,141189,141193],{"__ignoreMap":28},[33,141118,141119],{"class":35,"line":36},[33,141120,134189],{"class":2487},[33,141122,141123,141125,141127,141129,141131,141133],{"class":35,"line":51},[33,141124,134194],{"class":43},[33,141126,82018],{"class":47},[33,141128,131110],{"class":72},[33,141130,996],{"class":47},[33,141132,134203],{"class":72},[33,141134,131680],{"class":47},[33,141136,141137],{"class":35,"line":64},[33,141138,134210],{"class":2487},[33,141140,141141,141143,141145,141147,141149,141151],{"class":35,"line":76},[33,141142,134215],{"class":43},[33,141144,82018],{"class":47},[33,141146,131110],{"class":72},[33,141148,996],{"class":47},[33,141150,56983],{"class":72},[33,141152,131680],{"class":47},[33,141154,141155],{"class":35,"line":87},[33,141156,134230],{"class":2487},[33,141158,141159,141161,141163,141165,141167,141169],{"class":35,"line":96},[33,141160,134235],{"class":43},[33,141162,82018],{"class":47},[33,141164,131110],{"class":72},[33,141166,996],{"class":47},[33,141168,57050],{"class":72},[33,141170,131680],{"class":47},[33,141172,141173],{"class":35,"line":103},[33,141174,134250],{"class":2487},[33,141176,141177,141179,141181,141183,141185,141187],{"class":35,"line":108},[33,141178,134255],{"class":43},[33,141180,82018],{"class":47},[33,141182,131110],{"class":72},[33,141184,996],{"class":47},[33,141186,88442],{"class":72},[33,141188,131680],{"class":47},[33,141190,141191],{"class":35,"line":119},[33,141192,134270],{"class":2487},[33,141194,141195,141197,141199,141201,141203,141205],{"class":35,"line":128},[33,141196,134275],{"class":43},[33,141198,82018],{"class":47},[33,141200,131110],{"class":72},[33,141202,996],{"class":47},[33,141204,134284],{"class":72},[33,141206,131680],{"class":47},[631,141208,141210,141211,141213],{"id":141209},"_1544-nav导航模块制作","15.4.4 ",[30,141212,55932],{},"导航模块制作",[3736,141215],{"style":128606,"src":141216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,141218,141219,141221],{},[30,141220,55932],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,141223,141224,141225],{},"1 号盒子左侧浮动，",[30,141226,141227],{},"dropdown",[3413,141229,141230,141240,141248,141254,141262,141272,141280,141291],{},[331,141231,141232,141233,1958,141236,141239],{},"1号盒子有讲究，根据相关性 里面包含 ",[30,141234,141235],{},".dt",[30,141237,141238],{},".dd"," 两个盒子",[331,141241,141242,141244,141245,141247],{},[30,141243,141235],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[30,141246,141238],{}," 挤到下面去了",[331,141249,141250,141251,141253],{},"给 ",[30,141252,141238],{}," 盒子设置宽度 和 高度，以及背景颜色",[331,141255,141250,141256,141258,141259,122437],{},[30,141257,141238],{}," 盒子里面定义 无序列表 （",[30,141260,141261],{},"ul > li > a",[331,141263,141264,141265,141267,141268,141271],{},"每个 ",[30,141266,331],{}," 都有一个高度（",[30,141269,141270],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[331,141273,141250,141274,141276,141277,122437],{},[30,141275,331],{}," 里面的a设置文字大小（",[30,141278,141279],{},"14px",[331,141281,141250,141282,141284,141285,141287,141288,141290],{},[30,141283,331],{}," 设置 ",[30,141286,129911],{},"，当鼠标移入的时候，让",[30,141289,331],{},"的背景变成白色，让里面的文字变成红色",[331,141292,141293,141295,141296,141298,141299,141301],{},[30,141294,331],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[30,141297,331],{},"的右侧，那么给",[30,141300,331],{},"设置相对定位",[19,141303,141304],{},"一定要注意相关性",[19,141306,140589],{},[23,141308,141309],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},[30,141310,141311,141319,141329,141339],{"__ignoreMap":28},[33,141312,141313,141315,141317],{"class":35,"line":36},[33,141314,53832],{"class":53522},[33,141316,139751],{"class":43},[33,141318,17810],{"class":47},[33,141320,141321,141323,141325,141327],{"class":35,"line":51},[33,141322,139758],{"class":72},[33,141324,996],{"class":47},[33,141326,9898],{"class":60},[33,141328,3567],{"class":47},[33,141330,141331,141333,141335,141337],{"class":35,"line":64},[33,141332,130366],{"class":72},[33,141334,996],{"class":47},[33,141336,63087],{"class":72},[33,141338,3567],{"class":47},[33,141340,141341],{"class":35,"line":76},[33,141342,1010],{"class":47},[19,141344,140629],{},[23,141346,141347],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},[30,141348,141349,141357,141367,141377],{"__ignoreMap":28},[33,141350,141351,141353,141355],{"class":35,"line":36},[33,141352,53832],{"class":53522},[33,141354,139751],{"class":43},[33,141356,17810],{"class":47},[33,141358,141359,141361,141363,141365],{"class":35,"line":51},[33,141360,139758],{"class":72},[33,141362,996],{"class":47},[33,141364,9898],{"class":60},[33,141366,3567],{"class":47},[33,141368,141369,141371,141373,141375],{"class":35,"line":64},[33,141370,130366],{"class":72},[33,141372,996],{"class":47},[33,141374,63087],{"class":72},[33,141376,3567],{"class":47},[33,141378,141379],{"class":35,"line":76},[33,141380,1010],{"class":47},[19,141382,141383],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,141385,141386,141387,141390],{},"2 号盒子左侧浮动，",[30,141388,141389],{},"navitems"," 导航栏组",[3413,141392,141393,141398,141407],{},[331,141394,141395,141396],{},"里面结构是 ",[30,141397,141261],{},[331,141399,141400,141401,141403,141404,141406],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[30,141402,2663],{},"左右的",[30,141405,33114],{},"把两侧撑开",[331,141408,141409],{},"让文字垂直居中（行高等于高度）",[3736,141411],{"style":128606,"src":141412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,141414,141415],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,141417,140589],{},[23,141419,141421],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},".box {\n  float: left;\n}\n",[30,141422,141423,141429,141439],{"__ignoreMap":28},[33,141424,141425,141427],{"class":35,"line":36},[33,141426,132598],{"class":43},[33,141428,17810],{"class":47},[33,141430,141431,141433,141435,141437],{"class":35,"line":51},[33,141432,133230],{"class":72},[33,141434,996],{"class":47},[33,141436,25974],{"class":72},[33,141438,3567],{"class":47},[33,141440,141441],{"class":35,"line":64},[33,141442,1010],{"class":47},[19,141444,140629],{},[23,141446,141447],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,141448,141449,141455,141465],{"__ignoreMap":28},[33,141450,141451,141453],{"class":35,"line":36},[33,141452,132598],{"class":43},[33,141454,17810],{"class":47},[33,141456,141457,141459,141461,141463],{"class":35,"line":51},[33,141458,133230],{"class":72},[33,141460,996],{"class":47},[33,141462,25974],{"class":72},[33,141464,3567],{"class":47},[33,141466,141467],{"class":35,"line":64},[33,141468,1010],{"class":47},[19,141470,141471],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3736,141473],{"style":128606,"src":141474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[23,141476,141477],{"className":128750,"code":132907,"language":128752,"meta":28,"style":28},[30,141478,141479,141485,141501],{"__ignoreMap":28},[33,141480,141481,141483],{"class":35,"line":36},[33,141482,53832],{"class":53522},[33,141484,17810],{"class":47},[33,141486,141487,141489,141491,141493,141495,141497,141499],{"class":35,"line":51},[33,141488,73109],{"class":72},[33,141490,996],{"class":47},[33,141492,720],{"class":72},[33,141494,53713],{"class":39},[33,141496,53742],{"class":72},[33,141498,132142],{"class":72},[33,141500,3567],{"class":47},[33,141502,141503],{"class":35,"line":64},[33,141504,1010],{"class":47},[631,141506,141508],{"id":141507},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3736,141510],{"style":128606,"src":141511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3413,141513,141514,141519,141524],{},[331,141515,141516,141518],{},[30,141517,133953],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[331,141520,141521,141523],{},[30,141522,133953],{}," 里面有一个大的版心",[331,141525,141526,141527,141530,141531],{},"版心里面包含 1 号盒子，",[30,141528,141529],{},"mod_service"," 是服务模块，mod 是模块的意思",[3413,141532,141533,141538,141551,141567,141572],{},[331,141534,141250,141535,141537],{},[30,141536,141529],{}," 设置高度（80px）和下边框",[331,141539,141540,141541,141544,141545,141547,141548,141550],{},"在里面定义 ",[30,141542,141543],{},"ul > li"," ,每个",[30,141546,331],{}," 宽度是300px 高度是 50px，给每个",[30,141549,331],{},"设置35px的左内边距",[331,141552,141553,141554,141556,141557,141559,141560,141562,141563,20648,141565,122437],{},"在每个",[30,141555,331],{},"里面，放一个 ",[30,141558,25148],{},"（里面放图标），一个",[30,141561,53832],{},"（里面放",[30,141564,53832],{},[30,141566,19],{},[331,141568,141250,141569,141571],{},[30,141570,25148],{},"设置浮动，让h5与这个div左右排列",[331,141573,141574],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141576,140589],{},[23,141578,141580],{"className":128750,"code":141579,"language":128752,"meta":28,"style":28},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[30,141581,141582,141588,141600,141612,141639],{"__ignoreMap":28},[33,141583,141584,141586],{"class":35,"line":36},[33,141585,136507],{"class":43},[33,141587,17810],{"class":47},[33,141589,141590,141592,141594,141596,141598],{"class":35,"line":51},[33,141591,72781],{"class":72},[33,141593,996],{"class":47},[33,141595,1284],{"class":72},[33,141597,53713],{"class":39},[33,141599,3567],{"class":47},[33,141601,141602,141604,141606,141608,141610],{"class":35,"line":64},[33,141603,73001],{"class":72},[33,141605,996],{"class":47},[33,141607,1284],{"class":72},[33,141609,53713],{"class":39},[33,141611,3567],{"class":47},[33,141613,141614,141616,141618,141620,141622,141624,141626,141628,141631,141633,141635,141637],{"class":35,"line":76},[33,141615,72824],{"class":72},[33,141617,996],{"class":47},[33,141619,63944],{"class":72},[33,141621,133],{"class":47},[33,141623,136546],{"class":289},[33,141625,15954],{"class":47},[33,141627,63954],{"class":72},[33,141629,141630],{"class":72}," -10",[33,141632,53713],{"class":39},[33,141634,136565],{"class":72},[33,141636,53713],{"class":39},[33,141638,3567],{"class":47},[33,141640,141641],{"class":35,"line":87},[33,141642,1010],{"class":47},[19,141644,140629],{},[23,141646,141647],{"className":128750,"code":141579,"language":128752,"meta":28,"style":28},[30,141648,141649,141655,141667,141679,141705],{"__ignoreMap":28},[33,141650,141651,141653],{"class":35,"line":36},[33,141652,136507],{"class":43},[33,141654,17810],{"class":47},[33,141656,141657,141659,141661,141663,141665],{"class":35,"line":51},[33,141658,72781],{"class":72},[33,141660,996],{"class":47},[33,141662,1284],{"class":72},[33,141664,53713],{"class":39},[33,141666,3567],{"class":47},[33,141668,141669,141671,141673,141675,141677],{"class":35,"line":64},[33,141670,73001],{"class":72},[33,141672,996],{"class":47},[33,141674,1284],{"class":72},[33,141676,53713],{"class":39},[33,141678,3567],{"class":47},[33,141680,141681,141683,141685,141687,141689,141691,141693,141695,141697,141699,141701,141703],{"class":35,"line":76},[33,141682,72824],{"class":72},[33,141684,996],{"class":47},[33,141686,63944],{"class":72},[33,141688,133],{"class":47},[33,141690,136546],{"class":289},[33,141692,15954],{"class":47},[33,141694,63954],{"class":72},[33,141696,141630],{"class":72},[33,141698,53713],{"class":39},[33,141700,136565],{"class":72},[33,141702,53713],{"class":39},[33,141704,3567],{"class":47},[33,141706,141707],{"class":35,"line":87},[33,141708,1010],{"class":47},[19,141710,141711],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3413,141713,141714,141717,141723,141729,141741],{},[331,141715,141716],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[331,141718,141719,141720,122437],{},"里面的布局利用 自定义列表来实现（",[30,141721,141722],{},"dl > dt + dd",[331,141724,141250,141725,141728],{},[30,141726,141727],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[331,141730,141250,141731,141734,141735,20648,141737,141740],{},[30,141732,141733],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[30,141736,141733],{},[30,141738,141739],{},"dd","之间有些距离",[331,141742,141743],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141745,140589],{},[23,141747,141748],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,141749,141750,141756,141768],{"__ignoreMap":28},[33,141751,141752,141754],{"class":35,"line":36},[33,141753,53832],{"class":53522},[33,141755,17810],{"class":47},[33,141757,141758,141760,141762,141764,141766],{"class":35,"line":51},[33,141759,72683],{"class":72},[33,141761,996],{"class":47},[33,141763,2617],{"class":72},[33,141765,53777],{"class":72},[33,141767,3567],{"class":47},[33,141769,141770],{"class":35,"line":64},[33,141771,1010],{"class":47},[19,141773,140629],{},[23,141775,141776],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,141777,141778,141784,141796],{"__ignoreMap":28},[33,141779,141780,141782],{"class":35,"line":36},[33,141781,53832],{"class":53522},[33,141783,17810],{"class":47},[33,141785,141786,141788,141790,141792,141794],{"class":35,"line":51},[33,141787,72683],{"class":72},[33,141789,996],{"class":47},[33,141791,2617],{"class":72},[33,141793,53777],{"class":72},[33,141795,3567],{"class":47},[33,141797,141798],{"class":35,"line":64},[33,141799,1010],{"class":47},[19,141801,141802],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3413,141804,141805,141814,141817,141828],{},[331,141806,141807,141808,141810,141811,141813],{},"分为上下两块，上面是 ",[30,141809,133970],{}," 友情链接，下面是 ",[30,141812,133963],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[331,141815,141816],{},"把内容分别复制到相应模块中",[331,141818,141250,141819,141821,141822,141824,141825,141827],{},[30,141820,133970],{}," 设置 15px 的下外边距，给",[30,141823,133970],{}," 里面 的 ",[30,141826,2663],{}," 标签设置 左右 3px 的外边距",[331,141829,141830,141831,141833],{},"给",[30,141832,133963],{}," 设置 20px 的行高",[19,141835,140589],{},[23,141837,141838],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,141839,141840,141846,141858],{"__ignoreMap":28},[33,141841,141842,141844],{"class":35,"line":36},[33,141843,53832],{"class":53522},[33,141845,17810],{"class":47},[33,141847,141848,141850,141852,141854,141856],{"class":35,"line":51},[33,141849,72683],{"class":72},[33,141851,996],{"class":47},[33,141853,2617],{"class":72},[33,141855,53777],{"class":72},[33,141857,3567],{"class":47},[33,141859,141860],{"class":35,"line":64},[33,141861,1010],{"class":47},[19,141863,140629],{},[23,141865,141866],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,141867,141868,141874,141886],{"__ignoreMap":28},[33,141869,141870,141872],{"class":35,"line":36},[33,141871,53832],{"class":53522},[33,141873,17810],{"class":47},[33,141875,141876,141878,141880,141882,141884],{"class":35,"line":51},[33,141877,72683],{"class":72},[33,141879,996],{"class":47},[33,141881,2617],{"class":72},[33,141883,53777],{"class":72},[33,141885,3567],{"class":47},[33,141887,141888],{"class":35,"line":64},[33,141889,1010],{"class":47},[19,141891,141892],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2331,141894,141895],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":141897},[141898,141899,141900,141907],{"id":140178,"depth":51,"text":140179},{"id":140197,"depth":51,"text":140198},{"id":140224,"depth":51,"text":140225,"children":141901},[141902,141903,141904,141905,141906],{"id":140228,"depth":64,"text":140229},{"id":140241,"depth":64,"text":140242},{"id":140265,"depth":64,"text":140266},{"id":140287,"depth":64,"text":140288},{"id":140359,"depth":64,"text":140360},{"id":140485,"depth":51,"text":140486,"children":141908},[141909,141910,141911,141912,141914],{"id":140489,"depth":64,"text":140490},{"id":140496,"depth":64,"text":140497},{"id":140668,"depth":64,"text":140669},{"id":141209,"depth":64,"text":141913},"15.4.4 nav导航模块制作",{"id":141507,"depth":64,"text":141508},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":140170,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141921,"title":141922,"body":141923,"description":2359,"extension":2360,"meta":144325,"navigation":99,"path":144326,"seo":144327,"stem":144328,"__hash__":144329},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141924,"toc":144302},[141925,141928,141932,141936,141948,141951,141954,141957,141968,141970,141994,141996,142020,142025,142028,142030,142066,142068,142104,142107,142112,142115,142118,142121,142151,142158,142161,142171,142173,142207,142210,142244,142250,142267,142269,142305,142307,142343,142348,142373,142375,142401,142403,142427,142434,142437,142501,142503,142545,142547,142587,142594,142599,142601,142631,142633,142663,142667,142670,142677,142689,142691,142717,142719,142743,142746,142748,142772,142778,142788,142790,142820,142822,142852,142859,142900,142902,142938,142940,142976,142980,142983,142986,142989,142995,143000,143003,143026,143029,143053,143056,143080,143085,143088,143091,143094,143097,143100,143174,143176,143206,143208,143238,143241,143244,143276,143280,143284,143298,143307,143310,143315,143317,143411,143413,143507,143530,143532,143556,143558,143582,143589,143592,143602,143604,143628,143633,143641,143643,143673,143678,143718,143720,143746,143748,143774,143778,143781,143786,143789,143793,143801,143808,143816,143818,143848,143850,143880,143888,143891,143894,143896,143926,143928,143958,143961,143966,143968,143992,143994,144018,144021,144106,144108,144132,144134,144158,144162,144164,144188,144190,144224,144228,144242,144245,144250,144253,144258,144261,144291,144299],[10,141926,141922],{"id":141927},"_16-品优购项目下篇-主体与页面开发",[14,141929,141931],{"id":141930},"_161-项目主体模块制作","16.1 项目主体模块制作",[631,141933,141935],{"id":141934},"_1611-首页制作","16.1.1 首页制作",[19,141937,141938,141940,141941,141943,141944,141947],{},[2575,141939,104263],{}," 主体模块是 ",[2575,141942,76270],{}," 里面专有的，注意需要新的样式文件 ",[2575,141945,141946],{},"index.css，"," 就不要写在common.css中了",[3736,141949],{"style":128606,"src":141950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3736,141952],{"style":128606,"src":141953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141955,141956],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3413,141958,141959,141962,141965],{},[331,141960,141961],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[331,141963,141964],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[331,141966,141967],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141969,140589],{},[23,141971,141972],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,141973,141974,141980,141990],{"__ignoreMap":28},[33,141975,141976,141978],{"class":35,"line":36},[33,141977,132598],{"class":43},[33,141979,17810],{"class":47},[33,141981,141982,141984,141986,141988],{"class":35,"line":51},[33,141983,133230],{"class":72},[33,141985,996],{"class":47},[33,141987,25974],{"class":72},[33,141989,3567],{"class":47},[33,141991,141992],{"class":35,"line":64},[33,141993,1010],{"class":47},[19,141995,140629],{},[23,141997,141998],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,141999,142000,142006,142016],{"__ignoreMap":28},[33,142001,142002,142004],{"class":35,"line":36},[33,142003,132598],{"class":43},[33,142005,17810],{"class":47},[33,142007,142008,142010,142012,142014],{"class":35,"line":51},[33,142009,133230],{"class":72},[33,142011,996],{"class":47},[33,142013,25974],{"class":72},[33,142015,3567],{"class":47},[33,142017,142018],{"class":35,"line":64},[33,142019,1010],{"class":47},[328,142021,142022],{},[331,142023,142024],{},"左侧focus模块制作",[3736,142026],{"style":128606,"src":142027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,142029,140589],{},[23,142031,142032],{"className":128750,"code":130073,"language":128752,"meta":28,"style":28},[30,142033,142034,142042,142052,142062],{"__ignoreMap":28},[33,142035,142036,142038,142040],{"class":35,"line":36},[33,142037,56040],{"class":53522},[33,142039,64118],{"class":43},[33,142041,17810],{"class":47},[33,142043,142044,142046,142048,142050],{"class":35,"line":51},[33,142045,130088],{"class":72},[33,142047,996],{"class":47},[33,142049,57108],{"class":72},[33,142051,3567],{"class":47},[33,142053,142054,142056,142058,142060],{"class":35,"line":64},[33,142055,73011],{"class":72},[33,142057,996],{"class":47},[33,142059,56956],{"class":72},[33,142061,3567],{"class":47},[33,142063,142064],{"class":35,"line":76},[33,142065,1010],{"class":47},[19,142067,140629],{},[23,142069,142070],{"className":128750,"code":130073,"language":128752,"meta":28,"style":28},[30,142071,142072,142080,142090,142100],{"__ignoreMap":28},[33,142073,142074,142076,142078],{"class":35,"line":36},[33,142075,56040],{"class":53522},[33,142077,64118],{"class":43},[33,142079,17810],{"class":47},[33,142081,142082,142084,142086,142088],{"class":35,"line":51},[33,142083,130088],{"class":72},[33,142085,996],{"class":47},[33,142087,57108],{"class":72},[33,142089,3567],{"class":47},[33,142091,142092,142094,142096,142098],{"class":35,"line":64},[33,142093,73011],{"class":72},[33,142095,996],{"class":47},[33,142097,56956],{"class":72},[33,142099,3567],{"class":47},[33,142101,142102],{"class":35,"line":76},[33,142103,1010],{"class":47},[19,142105,142106],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[328,142108,142109],{"start":51},[331,142110,142111],{},"右侧newsflash模块制作",[3736,142113],{"style":128606,"src":142114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,142116,142117],{},"右侧的模块 分为上中下三个盒子",[19,142119,142120],{},"结构代码：",[23,142122,142123],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,142124,142125],{"__ignoreMap":28},[33,142126,142127,142129,142131,142133,142135,142137,142139,142141,142143,142145,142147,142149],{"class":35,"line":36},[33,142128,2226],{"class":47},[33,142130,3736],{"class":53522},[33,142132,57458],{"class":43},[33,142134,57],{"class":47},[33,142136,136267],{"class":60},[33,142138,57466],{"class":43},[33,142140,57],{"class":47},[33,142142,136274],{"class":60},[33,142144,136277],{"class":43},[33,142146,57],{"class":47},[33,142148,136282],{"class":60},[33,142150,53529],{"class":47},[19,142152,142153,142154,142157],{},"1 号盒子为 ",[30,142155,142156],{},"news"," 新闻模块 高度为 165px",[3736,142159],{"style":128606,"src":142160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,142162,142163,142164,142167,142168],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[30,142165,142166],{},"news-hd","，下面是 ",[30,142169,142170],{},"news-bd",[19,142172,142120],{},[23,142174,142175],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,142176,142177,142181,142195,142199],{"__ignoreMap":28},[33,142178,142179],{"class":35,"line":36},[33,142180,132861],{"class":2487},[33,142182,142183,142185,142187,142189,142191,142193],{"class":35,"line":51},[33,142184,2226],{"class":47},[33,142186,53832],{"class":53522},[33,142188,55705],{"class":43},[33,142190,57],{"class":47},[33,142192,132874],{"class":60},[33,142194,53529],{"class":47},[33,142196,142197],{"class":35,"line":64},[33,142198,132881],{"class":47},[33,142200,142201,142203,142205],{"class":35,"line":76},[33,142202,54006],{"class":47},[33,142204,53832],{"class":53522},[33,142206,53529],{"class":47},[19,142208,142209],{},"样式代码：",[23,142211,142212],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,142213,142214,142218,142232,142236],{"__ignoreMap":28},[33,142215,142216],{"class":35,"line":36},[33,142217,132861],{"class":2487},[33,142219,142220,142222,142224,142226,142228,142230],{"class":35,"line":51},[33,142221,2226],{"class":47},[33,142223,53832],{"class":53522},[33,142225,55705],{"class":43},[33,142227,57],{"class":47},[33,142229,132874],{"class":60},[33,142231,53529],{"class":47},[33,142233,142234],{"class":35,"line":64},[33,142235,132881],{"class":47},[33,142237,142238,142240,142242],{"class":35,"line":76},[33,142239,54006],{"class":47},[33,142241,53832],{"class":53522},[33,142243,53529],{"class":47},[19,142245,142246,142247,142249],{},"上面是",[30,142248,142166],{},"，设置高度是 33px，设置下边框",[3413,142251,142252,142258],{},[331,142253,142254,142255,142257],{},"里面放一个",[30,142256,25148],{}," 标题",[331,142259,142260,142261,142263,142264,142266],{},"放一个a",[30,142262,104898],{},"，内容是 更多，然后让 ",[30,142265,2663],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,142268,142120],{},[23,142270,142271],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},[30,142272,142273,142281,142291,142301],{"__ignoreMap":28},[33,142274,142275,142277,142279],{"class":35,"line":36},[33,142276,53832],{"class":53522},[33,142278,139751],{"class":43},[33,142280,17810],{"class":47},[33,142282,142283,142285,142287,142289],{"class":35,"line":51},[33,142284,139758],{"class":72},[33,142286,996],{"class":47},[33,142288,9898],{"class":60},[33,142290,3567],{"class":47},[33,142292,142293,142295,142297,142299],{"class":35,"line":64},[33,142294,130366],{"class":72},[33,142296,996],{"class":47},[33,142298,63087],{"class":72},[33,142300,3567],{"class":47},[33,142302,142303],{"class":35,"line":76},[33,142304,1010],{"class":47},[19,142306,142209],{},[23,142308,142309],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},[30,142310,142311,142319,142329,142339],{"__ignoreMap":28},[33,142312,142313,142315,142317],{"class":35,"line":36},[33,142314,53832],{"class":53522},[33,142316,139751],{"class":43},[33,142318,17810],{"class":47},[33,142320,142321,142323,142325,142327],{"class":35,"line":51},[33,142322,139758],{"class":72},[33,142324,996],{"class":47},[33,142326,9898],{"class":60},[33,142328,3567],{"class":47},[33,142330,142331,142333,142335,142337],{"class":35,"line":64},[33,142332,130366],{"class":72},[33,142334,996],{"class":47},[33,142336,63087],{"class":72},[33,142338,3567],{"class":47},[33,142340,142341],{"class":35,"line":76},[33,142342,1010],{"class":47},[19,142344,142345,142346],{},"下面是",[30,142347,142170],{},[3413,142349,142350,142358],{},[331,142351,142352,142353,1958,142355,142357],{},"里面包含 ",[30,142354,3413],{},[30,142356,331],{}," 还有链接",[331,142359,141830,142360,142362,142363,142365,142366,142369,142370],{},[30,142361,331],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[30,142364,133416],{}," 2.设置 ",[30,142367,142368],{},"white-space: nowrap;"," 3. 设置 ",[30,142371,142372],{},"text-overflow: ellipsis;",[19,142374,142120],{},[23,142376,142378],{"className":128750,"code":142377,"language":128752,"meta":28,"style":28},"div {\n  overflow: hidden;\n}\n",[30,142379,142380,142386,142397],{"__ignoreMap":28},[33,142381,142382,142384],{"class":35,"line":36},[33,142383,53832],{"class":53522},[33,142385,17810],{"class":47},[33,142387,142388,142391,142393,142395],{"class":35,"line":51},[33,142389,142390],{"class":72},"  overflow",[33,142392,996],{"class":47},[33,142394,63932],{"class":72},[33,142396,3567],{"class":47},[33,142398,142399],{"class":35,"line":64},[33,142400,1010],{"class":47},[19,142402,142209],{},[23,142404,142405],{"className":128750,"code":142377,"language":128752,"meta":28,"style":28},[30,142406,142407,142413,142423],{"__ignoreMap":28},[33,142408,142409,142411],{"class":35,"line":36},[33,142410,53832],{"class":53522},[33,142412,17810],{"class":47},[33,142414,142415,142417,142419,142421],{"class":35,"line":51},[33,142416,142390],{"class":72},[33,142418,996],{"class":47},[33,142420,63932],{"class":72},[33,142422,3567],{"class":47},[33,142424,142425],{"class":35,"line":64},[33,142426,1010],{"class":47},[19,142428,142429,142430,142433],{},"2 号盒子为 ",[30,142431,142432],{},"lifeservice"," 生活服务模块 高度为 209px",[3736,142435],{"style":128606,"src":142436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3413,142438,142439,142442,142452,142476,142487],{},[331,142440,142441],{},"设置边框（左右下边框）",[331,142443,142444,142445,142448,142449,142451],{},"里面的内容 是 ",[30,142446,142447],{},"ul > 12*li","，给",[30,142450,331],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[331,142453,142454,142455],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3413,142456,142457,142462,142471],{},[331,142458,142459,142461],{},[30,142460,142432],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[331,142463,142464,142465,142467,142468,142470],{},"可以让 ",[30,142466,142432],{}," 里面的 ",[30,142469,3413],{}," 宽度为 252，就可以装的下 4 个 小 li",[331,142472,142473,142475],{},[30,142474,142432],{}," 盒子 overflow 隐藏多余的部分就可以了",[331,142477,118668,142478,142480,142481,142483,142484,142486],{},[30,142479,331],{}," 里面放一个 ",[30,142482,2861],{},"（里面放图标），下面的文本用 ",[30,142485,19],{}," 标签包裹",[331,142488,141250,142489,142491,142492,142494,142495,141284,142497,142500],{},[30,142490,2861],{}," 设置 24px宽和28px的高（注意 ",[30,142493,2861],{}," 是行内元素， 转成行内块），给 ",[30,142496,331],{},[30,142498,142499],{},"text-align:center"," 让里面内容居中显示",[19,142502,142120],{},[23,142504,142506],{"className":128750,"code":142505,"language":128752,"meta":28,"style":28},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[30,142507,142508,142526,142531,142541],{"__ignoreMap":28},[33,142509,142510,142512,142514,142516,142518,142520,142522,142524],{"class":35,"line":36},[33,142511,33],{"class":53522},[33,142513,245],{"class":47},[33,142515,2663],{"class":53522},[33,142517,245],{"class":47},[33,142519,25791],{"class":53522},[33,142521,245],{"class":47},[33,142523,2575],{"class":53522},[33,142525,17810],{"class":47},[33,142527,142528],{"class":35,"line":51},[33,142529,142530],{"class":2487},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[33,142532,142533,142535,142537,142539],{"class":35,"line":64},[33,142534,130366],{"class":72},[33,142536,996],{"class":47},[33,142538,130428],{"class":72},[33,142540,3567],{"class":47},[33,142542,142543],{"class":35,"line":76},[33,142544,1010],{"class":47},[19,142546,142209],{},[23,142548,142549],{"className":128750,"code":142505,"language":128752,"meta":28,"style":28},[30,142550,142551,142569,142573,142583],{"__ignoreMap":28},[33,142552,142553,142555,142557,142559,142561,142563,142565,142567],{"class":35,"line":36},[33,142554,33],{"class":53522},[33,142556,245],{"class":47},[33,142558,2663],{"class":53522},[33,142560,245],{"class":47},[33,142562,25791],{"class":53522},[33,142564,245],{"class":47},[33,142566,2575],{"class":53522},[33,142568,17810],{"class":47},[33,142570,142571],{"class":35,"line":51},[33,142572,142530],{"class":2487},[33,142574,142575,142577,142579,142581],{"class":35,"line":64},[33,142576,130366],{"class":72},[33,142578,996],{"class":47},[33,142580,130428],{"class":72},[33,142582,3567],{"class":47},[33,142584,142585],{"class":35,"line":76},[33,142586,1010],{"class":47},[19,142588,142589,142590,142593],{},"3 号盒子为 ",[30,142591,142592],{},"bargain"," 特价商品",[3413,142595,142596],{},[331,142597,142598],{},"这个比较简单，直接插入一张图片即可",[19,142600,142120],{},[23,142602,142603],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,142604,142605],{"__ignoreMap":28},[33,142606,142607,142609,142611,142613,142615,142617,142619,142621,142623,142625,142627,142629],{"class":35,"line":36},[33,142608,2226],{"class":47},[33,142610,3736],{"class":53522},[33,142612,57458],{"class":43},[33,142614,57],{"class":47},[33,142616,136267],{"class":60},[33,142618,57466],{"class":43},[33,142620,57],{"class":47},[33,142622,136274],{"class":60},[33,142624,136277],{"class":43},[33,142626,57],{"class":47},[33,142628,136282],{"class":60},[33,142630,53529],{"class":47},[19,142632,142209],{},[23,142634,142635],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,142636,142637],{"__ignoreMap":28},[33,142638,142639,142641,142643,142645,142647,142649,142651,142653,142655,142657,142659,142661],{"class":35,"line":36},[33,142640,2226],{"class":47},[33,142642,3736],{"class":53522},[33,142644,57458],{"class":43},[33,142646,57],{"class":47},[33,142648,136267],{"class":60},[33,142650,57466],{"class":43},[33,142652,57],{"class":47},[33,142654,136274],{"class":60},[33,142656,136277],{"class":43},[33,142658,57],{"class":47},[33,142660,136282],{"class":60},[33,142662,53529],{"class":47},[631,142664,142666],{"id":142665},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3736,142668],{"style":128606,"src":142669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142671,142672,142673,142676],{},"大盒子 ",[30,142674,142675],{},"recom"," 推荐模块 recommend",[3413,142678,142679],{},[331,142680,142681,142682,142684,142685,142688],{},"给这个 ",[30,142683,142675],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[30,142686,142687],{},"#ebebeb","），设置距离上边 12px",[19,142690,142120],{},[23,142692,142694],{"className":128750,"code":142693,"language":128752,"meta":28,"style":28},"div {\n  background-color: #f0f0f0;\n}\n",[30,142695,142696,142702,142713],{"__ignoreMap":28},[33,142697,142698,142700],{"class":35,"line":36},[33,142699,53832],{"class":53522},[33,142701,17810],{"class":47},[33,142703,142704,142706,142708,142711],{"class":35,"line":51},[33,142705,73091],{"class":72},[33,142707,996],{"class":47},[33,142709,142710],{"class":72},"#f0f0f0",[33,142712,3567],{"class":47},[33,142714,142715],{"class":35,"line":64},[33,142716,1010],{"class":47},[19,142718,142209],{},[23,142720,142721],{"className":128750,"code":142693,"language":128752,"meta":28,"style":28},[30,142722,142723,142729,142739],{"__ignoreMap":28},[33,142724,142725,142727],{"class":35,"line":36},[33,142726,53832],{"class":53522},[33,142728,17810],{"class":47},[33,142730,142731,142733,142735,142737],{"class":35,"line":51},[33,142732,73091],{"class":72},[33,142734,996],{"class":47},[33,142736,142710],{"class":72},[33,142738,3567],{"class":47},[33,142740,142741],{"class":35,"line":64},[33,142742,1010],{"class":47},[19,142744,142745],{},"里面包含 2 个盒子， 浮动即可",[19,142747,142120],{},[23,142749,142750],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,142751,142752,142758,142768],{"__ignoreMap":28},[33,142753,142754,142756],{"class":35,"line":36},[33,142755,132598],{"class":43},[33,142757,17810],{"class":47},[33,142759,142760,142762,142764,142766],{"class":35,"line":51},[33,142761,133230],{"class":72},[33,142763,996],{"class":47},[33,142765,25974],{"class":72},[33,142767,3567],{"class":47},[33,142769,142770],{"class":35,"line":64},[33,142771,1010],{"class":47},[19,142773,142774,142775],{},"1 号盒子 ",[30,142776,142777],{},"recom_hd",[3413,142779,142780,142783],{},[331,142781,142782],{},"设置宽度205px，高度163px",[331,142784,142254,142785,142787],{},[30,142786,3736],{},"标签，插入图片即可",[19,142789,142120],{},[23,142791,142792],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,142793,142794],{"__ignoreMap":28},[33,142795,142796,142798,142800,142802,142804,142806,142808,142810,142812,142814,142816,142818],{"class":35,"line":36},[33,142797,2226],{"class":47},[33,142799,3736],{"class":53522},[33,142801,57458],{"class":43},[33,142803,57],{"class":47},[33,142805,136267],{"class":60},[33,142807,57466],{"class":43},[33,142809,57],{"class":47},[33,142811,136274],{"class":60},[33,142813,136277],{"class":43},[33,142815,57],{"class":47},[33,142817,136282],{"class":60},[33,142819,53529],{"class":47},[19,142821,142209],{},[23,142823,142824],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,142825,142826],{"__ignoreMap":28},[33,142827,142828,142830,142832,142834,142836,142838,142840,142842,142844,142846,142848,142850],{"class":35,"line":36},[33,142829,2226],{"class":47},[33,142831,3736],{"class":53522},[33,142833,57458],{"class":43},[33,142835,57],{"class":47},[33,142837,136267],{"class":60},[33,142839,57466],{"class":43},[33,142841,57],{"class":47},[33,142843,136274],{"class":60},[33,142845,136277],{"class":43},[33,142847,57],{"class":47},[33,142849,136282],{"class":60},[33,142851,53529],{"class":47},[19,142853,142854,142855,142858],{},"2 号盒子 ",[30,142856,142857],{},"recom_bd"," ，注意里面的小竖线",[3413,142860,142861,142872,142875,142880,142885],{},[331,142862,142863,142864,142866,142867,142869,142870],{},"右侧结构里面放 ",[30,142865,3413],{}," 包含 4个 ",[30,142868,331],{},"，每个li里面包含一个",[30,142871,3736],{},[331,142873,142874],{},"直接利用切片工具把里面的内容当成一张图片",[331,142876,141250,142877,142879],{},[30,142878,331],{}," 设置浮动",[331,142881,141250,142882,142884],{},[30,142883,3736],{}," 设置宽高，宽度 248px，高度 163px",[331,142886,142887,142888,142448,142891,142893,142894,142896,142897],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[30,142889,142890],{},"top 10px",[30,142892,331],{},"设置相对定位（注意，最后一个",[30,142895,331],{},"不用设置伪元素），可以利用 ",[30,142898,142899],{},"nth-child(-n+3){...}",[19,142901,142120],{},[23,142903,142904],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},[30,142905,142906,142914,142924,142934],{"__ignoreMap":28},[33,142907,142908,142910,142912],{"class":35,"line":36},[33,142909,53832],{"class":53522},[33,142911,139751],{"class":43},[33,142913,17810],{"class":47},[33,142915,142916,142918,142920,142922],{"class":35,"line":51},[33,142917,139758],{"class":72},[33,142919,996],{"class":47},[33,142921,9898],{"class":60},[33,142923,3567],{"class":47},[33,142925,142926,142928,142930,142932],{"class":35,"line":64},[33,142927,130366],{"class":72},[33,142929,996],{"class":47},[33,142931,63087],{"class":72},[33,142933,3567],{"class":47},[33,142935,142936],{"class":35,"line":76},[33,142937,1010],{"class":47},[19,142939,142209],{},[23,142941,142942],{"className":128750,"code":140592,"language":128752,"meta":28,"style":28},[30,142943,142944,142952,142962,142972],{"__ignoreMap":28},[33,142945,142946,142948,142950],{"class":35,"line":36},[33,142947,53832],{"class":53522},[33,142949,139751],{"class":43},[33,142951,17810],{"class":47},[33,142953,142954,142956,142958,142960],{"class":35,"line":51},[33,142955,139758],{"class":72},[33,142957,996],{"class":47},[33,142959,9898],{"class":60},[33,142961,3567],{"class":47},[33,142963,142964,142966,142968,142970],{"class":35,"line":64},[33,142965,130366],{"class":72},[33,142967,996],{"class":47},[33,142969,63087],{"class":72},[33,142971,3567],{"class":47},[33,142973,142974],{"class":35,"line":76},[33,142975,1010],{"class":47},[631,142977,142979],{"id":142978},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3736,142981],{"style":128606,"src":142982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142984,142985],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142987,142988],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142990,142991,142994],{},[30,142992,142993],{},"box_hd"," 制作",[19,142996,142774,142997,142999],{},[30,142998,142993],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3736,143001],{"style":128606,"src":143002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3413,143004,143005,143010,143015,143018],{},[331,143006,143007,143009],{},[30,143008,142993],{}," 给 30px 的高度，2个像素的下边框",[331,143011,143012,143013],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[30,143014,141261],{},[331,143016,143017],{},"左侧盒左浮动，右侧盒子右浮动",[331,143019,143020,143022,143023,143025],{},[30,143021,2663],{},"标签之间的距离用左右的",[30,143024,33114],{},"撑开即可",[19,143027,143028],{},"结构代码",[23,143030,143031],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,143032,143033,143039,143049],{"__ignoreMap":28},[33,143034,143035,143037],{"class":35,"line":36},[33,143036,132598],{"class":43},[33,143038,17810],{"class":47},[33,143040,143041,143043,143045,143047],{"class":35,"line":51},[33,143042,133230],{"class":72},[33,143044,996],{"class":47},[33,143046,25974],{"class":72},[33,143048,3567],{"class":47},[33,143050,143051],{"class":35,"line":64},[33,143052,1010],{"class":47},[19,143054,143055],{},"样式代码",[23,143057,143058],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,143059,143060,143066,143076],{"__ignoreMap":28},[33,143061,143062,143064],{"class":35,"line":36},[33,143063,132598],{"class":43},[33,143065,17810],{"class":47},[33,143067,143068,143070,143072,143074],{"class":35,"line":51},[33,143069,133230],{"class":72},[33,143071,996],{"class":47},[33,143073,25974],{"class":72},[33,143075,3567],{"class":47},[33,143077,143078],{"class":35,"line":64},[33,143079,1010],{"class":47},[19,143081,143082,142994],{},[30,143083,143084],{},"box_bd",[19,143086,143087],{},"2 号盒子 box_bd，不要给高度",[3736,143089],{"style":128606,"src":143090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,143092,143093],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,143095,143096],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,143098,143099],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3413,143101,143102,143114,143130],{},[331,143103,143104,143106,143107,143110,143111,143113],{},[30,143105,143084],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[30,143108,143109],{},"tab_content","，在",[30,143112,143109],{}," 里面包裹tab选项卡对应的内容",[331,143115,143116,143117,143120,143121,143123,143124,143126,143127,143129],{},"内容被一个大盒子包裹（",[30,143118,143119],{},"tab_list_item","），里面是 ",[30,143122,3413],{}," 包裹 5个 ",[30,143125,331],{},"，每个",[30,143128,331],{},"设置对应的宽度，然后设置浮动",[331,143131,143132,143133,143135,143136,143138,143139],{},"而这5个",[30,143134,331],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[30,143137,331],{},"设置",[3413,143140,143141,143159,143162],{},[331,143142,143143,143144,143146,143147,143149,143150,143152,143153,143155,143156,143158],{},"第一个小 ",[30,143145,331],{}," 分为上下结构，上面是 ",[30,143148,3413],{}," 包裹 ",[30,143151,331],{}," ，",[30,143154,331],{},"里面包裹 ",[30,143157,2663],{},"，下面插入一张图片",[331,143160,143161],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[331,143163,143164,143165,143167,143168,143170,143171,143173],{},"后面的小 ",[30,143166,331],{}," 里面先放一个",[30,143169,2663],{},"标签，然后在",[30,143172,2663],{},"标签里面插入图片即可",[19,143175,143028],{},[23,143177,143178],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,143179,143180],{"__ignoreMap":28},[33,143181,143182,143184,143186,143188,143190,143192,143194,143196,143198,143200,143202,143204],{"class":35,"line":36},[33,143183,2226],{"class":47},[33,143185,3736],{"class":53522},[33,143187,57458],{"class":43},[33,143189,57],{"class":47},[33,143191,136267],{"class":60},[33,143193,57466],{"class":43},[33,143195,57],{"class":47},[33,143197,136274],{"class":60},[33,143199,136277],{"class":43},[33,143201,57],{"class":47},[33,143203,136282],{"class":60},[33,143205,53529],{"class":47},[19,143207,143055],{},[23,143209,143210],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,143211,143212],{"__ignoreMap":28},[33,143213,143214,143216,143218,143220,143222,143224,143226,143228,143230,143232,143234,143236],{"class":35,"line":36},[33,143215,2226],{"class":47},[33,143217,3736],{"class":53522},[33,143219,57458],{"class":43},[33,143221,57],{"class":47},[33,143223,136267],{"class":60},[33,143225,57466],{"class":43},[33,143227,57],{"class":47},[33,143229,136274],{"class":60},[33,143231,136277],{"class":43},[33,143233,57],{"class":47},[33,143235,136282],{"class":60},[33,143237,53529],{"class":47},[19,143239,143240],{},"tab栏切换需求！！！！！！介绍：",[3736,143242],{"style":128606,"src":143243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3413,143245,143246,143254,143260,143263],{},[331,143247,143248,143251,143252],{},[30,143249,143250],{},"tab","栏的布局是 ",[30,143253,141261],{},[331,143255,143256,143257,143259],{},"有多少个",[30,143258,143250],{},"选项卡，那么对应就有多少个内容",[331,143261,143262],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[331,143264,143265,143266,143269,143270,143272,143273,143275],{},"等后面我们学习了",[30,143267,143268],{},"js","之后，我们就会配合",[30,143271,143268],{},"来实现，",[30,143274,143250],{},"栏的切换",[14,143277,143279],{"id":143278},"_162-列表制作","16.2 列表制作",[631,143281,143283],{"id":143282},"_1621-准备工作","16.2.1 准备工作",[3413,143285,143286,143289,143292,143295],{},[331,143287,143288],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[331,143290,143291],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[331,143293,143294],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[331,143296,143297],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[631,143299,143301,143302,1958,143304,143306],{"id":143300},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[30,143303,133755],{},[30,143305,55932],{}," 修改",[3736,143308],{"style":128606,"src":143309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3413,143311,143312],{},[331,143313,143314],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,143316,142120],{},[23,143318,143319],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},[30,143320,143321,143325,143339,143343,143357,143361,143375,143379,143393,143397],{"__ignoreMap":28},[33,143322,143323],{"class":35,"line":36},[33,143324,134189],{"class":2487},[33,143326,143327,143329,143331,143333,143335,143337],{"class":35,"line":51},[33,143328,134194],{"class":43},[33,143330,82018],{"class":47},[33,143332,131110],{"class":72},[33,143334,996],{"class":47},[33,143336,134203],{"class":72},[33,143338,131680],{"class":47},[33,143340,143341],{"class":35,"line":64},[33,143342,134210],{"class":2487},[33,143344,143345,143347,143349,143351,143353,143355],{"class":35,"line":76},[33,143346,134215],{"class":43},[33,143348,82018],{"class":47},[33,143350,131110],{"class":72},[33,143352,996],{"class":47},[33,143354,56983],{"class":72},[33,143356,131680],{"class":47},[33,143358,143359],{"class":35,"line":87},[33,143360,134230],{"class":2487},[33,143362,143363,143365,143367,143369,143371,143373],{"class":35,"line":96},[33,143364,134235],{"class":43},[33,143366,82018],{"class":47},[33,143368,131110],{"class":72},[33,143370,996],{"class":47},[33,143372,57050],{"class":72},[33,143374,131680],{"class":47},[33,143376,143377],{"class":35,"line":103},[33,143378,134250],{"class":2487},[33,143380,143381,143383,143385,143387,143389,143391],{"class":35,"line":108},[33,143382,134255],{"class":43},[33,143384,82018],{"class":47},[33,143386,131110],{"class":72},[33,143388,996],{"class":47},[33,143390,88442],{"class":72},[33,143392,131680],{"class":47},[33,143394,143395],{"class":35,"line":119},[33,143396,134270],{"class":2487},[33,143398,143399,143401,143403,143405,143407,143409],{"class":35,"line":128},[33,143400,134275],{"class":43},[33,143402,82018],{"class":47},[33,143404,131110],{"class":72},[33,143406,996],{"class":47},[33,143408,134284],{"class":72},[33,143410,131680],{"class":47},[19,143412,142209],{},[23,143414,143415],{"className":128750,"code":134182,"language":128752,"meta":28,"style":28},[30,143416,143417,143421,143435,143439,143453,143457,143471,143475,143489,143493],{"__ignoreMap":28},[33,143418,143419],{"class":35,"line":36},[33,143420,134189],{"class":2487},[33,143422,143423,143425,143427,143429,143431,143433],{"class":35,"line":51},[33,143424,134194],{"class":43},[33,143426,82018],{"class":47},[33,143428,131110],{"class":72},[33,143430,996],{"class":47},[33,143432,134203],{"class":72},[33,143434,131680],{"class":47},[33,143436,143437],{"class":35,"line":64},[33,143438,134210],{"class":2487},[33,143440,143441,143443,143445,143447,143449,143451],{"class":35,"line":76},[33,143442,134215],{"class":43},[33,143444,82018],{"class":47},[33,143446,131110],{"class":72},[33,143448,996],{"class":47},[33,143450,56983],{"class":72},[33,143452,131680],{"class":47},[33,143454,143455],{"class":35,"line":87},[33,143456,134230],{"class":2487},[33,143458,143459,143461,143463,143465,143467,143469],{"class":35,"line":96},[33,143460,134235],{"class":43},[33,143462,82018],{"class":47},[33,143464,131110],{"class":72},[33,143466,996],{"class":47},[33,143468,57050],{"class":72},[33,143470,131680],{"class":47},[33,143472,143473],{"class":35,"line":103},[33,143474,134250],{"class":2487},[33,143476,143477,143479,143481,143483,143485,143487],{"class":35,"line":108},[33,143478,134255],{"class":43},[33,143480,82018],{"class":47},[33,143482,131110],{"class":72},[33,143484,996],{"class":47},[33,143486,88442],{"class":72},[33,143488,131680],{"class":47},[33,143490,143491],{"class":35,"line":119},[33,143492,134270],{"class":2487},[33,143494,143495,143497,143499,143501,143503,143505],{"class":35,"line":128},[33,143496,134275],{"class":43},[33,143498,82018],{"class":47},[33,143500,131110],{"class":72},[33,143502,996],{"class":47},[33,143504,134284],{"class":72},[33,143506,131680],{"class":47},[3413,143508,143509,143520],{},[331,143510,143511,143512,143515,143516,1958,143518],{},"1 号盒子左侧浮动 ",[30,143513,143514],{},"sk_list"," 里面包含 ",[30,143517,3413],{},[30,143519,331],{},[331,143521,143522,143523,143515,143526,1958,143528],{},"2 号盒子左侧浮动 ",[30,143524,143525],{},"sk_con",[30,143527,3413],{},[30,143529,331],{},[19,143531,142120],{},[23,143533,143534],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,143535,143536,143542,143552],{"__ignoreMap":28},[33,143537,143538,143540],{"class":35,"line":36},[33,143539,132598],{"class":43},[33,143541,17810],{"class":47},[33,143543,143544,143546,143548,143550],{"class":35,"line":51},[33,143545,133230],{"class":72},[33,143547,996],{"class":47},[33,143549,25974],{"class":72},[33,143551,3567],{"class":47},[33,143553,143554],{"class":35,"line":64},[33,143555,1010],{"class":47},[19,143557,142209],{},[23,143559,143560],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,143561,143562,143568,143578],{"__ignoreMap":28},[33,143563,143564,143566],{"class":35,"line":36},[33,143565,132598],{"class":43},[33,143567,17810],{"class":47},[33,143569,143570,143572,143574,143576],{"class":35,"line":51},[33,143571,133230],{"class":72},[33,143573,996],{"class":47},[33,143575,25974],{"class":72},[33,143577,3567],{"class":47},[33,143579,143580],{"class":35,"line":64},[33,143581,1010],{"class":47},[631,143583,143585,143586],{"id":143584},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[30,143587,143588],{},"sk_container",[3736,143590],{"style":128606,"src":143591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3413,143593,143594,143599],{},[331,143595,142774,143596,143598],{},[30,143597,143588],{}," 给宽度 1200，不要给高度",[331,143600,143601],{},"一定不要忘记清除浮动",[19,143603,142120],{},[23,143605,143606],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,143607,143608,143614,143624],{"__ignoreMap":28},[33,143609,143610,143612],{"class":35,"line":36},[33,143611,132598],{"class":43},[33,143613,17810],{"class":47},[33,143615,143616,143618,143620,143622],{"class":35,"line":51},[33,143617,133230],{"class":72},[33,143619,996],{"class":47},[33,143621,25974],{"class":72},[33,143623,3567],{"class":47},[33,143625,143626],{"class":35,"line":64},[33,143627,1010],{"class":47},[328,143629,143630],{},[331,143631,143632],{},"sk_hd制作",[3413,143634,143635],{},[331,143636,142854,143637,143640],{},[30,143638,143639],{},"sk_hd"," ，插入图片即可",[19,143642,142120],{},[23,143644,143645],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,143646,143647],{"__ignoreMap":28},[33,143648,143649,143651,143653,143655,143657,143659,143661,143663,143665,143667,143669,143671],{"class":35,"line":36},[33,143650,2226],{"class":47},[33,143652,3736],{"class":53522},[33,143654,57458],{"class":43},[33,143656,57],{"class":47},[33,143658,136267],{"class":60},[33,143660,57466],{"class":43},[33,143662,57],{"class":47},[33,143664,136274],{"class":60},[33,143666,136277],{"class":43},[33,143668,57],{"class":47},[33,143670,136282],{"class":60},[33,143672,53529],{"class":47},[328,143674,143675],{"start":51},[331,143676,143677],{},"sk_bd制作",[3413,143679,143680],{},[331,143681,143682,143683,143686,143687,1958,143689,143691],{},"3 号盒子 ",[30,143684,143685],{},"sk_bd"," ，里面包含很多的 ",[30,143688,3413],{},[30,143690,331],{},[3413,143692,143693,143702],{},[331,143694,143695,143696,143698,143699,143701],{},"当鼠标移入到 ",[30,143697,331],{}," 上面的时候显示红色的边框，在这里先给 ",[30,143700,331],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[331,143703,143704,143705,143707,143708,143710,143711,143714,143715,143717],{},"由于给每个 ",[30,143706,331],{}," 都设置了外边距，导致一行的最后一个 ",[30,143709,331],{}," 掉了下来，在这里我们利用 ",[30,143712,143713],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[30,143716,331],{},"，去掉外边距就好了",[19,143719,142120],{},[23,143721,143722],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,143723,143724,143730,143742],{"__ignoreMap":28},[33,143725,143726,143728],{"class":35,"line":36},[33,143727,53832],{"class":53522},[33,143729,17810],{"class":47},[33,143731,143732,143734,143736,143738,143740],{"class":35,"line":51},[33,143733,72683],{"class":72},[33,143735,996],{"class":47},[33,143737,2617],{"class":72},[33,143739,53777],{"class":72},[33,143741,3567],{"class":47},[33,143743,143744],{"class":35,"line":64},[33,143745,1010],{"class":47},[19,143747,142209],{},[23,143749,143750],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,143751,143752,143758,143770],{"__ignoreMap":28},[33,143753,143754,143756],{"class":35,"line":36},[33,143755,53832],{"class":53522},[33,143757,17810],{"class":47},[33,143759,143760,143762,143764,143766,143768],{"class":35,"line":51},[33,143761,72683],{"class":72},[33,143763,996],{"class":47},[33,143765,2617],{"class":72},[33,143767,53777],{"class":72},[33,143769,3567],{"class":47},[33,143771,143772],{"class":35,"line":64},[33,143773,1010],{"class":47},[14,143775,143777],{"id":143776},"_163-注册页面制作","16.3 注册页面制作",[3736,143779],{"style":128606,"src":143780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143782,143783,143785],{},[2575,143784,11271],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3736,143787],{"style":128606,"src":143788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[631,143790,143792],{"id":143791},"_1631-准备工作","16.3.1 准备工作",[3413,143794,143795,143798],{},[331,143796,143797],{},"创建register.html，引入 base.css，引入favicon图标",[331,143799,143800],{},"创建register.css ，在html页面进行引入",[631,143802,143804,143805,143807],{"id":143803},"_1632-header-头部实现","16.3.2 ",[30,143806,133755],{}," 头部实现",[3413,143809,143810,143813],{},[331,143811,143812],{},"整个内容用 版心 进行包裹",[331,143814,143815],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143817,142120],{},[23,143819,143820],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,143821,143822],{"__ignoreMap":28},[33,143823,143824,143826,143828,143830,143832,143834,143836,143838,143840,143842,143844,143846],{"class":35,"line":36},[33,143825,2226],{"class":47},[33,143827,3736],{"class":53522},[33,143829,57458],{"class":43},[33,143831,57],{"class":47},[33,143833,136267],{"class":60},[33,143835,57466],{"class":43},[33,143837,57],{"class":47},[33,143839,136274],{"class":60},[33,143841,136277],{"class":43},[33,143843,57],{"class":47},[33,143845,136282],{"class":60},[33,143847,53529],{"class":47},[19,143849,142209],{},[23,143851,143852],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,143853,143854],{"__ignoreMap":28},[33,143855,143856,143858,143860,143862,143864,143866,143868,143870,143872,143874,143876,143878],{"class":35,"line":36},[33,143857,2226],{"class":47},[33,143859,3736],{"class":53522},[33,143861,57458],{"class":43},[33,143863,57],{"class":47},[33,143865,136267],{"class":60},[33,143867,57466],{"class":43},[33,143869,57],{"class":47},[33,143871,136274],{"class":60},[33,143873,136277],{"class":43},[33,143875,57],{"class":47},[33,143877,136282],{"class":60},[33,143879,53529],{"class":47},[631,143881,143883,143884,143887],{"id":143882},"_1633-registerarea-主体模块实现","16.3.3 ",[30,143885,143886],{},"registerarea"," 主体模块实现",[3736,143889],{"style":128606,"src":143890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143892,143893],{},"整个大盒子 高度为 522px，设置4个边框",[19,143895,142120],{},[23,143897,143898],{"className":128750,"code":132907,"language":128752,"meta":28,"style":28},[30,143899,143900,143906,143922],{"__ignoreMap":28},[33,143901,143902,143904],{"class":35,"line":36},[33,143903,53832],{"class":53522},[33,143905,17810],{"class":47},[33,143907,143908,143910,143912,143914,143916,143918,143920],{"class":35,"line":51},[33,143909,73109],{"class":72},[33,143911,996],{"class":47},[33,143913,720],{"class":72},[33,143915,53713],{"class":39},[33,143917,53742],{"class":72},[33,143919,132142],{"class":72},[33,143921,3567],{"class":47},[33,143923,143924],{"class":35,"line":64},[33,143925,1010],{"class":47},[19,143927,142209],{},[23,143929,143930],{"className":128750,"code":132907,"language":128752,"meta":28,"style":28},[30,143931,143932,143938,143954],{"__ignoreMap":28},[33,143933,143934,143936],{"class":35,"line":36},[33,143935,53832],{"class":53522},[33,143937,17810],{"class":47},[33,143939,143940,143942,143944,143946,143948,143950,143952],{"class":35,"line":51},[33,143941,73109],{"class":72},[33,143943,996],{"class":47},[33,143945,720],{"class":72},[33,143947,53713],{"class":39},[33,143949,53742],{"class":72},[33,143951,132142],{"class":72},[33,143953,3567],{"class":47},[33,143955,143956],{"class":35,"line":64},[33,143957,1010],{"class":47},[19,143959,143960],{},"1号盒子 是一个 h3 标签，放标题",[3413,143962,143963],{},[331,143964,143965],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143967,142120],{},[23,143969,143970],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,143971,143972,143978,143988],{"__ignoreMap":28},[33,143973,143974,143976],{"class":35,"line":36},[33,143975,132598],{"class":43},[33,143977,17810],{"class":47},[33,143979,143980,143982,143984,143986],{"class":35,"line":51},[33,143981,133230],{"class":72},[33,143983,996],{"class":47},[33,143985,25974],{"class":72},[33,143987,3567],{"class":47},[33,143989,143990],{"class":35,"line":64},[33,143991,1010],{"class":47},[19,143993,142209],{},[23,143995,143996],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,143997,143998,144004,144014],{"__ignoreMap":28},[33,143999,144000,144002],{"class":35,"line":36},[33,144001,132598],{"class":43},[33,144003,17810],{"class":47},[33,144005,144006,144008,144010,144012],{"class":35,"line":51},[33,144007,133230],{"class":72},[33,144009,996],{"class":47},[33,144011,25974],{"class":72},[33,144013,3567],{"class":47},[33,144015,144016],{"class":35,"line":64},[33,144017,1010],{"class":47},[19,144019,144020],{},"2号盒子 里面放注册的内容",[3413,144022,144023,144026,144035,144049,144062,144065,144068,144086,144100],{},[331,144024,144025],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[331,144027,144028,144029,144031,144032,144034],{},"里面的内容利用 ",[30,144030,3413],{}," 包含 ",[30,144033,331],{}," 来实现的（不需要用表格）",[331,144036,141264,144037,144039,144040,144042,144043,144045,144046,144048],{},[30,144038,331],{}," 里面，左侧放 ",[30,144041,35833],{}," 标签， 中间放",[30,144044,56040],{}," 标签， 右侧放 ",[30,144047,33],{}," 提示信息",[331,144050,144051,144052,144054,144055,144057,144058,144061],{},"左侧 ",[30,144053,35833],{},"里面的文字都是右对齐，我们可以给",[30,144056,35833],{},"设置一个宽度（88px），然后利用",[30,144059,144060],{},"text-align"," 来设置右对齐",[331,144063,144064],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[331,144066,144067],{},"右侧 span修饰一下文字颜色",[331,144069,144070,144071],{},"提示信息的样式优化",[3413,144072,144073,144076,144079],{},[331,144074,144075],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[331,144077,144078],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[331,144080,144081,144082,144085],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[30,144083,144084],{},"vertical-algin"," 来设置 图片与文字对齐方式",[331,144087,144088,144089],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3413,144090,144091,144097],{},[331,144092,144093,144094,144096],{},"设置 ",[30,144095,25791],{}," 的 左右 12px 的内边距，设置一下文字颜色",[331,144098,144099],{},"分别设置 背景颜色",[331,144101,144102,144103,144105],{},"同意协议 和 完成注册 都是用 ",[30,144104,331],{}," 进行包裹",[19,144107,142120],{},[23,144109,144110],{"className":128750,"code":142693,"language":128752,"meta":28,"style":28},[30,144111,144112,144118,144128],{"__ignoreMap":28},[33,144113,144114,144116],{"class":35,"line":36},[33,144115,53832],{"class":53522},[33,144117,17810],{"class":47},[33,144119,144120,144122,144124,144126],{"class":35,"line":51},[33,144121,73091],{"class":72},[33,144123,996],{"class":47},[33,144125,142710],{"class":72},[33,144127,3567],{"class":47},[33,144129,144130],{"class":35,"line":64},[33,144131,1010],{"class":47},[19,144133,142209],{},[23,144135,144136],{"className":128750,"code":142693,"language":128752,"meta":28,"style":28},[30,144137,144138,144144,144154],{"__ignoreMap":28},[33,144139,144140,144142],{"class":35,"line":36},[33,144141,53832],{"class":53522},[33,144143,17810],{"class":47},[33,144145,144146,144148,144150,144152],{"class":35,"line":51},[33,144147,73091],{"class":72},[33,144149,996],{"class":47},[33,144151,142710],{"class":72},[33,144153,3567],{"class":47},[33,144155,144156],{"class":35,"line":64},[33,144157,1010],{"class":47},[631,144159,144161],{"id":144160},"_1634-底部实现","16.3.4 底部实现",[19,144163,142120],{},[23,144165,144166],{"className":128750,"code":142693,"language":128752,"meta":28,"style":28},[30,144167,144168,144174,144184],{"__ignoreMap":28},[33,144169,144170,144172],{"class":35,"line":36},[33,144171,53832],{"class":53522},[33,144173,17810],{"class":47},[33,144175,144176,144178,144180,144182],{"class":35,"line":51},[33,144177,73091],{"class":72},[33,144179,996],{"class":47},[33,144181,142710],{"class":72},[33,144183,3567],{"class":47},[33,144185,144186],{"class":35,"line":64},[33,144187,1010],{"class":47},[19,144189,142209],{},[23,144191,144192],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,144193,144194,144198,144212,144216],{"__ignoreMap":28},[33,144195,144196],{"class":35,"line":36},[33,144197,132861],{"class":2487},[33,144199,144200,144202,144204,144206,144208,144210],{"class":35,"line":51},[33,144201,2226],{"class":47},[33,144203,53832],{"class":53522},[33,144205,55705],{"class":43},[33,144207,57],{"class":47},[33,144209,132874],{"class":60},[33,144211,53529],{"class":47},[33,144213,144214],{"class":35,"line":64},[33,144215,132881],{"class":47},[33,144217,144218,144220,144222],{"class":35,"line":76},[33,144219,54006],{"class":47},[33,144221,53832],{"class":53522},[33,144223,53529],{"class":47},[14,144225,144227],{"id":144226},"_164-项目总结","16.4 项目总结",[328,144229,144230,144233,144236,144239],{},[331,144231,144232],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[331,144234,144235],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[331,144237,144238],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[331,144240,144241],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3736,144243],{"style":128606,"src":144244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[328,144246,144247],{"start":87},[331,144248,144249],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3736,144251],{"style":128606,"src":144252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[328,144254,144255],{"start":96},[331,144256,144257],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3736,144259],{"style":128606,"src":144260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[23,144262,144263],{"className":129497,"code":138907,"language":129499,"meta":28,"style":28},[30,144264,144265],{"__ignoreMap":28},[33,144266,144267,144269,144271,144273,144275,144277,144279,144281,144283,144285,144287,144289],{"class":35,"line":36},[33,144268,2226],{"class":47},[33,144270,56040],{"class":53522},[33,144272,56043],{"class":43},[33,144274,57],{"class":47},[33,144276,64916],{"class":60},[33,144278,17158],{"class":43},[33,144280,57],{"class":47},[33,144282,138928],{"class":60},[33,144284,63238],{"class":43},[33,144286,57],{"class":47},[33,144288,138935],{"class":60},[33,144290,53529],{"class":47},[328,144292,144293,144296],{"start":103},[331,144294,144295],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[331,144297,144298],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2331,144300,144301],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":51,"depth":51,"links":144303},[144304,144309,144316,144324],{"id":141930,"depth":51,"text":141931,"children":144305},[144306,144307,144308],{"id":141934,"depth":64,"text":141935},{"id":142665,"depth":64,"text":142666},{"id":142978,"depth":64,"text":142979},{"id":143278,"depth":51,"text":143279,"children":144310},[144311,144312,144314],{"id":143282,"depth":64,"text":143283},{"id":143300,"depth":64,"text":144313},"16.2.2 列表页 header 和 nav 修改",{"id":143584,"depth":64,"text":144315},"16.2.3 列表页主体 sk_container",{"id":143776,"depth":51,"text":143777,"children":144317},[144318,144319,144321,144323],{"id":143791,"depth":64,"text":143792},{"id":143803,"depth":64,"text":144320},"16.3.2 header 头部实现",{"id":143882,"depth":64,"text":144322},"16.3.3 registerarea 主体模块实现",{"id":144160,"depth":64,"text":144161},{"id":144226,"depth":51,"text":144227},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141922,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":144331,"title":144332,"body":144333,"description":2359,"extension":2360,"meta":144441,"navigation":99,"path":144442,"seo":144443,"stem":144444,"__hash__":144445},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":144334,"toc":144436},[144335,144338,144342,144345,144348,144357,144366,144370,144375,144382,144400,144403,144406,144409,144412,144415,144418,144421,144424,144427,144430,144433],[10,144336,144332],{"id":144337},"_17-web服务器与网站发布",[14,144339,144341],{"id":144340},"_171-web服务器","17.1 Web服务器",[19,144343,144344],{},"把自己网站上传到服务器上，可以让其他人访问",[3736,144346],{"style":128606,"src":144347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,144349,144350,144353,144354],{},[2575,144351,144352],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2575,144355,144356],{},"Web 服务器等",[19,144358,144359,144360,1958,144363,27979],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2575,144361,144362],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2575,144364,144365],{},"远程服务器",[631,144367,144369],{"id":144368},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,144371,144372],{},[2575,144373,144374],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,144376,144377,144378],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2663,144379,144380],{"href":144380,"rel":144381},"http:\u002F\u002Ffree.3v.do\u002F",[26103],[3413,144383,144384,144387,144390,144397],{},[331,144385,144386],{},"去免费空间网站注册账号。",[331,144388,144389],{},"记录下主机名、用户名、密码、域名。",[331,144391,144392,144393,144396],{},"利用 ",[30,144394,144395],{},"utftp"," 软件 上传网站到远程服务器",[331,144398,144399],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,144401,144402],{},"使用软件上传，对上传软件文件进行解压",[3736,144404],{"style":128606,"src":144405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3736,144407],{"style":128606,"src":144408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,144410,144411],{},"输入刚刚申请的服务器账号信息：",[3736,144413],{"style":128606,"src":144414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3736,144416],{"style":128606,"src":144417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3736,144419],{"style":128606,"src":144420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3736,144422],{"style":128606,"src":144423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,144425,144426],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3736,144428],{"style":128606,"src":144429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144431,144432],{},"浏览器输入域名即可访问",[19,144434,144435],{},"首页一定必须是index",{"title":28,"searchDepth":51,"depth":51,"links":144437},[144438],{"id":144340,"depth":51,"text":144341,"children":144439},[144440],{"id":144368,"depth":64,"text":144369},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":144332,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144447,"title":144448,"body":144449,"description":2359,"extension":2360,"meta":145376,"navigation":99,"path":145377,"seo":145378,"stem":145379,"__hash__":145380},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144450,"toc":145359},[144451,144454,144458,144461,144464,144475,144478,144482,144486,144491,144494,144497,144500,144503,144507,144533,144537,144541,144544,144547,144551,144584,144588,144591,144594,144658,144662,144666,144669,144672,144675,144679,144724,144728,144731,144761,144765,144769,144772,144775,144779,144782,144851,144854,144962,144964,144970,144974,144977,144980,145076,145079,145083,145107,145111,145114,145118,145121,145125,145128,145131,145134,145137,145141,145144,145147,145151,145155,145158,145161,145164,145167,145171,145174,145178,145181,145184,145229,145233,145237,145240,145243,145246,145278,145282,145285,145319,145323,145326,145356],[10,144452,144448],{"id":144453},"_18-2d动画与3d转换",[14,144455,144457],{"id":144456},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144459,144460],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144462,144463],{},"转换（transform）你可以简单理解为变形",[3413,144465,144466,144469,144472],{},[331,144467,144468],{},"移动：translate",[331,144470,144471],{},"旋转：rotate",[331,144473,144474],{},"缩放：scale",[3736,144476],{"style":128606,"src":144477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[631,144479,144481],{"id":144480},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[24236,144483,144485],{"id":144484},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144487,144488,144489],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2575,144490,135409],{},[3736,144492],{"style":128606,"src":144493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144495,144496],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144498,144499],{},"对于行内元素无效",[19,144501,144502],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[24236,144504,144506],{"id":144505},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[23,144508,144509],{"className":128750,"code":140939,"language":128752,"meta":28,"style":28},[30,144510,144511,144517,144529],{"__ignoreMap":28},[33,144512,144513,144515],{"class":35,"line":36},[33,144514,53832],{"class":53522},[33,144516,17810],{"class":47},[33,144518,144519,144521,144523,144525,144527],{"class":35,"line":51},[33,144520,72683],{"class":72},[33,144522,996],{"class":47},[33,144524,2617],{"class":72},[33,144526,53777],{"class":72},[33,144528,3567],{"class":47},[33,144530,144531],{"class":35,"line":64},[33,144532,1010],{"class":47},[631,144534,144536],{"id":144535},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[24236,144538,144540],{"id":144539},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144542,144543],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3736,144545],{"style":128606,"src":144546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[24236,144548,144550],{"id":144549},"_18122-旋转效果","18.1.2.2 旋转效果",[23,144552,144554],{"className":128750,"code":144553,"language":128752,"meta":28,"style":28},"div {\n  transform: rotate(45deg);\n}\n",[30,144555,144556,144562,144580],{"__ignoreMap":28},[33,144557,144558,144560],{"class":35,"line":36},[33,144559,53832],{"class":53522},[33,144561,17810],{"class":47},[33,144563,144564,144566,144568,144571,144573,144575,144578],{"class":35,"line":51},[33,144565,138734],{"class":72},[33,144567,996],{"class":47},[33,144569,144570],{"class":72},"rotate",[33,144572,133],{"class":47},[33,144574,2946],{"class":72},[33,144576,144577],{"class":39},"deg",[33,144579,4976],{"class":47},[33,144581,144582],{"class":35,"line":64},[33,144583,1010],{"class":47},[24236,144585,144587],{"id":144586},"_18123-三角做法","18.1.2.3 三角做法",[19,144589,144590],{},"该下标当经过最外层大盒子时会实现向上反转",[3736,144592],{"style":128606,"src":144593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[23,144595,144596],{"className":128750,"code":137270,"language":128752,"meta":28,"style":28},[30,144597,144598,144602,144608,144618,144628,144644,144654],{"__ignoreMap":28},[33,144599,144600],{"class":35,"line":36},[33,144601,137277],{"class":2487},[33,144603,144604,144606],{"class":35,"line":51},[33,144605,137282],{"class":43},[33,144607,17810],{"class":47},[33,144609,144610,144612,144614,144616],{"class":35,"line":64},[33,144611,72781],{"class":72},[33,144613,996],{"class":47},[33,144615,2617],{"class":72},[33,144617,3567],{"class":47},[33,144619,144620,144622,144624,144626],{"class":35,"line":76},[33,144621,73001],{"class":72},[33,144623,996],{"class":47},[33,144625,2617],{"class":72},[33,144627,3567],{"class":47},[33,144629,144630,144632,144634,144636,144638,144640,144642],{"class":35,"line":87},[33,144631,73109],{"class":72},[33,144633,996],{"class":47},[33,144635,1279],{"class":72},[33,144637,53713],{"class":39},[33,144639,53742],{"class":72},[33,144641,66208],{"class":72},[33,144643,3567],{"class":47},[33,144645,144646,144648,144650,144652],{"class":35,"line":96},[33,144647,137325],{"class":72},[33,144649,996],{"class":47},[33,144651,64587],{"class":72},[33,144653,3567],{"class":47},[33,144655,144656],{"class":35,"line":103},[33,144657,1010],{"class":47},[631,144659,144661],{"id":144660},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[24236,144663,144665],{"id":144664},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144667,144668],{},"设置中心点",[3736,144670],{"style":128606,"src":144671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144673,144674],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[24236,144676,144678],{"id":144677},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[23,144680,144682],{"className":128750,"code":144681,"language":128752,"meta":28,"style":28},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[30,144683,144684,144689,144695,144710,144715,144720],{"__ignoreMap":28},[33,144685,144686],{"class":35,"line":36},[33,144687,144688],{"class":2487},"\u002F* 转换中心点 *\u002F\n",[33,144690,144691,144693],{"class":35,"line":51},[33,144692,53832],{"class":53522},[33,144694,17810],{"class":47},[33,144696,144697,144700,144702,144704,144706,144708],{"class":35,"line":64},[33,144698,144699],{"class":72},"  transform-origin",[33,144701,996],{"class":47},[33,144703,53813],{"class":72},[33,144705,19382],{"class":72},[33,144707,132613],{"class":47},[33,144709,137423],{"class":2487},[33,144711,144712],{"class":35,"line":76},[33,144713,144714],{"class":2487},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[33,144716,144717],{"class":35,"line":87},[33,144718,144719],{"class":2487},"  \u002F* transform-origin: left top; *\u002F\n",[33,144721,144722],{"class":35,"line":96},[33,144723,1010],{"class":47},[24236,144725,144727],{"id":144726},"_18133-旋转案例","18.1.3.3 旋转案例",[3736,144729],{"style":128606,"src":144730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[23,144732,144733],{"className":128750,"code":144553,"language":128752,"meta":28,"style":28},[30,144734,144735,144741,144757],{"__ignoreMap":28},[33,144736,144737,144739],{"class":35,"line":36},[33,144738,53832],{"class":53522},[33,144740,17810],{"class":47},[33,144742,144743,144745,144747,144749,144751,144753,144755],{"class":35,"line":51},[33,144744,138734],{"class":72},[33,144746,996],{"class":47},[33,144748,144570],{"class":72},[33,144750,133],{"class":47},[33,144752,2946],{"class":72},[33,144754,144577],{"class":39},[33,144756,4976],{"class":47},[33,144758,144759],{"class":35,"line":64},[33,144760,1010],{"class":47},[631,144762,144764],{"id":144763},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[24236,144766,144768],{"id":144767},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144770,144771],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3736,144773],{"style":128606,"src":144774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[24236,144776,144778],{"id":144777},"_18142-分页按钮","18.1.4.2 分页按钮",[3736,144780],{"style":128606,"src":144781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[23,144783,144785],{"className":128750,"code":144784,"language":128752,"meta":28,"style":28},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[30,144786,144787,144793,144809,144813,144817,144822,144828,144842,144847],{"__ignoreMap":28},[33,144788,144789,144791],{"class":35,"line":36},[33,144790,53832],{"class":53522},[33,144792,17810],{"class":47},[33,144794,144795,144797,144799,144802,144804,144807],{"class":35,"line":51},[33,144796,138734],{"class":72},[33,144798,996],{"class":47},[33,144800,144801],{"class":72},"scale",[33,144803,133],{"class":47},[33,144805,144806],{"class":72},"1.2",[33,144808,4976],{"class":47},[33,144810,144811],{"class":35,"line":64},[33,144812,1010],{"class":47},[33,144814,144815],{"class":35,"line":76},[33,144816,138211],{"class":47},[33,144818,144819],{"class":35,"line":87},[33,144820,144821],{"class":2487},"\u002F* 2D 缩放 *\u002F\n",[33,144823,144824,144826],{"class":35,"line":96},[33,144825,53832],{"class":53522},[33,144827,17810],{"class":47},[33,144829,144830,144832,144834,144836,144838,144840],{"class":35,"line":103},[33,144831,138734],{"class":72},[33,144833,996],{"class":47},[33,144835,144801],{"class":72},[33,144837,133],{"class":47},[33,144839,144806],{"class":72},[33,144841,4976],{"class":47},[33,144843,144844],{"class":35,"line":108},[33,144845,144846],{"class":2487},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[33,144848,144849],{"class":35,"line":119},[33,144850,1010],{"class":47},[19,144852,144853],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[23,144855,144857],{"className":128750,"code":144856,"language":128752,"meta":28,"style":28},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[30,144858,144859,144864,144874,144895,144916,144920,144925,144931,144958],{"__ignoreMap":28},[33,144860,144861],{"class":35,"line":36},[33,144862,144863],{"class":2487},"\u002F* 定义动画 *\u002F\n",[33,144865,144866,144869,144872],{"class":35,"line":51},[33,144867,144868],{"class":39},"@keyframes",[33,144870,144871],{"class":289}," move",[33,144873,17810],{"class":47},[33,144875,144876,144879,144881,144883,144885,144888,144890,144892],{"class":35,"line":64},[33,144877,144878],{"class":43},"  0%",[33,144880,82018],{"class":47},[33,144882,50356],{"class":72},[33,144884,996],{"class":47},[33,144886,144887],{"class":72},"translateX",[33,144889,133],{"class":47},[33,144891,2617],{"class":72},[33,144893,144894],{"class":47},"); }\n",[33,144896,144897,144900,144902,144904,144906,144908,144910,144912,144914],{"class":35,"line":76},[33,144898,144899],{"class":43},"  100%",[33,144901,82018],{"class":47},[33,144903,50356],{"class":72},[33,144905,996],{"class":47},[33,144907,144887],{"class":72},[33,144909,133],{"class":47},[33,144911,2734],{"class":72},[33,144913,53713],{"class":39},[33,144915,144894],{"class":47},[33,144917,144918],{"class":35,"line":87},[33,144919,1010],{"class":47},[33,144921,144922],{"class":35,"line":96},[33,144923,144924],{"class":2487},"\u002F* 调用动画 *\u002F\n",[33,144926,144927,144929],{"class":35,"line":103},[33,144928,53832],{"class":53522},[33,144930,17810],{"class":47},[33,144932,144933,144936,144938,144940,144942,144944,144946,144948,144950,144953,144956],{"class":35,"line":108},[33,144934,144935],{"class":72},"  animation",[33,144937,996],{"class":47},[33,144939,137436],{"class":72},[33,144941,27357],{"class":72},[33,144943,3109],{"class":39},[33,144945,80891],{"class":72},[33,144947,1437],{"class":72},[33,144949,3109],{"class":39},[33,144951,144952],{"class":72}," infinite",[33,144954,144955],{"class":72}," alternate",[33,144957,3567],{"class":47},[33,144959,144960],{"class":35,"line":119},[33,144961,1010],{"class":47},[19,144963,144853],{},[23,144965,144968],{"className":144966,"code":144967,"language":7436},[7434],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[30,144969,144967],{"__ignoreMap":28},[24236,144971,144973],{"id":144972},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144975,144976],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3736,144978],{"style":128606,"src":144979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[23,144981,144982],{"className":128750,"code":144856,"language":128752,"meta":28,"style":28},[30,144983,144984,144988,144996,145014,145034,145038,145042,145048,145072],{"__ignoreMap":28},[33,144985,144986],{"class":35,"line":36},[33,144987,144863],{"class":2487},[33,144989,144990,144992,144994],{"class":35,"line":51},[33,144991,144868],{"class":39},[33,144993,144871],{"class":289},[33,144995,17810],{"class":47},[33,144997,144998,145000,145002,145004,145006,145008,145010,145012],{"class":35,"line":64},[33,144999,144878],{"class":43},[33,145001,82018],{"class":47},[33,145003,50356],{"class":72},[33,145005,996],{"class":47},[33,145007,144887],{"class":72},[33,145009,133],{"class":47},[33,145011,2617],{"class":72},[33,145013,144894],{"class":47},[33,145015,145016,145018,145020,145022,145024,145026,145028,145030,145032],{"class":35,"line":76},[33,145017,144899],{"class":43},[33,145019,82018],{"class":47},[33,145021,50356],{"class":72},[33,145023,996],{"class":47},[33,145025,144887],{"class":72},[33,145027,133],{"class":47},[33,145029,2734],{"class":72},[33,145031,53713],{"class":39},[33,145033,144894],{"class":47},[33,145035,145036],{"class":35,"line":87},[33,145037,1010],{"class":47},[33,145039,145040],{"class":35,"line":96},[33,145041,144924],{"class":2487},[33,145043,145044,145046],{"class":35,"line":103},[33,145045,53832],{"class":53522},[33,145047,17810],{"class":47},[33,145049,145050,145052,145054,145056,145058,145060,145062,145064,145066,145068,145070],{"class":35,"line":108},[33,145051,144935],{"class":72},[33,145053,996],{"class":47},[33,145055,137436],{"class":72},[33,145057,27357],{"class":72},[33,145059,3109],{"class":39},[33,145061,80891],{"class":72},[33,145063,1437],{"class":72},[33,145065,3109],{"class":39},[33,145067,144952],{"class":72},[33,145069,144955],{"class":72},[33,145071,3567],{"class":47},[33,145073,145074],{"class":35,"line":119},[33,145075,1010],{"class":47},[19,145077,145078],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[631,145080,145082],{"id":145081},"_1823-知识点回顾","18.2.3 知识点回顾",[23,145084,145085],{"className":128750,"code":130919,"language":128752,"meta":28,"style":28},[30,145086,145087,145093,145103],{"__ignoreMap":28},[33,145088,145089,145091],{"class":35,"line":36},[33,145090,53832],{"class":53522},[33,145092,17810],{"class":47},[33,145094,145095,145097,145099,145101],{"class":35,"line":51},[33,145096,130932],{"class":72},[33,145098,996],{"class":47},[33,145100,63954],{"class":72},[33,145102,3567],{"class":47},[33,145104,145105],{"class":35,"line":64},[33,145106,1010],{"class":47},[14,145108,145110],{"id":145109},"_183-3d-转换","18.3 3D 转换",[19,145112,145113],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[631,145115,145117],{"id":145116},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3736,145119],{"style":128606,"src":145120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[631,145122,145124],{"id":145123},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3736,145126],{"style":128606,"src":145127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,145129,145130],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,145132,145133],{},"translate3d的效果需要搭配透视perspective来使用",[3736,145135],{"style":128606,"src":145136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[631,145138,145140],{"id":145139},"_1833-透视-perspective","18.3.3 透视 perspective",[3736,145142],{"style":128606,"src":145143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,145145,145146],{},"透视写在父盒子上，单位为像素",[631,145148,145150],{"id":145149},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[24236,145152,145154],{"id":145153},"_18341-分开解释","18.3.4.1 分开解释",[3736,145156],{"style":128606,"src":145157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3736,145159],{"style":128606,"src":145160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3736,145162],{"style":128606,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,145165,145166],{},"总结来说就是左手原则",[24236,145168,145170],{"id":145169},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3736,145172],{"style":128606,"src":145173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[631,145175,145177],{"id":145176},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3736,145179],{"style":128606,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3736,145182],{"style":128606,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[23,145185,145187],{"className":128750,"code":145186,"language":128752,"meta":28,"style":28},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[30,145188,145189,145195,145208,145225],{"__ignoreMap":28},[33,145190,145191,145193],{"class":35,"line":36},[33,145192,53832],{"class":53522},[33,145194,17810],{"class":47},[33,145196,145197,145200,145202,145204,145206],{"class":35,"line":51},[33,145198,145199],{"class":72},"  perspective",[33,145201,996],{"class":47},[33,145203,67291],{"class":72},[33,145205,53713],{"class":39},[33,145207,3567],{"class":47},[33,145209,145210,145212,145214,145217,145219,145221,145223],{"class":35,"line":64},[33,145211,138734],{"class":72},[33,145213,996],{"class":47},[33,145215,145216],{"class":72},"rotateX",[33,145218,133],{"class":47},[33,145220,2946],{"class":72},[33,145222,144577],{"class":39},[33,145224,4976],{"class":47},[33,145226,145227],{"class":35,"line":76},[33,145228,1010],{"class":47},[631,145230,145232],{"id":145231},"_1836-案例","18.3.6 案例",[24236,145234,145236],{"id":145235},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3736,145238],{"style":128606,"src":145239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3736,145241],{"style":128606,"src":145242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3736,145244],{"style":128606,"src":145245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[23,145247,145249],{"className":128750,"code":145248,"language":128752,"meta":28,"style":28},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[30,145250,145251,145256,145262,145274],{"__ignoreMap":28},[33,145252,145253],{"class":35,"line":36},[33,145254,145255],{"class":2487},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[33,145257,145258,145260],{"class":35,"line":51},[33,145259,135747],{"class":43},[33,145261,17810],{"class":47},[33,145263,145264,145266,145268,145270,145272],{"class":35,"line":64},[33,145265,145199],{"class":72},[33,145267,996],{"class":47},[33,145269,67291],{"class":72},[33,145271,53713],{"class":39},[33,145273,3567],{"class":47},[33,145275,145276],{"class":35,"line":76},[33,145277,1010],{"class":47},[24236,145279,145281],{"id":145280},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3736,145283],{"style":128606,"src":145284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[23,145286,145287],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,145288,145289,145293,145307,145311],{"__ignoreMap":28},[33,145290,145291],{"class":35,"line":36},[33,145292,132861],{"class":2487},[33,145294,145295,145297,145299,145301,145303,145305],{"class":35,"line":51},[33,145296,2226],{"class":47},[33,145298,53832],{"class":53522},[33,145300,55705],{"class":43},[33,145302,57],{"class":47},[33,145304,132874],{"class":60},[33,145306,53529],{"class":47},[33,145308,145309],{"class":35,"line":64},[33,145310,132881],{"class":47},[33,145312,145313,145315,145317],{"class":35,"line":76},[33,145314,54006],{"class":47},[33,145316,53832],{"class":53522},[33,145318,53529],{"class":47},[24236,145320,145322],{"id":145321},"_18363-旋转木马","18.3.6.3 旋转木马",[3736,145324],{"style":128606,"src":145325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[23,145327,145328],{"className":128750,"code":144553,"language":128752,"meta":28,"style":28},[30,145329,145330,145336,145352],{"__ignoreMap":28},[33,145331,145332,145334],{"class":35,"line":36},[33,145333,53832],{"class":53522},[33,145335,17810],{"class":47},[33,145337,145338,145340,145342,145344,145346,145348,145350],{"class":35,"line":51},[33,145339,138734],{"class":72},[33,145341,996],{"class":47},[33,145343,144570],{"class":72},[33,145345,133],{"class":47},[33,145347,2946],{"class":72},[33,145349,144577],{"class":39},[33,145351,4976],{"class":47},[33,145353,145354],{"class":35,"line":64},[33,145355,1010],{"class":47},[2331,145357,145358],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":145360},[145361,145368],{"id":144456,"depth":51,"text":144457,"children":145362},[145363,145364,145365,145366,145367],{"id":144480,"depth":64,"text":144481},{"id":144535,"depth":64,"text":144536},{"id":144660,"depth":64,"text":144661},{"id":144763,"depth":64,"text":144764},{"id":145081,"depth":64,"text":145082},{"id":145109,"depth":51,"text":145110,"children":145369},[145370,145371,145372,145373,145374,145375],{"id":145116,"depth":64,"text":145117},{"id":145123,"depth":64,"text":145124},{"id":145139,"depth":64,"text":145140},{"id":145149,"depth":64,"text":145150},{"id":145176,"depth":64,"text":145177},{"id":145231,"depth":64,"text":145232},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144448,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":145382,"title":145383,"body":145384,"description":2359,"extension":2360,"meta":145587,"navigation":99,"path":145588,"seo":145589,"stem":145590,"__hash__":145591},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":145385,"toc":145576},[145386,145389,145393,145396,145399,145403,145406,145409,145412,145416,145419,145423,145426,145430,145433,145437,145451,145455,145480,145483,145486,145503,145507,145511,145514,145517,145521,145524,145527,145545,145549,145552,145566,145570,145573],[10,145387,145383],{"id":145388},"_19-移动端基础-前缀现状与视口",[14,145390,145392],{"id":145391},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3736,145394],{"style":128606,"src":145395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,145397,145398],{},"意思就是加个前缀，增加兼容性",[14,145400,145402],{"id":145401},"_192-移动端现状认识","19.2 移动端现状认识",[3736,145404],{"style":128606,"src":145405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,145407,145408],{},"调试方法：",[3736,145410],{"style":128606,"src":145411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,145413,145415],{"id":145414},"_193-视口","19.3 视口",[19,145417,145418],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[631,145420,145422],{"id":145421},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3736,145424],{"style":128606,"src":145425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[631,145427,145429],{"id":145428},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3736,145431],{"style":128606,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[631,145434,145436],{"id":145435},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3413,145438,145439,145442,145445,145448],{},[331,145440,145441],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[331,145443,145444],{},"理想视口，对设备来讲，是最理想的视口尺寸",[331,145446,145447],{},"需要手动添写meta视口标签通知浏览器操作",[331,145449,145450],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[631,145452,145454],{"id":145453},"_1934-meta视口标签","19.3.4 meta视口标签",[23,145456,145458],{"className":129497,"code":145457,"language":129499,"meta":28,"style":28},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[30,145459,145460],{"__ignoreMap":28},[33,145461,145462,145464,145466,145468,145470,145472,145474,145476,145478],{"class":35,"line":36},[33,145463,2226],{"class":47},[33,145465,53566],{"class":53522},[33,145467,17158],{"class":43},[33,145469,57],{"class":47},[33,145471,53613],{"class":60},[33,145473,53593],{"class":43},[33,145475,57],{"class":47},[33,145477,53620],{"class":60},[33,145479,53529],{"class":47},[3736,145481],{"style":128606,"src":145482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145484,145485],{},"标准视口设置：",[328,145487,145488,145491,145494,145497,145500],{},[331,145489,145490],{},"视口宽度和设备保持一致",[331,145492,145493],{},"视口的默认缩放比例1.0",[331,145495,145496],{},"不允许用户自行缩放",[331,145498,145499],{},"最大允许的缩放比例1.0",[331,145501,145502],{},"最小允许的缩放比例1.0",[631,145504,145506],{"id":145505},"_1935-二倍图","19.3.5 二倍图",[24236,145508,145510],{"id":145509},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3736,145512],{"style":128606,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3736,145515],{"style":128606,"src":145516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[24236,145518,145520],{"id":145519},"_19352-多倍图","19.3.5.2 多倍图",[3736,145522],{"style":128606,"src":145523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145525,145526],{},"二倍图法，代码如下：",[23,145528,145530],{"className":128750,"code":145529,"language":128752,"meta":28,"style":28},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[30,145531,145532,145537],{"__ignoreMap":28},[33,145533,145534],{"class":35,"line":36},[33,145535,145536],{"class":2487},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[33,145538,145539,145542],{"class":35,"line":51},[33,145540,145541],{"class":53522},"background-size",[33,145543,145544],{"class":47},": 50% 50%;\n",[24236,145546,145548],{"id":145547},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3736,145550],{"style":128606,"src":145551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[328,145553,145554,145557,145560,145563],{},[331,145555,145556],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[331,145558,145559],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[331,145561,145562],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[331,145564,145565],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[24236,145567,145569],{"id":145568},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3736,145571],{"style":128606,"src":145572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2331,145574,145575],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":145577},[145578,145579,145580],{"id":145391,"depth":51,"text":145392},{"id":145401,"depth":51,"text":145402},{"id":145414,"depth":51,"text":145415,"children":145581},[145582,145583,145584,145585,145586],{"id":145421,"depth":64,"text":145422},{"id":145428,"depth":64,"text":145429},{"id":145435,"depth":64,"text":145436},{"id":145453,"depth":64,"text":145454},{"id":145505,"depth":64,"text":145506},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":145383,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145593,"title":145594,"body":145595,"description":2359,"extension":2360,"meta":146472,"navigation":99,"path":146473,"seo":146474,"stem":146475,"__hash__":146476},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145596,"toc":146456},[145597,145600,145604,145611,145614,145621,145624,145629,145632,145636,145640,145647,145650,145653,145657,145660,145663,145666,145669,145672,145676,145679,145683,145685,145688,145691,145694,145697,145699,145702,145704,145734,145736,145766,145770,145773,145777,145780,145797,145800,145803,145879,145881,145884,145887,145890,145893,145895,145898,145901,145905,145927,145930,145933,145937,145940,145946,145949,145953,145956,145959,145963,145966,145969,145972,145976,145979,145982,145985,145988,145992,145995,145999,146006,146009,146012,146015,146018,146028,146031,146034,146041,146044,146048,146051,146054,146058,146061,146064,146067,146112,146115,146118,146121,146123,146252,146254,146292,146295,146298,146300,146418,146420,146454],[10,145598,145594],{"id":145599},"_20-移动端布局实战上篇",[14,145601,145603],{"id":145602},"_201-移动端主流方案","20.1 移动端主流方案",[328,145605,145606],{},[331,145607,145608],{},[2575,145609,145610],{},"单独移动端页面（主流）",[3736,145612],{"style":128606,"src":145613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[328,145615,145616],{"start":51},[331,145617,145618],{},[2575,145619,145620],{},"响应式兼容PC移动端",[3736,145622],{"style":128606,"src":145623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[328,145625,145626],{"start":64},[331,145627,145628],{},"两种页面选型布局方式",[3736,145630],{"style":128606,"src":145631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145633,145635],{"id":145634},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[631,145637,145639],{"id":145638},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145641,145642,145643],{},"官网地址： ",[2663,145644,145645],{"href":145645,"rel":145646},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[26103],[3736,145648],{"style":128606,"src":145649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3736,145651],{"style":128606,"src":145652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[631,145654,145656],{"id":145655},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3736,145658],{"style":128606,"src":145659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3736,145661],{"style":128606,"src":145662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145664,145665],{},"去除高亮：",[19,145667,145668],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145670,145671],{},"-webkit- tap-highlight-color: transparent;",[14,145673,145675],{"id":145674},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3736,145677],{"style":128606,"src":145678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145680,145682],{"id":145681},"_204-流式布局案例","20.4 流式布局案例",[19,145684,2461],{},[19,145686,145687],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145689,145690],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145692,145693],{},"图片格式：",[3736,145695],{"style":128606,"src":145696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145698,137793],{},[3736,145700],{"style":128606,"src":145701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145703,142120],{},[23,145705,145706],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,145707,145708],{"__ignoreMap":28},[33,145709,145710,145712,145714,145716,145718,145720,145722,145724,145726,145728,145730,145732],{"class":35,"line":36},[33,145711,2226],{"class":47},[33,145713,3736],{"class":53522},[33,145715,57458],{"class":43},[33,145717,57],{"class":47},[33,145719,136267],{"class":60},[33,145721,57466],{"class":43},[33,145723,57],{"class":47},[33,145725,136274],{"class":60},[33,145727,136277],{"class":43},[33,145729,57],{"class":47},[33,145731,136282],{"class":60},[33,145733,53529],{"class":47},[19,145735,142209],{},[23,145737,145738],{"className":129497,"code":136252,"language":129499,"meta":28,"style":28},[30,145739,145740],{"__ignoreMap":28},[33,145741,145742,145744,145746,145748,145750,145752,145754,145756,145758,145760,145762,145764],{"class":35,"line":36},[33,145743,2226],{"class":47},[33,145745,3736],{"class":53522},[33,145747,57458],{"class":43},[33,145749,57],{"class":47},[33,145751,136267],{"class":60},[33,145753,57466],{"class":43},[33,145755,57],{"class":47},[33,145757,136274],{"class":60},[33,145759,136277],{"class":43},[33,145761,57],{"class":47},[33,145763,136282],{"class":60},[33,145765,53529],{"class":47},[14,145767,145769],{"id":145768},"_205-flex布局","20.5 flex布局",[3736,145771],{"style":128606,"src":145772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[631,145774,145776],{"id":145775},"_2051-布局原理","20.5.1 布局原理",[19,145778,145779],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3413,145781,145782,145785,145788,145791,145794],{},[331,145783,145784],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[331,145786,145787],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[331,145789,145790],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[331,145792,145793],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[331,145795,145796],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145798,145799],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145801,145802],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[23,145804,145806],{"className":128750,"code":145805,"language":128752,"meta":28,"style":28},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[30,145807,145808,145813,145820,145830,145842,145853,145864,145875],{"__ignoreMap":28},[33,145809,145810],{"class":35,"line":36},[33,145811,145812],{"class":2487},"\u002F* Flex 弹性布局 *\u002F\n",[33,145814,145815,145818],{"class":35,"line":51},[33,145816,145817],{"class":43},".container",[33,145819,17810],{"class":47},[33,145821,145822,145824,145826,145828],{"class":35,"line":64},[33,145823,130366],{"class":72},[33,145825,996],{"class":47},[33,145827,53698],{"class":72},[33,145829,3567],{"class":47},[33,145831,145832,145835,145837,145840],{"class":35,"line":76},[33,145833,145834],{"class":72},"  flex-direction",[33,145836,996],{"class":47},[33,145838,145839],{"class":72},"row",[33,145841,3567],{"class":47},[33,145843,145844,145847,145849,145851],{"class":35,"line":87},[33,145845,145846],{"class":72},"  justify-content",[33,145848,996],{"class":47},[33,145850,53889],{"class":72},[33,145852,3567],{"class":47},[33,145854,145855,145858,145860,145862],{"class":35,"line":96},[33,145856,145857],{"class":72},"  align-items",[33,145859,996],{"class":47},[33,145861,53813],{"class":72},[33,145863,3567],{"class":47},[33,145865,145866,145869,145871,145873],{"class":35,"line":103},[33,145867,145868],{"class":72},"  flex-wrap",[33,145870,996],{"class":47},[33,145872,80821],{"class":72},[33,145874,3567],{"class":47},[33,145876,145877],{"class":35,"line":108},[33,145878,1010],{"class":47},[19,145880,72666],{},[19,145882,145883],{},".form-item .male-label {",[19,145885,145886],{},"   margin-right: 20px;",[19,145888,145889],{},"   display: inline-flex;",[19,145891,145892],{},"   align-items: center;",[19,145894,210],{},[3736,145896],{"style":128606,"src":145897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3736,145899],{"style":128606,"src":145900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[631,145902,145904],{"id":145903},"_2052-常见父项属性","20.5.2 常见父项属性",[328,145906,145907,145910,145913,145916,145919,145922,145925],{},[331,145908,145909],{},"flex-direction：设置主轴的方向",[331,145911,145912],{},"justify-content：设置主轴上的子元素排列方式",[331,145914,145915],{},"flex-wrap：设置子元素是否换行",[331,145917,145918],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[331,145920,145921],{},"align-items：设置侧轴上的子元素排列方式（单行）",[331,145923,145924],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[331,145926,145909],{},[3736,145928],{"style":128606,"src":145929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3736,145931],{"style":128606,"src":145932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[328,145934,145935],{"start":51},[331,145936,145912],{},[3736,145938],{"style":128606,"src":145939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145941,145942,145945],{},[30,145943,145944],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145947,145948],{},"跟着主轴走",[328,145950,145951],{"start":64},[331,145952,145915],{},[3736,145954],{"style":128606,"src":145955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145957,145958],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[328,145960,145961],{"start":76},[331,145962,145918],{},[3736,145964],{"style":128606,"src":145965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145967,145968],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145970,145971],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[328,145973,145974],{"start":87},[331,145975,145921],{},[3736,145977],{"style":128606,"src":145978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145980,145981],{},"align-items与align-content之间的区别：",[19,145983,145984],{},"单找items，多找content",[3736,145986],{"style":128606,"src":145987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[328,145989,145990],{"start":96},[331,145991,145924],{},[3736,145993],{"style":128606,"src":145994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[631,145996,145998],{"id":145997},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[328,146000,146001],{},[331,146002,146003],{},[2575,146004,146005],{},"flex 属性",[19,146007,146008],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3736,146010],{"style":128606,"src":146011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,146013,146014],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,146016,146017],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[328,146019,146020],{"start":51},[331,146021,146022,16035,146025],{},[2575,146023,146024],{},"align-self",[2575,146026,146027],{},"控制子项自己在侧轴上的排列方式",[3736,146029],{"style":128606,"src":146030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,146032,146033],{},"单个子盒子在父盒子侧轴上的排列方式",[328,146035,146036],{"start":64},[331,146037,146038,146040],{},[2575,146039,97505],{}," 属性定义项目的排列顺序",[3736,146042],{"style":128606,"src":146043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[631,146045,146047],{"id":146046},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3736,146049],{"style":128606,"src":146050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,146052,146053],{},"必须要添加浏览器的私有前缀",[631,146055,146057],{"id":146056},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,146059,146060],{},"学到最重要的知识：",[19,146062,146063],{},"flex处理这样的布局思路",[3736,146065],{"style":128606,"src":146066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[23,146068,146070],{"className":128750,"code":146069,"language":128752,"meta":28,"style":28},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[30,146071,146072,146078,146088,146098,146108],{"__ignoreMap":28},[33,146073,146074,146076],{"class":35,"line":36},[33,146075,145817],{"class":43},[33,146077,17810],{"class":47},[33,146079,146080,146082,146084,146086],{"class":35,"line":51},[33,146081,130366],{"class":72},[33,146083,996],{"class":47},[33,146085,53698],{"class":72},[33,146087,3567],{"class":47},[33,146089,146090,146092,146094,146096],{"class":35,"line":64},[33,146091,145846],{"class":72},[33,146093,996],{"class":47},[33,146095,53813],{"class":72},[33,146097,3567],{"class":47},[33,146099,146100,146102,146104,146106],{"class":35,"line":76},[33,146101,145857],{"class":72},[33,146103,996],{"class":47},[33,146105,53813],{"class":72},[33,146107,3567],{"class":47},[33,146109,146110],{"class":35,"line":87},[33,146111,1010],{"class":47},[19,146113,146114],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,146116,146117],{},"使用属性选择器",[3736,146119],{"style":128606,"src":146120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,146122,71106],{},[23,146124,146126],{"className":129497,"code":146125,"language":129499,"meta":28,"style":28},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[30,146127,146128,146133,146147,146152,146172,146177,146196,146201,146220,146225,146244],{"__ignoreMap":28},[33,146129,146130],{"class":35,"line":36},[33,146131,146132],{"class":2487},"\u003C!-- 携程网移动端案例结构 -->\n",[33,146134,146135,146137,146139,146141,146143,146145],{"class":35,"line":51},[33,146136,2226],{"class":47},[33,146138,53832],{"class":53522},[33,146140,55705],{"class":43},[33,146142,57],{"class":47},[33,146144,94531],{"class":60},[33,146146,53529],{"class":47},[33,146148,146149],{"class":35,"line":64},[33,146150,146151],{"class":2487},"  \u003C!-- 搜索栏 -->\n",[33,146153,146154,146156,146158,146160,146162,146165,146168,146170],{"class":35,"line":76},[33,146155,54364],{"class":47},[33,146157,53832],{"class":53522},[33,146159,55705],{"class":43},[33,146161,57],{"class":47},[33,146163,146164],{"class":60},"\"search-index\"",[33,146166,146167],{"class":47},">...\u003C\u002F",[33,146169,53832],{"class":53522},[33,146171,53529],{"class":47},[33,146173,146174],{"class":35,"line":87},[33,146175,146176],{"class":2487},"  \u003C!-- 焦点图 -->\n",[33,146178,146179,146181,146183,146185,146187,146190,146192,146194],{"class":35,"line":96},[33,146180,54364],{"class":47},[33,146182,53832],{"class":53522},[33,146184,55705],{"class":43},[33,146186,57],{"class":47},[33,146188,146189],{"class":60},"\"focus\"",[33,146191,146167],{"class":47},[33,146193,53832],{"class":53522},[33,146195,53529],{"class":47},[33,146197,146198],{"class":35,"line":103},[33,146199,146200],{"class":2487},"  \u003C!-- 主导航 -->\n",[33,146202,146203,146205,146207,146209,146211,146214,146216,146218],{"class":35,"line":108},[33,146204,54364],{"class":47},[33,146206,53832],{"class":53522},[33,146208,55705],{"class":43},[33,146210,57],{"class":47},[33,146212,146213],{"class":60},"\"local-nav\"",[33,146215,146167],{"class":47},[33,146217,53832],{"class":53522},[33,146219,53529],{"class":47},[33,146221,146222],{"class":35,"line":119},[33,146223,146224],{"class":2487},"  \u003C!-- 子导航 -->\n",[33,146226,146227,146229,146231,146233,146235,146238,146240,146242],{"class":35,"line":128},[33,146228,54364],{"class":47},[33,146230,53832],{"class":53522},[33,146232,55705],{"class":43},[33,146234,57],{"class":47},[33,146236,146237],{"class":60},"\"nav-common\"",[33,146239,146167],{"class":47},[33,146241,53832],{"class":53522},[33,146243,53529],{"class":47},[33,146245,146246,146248,146250],{"class":35,"line":1753},[33,146247,54006],{"class":47},[33,146249,53832],{"class":53522},[33,146251,53529],{"class":47},[19,146253,72666],{},[23,146255,146256],{"className":128750,"code":139202,"language":128752,"meta":28,"style":28},[30,146257,146258,146272,146288],{"__ignoreMap":28},[33,146259,146260,146262,146264,146266,146268,146270],{"class":35,"line":36},[33,146261,56040],{"class":53522},[33,146263,3300],{"class":47},[33,146265,136],{"class":43},[33,146267,57],{"class":39},[33,146269,64916],{"class":60},[33,146271,139219],{"class":47},[33,146273,146274,146276,146278,146280,146282,146284,146286],{"class":35,"line":51},[33,146275,73109],{"class":72},[33,146277,996],{"class":47},[33,146279,720],{"class":72},[33,146281,53713],{"class":39},[33,146283,53742],{"class":72},[33,146285,132330],{"class":72},[33,146287,3567],{"class":47},[33,146289,146290],{"class":35,"line":64},[33,146291,1010],{"class":47},[19,146293,146294],{},"总代码和效果展示：",[3736,146296],{"style":128606,"src":146297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,146299,71106],{},[23,146301,146302],{"className":129497,"code":146125,"language":129499,"meta":28,"style":28},[30,146303,146304,146308,146322,146326,146344,146348,146366,146370,146388,146392,146410],{"__ignoreMap":28},[33,146305,146306],{"class":35,"line":36},[33,146307,146132],{"class":2487},[33,146309,146310,146312,146314,146316,146318,146320],{"class":35,"line":51},[33,146311,2226],{"class":47},[33,146313,53832],{"class":53522},[33,146315,55705],{"class":43},[33,146317,57],{"class":47},[33,146319,94531],{"class":60},[33,146321,53529],{"class":47},[33,146323,146324],{"class":35,"line":64},[33,146325,146151],{"class":2487},[33,146327,146328,146330,146332,146334,146336,146338,146340,146342],{"class":35,"line":76},[33,146329,54364],{"class":47},[33,146331,53832],{"class":53522},[33,146333,55705],{"class":43},[33,146335,57],{"class":47},[33,146337,146164],{"class":60},[33,146339,146167],{"class":47},[33,146341,53832],{"class":53522},[33,146343,53529],{"class":47},[33,146345,146346],{"class":35,"line":87},[33,146347,146176],{"class":2487},[33,146349,146350,146352,146354,146356,146358,146360,146362,146364],{"class":35,"line":96},[33,146351,54364],{"class":47},[33,146353,53832],{"class":53522},[33,146355,55705],{"class":43},[33,146357,57],{"class":47},[33,146359,146189],{"class":60},[33,146361,146167],{"class":47},[33,146363,53832],{"class":53522},[33,146365,53529],{"class":47},[33,146367,146368],{"class":35,"line":103},[33,146369,146200],{"class":2487},[33,146371,146372,146374,146376,146378,146380,146382,146384,146386],{"class":35,"line":108},[33,146373,54364],{"class":47},[33,146375,53832],{"class":53522},[33,146377,55705],{"class":43},[33,146379,57],{"class":47},[33,146381,146213],{"class":60},[33,146383,146167],{"class":47},[33,146385,53832],{"class":53522},[33,146387,53529],{"class":47},[33,146389,146390],{"class":35,"line":119},[33,146391,146224],{"class":2487},[33,146393,146394,146396,146398,146400,146402,146404,146406,146408],{"class":35,"line":128},[33,146395,54364],{"class":47},[33,146397,53832],{"class":53522},[33,146399,55705],{"class":43},[33,146401,57],{"class":47},[33,146403,146237],{"class":60},[33,146405,146167],{"class":47},[33,146407,53832],{"class":53522},[33,146409,53529],{"class":47},[33,146411,146412,146414,146416],{"class":35,"line":1753},[33,146413,54006],{"class":47},[33,146415,53832],{"class":53522},[33,146417,53529],{"class":47},[19,146419,72666],{},[23,146421,146422],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,146423,146424,146428,146442,146446],{"__ignoreMap":28},[33,146425,146426],{"class":35,"line":36},[33,146427,132861],{"class":2487},[33,146429,146430,146432,146434,146436,146438,146440],{"class":35,"line":51},[33,146431,2226],{"class":47},[33,146433,53832],{"class":53522},[33,146435,55705],{"class":43},[33,146437,57],{"class":47},[33,146439,132874],{"class":60},[33,146441,53529],{"class":47},[33,146443,146444],{"class":35,"line":64},[33,146445,132881],{"class":47},[33,146447,146448,146450,146452],{"class":35,"line":76},[33,146449,54006],{"class":47},[33,146451,53832],{"class":53522},[33,146453,53529],{"class":47},[2331,146455,140151],{},{"title":28,"searchDepth":51,"depth":51,"links":146457},[146458,146459,146463,146464,146465],{"id":145602,"depth":51,"text":145603},{"id":145634,"depth":51,"text":145635,"children":146460},[146461,146462],{"id":145638,"depth":64,"text":145639},{"id":145655,"depth":64,"text":145656},{"id":145674,"depth":51,"text":145675},{"id":145681,"depth":51,"text":145682},{"id":145768,"depth":51,"text":145769,"children":146466},[146467,146468,146469,146470,146471],{"id":145775,"depth":64,"text":145776},{"id":145903,"depth":64,"text":145904},{"id":145997,"depth":64,"text":145998},{"id":146046,"depth":64,"text":146047},{"id":146056,"depth":64,"text":146057},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145594,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146478,"title":146479,"body":146480,"description":2359,"extension":2360,"meta":147707,"navigation":99,"path":147708,"seo":147709,"stem":147710,"__hash__":147711},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146481,"toc":147685},[146482,146485,146489,146493,146496,146499,146503,146508,146511,146514,146517,146520,146523,146580,146583,146588,146591,146594,146598,146609,146613,146616,146619,146626,146631,146635,146638,146644,146647,146651,146654,146661,146664,146667,146674,146677,146684,146687,146690,146697,146700,146703,146705,146722,146726,146729,146732,146735,146739,146742,146745,146748,146751,146754,146757,146759,146762,146765,146827,146830,146940,146947,146953,146956,146959,146963,146966,146970,146975,146978,146985,146988,146994,146999,147002,147005,147008,147011,147014,147017,147020,147023,147079,147081,147107,147111,147114,147117,147120,147128,147131,147134,147138,147194,147197,147201,147207,147218,147221,147226,147229,147232,147238,147241,147244,147247,147250,147253,147256,147259,147262,147287,147293,147296,147299,147302,147305,147308,147311,147316,147319,147322,147325,147333,147336,147343,147346,147349,147351,147375,147377,147380,147383,147386,147389,147392,147395,147398,147432,147435,147438,147472,147479,147482,147485,147488,147491,147494,147497,147504,147507,147510,147513,147516,147523,147526,147529,147536,147539,147542,147546,147549,147552,147555,147558,147561,147564,147567,147570,147572,147596,147598,147622,147626,147637,147640,147643,147646,147649,147652,147655,147658,147661,147664,147667,147670,147673,147676,147679,147682],[10,146483,146479],{"id":146484},"_21-移动端布局实战下篇",[14,146486,146488],{"id":146487},"_211-rem适配布局","21.1 rem适配布局",[631,146490,146492],{"id":146491},"_2111-rem单位","21.1.1 rem单位",[3736,146494],{"style":128606,"src":146495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146497,146498],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[631,146500,146502],{"id":146501},"_2112-媒体查询","21.1.2 媒体查询",[328,146504,146505],{},[331,146506,146507],{},"参数介绍",[3736,146509],{"style":128606,"src":146510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3736,146512],{"style":128606,"src":146513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3736,146515],{"style":128606,"src":146516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3736,146518],{"style":128606,"src":146519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3736,146521],{"style":128606,"src":146522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[23,146524,146526],{"className":128750,"code":146525,"language":128752,"meta":28,"style":28},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[30,146527,146528,146533,146552,146559,146572,146576],{"__ignoreMap":28},[33,146529,146530],{"class":35,"line":36},[33,146531,146532],{"class":2487},"\u002F* 媒体查询 *\u002F\n",[33,146534,146535,146538,146540,146543,146545,146548,146550],{"class":35,"line":51},[33,146536,146537],{"class":39},"@media",[33,146539,3924],{"class":47},[33,146541,146542],{"class":72},"max-width",[33,146544,996],{"class":47},[33,146546,146547],{"class":72},"768",[33,146549,53713],{"class":39},[33,146551,14682],{"class":47},[33,146553,146554,146557],{"class":35,"line":64},[33,146555,146556],{"class":43},"  .container",[33,146558,17810],{"class":47},[33,146560,146561,146564,146566,146568,146570],{"class":35,"line":76},[33,146562,146563],{"class":72},"    width",[33,146565,996],{"class":47},[33,146567,2734],{"class":72},[33,146569,1429],{"class":39},[33,146571,3567],{"class":47},[33,146573,146574],{"class":35,"line":87},[33,146575,129546],{"class":47},[33,146577,146578],{"class":35,"line":96},[33,146579,1010],{"class":47},[19,146581,146582],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[328,146584,146585],{"start":51},[331,146586,146587],{},"引入资源",[3736,146589],{"style":128606,"src":146590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146592,146593],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[631,146595,146597],{"id":146596},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3413,146599,146600,146603,146606],{},[331,146601,146602],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[331,146604,146605],{},"媒体查询可以根据不同设备宽度来修改样式",[331,146607,146608],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146610,146612],{"id":146611},"_212-less基础","21.2 Less基础",[19,146614,146615],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146617,146618],{},"Less可以解决该问题，它是css的扩展语言",[19,146620,146621,146622],{},"Less中文网址： ",[2663,146623,146624],{"href":146624,"rel":146625},"http:\u002F\u002Flesscss.cn\u002F",[26103],[19,146627,146628],{},[2575,146629,146630],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[631,146632,146634],{"id":146633},"_2121-less安装","21.2.1 less安装",[19,146636,146637],{},"如果使用vscode，则无需进行下方安装步骤",[19,146639,146640],{},[2663,146641,146642],{"href":146642,"rel":146643},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[26103],[3736,146645],{"style":128606,"src":146646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[631,146648,146650],{"id":146649},"_2122-less使用","21.2.2 less使用",[19,146652,146653],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[328,146655,146656],{},[331,146657,146658],{},[2575,146659,146660],{},"Less 变量",[3736,146662],{"style":128606,"src":146663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3736,146665],{"style":128606,"src":146666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[328,146668,146669],{"start":51},[331,146670,146671],{},[2575,146672,146673],{},"Less 编译",[3736,146675],{"style":128606,"src":146676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[328,146678,146679],{"start":64},[331,146680,146681],{},[2575,146682,146683],{},"Less 嵌套",[3736,146685],{"style":128606,"src":146686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3736,146688],{"style":128606,"src":146689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[328,146691,146692],{"start":76},[331,146693,146694],{},[2575,146695,146696],{},"Less 运算",[3736,146698],{"style":128606,"src":146699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146701,146702],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146704,2461],{},[3413,146706,146707,146710,146713,146716,146719],{},[331,146708,146709],{},"乘号（*）和除号（\u002F）的写法",[331,146711,146712],{},"运算符中间左右有个空格隔开 1px + 5",[331,146714,146715],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[331,146717,146718],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[331,146720,146721],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146723,146725],{"id":146724},"_213-rem-适配方案","21.3 rem 适配方案",[19,146727,146728],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146730,146731],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3736,146733],{"style":128606,"src":146734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[631,146736,146738],{"id":146737},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146740,146741],{},"rem + 媒体查询 + less 技术",[3736,146743],{"style":128606,"src":146744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146746,146747],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146749,146750],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3736,146752],{"style":128606,"src":146753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146755,146756],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146758,16873],{},[3736,146760],{"style":128606,"src":146761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146763,146764],{},"index.html:",[23,146766,146768],{"className":128750,"code":146767,"language":128752,"meta":28,"style":28},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[30,146769,146770,146775,146781,146797,146801,146807,146823],{"__ignoreMap":28},[33,146771,146772],{"class":35,"line":36},[33,146773,146774],{"class":2487},"\u002F* rem 适配方案 *\u002F\n",[33,146776,146777,146779],{"class":35,"line":51},[33,146778,52857],{"class":53522},[33,146780,17810],{"class":47},[33,146782,146783,146785,146787,146790,146792,146794],{"class":35,"line":64},[33,146784,72839],{"class":72},[33,146786,996],{"class":47},[33,146788,146789],{"class":72},"62.5",[33,146791,1429],{"class":39},[33,146793,132613],{"class":47},[33,146795,146796],{"class":2487},"\u002F* 1rem = 10px *\u002F\n",[33,146798,146799],{"class":35,"line":76},[33,146800,1010],{"class":47},[33,146802,146803,146805],{"class":35,"line":87},[33,146804,132598],{"class":43},[33,146806,17810],{"class":47},[33,146808,146809,146811,146813,146815,146818,146820],{"class":35,"line":96},[33,146810,72781],{"class":72},[33,146812,996],{"class":47},[33,146814,1279],{"class":72},[33,146816,146817],{"class":39},"rem",[33,146819,132613],{"class":47},[33,146821,146822],{"class":2487},"\u002F* 100px *\u002F\n",[33,146824,146825],{"class":35,"line":103},[33,146826,1010],{"class":47},[19,146828,146829],{},"common.less",[23,146831,146833],{"className":128750,"code":146832,"language":128752,"meta":28,"style":28},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[30,146834,146835,146841,146856,146860,146866,146880,146884,146888,146892,146898,146912,146916,146922,146936],{"__ignoreMap":28},[33,146836,146837,146839],{"class":35,"line":36},[33,146838,52857],{"class":53522},[33,146840,17810],{"class":47},[33,146842,146843,146845,146847,146849,146851,146853],{"class":35,"line":51},[33,146844,72839],{"class":72},[33,146846,996],{"class":47},[33,146848,146789],{"class":72},[33,146850,1429],{"class":39},[33,146852,28305],{"class":47},[33,146854,146855],{"class":2487},"\u002F* 10px *\u002F\n",[33,146857,146858],{"class":35,"line":64},[33,146859,1010],{"class":47},[33,146861,146862,146864],{"class":35,"line":76},[33,146863,53832],{"class":53522},[33,146865,17810],{"class":47},[33,146867,146868,146870,146872,146874,146876,146878],{"class":35,"line":87},[33,146869,72781],{"class":72},[33,146871,996],{"class":47},[33,146873,1279],{"class":72},[33,146875,146817],{"class":39},[33,146877,28305],{"class":47},[33,146879,146822],{"class":2487},[33,146881,146882],{"class":35,"line":96},[33,146883,1010],{"class":47},[33,146885,146886],{"class":35,"line":103},[33,146887,138211],{"class":47},[33,146889,146890],{"class":35,"line":108},[33,146891,146774],{"class":2487},[33,146893,146894,146896],{"class":35,"line":119},[33,146895,52857],{"class":53522},[33,146897,17810],{"class":47},[33,146899,146900,146902,146904,146906,146908,146910],{"class":35,"line":128},[33,146901,72839],{"class":72},[33,146903,996],{"class":47},[33,146905,146789],{"class":72},[33,146907,1429],{"class":39},[33,146909,132613],{"class":47},[33,146911,146796],{"class":2487},[33,146913,146914],{"class":35,"line":1753},[33,146915,1010],{"class":47},[33,146917,146918,146920],{"class":35,"line":1763},[33,146919,132598],{"class":43},[33,146921,17810],{"class":47},[33,146923,146924,146926,146928,146930,146932,146934],{"class":35,"line":1775},[33,146925,72781],{"class":72},[33,146927,996],{"class":47},[33,146929,1279],{"class":72},[33,146931,146817],{"class":39},[33,146933,132613],{"class":47},[33,146935,146822],{"class":2487},[33,146937,146938],{"class":35,"line":1780},[33,146939,1010],{"class":47},[19,146941,146942,146943,146946],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25791,146944,146945],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[23,146948,146951],{"className":146949,"code":146950,"language":7436},[7434],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[30,146952,146950],{"__ignoreMap":28},[19,146954,146955],{},"less保存时会自动变成.css文件",[19,146957,146958],{},"好好搞懂上述代码写法",[631,146960,146962],{"id":146961},"_2132-样式导入样式","21.3.2 样式导入样式",[3736,146964],{"style":128606,"src":146965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[631,146967,146969],{"id":146968},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[328,146971,146972],{},[331,146973,146974],{},"准备工作",[3736,146976],{"style":128606,"src":146977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146979,146980,146981],{},"github地址：",[2663,146982,146983],{"href":146983,"rel":146984},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[26103],[19,146986,146987],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146989,146990,146991],{},"js文件引入到index.html中使用的是",[30,146992,146993],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[328,146995,146996],{"start":51},[331,146997,146998],{},"vscode插件",[3736,147000],{"style":128606,"src":147001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,147003,147004],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,147006,147007],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3736,147009],{"style":128606,"src":147010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,147012,147013],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3736,147015],{"style":128606,"src":147016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,147018,147019],{},"修改成75就可以，alt+z为快捷键",[19,147021,147022],{},"index.css：",[23,147024,147025],{"className":128750,"code":146767,"language":128752,"meta":28,"style":28},[30,147026,147027,147031,147037,147051,147055,147061,147075],{"__ignoreMap":28},[33,147028,147029],{"class":35,"line":36},[33,147030,146774],{"class":2487},[33,147032,147033,147035],{"class":35,"line":51},[33,147034,52857],{"class":53522},[33,147036,17810],{"class":47},[33,147038,147039,147041,147043,147045,147047,147049],{"class":35,"line":64},[33,147040,72839],{"class":72},[33,147042,996],{"class":47},[33,147044,146789],{"class":72},[33,147046,1429],{"class":39},[33,147048,132613],{"class":47},[33,147050,146796],{"class":2487},[33,147052,147053],{"class":35,"line":76},[33,147054,1010],{"class":47},[33,147056,147057,147059],{"class":35,"line":87},[33,147058,132598],{"class":43},[33,147060,17810],{"class":47},[33,147062,147063,147065,147067,147069,147071,147073],{"class":35,"line":96},[33,147064,72781],{"class":72},[33,147066,996],{"class":47},[33,147068,1279],{"class":72},[33,147070,146817],{"class":39},[33,147072,132613],{"class":47},[33,147074,146822],{"class":2487},[33,147076,147077],{"class":35,"line":103},[33,147078,1010],{"class":47},[19,147080,146764],{},[23,147082,147083],{"className":128750,"code":129154,"language":128752,"meta":28,"style":28},[30,147084,147085,147091,147103],{"__ignoreMap":28},[33,147086,147087,147089],{"class":35,"line":36},[33,147088,54021],{"class":53522},[33,147090,17810],{"class":47},[33,147092,147093,147095,147097,147099,147101],{"class":35,"line":51},[33,147094,72839],{"class":72},[33,147096,996],{"class":47},[33,147098,3018],{"class":72},[33,147100,53713],{"class":39},[33,147102,3567],{"class":47},[33,147104,147105],{"class":35,"line":64},[33,147106,1010],{"class":47},[14,147108,147110],{"id":147109},"_214-响应式开发","21.4 响应式开发",[19,147112,147113],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3736,147115],{"style":128606,"src":147116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,147118,147119],{},"做法：",[3413,147121,147122,147125],{},[331,147123,147124],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[331,147126,147127],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3736,147129],{"style":128606,"src":147130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,147132,147133],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[631,147135,147137],{"id":147136},"_2141-简单代码示范","21.4.1 简单代码示范",[23,147139,147140],{"className":128750,"code":146767,"language":128752,"meta":28,"style":28},[30,147141,147142,147146,147152,147166,147170,147176,147190],{"__ignoreMap":28},[33,147143,147144],{"class":35,"line":36},[33,147145,146774],{"class":2487},[33,147147,147148,147150],{"class":35,"line":51},[33,147149,52857],{"class":53522},[33,147151,17810],{"class":47},[33,147153,147154,147156,147158,147160,147162,147164],{"class":35,"line":64},[33,147155,72839],{"class":72},[33,147157,996],{"class":47},[33,147159,146789],{"class":72},[33,147161,1429],{"class":39},[33,147163,132613],{"class":47},[33,147165,146796],{"class":2487},[33,147167,147168],{"class":35,"line":76},[33,147169,1010],{"class":47},[33,147171,147172,147174],{"class":35,"line":87},[33,147173,132598],{"class":43},[33,147175,17810],{"class":47},[33,147177,147178,147180,147182,147184,147186,147188],{"class":35,"line":96},[33,147179,72781],{"class":72},[33,147181,996],{"class":47},[33,147183,1279],{"class":72},[33,147185,146817],{"class":39},[33,147187,132613],{"class":47},[33,147189,146822],{"class":2487},[33,147191,147192],{"class":35,"line":103},[33,147193,1010],{"class":47},[19,147195,147196],{},"父盒子一般命名为container",[631,147198,147200],{"id":147199},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,147202,147203,147204],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2575,147205,147206],{},"使得 Web 开发更加快捷",[3413,147208,147209],{},[331,147210,147211,147212],{},"官网：",[2575,147213,147214],{},[2663,147215,147216],{"href":147216,"rel":147217},"http:\u002F\u002Fgetbootstrap.com\u002F",[26103],[19,147219,147220],{},"可以直接去官网拿现成的东西",[328,147222,147223],{},[331,147224,147225],{},"Bootstrap的使用",[19,147227,147228],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,147230,147231],{},"Bootstrap 使用四步曲：",[19,147233,147234,147237],{},[2575,147235,147236],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3736,147239],{"style":128606,"src":147240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,147242,147243],{},"打开Bootstrap官网，然后下载",[3736,147245],{"style":128606,"src":147246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3736,147248],{"style":128606,"src":147249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,147251,147252],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,147254,147255],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,147257,147258],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3736,147260],{"style":128606,"src":147261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[23,147263,147265],{"className":128750,"code":147264,"language":128752,"meta":28,"style":28},".center {\n  color: red;\n}\n",[30,147266,147267,147273,147283],{"__ignoreMap":28},[33,147268,147269,147271],{"class":35,"line":36},[33,147270,129041],{"class":43},[33,147272,17810],{"class":47},[33,147274,147275,147277,147279,147281],{"class":35,"line":51},[33,147276,73118],{"class":72},[33,147278,996],{"class":47},[33,147280,59639],{"class":72},[33,147282,3567],{"class":47},[33,147284,147285],{"class":35,"line":64},[33,147286,1010],{"class":47},[19,147288,147289,147292],{},[30,147290,147291],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3736,147294],{"style":128606,"src":147295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3736,147297],{"style":128606,"src":147298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3736,147300],{"style":128606,"src":147301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,147303,147304],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3736,147306],{"style":128606,"src":147307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,147309,147310],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[328,147312,147313],{"start":51},[331,147314,147315],{},"布局容器",[3736,147317],{"style":128606,"src":147318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,147320,147321],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,147323,147324],{},"container-fluid用于移动式布局比较方便",[328,147326,147327],{"start":64},[331,147328,147329,147330],{},"bootstrap ",[2575,147331,147332],{},"栅格系统原理",[3736,147334],{"style":128606,"src":147335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[328,147337,147338],{"start":76},[331,147339,147340],{},[2575,147341,147342],{},"栅格选项参数",[3736,147344],{"style":128606,"src":147345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,147347,147348],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,147350,16873],{},[23,147352,147353],{"className":128750,"code":147264,"language":128752,"meta":28,"style":28},[30,147354,147355,147361,147371],{"__ignoreMap":28},[33,147356,147357,147359],{"class":35,"line":36},[33,147358,129041],{"class":43},[33,147360,17810],{"class":47},[33,147362,147363,147365,147367,147369],{"class":35,"line":51},[33,147364,73118],{"class":72},[33,147366,996],{"class":47},[33,147368,59639],{"class":72},[33,147370,3567],{"class":47},[33,147372,147373],{"class":35,"line":64},[33,147374,1010],{"class":47},[19,147376,137793],{},[3736,147378],{"style":128606,"src":147379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,147381,147382],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,147384,147385],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,147387,147388],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,147390,147391],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,147393,147394],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,147396,147397],{},"汇总展示说明：",[23,147399,147400],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,147401,147402,147406,147420,147424],{"__ignoreMap":28},[33,147403,147404],{"class":35,"line":36},[33,147405,132861],{"class":2487},[33,147407,147408,147410,147412,147414,147416,147418],{"class":35,"line":51},[33,147409,2226],{"class":47},[33,147411,53832],{"class":53522},[33,147413,55705],{"class":43},[33,147415,57],{"class":47},[33,147417,132874],{"class":60},[33,147419,53529],{"class":47},[33,147421,147422],{"class":35,"line":64},[33,147423,132881],{"class":47},[33,147425,147426,147428,147430],{"class":35,"line":76},[33,147427,54006],{"class":47},[33,147429,53832],{"class":53522},[33,147431,53529],{"class":47},[3736,147433],{"style":128606,"src":147434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147436,147437],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[23,147439,147440],{"className":129497,"code":132854,"language":129499,"meta":28,"style":28},[30,147441,147442,147446,147460,147464],{"__ignoreMap":28},[33,147443,147444],{"class":35,"line":36},[33,147445,132861],{"class":2487},[33,147447,147448,147450,147452,147454,147456,147458],{"class":35,"line":51},[33,147449,2226],{"class":47},[33,147451,53832],{"class":53522},[33,147453,55705],{"class":43},[33,147455,57],{"class":47},[33,147457,132874],{"class":60},[33,147459,53529],{"class":47},[33,147461,147462],{"class":35,"line":64},[33,147463,132881],{"class":47},[33,147465,147466,147468,147470],{"class":35,"line":76},[33,147467,54006],{"class":47},[33,147469,53832],{"class":53522},[33,147471,53529],{"class":47},[328,147473,147474],{"start":87},[331,147475,147476],{},[2575,147477,147478],{},"列嵌套",[3736,147480],{"style":128606,"src":147481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147483,147484],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147486,147487],{},"没加row内部这样：",[3736,147489],{"style":128606,"src":147490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147492,147493],{},"加上row之后内部为：",[3736,147495],{"style":128606,"src":147496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[328,147498,147499],{"start":96},[331,147500,147501],{},[2575,147502,147503],{},"列偏移",[3736,147505],{"style":128606,"src":147506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147508,147509],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147511,147512],{},"要加偏移量，即偏移份数",[19,147514,147515],{},"偏移的份数=12-两个盒子的份数",[328,147517,147518],{"start":103},[331,147519,147520],{},[2575,147521,147522],{},"列排序",[3736,147524],{"style":128606,"src":147525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147527,147528],{},"pull拉左；push推右",[328,147530,147531],{"start":108},[331,147532,147533],{},[2575,147534,147535],{},"响应式工具",[3736,147537],{"style":128606,"src":147538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147540,147541],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[631,147543,147545],{"id":147544},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147547,147548],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147550,147551],{},"ul {",[19,147553,147554],{},"list-style: none;",[19,147556,147557],{},"margin:0;",[19,147559,147560],{},"padding:0; }",[3736,147562],{"style":128606,"src":147563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3736,147565],{"style":128606,"src":147566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147568,147569],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147571,71106],{},[23,147573,147574],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,147575,147576,147582,147592],{"__ignoreMap":28},[33,147577,147578,147580],{"class":35,"line":36},[33,147579,132598],{"class":43},[33,147581,17810],{"class":47},[33,147583,147584,147586,147588,147590],{"class":35,"line":51},[33,147585,133230],{"class":72},[33,147587,996],{"class":47},[33,147589,25974],{"class":72},[33,147591,3567],{"class":47},[33,147593,147594],{"class":35,"line":64},[33,147595,1010],{"class":47},[19,147597,72666],{},[23,147599,147600],{"className":128750,"code":141420,"language":128752,"meta":28,"style":28},[30,147601,147602,147608,147618],{"__ignoreMap":28},[33,147603,147604,147606],{"class":35,"line":36},[33,147605,132598],{"class":43},[33,147607,17810],{"class":47},[33,147609,147610,147612,147614,147616],{"class":35,"line":51},[33,147611,133230],{"class":72},[33,147613,996],{"class":47},[33,147615,25974],{"class":72},[33,147617,3567],{"class":47},[33,147619,147620],{"class":35,"line":64},[33,147621,1010],{"class":47},[14,147623,147625],{"id":147624},"_215-swiper-插件使用","21.5 swiper 插件使用",[3413,147627,147628,147631,147634],{},[331,147629,147630],{},"下载需要的css和js文件html页面中 引入相关文件",[331,147632,147633],{},"官网找到类似案例，复制html结构，css样式 js 语法",[331,147635,147636],{},"根据需求定制修改模块",[3736,147638],{"style":128606,"src":147639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147641,147642],{},"解压后将这两部分放到项目中",[3736,147644],{"style":128606,"src":147645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147647,147648],{},"这个插件可以帮助我们实现轮播图效果",[19,147650,147651],{},"用法：",[3736,147653],{"style":128606,"src":147654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147656,147657],{},"找到自己喜欢的",[3736,147659],{"style":128606,"src":147660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147662,147663],{},"右键，查看网页源代码",[3736,147665],{"style":128606,"src":147666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147668,147669],{},"复制人家的结构内容",[19,147671,147672],{},"然后去看API文档：",[3736,147674],{"style":128606,"src":147675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147677,147678],{},"可以看看如何修改样式",[19,147680,147681],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2331,147683,147684],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":147686},[147687,147692,147696,147701,147706],{"id":146487,"depth":51,"text":146488,"children":147688},[147689,147690,147691],{"id":146491,"depth":64,"text":146492},{"id":146501,"depth":64,"text":146502},{"id":146596,"depth":64,"text":146597},{"id":146611,"depth":51,"text":146612,"children":147693},[147694,147695],{"id":146633,"depth":64,"text":146634},{"id":146649,"depth":64,"text":146650},{"id":146724,"depth":51,"text":146725,"children":147697},[147698,147699,147700],{"id":146737,"depth":64,"text":146738},{"id":146961,"depth":64,"text":146962},{"id":146968,"depth":64,"text":146969},{"id":147109,"depth":51,"text":147110,"children":147702},[147703,147704,147705],{"id":147136,"depth":64,"text":147137},{"id":147199,"depth":64,"text":147200},{"id":147544,"depth":64,"text":147545},{"id":147624,"depth":51,"text":147625},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146479,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147713,"title":147714,"body":147715,"description":2359,"extension":2360,"meta":147935,"navigation":99,"path":147936,"seo":147937,"stem":147938,"__hash__":147939},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147716,"toc":147931},[147717,147720,147724,147727,147742,147747,147750,147755,147790,147795,147807,147812,147825,147830,147847,147852,147872,147877,147895,147898,147901,147904,147907,147911,147914,147917,147920,147923,147926,147929],[10,147718,147714],{"id":147719},"_22-代码提交与新型相对单位",[14,147721,147723],{"id":147722},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147725,147726],{},"法1：",[328,147728,147729,147736,147739],{},[331,147730,147731,147732],{},"登录网站注册：",[2663,147733,147734],{"href":147734,"rel":147735},"https:\u002F\u002Fgitee.com\u002F",[26103],[331,147737,147738],{},"码云创建新的仓库",[331,147740,147741],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3413,147743,147744],{},[331,147745,147746],{},"在网站根目录右键-- Git Bash Here",[3736,147748],{"style":128606,"src":147749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3413,147751,147752],{},[331,147753,147754],{},"如果是第一次利用git提交，请配置好全局选项",[23,147756,147758],{"className":119497,"code":147757,"language":119499,"meta":28,"style":28},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[30,147759,147760,147776],{"__ignoreMap":28},[33,147761,147762,147765,147767,147770,147773],{"class":35,"line":36},[33,147763,147764],{"class":43},"git",[33,147766,121919],{"class":60},[33,147768,147769],{"class":72}," --global",[33,147771,147772],{"class":60}," user.name",[33,147774,147775],{"class":60}," \"你的名字\"\n",[33,147777,147778,147780,147782,147784,147787],{"class":35,"line":51},[33,147779,147764],{"class":43},[33,147781,121919],{"class":60},[33,147783,147769],{"class":72},[33,147785,147786],{"class":60}," user.email",[33,147788,147789],{"class":60}," \"你的邮箱\"\n",[3413,147791,147792],{},[331,147793,147794],{},"初始化仓库",[23,147796,147798],{"className":119497,"code":147797,"language":119499,"meta":28,"style":28},"git init\n",[30,147799,147800],{"__ignoreMap":28},[33,147801,147802,147804],{"class":35,"line":36},[33,147803,147764],{"class":43},[33,147805,147806],{"class":60}," init\n",[3413,147808,147809],{},[331,147810,147811],{},"把本地文件放到暂存区",[23,147813,147815],{"className":119497,"code":147814,"language":119499,"meta":28,"style":28},"git add .\n",[30,147816,147817],{"__ignoreMap":28},[33,147818,147819,147821,147823],{"class":35,"line":36},[33,147820,147764],{"class":43},[33,147822,652],{"class":60},[33,147824,30978],{"class":60},[3413,147826,147827],{},[331,147828,147829],{},"把本地文件放到本地仓库里面",[23,147831,147833],{"className":119497,"code":147832,"language":119499,"meta":28,"style":28},"git commit -m \"first commit\"\n",[30,147834,147835],{"__ignoreMap":28},[33,147836,147837,147839,147842,147844],{"class":35,"line":36},[33,147838,147764],{"class":43},[33,147840,147841],{"class":60}," commit",[33,147843,103089],{"class":72},[33,147845,147846],{"class":60}," \"first commit\"\n",[3413,147848,147849],{},[331,147850,147851],{},"链接远程仓库",[23,147853,147855],{"className":119497,"code":147854,"language":119499,"meta":28,"style":28},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[30,147856,147857],{"__ignoreMap":28},[33,147858,147859,147861,147864,147866,147869],{"class":35,"line":36},[33,147860,147764],{"class":43},[33,147862,147863],{"class":60}," remote",[33,147865,652],{"class":60},[33,147867,147868],{"class":60}," origin",[33,147870,147871],{"class":60}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3413,147873,147874],{},[331,147875,147876],{},"把本地仓库的文件推送到远程仓库 push",[23,147878,147880],{"className":119497,"code":147879,"language":119499,"meta":28,"style":28},"git push -u origin master\n",[30,147881,147882],{"__ignoreMap":28},[33,147883,147884,147886,147888,147890,147892],{"class":35,"line":36},[33,147885,147764],{"class":43},[33,147887,31253],{"class":60},[33,147889,30527],{"class":72},[33,147891,147868],{"class":60},[33,147893,147894],{"class":60}," master\n",[3736,147896],{"style":128606,"src":147897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147899,147900],{},"上方方法暂未实现，后边学完git后在整",[19,147902,147903],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3736,147905],{"style":128606,"src":147906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147908,147910],{"id":147909},"_222-新型相对单位","22.2 新型相对单位",[3736,147912],{"style":128606,"src":147913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3736,147915],{"style":128606,"src":147916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147918,147919],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147921,147922],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3736,147924],{"style":128606,"src":147925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147927,147928],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2331,147930,26196],{},{"title":28,"searchDepth":51,"depth":51,"links":147932},[147933,147934],{"id":147722,"depth":51,"text":147723},{"id":147909,"depth":51,"text":147910},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147714,"description":2359},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147941,"title":147942,"body":147943,"description":147947,"extension":2360,"meta":147948,"navigation":99,"path":147949,"seo":147950,"stem":147951,"__hash__":147952},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147944,"toc":147945},[],{"title":28,"searchDepth":51,"depth":51,"links":147946},[],"自己正经开始学编程的第一门语言！",{"category":95047},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147942,"description":147947},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147954,"title":147955,"body":147956,"description":2359,"extension":2360,"meta":149102,"navigation":99,"path":149103,"seo":149104,"stem":149105,"__hash__":149106},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147957,"toc":149078},[147958,147961,147965,147968,147971,147996,147999,148005,148009,148012,148039,148042,148082,148085,148097,148100,148106,148110,148114,148141,148158,148165,148169,148172,148198,148201,148205,148208,148248,148251,148268,148274,148278,148283,148327,148330,148348,148351,148419,148423,148430,148433,148448,148451,148460,148463,148474,148477,148486,148489,148506,148509,148524,148528,148532,148535,148537,148557,148561,148564,148567,148578,148581,148587,148591,148597,148624,148627,148639,148642,148653,148656,148662,148666,148672,148722,148725,148766,148769,148802,148805,148839,148843,148846,148866,148869,148905,148908,148921,148925,148929,148935,148938,148951,148955,148958,148964,148967,148971,148974,148977,149026,149030,149046,149052,149059,149065,149075],[10,147959,147955],{"id":147960},"_1-python环境与第一个程序",[14,147962,147964],{"id":147963},"_11-什么是python","1.1 什么是Python",[19,147966,147967],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147969,147970],{},"理解 Python 时抓住三个关键词：",[328,147972,147973,147976,147979],{},[331,147974,147975],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[331,147977,147978],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[331,147980,147981,147982,2638,147985,2638,147988,2638,147991,2638,147993,30622],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[30,147983,147984],{},"os",[30,147986,147987],{},"sys",[30,147989,147990],{},"json",[30,147992,60078],{},[30,147994,147995],{},"datetime",[19,147997,147998],{},"Python 程序的运行链路：",[23,148000,148003],{"className":148001,"code":148002,"language":7436,"meta":28},[7434],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[30,148004,148002],{"__ignoreMap":28},[14,148006,148008],{"id":148007},"_12-python解释器","1.2 Python解释器",[19,148010,148011],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[23,148013,148015],{"className":26060,"code":148014,"language":26062,"meta":28,"style":28},"python --version\npython3 --version\npython\npython3\n",[30,148016,148017,148023,148029,148034],{"__ignoreMap":28},[33,148018,148019,148021],{"class":35,"line":36},[33,148020,27],{"class":43},[33,148022,28531],{"class":72},[33,148024,148025,148027],{"class":35,"line":51},[33,148026,103086],{"class":43},[33,148028,28531],{"class":72},[33,148030,148031],{"class":35,"line":64},[33,148032,148033],{"class":43},"python\n",[33,148035,148036],{"class":35,"line":76},[33,148037,148038],{"class":43},"python3\n",[19,148040,148041],{},"进入交互模式后，可以直接输入表达式：",[23,148043,148045],{"className":25,"code":148044,"language":27,"meta":28,"style":28},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[30,148046,148047,148058,148063,148077],{"__ignoreMap":28},[33,148048,148049,148052,148054,148056],{"class":35,"line":36},[33,148050,148051],{"class":39},">>>",[33,148053,27357],{"class":72},[33,148055,47789],{"class":39},[33,148057,49945],{"class":72},[33,148059,148060],{"class":35,"line":51},[33,148061,148062],{"class":72},"3\n",[33,148064,148065,148067,148070,148072,148075],{"class":35,"line":64},[33,148066,148051],{"class":39},[33,148068,148069],{"class":72}," print",[33,148071,133],{"class":47},[33,148073,148074],{"class":60},"\"hello python\"",[33,148076,226],{"class":47},[33,148078,148079],{"class":35,"line":76},[33,148080,148081],{"class":47},"hello python\n",[19,148083,148084],{},"退出交互模式：",[23,148086,148088],{"className":25,"code":148087,"language":27,"meta":28,"style":28},"exit()\n",[30,148089,148090],{"__ignoreMap":28},[33,148091,148092,148095],{"class":35,"line":36},[33,148093,148094],{"class":72},"exit",[33,148096,4235],{"class":47},[19,148098,148099],{},"或使用快捷键：",[23,148101,148104],{"className":148102,"code":148103,"language":7436,"meta":28},[7434],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[30,148105,148103],{"__ignoreMap":28},[14,148107,148109],{"id":148108},"_13-安装python","1.3 安装Python",[631,148111,148113],{"id":148112},"_131-windows安装","1.3.1 Windows安装",[328,148115,148116,148123,148126,148132,148138],{},[331,148117,148118,148119],{},"打开 Python 官网：",[2663,148120,148121],{"href":148121,"rel":148122},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[26103],[331,148124,148125],{},"下载 Windows Installer。",[331,148127,148128,148129,30622],{},"安装时勾选 ",[30,148130,148131],{},"Add Python to PATH",[331,148133,148134,148135,30622],{},"点击 ",[30,148136,148137],{},"Install Now",[331,148139,148140],{},"安装完成后打开命令提示符验证：",[23,148142,148144],{"className":26060,"code":148143,"language":26062,"meta":28,"style":28},"python --version\npip --version\n",[30,148145,148146,148152],{"__ignoreMap":28},[33,148147,148148,148150],{"class":35,"line":36},[33,148149,27],{"class":43},[33,148151,28531],{"class":72},[33,148153,148154,148156],{"class":35,"line":51},[33,148155,26069],{"class":43},[33,148157,28531],{"class":72},[19,148159,148160,148161,148164],{},"如果提示 ",[30,148162,148163],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[631,148166,148168],{"id":148167},"_132-macos安装","1.3.2 macOS安装",[19,148170,148171],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[23,148173,148175],{"className":26060,"code":148174,"language":26062,"meta":28,"style":28},"brew install python\npython3 --version\npip3 --version\n",[30,148176,148177,148186,148192],{"__ignoreMap":28},[33,148178,148179,148182,148184],{"class":35,"line":36},[33,148180,148181],{"class":43},"brew",[33,148183,26072],{"class":60},[33,148185,126516],{"class":60},[33,148187,148188,148190],{"class":35,"line":51},[33,148189,103086],{"class":43},[33,148191,28531],{"class":72},[33,148193,148194,148196],{"class":35,"line":64},[33,148195,121900],{"class":43},[33,148197,28531],{"class":72},[19,148199,148200],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[631,148202,148204],{"id":148203},"_133-linux安装","1.3.3 Linux安装",[19,148206,148207],{},"Ubuntu\u002FDebian：",[23,148209,148211],{"className":26060,"code":148210,"language":26062,"meta":28,"style":28},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[30,148212,148213,148221,148236,148242],{"__ignoreMap":28},[33,148214,148215,148217,148219],{"class":35,"line":36},[33,148216,26815],{"class":43},[33,148218,119518],{"class":60},[33,148220,28480],{"class":60},[33,148222,148223,148225,148227,148229,148231,148233],{"class":35,"line":51},[33,148224,26815],{"class":43},[33,148226,119518],{"class":60},[33,148228,26072],{"class":60},[33,148230,106606],{"class":60},[33,148232,103005],{"class":60},[33,148234,148235],{"class":60}," python3-venv\n",[33,148237,148238,148240],{"class":35,"line":64},[33,148239,103086],{"class":43},[33,148241,28531],{"class":72},[33,148243,148244,148246],{"class":35,"line":76},[33,148245,121900],{"class":43},[33,148247,28531],{"class":72},[19,148249,148250],{},"Fedora：",[23,148252,148254],{"className":26060,"code":148253,"language":26062,"meta":28,"style":28},"sudo dnf install python3 python3-pip\n",[30,148255,148256],{"__ignoreMap":28},[33,148257,148258,148260,148262,148264,148266],{"class":35,"line":36},[33,148259,26815],{"class":43},[33,148261,28553],{"class":60},[33,148263,26072],{"class":60},[33,148265,106606],{"class":60},[33,148267,121965],{"class":60},[19,148269,148270,148271,148273],{},"Linux 上通常使用 ",[30,148272,103086],{}," 命令，避免和系统旧版本 Python 冲突。",[14,148275,148277],{"id":148276},"_14-pip包管理器","1.4 pip包管理器",[19,148279,148280,148282],{},[30,148281,26069],{}," 用来安装第三方库。",[23,148284,148286],{"className":26060,"code":148285,"language":26062,"meta":28,"style":28},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[30,148287,148288,148297,148306,148314,148320],{"__ignoreMap":28},[33,148289,148290,148292,148294],{"class":35,"line":36},[33,148291,26069],{"class":43},[33,148293,26072],{"class":60},[33,148295,148296],{"class":60}," requests\n",[33,148298,148299,148301,148304],{"class":35,"line":51},[33,148300,26069],{"class":43},[33,148302,148303],{"class":60}," uninstall",[33,148305,148296],{"class":60},[33,148307,148308,148310,148312],{"class":35,"line":64},[33,148309,26069],{"class":43},[33,148311,119775],{"class":60},[33,148313,148296],{"class":60},[33,148315,148316,148318],{"class":35,"line":76},[33,148317,26069],{"class":43},[33,148319,121155],{"class":60},[33,148321,148322,148324],{"class":35,"line":87},[33,148323,26069],{"class":43},[33,148325,148326],{"class":60}," freeze\n",[19,148328,148329],{},"国内网络较慢时可以临时使用镜像：",[23,148331,148333],{"className":26060,"code":148332,"language":26062,"meta":28,"style":28},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,148334,148335],{"__ignoreMap":28},[33,148336,148337,148339,148341,148344,148346],{"class":35,"line":36},[33,148338,26069],{"class":43},[33,148340,26072],{"class":60},[33,148342,148343],{"class":60}," requests",[33,148345,28668],{"class":72},[33,148347,121928],{"class":60},[19,148349,148350],{},"常见第三方库：",[2563,148352,148353,148362],{},[2566,148354,148355],{},[2569,148356,148357,148360],{},[2572,148358,148359],{},"库",[2572,148361,104901],{},[2610,148363,148364,148372,148379,148387,148395,148403,148411],{},[2569,148365,148366,148369],{},[2615,148367,148368],{},"requests",[2615,148370,148371],{},"网络请求",[2569,148373,148374,148376],{},[2615,148375,102833],{},[2615,148377,148378],{},"数值计算",[2569,148380,148381,148384],{},[2615,148382,148383],{},"pandas",[2615,148385,148386],{},"表格数据处理",[2569,148388,148389,148392],{},[2615,148390,148391],{},"matplotlib",[2615,148393,148394],{},"绘图",[2569,148396,148397,148400],{},[2615,148398,148399],{},"pyecharts",[2615,148401,148402],{},"ECharts 图表",[2569,148404,148405,148408],{},[2615,148406,148407],{},"flask",[2615,148409,148410],{},"Web 后端",[2569,148412,148413,148416],{},[2615,148414,148415],{},"pytest",[2615,148417,148418],{},"自动化测试",[14,148420,148422],{"id":148421},"_15-虚拟环境","1.5 虚拟环境",[19,148424,148425,148426,148429],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[30,148427,148428],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148431,148432],{},"创建虚拟环境：",[23,148434,148436],{"className":26060,"code":148435,"language":26062,"meta":28,"style":28},"python -m venv .venv\n",[30,148437,148438],{"__ignoreMap":28},[33,148439,148440,148442,148444,148446],{"class":35,"line":36},[33,148441,27],{"class":43},[33,148443,103089],{"class":72},[33,148445,103092],{"class":60},[33,148447,103095],{"class":60},[19,148449,148450],{},"Windows 激活：",[23,148452,148454],{"className":26060,"code":148453,"language":26062,"meta":28,"style":28},".venv\\Scripts\\activate\n",[30,148455,148456],{"__ignoreMap":28},[33,148457,148458],{"class":35,"line":36},[33,148459,148453],{"class":43},[19,148461,148462],{},"macOS\u002FLinux 激活：",[23,148464,148466],{"className":26060,"code":148465,"language":26062,"meta":28,"style":28},"source .venv\u002Fbin\u002Factivate\n",[30,148467,148468],{"__ignoreMap":28},[33,148469,148470,148472],{"class":35,"line":36},[33,148471,103100],{"class":72},[33,148473,103103],{"class":60},[19,148475,148476],{},"退出虚拟环境：",[23,148478,148480],{"className":26060,"code":148479,"language":26062,"meta":28,"style":28},"deactivate\n",[30,148481,148482],{"__ignoreMap":28},[33,148483,148484],{"class":35,"line":36},[33,148485,148479],{"class":43},[19,148487,148488],{},"保存依赖：",[23,148490,148492],{"className":26060,"code":148491,"language":26062,"meta":28,"style":28},"pip freeze > requirements.txt\n",[30,148493,148494],{"__ignoreMap":28},[33,148495,148496,148498,148501,148503],{"class":35,"line":36},[33,148497,26069],{"class":43},[33,148499,148500],{"class":60}," freeze",[33,148502,28460],{"class":39},[33,148504,148505],{"class":60}," requirements.txt\n",[19,148507,148508],{},"安装依赖：",[23,148510,148512],{"className":26060,"code":148511,"language":26062,"meta":28,"style":28},"pip install -r requirements.txt\n",[30,148513,148514],{"__ignoreMap":28},[33,148515,148516,148518,148520,148522],{"class":35,"line":36},[33,148517,26069],{"class":43},[33,148519,26072],{"class":60},[33,148521,121839],{"class":72},[33,148523,148505],{"class":60},[14,148525,148527],{"id":148526},"_16-开发工具","1.6 开发工具",[631,148529,148531],{"id":148530},"_161-pycharm","1.6.1 PyCharm",[19,148533,148534],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148536,124262],{},[328,148538,148539,148542,148545,148551,148554],{},[331,148540,148541],{},"New Project：创建项目。",[331,148543,148544],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[331,148546,148547,148548,128181],{},"New Python File：创建 ",[30,148549,148550],{},".py",[331,148552,148553],{},"Run：运行当前文件。",[331,148555,148556],{},"Debug：断点调试。",[631,148558,148560],{"id":148559},"_162-vs-code","1.6.2 VS Code",[19,148562,148563],{},"VS Code 轻量，适合后续多语言开发。",[19,148565,148566],{},"建议安装插件：",[328,148568,148569,148572,148575],{},[331,148570,148571],{},"Python。",[331,148573,148574],{},"Pylance。",[331,148576,148577],{},"Jupyter。",[19,148579,148580],{},"选择解释器：",[23,148582,148585],{"className":148583,"code":148584,"language":7436,"meta":28},[7434],"Ctrl + Shift + P -> Python: Select Interpreter\n",[30,148586,148584],{"__ignoreMap":28},[14,148588,148590],{"id":148589},"_17-第一个python程序","1.7 第一个Python程序",[19,148592,148593,148594,26857],{},"创建文件 ",[30,148595,148596],{},"hello.py",[23,148598,148600],{"className":25,"code":148599,"language":27,"meta":28,"style":28},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[30,148601,148602,148613],{"__ignoreMap":28},[33,148603,148604,148606,148608,148611],{"class":35,"line":36},[33,148605,122],{"class":72},[33,148607,133],{"class":47},[33,148609,148610],{"class":60},"\"Hello World\"",[33,148612,226],{"class":47},[33,148614,148615,148617,148619,148622],{"class":35,"line":51},[33,148616,122],{"class":72},[33,148618,133],{"class":47},[33,148620,148621],{"class":60},"\"你好，Python\"",[33,148623,226],{"class":47},[19,148625,148626],{},"在终端运行：",[23,148628,148630],{"className":26060,"code":148629,"language":26062,"meta":28,"style":28},"python hello.py\n",[30,148631,148632],{"__ignoreMap":28},[33,148633,148634,148636],{"class":35,"line":36},[33,148635,27],{"class":43},[33,148637,148638],{"class":60}," hello.py\n",[19,148640,148641],{},"或：",[23,148643,148645],{"className":26060,"code":148644,"language":26062,"meta":28,"style":28},"python3 hello.py\n",[30,148646,148647],{"__ignoreMap":28},[33,148648,148649,148651],{"class":35,"line":36},[33,148650,103086],{"class":43},[33,148652,148638],{"class":60},[19,148654,148655],{},"输出：",[23,148657,148660],{"className":148658,"code":148659,"language":7436,"meta":28},[7434],"Hello World\n你好，Python\n",[30,148661,148659],{"__ignoreMap":28},[14,148663,148665],{"id":148664},"_18-print函数","1.8 print函数",[19,148667,148668,148671],{},[30,148669,148670],{},"print()"," 用来输出内容。",[23,148673,148675],{"className":25,"code":148674,"language":27,"meta":28,"style":28},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[30,148676,148677,148687,148697,148707],{"__ignoreMap":28},[33,148678,148679,148681,148683,148685],{"class":35,"line":36},[33,148680,122],{"class":72},[33,148682,133],{"class":47},[33,148684,1770],{"class":60},[33,148686,226],{"class":47},[33,148688,148689,148691,148693,148695],{"class":35,"line":51},[33,148690,122],{"class":72},[33,148692,133],{"class":47},[33,148694,2734],{"class":72},[33,148696,226],{"class":47},[33,148698,148699,148701,148703,148705],{"class":35,"line":64},[33,148700,122],{"class":72},[33,148702,133],{"class":47},[33,148704,2479],{"class":72},[33,148706,226],{"class":47},[33,148708,148709,148711,148713,148716,148718,148720],{"class":35,"line":76},[33,148710,122],{"class":72},[33,148712,133],{"class":47},[33,148714,148715],{"class":60},"\"年龄:\"",[33,148717,245],{"class":47},[33,148719,248],{"class":72},[33,148721,226],{"class":47},[19,148723,148724],{},"多个内容用逗号隔开，默认中间加空格：",[23,148726,148728],{"className":25,"code":148727,"language":27,"meta":28,"style":28},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[30,148729,148730,148740,148749],{"__ignoreMap":28},[33,148731,148732,148735,148737],{"class":35,"line":36},[33,148733,148734],{"class":47},"name ",[33,148736,57],{"class":39},[33,148738,148739],{"class":60}," \"张三\"\n",[33,148741,148742,148745,148747],{"class":35,"line":51},[33,148743,148744],{"class":47},"age ",[33,148746,57],{"class":39},[33,148748,73],{"class":72},[33,148750,148751,148753,148755,148758,148761,148763],{"class":35,"line":64},[33,148752,122],{"class":72},[33,148754,133],{"class":47},[33,148756,148757],{"class":60},"\"姓名:\"",[33,148759,148760],{"class":47},", name, ",[33,148762,148715],{"class":60},[33,148764,148765],{"class":47},", age)\n",[19,148767,148768],{},"修改分隔符：",[23,148770,148772],{"className":25,"code":148771,"language":27,"meta":28,"style":28},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[30,148773,148774],{"__ignoreMap":28},[33,148775,148776,148778,148780,148783,148785,148787,148789,148791,148793,148796,148798,148800],{"class":35,"line":36},[33,148777,122],{"class":72},[33,148779,133],{"class":47},[33,148781,148782],{"class":60},"\"2024\"",[33,148784,245],{"class":47},[33,148786,56535],{"class":60},[33,148788,245],{"class":47},[33,148790,56535],{"class":60},[33,148792,245],{"class":47},[33,148794,148795],{"class":289},"sep",[33,148797,57],{"class":39},[33,148799,34709],{"class":60},[33,148801,226],{"class":47},[19,148803,148804],{},"修改结尾符：",[23,148806,148808],{"className":25,"code":148807,"language":27,"meta":28,"style":28},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[30,148809,148810,148828],{"__ignoreMap":28},[33,148811,148812,148814,148816,148818,148820,148822,148824,148826],{"class":35,"line":36},[33,148813,122],{"class":72},[33,148815,133],{"class":47},[33,148817,1770],{"class":60},[33,148819,245],{"class":47},[33,148821,48024],{"class":289},[33,148823,57],{"class":39},[33,148825,6611],{"class":60},[33,148827,226],{"class":47},[33,148829,148830,148832,148834,148837],{"class":35,"line":51},[33,148831,122],{"class":72},[33,148833,133],{"class":47},[33,148835,148836],{"class":60},"\"python\"",[33,148838,226],{"class":47},[14,148840,148842],{"id":148841},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148844,148845],{},"交互运行适合临时验证：",[23,148847,148849],{"className":25,"code":148848,"language":27,"meta":28,"style":28},">>> 10 * 3\n30\n",[30,148850,148851,148861],{"__ignoreMap":28},[33,148852,148853,148855,148857,148859],{"class":35,"line":36},[33,148854,148051],{"class":39},[33,148856,4297],{"class":72},[33,148858,8764],{"class":39},[33,148860,122236],{"class":72},[33,148862,148863],{"class":35,"line":51},[33,148864,148865],{"class":72},"30\n",[19,148867,148868],{},"脚本运行适合保存程序：",[23,148870,148872],{"className":25,"code":148871,"language":27,"meta":28,"style":28},"price = 8\ncount = 5\nprint(price * count)\n",[30,148873,148874,148884,148893],{"__ignoreMap":28},[33,148875,148876,148879,148881],{"class":35,"line":36},[33,148877,148878],{"class":47},"price ",[33,148880,57],{"class":39},[33,148882,148883],{"class":72}," 8\n",[33,148885,148886,148889,148891],{"class":35,"line":51},[33,148887,148888],{"class":47},"count ",[33,148890,57],{"class":39},[33,148892,56646],{"class":72},[33,148894,148895,148897,148900,148902],{"class":35,"line":64},[33,148896,122],{"class":72},[33,148898,148899],{"class":47},"(price ",[33,148901,657],{"class":39},[33,148903,148904],{"class":47}," count)\n",[19,148906,148907],{},"实际学习中推荐：",[328,148909,148910,148913,148918],{},[331,148911,148912],{},"临时试一个语法，用交互模式。",[331,148914,148915,148916,128181],{},"写完整练习，用 ",[30,148917,148550],{},[331,148919,148920],{},"写项目，用独立目录和虚拟环境。",[14,148922,148924],{"id":148923},"_110-常见错误","1.10 常见错误",[631,148926,148928],{"id":148927},"_1101-命令找不到","1.10.1 命令找不到",[23,148930,148933],{"className":148931,"code":148932,"language":7436,"meta":28},[7434],"python: command not found\n",[30,148934,148932],{"__ignoreMap":28},[19,148936,148937],{},"原因：",[328,148939,148940,148943,148946],{},[331,148941,148942],{},"没安装 Python。",[331,148944,148945],{},"PATH 没配置。",[331,148947,148948,148949,30622],{},"Linux\u002FmacOS 应该使用 ",[30,148950,103086],{},[631,148952,148954],{"id":148953},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148956,148957],{},"不要把文件命名为：",[23,148959,148962],{"className":148960,"code":148961,"language":7436,"meta":28},[7434],"random.py\njson.py\ntime.py\nrequests.py\n",[30,148963,148961],{"__ignoreMap":28},[19,148965,148966],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[631,148968,148970],{"id":148969},"_1103-中文乱码","1.10.3 中文乱码",[19,148972,148973],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148975,148976],{},"如果读写文件出现乱码，要明确指定编码：",[23,148978,148980],{"className":25,"code":148979,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[30,148981,148982,149016],{"__ignoreMap":28},[33,148983,148984,148986,148989,148991,148994,148996,148999,149001,149004,149006,149009,149011,149013],{"class":35,"line":36},[33,148985,110036],{"class":39},[33,148987,148988],{"class":72}," open",[33,148990,133],{"class":47},[33,148992,148993],{"class":60},"\"data.txt\"",[33,148995,245],{"class":47},[33,148997,148998],{"class":60},"\"r\"",[33,149000,245],{"class":47},[33,149002,149003],{"class":289},"encoding",[33,149005,57],{"class":39},[33,149007,149008],{"class":60},"\"utf-8\"",[33,149010,15954],{"class":47},[33,149012,33613],{"class":39},[33,149014,149015],{"class":47}," f:\n",[33,149017,149018,149021,149023],{"class":35,"line":51},[33,149019,149020],{"class":47},"    content ",[33,149022,57],{"class":39},[33,149024,149025],{"class":47}," f.read()\n",[14,149027,149029],{"id":149028},"_111-本章练习","1.11 本章练习",[328,149031,149032,149035,149041],{},[331,149033,149034],{},"安装 Python，并在终端输出版本号。",[331,149036,149037,149038,149040],{},"新建 ",[30,149039,148596],{},"，输出自己的姓名、年龄、学习目标。",[331,149042,2318,149043,149045],{},[30,149044,148670],{}," 输出下面格式：",[23,149047,149050],{"className":149048,"code":149049,"language":7436,"meta":28},[7434],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[30,149051,149049],{"__ignoreMap":28},[328,149053,149054],{"start":76},[331,149055,2318,149056,149058],{},[30,149057,148795],{}," 输出日期：",[23,149060,149063],{"className":149061,"code":149062,"language":7436,"meta":28},[7434],"2024-10-10\n",[30,149064,149062],{"__ignoreMap":28},[328,149066,149067],{"start":87},[331,149068,2318,149069,149071,149072,149074],{},[30,149070,48024],{}," 让两次 ",[30,149073,148670],{}," 输出在同一行。",[2331,149076,149077],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":149079},[149080,149081,149082,149087,149088,149089,149093,149094,149095,149096,149101],{"id":147963,"depth":51,"text":147964},{"id":148007,"depth":51,"text":148008},{"id":148108,"depth":51,"text":148109,"children":149083},[149084,149085,149086],{"id":148112,"depth":64,"text":148113},{"id":148167,"depth":64,"text":148168},{"id":148203,"depth":64,"text":148204},{"id":148276,"depth":51,"text":148277},{"id":148421,"depth":51,"text":148422},{"id":148526,"depth":51,"text":148527,"children":149090},[149091,149092],{"id":148530,"depth":64,"text":148531},{"id":148559,"depth":64,"text":148560},{"id":148589,"depth":51,"text":148590},{"id":148664,"depth":51,"text":148665},{"id":148841,"depth":51,"text":148842},{"id":148923,"depth":51,"text":148924,"children":149097},[149098,149099,149100],{"id":148927,"depth":64,"text":148928},{"id":148953,"depth":64,"text":148954},{"id":148969,"depth":64,"text":148970},{"id":149028,"depth":51,"text":149029},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147955,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":149108,"title":149109,"body":149110,"description":2359,"extension":2360,"meta":151513,"navigation":99,"path":151514,"seo":151515,"stem":151516,"__hash__":151517},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":149111,"toc":151498},[149112,149115,149119,149122,149125,149142,149145,149187,149190,149194,149197,149200,149237,149240,149274,149277,149369,149373,149387,149390,149417,149420,149424,149527,149534,149537,149554,149558,149565,149754,149757,149830,149834,149837,149921,149924,149956,149960,150164,150167,150171,150177,150279,150282,150538,150542,150545,150548,150562,150564,150749,150753,151115,151121,151125,151128,151252,151255,151434,151437,151441,151474,151478,151495],[10,149113,149109],{"id":149114},"_10-json与pyecharts折线图",[14,149116,149118],{"id":149117},"_101-数据可视化","10.1 数据可视化",[19,149120,149121],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,149123,149124],{},"常见图表：",[328,149126,149127,149130,149133,149136,149139],{},[331,149128,149129],{},"折线图：看趋势。",[331,149131,149132],{},"柱状图：看分类对比。",[331,149134,149135],{},"饼图：看占比。",[331,149137,149138],{},"地图：看地域分布。",[331,149140,149141],{},"散点图：看两个变量之间的关系。",[19,149143,149144],{},"Python 可视化常用库：",[2563,149146,149147,149155],{},[2566,149148,149149],{},[2569,149150,149151,149153],{},[2572,149152,148359],{},[2572,149154,25978],{},[2610,149156,149157,149164,149172,149179],{},[2569,149158,149159,149161],{},[2615,149160,148391],{},[2615,149162,149163],{},"基础、经典、可定制",[2569,149165,149166,149169],{},[2615,149167,149168],{},"seaborn",[2615,149170,149171],{},"统计图表更美观",[2569,149173,149174,149176],{},[2615,149175,148399],{},[2615,149177,149178],{},"生成交互式网页图表",[2569,149180,149181,149184],{},[2615,149182,149183],{},"plotly",[2615,149185,149186],{},"交互图表能力强",[19,149188,149189],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,149191,149193],{"id":149192},"_102-json回顾","10.2 JSON回顾",[19,149195,149196],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,149198,149199],{},"Python 字典：",[23,149201,149203],{"className":25,"code":149202,"language":27,"meta":28,"style":28},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[30,149204,149205,149213,149224,149233],{"__ignoreMap":28},[33,149206,149207,149209,149211],{"class":35,"line":36},[33,149208,103863],{"class":47},[33,149210,57],{"class":39},[33,149212,17810],{"class":47},[33,149214,149215,149218,149220,149222],{"class":35,"line":51},[33,149216,149217],{"class":60},"    \"name\"",[33,149219,996],{"class":47},[33,149221,847],{"class":60},[33,149223,33696],{"class":47},[33,149225,149226,149229,149231],{"class":35,"line":64},[33,149227,149228],{"class":60},"    \"value\"",[33,149230,996],{"class":47},[33,149232,99665],{"class":72},[33,149234,149235],{"class":35,"line":76},[33,149236,1010],{"class":47},[19,149238,149239],{},"JSON 字符串：",[23,149241,149244],{"className":149242,"code":149243,"language":147990,"meta":28,"style":28},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[30,149245,149246,149250,149261,149270],{"__ignoreMap":28},[33,149247,149248],{"class":35,"line":36},[33,149249,3820],{"class":47},[33,149251,149252,149255,149257,149259],{"class":35,"line":51},[33,149253,149254],{"class":72},"  \"name\"",[33,149256,996],{"class":47},[33,149258,847],{"class":60},[33,149260,33696],{"class":47},[33,149262,149263,149266,149268],{"class":35,"line":64},[33,149264,149265],{"class":72},"  \"value\"",[33,149267,996],{"class":47},[33,149269,99665],{"class":72},[33,149271,149272],{"class":35,"line":76},[33,149273,1010],{"class":47},[19,149275,149276],{},"Python 与 JSON 的转换：",[23,149278,149280],{"className":25,"code":149279,"language":27,"meta":28,"style":28},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[30,149281,149282,149289,149293,149318,149322,149341,149348,149352,149362],{"__ignoreMap":28},[33,149283,149284,149286],{"class":35,"line":36},[33,149285,32627],{"class":39},[33,149287,149288],{"class":47}," json\n",[33,149290,149291],{"class":35,"line":51},[33,149292,100],{"emptyLinePlaceholder":99},[33,149294,149295,149297,149299,149301,149303,149305,149307,149309,149312,149314,149316],{"class":35,"line":64},[33,149296,103863],{"class":47},[33,149298,57],{"class":39},[33,149300,965],{"class":47},[33,149302,993],{"class":60},[33,149304,996],{"class":47},[33,149306,847],{"class":60},[33,149308,245],{"class":47},[33,149310,149311],{"class":60},"\"value\"",[33,149313,996],{"class":47},[33,149315,2734],{"class":72},[33,149317,1010],{"class":47},[33,149319,149320],{"class":35,"line":76},[33,149321,100],{"emptyLinePlaceholder":99},[33,149323,149324,149327,149329,149332,149335,149337,149339],{"class":35,"line":87},[33,149325,149326],{"class":47},"json_text ",[33,149328,57],{"class":39},[33,149330,149331],{"class":47}," json.dumps(data, ",[33,149333,149334],{"class":289},"ensure_ascii",[33,149336,57],{"class":39},[33,149338,36212],{"class":72},[33,149340,226],{"class":47},[33,149342,149343,149345],{"class":35,"line":96},[33,149344,122],{"class":72},[33,149346,149347],{"class":47},"(json_text)\n",[33,149349,149350],{"class":35,"line":103},[33,149351,100],{"emptyLinePlaceholder":99},[33,149353,149354,149357,149359],{"class":35,"line":108},[33,149355,149356],{"class":47},"new_data ",[33,149358,57],{"class":39},[33,149360,149361],{"class":47}," json.loads(json_text)\n",[33,149363,149364,149366],{"class":35,"line":119},[33,149365,122],{"class":72},[33,149367,149368],{"class":47},"(new_data)\n",[14,149370,149372],{"id":149371},"_103-安装pyecharts","10.3 安装pyecharts",[23,149374,149376],{"className":26060,"code":149375,"language":26062,"meta":28,"style":28},"pip install pyecharts\n",[30,149377,149378],{"__ignoreMap":28},[33,149379,149380,149382,149384],{"class":35,"line":36},[33,149381,26069],{"class":43},[33,149383,26072],{"class":60},[33,149385,149386],{"class":60}," pyecharts\n",[19,149388,149389],{},"验证：",[23,149391,149393],{"className":25,"code":149392,"language":27,"meta":28,"style":28},"import pyecharts\n\nprint(pyecharts.__version__)\n",[30,149394,149395,149401,149405],{"__ignoreMap":28},[33,149396,149397,149399],{"class":35,"line":36},[33,149398,32627],{"class":39},[33,149400,149386],{"class":47},[33,149402,149403],{"class":35,"line":51},[33,149404,100],{"emptyLinePlaceholder":99},[33,149406,149407,149409,149412,149415],{"class":35,"line":64},[33,149408,122],{"class":72},[33,149410,149411],{"class":47},"(pyecharts.",[33,149413,149414],{"class":72},"__version__",[33,149416,226],{"class":47},[19,149418,149419],{},"如果使用虚拟环境，要先激活环境再安装。",[14,149421,149423],{"id":149422},"_104-第一个折线图","10.4 第一个折线图",[23,149425,149427],{"className":25,"code":149426,"language":27,"meta":28,"style":28},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[30,149428,149429,149441,149445,149455,149485,149517],{"__ignoreMap":28},[33,149430,149431,149433,149436,149438],{"class":35,"line":36},[33,149432,32970],{"class":39},[33,149434,149435],{"class":47}," pyecharts.charts ",[33,149437,32627],{"class":39},[33,149439,149440],{"class":47}," Line\n",[33,149442,149443],{"class":35,"line":51},[33,149444,100],{"emptyLinePlaceholder":99},[33,149446,149447,149450,149452],{"class":35,"line":64},[33,149448,149449],{"class":47},"line ",[33,149451,57],{"class":39},[33,149453,149454],{"class":47}," Line()\n",[33,149456,149457,149460,149463,149465,149468,149470,149473,149475,149478,149480,149483],{"class":35,"line":76},[33,149458,149459],{"class":47},"line.add_xaxis([",[33,149461,149462],{"class":60},"\"周一\"",[33,149464,245],{"class":47},[33,149466,149467],{"class":60},"\"周二\"",[33,149469,245],{"class":47},[33,149471,149472],{"class":60},"\"周三\"",[33,149474,245],{"class":47},[33,149476,149477],{"class":60},"\"周四\"",[33,149479,245],{"class":47},[33,149481,149482],{"class":60},"\"周五\"",[33,149484,6907],{"class":47},[33,149486,149487,149490,149493,149495,149497,149499,149501,149503,149505,149507,149510,149512,149515],{"class":35,"line":87},[33,149488,149489],{"class":47},"line.add_yaxis(",[33,149491,149492],{"class":60},"\"销售额\"",[33,149494,79729],{"class":47},[33,149496,2734],{"class":72},[33,149498,245],{"class":47},[33,149500,3229],{"class":72},[33,149502,245],{"class":47},[33,149504,3273],{"class":72},[33,149506,245],{"class":47},[33,149508,149509],{"class":72},"150",[33,149511,245],{"class":47},[33,149513,149514],{"class":72},"180",[33,149516,6907],{"class":47},[33,149518,149519,149522,149525],{"class":35,"line":96},[33,149520,149521],{"class":47},"line.render(",[33,149523,149524],{"class":60},"\"line.html\"",[33,149526,226],{"class":47},[19,149528,149529,149530,149533],{},"运行后会生成 ",[30,149531,149532],{},"line.html","，用浏览器打开即可看到图表。",[19,149535,149536],{},"核心步骤：",[328,149538,149539,149542,149545,149548,149551],{},[331,149540,149541],{},"导入图表类。",[331,149543,149544],{},"创建图表对象。",[331,149546,149547],{},"添加 x 轴数据。",[331,149549,149550],{},"添加 y 轴数据。",[331,149552,149553],{},"渲染为 HTML。",[14,149555,149557],{"id":149556},"_105-全局配置","10.5 全局配置",[19,149559,149560,149561,149564],{},"常用配置在 ",[30,149562,149563],{},"pyecharts.options"," 中。",[23,149566,149568],{"className":25,"code":149567,"language":27,"meta":28,"style":28},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[30,149569,149570,149587,149597,149601,149609,149633,149661,149666,149685,149704,149722,149742,149746],{"__ignoreMap":28},[33,149571,149572,149574,149577,149579,149582,149584],{"class":35,"line":36},[33,149573,32970],{"class":39},[33,149575,149576],{"class":47}," pyecharts ",[33,149578,32627],{"class":39},[33,149580,149581],{"class":47}," options ",[33,149583,33613],{"class":39},[33,149585,149586],{"class":47}," opts\n",[33,149588,149589,149591,149593,149595],{"class":35,"line":51},[33,149590,32970],{"class":39},[33,149592,149435],{"class":47},[33,149594,32627],{"class":39},[33,149596,149440],{"class":47},[33,149598,149599],{"class":35,"line":64},[33,149600,100],{"emptyLinePlaceholder":99},[33,149602,149603,149605,149607],{"class":35,"line":76},[33,149604,149449],{"class":47},[33,149606,57],{"class":39},[33,149608,149454],{"class":47},[33,149610,149611,149613,149615,149617,149619,149621,149623,149625,149627,149629,149631],{"class":35,"line":87},[33,149612,149459],{"class":47},[33,149614,149462],{"class":60},[33,149616,245],{"class":47},[33,149618,149467],{"class":60},[33,149620,245],{"class":47},[33,149622,149472],{"class":60},[33,149624,245],{"class":47},[33,149626,149477],{"class":60},[33,149628,245],{"class":47},[33,149630,149482],{"class":60},[33,149632,6907],{"class":47},[33,149634,149635,149637,149639,149641,149643,149645,149647,149649,149651,149653,149655,149657,149659],{"class":35,"line":96},[33,149636,149489],{"class":47},[33,149638,149492],{"class":60},[33,149640,79729],{"class":47},[33,149642,2734],{"class":72},[33,149644,245],{"class":47},[33,149646,3229],{"class":72},[33,149648,245],{"class":47},[33,149650,3273],{"class":72},[33,149652,245],{"class":47},[33,149654,149509],{"class":72},[33,149656,245],{"class":47},[33,149658,149514],{"class":72},[33,149660,6907],{"class":47},[33,149662,149663],{"class":35,"line":103},[33,149664,149665],{"class":47},"line.set_global_opts(\n",[33,149667,149668,149671,149673,149676,149678,149680,149683],{"class":35,"line":108},[33,149669,149670],{"class":289},"    title_opts",[33,149672,57],{"class":39},[33,149674,149675],{"class":47},"opts.TitleOpts(",[33,149677,53629],{"class":289},[33,149679,57],{"class":39},[33,149681,149682],{"class":60},"\"一周销售额\"",[33,149684,40272],{"class":47},[33,149686,149687,149690,149692,149695,149697,149699,149702],{"class":35,"line":119},[33,149688,149689],{"class":289},"    xaxis_opts",[33,149691,57],{"class":39},[33,149693,149694],{"class":47},"opts.AxisOpts(",[33,149696,207],{"class":289},[33,149698,57],{"class":39},[33,149700,149701],{"class":60},"\"日期\"",[33,149703,40272],{"class":47},[33,149705,149706,149709,149711,149713,149715,149717,149720],{"class":35,"line":128},[33,149707,149708],{"class":289},"    yaxis_opts",[33,149710,57],{"class":39},[33,149712,149694],{"class":47},[33,149714,207],{"class":289},[33,149716,57],{"class":39},[33,149718,149719],{"class":60},"\"金额\"",[33,149721,40272],{"class":47},[33,149723,149724,149727,149729,149732,149735,149737,149740],{"class":35,"line":1753},[33,149725,149726],{"class":289},"    tooltip_opts",[33,149728,57],{"class":39},[33,149730,149731],{"class":47},"opts.TooltipOpts(",[33,149733,149734],{"class":289},"trigger",[33,149736,57],{"class":39},[33,149738,149739],{"class":60},"\"axis\"",[33,149741,40272],{"class":47},[33,149743,149744],{"class":35,"line":1763},[33,149745,226],{"class":47},[33,149747,149748,149750,149752],{"class":35,"line":1775},[33,149749,149521],{"class":47},[33,149751,149524],{"class":60},[33,149753,226],{"class":47},[19,149755,149756],{},"常见全局配置：",[2563,149758,149759,149768],{},[2566,149760,149761],{},[2569,149762,149763,149766],{},[2572,149764,149765],{},"配置",[2572,149767,104901],{},[2610,149769,149770,149780,149790,149800,149810,149820],{},[2569,149771,149772,149777],{},[2615,149773,149774],{},[30,149775,149776],{},"TitleOpts",[2615,149778,149779],{},"标题",[2569,149781,149782,149787],{},[2615,149783,149784],{},[30,149785,149786],{},"LegendOpts",[2615,149788,149789],{},"图例",[2569,149791,149792,149797],{},[2615,149793,149794],{},[30,149795,149796],{},"TooltipOpts",[2615,149798,149799],{},"提示框",[2569,149801,149802,149807],{},[2615,149803,149804],{},[30,149805,149806],{},"AxisOpts",[2615,149808,149809],{},"坐标轴",[2569,149811,149812,149817],{},[2615,149813,149814],{},[30,149815,149816],{},"VisualMapOpts",[2615,149818,149819],{},"视觉映射",[2569,149821,149822,149827],{},[2615,149823,149824],{},[30,149825,149826],{},"DataZoomOpts",[2615,149828,149829],{},"区域缩放",[14,149831,149833],{"id":149832},"_106-系列配置","10.6 系列配置",[19,149835,149836],{},"系列配置作用于某一组数据。",[23,149838,149840],{"className":25,"code":149839,"language":27,"meta":28,"style":28},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[30,149841,149842,149847,149858,149887,149898,149917],{"__ignoreMap":28},[33,149843,149844],{"class":35,"line":36},[33,149845,149846],{"class":47},"line.add_yaxis(\n",[33,149848,149849,149852,149854,149856],{"class":35,"line":51},[33,149850,149851],{"class":289},"    series_name",[33,149853,57],{"class":39},[33,149855,149492],{"class":60},[33,149857,33696],{"class":47},[33,149859,149860,149863,149865,149867,149869,149871,149873,149875,149877,149879,149881,149883,149885],{"class":35,"line":64},[33,149861,149862],{"class":289},"    y_axis",[33,149864,57],{"class":39},[33,149866,3300],{"class":47},[33,149868,2734],{"class":72},[33,149870,245],{"class":47},[33,149872,3229],{"class":72},[33,149874,245],{"class":47},[33,149876,3273],{"class":72},[33,149878,245],{"class":47},[33,149880,149509],{"class":72},[33,149882,245],{"class":47},[33,149884,149514],{"class":72},[33,149886,90044],{"class":47},[33,149888,149889,149892,149894,149896],{"class":35,"line":76},[33,149890,149891],{"class":289},"    is_smooth",[33,149893,57],{"class":39},[33,149895,1190],{"class":72},[33,149897,33696],{"class":47},[33,149899,149900,149903,149905,149908,149911,149913,149915],{"class":35,"line":87},[33,149901,149902],{"class":289},"    label_opts",[33,149904,57],{"class":39},[33,149906,149907],{"class":47},"opts.LabelOpts(",[33,149909,149910],{"class":289},"is_show",[33,149912,57],{"class":39},[33,149914,1190],{"class":72},[33,149916,40272],{"class":47},[33,149918,149919],{"class":35,"line":96},[33,149920,226],{"class":47},[19,149922,149923],{},"常用参数：",[328,149925,149926,149932,149938,149944,149950],{},[331,149927,149928,149931],{},[30,149929,149930],{},"series_name","：系列名称。",[331,149933,149934,149937],{},[30,149935,149936],{},"y_axis","：y 轴数据。",[331,149939,149940,149943],{},[30,149941,149942],{},"is_smooth","：是否平滑曲线。",[331,149945,149946,149949],{},[30,149947,149948],{},"label_opts","：标签配置。",[331,149951,149952,149955],{},[30,149953,149954],{},"symbol_size","：标记点大小。",[14,149957,149959],{"id":149958},"_107-多条折线","10.7 多条折线",[23,149961,149963],{"className":25,"code":149962,"language":27,"meta":28,"style":28},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[30,149964,149965,149979,149989,149993,150022,150026,150034,150039,150077,150114,150118,150135,150151,150155],{"__ignoreMap":28},[33,149966,149967,149969,149971,149973,149975,149977],{"class":35,"line":36},[33,149968,32970],{"class":39},[33,149970,149576],{"class":47},[33,149972,32627],{"class":39},[33,149974,149581],{"class":47},[33,149976,33613],{"class":39},[33,149978,149586],{"class":47},[33,149980,149981,149983,149985,149987],{"class":35,"line":51},[33,149982,32970],{"class":39},[33,149984,149435],{"class":47},[33,149986,32627],{"class":39},[33,149988,149440],{"class":47},[33,149990,149991],{"class":35,"line":64},[33,149992,100],{"emptyLinePlaceholder":99},[33,149994,149995,149998,150000,150002,150004,150006,150008,150010,150012,150014,150016,150018,150020],{"class":35,"line":76},[33,149996,149997],{"class":47},"dates ",[33,149999,57],{"class":39},[33,150001,906],{"class":47},[33,150003,149462],{"class":60},[33,150005,245],{"class":47},[33,150007,149467],{"class":60},[33,150009,245],{"class":47},[33,150011,149472],{"class":60},[33,150013,245],{"class":47},[33,150015,149477],{"class":60},[33,150017,245],{"class":47},[33,150019,149482],{"class":60},[33,150021,919],{"class":47},[33,150023,150024],{"class":35,"line":87},[33,150025,100],{"emptyLinePlaceholder":99},[33,150027,150028,150030,150032],{"class":35,"line":96},[33,150029,149449],{"class":47},[33,150031,57],{"class":39},[33,150033,149454],{"class":47},[33,150035,150036],{"class":35,"line":103},[33,150037,150038],{"class":47},"line.add_xaxis(dates)\n",[33,150040,150041,150043,150046,150048,150050,150052,150055,150057,150059,150061,150063,150065,150067,150069,150071,150073,150075],{"class":35,"line":108},[33,150042,149489],{"class":47},[33,150044,150045],{"class":60},"\"线上销售\"",[33,150047,79729],{"class":47},[33,150049,2734],{"class":72},[33,150051,245],{"class":47},[33,150053,150054],{"class":72},"130",[33,150056,245],{"class":47},[33,150058,3229],{"class":72},[33,150060,245],{"class":47},[33,150062,23286],{"class":72},[33,150064,245],{"class":47},[33,150066,3983],{"class":72},[33,150068,1182],{"class":47},[33,150070,149942],{"class":289},[33,150072,57],{"class":39},[33,150074,1190],{"class":72},[33,150076,226],{"class":47},[33,150078,150079,150081,150084,150086,150088,150090,150092,150094,150096,150098,150100,150102,150104,150106,150108,150110,150112],{"class":35,"line":119},[33,150080,149489],{"class":47},[33,150082,150083],{"class":60},"\"线下销售\"",[33,150085,79729],{"class":47},[33,150087,3029],{"class":72},[33,150089,245],{"class":47},[33,150091,3273],{"class":72},[33,150093,245],{"class":47},[33,150095,2734],{"class":72},[33,150097,245],{"class":47},[33,150099,3229],{"class":72},[33,150101,245],{"class":47},[33,150103,149509],{"class":72},[33,150105,1182],{"class":47},[33,150107,149942],{"class":289},[33,150109,57],{"class":39},[33,150111,1190],{"class":72},[33,150113,226],{"class":47},[33,150115,150116],{"class":35,"line":128},[33,150117,149665],{"class":47},[33,150119,150120,150122,150124,150126,150128,150130,150133],{"class":35,"line":1753},[33,150121,149670],{"class":289},[33,150123,57],{"class":39},[33,150125,149675],{"class":47},[33,150127,53629],{"class":289},[33,150129,57],{"class":39},[33,150131,150132],{"class":60},"\"线上线下销售趋势\"",[33,150134,40272],{"class":47},[33,150136,150137,150139,150141,150143,150145,150147,150149],{"class":35,"line":1763},[33,150138,149726],{"class":289},[33,150140,57],{"class":39},[33,150142,149731],{"class":47},[33,150144,149734],{"class":289},[33,150146,57],{"class":39},[33,150148,149739],{"class":60},[33,150150,40272],{"class":47},[33,150152,150153],{"class":35,"line":1775},[33,150154,226],{"class":47},[33,150156,150157,150159,150162],{"class":35,"line":1780},[33,150158,149521],{"class":47},[33,150160,150161],{"class":60},"\"sales.html\"",[33,150163,226],{"class":47},[19,150165,150166],{},"多条折线适合比较不同指标或不同地区。",[14,150168,150170],{"id":150169},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,150172,150173,150174,26857],{},"假设 ",[30,150175,150176],{},"sales.json",[23,150178,150180],{"className":149242,"code":150179,"language":147990,"meta":28,"style":28},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[30,150181,150182,150187,150219,150247,150275],{"__ignoreMap":28},[33,150183,150184],{"class":35,"line":36},[33,150185,150186],{"class":47},"[\n",[33,150188,150189,150192,150195,150197,150199,150201,150204,150206,150208,150210,150213,150215,150217],{"class":35,"line":51},[33,150190,150191],{"class":47},"  {",[33,150193,150194],{"class":72},"\"date\"",[33,150196,996],{"class":47},[33,150198,149462],{"class":60},[33,150200,245],{"class":47},[33,150202,150203],{"class":72},"\"online\"",[33,150205,996],{"class":47},[33,150207,2734],{"class":72},[33,150209,245],{"class":47},[33,150211,150212],{"class":72},"\"offline\"",[33,150214,996],{"class":47},[33,150216,3029],{"class":72},[33,150218,1111],{"class":47},[33,150220,150221,150223,150225,150227,150229,150231,150233,150235,150237,150239,150241,150243,150245],{"class":35,"line":64},[33,150222,150191],{"class":47},[33,150224,150194],{"class":72},[33,150226,996],{"class":47},[33,150228,149467],{"class":60},[33,150230,245],{"class":47},[33,150232,150203],{"class":72},[33,150234,996],{"class":47},[33,150236,150054],{"class":72},[33,150238,245],{"class":47},[33,150240,150212],{"class":72},[33,150242,996],{"class":47},[33,150244,3273],{"class":72},[33,150246,1111],{"class":47},[33,150248,150249,150251,150253,150255,150257,150259,150261,150263,150265,150267,150269,150271,150273],{"class":35,"line":76},[33,150250,150191],{"class":47},[33,150252,150194],{"class":72},[33,150254,996],{"class":47},[33,150256,149472],{"class":60},[33,150258,245],{"class":47},[33,150260,150203],{"class":72},[33,150262,996],{"class":47},[33,150264,3229],{"class":72},[33,150266,245],{"class":47},[33,150268,150212],{"class":72},[33,150270,996],{"class":47},[33,150272,2734],{"class":72},[33,150274,1010],{"class":47},[33,150276,150277],{"class":35,"line":87},[33,150278,919],{"class":47},[19,150280,150281],{},"读取并绘图：",[23,150283,150285],{"className":25,"code":150284,"language":27,"meta":28,"style":28},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[30,150286,150287,150293,150307,150317,150321,150353,150366,150370,150378,150387,150396,150400,150412,150421,150430,150439,150443,150451,150455,150472,150489,150493,150510,150526,150530],{"__ignoreMap":28},[33,150288,150289,150291],{"class":35,"line":36},[33,150290,32627],{"class":39},[33,150292,149288],{"class":47},[33,150294,150295,150297,150299,150301,150303,150305],{"class":35,"line":51},[33,150296,32970],{"class":39},[33,150298,149576],{"class":47},[33,150300,32627],{"class":39},[33,150302,149581],{"class":47},[33,150304,33613],{"class":39},[33,150306,149586],{"class":47},[33,150308,150309,150311,150313,150315],{"class":35,"line":64},[33,150310,32970],{"class":39},[33,150312,149435],{"class":47},[33,150314,32627],{"class":39},[33,150316,149440],{"class":47},[33,150318,150319],{"class":35,"line":76},[33,150320,100],{"emptyLinePlaceholder":99},[33,150322,150323,150325,150327,150329,150332,150334,150336,150338,150340,150342,150344,150346,150348,150351],{"class":35,"line":87},[33,150324,110036],{"class":39},[33,150326,148988],{"class":72},[33,150328,133],{"class":47},[33,150330,150331],{"class":60},"\"sales.json\"",[33,150333,245],{"class":47},[33,150335,148998],{"class":60},[33,150337,245],{"class":47},[33,150339,149003],{"class":289},[33,150341,57],{"class":39},[33,150343,149008],{"class":60},[33,150345,15954],{"class":47},[33,150347,33613],{"class":39},[33,150349,150350],{"class":289}," file",[33,150352,605],{"class":47},[33,150354,150355,150357,150359,150362,150364],{"class":35,"line":96},[33,150356,103627],{"class":47},[33,150358,57],{"class":39},[33,150360,150361],{"class":47}," json.load(",[33,150363,47577],{"class":289},[33,150365,226],{"class":47},[33,150367,150368],{"class":35,"line":103},[33,150369,100],{"emptyLinePlaceholder":99},[33,150371,150372,150374,150376],{"class":35,"line":108},[33,150373,149997],{"class":47},[33,150375,57],{"class":39},[33,150377,615],{"class":47},[33,150379,150380,150383,150385],{"class":35,"line":119},[33,150381,150382],{"class":47},"online_sales ",[33,150384,57],{"class":39},[33,150386,615],{"class":47},[33,150388,150389,150392,150394],{"class":35,"line":128},[33,150390,150391],{"class":47},"offline_sales ",[33,150393,57],{"class":39},[33,150395,615],{"class":47},[33,150397,150398],{"class":35,"line":1753},[33,150399,100],{"emptyLinePlaceholder":99},[33,150401,150402,150404,150407,150409],{"class":35,"line":1763},[33,150403,5282],{"class":39},[33,150405,150406],{"class":47}," item ",[33,150408,681],{"class":39},[33,150410,150411],{"class":47}," data:\n",[33,150413,150414,150417,150419],{"class":35,"line":1775},[33,150415,150416],{"class":47},"    dates.append(item[",[33,150418,150194],{"class":60},[33,150420,6907],{"class":47},[33,150422,150423,150426,150428],{"class":35,"line":1780},[33,150424,150425],{"class":47},"    online_sales.append(item[",[33,150427,150203],{"class":60},[33,150429,6907],{"class":47},[33,150431,150432,150435,150437],{"class":35,"line":1785},[33,150433,150434],{"class":47},"    offline_sales.append(item[",[33,150436,150212],{"class":60},[33,150438,6907],{"class":47},[33,150440,150441],{"class":35,"line":1940},[33,150442,100],{"emptyLinePlaceholder":99},[33,150444,150445,150447,150449],{"class":35,"line":2183},[33,150446,149449],{"class":47},[33,150448,57],{"class":39},[33,150450,149454],{"class":47},[33,150452,150453],{"class":35,"line":2208},[33,150454,150038],{"class":47},[33,150456,150457,150459,150461,150464,150466,150468,150470],{"class":35,"line":2234},[33,150458,149489],{"class":47},[33,150460,150045],{"class":60},[33,150462,150463],{"class":47},", online_sales, ",[33,150465,149942],{"class":289},[33,150467,57],{"class":39},[33,150469,1190],{"class":72},[33,150471,226],{"class":47},[33,150473,150474,150476,150478,150481,150483,150485,150487],{"class":35,"line":2239},[33,150475,149489],{"class":47},[33,150477,150083],{"class":60},[33,150479,150480],{"class":47},", offline_sales, ",[33,150482,149942],{"class":289},[33,150484,57],{"class":39},[33,150486,1190],{"class":72},[33,150488,226],{"class":47},[33,150490,150491],{"class":35,"line":2247},[33,150492,149665],{"class":47},[33,150494,150495,150497,150499,150501,150503,150505,150508],{"class":35,"line":2255},[33,150496,149670],{"class":289},[33,150498,57],{"class":39},[33,150500,149675],{"class":47},[33,150502,53629],{"class":289},[33,150504,57],{"class":39},[33,150506,150507],{"class":60},"\"销售趋势\"",[33,150509,40272],{"class":47},[33,150511,150512,150514,150516,150518,150520,150522,150524],{"class":35,"line":3992},[33,150513,149726],{"class":289},[33,150515,57],{"class":39},[33,150517,149731],{"class":47},[33,150519,149734],{"class":289},[33,150521,57],{"class":39},[33,150523,149739],{"class":60},[33,150525,40272],{"class":47},[33,150527,150528],{"class":35,"line":4009},[33,150529,226],{"class":47},[33,150531,150532,150534,150536],{"class":35,"line":4014},[33,150533,149521],{"class":47},[33,150535,150161],{"class":60},[33,150537,226],{"class":47},[14,150539,150541],{"id":150540},"_109-数据清洗","10.9 数据清洗",[19,150543,150544],{},"真实数据经常不整齐，需要清洗。",[19,150546,150547],{},"常见问题：",[328,150549,150550,150553,150556,150559],{},[331,150551,150552],{},"数字是字符串。",[331,150554,150555],{},"字段缺失。",[331,150557,150558],{},"空值。",[331,150560,150561],{},"日期格式不统一。",[19,150563,17373],{},[23,150565,150567],{"className":25,"code":150566,"language":27,"meta":28,"style":28},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[30,150568,150569,150578,150600,150620,150641,150645,150649,150657,150666,150670,150681,150695,150704,150709,150713,150721,150731,150735,150742],{"__ignoreMap":28},[33,150570,150571,150574,150576],{"class":35,"line":36},[33,150572,150573],{"class":47},"raw_data ",[33,150575,57],{"class":39},[33,150577,1087],{"class":47},[33,150579,150580,150582,150584,150586,150588,150590,150593,150595,150598],{"class":35,"line":51},[33,150581,1092],{"class":47},[33,150583,150194],{"class":60},[33,150585,996],{"class":47},[33,150587,149462],{"class":60},[33,150589,245],{"class":47},[33,150591,150592],{"class":60},"\"sales\"",[33,150594,996],{"class":47},[33,150596,150597],{"class":60},"\"100\"",[33,150599,1111],{"class":47},[33,150601,150602,150604,150606,150608,150610,150612,150614,150616,150618],{"class":35,"line":64},[33,150603,1092],{"class":47},[33,150605,150194],{"class":60},[33,150607,996],{"class":47},[33,150609,149467],{"class":60},[33,150611,245],{"class":47},[33,150613,150592],{"class":60},[33,150615,996],{"class":47},[33,150617,9898],{"class":60},[33,150619,1111],{"class":47},[33,150621,150622,150624,150626,150628,150630,150632,150634,150636,150639],{"class":35,"line":76},[33,150623,1092],{"class":47},[33,150625,150194],{"class":60},[33,150627,996],{"class":47},[33,150629,149472],{"class":60},[33,150631,245],{"class":47},[33,150633,150592],{"class":60},[33,150635,996],{"class":47},[33,150637,150638],{"class":60},"\"120\"",[33,150640,1111],{"class":47},[33,150642,150643],{"class":35,"line":87},[33,150644,919],{"class":47},[33,150646,150647],{"class":35,"line":96},[33,150648,100],{"emptyLinePlaceholder":99},[33,150650,150651,150653,150655],{"class":35,"line":103},[33,150652,149997],{"class":47},[33,150654,57],{"class":39},[33,150656,615],{"class":47},[33,150658,150659,150662,150664],{"class":35,"line":108},[33,150660,150661],{"class":47},"sales ",[33,150663,57],{"class":39},[33,150665,615],{"class":47},[33,150667,150668],{"class":35,"line":119},[33,150669,100],{"emptyLinePlaceholder":99},[33,150671,150672,150674,150676,150678],{"class":35,"line":128},[33,150673,5282],{"class":39},[33,150675,150406],{"class":47},[33,150677,681],{"class":39},[33,150679,150680],{"class":47}," raw_data:\n",[33,150682,150683,150686,150688,150691,150693],{"class":35,"line":1753},[33,150684,150685],{"class":47},"    value ",[33,150687,57],{"class":39},[33,150689,150690],{"class":47}," item.get(",[33,150692,150592],{"class":60},[33,150694,226],{"class":47},[33,150696,150697,150699,150701],{"class":35,"line":1763},[33,150698,593],{"class":39},[33,150700,41154],{"class":39},[33,150702,150703],{"class":47}," value:\n",[33,150705,150706],{"class":35,"line":1775},[33,150707,150708],{"class":39},"        continue\n",[33,150710,150711],{"class":35,"line":1780},[33,150712,100],{"emptyLinePlaceholder":99},[33,150714,150715,150717,150719],{"class":35,"line":1785},[33,150716,150416],{"class":47},[33,150718,150194],{"class":60},[33,150720,6907],{"class":47},[33,150722,150723,150726,150728],{"class":35,"line":1940},[33,150724,150725],{"class":47},"    sales.append(",[33,150727,2436],{"class":72},[33,150729,150730],{"class":47},"(value))\n",[33,150732,150733],{"class":35,"line":2183},[33,150734,100],{"emptyLinePlaceholder":99},[33,150736,150737,150739],{"class":35,"line":2208},[33,150738,122],{"class":72},[33,150740,150741],{"class":47},"(dates)\n",[33,150743,150744,150746],{"class":35,"line":2234},[33,150745,122],{"class":72},[33,150747,150748],{"class":47},"(sales)\n",[14,150750,150752],{"id":150751},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[23,150754,150756],{"className":25,"code":150755,"language":27,"meta":28,"style":28},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[30,150757,150758,150772,150782,150786,150794,150815,150837,150859,150881,150903,150907,150911,150933,150954,150958,150966,150970,150974,150984,150993,151003,151019,151023,151027,151044,151060,151076,151092,151102,151106],{"__ignoreMap":28},[33,150759,150760,150762,150764,150766,150768,150770],{"class":35,"line":36},[33,150761,32970],{"class":39},[33,150763,149576],{"class":47},[33,150765,32627],{"class":39},[33,150767,149581],{"class":47},[33,150769,33613],{"class":39},[33,150771,149586],{"class":47},[33,150773,150774,150776,150778,150780],{"class":35,"line":51},[33,150775,32970],{"class":39},[33,150777,149435],{"class":47},[33,150779,32627],{"class":39},[33,150781,149440],{"class":47},[33,150783,150784],{"class":35,"line":64},[33,150785,100],{"emptyLinePlaceholder":99},[33,150787,150788,150790,150792],{"class":35,"line":76},[33,150789,150661],{"class":47},[33,150791,57],{"class":39},[33,150793,1087],{"class":47},[33,150795,150796,150798,150800,150802,150805,150807,150809,150811,150813],{"class":35,"line":87},[33,150797,1092],{"class":47},[33,150799,150194],{"class":60},[33,150801,996],{"class":47},[33,150803,150804],{"class":60},"\"2024-10-01\"",[33,150806,245],{"class":47},[33,150808,86293],{"class":60},[33,150810,996],{"class":47},[33,150812,94231],{"class":72},[33,150814,1111],{"class":47},[33,150816,150817,150819,150821,150823,150826,150828,150830,150832,150835],{"class":35,"line":96},[33,150818,1092],{"class":47},[33,150820,150194],{"class":60},[33,150822,996],{"class":47},[33,150824,150825],{"class":60},"\"2024-10-02\"",[33,150827,245],{"class":47},[33,150829,86293],{"class":60},[33,150831,996],{"class":47},[33,150833,150834],{"class":72},"1800",[33,150836,1111],{"class":47},[33,150838,150839,150841,150843,150845,150848,150850,150852,150854,150857],{"class":35,"line":103},[33,150840,1092],{"class":47},[33,150842,150194],{"class":60},[33,150844,996],{"class":47},[33,150846,150847],{"class":60},"\"2024-10-03\"",[33,150849,245],{"class":47},[33,150851,86293],{"class":60},[33,150853,996],{"class":47},[33,150855,150856],{"class":72},"1500",[33,150858,1111],{"class":47},[33,150860,150861,150863,150865,150867,150870,150872,150874,150876,150879],{"class":35,"line":108},[33,150862,1092],{"class":47},[33,150864,150194],{"class":60},[33,150866,996],{"class":47},[33,150868,150869],{"class":60},"\"2024-10-04\"",[33,150871,245],{"class":47},[33,150873,86293],{"class":60},[33,150875,996],{"class":47},[33,150877,150878],{"class":72},"2100",[33,150880,1111],{"class":47},[33,150882,150883,150885,150887,150889,150892,150894,150896,150898,150901],{"class":35,"line":119},[33,150884,1092],{"class":47},[33,150886,150194],{"class":60},[33,150888,996],{"class":47},[33,150890,150891],{"class":60},"\"2024-10-05\"",[33,150893,245],{"class":47},[33,150895,86293],{"class":60},[33,150897,996],{"class":47},[33,150899,150900],{"class":72},"2600",[33,150902,1111],{"class":47},[33,150904,150905],{"class":35,"line":128},[33,150906,919],{"class":47},[33,150908,150909],{"class":35,"line":1753},[33,150910,100],{"emptyLinePlaceholder":99},[33,150912,150913,150915,150917,150920,150922,150924,150926,150928,150930],{"class":35,"line":1763},[33,150914,149997],{"class":47},[33,150916,57],{"class":39},[33,150918,150919],{"class":47}," [item[",[33,150921,150194],{"class":60},[33,150923,2172],{"class":47},[33,150925,5282],{"class":39},[33,150927,150406],{"class":47},[33,150929,681],{"class":39},[33,150931,150932],{"class":47}," sales]\n",[33,150934,150935,150938,150940,150942,150944,150946,150948,150950,150952],{"class":35,"line":1775},[33,150936,150937],{"class":47},"amounts ",[33,150939,57],{"class":39},[33,150941,150919],{"class":47},[33,150943,86293],{"class":60},[33,150945,2172],{"class":47},[33,150947,5282],{"class":39},[33,150949,150406],{"class":47},[33,150951,681],{"class":39},[33,150953,150932],{"class":47},[33,150955,150956],{"class":35,"line":1780},[33,150957,100],{"emptyLinePlaceholder":99},[33,150959,150960,150962,150964],{"class":35,"line":1785},[33,150961,149449],{"class":47},[33,150963,57],{"class":39},[33,150965,149454],{"class":47},[33,150967,150968],{"class":35,"line":1940},[33,150969,150038],{"class":47},[33,150971,150972],{"class":35,"line":2183},[33,150973,149846],{"class":47},[33,150975,150976,150978,150980,150982],{"class":35,"line":2208},[33,150977,149851],{"class":289},[33,150979,57],{"class":39},[33,150981,149492],{"class":60},[33,150983,33696],{"class":47},[33,150985,150986,150988,150990],{"class":35,"line":2234},[33,150987,149862],{"class":289},[33,150989,57],{"class":39},[33,150991,150992],{"class":47},"amounts,\n",[33,150994,150995,150997,150999,151001],{"class":35,"line":2239},[33,150996,149891],{"class":289},[33,150998,57],{"class":39},[33,151000,1190],{"class":72},[33,151002,33696],{"class":47},[33,151004,151005,151007,151009,151011,151013,151015,151017],{"class":35,"line":2247},[33,151006,149902],{"class":289},[33,151008,57],{"class":39},[33,151010,149907],{"class":47},[33,151012,149910],{"class":289},[33,151014,57],{"class":39},[33,151016,1190],{"class":72},[33,151018,40272],{"class":47},[33,151020,151021],{"class":35,"line":2255},[33,151022,226],{"class":47},[33,151024,151025],{"class":35,"line":3992},[33,151026,149665],{"class":47},[33,151028,151029,151031,151033,151035,151037,151039,151042],{"class":35,"line":4009},[33,151030,149670],{"class":289},[33,151032,57],{"class":39},[33,151034,149675],{"class":47},[33,151036,53629],{"class":289},[33,151038,57],{"class":39},[33,151040,151041],{"class":60},"\"每日销售额\"",[33,151043,40272],{"class":47},[33,151045,151046,151048,151050,151052,151054,151056,151058],{"class":35,"line":4014},[33,151047,149689],{"class":289},[33,151049,57],{"class":39},[33,151051,149694],{"class":47},[33,151053,207],{"class":289},[33,151055,57],{"class":39},[33,151057,149701],{"class":60},[33,151059,40272],{"class":47},[33,151061,151062,151064,151066,151068,151070,151072,151074],{"class":35,"line":4019},[33,151063,149708],{"class":289},[33,151065,57],{"class":39},[33,151067,149694],{"class":47},[33,151069,207],{"class":289},[33,151071,57],{"class":39},[33,151073,149719],{"class":60},[33,151075,40272],{"class":47},[33,151077,151078,151080,151082,151084,151086,151088,151090],{"class":35,"line":4024},[33,151079,149726],{"class":289},[33,151081,57],{"class":39},[33,151083,149731],{"class":47},[33,151085,149734],{"class":289},[33,151087,57],{"class":39},[33,151089,149739],{"class":60},[33,151091,40272],{"class":47},[33,151093,151094,151097,151099],{"class":35,"line":4038},[33,151095,151096],{"class":289},"    datazoom_opts",[33,151098,57],{"class":39},[33,151100,151101],{"class":47},"[opts.DataZoomOpts()],\n",[33,151103,151104],{"class":35,"line":4043},[33,151105,226],{"class":47},[33,151107,151108,151110,151113],{"class":35,"line":4834},[33,151109,149521],{"class":47},[33,151111,151112],{"class":60},"\"daily_sales.html\"",[33,151114,226],{"class":47},[19,151116,151117,151120],{},[30,151118,151119],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,151122,151124],{"id":151123},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,151126,151127],{},"如果数据结构如下：",[23,151129,151131],{"className":25,"code":151130,"language":27,"meta":28,"style":28},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[30,151132,151133,151141,151149,151171,151192,151197,151204,151224,151244,151248],{"__ignoreMap":28},[33,151134,151135,151137,151139],{"class":35,"line":36},[33,151136,103863],{"class":47},[33,151138,57],{"class":39},[33,151140,17810],{"class":47},[33,151142,151143,151146],{"class":35,"line":51},[33,151144,151145],{"class":60},"    \"北京\"",[33,151147,151148],{"class":47},": [\n",[33,151150,151151,151153,151155,151157,151160,151162,151165,151167,151169],{"class":35,"line":64},[33,151152,7167],{"class":47},[33,151154,150194],{"class":60},[33,151156,996],{"class":47},[33,151158,151159],{"class":60},"\"2024-01-01\"",[33,151161,245],{"class":47},[33,151163,151164],{"class":60},"\"confirm\"",[33,151166,996],{"class":47},[33,151168,1279],{"class":72},[33,151170,1111],{"class":47},[33,151172,151173,151175,151177,151179,151182,151184,151186,151188,151190],{"class":35,"line":76},[33,151174,7167],{"class":47},[33,151176,150194],{"class":60},[33,151178,996],{"class":47},[33,151180,151181],{"class":60},"\"2024-01-02\"",[33,151183,245],{"class":47},[33,151185,151164],{"class":60},[33,151187,996],{"class":47},[33,151189,2915],{"class":72},[33,151191,1111],{"class":47},[33,151193,151194],{"class":35,"line":87},[33,151195,151196],{"class":47},"    ],\n",[33,151198,151199,151202],{"class":35,"line":96},[33,151200,151201],{"class":60},"    \"上海\"",[33,151203,151148],{"class":47},[33,151205,151206,151208,151210,151212,151214,151216,151218,151220,151222],{"class":35,"line":103},[33,151207,7167],{"class":47},[33,151209,150194],{"class":60},[33,151211,996],{"class":47},[33,151213,151159],{"class":60},[33,151215,245],{"class":47},[33,151217,151164],{"class":60},[33,151219,996],{"class":47},[33,151221,2816],{"class":72},[33,151223,1111],{"class":47},[33,151225,151226,151228,151230,151232,151234,151236,151238,151240,151242],{"class":35,"line":108},[33,151227,7167],{"class":47},[33,151229,150194],{"class":60},[33,151231,996],{"class":47},[33,151233,151181],{"class":60},[33,151235,245],{"class":47},[33,151237,151164],{"class":60},[33,151239,996],{"class":47},[33,151241,2940],{"class":72},[33,151243,1111],{"class":47},[33,151245,151246],{"class":35,"line":119},[33,151247,151196],{"class":47},[33,151249,151250],{"class":35,"line":128},[33,151251,1010],{"class":47},[19,151253,151254],{},"绘制多地区趋势：",[23,151256,151258],{"className":25,"code":151257,"language":27,"meta":28,"style":28},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[30,151259,151260,151274,151284,151288,151313,151317,151325,151329,151333,151345,151367,151380,151384,151388,151405,151421,151425],{"__ignoreMap":28},[33,151261,151262,151264,151266,151268,151270,151272],{"class":35,"line":36},[33,151263,32970],{"class":39},[33,151265,149576],{"class":47},[33,151267,32627],{"class":39},[33,151269,149581],{"class":47},[33,151271,33613],{"class":39},[33,151273,149586],{"class":47},[33,151275,151276,151278,151280,151282],{"class":35,"line":51},[33,151277,32970],{"class":39},[33,151279,149435],{"class":47},[33,151281,32627],{"class":39},[33,151283,149440],{"class":47},[33,151285,151286],{"class":35,"line":64},[33,151287,100],{"emptyLinePlaceholder":99},[33,151289,151290,151292,151294,151296,151298,151300,151302,151304,151306,151309,151311],{"class":35,"line":76},[33,151291,149997],{"class":47},[33,151293,57],{"class":39},[33,151295,150919],{"class":47},[33,151297,150194],{"class":60},[33,151299,2172],{"class":47},[33,151301,5282],{"class":39},[33,151303,150406],{"class":47},[33,151305,681],{"class":39},[33,151307,151308],{"class":47}," data[",[33,151310,847],{"class":60},[33,151312,79738],{"class":47},[33,151314,151315],{"class":35,"line":87},[33,151316,100],{"emptyLinePlaceholder":99},[33,151318,151319,151321,151323],{"class":35,"line":96},[33,151320,149449],{"class":47},[33,151322,57],{"class":39},[33,151324,149454],{"class":47},[33,151326,151327],{"class":35,"line":103},[33,151328,150038],{"class":47},[33,151330,151331],{"class":35,"line":108},[33,151332,100],{"emptyLinePlaceholder":99},[33,151334,151335,151337,151340,151342],{"class":35,"line":119},[33,151336,5282],{"class":39},[33,151338,151339],{"class":47}," city, records ",[33,151341,681],{"class":39},[33,151343,151344],{"class":47}," data.items():\n",[33,151346,151347,151350,151352,151354,151356,151358,151360,151362,151364],{"class":35,"line":128},[33,151348,151349],{"class":47},"    values ",[33,151351,57],{"class":39},[33,151353,150919],{"class":47},[33,151355,151164],{"class":60},[33,151357,2172],{"class":47},[33,151359,5282],{"class":39},[33,151361,150406],{"class":47},[33,151363,681],{"class":39},[33,151365,151366],{"class":47}," records]\n",[33,151368,151369,151372,151374,151376,151378],{"class":35,"line":1753},[33,151370,151371],{"class":47},"    line.add_yaxis(city, values, ",[33,151373,149942],{"class":289},[33,151375,57],{"class":39},[33,151377,1190],{"class":72},[33,151379,226],{"class":47},[33,151381,151382],{"class":35,"line":1763},[33,151383,100],{"emptyLinePlaceholder":99},[33,151385,151386],{"class":35,"line":1775},[33,151387,149665],{"class":47},[33,151389,151390,151392,151394,151396,151398,151400,151403],{"class":35,"line":1780},[33,151391,149670],{"class":289},[33,151393,57],{"class":39},[33,151395,149675],{"class":47},[33,151397,53629],{"class":289},[33,151399,57],{"class":39},[33,151401,151402],{"class":60},"\"多地区趋势图\"",[33,151404,40272],{"class":47},[33,151406,151407,151409,151411,151413,151415,151417,151419],{"class":35,"line":1785},[33,151408,149726],{"class":289},[33,151410,57],{"class":39},[33,151412,149731],{"class":47},[33,151414,149734],{"class":289},[33,151416,57],{"class":39},[33,151418,149739],{"class":60},[33,151420,40272],{"class":47},[33,151422,151423],{"class":35,"line":1940},[33,151424,226],{"class":47},[33,151426,151427,151429,151432],{"class":35,"line":2183},[33,151428,149521],{"class":47},[33,151430,151431],{"class":60},"\"trend.html\"",[33,151433,226],{"class":47},[19,151435,151436],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151438,151440],{"id":151439},"_1012-易错点","10.12 易错点",[328,151442,151443,151449,151455,151465,151471],{},[331,151444,151445,151448],{},[30,151446,151447],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[331,151450,151451,151454],{},[30,151452,151453],{},"render()"," 生成的是 HTML，不是图片。",[331,151456,151457,151458,151461,151462,30622],{},"JSON 字符串用 ",[30,151459,151460],{},"json.loads()","，JSON 文件用 ",[30,151463,151464],{},"json.load()",[331,151466,151467,151468,30622],{},"中文 JSON 保存时加 ",[30,151469,151470],{},"ensure_ascii=False",[331,151472,151473],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151475,151477],{"id":151476},"_1013-本章练习","10.13 本章练习",[328,151479,151480,151483,151486,151489,151492],{},[331,151481,151482],{},"安装 pyecharts 并生成第一个折线图。",[331,151484,151485],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[331,151487,151488],{},"绘制两条折线，对比线上和线下销售额。",[331,151490,151491],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[331,151493,151494],{},"对含有空值的销售数据进行清洗后再绘图。",[2331,151496,151497],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":28,"searchDepth":51,"depth":51,"links":151499},[151500,151501,151502,151503,151504,151505,151506,151507,151508,151509,151510,151511,151512],{"id":149117,"depth":51,"text":149118},{"id":149192,"depth":51,"text":149193},{"id":149371,"depth":51,"text":149372},{"id":149422,"depth":51,"text":149423},{"id":149556,"depth":51,"text":149557},{"id":149832,"depth":51,"text":149833},{"id":149958,"depth":51,"text":149959},{"id":150169,"depth":51,"text":150170},{"id":150540,"depth":51,"text":150541},{"id":150751,"depth":51,"text":150752},{"id":151123,"depth":51,"text":151124},{"id":151439,"depth":51,"text":151440},{"id":151476,"depth":51,"text":151477},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":149109,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151519,"title":151520,"body":151521,"description":2359,"extension":2360,"meta":153869,"navigation":99,"path":153870,"seo":153871,"stem":153872,"__hash__":153873},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151522,"toc":153846},[151523,151526,151530,151533,151536,151606,151609,151700,151703,151707,151710,151753,151766,151770,151773,151840,151843,151847,151850,151934,151942,151946,151951,152091,152094,152105,152111,152117,152231,152235,152238,152241,152494,152497,152501,152504,152608,152611,152615,152766,152770,152777,152890,152894,152897,153003,153006,153010,153013,153044,153047,153151,153154,153158,153162,153172,153240,153244,153251,153313,153316,153320,153326,153422,153431,153435,153758,153767,153771,153799,153803,153843],[10,151524,151520],{"id":151525},"_11-面向对象基础",[14,151527,151529],{"id":151528},"_111-什么是面向对象","11.1 什么是面向对象",[19,151531,151532],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151534,151535],{},"面向过程：",[23,151537,151539],{"className":25,"code":151538,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[30,151540,151541,151549,151557,151561,151569,151597,151601],{"__ignoreMap":28},[33,151542,151543,151545,151547],{"class":35,"line":36},[33,151544,148734],{"class":47},[33,151546,57],{"class":39},[33,151548,61],{"class":60},[33,151550,151551,151553,151555],{"class":35,"line":51},[33,151552,148744],{"class":47},[33,151554,57],{"class":39},[33,151556,73],{"class":72},[33,151558,151559],{"class":35,"line":64},[33,151560,100],{"emptyLinePlaceholder":99},[33,151562,151563,151565,151567],{"class":35,"line":76},[33,151564,40],{"class":39},[33,151566,185],{"class":43},[33,151568,188],{"class":47},[33,151570,151571,151573,151575,151577,151579,151581,151583,151585,151587,151589,151591,151593,151595],{"class":35,"line":87},[33,151572,193],{"class":72},[33,151574,133],{"class":47},[33,151576,198],{"class":39},[33,151578,201],{"class":60},[33,151580,204],{"class":72},[33,151582,207],{"class":47},[33,151584,210],{"class":72},[33,151586,213],{"class":60},[33,151588,204],{"class":72},[33,151590,218],{"class":47},[33,151592,210],{"class":72},[33,151594,223],{"class":60},[33,151596,226],{"class":47},[33,151598,151599],{"class":35,"line":96},[33,151600,100],{"emptyLinePlaceholder":99},[33,151602,151603],{"class":35,"line":103},[33,151604,151605],{"class":47},"introduce(name, age)\n",[19,151607,151608],{},"面向对象：",[23,151610,151612],{"className":25,"code":151611,"language":27,"meta":28,"style":28},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[30,151613,151614,151622,151630,151659,151663,151667,151677,151686,151695],{"__ignoreMap":28},[33,151615,151616,151618,151620],{"class":35,"line":36},[33,151617,16934],{"class":39},[33,151619,10144],{"class":43},[33,151621,605],{"class":47},[33,151623,151624,151626,151628],{"class":35,"line":51},[33,151625,1603],{"class":39},[33,151627,185],{"class":43},[33,151629,33038],{"class":47},[33,151631,151632,151634,151636,151638,151640,151643,151645,151647,151649,151651,151653,151655,151657],{"class":35,"line":64},[33,151633,807],{"class":72},[33,151635,133],{"class":47},[33,151637,198],{"class":39},[33,151639,201],{"class":60},[33,151641,151642],{"class":72},"{self",[33,151644,82510],{"class":47},[33,151646,210],{"class":72},[33,151648,213],{"class":60},[33,151650,151642],{"class":72},[33,151652,82522],{"class":47},[33,151654,210],{"class":72},[33,151656,223],{"class":60},[33,151658,226],{"class":47},[33,151660,151661],{"class":35,"line":76},[33,151662,100],{"emptyLinePlaceholder":99},[33,151664,151665],{"class":35,"line":87},[33,151666,100],{"emptyLinePlaceholder":99},[33,151668,151669,151672,151674],{"class":35,"line":96},[33,151670,151671],{"class":47},"student ",[33,151673,57],{"class":39},[33,151675,151676],{"class":47}," Student()\n",[33,151678,151679,151682,151684],{"class":35,"line":103},[33,151680,151681],{"class":47},"student.name ",[33,151683,57],{"class":39},[33,151685,61],{"class":60},[33,151687,151688,151691,151693],{"class":35,"line":108},[33,151689,151690],{"class":47},"student.age ",[33,151692,57],{"class":39},[33,151694,73],{"class":72},[33,151696,151697],{"class":35,"line":119},[33,151698,151699],{"class":47},"student.introduce()\n",[19,151701,151702],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151704,151706],{"id":151705},"_112-类和对象","11.2 类和对象",[19,151708,151709],{},"类是模板，对象是根据模板创建出来的具体实例。",[23,151711,151713],{"className":25,"code":151712,"language":27,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[30,151714,151715,151723,151727,151731,151735,151744],{"__ignoreMap":28},[33,151716,151717,151719,151721],{"class":35,"line":36},[33,151718,16934],{"class":39},[33,151720,10144],{"class":43},[33,151722,605],{"class":47},[33,151724,151725],{"class":35,"line":51},[33,151726,462],{"class":39},[33,151728,151729],{"class":35,"line":64},[33,151730,100],{"emptyLinePlaceholder":99},[33,151732,151733],{"class":35,"line":76},[33,151734,100],{"emptyLinePlaceholder":99},[33,151736,151737,151740,151742],{"class":35,"line":87},[33,151738,151739],{"class":47},"student1 ",[33,151741,57],{"class":39},[33,151743,151676],{"class":47},[33,151745,151746,151749,151751],{"class":35,"line":96},[33,151747,151748],{"class":47},"student2 ",[33,151750,57],{"class":39},[33,151752,151676],{"class":47},[19,151754,151755,151758,151759,1958,151762,151765],{},[30,151756,151757],{},"Student"," 是类，",[30,151760,151761],{},"student1",[30,151763,151764],{},"student2"," 是对象。",[14,151767,151769],{"id":151768},"_113-属性","11.3 属性",[19,151771,151772],{},"属性是对象保存的数据。",[23,151774,151776],{"className":25,"code":151775,"language":27,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[30,151777,151778,151786,151790,151794,151798,151806,151814,151822,151826,151833],{"__ignoreMap":28},[33,151779,151780,151782,151784],{"class":35,"line":36},[33,151781,16934],{"class":39},[33,151783,10144],{"class":43},[33,151785,605],{"class":47},[33,151787,151788],{"class":35,"line":51},[33,151789,462],{"class":39},[33,151791,151792],{"class":35,"line":64},[33,151793,100],{"emptyLinePlaceholder":99},[33,151795,151796],{"class":35,"line":76},[33,151797,100],{"emptyLinePlaceholder":99},[33,151799,151800,151802,151804],{"class":35,"line":87},[33,151801,151671],{"class":47},[33,151803,57],{"class":39},[33,151805,151676],{"class":47},[33,151807,151808,151810,151812],{"class":35,"line":96},[33,151809,151681],{"class":47},[33,151811,57],{"class":39},[33,151813,61],{"class":60},[33,151815,151816,151818,151820],{"class":35,"line":103},[33,151817,151690],{"class":47},[33,151819,57],{"class":39},[33,151821,73],{"class":72},[33,151823,151824],{"class":35,"line":108},[33,151825,100],{"emptyLinePlaceholder":99},[33,151827,151828,151830],{"class":35,"line":119},[33,151829,122],{"class":72},[33,151831,151832],{"class":47},"(student.name)\n",[33,151834,151835,151837],{"class":35,"line":128},[33,151836,122],{"class":72},[33,151838,151839],{"class":47},"(student.age)\n",[19,151841,151842],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151844,151846],{"id":151845},"_114-方法","11.4 方法",[19,151848,151849],{},"类中的函数叫方法。",[23,151851,151852],{"className":25,"code":151611,"language":27,"meta":28,"style":28},[30,151853,151854,151862,151870,151898,151902,151906,151914,151922,151930],{"__ignoreMap":28},[33,151855,151856,151858,151860],{"class":35,"line":36},[33,151857,16934],{"class":39},[33,151859,10144],{"class":43},[33,151861,605],{"class":47},[33,151863,151864,151866,151868],{"class":35,"line":51},[33,151865,1603],{"class":39},[33,151867,185],{"class":43},[33,151869,33038],{"class":47},[33,151871,151872,151874,151876,151878,151880,151882,151884,151886,151888,151890,151892,151894,151896],{"class":35,"line":64},[33,151873,807],{"class":72},[33,151875,133],{"class":47},[33,151877,198],{"class":39},[33,151879,201],{"class":60},[33,151881,151642],{"class":72},[33,151883,82510],{"class":47},[33,151885,210],{"class":72},[33,151887,213],{"class":60},[33,151889,151642],{"class":72},[33,151891,82522],{"class":47},[33,151893,210],{"class":72},[33,151895,223],{"class":60},[33,151897,226],{"class":47},[33,151899,151900],{"class":35,"line":76},[33,151901,100],{"emptyLinePlaceholder":99},[33,151903,151904],{"class":35,"line":87},[33,151905,100],{"emptyLinePlaceholder":99},[33,151907,151908,151910,151912],{"class":35,"line":96},[33,151909,151671],{"class":47},[33,151911,57],{"class":39},[33,151913,151676],{"class":47},[33,151915,151916,151918,151920],{"class":35,"line":103},[33,151917,151681],{"class":47},[33,151919,57],{"class":39},[33,151921,61],{"class":60},[33,151923,151924,151926,151928],{"class":35,"line":108},[33,151925,151690],{"class":47},[33,151927,57],{"class":39},[33,151929,73],{"class":72},[33,151931,151932],{"class":35,"line":119},[33,151933,151699],{"class":47},[19,151935,151936,151938,151939,151941],{},[30,151937,33054],{}," 表示当前对象。调用方法时不需要手动传入 ",[30,151940,33054],{},"，Python 会自动传。",[14,151943,151945],{"id":151944},"_115-构造方法__init__","11.5 构造方法__init__",[19,151947,151948,151950],{},[30,151949,33060],{}," 在对象创建时自动执行，用于初始化属性。",[23,151952,151954],{"className":25,"code":151953,"language":27,"meta":28,"style":28},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[30,151955,151956,151964,151973,151985,151997,152008,152012,152020,152058,152062,152066,152087],{"__ignoreMap":28},[33,151957,151958,151960,151962],{"class":35,"line":36},[33,151959,16934],{"class":39},[33,151961,10144],{"class":43},[33,151963,605],{"class":47},[33,151965,151966,151968,151970],{"class":35,"line":51},[33,151967,1603],{"class":39},[33,151969,33035],{"class":72},[33,151971,151972],{"class":47},"(self, name, age, score):\n",[33,151974,151975,151977,151980,151982],{"class":35,"line":64},[33,151976,33076],{"class":72},[33,151978,151979],{"class":47},".name ",[33,151981,57],{"class":39},[33,151983,151984],{"class":47}," name\n",[33,151986,151987,151989,151992,151994],{"class":35,"line":76},[33,151988,33076],{"class":72},[33,151990,151991],{"class":47},".age ",[33,151993,57],{"class":39},[33,151995,151996],{"class":47}," age\n",[33,151998,151999,152001,152004,152006],{"class":35,"line":87},[33,152000,33076],{"class":72},[33,152002,152003],{"class":47},".score ",[33,152005,57],{"class":39},[33,152007,3852],{"class":47},[33,152009,152010],{"class":35,"line":96},[33,152011,100],{"emptyLinePlaceholder":99},[33,152013,152014,152016,152018],{"class":35,"line":103},[33,152015,1603],{"class":39},[33,152017,185],{"class":43},[33,152019,33038],{"class":47},[33,152021,152022,152024,152026,152028,152030,152032,152034,152036,152038,152040,152042,152044,152047,152049,152052,152054,152056],{"class":35,"line":108},[33,152023,807],{"class":72},[33,152025,133],{"class":47},[33,152027,198],{"class":39},[33,152029,201],{"class":60},[33,152031,151642],{"class":72},[33,152033,82510],{"class":47},[33,152035,210],{"class":72},[33,152037,213],{"class":60},[33,152039,151642],{"class":72},[33,152041,82522],{"class":47},[33,152043,210],{"class":72},[33,152045,152046],{"class":60},"岁，成绩",[33,152048,151642],{"class":72},[33,152050,152051],{"class":47},".score",[33,152053,210],{"class":72},[33,152055,397],{"class":60},[33,152057,226],{"class":47},[33,152059,152060],{"class":35,"line":119},[33,152061,100],{"emptyLinePlaceholder":99},[33,152063,152064],{"class":35,"line":128},[33,152065,100],{"emptyLinePlaceholder":99},[33,152067,152068,152070,152072,152075,152077,152079,152081,152083,152085],{"class":35,"line":1753},[33,152069,151671],{"class":47},[33,152071,57],{"class":39},[33,152073,152074],{"class":47}," Student(",[33,152076,242],{"class":60},[33,152078,245],{"class":47},[33,152080,248],{"class":72},[33,152082,245],{"class":47},[33,152084,1108],{"class":72},[33,152086,226],{"class":47},[33,152088,152089],{"class":35,"line":1763},[33,152090,151699],{"class":47},[19,152092,152093],{},"构造方法的好处：",[328,152095,152096,152099,152102],{},[331,152097,152098],{},"创建对象时必须提供必要数据。",[331,152100,152101],{},"属性初始化集中，不容易漏。",[331,152103,152104],{},"对象状态更完整。",[14,152106,152108,152109],{"id":152107},"_116-str","11.6 ",[2575,152110,3576],{},[19,152112,152113,152114,30622],{},"直接打印对象时，默认输出不直观。可以定义 ",[30,152115,152116],{},"__str__",[23,152118,152120],{"className":25,"code":152119,"language":27,"meta":28,"style":28},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[30,152121,152122,152130,152139,152149,152159,152163,152172,152200,152204,152208,152224],{"__ignoreMap":28},[33,152123,152124,152126,152128],{"class":35,"line":36},[33,152125,16934],{"class":39},[33,152127,10144],{"class":43},[33,152129,605],{"class":47},[33,152131,152132,152134,152136],{"class":35,"line":51},[33,152133,1603],{"class":39},[33,152135,33035],{"class":72},[33,152137,152138],{"class":47},"(self, name, age):\n",[33,152140,152141,152143,152145,152147],{"class":35,"line":64},[33,152142,33076],{"class":72},[33,152144,151979],{"class":47},[33,152146,57],{"class":39},[33,152148,151984],{"class":47},[33,152150,152151,152153,152155,152157],{"class":35,"line":76},[33,152152,33076],{"class":72},[33,152154,151991],{"class":47},[33,152156,57],{"class":39},[33,152158,151996],{"class":47},[33,152160,152161],{"class":35,"line":87},[33,152162,100],{"emptyLinePlaceholder":99},[33,152164,152165,152167,152170],{"class":35,"line":96},[33,152166,1603],{"class":39},[33,152168,152169],{"class":72}," __str__",[33,152171,33038],{"class":47},[33,152173,152174,152176,152179,152182,152184,152186,152188,152191,152193,152195,152197],{"class":35,"line":103},[33,152175,1614],{"class":39},[33,152177,152178],{"class":39}," f",[33,152180,152181],{"class":60},"\"Student(name=",[33,152183,151642],{"class":72},[33,152185,82510],{"class":47},[33,152187,210],{"class":72},[33,152189,152190],{"class":60},", age=",[33,152192,151642],{"class":72},[33,152194,82522],{"class":47},[33,152196,210],{"class":72},[33,152198,152199],{"class":60},")\"\n",[33,152201,152202],{"class":35,"line":108},[33,152203,100],{"emptyLinePlaceholder":99},[33,152205,152206],{"class":35,"line":119},[33,152207,100],{"emptyLinePlaceholder":99},[33,152209,152210,152212,152214,152216,152218,152220,152222],{"class":35,"line":128},[33,152211,151671],{"class":47},[33,152213,57],{"class":39},[33,152215,152074],{"class":47},[33,152217,242],{"class":60},[33,152219,245],{"class":47},[33,152221,248],{"class":72},[33,152223,226],{"class":47},[33,152225,152226,152228],{"class":35,"line":1753},[33,152227,122],{"class":72},[33,152229,152230],{"class":47},"(student)\n",[14,152232,152234],{"id":152233},"_117-封装","11.7 封装",[19,152236,152237],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,152239,152240],{},"Python 中以双下划线开头的属性通常视为私有属性。",[23,152242,152244],{"className":25,"code":152243,"language":27,"meta":28,"style":28},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[30,152245,152246,152255,152264,152276,152288,152292,152301,152310,152314,152324,152337,152348,152353,152364,152368,152377,152389,152400,152404,152417,152428,152432,152443,152447,152451,152469,152478,152487],{"__ignoreMap":28},[33,152247,152248,152250,152253],{"class":35,"line":36},[33,152249,16934],{"class":39},[33,152251,152252],{"class":43}," Account",[33,152254,605],{"class":47},[33,152256,152257,152259,152261],{"class":35,"line":51},[33,152258,1603],{"class":39},[33,152260,33035],{"class":72},[33,152262,152263],{"class":47},"(self, owner, balance):\n",[33,152265,152266,152268,152271,152273],{"class":35,"line":64},[33,152267,33076],{"class":72},[33,152269,152270],{"class":47},".owner ",[33,152272,57],{"class":39},[33,152274,152275],{"class":47}," owner\n",[33,152277,152278,152280,152283,152285],{"class":35,"line":76},[33,152279,33076],{"class":72},[33,152281,152282],{"class":47},".__balance ",[33,152284,57],{"class":39},[33,152286,152287],{"class":47}," balance\n",[33,152289,152290],{"class":35,"line":87},[33,152291,100],{"emptyLinePlaceholder":99},[33,152293,152294,152296,152299],{"class":35,"line":96},[33,152295,1603],{"class":39},[33,152297,152298],{"class":43}," get_balance",[33,152300,33038],{"class":47},[33,152302,152303,152305,152307],{"class":35,"line":103},[33,152304,1614],{"class":39},[33,152306,41098],{"class":72},[33,152308,152309],{"class":47},".__balance\n",[33,152311,152312],{"class":35,"line":108},[33,152313,100],{"emptyLinePlaceholder":99},[33,152315,152316,152318,152321],{"class":35,"line":119},[33,152317,1603],{"class":39},[33,152319,152320],{"class":43}," deposit",[33,152322,152323],{"class":47},"(self, money):\n",[33,152325,152326,152328,152331,152333,152335],{"class":35,"line":128},[33,152327,2130],{"class":39},[33,152329,152330],{"class":47}," money ",[33,152332,3861],{"class":39},[33,152334,1437],{"class":72},[33,152336,605],{"class":47},[33,152338,152339,152341,152343,152346],{"class":35,"line":1753},[33,152340,36875],{"class":72},[33,152342,133],{"class":47},[33,152344,152345],{"class":60},"\"存款金额必须大于0\"",[33,152347,226],{"class":47},[33,152349,152350],{"class":35,"line":1763},[33,152351,152352],{"class":39},"            return\n",[33,152354,152355,152357,152359,152361],{"class":35,"line":1775},[33,152356,33076],{"class":72},[33,152358,152282],{"class":47},[33,152360,692],{"class":39},[33,152362,152363],{"class":47}," money\n",[33,152365,152366],{"class":35,"line":1780},[33,152367,100],{"emptyLinePlaceholder":99},[33,152369,152370,152372,152375],{"class":35,"line":1785},[33,152371,1603],{"class":39},[33,152373,152374],{"class":43}," withdraw",[33,152376,152323],{"class":47},[33,152378,152379,152381,152383,152385,152387],{"class":35,"line":1940},[33,152380,2130],{"class":39},[33,152382,152330],{"class":47},[33,152384,3861],{"class":39},[33,152386,1437],{"class":72},[33,152388,605],{"class":47},[33,152390,152391,152393,152395,152398],{"class":35,"line":2183},[33,152392,36875],{"class":72},[33,152394,133],{"class":47},[33,152396,152397],{"class":60},"\"取款金额必须大于0\"",[33,152399,226],{"class":47},[33,152401,152402],{"class":35,"line":2208},[33,152403,152352],{"class":39},[33,152405,152406,152408,152410,152412,152414],{"class":35,"line":2234},[33,152407,2130],{"class":39},[33,152409,152330],{"class":47},[33,152411,3367],{"class":39},[33,152413,41098],{"class":72},[33,152415,152416],{"class":47},".__balance:\n",[33,152418,152419,152421,152423,152426],{"class":35,"line":2239},[33,152420,36875],{"class":72},[33,152422,133],{"class":47},[33,152424,152425],{"class":60},"\"余额不足\"",[33,152427,226],{"class":47},[33,152429,152430],{"class":35,"line":2247},[33,152431,152352],{"class":39},[33,152433,152434,152436,152438,152441],{"class":35,"line":2255},[33,152435,33076],{"class":72},[33,152437,152282],{"class":47},[33,152439,152440],{"class":39},"-=",[33,152442,152363],{"class":47},[33,152444,152445],{"class":35,"line":3992},[33,152446,100],{"emptyLinePlaceholder":99},[33,152448,152449],{"class":35,"line":4009},[33,152450,100],{"emptyLinePlaceholder":99},[33,152452,152453,152456,152458,152461,152463,152465,152467],{"class":35,"line":4014},[33,152454,152455],{"class":47},"account ",[33,152457,57],{"class":39},[33,152459,152460],{"class":47}," Account(",[33,152462,242],{"class":60},[33,152464,245],{"class":47},[33,152466,8656],{"class":72},[33,152468,226],{"class":47},[33,152470,152471,152474,152476],{"class":35,"line":4019},[33,152472,152473],{"class":47},"account.deposit(",[33,152475,3983],{"class":72},[33,152477,226],{"class":47},[33,152479,152480,152483,152485],{"class":35,"line":4024},[33,152481,152482],{"class":47},"account.withdraw(",[33,152484,2734],{"class":72},[33,152486,226],{"class":47},[33,152488,152489,152491],{"class":35,"line":4038},[33,152490,122],{"class":72},[33,152492,152493],{"class":47},"(account.get_balance())\n",[19,152495,152496],{},"封装的意义是避免外部随意修改内部状态。",[14,152498,152500],{"id":152499},"_118-继承","11.8 继承",[19,152502,152503],{},"继承可以让子类复用父类的属性和方法。",[23,152505,152507],{"className":25,"code":152506,"language":27,"meta":28,"style":28},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[30,152508,152509,152518,152527,152538,152542,152546,152560,152569,152580,152584,152588,152598,152603],{"__ignoreMap":28},[33,152510,152511,152513,152516],{"class":35,"line":36},[33,152512,16934],{"class":39},[33,152514,152515],{"class":43}," Animal",[33,152517,605],{"class":47},[33,152519,152520,152522,152525],{"class":35,"line":51},[33,152521,1603],{"class":39},[33,152523,152524],{"class":43}," eat",[33,152526,33038],{"class":47},[33,152528,152529,152531,152533,152536],{"class":35,"line":64},[33,152530,807],{"class":72},[33,152532,133],{"class":47},[33,152534,152535],{"class":60},"\"吃东西\"",[33,152537,226],{"class":47},[33,152539,152540],{"class":35,"line":76},[33,152541,100],{"emptyLinePlaceholder":99},[33,152543,152544],{"class":35,"line":87},[33,152545,100],{"emptyLinePlaceholder":99},[33,152547,152548,152550,152553,152555,152558],{"class":35,"line":96},[33,152549,16934],{"class":39},[33,152551,152552],{"class":43}," Dog",[33,152554,133],{"class":47},[33,152556,152557],{"class":43},"Animal",[33,152559,366],{"class":47},[33,152561,152562,152564,152567],{"class":35,"line":103},[33,152563,1603],{"class":39},[33,152565,152566],{"class":43}," bark",[33,152568,33038],{"class":47},[33,152570,152571,152573,152575,152578],{"class":35,"line":108},[33,152572,807],{"class":72},[33,152574,133],{"class":47},[33,152576,152577],{"class":60},"\"汪汪\"",[33,152579,226],{"class":47},[33,152581,152582],{"class":35,"line":119},[33,152583,100],{"emptyLinePlaceholder":99},[33,152585,152586],{"class":35,"line":128},[33,152587,100],{"emptyLinePlaceholder":99},[33,152589,152590,152593,152595],{"class":35,"line":1753},[33,152591,152592],{"class":47},"dog ",[33,152594,57],{"class":39},[33,152596,152597],{"class":47}," Dog()\n",[33,152599,152600],{"class":35,"line":1763},[33,152601,152602],{"class":47},"dog.eat()\n",[33,152604,152605],{"class":35,"line":1775},[33,152606,152607],{"class":47},"dog.bark()\n",[19,152609,152610],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152612,152614],{"id":152613},"_119-方法重写","11.9 方法重写",[23,152616,152618],{"className":25,"code":152617,"language":27,"meta":28,"style":28},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[30,152619,152620,152628,152637,152648,152652,152656,152668,152676,152686,152690,152694,152707,152715,152726,152730,152734,152742,152752,152756,152761],{"__ignoreMap":28},[33,152621,152622,152624,152626],{"class":35,"line":36},[33,152623,16934],{"class":39},[33,152625,152515],{"class":43},[33,152627,605],{"class":47},[33,152629,152630,152632,152635],{"class":35,"line":51},[33,152631,1603],{"class":39},[33,152633,152634],{"class":43}," speak",[33,152636,33038],{"class":47},[33,152638,152639,152641,152643,152646],{"class":35,"line":64},[33,152640,807],{"class":72},[33,152642,133],{"class":47},[33,152644,152645],{"class":60},"\"动物叫\"",[33,152647,226],{"class":47},[33,152649,152650],{"class":35,"line":76},[33,152651,100],{"emptyLinePlaceholder":99},[33,152653,152654],{"class":35,"line":87},[33,152655,100],{"emptyLinePlaceholder":99},[33,152657,152658,152660,152662,152664,152666],{"class":35,"line":96},[33,152659,16934],{"class":39},[33,152661,152552],{"class":43},[33,152663,133],{"class":47},[33,152665,152557],{"class":43},[33,152667,366],{"class":47},[33,152669,152670,152672,152674],{"class":35,"line":103},[33,152671,1603],{"class":39},[33,152673,152634],{"class":43},[33,152675,33038],{"class":47},[33,152677,152678,152680,152682,152684],{"class":35,"line":108},[33,152679,807],{"class":72},[33,152681,133],{"class":47},[33,152683,152577],{"class":60},[33,152685,226],{"class":47},[33,152687,152688],{"class":35,"line":119},[33,152689,100],{"emptyLinePlaceholder":99},[33,152691,152692],{"class":35,"line":128},[33,152693,100],{"emptyLinePlaceholder":99},[33,152695,152696,152698,152701,152703,152705],{"class":35,"line":1753},[33,152697,16934],{"class":39},[33,152699,152700],{"class":43}," Cat",[33,152702,133],{"class":47},[33,152704,152557],{"class":43},[33,152706,366],{"class":47},[33,152708,152709,152711,152713],{"class":35,"line":1763},[33,152710,1603],{"class":39},[33,152712,152634],{"class":43},[33,152714,33038],{"class":47},[33,152716,152717,152719,152721,152724],{"class":35,"line":1775},[33,152718,807],{"class":72},[33,152720,133],{"class":47},[33,152722,152723],{"class":60},"\"喵喵\"",[33,152725,226],{"class":47},[33,152727,152728],{"class":35,"line":1780},[33,152729,100],{"emptyLinePlaceholder":99},[33,152731,152732],{"class":35,"line":1785},[33,152733,100],{"emptyLinePlaceholder":99},[33,152735,152736,152738,152740],{"class":35,"line":1940},[33,152737,152592],{"class":47},[33,152739,57],{"class":39},[33,152741,152597],{"class":47},[33,152743,152744,152747,152749],{"class":35,"line":2183},[33,152745,152746],{"class":47},"cat ",[33,152748,57],{"class":39},[33,152750,152751],{"class":47}," Cat()\n",[33,152753,152754],{"class":35,"line":2208},[33,152755,100],{"emptyLinePlaceholder":99},[33,152757,152758],{"class":35,"line":2234},[33,152759,152760],{"class":47},"dog.speak()\n",[33,152762,152763],{"class":35,"line":2239},[33,152764,152765],{"class":47},"cat.speak()\n",[14,152767,152769],{"id":152768},"_1110-super","11.10 super",[19,152771,152772,152773,152776],{},"子类可以通过 ",[30,152774,152775],{},"super()"," 调用父类方法。",[23,152778,152780],{"className":25,"code":152779,"language":27,"meta":28,"style":28},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[30,152781,152782,152790,152799,152809,152813,152817,152829,152838,152849,152859,152863,152867,152883],{"__ignoreMap":28},[33,152783,152784,152786,152788],{"class":35,"line":36},[33,152785,16934],{"class":39},[33,152787,17807],{"class":43},[33,152789,605],{"class":47},[33,152791,152792,152794,152796],{"class":35,"line":51},[33,152793,1603],{"class":39},[33,152795,33035],{"class":72},[33,152797,152798],{"class":47},"(self, name):\n",[33,152800,152801,152803,152805,152807],{"class":35,"line":64},[33,152802,33076],{"class":72},[33,152804,151979],{"class":47},[33,152806,57],{"class":39},[33,152808,151984],{"class":47},[33,152810,152811],{"class":35,"line":76},[33,152812,100],{"emptyLinePlaceholder":99},[33,152814,152815],{"class":35,"line":87},[33,152816,100],{"emptyLinePlaceholder":99},[33,152818,152819,152821,152823,152825,152827],{"class":35,"line":96},[33,152820,16934],{"class":39},[33,152822,10144],{"class":43},[33,152824,133],{"class":47},[33,152826,21284],{"class":43},[33,152828,366],{"class":47},[33,152830,152831,152833,152835],{"class":35,"line":103},[33,152832,1603],{"class":39},[33,152834,33035],{"class":72},[33,152836,152837],{"class":47},"(self, name, score):\n",[33,152839,152840,152842,152844,152846],{"class":35,"line":108},[33,152841,33048],{"class":72},[33,152843,19499],{"class":47},[33,152845,33060],{"class":72},[33,152847,152848],{"class":47},"(name)\n",[33,152850,152851,152853,152855,152857],{"class":35,"line":119},[33,152852,33076],{"class":72},[33,152854,152003],{"class":47},[33,152856,57],{"class":39},[33,152858,3852],{"class":47},[33,152860,152861],{"class":35,"line":128},[33,152862,100],{"emptyLinePlaceholder":99},[33,152864,152865],{"class":35,"line":1753},[33,152866,100],{"emptyLinePlaceholder":99},[33,152868,152869,152871,152873,152875,152877,152879,152881],{"class":35,"line":1763},[33,152870,151671],{"class":47},[33,152872,57],{"class":39},[33,152874,152074],{"class":47},[33,152876,242],{"class":60},[33,152878,245],{"class":47},[33,152880,1108],{"class":72},[33,152882,226],{"class":47},[33,152884,152885,152887],{"class":35,"line":1775},[33,152886,122],{"class":72},[33,152888,152889],{"class":47},"(student.name, student.score)\n",[14,152891,152893],{"id":152892},"_1111-多态","11.11 多态",[19,152895,152896],{},"多态指不同对象响应同一个方法，表现出不同结果。",[23,152898,152900],{"className":25,"code":152899,"language":27,"meta":28,"style":28},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[30,152901,152902,152910,152918,152928,152932,152936,152944,152952,152962,152966,152970,152980,152985,152989,152993,152998],{"__ignoreMap":28},[33,152903,152904,152906,152908],{"class":35,"line":36},[33,152905,16934],{"class":39},[33,152907,152552],{"class":43},[33,152909,605],{"class":47},[33,152911,152912,152914,152916],{"class":35,"line":51},[33,152913,1603],{"class":39},[33,152915,152634],{"class":43},[33,152917,33038],{"class":47},[33,152919,152920,152922,152924,152926],{"class":35,"line":64},[33,152921,807],{"class":72},[33,152923,133],{"class":47},[33,152925,152577],{"class":60},[33,152927,226],{"class":47},[33,152929,152930],{"class":35,"line":76},[33,152931,100],{"emptyLinePlaceholder":99},[33,152933,152934],{"class":35,"line":87},[33,152935,100],{"emptyLinePlaceholder":99},[33,152937,152938,152940,152942],{"class":35,"line":96},[33,152939,16934],{"class":39},[33,152941,152700],{"class":43},[33,152943,605],{"class":47},[33,152945,152946,152948,152950],{"class":35,"line":103},[33,152947,1603],{"class":39},[33,152949,152634],{"class":43},[33,152951,33038],{"class":47},[33,152953,152954,152956,152958,152960],{"class":35,"line":108},[33,152955,807],{"class":72},[33,152957,133],{"class":47},[33,152959,152723],{"class":60},[33,152961,226],{"class":47},[33,152963,152964],{"class":35,"line":119},[33,152965,100],{"emptyLinePlaceholder":99},[33,152967,152968],{"class":35,"line":128},[33,152969,100],{"emptyLinePlaceholder":99},[33,152971,152972,152974,152977],{"class":35,"line":1753},[33,152973,40],{"class":39},[33,152975,152976],{"class":43}," make_sound",[33,152978,152979],{"class":47},"(animal):\n",[33,152981,152982],{"class":35,"line":1763},[33,152983,152984],{"class":47},"    animal.speak()\n",[33,152986,152987],{"class":35,"line":1775},[33,152988,100],{"emptyLinePlaceholder":99},[33,152990,152991],{"class":35,"line":1780},[33,152992,100],{"emptyLinePlaceholder":99},[33,152994,152995],{"class":35,"line":1785},[33,152996,152997],{"class":47},"make_sound(Dog())\n",[33,152999,153000],{"class":35,"line":1940},[33,153001,153002],{"class":47},"make_sound(Cat())\n",[19,153004,153005],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,153007,153009],{"id":153008},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,153011,153012],{},"实例属性属于对象：",[23,153014,153016],{"className":25,"code":153015,"language":27,"meta":28,"style":28},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[30,153017,153018,153026,153034],{"__ignoreMap":28},[33,153019,153020,153022,153024],{"class":35,"line":36},[33,153021,16934],{"class":39},[33,153023,10144],{"class":43},[33,153025,605],{"class":47},[33,153027,153028,153030,153032],{"class":35,"line":51},[33,153029,1603],{"class":39},[33,153031,33035],{"class":72},[33,153033,152798],{"class":47},[33,153035,153036,153038,153040,153042],{"class":35,"line":64},[33,153037,33076],{"class":72},[33,153039,151979],{"class":47},[33,153041,57],{"class":39},[33,153043,151984],{"class":47},[19,153045,153046],{},"类属性属于类，所有对象共享：",[23,153048,153050],{"className":25,"code":153049,"language":27,"meta":28,"style":28},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[30,153051,153052,153060,153070,153074,153082,153092,153096,153100,153113,153126,153130,153137,153144],{"__ignoreMap":28},[33,153053,153054,153056,153058],{"class":35,"line":36},[33,153055,16934],{"class":39},[33,153057,10144],{"class":43},[33,153059,605],{"class":47},[33,153061,153062,153065,153067],{"class":35,"line":51},[33,153063,153064],{"class":47},"    school ",[33,153066,57],{"class":39},[33,153068,153069],{"class":60}," \"黑马学校\"\n",[33,153071,153072],{"class":35,"line":64},[33,153073,100],{"emptyLinePlaceholder":99},[33,153075,153076,153078,153080],{"class":35,"line":76},[33,153077,1603],{"class":39},[33,153079,33035],{"class":72},[33,153081,152798],{"class":47},[33,153083,153084,153086,153088,153090],{"class":35,"line":87},[33,153085,33076],{"class":72},[33,153087,151979],{"class":47},[33,153089,57],{"class":39},[33,153091,151984],{"class":47},[33,153093,153094],{"class":35,"line":96},[33,153095,100],{"emptyLinePlaceholder":99},[33,153097,153098],{"class":35,"line":103},[33,153099,100],{"emptyLinePlaceholder":99},[33,153101,153102,153105,153107,153109,153111],{"class":35,"line":108},[33,153103,153104],{"class":47},"s1 ",[33,153106,57],{"class":39},[33,153108,152074],{"class":47},[33,153110,242],{"class":60},[33,153112,226],{"class":47},[33,153114,153115,153118,153120,153122,153124],{"class":35,"line":119},[33,153116,153117],{"class":47},"s2 ",[33,153119,57],{"class":39},[33,153121,152074],{"class":47},[33,153123,1122],{"class":60},[33,153125,226],{"class":47},[33,153127,153128],{"class":35,"line":128},[33,153129,100],{"emptyLinePlaceholder":99},[33,153131,153132,153134],{"class":35,"line":1753},[33,153133,122],{"class":72},[33,153135,153136],{"class":47},"(s1.school)\n",[33,153138,153139,153141],{"class":35,"line":1763},[33,153140,122],{"class":72},[33,153142,153143],{"class":47},"(s2.school)\n",[33,153145,153146,153148],{"class":35,"line":1775},[33,153147,122],{"class":72},[33,153149,153150],{"class":47},"(Student.school)\n",[19,153152,153153],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,153155,153157],{"id":153156},"_1113-类方法和静态方法","11.13 类方法和静态方法",[631,153159,153161],{"id":153160},"_11131-类方法","11.13.1 类方法",[19,153163,153164,153165,153168,153169,30622],{},"类方法使用 ",[30,153166,153167],{},"@classmethod","，第一个参数通常是 ",[30,153170,153171],{},"cls",[23,153173,153175],{"className":25,"code":153174,"language":27,"meta":28,"style":28},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[30,153176,153177,153185,153193,153197,153205,153215,153225,153229,153233],{"__ignoreMap":28},[33,153178,153179,153181,153183],{"class":35,"line":36},[33,153180,16934],{"class":39},[33,153182,10144],{"class":43},[33,153184,605],{"class":47},[33,153186,153187,153189,153191],{"class":35,"line":51},[33,153188,153064],{"class":47},[33,153190,57],{"class":39},[33,153192,153069],{"class":60},[33,153194,153195],{"class":35,"line":64},[33,153196,100],{"emptyLinePlaceholder":99},[33,153198,153199,153202],{"class":35,"line":76},[33,153200,153201],{"class":43},"    @",[33,153203,153204],{"class":72},"classmethod\n",[33,153206,153207,153209,153212],{"class":35,"line":87},[33,153208,1603],{"class":39},[33,153210,153211],{"class":43}," get_school",[33,153213,153214],{"class":47},"(cls):\n",[33,153216,153217,153219,153222],{"class":35,"line":96},[33,153218,1614],{"class":39},[33,153220,153221],{"class":72}," cls",[33,153223,153224],{"class":47},".school\n",[33,153226,153227],{"class":35,"line":103},[33,153228,100],{"emptyLinePlaceholder":99},[33,153230,153231],{"class":35,"line":108},[33,153232,100],{"emptyLinePlaceholder":99},[33,153234,153235,153237],{"class":35,"line":119},[33,153236,122],{"class":72},[33,153238,153239],{"class":47},"(Student.get_school())\n",[631,153241,153243],{"id":153242},"_11132-静态方法","11.13.2 静态方法",[19,153245,153246,153247,153250],{},"静态方法使用 ",[30,153248,153249],{},"@staticmethod","，不需要访问实例和类。",[23,153252,153254],{"className":25,"code":153253,"language":27,"meta":28,"style":28},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[30,153255,153256,153265,153272,153280,153290,153294,153298],{"__ignoreMap":28},[33,153257,153258,153260,153263],{"class":35,"line":36},[33,153259,16934],{"class":39},[33,153261,153262],{"class":43}," MathUtils",[33,153264,605],{"class":47},[33,153266,153267,153269],{"class":35,"line":51},[33,153268,153201],{"class":43},[33,153270,153271],{"class":72},"staticmethod\n",[33,153273,153274,153276,153278],{"class":35,"line":64},[33,153275,1603],{"class":39},[33,153277,652],{"class":43},[33,153279,1226],{"class":47},[33,153281,153282,153284,153286,153288],{"class":35,"line":76},[33,153283,1614],{"class":39},[33,153285,877],{"class":47},[33,153287,880],{"class":39},[33,153289,1052],{"class":47},[33,153291,153292],{"class":35,"line":87},[33,153293,100],{"emptyLinePlaceholder":99},[33,153295,153296],{"class":35,"line":96},[33,153297,100],{"emptyLinePlaceholder":99},[33,153299,153300,153302,153305,153307,153309,153311],{"class":35,"line":103},[33,153301,122],{"class":72},[33,153303,153304],{"class":47},"(MathUtils.add(",[33,153306,720],{"class":72},[33,153308,245],{"class":47},[33,153310,725],{"class":72},[33,153312,551],{"class":47},[19,153314,153315],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,153317,153319],{"id":153318},"_1114-dataclass","11.14 dataclass",[19,153321,153322,153325],{},[30,153323,153324],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[23,153327,153329],{"className":25,"code":153328,"language":27,"meta":28,"style":28},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[30,153330,153331,153343,153347,153351,153356,153364,153372,153380,153388,153392,153396,153416],{"__ignoreMap":28},[33,153332,153333,153335,153338,153340],{"class":35,"line":36},[33,153334,32970],{"class":39},[33,153336,153337],{"class":47}," dataclasses ",[33,153339,32627],{"class":39},[33,153341,153342],{"class":47}," dataclass\n",[33,153344,153345],{"class":35,"line":51},[33,153346,100],{"emptyLinePlaceholder":99},[33,153348,153349],{"class":35,"line":64},[33,153350,100],{"emptyLinePlaceholder":99},[33,153352,153353],{"class":35,"line":76},[33,153354,153355],{"class":43},"@dataclass\n",[33,153357,153358,153360,153362],{"class":35,"line":87},[33,153359,16934],{"class":39},[33,153361,10144],{"class":43},[33,153363,605],{"class":47},[33,153365,153366,153369],{"class":35,"line":96},[33,153367,153368],{"class":47},"    name: ",[33,153370,153371],{"class":72},"str\n",[33,153373,153374,153377],{"class":35,"line":103},[33,153375,153376],{"class":47},"    age: ",[33,153378,153379],{"class":72},"int\n",[33,153381,153382,153385],{"class":35,"line":108},[33,153383,153384],{"class":47},"    score: ",[33,153386,153387],{"class":72},"float\n",[33,153389,153390],{"class":35,"line":119},[33,153391,100],{"emptyLinePlaceholder":99},[33,153393,153394],{"class":35,"line":128},[33,153395,100],{"emptyLinePlaceholder":99},[33,153397,153398,153400,153402,153404,153406,153408,153410,153412,153414],{"class":35,"line":1753},[33,153399,151671],{"class":47},[33,153401,57],{"class":39},[33,153403,152074],{"class":47},[33,153405,242],{"class":60},[33,153407,245],{"class":47},[33,153409,248],{"class":72},[33,153411,245],{"class":47},[33,153413,1108],{"class":72},[33,153415,226],{"class":47},[33,153417,153418,153420],{"class":35,"line":1763},[33,153419,122],{"class":72},[33,153421,152230],{"class":47},[19,153423,153424,153425,2638,153427,153430],{},"它会自动生成 ",[30,153426,33060],{},[30,153428,153429],{},"__repr__"," 等方法。适合数据模型类。",[14,153432,153434],{"id":153433},"_1115-小案例学生类","11.15 小案例：学生类",[23,153436,153438],{"className":25,"code":153437,"language":27,"meta":28,"style":28},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[30,153439,153440,153448,153457,153469,153479,153489,153499,153503,153512,153525,153529,153538,153544,153556,153568,153580,153592,153596,153600,153606,153616,153625,153635,153643,153651,153659,153663,153667,153675,153711,153715,153719,153744,153751],{"__ignoreMap":28},[33,153441,153442,153444,153446],{"class":35,"line":36},[33,153443,16934],{"class":39},[33,153445,10144],{"class":43},[33,153447,605],{"class":47},[33,153449,153450,153452,153454],{"class":35,"line":51},[33,153451,1603],{"class":39},[33,153453,33035],{"class":72},[33,153455,153456],{"class":47},"(self, student_id, name, age, score):\n",[33,153458,153459,153461,153464,153466],{"class":35,"line":64},[33,153460,33076],{"class":72},[33,153462,153463],{"class":47},".student_id ",[33,153465,57],{"class":39},[33,153467,153468],{"class":47}," student_id\n",[33,153470,153471,153473,153475,153477],{"class":35,"line":76},[33,153472,33076],{"class":72},[33,153474,151979],{"class":47},[33,153476,57],{"class":39},[33,153478,151984],{"class":47},[33,153480,153481,153483,153485,153487],{"class":35,"line":87},[33,153482,33076],{"class":72},[33,153484,151991],{"class":47},[33,153486,57],{"class":39},[33,153488,151996],{"class":47},[33,153490,153491,153493,153495,153497],{"class":35,"line":96},[33,153492,33076],{"class":72},[33,153494,152003],{"class":47},[33,153496,57],{"class":39},[33,153498,3852],{"class":47},[33,153500,153501],{"class":35,"line":103},[33,153502,100],{"emptyLinePlaceholder":99},[33,153504,153505,153507,153510],{"class":35,"line":108},[33,153506,1603],{"class":39},[33,153508,153509],{"class":43}," is_passed",[33,153511,33038],{"class":47},[33,153513,153514,153516,153518,153520,153522],{"class":35,"line":119},[33,153515,1614],{"class":39},[33,153517,41098],{"class":72},[33,153519,152003],{"class":47},[33,153521,2175],{"class":39},[33,153523,153524],{"class":72}," 60\n",[33,153526,153527],{"class":35,"line":128},[33,153528,100],{"emptyLinePlaceholder":99},[33,153530,153531,153533,153536],{"class":35,"line":1753},[33,153532,1603],{"class":39},[33,153534,153535],{"class":43}," to_dict",[33,153537,33038],{"class":47},[33,153539,153540,153542],{"class":35,"line":1763},[33,153541,1614],{"class":39},[33,153543,17810],{"class":47},[33,153545,153546,153549,153551,153553],{"class":35,"line":1775},[33,153547,153548],{"class":60},"            \"student_id\"",[33,153550,996],{"class":47},[33,153552,33054],{"class":72},[33,153554,153555],{"class":47},".student_id,\n",[33,153557,153558,153561,153563,153565],{"class":35,"line":1780},[33,153559,153560],{"class":60},"            \"name\"",[33,153562,996],{"class":47},[33,153564,33054],{"class":72},[33,153566,153567],{"class":47},".name,\n",[33,153569,153570,153573,153575,153577],{"class":35,"line":1785},[33,153571,153572],{"class":60},"            \"age\"",[33,153574,996],{"class":47},[33,153576,33054],{"class":72},[33,153578,153579],{"class":47},".age,\n",[33,153581,153582,153585,153587,153589],{"class":35,"line":1940},[33,153583,153584],{"class":60},"            \"score\"",[33,153586,996],{"class":47},[33,153588,33054],{"class":72},[33,153590,153591],{"class":47},".score,\n",[33,153593,153594],{"class":35,"line":2183},[33,153595,4786],{"class":47},[33,153597,153598],{"class":35,"line":2208},[33,153599,100],{"emptyLinePlaceholder":99},[33,153601,153602,153604],{"class":35,"line":2234},[33,153603,153201],{"class":43},[33,153605,153204],{"class":72},[33,153607,153608,153610,153613],{"class":35,"line":2239},[33,153609,1603],{"class":39},[33,153611,153612],{"class":43}," from_dict",[33,153614,153615],{"class":47},"(cls, data):\n",[33,153617,153618,153620,153622],{"class":35,"line":2247},[33,153619,1614],{"class":39},[33,153621,153221],{"class":72},[33,153623,153624],{"class":47},"(\n",[33,153626,153627,153630,153633],{"class":35,"line":2255},[33,153628,153629],{"class":47},"            data[",[33,153631,153632],{"class":60},"\"student_id\"",[33,153634,90044],{"class":47},[33,153636,153637,153639,153641],{"class":35,"line":3992},[33,153638,153629],{"class":47},[33,153640,993],{"class":60},[33,153642,90044],{"class":47},[33,153644,153645,153647,153649],{"class":35,"line":4009},[33,153646,153629],{"class":47},[33,153648,1003],{"class":60},[33,153650,90044],{"class":47},[33,153652,153653,153655,153657],{"class":35,"line":4014},[33,153654,153629],{"class":47},[33,153656,1103],{"class":60},[33,153658,90044],{"class":47},[33,153660,153661],{"class":35,"line":4019},[33,153662,40351],{"class":47},[33,153664,153665],{"class":35,"line":4024},[33,153666,100],{"emptyLinePlaceholder":99},[33,153668,153669,153671,153673],{"class":35,"line":4038},[33,153670,1603],{"class":39},[33,153672,152169],{"class":72},[33,153674,33038],{"class":47},[33,153676,153677,153679,153681,153683,153685,153688,153690,153693,153695,153697,153699,153701,153703,153705,153707,153709],{"class":35,"line":4043},[33,153678,1614],{"class":39},[33,153680,152178],{"class":39},[33,153682,397],{"class":60},[33,153684,151642],{"class":72},[33,153686,153687],{"class":47},".student_id",[33,153689,210],{"class":72},[33,153691,153692],{"class":72}," {self",[33,153694,82510],{"class":47},[33,153696,210],{"class":72},[33,153698,153692],{"class":72},[33,153700,82522],{"class":47},[33,153702,210],{"class":72},[33,153704,153692],{"class":72},[33,153706,152051],{"class":47},[33,153708,210],{"class":72},[33,153710,27372],{"class":60},[33,153712,153713],{"class":35,"line":4834},[33,153714,100],{"emptyLinePlaceholder":99},[33,153716,153717],{"class":35,"line":4848},[33,153718,100],{"emptyLinePlaceholder":99},[33,153720,153721,153723,153725,153727,153730,153732,153734,153736,153738,153740,153742],{"class":35,"line":4856},[33,153722,151671],{"class":47},[33,153724,57],{"class":39},[33,153726,152074],{"class":47},[33,153728,153729],{"class":60},"\"001\"",[33,153731,245],{"class":47},[33,153733,242],{"class":60},[33,153735,245],{"class":47},[33,153737,248],{"class":72},[33,153739,245],{"class":47},[33,153741,1108],{"class":72},[33,153743,226],{"class":47},[33,153745,153746,153748],{"class":35,"line":4861},[33,153747,122],{"class":72},[33,153749,153750],{"class":47},"(student.is_passed())\n",[33,153752,153753,153755],{"class":35,"line":4867},[33,153754,122],{"class":72},[33,153756,153757],{"class":47},"(student.to_dict())\n",[19,153759,153760,1958,153763,153766],{},[30,153761,153762],{},"to_dict()",[30,153764,153765],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153768,153770],{"id":153769},"_1116-易错点","11.16 易错点",[328,153772,153773,153779,153785,153790,153793,153796],{},[331,153774,153775,153776,30622],{},"类名推荐使用大驼峰，如 ",[30,153777,153778],{},"StudentManager",[331,153780,153781,153782,153784],{},"方法第一个参数必须写 ",[30,153783,33054],{},"，调用时不用传。",[331,153786,153787,153789],{},[30,153788,33060],{}," 不是普通方法，它在创建对象时自动执行。",[331,153791,153792],{},"私有属性不是绝对安全，只是约定和名称改写。",[331,153794,153795],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[331,153797,153798],{},"类中方法太多时，说明职责可能过重。",[14,153800,153802],{"id":153801},"_1117-本章练习","11.17 本章练习",[328,153804,153805,153811,153817,153822,153835],{},[331,153806,153807,153808,153810],{},"定义 ",[30,153809,151757],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[331,153812,153807,153813,153816],{},[30,153814,153815],{},"Account"," 类，实现存款、取款、查询余额。",[331,153818,153807,153819,153821],{},[30,153820,19464],{}," 类，计算圆的周长和面积。",[331,153823,153807,153824,2638,153827,153830,153831,153834],{},[30,153825,153826],{},"Dog",[30,153828,153829],{},"Cat"," 类，并用同一个函数调用它们的 ",[30,153832,153833],{},"speak()"," 方法。",[331,153836,2318,153837,153839,153840,30622],{},[30,153838,153324],{}," 定义一个商品类 ",[30,153841,153842],{},"Product",[2331,153844,153845],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":153847},[153848,153849,153850,153851,153852,153853,153855,153856,153857,153858,153859,153860,153861,153865,153866,153867,153868],{"id":151528,"depth":51,"text":151529},{"id":151705,"depth":51,"text":151706},{"id":151768,"depth":51,"text":151769},{"id":151845,"depth":51,"text":151846},{"id":151944,"depth":51,"text":151945},{"id":152107,"depth":51,"text":153854},"11.6 str",{"id":152233,"depth":51,"text":152234},{"id":152499,"depth":51,"text":152500},{"id":152613,"depth":51,"text":152614},{"id":152768,"depth":51,"text":152769},{"id":152892,"depth":51,"text":152893},{"id":153008,"depth":51,"text":153009},{"id":153156,"depth":51,"text":153157,"children":153862},[153863,153864],{"id":153160,"depth":64,"text":153161},{"id":153242,"depth":64,"text":153243},{"id":153318,"depth":51,"text":153319},{"id":153433,"depth":51,"text":153434},{"id":153769,"depth":51,"text":153770},{"id":153801,"depth":51,"text":153802},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151520,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153875,"title":153876,"body":153877,"description":2359,"extension":2360,"meta":157181,"navigation":99,"path":157182,"seo":157183,"stem":157184,"__hash__":157185},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153878,"toc":157157},[153879,153882,153886,153889,153892,153921,153924,153932,153936,153940,153943,153966,153969,153975,153979,155420,155423,155444,155448,155451,155463,155466,155650,155653,155779,155782,155786,155790,155926,155930,156016,156020,156102,156106,156140,156144,156332,156336,156339,156569,156573,156576,156757,156760,156764,156767,156773,156776,156802,156806,156809,156823,156826,156851,156854,156868,156871,156888,156891,156908,156911,156928,156932,156958,156962,156985,156989,156992,156994,157000,157002,157023,157026,157032,157038,157042,157045,157121,157124,157128,157154],[10,153880,153876],{"id":153881},"_12-综合案例与复习路线",[14,153883,153885],{"id":153884},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153887,153888],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153890,153891],{},"一个合格的入门综合项目最好覆盖：",[328,153893,153894,153897,153900,153903,153906,153909,153912,153915,153918],{},[331,153895,153896],{},"输入输出。",[331,153898,153899],{},"判断和循环。",[331,153901,153902],{},"函数拆分。",[331,153904,153905],{},"列表、字典等容器。",[331,153907,153908],{},"文件持久化。",[331,153910,153911],{},"异常处理。",[331,153913,153914],{},"模块拆分。",[331,153916,153917],{},"可选：面向对象。",[331,153919,153920],{},"可选：数据可视化。",[19,153922,153923],{},"本章整理两个方向：",[328,153925,153926,153929],{},[331,153927,153928],{},"学生管理系统。",[331,153930,153931],{},"销售数据统计和可视化。",[14,153933,153935],{"id":153934},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[631,153937,153939],{"id":153938},"_1221-需求","12.2.1 需求",[19,153941,153942],{},"实现一个命令行学生管理系统：",[328,153944,153945,153948,153951,153954,153957,153960,153963],{},[331,153946,153947],{},"添加学生。",[331,153949,153950],{},"删除学生。",[331,153952,153953],{},"修改学生。",[331,153955,153956],{},"查询学生。",[331,153958,153959],{},"显示所有学生。",[331,153961,153962],{},"保存到 JSON 文件。",[331,153964,153965],{},"程序启动时自动读取 JSON 文件。",[19,153967,153968],{},"学生字段：",[23,153970,153973],{"className":153971,"code":153972,"language":7436,"meta":28},[7434],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[30,153974,153972],{"__ignoreMap":28},[14,153976,153978],{"id":153977},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[23,153980,153982],{"className":25,"code":153981,"language":27,"meta":28,"style":28},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[30,153983,153984,153990,154000,154004,154018,154022,154026,154035,154047,154053,154057,154063,154094,154104,154111,154122,154128,154132,154136,154146,154177,154203,154207,154211,154220,154231,154242,154253,154264,154275,154286,154297,154301,154305,154315,154325,154341,154348,154355,154359,154363,154373,154381,154388,154401,154411,154422,154426,154430,154439,154447,154453,154465,154473,154484,154488,154492,154501,154517,154521,154528,154539,154544,154548,154563,154577,154591,154595,154600,154608,154616,154624,154632,154636,154641,154652,154656,154660,154669,154684,154694,154698,154710,154721,154725,154729,154734,154738,154749,154753,154757,154766,154781,154789,154793,154805,154815,154819,154823,154838,154851,154864,154868,154881,154893,154905,154909,154913,154924,154928,154932,154941,154956,154964,154968,154980,154990,154994,154998,155003,155007,155011,155021,155027,155049,155068,155087,155106,155111,155115,155119,155128,155136,155147,155151,155155,155181,155191,155196,155200,155204,155212,155222,155226,155234,155239,155255,155259,155273,155278,155292,155297,155310,155315,155328,155333,155346,155351,155364,155375,155379,155385,155396,155400,155404,155416],{"__ignoreMap":28},[33,153985,153986,153988],{"class":35,"line":36},[33,153987,32627],{"class":39},[33,153989,149288],{"class":47},[33,153991,153992,153994,153996,153998],{"class":35,"line":51},[33,153993,32970],{"class":39},[33,153995,110514],{"class":47},[33,153997,32627],{"class":39},[33,153999,110519],{"class":47},[33,154001,154002],{"class":35,"line":64},[33,154003,100],{"emptyLinePlaceholder":99},[33,154005,154006,154009,154011,154013,154016],{"class":35,"line":76},[33,154007,154008],{"class":72},"DATA_FILE",[33,154010,15804],{"class":39},[33,154012,110748],{"class":47},[33,154014,154015],{"class":60},"\"students.json\"",[33,154017,226],{"class":47},[33,154019,154020],{"class":35,"line":87},[33,154021,100],{"emptyLinePlaceholder":99},[33,154023,154024],{"class":35,"line":96},[33,154025,100],{"emptyLinePlaceholder":99},[33,154027,154028,154030,154033],{"class":35,"line":103},[33,154029,40],{"class":39},[33,154031,154032],{"class":43}," load_students",[33,154034,48],{"class":47},[33,154036,154037,154039,154041,154044],{"class":35,"line":108},[33,154038,593],{"class":39},[33,154040,41154],{"class":39},[33,154042,154043],{"class":72}," DATA_FILE",[33,154045,154046],{"class":47},".exists():\n",[33,154048,154049,154051],{"class":35,"line":119},[33,154050,1614],{"class":39},[33,154052,615],{"class":47},[33,154054,154055],{"class":35,"line":128},[33,154056,100],{"emptyLinePlaceholder":99},[33,154058,154059,154061],{"class":35,"line":1753},[33,154060,127982],{"class":39},[33,154062,605],{"class":47},[33,154064,154065,154068,154070,154072,154074,154076,154078,154080,154082,154084,154086,154088,154090,154092],{"class":35,"line":1763},[33,154066,154067],{"class":39},"        with",[33,154069,148988],{"class":72},[33,154071,133],{"class":47},[33,154073,154008],{"class":72},[33,154075,245],{"class":47},[33,154077,148998],{"class":60},[33,154079,245],{"class":47},[33,154081,149003],{"class":289},[33,154083,57],{"class":39},[33,154085,149008],{"class":60},[33,154087,15954],{"class":47},[33,154089,33613],{"class":39},[33,154091,150350],{"class":289},[33,154093,605],{"class":47},[33,154095,154096,154098,154100,154102],{"class":35,"line":1775},[33,154097,17970],{"class":39},[33,154099,150361],{"class":47},[33,154101,47577],{"class":289},[33,154103,226],{"class":47},[33,154105,154106,154108],{"class":35,"line":1780},[33,154107,128010],{"class":39},[33,154109,154110],{"class":47}," json.JSONDecodeError:\n",[33,154112,154113,154115,154117,154120],{"class":35,"line":1785},[33,154114,807],{"class":72},[33,154116,133],{"class":47},[33,154118,154119],{"class":60},"\"数据文件格式错误，已使用空数据启动\"",[33,154121,226],{"class":47},[33,154123,154124,154126],{"class":35,"line":1940},[33,154125,1614],{"class":39},[33,154127,615],{"class":47},[33,154129,154130],{"class":35,"line":2183},[33,154131,100],{"emptyLinePlaceholder":99},[33,154133,154134],{"class":35,"line":2208},[33,154135,100],{"emptyLinePlaceholder":99},[33,154137,154138,154140,154143],{"class":35,"line":2234},[33,154139,40],{"class":39},[33,154141,154142],{"class":43}," save_students",[33,154144,154145],{"class":47},"(students):\n",[33,154147,154148,154150,154152,154154,154156,154158,154161,154163,154165,154167,154169,154171,154173,154175],{"class":35,"line":2239},[33,154149,36403],{"class":39},[33,154151,148988],{"class":72},[33,154153,133],{"class":47},[33,154155,154008],{"class":72},[33,154157,245],{"class":47},[33,154159,154160],{"class":60},"\"w\"",[33,154162,245],{"class":47},[33,154164,149003],{"class":289},[33,154166,57],{"class":39},[33,154168,149008],{"class":60},[33,154170,15954],{"class":47},[33,154172,33613],{"class":39},[33,154174,150350],{"class":289},[33,154176,605],{"class":47},[33,154178,154179,154182,154184,154186,154188,154190,154192,154194,154197,154199,154201],{"class":35,"line":2247},[33,154180,154181],{"class":47},"        json.dump(students, ",[33,154183,47577],{"class":289},[33,154185,245],{"class":47},[33,154187,149334],{"class":289},[33,154189,57],{"class":39},[33,154191,36212],{"class":72},[33,154193,245],{"class":47},[33,154195,154196],{"class":289},"indent",[33,154198,57],{"class":39},[33,154200,725],{"class":72},[33,154202,226],{"class":47},[33,154204,154205],{"class":35,"line":2255},[33,154206,100],{"emptyLinePlaceholder":99},[33,154208,154209],{"class":35,"line":3992},[33,154210,100],{"emptyLinePlaceholder":99},[33,154212,154213,154215,154218],{"class":35,"line":4009},[33,154214,40],{"class":39},[33,154216,154217],{"class":43}," show_menu",[33,154219,48],{"class":47},[33,154221,154222,154224,154226,154229],{"class":35,"line":4014},[33,154223,193],{"class":72},[33,154225,133],{"class":47},[33,154227,154228],{"class":60},"\"====== 学生管理系统 ======\"",[33,154230,226],{"class":47},[33,154232,154233,154235,154237,154240],{"class":35,"line":4019},[33,154234,193],{"class":72},[33,154236,133],{"class":47},[33,154238,154239],{"class":60},"\"1. 添加学生\"",[33,154241,226],{"class":47},[33,154243,154244,154246,154248,154251],{"class":35,"line":4024},[33,154245,193],{"class":72},[33,154247,133],{"class":47},[33,154249,154250],{"class":60},"\"2. 删除学生\"",[33,154252,226],{"class":47},[33,154254,154255,154257,154259,154262],{"class":35,"line":4038},[33,154256,193],{"class":72},[33,154258,133],{"class":47},[33,154260,154261],{"class":60},"\"3. 修改学生\"",[33,154263,226],{"class":47},[33,154265,154266,154268,154270,154273],{"class":35,"line":4043},[33,154267,193],{"class":72},[33,154269,133],{"class":47},[33,154271,154272],{"class":60},"\"4. 查询学生\"",[33,154274,226],{"class":47},[33,154276,154277,154279,154281,154284],{"class":35,"line":4834},[33,154278,193],{"class":72},[33,154280,133],{"class":47},[33,154282,154283],{"class":60},"\"5. 显示所有学生\"",[33,154285,226],{"class":47},[33,154287,154288,154290,154292,154295],{"class":35,"line":4848},[33,154289,193],{"class":72},[33,154291,133],{"class":47},[33,154293,154294],{"class":60},"\"0. 退出系统\"",[33,154296,226],{"class":47},[33,154298,154299],{"class":35,"line":4856},[33,154300,100],{"emptyLinePlaceholder":99},[33,154302,154303],{"class":35,"line":4861},[33,154304,100],{"emptyLinePlaceholder":99},[33,154306,154307,154309,154312],{"class":35,"line":4867},[33,154308,40],{"class":39},[33,154310,154311],{"class":43}," find_student",[33,154313,154314],{"class":47},"(students, student_id):\n",[33,154316,154317,154319,154321,154323],{"class":35,"line":4873},[33,154318,675],{"class":39},[33,154320,2120],{"class":47},[33,154322,681],{"class":39},[33,154324,2125],{"class":47},[33,154326,154327,154329,154332,154334,154336,154338],{"class":35,"line":4878},[33,154328,2130],{"class":39},[33,154330,154331],{"class":47}," student[",[33,154333,153632],{"class":60},[33,154335,2172],{"class":47},[33,154337,5206],{"class":39},[33,154339,154340],{"class":47}," student_id:\n",[33,154342,154343,154345],{"class":35,"line":10194},[33,154344,17970],{"class":39},[33,154346,154347],{"class":47}," student\n",[33,154349,154350,154352],{"class":35,"line":10218},[33,154351,90],{"class":39},[33,154353,154354],{"class":72}," None\n",[33,154356,154357],{"class":35,"line":10223},[33,154358,100],{"emptyLinePlaceholder":99},[33,154360,154361],{"class":35,"line":10229},[33,154362,100],{"emptyLinePlaceholder":99},[33,154364,154365,154367,154370],{"class":35,"line":10256},[33,154366,40],{"class":39},[33,154368,154369],{"class":43}," input_int",[33,154371,154372],{"class":47},"(prompt):\n",[33,154374,154375,154377,154379],{"class":35,"line":10261},[33,154376,4510],{"class":39},[33,154378,97500],{"class":72},[33,154380,605],{"class":47},[33,154382,154383,154386],{"class":35,"line":10267},[33,154384,154385],{"class":39},"        try",[33,154387,605],{"class":47},[33,154389,154390,154392,154394,154396,154398],{"class":35,"line":10279},[33,154391,17970],{"class":39},[33,154393,4641],{"class":72},[33,154395,133],{"class":47},[33,154397,56040],{"class":72},[33,154399,154400],{"class":47},"(prompt))\n",[33,154402,154403,154406,154409],{"class":35,"line":10291},[33,154404,154405],{"class":39},"        except",[33,154407,154408],{"class":72}," ValueError",[33,154410,605],{"class":47},[33,154412,154413,154415,154417,154420],{"class":35,"line":10303},[33,154414,36875],{"class":72},[33,154416,133],{"class":47},[33,154418,154419],{"class":60},"\"请输入整数\"",[33,154421,226],{"class":47},[33,154423,154424],{"class":35,"line":11961},[33,154425,100],{"emptyLinePlaceholder":99},[33,154427,154428],{"class":35,"line":11986},[33,154429,100],{"emptyLinePlaceholder":99},[33,154431,154432,154434,154437],{"class":35,"line":12009},[33,154433,40],{"class":39},[33,154435,154436],{"class":43}," input_float",[33,154438,154372],{"class":47},[33,154440,154441,154443,154445],{"class":35,"line":12033},[33,154442,4510],{"class":39},[33,154444,97500],{"class":72},[33,154446,605],{"class":47},[33,154448,154449,154451],{"class":35,"line":12038},[33,154450,154385],{"class":39},[33,154452,605],{"class":47},[33,154454,154455,154457,154459,154461,154463],{"class":35,"line":12043},[33,154456,17970],{"class":39},[33,154458,112000],{"class":72},[33,154460,133],{"class":47},[33,154462,56040],{"class":72},[33,154464,154400],{"class":47},[33,154466,154467,154469,154471],{"class":35,"line":12048},[33,154468,154405],{"class":39},[33,154470,154408],{"class":72},[33,154472,605],{"class":47},[33,154474,154475,154477,154479,154482],{"class":35,"line":12057},[33,154476,36875],{"class":72},[33,154478,133],{"class":47},[33,154480,154481],{"class":60},"\"请输入数字\"",[33,154483,226],{"class":47},[33,154485,154486],{"class":35,"line":12062},[33,154487,100],{"emptyLinePlaceholder":99},[33,154489,154490],{"class":35,"line":12068},[33,154491,100],{"emptyLinePlaceholder":99},[33,154493,154494,154496,154499],{"class":35,"line":12089},[33,154495,40],{"class":39},[33,154497,154498],{"class":43}," add_student",[33,154500,154145],{"class":47},[33,154502,154503,154506,154508,154510,154512,154515],{"class":35,"line":12095},[33,154504,154505],{"class":47},"    student_id ",[33,154507,57],{"class":39},[33,154509,62823],{"class":72},[33,154511,133],{"class":47},[33,154513,154514],{"class":60},"\"请输入学号:\"",[33,154516,226],{"class":47},[33,154518,154519],{"class":35,"line":12109},[33,154520,100],{"emptyLinePlaceholder":99},[33,154522,154523,154525],{"class":35,"line":12115},[33,154524,593],{"class":39},[33,154526,154527],{"class":47}," find_student(students, student_id):\n",[33,154529,154530,154532,154534,154537],{"class":35,"line":12142},[33,154531,807],{"class":72},[33,154533,133],{"class":47},[33,154535,154536],{"class":60},"\"学号已存在\"",[33,154538,226],{"class":47},[33,154540,154541],{"class":35,"line":12151},[33,154542,154543],{"class":39},"        return\n",[33,154545,154546],{"class":35,"line":12157},[33,154547,100],{"emptyLinePlaceholder":99},[33,154549,154550,154552,154554,154556,154558,154561],{"class":35,"line":12165},[33,154551,54],{"class":47},[33,154553,57],{"class":39},[33,154555,62823],{"class":72},[33,154557,133],{"class":47},[33,154559,154560],{"class":60},"\"请输入姓名:\"",[33,154562,226],{"class":47},[33,154564,154565,154567,154569,154572,154575],{"class":35,"line":12170},[33,154566,67],{"class":47},[33,154568,57],{"class":39},[33,154570,154571],{"class":47}," input_int(",[33,154573,154574],{"class":60},"\"请输入年龄:\"",[33,154576,226],{"class":47},[33,154578,154579,154581,154583,154586,154589],{"class":35,"line":18842},[33,154580,79],{"class":47},[33,154582,57],{"class":39},[33,154584,154585],{"class":47}," input_float(",[33,154587,154588],{"class":60},"\"请输入成绩:\"",[33,154590,226],{"class":47},[33,154592,154593],{"class":35,"line":18848},[33,154594,100],{"emptyLinePlaceholder":99},[33,154596,154597],{"class":35,"line":18871},[33,154598,154599],{"class":47},"    students.append({\n",[33,154601,154602,154605],{"class":35,"line":18877},[33,154603,154604],{"class":60},"        \"student_id\"",[33,154606,154607],{"class":47},": student_id,\n",[33,154609,154610,154613],{"class":35,"line":18900},[33,154611,154612],{"class":60},"        \"name\"",[33,154614,154615],{"class":47},": name,\n",[33,154617,154618,154621],{"class":35,"line":18914},[33,154619,154620],{"class":60},"        \"age\"",[33,154622,154623],{"class":47},": age,\n",[33,154625,154626,154629],{"class":35,"line":18934},[33,154627,154628],{"class":60},"        \"score\"",[33,154630,154631],{"class":47},": score,\n",[33,154633,154634],{"class":35,"line":18940},[33,154635,35686],{"class":47},[33,154637,154638],{"class":35,"line":18951},[33,154639,154640],{"class":47},"    save_students(students)\n",[33,154642,154643,154645,154647,154650],{"class":35,"line":18974},[33,154644,193],{"class":72},[33,154646,133],{"class":47},[33,154648,154649],{"class":60},"\"添加成功\"",[33,154651,226],{"class":47},[33,154653,154654],{"class":35,"line":18996},[33,154655,100],{"emptyLinePlaceholder":99},[33,154657,154658],{"class":35,"line":19001},[33,154659,100],{"emptyLinePlaceholder":99},[33,154661,154662,154664,154667],{"class":35,"line":19007},[33,154663,40],{"class":39},[33,154665,154666],{"class":43}," delete_student",[33,154668,154145],{"class":47},[33,154670,154671,154673,154675,154677,154679,154682],{"class":35,"line":19021},[33,154672,154505],{"class":47},[33,154674,57],{"class":39},[33,154676,62823],{"class":72},[33,154678,133],{"class":47},[33,154680,154681],{"class":60},"\"请输入要删除的学号:\"",[33,154683,226],{"class":47},[33,154685,154686,154689,154691],{"class":35,"line":19034},[33,154687,154688],{"class":47},"    student ",[33,154690,57],{"class":39},[33,154692,154693],{"class":47}," find_student(students, student_id)\n",[33,154695,154696],{"class":35,"line":19039},[33,154697,100],{"emptyLinePlaceholder":99},[33,154699,154700,154702,154704,154706,154708],{"class":35,"line":19053},[33,154701,593],{"class":39},[33,154703,2120],{"class":47},[33,154705,599],{"class":39},[33,154707,602],{"class":72},[33,154709,605],{"class":47},[33,154711,154712,154714,154716,154719],{"class":35,"line":19058},[33,154713,807],{"class":72},[33,154715,133],{"class":47},[33,154717,154718],{"class":60},"\"学生不存在\"",[33,154720,226],{"class":47},[33,154722,154723],{"class":35,"line":19064},[33,154724,154543],{"class":39},[33,154726,154727],{"class":35,"line":19069},[33,154728,100],{"emptyLinePlaceholder":99},[33,154730,154731],{"class":35,"line":19083},[33,154732,154733],{"class":47},"    students.remove(student)\n",[33,154735,154736],{"class":35,"line":19088},[33,154737,154640],{"class":47},[33,154739,154740,154742,154744,154747],{"class":35,"line":19093},[33,154741,193],{"class":72},[33,154743,133],{"class":47},[33,154745,154746],{"class":60},"\"删除成功\"",[33,154748,226],{"class":47},[33,154750,154751],{"class":35,"line":19107},[33,154752,100],{"emptyLinePlaceholder":99},[33,154754,154755],{"class":35,"line":19119},[33,154756,100],{"emptyLinePlaceholder":99},[33,154758,154759,154761,154764],{"class":35,"line":19124},[33,154760,40],{"class":39},[33,154762,154763],{"class":43}," update_student",[33,154765,154145],{"class":47},[33,154767,154768,154770,154772,154774,154776,154779],{"class":35,"line":19137},[33,154769,154505],{"class":47},[33,154771,57],{"class":39},[33,154773,62823],{"class":72},[33,154775,133],{"class":47},[33,154777,154778],{"class":60},"\"请输入要修改的学号:\"",[33,154780,226],{"class":47},[33,154782,154783,154785,154787],{"class":35,"line":19142},[33,154784,154688],{"class":47},[33,154786,57],{"class":39},[33,154788,154693],{"class":47},[33,154790,154791],{"class":35,"line":19147},[33,154792,100],{"emptyLinePlaceholder":99},[33,154794,154795,154797,154799,154801,154803],{"class":35,"line":19152},[33,154796,593],{"class":39},[33,154798,2120],{"class":47},[33,154800,599],{"class":39},[33,154802,602],{"class":72},[33,154804,605],{"class":47},[33,154806,154807,154809,154811,154813],{"class":35,"line":19165},[33,154808,807],{"class":72},[33,154810,133],{"class":47},[33,154812,154718],{"class":60},[33,154814,226],{"class":47},[33,154816,154817],{"class":35,"line":19170},[33,154818,154543],{"class":39},[33,154820,154821],{"class":35,"line":34859},[33,154822,100],{"emptyLinePlaceholder":99},[33,154824,154825,154827,154829,154831,154833,154836],{"class":35,"line":34865},[33,154826,54],{"class":47},[33,154828,57],{"class":39},[33,154830,62823],{"class":72},[33,154832,133],{"class":47},[33,154834,154835],{"class":60},"\"请输入新姓名:\"",[33,154837,226],{"class":47},[33,154839,154840,154842,154844,154846,154849],{"class":35,"line":34871},[33,154841,67],{"class":47},[33,154843,57],{"class":39},[33,154845,154571],{"class":47},[33,154847,154848],{"class":60},"\"请输入新年龄:\"",[33,154850,226],{"class":47},[33,154852,154853,154855,154857,154859,154862],{"class":35,"line":34877},[33,154854,79],{"class":47},[33,154856,57],{"class":39},[33,154858,154585],{"class":47},[33,154860,154861],{"class":60},"\"请输入新成绩:\"",[33,154863,226],{"class":47},[33,154865,154866],{"class":35,"line":34883},[33,154867,100],{"emptyLinePlaceholder":99},[33,154869,154870,154873,154875,154877,154879],{"class":35,"line":34894},[33,154871,154872],{"class":47},"    student[",[33,154874,993],{"class":60},[33,154876,2172],{"class":47},[33,154878,57],{"class":39},[33,154880,151984],{"class":47},[33,154882,154883,154885,154887,154889,154891],{"class":35,"line":34900},[33,154884,154872],{"class":47},[33,154886,1003],{"class":60},[33,154888,2172],{"class":47},[33,154890,57],{"class":39},[33,154892,151996],{"class":47},[33,154894,154895,154897,154899,154901,154903],{"class":35,"line":34920},[33,154896,154872],{"class":47},[33,154898,1103],{"class":60},[33,154900,2172],{"class":47},[33,154902,57],{"class":39},[33,154904,3852],{"class":47},[33,154906,154907],{"class":35,"line":34926},[33,154908,100],{"emptyLinePlaceholder":99},[33,154910,154911],{"class":35,"line":34937},[33,154912,154640],{"class":47},[33,154914,154915,154917,154919,154922],{"class":35,"line":34943},[33,154916,193],{"class":72},[33,154918,133],{"class":47},[33,154920,154921],{"class":60},"\"修改成功\"",[33,154923,226],{"class":47},[33,154925,154926],{"class":35,"line":34949},[33,154927,100],{"emptyLinePlaceholder":99},[33,154929,154930],{"class":35,"line":34955},[33,154931,100],{"emptyLinePlaceholder":99},[33,154933,154934,154936,154939],{"class":35,"line":34961},[33,154935,40],{"class":39},[33,154937,154938],{"class":43}," query_student",[33,154940,154145],{"class":47},[33,154942,154943,154945,154947,154949,154951,154954],{"class":35,"line":34967},[33,154944,154505],{"class":47},[33,154946,57],{"class":39},[33,154948,62823],{"class":72},[33,154950,133],{"class":47},[33,154952,154953],{"class":60},"\"请输入要查询的学号:\"",[33,154955,226],{"class":47},[33,154957,154958,154960,154962],{"class":35,"line":34973},[33,154959,154688],{"class":47},[33,154961,57],{"class":39},[33,154963,154693],{"class":47},[33,154965,154966],{"class":35,"line":34979},[33,154967,100],{"emptyLinePlaceholder":99},[33,154969,154970,154972,154974,154976,154978],{"class":35,"line":34999},[33,154971,593],{"class":39},[33,154973,2120],{"class":47},[33,154975,599],{"class":39},[33,154977,602],{"class":72},[33,154979,605],{"class":47},[33,154981,154982,154984,154986,154988],{"class":35,"line":35005},[33,154983,807],{"class":72},[33,154985,133],{"class":47},[33,154987,154718],{"class":60},[33,154989,226],{"class":47},[33,154991,154992],{"class":35,"line":35021},[33,154993,154543],{"class":39},[33,154995,154996],{"class":35,"line":35027},[33,154997,100],{"emptyLinePlaceholder":99},[33,154999,155000],{"class":35,"line":35041},[33,155001,155002],{"class":47},"    print_student(student)\n",[33,155004,155005],{"class":35,"line":35047},[33,155006,100],{"emptyLinePlaceholder":99},[33,155008,155009],{"class":35,"line":35062},[33,155010,100],{"emptyLinePlaceholder":99},[33,155012,155013,155015,155018],{"class":35,"line":35068},[33,155014,40],{"class":39},[33,155016,155017],{"class":43}," print_student",[33,155019,155020],{"class":47},"(student):\n",[33,155022,155023,155025],{"class":35,"line":35077},[33,155024,193],{"class":72},[33,155026,153624],{"class":47},[33,155028,155029,155032,155034,155036,155039,155042,155044,155047],{"class":35,"line":35083},[33,155030,155031],{"class":39},"        f",[33,155033,397],{"class":60},[33,155035,204],{"class":72},[33,155037,155038],{"class":47},"student[",[33,155040,155041],{"class":60},"'student_id'",[33,155043,3348],{"class":47},[33,155045,155046],{"class":72},"}\\t",[33,155048,27372],{"class":60},[33,155050,155051,155053,155055,155057,155059,155062,155064,155066],{"class":35,"line":35092},[33,155052,155031],{"class":39},[33,155054,397],{"class":60},[33,155056,204],{"class":72},[33,155058,155038],{"class":47},[33,155060,155061],{"class":60},"'name'",[33,155063,3348],{"class":47},[33,155065,155046],{"class":72},[33,155067,27372],{"class":60},[33,155069,155070,155072,155074,155076,155078,155081,155083,155085],{"class":35,"line":35098},[33,155071,155031],{"class":39},[33,155073,397],{"class":60},[33,155075,204],{"class":72},[33,155077,155038],{"class":47},[33,155079,155080],{"class":60},"'age'",[33,155082,3348],{"class":47},[33,155084,155046],{"class":72},[33,155086,27372],{"class":60},[33,155088,155089,155091,155093,155095,155097,155100,155102,155104],{"class":35,"line":35104},[33,155090,155031],{"class":39},[33,155092,397],{"class":60},[33,155094,204],{"class":72},[33,155096,155038],{"class":47},[33,155098,155099],{"class":60},"'score'",[33,155101,3348],{"class":47},[33,155103,210],{"class":72},[33,155105,27372],{"class":60},[33,155107,155108],{"class":35,"line":35113},[33,155109,155110],{"class":47},"    )\n",[33,155112,155113],{"class":35,"line":35119},[33,155114,100],{"emptyLinePlaceholder":99},[33,155116,155117],{"class":35,"line":35130},[33,155118,100],{"emptyLinePlaceholder":99},[33,155120,155121,155123,155126],{"class":35,"line":35136},[33,155122,40],{"class":39},[33,155124,155125],{"class":43}," show_all_students",[33,155127,154145],{"class":47},[33,155129,155130,155132,155134],{"class":35,"line":35155},[33,155131,593],{"class":39},[33,155133,41154],{"class":39},[33,155135,2125],{"class":47},[33,155137,155138,155140,155142,155145],{"class":35,"line":35161},[33,155139,807],{"class":72},[33,155141,133],{"class":47},[33,155143,155144],{"class":60},"\"暂无学生\"",[33,155146,226],{"class":47},[33,155148,155149],{"class":35,"line":35172},[33,155150,154543],{"class":39},[33,155152,155153],{"class":35,"line":35178},[33,155154,100],{"emptyLinePlaceholder":99},[33,155156,155157,155159,155161,155164,155166,155169,155171,155174,155176,155179],{"class":35,"line":35198},[33,155158,193],{"class":72},[33,155160,133],{"class":47},[33,155162,155163],{"class":60},"\"学号",[33,155165,3507],{"class":72},[33,155167,155168],{"class":60},"姓名",[33,155170,3507],{"class":72},[33,155172,155173],{"class":60},"年龄",[33,155175,3507],{"class":72},[33,155177,155178],{"class":60},"成绩\"",[33,155180,226],{"class":47},[33,155182,155183,155185,155187,155189],{"class":35,"line":35214},[33,155184,675],{"class":39},[33,155186,2120],{"class":47},[33,155188,681],{"class":39},[33,155190,2125],{"class":47},[33,155192,155193],{"class":35,"line":35220},[33,155194,155195],{"class":47},"        print_student(student)\n",[33,155197,155198],{"class":35,"line":35234},[33,155199,100],{"emptyLinePlaceholder":99},[33,155201,155202],{"class":35,"line":35240},[33,155203,100],{"emptyLinePlaceholder":99},[33,155205,155206,155208,155210],{"class":35,"line":35246},[33,155207,40],{"class":39},[33,155209,4232],{"class":43},[33,155211,48],{"class":47},[33,155213,155214,155217,155219],{"class":35,"line":35257},[33,155215,155216],{"class":47},"    students ",[33,155218,57],{"class":39},[33,155220,155221],{"class":47}," load_students()\n",[33,155223,155224],{"class":35,"line":35263},[33,155225,100],{"emptyLinePlaceholder":99},[33,155227,155228,155230,155232],{"class":35,"line":35269},[33,155229,4510],{"class":39},[33,155231,97500],{"class":72},[33,155233,605],{"class":47},[33,155235,155236],{"class":35,"line":35279},[33,155237,155238],{"class":47},"        show_menu()\n",[33,155240,155241,155244,155246,155248,155250,155253],{"class":35,"line":35285},[33,155242,155243],{"class":47},"        choice ",[33,155245,57],{"class":39},[33,155247,62823],{"class":72},[33,155249,133],{"class":47},[33,155251,155252],{"class":60},"\"请输入操作:\"",[33,155254,226],{"class":47},[33,155256,155257],{"class":35,"line":35296},[33,155258,100],{"emptyLinePlaceholder":99},[33,155260,155261,155263,155266,155268,155271],{"class":35,"line":35302},[33,155262,2130],{"class":39},[33,155264,155265],{"class":47}," choice ",[33,155267,5206],{"class":39},[33,155269,155270],{"class":60}," \"1\"",[33,155272,605],{"class":47},[33,155274,155275],{"class":35,"line":35312},[33,155276,155277],{"class":47},"            add_student(students)\n",[33,155279,155280,155283,155285,155287,155290],{"class":35,"line":35317},[33,155281,155282],{"class":39},"        elif",[33,155284,155265],{"class":47},[33,155286,5206],{"class":39},[33,155288,155289],{"class":60}," \"2\"",[33,155291,605],{"class":47},[33,155293,155294],{"class":35,"line":35323},[33,155295,155296],{"class":47},"            delete_student(students)\n",[33,155298,155299,155301,155303,155305,155308],{"class":35,"line":35372},[33,155300,155282],{"class":39},[33,155302,155265],{"class":47},[33,155304,5206],{"class":39},[33,155306,155307],{"class":60}," \"3\"",[33,155309,605],{"class":47},[33,155311,155312],{"class":35,"line":35419},[33,155313,155314],{"class":47},"            update_student(students)\n",[33,155316,155317,155319,155321,155323,155326],{"class":35,"line":35424},[33,155318,155282],{"class":39},[33,155320,155265],{"class":47},[33,155322,5206],{"class":39},[33,155324,155325],{"class":60}," \"4\"",[33,155327,605],{"class":47},[33,155329,155330],{"class":35,"line":35430},[33,155331,155332],{"class":47},"            query_student(students)\n",[33,155334,155335,155337,155339,155341,155344],{"class":35,"line":35449},[33,155336,155282],{"class":39},[33,155338,155265],{"class":47},[33,155340,5206],{"class":39},[33,155342,155343],{"class":60}," \"5\"",[33,155345,605],{"class":47},[33,155347,155348],{"class":35,"line":35455},[33,155349,155350],{"class":47},"            show_all_students(students)\n",[33,155352,155353,155355,155357,155359,155362],{"class":35,"line":35474},[33,155354,155282],{"class":39},[33,155356,155265],{"class":47},[33,155358,5206],{"class":39},[33,155360,155361],{"class":60}," \"0\"",[33,155363,605],{"class":47},[33,155365,155366,155368,155370,155373],{"class":35,"line":35480},[33,155367,36875],{"class":72},[33,155369,133],{"class":47},[33,155371,155372],{"class":60},"\"退出系统\"",[33,155374,226],{"class":47},[33,155376,155377],{"class":35,"line":35486},[33,155378,117300],{"class":39},[33,155380,155381,155383],{"class":35,"line":35496},[33,155382,4791],{"class":39},[33,155384,605],{"class":47},[33,155386,155387,155389,155391,155394],{"class":35,"line":35501},[33,155388,36875],{"class":72},[33,155390,133],{"class":47},[33,155392,155393],{"class":60},"\"输入错误\"",[33,155395,226],{"class":47},[33,155397,155398],{"class":35,"line":35507},[33,155399,100],{"emptyLinePlaceholder":99},[33,155401,155402],{"class":35,"line":35523},[33,155403,100],{"emptyLinePlaceholder":99},[33,155405,155406,155408,155410,155412,155414],{"class":35,"line":35568},[33,155407,3805],{"class":39},[33,155409,33451],{"class":72},[33,155411,1434],{"class":39},[33,155413,103767],{"class":60},[33,155415,605],{"class":47},[33,155417,155418],{"class":35,"line":35574},[33,155419,103774],{"class":47},[19,155421,155422],{},"这个项目串联了：",[328,155424,155425,155428,155431,155434,155437,155439],{},[331,155426,155427],{},"菜单循环。",[331,155429,155430],{},"函数封装。",[331,155432,155433],{},"列表字典。",[331,155435,155436],{},"JSON 读写。",[331,155438,153911],{},[331,155440,155441,30622],{},[30,155442,155443],{},"if __name__ == \"__main__\"",[14,155445,155447],{"id":155446},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155449,155450],{},"可以进一步拆成两个类：",[328,155452,155453,155458],{},[331,155454,155455,155457],{},[30,155456,151757],{},"：表示单个学生。",[331,155459,155460,155462],{},[30,155461,153778],{},"：负责学生增删改查和文件保存。",[19,155464,155465],{},"示意代码：",[23,155467,155469],{"className":25,"code":155468,"language":27,"meta":28,"style":28},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[30,155470,155471,155481,155485,155489,155493,155501,155508,155514,155520,155526,155530,155538,155544,155554,155564,155574,155584,155588,155592,155598,155606,155614,155622,155630,155638,155646],{"__ignoreMap":28},[33,155472,155473,155475,155477,155479],{"class":35,"line":36},[33,155474,32970],{"class":39},[33,155476,153337],{"class":47},[33,155478,32627],{"class":39},[33,155480,153342],{"class":47},[33,155482,155483],{"class":35,"line":51},[33,155484,100],{"emptyLinePlaceholder":99},[33,155486,155487],{"class":35,"line":64},[33,155488,100],{"emptyLinePlaceholder":99},[33,155490,155491],{"class":35,"line":76},[33,155492,153355],{"class":43},[33,155494,155495,155497,155499],{"class":35,"line":87},[33,155496,16934],{"class":39},[33,155498,10144],{"class":43},[33,155500,605],{"class":47},[33,155502,155503,155506],{"class":35,"line":96},[33,155504,155505],{"class":47},"    student_id: ",[33,155507,153371],{"class":72},[33,155509,155510,155512],{"class":35,"line":103},[33,155511,153368],{"class":47},[33,155513,153371],{"class":72},[33,155515,155516,155518],{"class":35,"line":108},[33,155517,153376],{"class":47},[33,155519,153379],{"class":72},[33,155521,155522,155524],{"class":35,"line":119},[33,155523,153384],{"class":47},[33,155525,153387],{"class":72},[33,155527,155528],{"class":35,"line":128},[33,155529,100],{"emptyLinePlaceholder":99},[33,155531,155532,155534,155536],{"class":35,"line":1753},[33,155533,1603],{"class":39},[33,155535,153535],{"class":43},[33,155537,33038],{"class":47},[33,155539,155540,155542],{"class":35,"line":1763},[33,155541,1614],{"class":39},[33,155543,17810],{"class":47},[33,155545,155546,155548,155550,155552],{"class":35,"line":1775},[33,155547,153548],{"class":60},[33,155549,996],{"class":47},[33,155551,33054],{"class":72},[33,155553,153555],{"class":47},[33,155555,155556,155558,155560,155562],{"class":35,"line":1780},[33,155557,153560],{"class":60},[33,155559,996],{"class":47},[33,155561,33054],{"class":72},[33,155563,153567],{"class":47},[33,155565,155566,155568,155570,155572],{"class":35,"line":1785},[33,155567,153572],{"class":60},[33,155569,996],{"class":47},[33,155571,33054],{"class":72},[33,155573,153579],{"class":47},[33,155575,155576,155578,155580,155582],{"class":35,"line":1940},[33,155577,153584],{"class":60},[33,155579,996],{"class":47},[33,155581,33054],{"class":72},[33,155583,153591],{"class":47},[33,155585,155586],{"class":35,"line":2183},[33,155587,4786],{"class":47},[33,155589,155590],{"class":35,"line":2208},[33,155591,100],{"emptyLinePlaceholder":99},[33,155593,155594,155596],{"class":35,"line":2234},[33,155595,153201],{"class":43},[33,155597,153204],{"class":72},[33,155599,155600,155602,155604],{"class":35,"line":2239},[33,155601,1603],{"class":39},[33,155603,153612],{"class":43},[33,155605,153615],{"class":47},[33,155607,155608,155610,155612],{"class":35,"line":2247},[33,155609,1614],{"class":39},[33,155611,153221],{"class":72},[33,155613,153624],{"class":47},[33,155615,155616,155618,155620],{"class":35,"line":2255},[33,155617,153629],{"class":47},[33,155619,153632],{"class":60},[33,155621,90044],{"class":47},[33,155623,155624,155626,155628],{"class":35,"line":3992},[33,155625,153629],{"class":47},[33,155627,993],{"class":60},[33,155629,90044],{"class":47},[33,155631,155632,155634,155636],{"class":35,"line":4009},[33,155633,153629],{"class":47},[33,155635,1003],{"class":60},[33,155637,90044],{"class":47},[33,155639,155640,155642,155644],{"class":35,"line":4014},[33,155641,153629],{"class":47},[33,155643,1103],{"class":60},[33,155645,90044],{"class":47},[33,155647,155648],{"class":35,"line":4019},[33,155649,40351],{"class":47},[19,155651,155652],{},"管理器示意：",[23,155654,155656],{"className":25,"code":155655,"language":27,"meta":28,"style":28},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[30,155657,155658,155667,155675,155686,155690,155700,155713,155724,155731,155737,155741,155750,155759,155765,155772],{"__ignoreMap":28},[33,155659,155660,155662,155665],{"class":35,"line":36},[33,155661,16934],{"class":39},[33,155663,155664],{"class":43}," StudentManager",[33,155666,605],{"class":47},[33,155668,155669,155671,155673],{"class":35,"line":51},[33,155670,1603],{"class":39},[33,155672,33035],{"class":72},[33,155674,33038],{"class":47},[33,155676,155677,155679,155682,155684],{"class":35,"line":64},[33,155678,33076],{"class":72},[33,155680,155681],{"class":47},".students ",[33,155683,57],{"class":39},[33,155685,615],{"class":47},[33,155687,155688],{"class":35,"line":76},[33,155689,100],{"emptyLinePlaceholder":99},[33,155691,155692,155694,155697],{"class":35,"line":87},[33,155693,1603],{"class":39},[33,155695,155696],{"class":43}," find_by_id",[33,155698,155699],{"class":47},"(self, student_id):\n",[33,155701,155702,155704,155706,155708,155710],{"class":35,"line":96},[33,155703,5658],{"class":39},[33,155705,2120],{"class":47},[33,155707,681],{"class":39},[33,155709,41098],{"class":72},[33,155711,155712],{"class":47},".students:\n",[33,155714,155715,155717,155720,155722],{"class":35,"line":103},[33,155716,6892],{"class":39},[33,155718,155719],{"class":47}," student.student_id ",[33,155721,5206],{"class":39},[33,155723,154340],{"class":47},[33,155725,155726,155729],{"class":35,"line":108},[33,155727,155728],{"class":39},"                return",[33,155730,154347],{"class":47},[33,155732,155733,155735],{"class":35,"line":119},[33,155734,1614],{"class":39},[33,155736,154354],{"class":72},[33,155738,155739],{"class":35,"line":128},[33,155740,100],{"emptyLinePlaceholder":99},[33,155742,155743,155745,155747],{"class":35,"line":1753},[33,155744,1603],{"class":39},[33,155746,652],{"class":43},[33,155748,155749],{"class":47},"(self, student):\n",[33,155751,155752,155754,155756],{"class":35,"line":1763},[33,155753,2130],{"class":39},[33,155755,41098],{"class":72},[33,155757,155758],{"class":47},".find_by_id(student.student_id):\n",[33,155760,155761,155763],{"class":35,"line":1775},[33,155762,17970],{"class":39},[33,155764,128005],{"class":72},[33,155766,155767,155769],{"class":35,"line":1780},[33,155768,33076],{"class":72},[33,155770,155771],{"class":47},".students.append(student)\n",[33,155773,155774,155776],{"class":35,"line":1785},[33,155775,1614],{"class":39},[33,155777,155778],{"class":72}," True\n",[19,155780,155781],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155783,155785],{"id":155784},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[631,155787,155789],{"id":155788},"_1251-数据结构","12.5.1 数据结构",[23,155791,155793],{"className":25,"code":155792,"language":27,"meta":28,"style":28},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[30,155794,155795,155803,155834,155864,155893,155922],{"__ignoreMap":28},[33,155796,155797,155799,155801],{"class":35,"line":36},[33,155798,150661],{"class":47},[33,155800,57],{"class":39},[33,155802,1087],{"class":47},[33,155804,155805,155807,155809,155811,155813,155815,155818,155820,155823,155825,155827,155829,155832],{"class":35,"line":51},[33,155806,1092],{"class":47},[33,155808,150194],{"class":60},[33,155810,996],{"class":47},[33,155812,150804],{"class":60},[33,155814,245],{"class":47},[33,155816,155817],{"class":60},"\"category\"",[33,155819,996],{"class":47},[33,155821,155822],{"class":60},"\"手机\"",[33,155824,245],{"class":47},[33,155826,86293],{"class":60},[33,155828,996],{"class":47},[33,155830,155831],{"class":72},"12000",[33,155833,1111],{"class":47},[33,155835,155836,155838,155840,155842,155844,155846,155848,155850,155853,155855,155857,155859,155862],{"class":35,"line":64},[33,155837,1092],{"class":47},[33,155839,150194],{"class":60},[33,155841,996],{"class":47},[33,155843,150804],{"class":60},[33,155845,245],{"class":47},[33,155847,155817],{"class":60},[33,155849,996],{"class":47},[33,155851,155852],{"class":60},"\"电脑\"",[33,155854,245],{"class":47},[33,155856,86293],{"class":60},[33,155858,996],{"class":47},[33,155860,155861],{"class":72},"18000",[33,155863,1111],{"class":47},[33,155865,155866,155868,155870,155872,155874,155876,155878,155880,155882,155884,155886,155888,155891],{"class":35,"line":76},[33,155867,1092],{"class":47},[33,155869,150194],{"class":60},[33,155871,996],{"class":47},[33,155873,150825],{"class":60},[33,155875,245],{"class":47},[33,155877,155817],{"class":60},[33,155879,996],{"class":47},[33,155881,155822],{"class":60},[33,155883,245],{"class":47},[33,155885,86293],{"class":60},[33,155887,996],{"class":47},[33,155889,155890],{"class":72},"15000",[33,155892,1111],{"class":47},[33,155894,155895,155897,155899,155901,155903,155905,155907,155909,155911,155913,155915,155917,155920],{"class":35,"line":87},[33,155896,1092],{"class":47},[33,155898,150194],{"class":60},[33,155900,996],{"class":47},[33,155902,150825],{"class":60},[33,155904,245],{"class":47},[33,155906,155817],{"class":60},[33,155908,996],{"class":47},[33,155910,155852],{"class":60},[33,155912,245],{"class":47},[33,155914,86293],{"class":60},[33,155916,996],{"class":47},[33,155918,155919],{"class":72},"16000",[33,155921,1111],{"class":47},[33,155923,155924],{"class":35,"line":96},[33,155925,919],{"class":47},[631,155927,155929],{"id":155928},"_1252-按日期统计","12.5.2 按日期统计",[23,155931,155933],{"className":25,"code":155932,"language":27,"meta":28,"style":28},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[30,155934,155935,155944,155948,155959,155973,155986,156005,156009],{"__ignoreMap":28},[33,155936,155937,155940,155942],{"class":35,"line":36},[33,155938,155939],{"class":47},"daily_total ",[33,155941,57],{"class":39},[33,155943,90076],{"class":47},[33,155945,155946],{"class":35,"line":51},[33,155947,100],{"emptyLinePlaceholder":99},[33,155949,155950,155952,155954,155956],{"class":35,"line":64},[33,155951,5282],{"class":39},[33,155953,150406],{"class":47},[33,155955,681],{"class":39},[33,155957,155958],{"class":47}," sales:\n",[33,155960,155961,155964,155966,155969,155971],{"class":35,"line":76},[33,155962,155963],{"class":47},"    date ",[33,155965,57],{"class":39},[33,155967,155968],{"class":47}," item[",[33,155970,150194],{"class":60},[33,155972,919],{"class":47},[33,155974,155975,155978,155980,155982,155984],{"class":35,"line":87},[33,155976,155977],{"class":47},"    amount ",[33,155979,57],{"class":39},[33,155981,155968],{"class":47},[33,155983,86293],{"class":60},[33,155985,919],{"class":47},[33,155987,155988,155991,155993,155996,155998,156000,156002],{"class":35,"line":96},[33,155989,155990],{"class":47},"    daily_total[date] ",[33,155992,57],{"class":39},[33,155994,155995],{"class":47}," daily_total.get(date, ",[33,155997,2617],{"class":72},[33,155999,15954],{"class":47},[33,156001,880],{"class":39},[33,156003,156004],{"class":47}," amount\n",[33,156006,156007],{"class":35,"line":103},[33,156008,100],{"emptyLinePlaceholder":99},[33,156010,156011,156013],{"class":35,"line":108},[33,156012,122],{"class":72},[33,156014,156015],{"class":47},"(daily_total)\n",[631,156017,156019],{"id":156018},"_1253-按类别统计","12.5.3 按类别统计",[23,156021,156023],{"className":25,"code":156022,"language":27,"meta":28,"style":28},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[30,156024,156025,156034,156038,156048,156061,156073,156091,156095],{"__ignoreMap":28},[33,156026,156027,156030,156032],{"class":35,"line":36},[33,156028,156029],{"class":47},"category_total ",[33,156031,57],{"class":39},[33,156033,90076],{"class":47},[33,156035,156036],{"class":35,"line":51},[33,156037,100],{"emptyLinePlaceholder":99},[33,156039,156040,156042,156044,156046],{"class":35,"line":64},[33,156041,5282],{"class":39},[33,156043,150406],{"class":47},[33,156045,681],{"class":39},[33,156047,155958],{"class":47},[33,156049,156050,156053,156055,156057,156059],{"class":35,"line":76},[33,156051,156052],{"class":47},"    category ",[33,156054,57],{"class":39},[33,156056,155968],{"class":47},[33,156058,155817],{"class":60},[33,156060,919],{"class":47},[33,156062,156063,156065,156067,156069,156071],{"class":35,"line":87},[33,156064,155977],{"class":47},[33,156066,57],{"class":39},[33,156068,155968],{"class":47},[33,156070,86293],{"class":60},[33,156072,919],{"class":47},[33,156074,156075,156078,156080,156083,156085,156087,156089],{"class":35,"line":96},[33,156076,156077],{"class":47},"    category_total[category] ",[33,156079,57],{"class":39},[33,156081,156082],{"class":47}," category_total.get(category, ",[33,156084,2617],{"class":72},[33,156086,15954],{"class":47},[33,156088,880],{"class":39},[33,156090,156004],{"class":47},[33,156092,156093],{"class":35,"line":103},[33,156094,100],{"emptyLinePlaceholder":99},[33,156096,156097,156099],{"class":35,"line":108},[33,156098,122],{"class":72},[33,156100,156101],{"class":47},"(category_total)\n",[631,156103,156105],{"id":156104},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[23,156107,156109],{"className":25,"code":156108,"language":27,"meta":28,"style":28},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[30,156110,156111,156133],{"__ignoreMap":28},[33,156112,156113,156116,156118,156120,156123,156125,156127,156129,156131],{"class":35,"line":36},[33,156114,156115],{"class":47},"top_date, top_amount ",[33,156117,57],{"class":39},[33,156119,8197],{"class":72},[33,156121,156122],{"class":47},"(daily_total.items(), ",[33,156124,1171],{"class":289},[33,156126,1174],{"class":39},[33,156128,1177],{"class":47},[33,156130,720],{"class":72},[33,156132,6907],{"class":47},[33,156134,156135,156137],{"class":35,"line":51},[33,156136,122],{"class":72},[33,156138,156139],{"class":47},"(top_date, top_amount)\n",[14,156141,156143],{"id":156142},"_126-绘制柱状图","12.6 绘制柱状图",[23,156145,156147],{"className":25,"code":156146,"language":27,"meta":28,"style":28},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[30,156148,156149,156163,156174,156178,156186,156198,156210,156221,156225,156229,156239,156249,156263,156268,156285,156302,156318,156322],{"__ignoreMap":28},[33,156150,156151,156153,156155,156157,156159,156161],{"class":35,"line":36},[33,156152,32970],{"class":39},[33,156154,149576],{"class":47},[33,156156,32627],{"class":39},[33,156158,149581],{"class":47},[33,156160,33613],{"class":39},[33,156162,149586],{"class":47},[33,156164,156165,156167,156169,156171],{"class":35,"line":51},[33,156166,32970],{"class":39},[33,156168,149435],{"class":47},[33,156170,32627],{"class":39},[33,156172,156173],{"class":47}," Bar\n",[33,156175,156176],{"class":35,"line":64},[33,156177,100],{"emptyLinePlaceholder":99},[33,156179,156180,156182,156184],{"class":35,"line":76},[33,156181,156029],{"class":47},[33,156183,57],{"class":39},[33,156185,17810],{"class":47},[33,156187,156188,156191,156193,156196],{"class":35,"line":87},[33,156189,156190],{"class":60},"    \"手机\"",[33,156192,996],{"class":47},[33,156194,156195],{"class":72},"27000",[33,156197,33696],{"class":47},[33,156199,156200,156203,156205,156208],{"class":35,"line":96},[33,156201,156202],{"class":60},"    \"电脑\"",[33,156204,996],{"class":47},[33,156206,156207],{"class":72},"34000",[33,156209,33696],{"class":47},[33,156211,156212,156215,156217,156219],{"class":35,"line":103},[33,156213,156214],{"class":60},"    \"耳机\"",[33,156216,996],{"class":47},[33,156218,126597],{"class":72},[33,156220,33696],{"class":47},[33,156222,156223],{"class":35,"line":108},[33,156224,1010],{"class":47},[33,156226,156227],{"class":35,"line":119},[33,156228,100],{"emptyLinePlaceholder":99},[33,156230,156231,156234,156236],{"class":35,"line":128},[33,156232,156233],{"class":47},"bar ",[33,156235,57],{"class":39},[33,156237,156238],{"class":47}," Bar()\n",[33,156240,156241,156244,156246],{"class":35,"line":1753},[33,156242,156243],{"class":47},"bar.add_xaxis(",[33,156245,1366],{"class":72},[33,156247,156248],{"class":47},"(category_total.keys()))\n",[33,156250,156251,156254,156256,156258,156260],{"class":35,"line":1763},[33,156252,156253],{"class":47},"bar.add_yaxis(",[33,156255,149492],{"class":60},[33,156257,245],{"class":47},[33,156259,1366],{"class":72},[33,156261,156262],{"class":47},"(category_total.values()))\n",[33,156264,156265],{"class":35,"line":1775},[33,156266,156267],{"class":47},"bar.set_global_opts(\n",[33,156269,156270,156272,156274,156276,156278,156280,156283],{"class":35,"line":1780},[33,156271,149670],{"class":289},[33,156273,57],{"class":39},[33,156275,149675],{"class":47},[33,156277,53629],{"class":289},[33,156279,57],{"class":39},[33,156281,156282],{"class":60},"\"品类销售额\"",[33,156284,40272],{"class":47},[33,156286,156287,156289,156291,156293,156295,156297,156300],{"class":35,"line":1785},[33,156288,149689],{"class":289},[33,156290,57],{"class":39},[33,156292,149694],{"class":47},[33,156294,207],{"class":289},[33,156296,57],{"class":39},[33,156298,156299],{"class":60},"\"品类\"",[33,156301,40272],{"class":47},[33,156303,156304,156306,156308,156310,156312,156314,156316],{"class":35,"line":1940},[33,156305,149708],{"class":289},[33,156307,57],{"class":39},[33,156309,149694],{"class":47},[33,156311,207],{"class":289},[33,156313,57],{"class":39},[33,156315,149492],{"class":60},[33,156317,40272],{"class":47},[33,156319,156320],{"class":35,"line":2183},[33,156321,226],{"class":47},[33,156323,156324,156327,156330],{"class":35,"line":2208},[33,156325,156326],{"class":47},"bar.render(",[33,156328,156329],{"class":60},"\"category_sales.html\"",[33,156331,226],{"class":47},[14,156333,156335],{"id":156334},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,156337,156338],{},"时间线适合展示不同日期、月份、年份的数据变化。",[23,156340,156342],{"className":25,"code":156341,"language":27,"meta":28,"style":28},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[30,156343,156344,156358,156369,156373,156381,156405,156428,156453,156457,156461,156471,156475,156486,156495,156505,156519,156550,156555,156559],{"__ignoreMap":28},[33,156345,156346,156348,156350,156352,156354,156356],{"class":35,"line":36},[33,156347,32970],{"class":39},[33,156349,149576],{"class":47},[33,156351,32627],{"class":39},[33,156353,149581],{"class":47},[33,156355,33613],{"class":39},[33,156357,149586],{"class":47},[33,156359,156360,156362,156364,156366],{"class":35,"line":51},[33,156361,32970],{"class":39},[33,156363,149435],{"class":47},[33,156365,32627],{"class":39},[33,156367,156368],{"class":47}," Bar, Timeline\n",[33,156370,156371],{"class":35,"line":64},[33,156372,100],{"emptyLinePlaceholder":99},[33,156374,156375,156377,156379],{"class":35,"line":76},[33,156376,103863],{"class":47},[33,156378,57],{"class":39},[33,156380,17810],{"class":47},[33,156382,156383,156386,156389,156391,156393,156395,156397,156399,156401,156403],{"class":35,"line":87},[33,156384,156385],{"class":60},"    \"2024-10-01\"",[33,156387,156388],{"class":47},": {",[33,156390,155822],{"class":60},[33,156392,996],{"class":47},[33,156394,155831],{"class":72},[33,156396,245],{"class":47},[33,156398,155852],{"class":60},[33,156400,996],{"class":47},[33,156402,155861],{"class":72},[33,156404,1111],{"class":47},[33,156406,156407,156410,156412,156414,156416,156418,156420,156422,156424,156426],{"class":35,"line":96},[33,156408,156409],{"class":60},"    \"2024-10-02\"",[33,156411,156388],{"class":47},[33,156413,155822],{"class":60},[33,156415,996],{"class":47},[33,156417,155890],{"class":72},[33,156419,245],{"class":47},[33,156421,155852],{"class":60},[33,156423,996],{"class":47},[33,156425,155919],{"class":72},[33,156427,1111],{"class":47},[33,156429,156430,156433,156435,156437,156439,156442,156444,156446,156448,156451],{"class":35,"line":103},[33,156431,156432],{"class":60},"    \"2024-10-03\"",[33,156434,156388],{"class":47},[33,156436,155822],{"class":60},[33,156438,996],{"class":47},[33,156440,156441],{"class":72},"17000",[33,156443,245],{"class":47},[33,156445,155852],{"class":60},[33,156447,996],{"class":47},[33,156449,156450],{"class":72},"19000",[33,156452,1111],{"class":47},[33,156454,156455],{"class":35,"line":108},[33,156456,1010],{"class":47},[33,156458,156459],{"class":35,"line":119},[33,156460,100],{"emptyLinePlaceholder":99},[33,156462,156463,156466,156468],{"class":35,"line":128},[33,156464,156465],{"class":47},"timeline ",[33,156467,57],{"class":39},[33,156469,156470],{"class":47}," Timeline()\n",[33,156472,156473],{"class":35,"line":1753},[33,156474,100],{"emptyLinePlaceholder":99},[33,156476,156477,156479,156482,156484],{"class":35,"line":1763},[33,156478,5282],{"class":39},[33,156480,156481],{"class":47}," date, category_data ",[33,156483,681],{"class":39},[33,156485,151344],{"class":47},[33,156487,156488,156491,156493],{"class":35,"line":1775},[33,156489,156490],{"class":47},"    bar ",[33,156492,57],{"class":39},[33,156494,156238],{"class":47},[33,156496,156497,156500,156502],{"class":35,"line":1780},[33,156498,156499],{"class":47},"    bar.add_xaxis(",[33,156501,1366],{"class":72},[33,156503,156504],{"class":47},"(category_data.keys()))\n",[33,156506,156507,156510,156512,156514,156516],{"class":35,"line":1785},[33,156508,156509],{"class":47},"    bar.add_yaxis(",[33,156511,149492],{"class":60},[33,156513,245],{"class":47},[33,156515,1366],{"class":72},[33,156517,156518],{"class":47},"(category_data.values()))\n",[33,156520,156521,156524,156527,156529,156531,156533,156535,156537,156539,156541,156543,156545,156548],{"class":35,"line":1940},[33,156522,156523],{"class":47},"    bar.set_global_opts(",[33,156525,156526],{"class":289},"title_opts",[33,156528,57],{"class":39},[33,156530,149675],{"class":47},[33,156532,53629],{"class":289},[33,156534,57],{"class":39},[33,156536,198],{"class":39},[33,156538,397],{"class":60},[33,156540,204],{"class":72},[33,156542,76139],{"class":47},[33,156544,210],{"class":72},[33,156546,156547],{"class":60},"销售额\"",[33,156549,551],{"class":47},[33,156551,156552],{"class":35,"line":2183},[33,156553,156554],{"class":47},"    timeline.add(bar, date)\n",[33,156556,156557],{"class":35,"line":2208},[33,156558,100],{"emptyLinePlaceholder":99},[33,156560,156561,156564,156567],{"class":35,"line":2234},[33,156562,156563],{"class":47},"timeline.render(",[33,156565,156566],{"class":60},"\"timeline_sales.html\"",[33,156568,226],{"class":47},[14,156570,156572],{"id":156571},"_128-绘制地图","12.8 绘制地图",[19,156574,156575],{},"地图适合展示地区数据。",[23,156577,156579],{"className":25,"code":156578,"language":27,"meta":28,"style":28},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[30,156580,156581,156595,156606,156610,156618,156631,156643,156656,156669,156673,156677,156687,156702,156707,156724,156743,156747],{"__ignoreMap":28},[33,156582,156583,156585,156587,156589,156591,156593],{"class":35,"line":36},[33,156584,32970],{"class":39},[33,156586,149576],{"class":47},[33,156588,32627],{"class":39},[33,156590,149581],{"class":47},[33,156592,33613],{"class":39},[33,156594,149586],{"class":47},[33,156596,156597,156599,156601,156603],{"class":35,"line":51},[33,156598,32970],{"class":39},[33,156600,149435],{"class":47},[33,156602,32627],{"class":39},[33,156604,156605],{"class":47}," Map\n",[33,156607,156608],{"class":35,"line":64},[33,156609,100],{"emptyLinePlaceholder":99},[33,156611,156612,156614,156616],{"class":35,"line":76},[33,156613,103863],{"class":47},[33,156615,57],{"class":39},[33,156617,1087],{"class":47},[33,156619,156620,156623,156625,156627,156629],{"class":35,"line":87},[33,156621,156622],{"class":47},"    (",[33,156624,847],{"class":60},[33,156626,245],{"class":47},[33,156628,3229],{"class":72},[33,156630,40272],{"class":47},[33,156632,156633,156635,156637,156639,156641],{"class":35,"line":96},[33,156634,156622],{"class":47},[33,156636,71504],{"class":60},[33,156638,245],{"class":47},[33,156640,149509],{"class":72},[33,156642,40272],{"class":47},[33,156644,156645,156647,156650,156652,156654],{"class":35,"line":103},[33,156646,156622],{"class":47},[33,156648,156649],{"class":60},"\"广东\"",[33,156651,245],{"class":47},[33,156653,3983],{"class":72},[33,156655,40272],{"class":47},[33,156657,156658,156660,156663,156665,156667],{"class":35,"line":108},[33,156659,156622],{"class":47},[33,156661,156662],{"class":60},"\"浙江\"",[33,156664,245],{"class":47},[33,156666,149514],{"class":72},[33,156668,40272],{"class":47},[33,156670,156671],{"class":35,"line":119},[33,156672,919],{"class":47},[33,156674,156675],{"class":35,"line":128},[33,156676,100],{"emptyLinePlaceholder":99},[33,156678,156679,156682,156684],{"class":35,"line":1753},[33,156680,156681],{"class":47},"map_chart ",[33,156683,57],{"class":39},[33,156685,156686],{"class":47}," Map()\n",[33,156688,156689,156692,156694,156697,156700],{"class":35,"line":1763},[33,156690,156691],{"class":47},"map_chart.add(",[33,156693,149492],{"class":60},[33,156695,156696],{"class":47},", data, ",[33,156698,156699],{"class":60},"\"china\"",[33,156701,226],{"class":47},[33,156703,156704],{"class":35,"line":1775},[33,156705,156706],{"class":47},"map_chart.set_global_opts(\n",[33,156708,156709,156711,156713,156715,156717,156719,156722],{"class":35,"line":1780},[33,156710,149670],{"class":289},[33,156712,57],{"class":39},[33,156714,149675],{"class":47},[33,156716,53629],{"class":289},[33,156718,57],{"class":39},[33,156720,156721],{"class":60},"\"地区销售额\"",[33,156723,40272],{"class":47},[33,156725,156726,156729,156731,156734,156737,156739,156741],{"class":35,"line":1785},[33,156727,156728],{"class":289},"    visualmap_opts",[33,156730,57],{"class":39},[33,156732,156733],{"class":47},"opts.VisualMapOpts(",[33,156735,156736],{"class":289},"max_",[33,156738,57],{"class":39},[33,156740,3983],{"class":72},[33,156742,40272],{"class":47},[33,156744,156745],{"class":35,"line":1940},[33,156746,226],{"class":47},[33,156748,156749,156752,156755],{"class":35,"line":2183},[33,156750,156751],{"class":47},"map_chart.render(",[33,156753,156754],{"class":60},"\"map_sales.html\"",[33,156756,226],{"class":47},[19,156758,156759],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156761,156763],{"id":156762},"_129-项目拆分建议","12.9 项目拆分建议",[19,156765,156766],{},"当代码超过一个文件时，可以这样组织：",[23,156768,156771],{"className":156769,"code":156770,"language":7436,"meta":28},[7434],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[30,156772,156770],{"__ignoreMap":28},[19,156774,156775],{},"职责：",[328,156777,156778,156784,156790,156796],{},[331,156779,156780,156783],{},[30,156781,156782],{},"main.py","：程序入口。",[331,156785,156786,156789],{},[30,156787,156788],{},"file_utils.py","：读写 JSON。",[331,156791,156792,156795],{},[30,156793,156794],{},"sales_service.py","：统计销售数据。",[331,156797,156798,156801],{},[30,156799,156800],{},"chart_builder.py","：生成图表。",[14,156803,156805],{"id":156804},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156807,156808],{},"语法基础：",[328,156810,156811,156814,156817,156820],{},[331,156812,156813],{},"会写变量、注释、输入输出。",[331,156815,156816],{},"会使用 int、float、str、bool。",[331,156818,156819],{},"会做类型转换。",[331,156821,156822],{},"会使用 f-string 格式化输出。",[19,156824,156825],{},"流程控制：",[328,156827,156828,156834,156840,156848],{},[331,156829,156830,156831,30622],{},"会写 ",[30,156832,156833],{},"if elif else",[331,156835,156830,156836,1958,156838,30622],{},[30,156837,110866],{},[30,156839,5282],{},[331,156841,156842,156843,1958,156845,30622],{},"理解 ",[30,156844,4312],{},[30,156846,156847],{},"continue",[331,156849,156850],{},"能写嵌套循环。",[19,156852,156853],{},"函数：",[328,156855,156856,156859,156862,156865],{},[331,156857,156858],{},"会定义和调用函数。",[331,156860,156861],{},"理解参数和返回值。",[331,156863,156864],{},"知道局部变量和全局变量。",[331,156866,156867],{},"会使用默认参数、关键字参数、不定长参数。",[19,156869,156870],{},"容器：",[328,156872,156873,156876,156879,156882,156885],{},[331,156874,156875],{},"会使用列表增删改查。",[331,156877,156878],{},"会遍历列表、字典。",[331,156880,156881],{},"会使用切片。",[331,156883,156884],{},"会用集合去重。",[331,156886,156887],{},"会处理列表嵌套字典。",[19,156889,156890],{},"文件和模块：",[328,156892,156893,156896,156899,156902,156905],{},[331,156894,156895],{},"会读写文本文件。",[331,156897,156898],{},"会读写 JSON。",[331,156900,156901],{},"会捕获常见异常。",[331,156903,156904],{},"会导入模块和第三方包。",[331,156906,156907],{},"会创建简单包结构。",[19,156909,156910],{},"项目能力：",[328,156912,156913,156916,156919,156922,156925],{},[331,156914,156915],{},"能把代码拆成函数。",[331,156917,156918],{},"能把数据保存到文件。",[331,156920,156921],{},"能处理用户输入错误。",[331,156923,156924],{},"能写一个完整菜单程序。",[331,156926,156927],{},"能用 pyecharts 生成图表。",[14,156929,156931],{"id":156930},"_1211-推荐练习顺序","12.11 推荐练习顺序",[328,156933,156934,156937,156940,156943,156946,156949,156952,156955],{},[331,156935,156936],{},"猜数字游戏。",[331,156938,156939],{},"ATM 菜单程序。",[331,156941,156942],{},"学生成绩统计。",[331,156944,156945],{},"学生管理系统函数版。",[331,156947,156948],{},"学生管理系统文件持久化版。",[331,156950,156951],{},"学生管理系统面向对象版。",[331,156953,156954],{},"销售数据统计。",[331,156956,156957],{},"销售数据可视化。",[14,156959,156961],{"id":156960},"_1212-常见学习误区","12.12 常见学习误区",[328,156963,156964,156967,156970,156973,156976,156979,156982],{},[331,156965,156966],{},"只看视频不敲代码。",[331,156968,156969],{},"一报错就复制错误去搜，不先读报错位置。",[331,156971,156972],{},"变量名随便写，后续自己看不懂。",[331,156974,156975],{},"所有代码都写在一个文件一个函数里。",[331,156977,156978],{},"不保存练习代码，复习时没有材料。",[331,156980,156981],{},"还没掌握列表字典就急着学框架。",[331,156983,156984],{},"不会读官方文档，只依赖教程。",[14,156986,156988],{"id":156987},"_1213-如何读报错","12.13 如何读报错",[19,156990,156991],{},"报错通常从下往上看最后几行。",[19,156993,17373],{},[23,156995,156998],{"className":156996,"code":156997,"language":7436,"meta":28},[7434],"ValueError: invalid literal for int() with base 10: 'abc'\n",[30,156999,156997],{"__ignoreMap":28},[19,157001,26838],{},[328,157003,157004,157010,157020],{},[331,157005,157006,157007,30622],{},"异常类型是 ",[30,157008,157009],{},"ValueError",[331,157011,109548,157012,157015,157016,157019],{},[30,157013,157014],{},"int()"," 无法把 ",[30,157017,157018],{},"'abc'"," 转成整数。",[331,157021,157022],{},"应该检查输入内容或增加异常处理。",[19,157024,157025],{},"再看文件名和行号：",[23,157027,157030],{"className":157028,"code":157029,"language":7436,"meta":28},[7434],"File \"main.py\", line 10, in \u003Cmodule>\n",[30,157031,157029],{"__ignoreMap":28},[19,157033,157034,157035,157037],{},"表示错误发生在 ",[30,157036,156782],{}," 第 10 行。",[14,157039,157041],{"id":157040},"_1214-后续学习方向","12.14 后续学习方向",[19,157043,157044],{},"Python 基础完成后，可以按兴趣选择方向：",[328,157046,157047,157059,157068,157080,157091,157100,157110],{},[331,157048,157049,157050,2638,157053,2638,157056,30622],{},"自动化办公：",[30,157051,157052],{},"openpyxl",[30,157054,157055],{},"python-docx",[30,157057,157058],{},"pdfplumber",[331,157060,157061,157062,2638,157064,2638,157066,30622],{},"数据分析：",[30,157063,102833],{},[30,157065,148383],{},[30,157067,148391],{},[331,157069,157070,157071,2638,157074,2638,157077,30622],{},"Web 后端：",[30,157072,157073],{},"Flask",[30,157075,157076],{},"FastAPI",[30,157078,157079],{},"Django",[331,157081,157082,157083,2638,157085,2638,157088,30622],{},"爬虫：",[30,157084,148368],{},[30,157086,157087],{},"BeautifulSoup",[30,157089,157090],{},"Scrapy",[331,157092,157093,157094,2638,157096,157099],{},"测试开发：",[30,157095,148415],{},[30,157097,157098],{},"selenium","、接口测试。",[331,157101,157102,157103,2638,157105,2638,157107,30622],{},"人工智能：",[30,157104,102833],{},[30,157106,148383],{},[30,157108,157109],{},"pytorch",[331,157111,157112,157113,2638,157115,2638,157118,30622],{},"运维脚本：",[30,157114,147984],{},[30,157116,157117],{},"subprocess",[30,157119,157120],{},"paramiko",[19,157122,157123],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,157125,157127],{"id":157126},"_1215-结课练习","12.15 结课练习",[328,157129,157130,157133,157136,157139,157142,157145,157148,157151],{},[331,157131,157132],{},"完成函数版学生管理系统。",[331,157134,157135],{},"给学生管理系统增加 JSON 持久化。",[331,157137,157138],{},"给学生管理系统增加异常处理。",[331,157140,157141],{},"把学生管理系统改成面向对象版。",[331,157143,157144],{},"使用 pyecharts 绘制学生成绩柱状图。",[331,157146,157147],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[331,157149,157150],{},"按品类统计销售额并绘制柱状图。",[331,157152,157153],{},"写一份自己的 Python 学习路线图。",[2331,157155,157156],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":28,"searchDepth":51,"depth":51,"links":157158},[157159,157160,157163,157164,157165,157171,157172,157173,157174,157175,157176,157177,157178,157179,157180],{"id":153884,"depth":51,"text":153885},{"id":153934,"depth":51,"text":153935,"children":157161},[157162],{"id":153938,"depth":64,"text":153939},{"id":153977,"depth":51,"text":153978},{"id":155446,"depth":51,"text":155447},{"id":155784,"depth":51,"text":155785,"children":157166},[157167,157168,157169,157170],{"id":155788,"depth":64,"text":155789},{"id":155928,"depth":64,"text":155929},{"id":156018,"depth":64,"text":156019},{"id":156104,"depth":64,"text":156105},{"id":156142,"depth":51,"text":156143},{"id":156334,"depth":51,"text":156335},{"id":156571,"depth":51,"text":156572},{"id":156762,"depth":51,"text":156763},{"id":156804,"depth":51,"text":156805},{"id":156930,"depth":51,"text":156931},{"id":156960,"depth":51,"text":156961},{"id":156987,"depth":51,"text":156988},{"id":157040,"depth":51,"text":157041},{"id":157126,"depth":51,"text":157127},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153876,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":157187,"title":157188,"body":157189,"description":2359,"extension":2360,"meta":159655,"navigation":99,"path":159656,"seo":159657,"stem":159658,"__hash__":159659},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":157190,"toc":159630},[157191,157194,157198,157201,157204,157224,157227,157250,157253,157256,157278,157281,157303,157307,157310,157350,157353,157474,157478,157481,157521,157524,157548,157551,157555,157558,157572,157605,157608,157643,157646,157669,157672,157705,157708,157710,157716,157791,157794,157800,157817,157857,157861,157864,157910,157912,157950,157953,157988,157991,158026,158029,158061,158063,158082,158086,158090,158203,158205,158280,158284,158330,158333,158358,158367,158371,158374,158437,158445,158472,158476,158516,158581,158585,158588,158627,158630,158675,158678,158739,158743,158770,158773,158801,158804,158808,158812,158877,158880,158918,158921,158953,158957,159056,159060,159063,159136,159139,159187,159191,159197,159237,159240,159287,159290,159339,159343,159345,159359,159361,159542,159546,159573,159593,159600,159604,159621,159627],[10,157192,157188],{"id":157193},"_2-基础语法变量与字符串",[14,157195,157197],{"id":157196},"_21-注释","2.1 注释",[19,157199,157200],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,157202,157203],{},"单行注释：",[23,157205,157207],{"className":25,"code":157206,"language":27,"meta":28,"style":28},"# 这是单行注释\nprint(\"hello\")\n",[30,157208,157209,157214],{"__ignoreMap":28},[33,157210,157211],{"class":35,"line":36},[33,157212,157213],{"class":2487},"# 这是单行注释\n",[33,157215,157216,157218,157220,157222],{"class":35,"line":51},[33,157217,122],{"class":72},[33,157219,133],{"class":47},[33,157221,1770],{"class":60},[33,157223,226],{"class":47},[19,157225,157226],{},"多行说明常用三引号：",[23,157228,157230],{"className":25,"code":157229,"language":27,"meta":28,"style":28},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[30,157231,157232,157236,157241,157246],{"__ignoreMap":28},[33,157233,157234],{"class":35,"line":36},[33,157235,97905],{"class":60},[33,157237,157238],{"class":35,"line":51},[33,157239,157240],{"class":60},"这是多行说明。\n",[33,157242,157243],{"class":35,"line":64},[33,157244,157245],{"class":60},"常用于文件顶部说明、函数说明等。\n",[33,157247,157248],{"class":35,"line":76},[33,157249,97905],{"class":60},[19,157251,157252],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,157254,157255],{},"不好：",[23,157257,157259],{"className":25,"code":157258,"language":27,"meta":28,"style":28},"# age 加 1\nage = age + 1\n",[30,157260,157261,157266],{"__ignoreMap":28},[33,157262,157263],{"class":35,"line":36},[33,157264,157265],{"class":2487},"# age 加 1\n",[33,157267,157268,157270,157272,157274,157276],{"class":35,"line":51},[33,157269,148744],{"class":47},[33,157271,57],{"class":39},[33,157273,17945],{"class":47},[33,157275,880],{"class":39},[33,157277,57917],{"class":72},[19,157279,157280],{},"较好：",[23,157282,157284],{"className":25,"code":157283,"language":27,"meta":28,"style":28},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[30,157285,157286,157291],{"__ignoreMap":28},[33,157287,157288],{"class":35,"line":36},[33,157289,157290],{"class":2487},"# 用户过完生日后，年龄增加一岁\n",[33,157292,157293,157295,157297,157299,157301],{"class":35,"line":51},[33,157294,148744],{"class":47},[33,157296,57],{"class":39},[33,157298,17945],{"class":47},[33,157300,880],{"class":39},[33,157302,57917],{"class":72},[14,157304,157306],{"id":157305},"_22-字面量","2.2 字面量",[19,157308,157309],{},"字面量就是代码中直接写出来的数据。",[23,157311,157313],{"className":25,"code":157312,"language":27,"meta":28,"style":28},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[30,157314,157315,157322,157329,157336,157343],{"__ignoreMap":28},[33,157316,157317,157319],{"class":35,"line":36},[33,157318,2734],{"class":72},[33,157320,157321],{"class":2487},"          # 整数\n",[33,157323,157324,157326],{"class":35,"line":51},[33,157325,2479],{"class":72},[33,157327,157328],{"class":2487},"         # 小数\n",[33,157330,157331,157333],{"class":35,"line":64},[33,157332,1770],{"class":60},[33,157334,157335],{"class":2487},"      # 字符串\n",[33,157337,157338,157340],{"class":35,"line":76},[33,157339,1190],{"class":72},[33,157341,157342],{"class":2487},"         # 布尔值\n",[33,157344,157345,157347],{"class":35,"line":87},[33,157346,586],{"class":72},[33,157348,157349],{"class":2487},"         # 空值\n",[19,157351,157352],{},"常见字面量类型：",[2563,157354,157355,157365],{},[2566,157356,157357],{},[2569,157358,157359,157361,157363],{},[2572,157360,25975],{},[2572,157362,29729],{},[2572,157364,28108],{},[2610,157366,157367,157378,157389,157400,157412,157424,157436,157449,157461],{},[2569,157368,157369,157371,157375],{},[2615,157370,2436],{},[2615,157372,157373],{},[30,157374,2734],{},[2615,157376,157377],{},"整数",[2569,157379,157380,157382,157386],{},[2615,157381,2471],{},[2615,157383,157384],{},[30,157385,2479],{},[2615,157387,157388],{},"浮点数",[2569,157390,157391,157393,157397],{},[2615,157392,3576],{},[2615,157394,157395],{},[30,157396,1770],{},[2615,157398,157399],{},"字符串",[2569,157401,157402,157404,157410],{},[2615,157403,3628],{},[2615,157405,157406,2638,157408],{},[30,157407,1190],{},[30,157409,36212],{},[2615,157411,68232],{},[2569,157413,157414,157417,157421],{},[2615,157415,157416],{},"NoneType",[2615,157418,157419],{},[30,157420,586],{},[2615,157422,157423],{},"空值",[2569,157425,157426,157428,157433],{},[2615,157427,1366],{},[2615,157429,157430],{},[30,157431,157432],{},"[1, 2, 3]",[2615,157434,157435],{},"列表",[2569,157437,157438,157441,157446],{},[2615,157439,157440],{},"tuple",[2615,157442,157443],{},[30,157444,157445],{},"(1, 2, 3)",[2615,157447,157448],{},"元组",[2569,157450,157451,157453,157458],{},[2615,157452,116748],{},[2615,157454,157455],{},[30,157456,157457],{},"{\"name\": \"张三\"}",[2615,157459,157460],{},"字典",[2569,157462,157463,157466,157471],{},[2615,157464,157465],{},"set",[2615,157467,157468],{},[30,157469,157470],{},"{1, 2, 3}",[2615,157472,157473],{},"集合",[14,157475,157477],{"id":157476},"_23-变量","2.3 变量",[19,157479,157480],{},"变量是保存数据的名字。",[23,157482,157484],{"className":25,"code":157483,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[30,157485,157486,157494,157502,157512],{"__ignoreMap":28},[33,157487,157488,157490,157492],{"class":35,"line":36},[33,157489,148734],{"class":47},[33,157491,57],{"class":39},[33,157493,61],{"class":60},[33,157495,157496,157498,157500],{"class":35,"line":51},[33,157497,148744],{"class":47},[33,157499,57],{"class":39},[33,157501,73],{"class":72},[33,157503,157504,157507,157509],{"class":35,"line":64},[33,157505,157506],{"class":47},"height ",[33,157508,57],{"class":39},[33,157510,157511],{"class":72}," 1.75\n",[33,157513,157514,157517,157519],{"class":35,"line":76},[33,157515,157516],{"class":47},"is_student ",[33,157518,57],{"class":39},[33,157520,155778],{"class":72},[19,157522,157523],{},"Python 的变量不需要提前声明类型：",[23,157525,157527],{"className":25,"code":157526,"language":27,"meta":28,"style":28},"score = 100\nscore = \"满分\"\n",[30,157528,157529,157539],{"__ignoreMap":28},[33,157530,157531,157534,157536],{"class":35,"line":36},[33,157532,157533],{"class":47},"score ",[33,157535,57],{"class":39},[33,157537,157538],{"class":72}," 100\n",[33,157540,157541,157543,157545],{"class":35,"line":51},[33,157542,157533],{"class":47},[33,157544,57],{"class":39},[33,157546,157547],{"class":60}," \"满分\"\n",[19,157549,157550],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157552,157554],{"id":157553},"_24-变量命名规则","2.4 变量命名规则",[19,157556,157557],{},"硬性规则：",[328,157559,157560,157563,157566,157569],{},[331,157561,157562],{},"只能由字母、数字、下划线组成。",[331,157564,157565],{},"不能以数字开头。",[331,157567,157568],{},"不能使用 Python 关键字。",[331,157570,157571],{},"区分大小写。",[23,157573,157575],{"className":25,"code":157574,"language":27,"meta":28,"style":28},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[30,157576,157577,157586,157595],{"__ignoreMap":28},[33,157578,157579,157582,157584],{"class":35,"line":36},[33,157580,157581],{"class":47},"user_name ",[33,157583,57],{"class":39},[33,157585,148739],{"class":60},[33,157587,157588,157591,157593],{"class":35,"line":51},[33,157589,157590],{"class":47},"age2 ",[33,157592,57],{"class":39},[33,157594,73],{"class":72},[33,157596,157597,157600,157602],{"class":35,"line":64},[33,157598,157599],{"class":47},"_token ",[33,157601,57],{"class":39},[33,157603,157604],{"class":60}," \"abc\"\n",[19,157606,157607],{},"错误写法：",[23,157609,157611],{"className":25,"code":157610,"language":27,"meta":28,"style":28},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[30,157612,157613,157622,157634],{"__ignoreMap":28},[33,157614,157615,157618,157620],{"class":35,"line":36},[33,157616,157617],{"class":79614},"2age",[33,157619,15804],{"class":39},[33,157621,73],{"class":72},[33,157623,157624,157626,157628,157630,157632],{"class":35,"line":51},[33,157625,133782],{"class":47},[33,157627,2949],{"class":39},[33,157629,148734],{"class":47},[33,157631,57],{"class":39},[33,157633,148739],{"class":60},[33,157635,157636,157638,157640],{"class":35,"line":64},[33,157637,16934],{"class":39},[33,157639,15804],{"class":39},[33,157641,157642],{"class":60}," \"一班\"\n",[19,157644,157645],{},"查看关键字：",[23,157647,157649],{"className":25,"code":157648,"language":27,"meta":28,"style":28},"import keyword\n\nprint(keyword.kwlist)\n",[30,157650,157651,157658,157662],{"__ignoreMap":28},[33,157652,157653,157655],{"class":35,"line":36},[33,157654,32627],{"class":39},[33,157656,157657],{"class":47}," keyword\n",[33,157659,157660],{"class":35,"line":51},[33,157661,100],{"emptyLinePlaceholder":99},[33,157663,157664,157666],{"class":35,"line":64},[33,157665,122],{"class":72},[33,157667,157668],{"class":47},"(keyword.kwlist)\n",[19,157670,157671],{},"推荐命名风格：",[23,157673,157675],{"className":25,"code":157674,"language":27,"meta":28,"style":28},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[30,157676,157677,157686,157696],{"__ignoreMap":28},[33,157678,157679,157682,157684],{"class":35,"line":36},[33,157680,157681],{"class":47},"student_name ",[33,157683,57],{"class":39},[33,157685,61],{"class":60},[33,157687,157688,157691,157693],{"class":35,"line":51},[33,157689,157690],{"class":47},"total_price ",[33,157692,57],{"class":39},[33,157694,157695],{"class":72}," 99.8\n",[33,157697,157698,157701,157703],{"class":35,"line":64},[33,157699,157700],{"class":47},"is_finished ",[33,157702,57],{"class":39},[33,157704,128005],{"class":72},[19,157706,157707],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157709,52954],{"id":52953},[19,157711,2318,157712,157715],{},[30,157713,157714],{},"type()"," 查看数据类型：",[23,157717,157719],{"className":25,"code":157718,"language":27,"meta":28,"style":28},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[30,157720,157721,157735,157749,157763,157777],{"__ignoreMap":28},[33,157722,157723,157725,157727,157729,157731,157733],{"class":35,"line":36},[33,157724,122],{"class":72},[33,157726,133],{"class":47},[33,157728,136],{"class":72},[33,157730,133],{"class":47},[33,157732,2734],{"class":72},[33,157734,551],{"class":47},[33,157736,157737,157739,157741,157743,157745,157747],{"class":35,"line":51},[33,157738,122],{"class":72},[33,157740,133],{"class":47},[33,157742,136],{"class":72},[33,157744,133],{"class":47},[33,157746,2479],{"class":72},[33,157748,551],{"class":47},[33,157750,157751,157753,157755,157757,157759,157761],{"class":35,"line":64},[33,157752,122],{"class":72},[33,157754,133],{"class":47},[33,157756,136],{"class":72},[33,157758,133],{"class":47},[33,157760,1770],{"class":60},[33,157762,551],{"class":47},[33,157764,157765,157767,157769,157771,157773,157775],{"class":35,"line":76},[33,157766,122],{"class":72},[33,157768,133],{"class":47},[33,157770,136],{"class":72},[33,157772,133],{"class":47},[33,157774,1190],{"class":72},[33,157776,551],{"class":47},[33,157778,157779,157781,157783,157785,157787,157789],{"class":35,"line":87},[33,157780,122],{"class":72},[33,157782,133],{"class":47},[33,157784,136],{"class":72},[33,157786,133],{"class":47},[33,157788,586],{"class":72},[33,157790,551],{"class":47},[19,157792,157793],{},"输出类似：",[23,157795,157798],{"className":157796,"code":157797,"language":7436,"meta":28},[7434],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[30,157799,157797],{"__ignoreMap":28},[19,157801,11271,157802,109486,157804,157806,157807,157809,157810,23738,157812,157809,157814,157816],{},[30,157803,3628],{},[30,157805,2436],{}," 的子类，",[30,157808,1190],{}," 可以当作 ",[30,157811,720],{},[30,157813,36212],{},[30,157815,2617],{},"，但业务代码中不要滥用。",[23,157818,157820],{"className":25,"code":157819,"language":27,"meta":28,"style":28},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[30,157821,157822,157840],{"__ignoreMap":28},[33,157823,157824,157826,157828,157830,157832,157834,157837],{"class":35,"line":36},[33,157825,122],{"class":72},[33,157827,133],{"class":47},[33,157829,1190],{"class":72},[33,157831,47789],{"class":39},[33,157833,27357],{"class":72},[33,157835,157836],{"class":47},")   ",[33,157838,157839],{"class":2487},"# 2\n",[33,157841,157842,157844,157846,157848,157850,157852,157854],{"class":35,"line":51},[33,157843,122],{"class":72},[33,157845,133],{"class":47},[33,157847,36212],{"class":72},[33,157849,47789],{"class":39},[33,157851,27357],{"class":72},[33,157853,48031],{"class":47},[33,157855,157856],{"class":2487},"# 1\n",[14,157858,157860],{"id":157859},"_26-类型转换","2.6 类型转换",[19,157862,157863],{},"常用转换函数：",[23,157865,157867],{"className":25,"code":157866,"language":27,"meta":28,"style":28},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[30,157868,157869,157879,157890,157900],{"__ignoreMap":28},[33,157870,157871,157873,157875,157877],{"class":35,"line":36},[33,157872,2436],{"class":72},[33,157874,133],{"class":47},[33,157876,56535],{"class":60},[33,157878,226],{"class":47},[33,157880,157881,157883,157885,157888],{"class":35,"line":51},[33,157882,2471],{"class":72},[33,157884,133],{"class":47},[33,157886,157887],{"class":60},"\"3.14\"",[33,157889,226],{"class":47},[33,157891,157892,157894,157896,157898],{"class":35,"line":64},[33,157893,3576],{"class":72},[33,157895,133],{"class":47},[33,157897,2734],{"class":72},[33,157899,226],{"class":47},[33,157901,157902,157904,157906,157908],{"class":35,"line":76},[33,157903,3628],{"class":72},[33,157905,133],{"class":47},[33,157907,720],{"class":72},[33,157909,226],{"class":47},[19,157911,17373],{},[23,157913,157915],{"className":25,"code":157914,"language":27,"meta":28,"style":28},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[30,157916,157917,157926,157937],{"__ignoreMap":28},[33,157918,157919,157921,157923],{"class":35,"line":36},[33,157920,148744],{"class":47},[33,157922,57],{"class":39},[33,157924,157925],{"class":60}," \"18\"\n",[33,157927,157928,157930,157932,157934],{"class":35,"line":51},[33,157929,148744],{"class":47},[33,157931,57],{"class":39},[33,157933,4641],{"class":72},[33,157935,157936],{"class":47},"(age)\n",[33,157938,157939,157941,157944,157946,157948],{"class":35,"line":64},[33,157940,122],{"class":72},[33,157942,157943],{"class":47},"(age ",[33,157945,880],{"class":39},[33,157947,27357],{"class":72},[33,157949,226],{"class":47},[19,157951,157952],{},"输入得到的内容永远是字符串：",[23,157954,157956],{"className":25,"code":157955,"language":27,"meta":28,"style":28},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[30,157957,157958,157974],{"__ignoreMap":28},[33,157959,157960,157963,157965,157967,157969,157972],{"class":35,"line":36},[33,157961,157962],{"class":47},"num ",[33,157964,57],{"class":39},[33,157966,62823],{"class":72},[33,157968,133],{"class":47},[33,157970,157971],{"class":60},"\"请输入数字:\"",[33,157973,226],{"class":47},[33,157975,157976,157978,157980,157982,157985],{"class":35,"line":51},[33,157977,122],{"class":72},[33,157979,133],{"class":47},[33,157981,136],{"class":72},[33,157983,157984],{"class":47},"(num))  ",[33,157986,157987],{"class":2487},"# str\n",[19,157989,157990],{},"如果要做数学运算，必须转换：",[23,157992,157994],{"className":25,"code":157993,"language":27,"meta":28,"style":28},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[30,157995,157996,158014],{"__ignoreMap":28},[33,157997,157998,158000,158002,158004,158006,158008,158010,158012],{"class":35,"line":36},[33,157999,157962],{"class":47},[33,158001,57],{"class":39},[33,158003,4641],{"class":72},[33,158005,133],{"class":47},[33,158007,56040],{"class":72},[33,158009,133],{"class":47},[33,158011,157971],{"class":60},[33,158013,551],{"class":47},[33,158015,158016,158018,158020,158022,158024],{"class":35,"line":51},[33,158017,122],{"class":72},[33,158019,47842],{"class":47},[33,158021,880],{"class":39},[33,158023,4297],{"class":72},[33,158025,226],{"class":47},[19,158027,158028],{},"常见错误：",[23,158030,158032],{"className":25,"code":158031,"language":27,"meta":28,"style":28},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[30,158033,158034,158047],{"__ignoreMap":28},[33,158035,158036,158038,158040,158042,158044],{"class":35,"line":36},[33,158037,2436],{"class":72},[33,158039,133],{"class":47},[33,158041,157887],{"class":60},[33,158043,157836],{"class":47},[33,158045,158046],{"class":2487},"# 错误\n",[33,158048,158049,158051,158053,158056,158059],{"class":35,"line":51},[33,158050,2436],{"class":72},[33,158052,133],{"class":47},[33,158054,158055],{"class":60},"\"abc\"",[33,158057,158058],{"class":47},")    ",[33,158060,158046],{"class":2487},[19,158062,568],{},[23,158064,158066],{"className":25,"code":158065,"language":27,"meta":28,"style":28},"num = float(\"3.14\")\n",[30,158067,158068],{"__ignoreMap":28},[33,158069,158070,158072,158074,158076,158078,158080],{"class":35,"line":36},[33,158071,157962],{"class":47},[33,158073,57],{"class":39},[33,158075,112000],{"class":72},[33,158077,133],{"class":47},[33,158079,157887],{"class":60},[33,158081,226],{"class":47},[14,158083,158085],{"id":158084},"_27-运算符","2.7 运算符",[631,158087,158089],{"id":158088},"_271-算术运算符","2.7.1 算术运算符",[2563,158091,158092,158103],{},[2566,158093,158094],{},[2569,158095,158096,158099,158101],{},[2572,158097,158098],{},"运算符",[2572,158100,28108],{},[2572,158102,29729],{},[2610,158104,158105,158119,158133,158147,158161,158175,158189],{},[2569,158106,158107,158111,158114],{},[2615,158108,158109],{},[30,158110,880],{},[2615,158112,158113],{},"加法",[2615,158115,158116],{},[30,158117,158118],{},"1 + 2",[2569,158120,158121,158125,158128],{},[2615,158122,158123],{},[30,158124,2949],{},[2615,158126,158127],{},"减法",[2615,158129,158130],{},[30,158131,158132],{},"5 - 3",[2569,158134,158135,158139,158142],{},[2615,158136,158137],{},[30,158138,657],{},[2615,158140,158141],{},"乘法",[2615,158143,158144],{},[30,158145,158146],{},"2 * 3",[2569,158148,158149,158153,158156],{},[2615,158150,158151],{},[30,158152,3001],{},[2615,158154,158155],{},"除法，结果是浮点数",[2615,158157,158158],{},[30,158159,158160],{},"5 \u002F 2",[2569,158162,158163,158167,158170],{},[2615,158164,158165],{},[30,158166,35554],{},[2615,158168,158169],{},"整除",[2615,158171,158172],{},[30,158173,158174],{},"5 \u002F\u002F 2",[2569,158176,158177,158181,158184],{},[2615,158178,158179],{},[30,158180,1429],{},[2615,158182,158183],{},"取余",[2615,158185,158186],{},[30,158187,158188],{},"5 % 2",[2569,158190,158191,158195,158198],{},[2615,158192,158193],{},[30,158194,787],{},[2615,158196,158197],{},"幂运算",[2615,158199,158200],{},[30,158201,158202],{},"2 ** 3",[19,158204,17373],{},[23,158206,158208],{"className":25,"code":158207,"language":27,"meta":28,"style":28},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[30,158209,158210,158228,158245,158262],{"__ignoreMap":28},[33,158211,158212,158214,158216,158218,158221,158223,158225],{"class":35,"line":36},[33,158213,122],{"class":72},[33,158215,133],{"class":47},[33,158217,758],{"class":72},[33,158219,158220],{"class":39}," \u002F",[33,158222,1354],{"class":72},[33,158224,157836],{"class":47},[33,158226,158227],{"class":2487},"# 2.5\n",[33,158229,158230,158232,158234,158236,158239,158241,158243],{"class":35,"line":51},[33,158231,122],{"class":72},[33,158233,133],{"class":47},[33,158235,758],{"class":72},[33,158237,158238],{"class":39}," \u002F\u002F",[33,158240,1354],{"class":72},[33,158242,48031],{"class":47},[33,158244,157839],{"class":2487},[33,158246,158247,158249,158251,158253,158256,158258,158260],{"class":35,"line":64},[33,158248,122],{"class":72},[33,158250,133],{"class":47},[33,158252,758],{"class":72},[33,158254,158255],{"class":39}," %",[33,158257,1354],{"class":72},[33,158259,157836],{"class":47},[33,158261,157856],{"class":2487},[33,158263,158264,158266,158268,158270,158273,158275,158277],{"class":35,"line":76},[33,158265,122],{"class":72},[33,158267,133],{"class":47},[33,158269,725],{"class":72},[33,158271,158272],{"class":39}," **",[33,158274,80281],{"class":72},[33,158276,48031],{"class":47},[33,158278,158279],{"class":2487},"# 8\n",[631,158281,158283],{"id":158282},"_272-赋值运算符","2.7.2 赋值运算符",[23,158285,158287],{"className":25,"code":158286,"language":27,"meta":28,"style":28},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[30,158288,158289,158297,158305,158313,158321],{"__ignoreMap":28},[33,158290,158291,158293,158295],{"class":35,"line":36},[33,158292,157962],{"class":47},[33,158294,57],{"class":39},[33,158296,60646],{"class":72},[33,158298,158299,158301,158303],{"class":35,"line":51},[33,158300,157962],{"class":47},[33,158302,692],{"class":39},[33,158304,56646],{"class":72},[33,158306,158307,158309,158311],{"class":35,"line":64},[33,158308,157962],{"class":47},[33,158310,152440],{"class":39},[33,158312,49945],{"class":72},[33,158314,158315,158317,158319],{"class":35,"line":76},[33,158316,157962],{"class":47},[33,158318,139346],{"class":39},[33,158320,122236],{"class":72},[33,158322,158323,158325,158328],{"class":35,"line":87},[33,158324,157962],{"class":47},[33,158326,158327],{"class":39},"\u002F=",[33,158329,49945],{"class":72},[19,158331,158332],{},"等价关系：",[23,158334,158336],{"className":25,"code":158335,"language":27,"meta":28,"style":28},"num += 1\nnum = num + 1\n",[30,158337,158338,158346],{"__ignoreMap":28},[33,158339,158340,158342,158344],{"class":35,"line":36},[33,158341,157962],{"class":47},[33,158343,692],{"class":39},[33,158345,57917],{"class":72},[33,158347,158348,158350,158352,158354,158356],{"class":35,"line":51},[33,158349,157962],{"class":47},[33,158351,57],{"class":39},[33,158353,678],{"class":47},[33,158355,880],{"class":39},[33,158357,57917],{"class":72},[19,158359,158360,158361,1958,158364,30622],{},"Python 没有 ",[30,158362,158363],{},"num++",[30,158365,158366],{},"num--",[631,158368,158370],{"id":158369},"_273-比较运算符","2.7.3 比较运算符",[19,158372,158373],{},"比较运算结果是布尔值。",[23,158375,158377],{"className":25,"code":158376,"language":27,"meta":28,"style":28},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[30,158378,158379,158393,158408,158422],{"__ignoreMap":28},[33,158380,158381,158383,158385,158387,158389,158391],{"class":35,"line":36},[33,158382,122],{"class":72},[33,158384,133],{"class":47},[33,158386,1279],{"class":72},[33,158388,28460],{"class":39},[33,158390,4407],{"class":72},[33,158392,226],{"class":47},[33,158394,158395,158397,158399,158401,158404,158406],{"class":35,"line":51},[33,158396,122],{"class":72},[33,158398,133],{"class":47},[33,158400,1279],{"class":72},[33,158402,158403],{"class":39}," >=",[33,158405,4297],{"class":72},[33,158407,226],{"class":47},[33,158409,158410,158412,158414,158416,158418,158420],{"class":35,"line":64},[33,158411,122],{"class":72},[33,158413,133],{"class":47},[33,158415,1279],{"class":72},[33,158417,1434],{"class":39},[33,158419,4342],{"class":72},[33,158421,226],{"class":47},[33,158423,158424,158426,158428,158430,158433,158435],{"class":35,"line":76},[33,158425,122],{"class":72},[33,158427,133],{"class":47},[33,158429,1279],{"class":72},[33,158431,158432],{"class":39}," !=",[33,158434,4342],{"class":72},[33,158436,226],{"class":47},[19,158438,158439,158440,158442,158443,30622],{},"注意：判断相等用 ",[30,158441,5206],{},"，赋值用 ",[30,158444,57],{},[23,158446,158448],{"className":25,"code":158447,"language":27,"meta":28,"style":28},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[30,158449,158450,158461],{"__ignoreMap":28},[33,158451,158452,158454,158456,158458],{"class":35,"line":36},[33,158453,148744],{"class":47},[33,158455,57],{"class":39},[33,158457,2229],{"class":72},[33,158459,158460],{"class":2487},"       # 赋值\n",[33,158462,158463,158465,158467,158469],{"class":35,"line":51},[33,158464,148744],{"class":47},[33,158466,5206],{"class":39},[33,158468,2229],{"class":72},[33,158470,158471],{"class":2487},"      # 判断是否相等\n",[631,158473,158475],{"id":158474},"_274-逻辑运算符","2.7.4 逻辑运算符",[2563,158477,158478,158486],{},[2566,158479,158480],{},[2569,158481,158482,158484],{},[2572,158483,158098],{},[2572,158485,28108],{},[2610,158487,158488,158497,158506],{},[2569,158489,158490,158494],{},[2615,158491,158492],{},[30,158493,32696],{},[2615,158495,158496],{},"并且",[2569,158498,158499,158503],{},[2615,158500,158501],{},[30,158502,117292],{},[2615,158504,158505],{},"或者",[2569,158507,158508,158513],{},[2615,158509,158510],{},[30,158511,158512],{},"not",[2615,158514,158515],{},"取反",[23,158517,158519],{"className":25,"code":158518,"language":27,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[30,158520,158521,158529,158538,158542,158557,158571],{"__ignoreMap":28},[33,158522,158523,158525,158527],{"class":35,"line":36},[33,158524,148744],{"class":47},[33,158526,57],{"class":39},[33,158528,90273],{"class":72},[33,158530,158531,158534,158536],{"class":35,"line":51},[33,158532,158533],{"class":47},"has_ticket ",[33,158535,57],{"class":39},[33,158537,155778],{"class":72},[33,158539,158540],{"class":35,"line":64},[33,158541,100],{"emptyLinePlaceholder":99},[33,158543,158544,158546,158548,158550,158552,158554],{"class":35,"line":76},[33,158545,122],{"class":72},[33,158547,157943],{"class":47},[33,158549,2175],{"class":39},[33,158551,2229],{"class":72},[33,158553,122629],{"class":39},[33,158555,158556],{"class":47}," has_ticket)\n",[33,158558,158559,158561,158563,158565,158567,158569],{"class":35,"line":87},[33,158560,122],{"class":72},[33,158562,157943],{"class":47},[33,158564,2226],{"class":39},[33,158566,2229],{"class":72},[33,158568,116403],{"class":39},[33,158570,158556],{"class":47},[33,158572,158573,158575,158577,158579],{"class":35,"line":96},[33,158574,122],{"class":72},[33,158576,133],{"class":47},[33,158578,158512],{"class":39},[33,158580,158556],{"class":47},[14,158582,158584],{"id":158583},"_28-字符串定义","2.8 字符串定义",[19,158586,158587],{},"三种常见写法：",[23,158589,158591],{"className":25,"code":158590,"language":27,"meta":28,"style":28},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[30,158592,158593,158603,158612,158622],{"__ignoreMap":28},[33,158594,158595,158598,158600],{"class":35,"line":36},[33,158596,158597],{"class":47},"name1 ",[33,158599,57],{"class":39},[33,158601,158602],{"class":60}," '小明'\n",[33,158604,158605,158608,158610],{"class":35,"line":51},[33,158606,158607],{"class":47},"name2 ",[33,158609,57],{"class":39},[33,158611,61],{"class":60},[33,158613,158614,158617,158619],{"class":35,"line":64},[33,158615,158616],{"class":47},"text ",[33,158618,57],{"class":39},[33,158620,158621],{"class":60}," \"\"\"这是多行字符串\n",[33,158623,158624],{"class":35,"line":76},[33,158625,158626],{"class":60},"可以换行\"\"\"\n",[19,158628,158629],{},"字符串中包含引号：",[23,158631,158633],{"className":25,"code":158632,"language":27,"meta":28,"style":28},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[30,158634,158635,158645,158655],{"__ignoreMap":28},[33,158636,158637,158640,158642],{"class":35,"line":36},[33,158638,158639],{"class":47},"msg ",[33,158641,57],{"class":39},[33,158643,158644],{"class":60}," \"他说:'你好'\"\n",[33,158646,158647,158650,158652],{"class":35,"line":51},[33,158648,158649],{"class":47},"msg2 ",[33,158651,57],{"class":39},[33,158653,158654],{"class":60}," '他说:\"你好\"'\n",[33,158656,158657,158660,158662,158665,158668,158671,158673],{"class":35,"line":64},[33,158658,158659],{"class":47},"msg3 ",[33,158661,57],{"class":39},[33,158663,158664],{"class":60}," \"他说:",[33,158666,158667],{"class":72},"\\\"",[33,158669,158670],{"class":60},"你好",[33,158672,158667],{"class":72},[33,158674,27372],{"class":60},[19,158676,158677],{},"常见转义字符：",[2563,158679,158680,158689],{},[2566,158681,158682],{},[2569,158683,158684,158687],{},[2572,158685,158686],{},"写法",[2572,158688,102907],{},[2610,158690,158691,158701,158710,158720,158729],{},[2569,158692,158693,158698],{},[2615,158694,158695],{},[30,158696,158697],{},"\\n",[2615,158699,158700],{},"换行",[2569,158702,158703,158707],{},[2615,158704,158705],{},[30,158706,3507],{},[2615,158708,158709],{},"制表符",[2569,158711,158712,158717],{},[2615,158713,158714],{},[30,158715,158716],{},"\\\\",[2615,158718,158719],{},"反斜杠",[2569,158721,158722,158726],{},[2615,158723,158724],{},[30,158725,158667],{},[2615,158727,158728],{},"双引号",[2569,158730,158731,158736],{},[2615,158732,158733],{},[30,158734,158735],{},"\\'",[2615,158737,158738],{},"单引号",[14,158740,158742],{"id":158741},"_29-字符串拼接","2.9 字符串拼接",[23,158744,158746],{"className":25,"code":158745,"language":27,"meta":28,"style":28},"name = \"小明\"\nprint(\"你好，\" + name)\n",[30,158747,158748,158756],{"__ignoreMap":28},[33,158749,158750,158752,158754],{"class":35,"line":36},[33,158751,148734],{"class":47},[33,158753,57],{"class":39},[33,158755,61],{"class":60},[33,158757,158758,158760,158762,158765,158767],{"class":35,"line":51},[33,158759,122],{"class":72},[33,158761,133],{"class":47},[33,158763,158764],{"class":60},"\"你好，\"",[33,158766,47789],{"class":39},[33,158768,158769],{"class":47}," name)\n",[19,158771,158772],{},"字符串只能和字符串拼接：",[23,158774,158776],{"className":25,"code":158775,"language":27,"meta":28,"style":28},"age = 18\nprint(\"年龄:\" + str(age))\n",[30,158777,158778,158786],{"__ignoreMap":28},[33,158779,158780,158782,158784],{"class":35,"line":36},[33,158781,148744],{"class":47},[33,158783,57],{"class":39},[33,158785,73],{"class":72},[33,158787,158788,158790,158792,158794,158796,158798],{"class":35,"line":51},[33,158789,122],{"class":72},[33,158791,133],{"class":47},[33,158793,148715],{"class":60},[33,158795,47789],{"class":39},[33,158797,76132],{"class":72},[33,158799,158800],{"class":47},"(age))\n",[19,158802,158803],{},"更推荐使用格式化字符串。",[14,158805,158807],{"id":158806},"_210-字符串格式化","2.10 字符串格式化",[631,158809,158811],{"id":158810},"_2101-百分号格式化","2.10.1 百分号格式化",[23,158813,158815],{"className":25,"code":158814,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[30,158816,158817,158825,158833,158842,158846],{"__ignoreMap":28},[33,158818,158819,158821,158823],{"class":35,"line":36},[33,158820,148734],{"class":47},[33,158822,57],{"class":39},[33,158824,61],{"class":60},[33,158826,158827,158829,158831],{"class":35,"line":51},[33,158828,148744],{"class":47},[33,158830,57],{"class":39},[33,158832,73],{"class":72},[33,158834,158835,158837,158839],{"class":35,"line":64},[33,158836,157533],{"class":47},[33,158838,57],{"class":39},[33,158840,158841],{"class":72}," 95.5\n",[33,158843,158844],{"class":35,"line":76},[33,158845,100],{"emptyLinePlaceholder":99},[33,158847,158848,158850,158852,158855,158858,158861,158864,158867,158870,158872,158874],{"class":35,"line":87},[33,158849,122],{"class":72},[33,158851,133],{"class":47},[33,158853,158854],{"class":60},"\"姓名:",[33,158856,158857],{"class":72},"%s",[33,158859,158860],{"class":60}," 年龄:",[33,158862,158863],{"class":72},"%d",[33,158865,158866],{"class":60}," 分数:",[33,158868,158869],{"class":72},"%.1f",[33,158871,397],{"class":60},[33,158873,158255],{"class":39},[33,158875,158876],{"class":47}," (name, age, score))\n",[19,158878,158879],{},"常用占位符：",[2563,158881,158882,158891],{},[2566,158883,158884],{},[2569,158885,158886,158889],{},[2572,158887,158888],{},"占位符",[2572,158890,28108],{},[2610,158892,158893,158901,158909],{},[2569,158894,158895,158899],{},[2615,158896,158897],{},[30,158898,158857],{},[2615,158900,157399],{},[2569,158902,158903,158907],{},[2615,158904,158905],{},[30,158906,158863],{},[2615,158908,157377],{},[2569,158910,158911,158916],{},[2615,158912,158913],{},[30,158914,158915],{},"%f",[2615,158917,157388],{},[19,158919,158920],{},"精度控制：",[23,158922,158924],{"className":25,"code":158923,"language":27,"meta":28,"style":28},"price = 12.3456\nprint(\"%.2f\" % price)\n",[30,158925,158926,158935],{"__ignoreMap":28},[33,158927,158928,158930,158932],{"class":35,"line":36},[33,158929,148878],{"class":47},[33,158931,57],{"class":39},[33,158933,158934],{"class":72}," 12.3456\n",[33,158936,158937,158939,158941,158943,158946,158948,158950],{"class":35,"line":51},[33,158938,122],{"class":72},[33,158940,133],{"class":47},[33,158942,397],{"class":60},[33,158944,158945],{"class":72},"%.2f",[33,158947,397],{"class":60},[33,158949,158255],{"class":39},[33,158951,158952],{"class":47}," price)\n",[631,158954,158956],{"id":158955},"_2102-format方法","2.10.2 format方法",[23,158958,158960],{"className":25,"code":158959,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[30,158961,158962,158970,158978,158982,159001,159021],{"__ignoreMap":28},[33,158963,158964,158966,158968],{"class":35,"line":36},[33,158965,148734],{"class":47},[33,158967,57],{"class":39},[33,158969,61],{"class":60},[33,158971,158972,158974,158976],{"class":35,"line":51},[33,158973,148744],{"class":47},[33,158975,57],{"class":39},[33,158977,73],{"class":72},[33,158979,158980],{"class":35,"line":64},[33,158981,100],{"emptyLinePlaceholder":99},[33,158983,158984,158986,158988,158990,158992,158994,158996,158998],{"class":35,"line":76},[33,158985,122],{"class":72},[33,158987,133],{"class":47},[33,158989,158854],{"class":60},[33,158991,34685],{"class":72},[33,158993,158860],{"class":60},[33,158995,34685],{"class":72},[33,158997,397],{"class":60},[33,158999,159000],{"class":47},".format(name, age))\n",[33,159002,159003,159005,159007,159009,159012,159014,159017,159019],{"class":35,"line":87},[33,159004,122],{"class":72},[33,159006,133],{"class":47},[33,159008,158854],{"class":60},[33,159010,159011],{"class":72},"{0}",[33,159013,158860],{"class":60},[33,159015,159016],{"class":72},"{1}",[33,159018,397],{"class":60},[33,159020,159000],{"class":47},[33,159022,159023,159025,159027,159029,159032,159034,159037,159039,159042,159044,159046,159049,159051,159053],{"class":35,"line":96},[33,159024,122],{"class":72},[33,159026,133],{"class":47},[33,159028,158854],{"class":60},[33,159030,159031],{"class":72},"{name}",[33,159033,158860],{"class":60},[33,159035,159036],{"class":72},"{age}",[33,159038,397],{"class":60},[33,159040,159041],{"class":47},".format(",[33,159043,207],{"class":289},[33,159045,57],{"class":39},[33,159047,159048],{"class":47},"name, ",[33,159050,218],{"class":289},[33,159052,57],{"class":39},[33,159054,159055],{"class":47},"age))\n",[631,159057,159059],{"id":159058},"_2103-f-string","2.10.3 f-string",[19,159061,159062],{},"推荐写法：",[23,159064,159066],{"className":25,"code":159065,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[30,159067,159068,159076,159084,159092,159096],{"__ignoreMap":28},[33,159069,159070,159072,159074],{"class":35,"line":36},[33,159071,148734],{"class":47},[33,159073,57],{"class":39},[33,159075,61],{"class":60},[33,159077,159078,159080,159082],{"class":35,"line":51},[33,159079,148744],{"class":47},[33,159081,57],{"class":39},[33,159083,73],{"class":72},[33,159085,159086,159088,159090],{"class":35,"line":64},[33,159087,157533],{"class":47},[33,159089,57],{"class":39},[33,159091,158841],{"class":72},[33,159093,159094],{"class":35,"line":76},[33,159095,100],{"emptyLinePlaceholder":99},[33,159097,159098,159100,159102,159104,159106,159108,159110,159112,159114,159116,159118,159120,159122,159124,159127,159130,159132,159134],{"class":35,"line":87},[33,159099,122],{"class":72},[33,159101,133],{"class":47},[33,159103,198],{"class":39},[33,159105,158854],{"class":60},[33,159107,204],{"class":72},[33,159109,207],{"class":47},[33,159111,210],{"class":72},[33,159113,158860],{"class":60},[33,159115,204],{"class":72},[33,159117,218],{"class":47},[33,159119,210],{"class":72},[33,159121,158866],{"class":60},[33,159123,204],{"class":72},[33,159125,159126],{"class":47},"score",[33,159128,159129],{"class":39},":.1f",[33,159131,210],{"class":72},[33,159133,397],{"class":60},[33,159135,226],{"class":47},[19,159137,159138],{},"表达式也可以放进去：",[23,159140,159142],{"className":25,"code":159141,"language":27,"meta":28,"style":28},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[30,159143,159144,159152,159160],{"__ignoreMap":28},[33,159145,159146,159148,159150],{"class":35,"line":36},[33,159147,148878],{"class":47},[33,159149,57],{"class":39},[33,159151,148883],{"class":72},[33,159153,159154,159156,159158],{"class":35,"line":51},[33,159155,148888],{"class":47},[33,159157,57],{"class":39},[33,159159,56646],{"class":72},[33,159161,159162,159164,159166,159168,159171,159173,159175,159177,159180,159182,159185],{"class":35,"line":64},[33,159163,122],{"class":72},[33,159165,133],{"class":47},[33,159167,198],{"class":39},[33,159169,159170],{"class":60},"\"总价:",[33,159172,204],{"class":72},[33,159174,148878],{"class":47},[33,159176,657],{"class":39},[33,159178,159179],{"class":47}," count",[33,159181,210],{"class":72},[33,159183,159184],{"class":60},"元\"",[33,159186,226],{"class":47},[14,159188,159190],{"id":159189},"_211-input输入","2.11 input输入",[19,159192,159193,159196],{},[30,159194,159195],{},"input()"," 会暂停程序，等待用户输入。",[23,159198,159200],{"className":25,"code":159199,"language":27,"meta":28,"style":28},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[30,159201,159202,159216],{"__ignoreMap":28},[33,159203,159204,159206,159208,159210,159212,159214],{"class":35,"line":36},[33,159205,148734],{"class":47},[33,159207,57],{"class":39},[33,159209,62823],{"class":72},[33,159211,133],{"class":47},[33,159213,154560],{"class":60},[33,159215,226],{"class":47},[33,159217,159218,159220,159222,159224,159227,159229,159231,159233,159235],{"class":35,"line":51},[33,159219,122],{"class":72},[33,159221,133],{"class":47},[33,159223,198],{"class":39},[33,159225,159226],{"class":60},"\"你好，",[33,159228,204],{"class":72},[33,159230,207],{"class":47},[33,159232,210],{"class":72},[33,159234,397],{"class":60},[33,159236,226],{"class":47},[19,159238,159239],{},"输入整数：",[23,159241,159243],{"className":25,"code":159242,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[30,159244,159245,159263],{"__ignoreMap":28},[33,159246,159247,159249,159251,159253,159255,159257,159259,159261],{"class":35,"line":36},[33,159248,148744],{"class":47},[33,159250,57],{"class":39},[33,159252,4641],{"class":72},[33,159254,133],{"class":47},[33,159256,56040],{"class":72},[33,159258,133],{"class":47},[33,159260,154574],{"class":60},[33,159262,551],{"class":47},[33,159264,159265,159267,159269,159271,159274,159276,159278,159280,159283,159285],{"class":35,"line":51},[33,159266,122],{"class":72},[33,159268,133],{"class":47},[33,159270,198],{"class":39},[33,159272,159273],{"class":60},"\"明年你",[33,159275,204],{"class":72},[33,159277,148744],{"class":47},[33,159279,880],{"class":39},[33,159281,159282],{"class":72}," 1}",[33,159284,223],{"class":60},[33,159286,226],{"class":47},[19,159288,159289],{},"输入小数：",[23,159291,159293],{"className":25,"code":159292,"language":27,"meta":28,"style":28},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[30,159294,159295,159314],{"__ignoreMap":28},[33,159296,159297,159299,159301,159303,159305,159307,159309,159312],{"class":35,"line":36},[33,159298,157506],{"class":47},[33,159300,57],{"class":39},[33,159302,112000],{"class":72},[33,159304,133],{"class":47},[33,159306,56040],{"class":72},[33,159308,133],{"class":47},[33,159310,159311],{"class":60},"\"请输入身高:\"",[33,159313,551],{"class":47},[33,159315,159316,159318,159320,159322,159325,159327,159329,159332,159334,159337],{"class":35,"line":51},[33,159317,122],{"class":72},[33,159319,133],{"class":47},[33,159321,198],{"class":39},[33,159323,159324],{"class":60},"\"身高:",[33,159326,204],{"class":72},[33,159328,27220],{"class":47},[33,159330,159331],{"class":39},":.2f",[33,159333,210],{"class":72},[33,159335,159336],{"class":60},"米\"",[33,159338,226],{"class":47},[14,159340,159342],{"id":159341},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,159344,1968],{},[328,159346,159347,159350,159353,159356],{},[331,159348,159349],{},"输入商品单价。",[331,159351,159352],{},"输入购买数量。",[331,159354,159355],{},"输入折扣，例如 0.8 表示八折。",[331,159357,159358],{},"输出最终金额，保留两位小数。",[19,159360,1982],{},[23,159362,159364],{"className":25,"code":159363,"language":27,"meta":28,"style":28},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[30,159365,159366,159385,159404,159424,159428,159448,159452,159475,159496,159518],{"__ignoreMap":28},[33,159367,159368,159370,159372,159374,159376,159378,159380,159383],{"class":35,"line":36},[33,159369,148878],{"class":47},[33,159371,57],{"class":39},[33,159373,112000],{"class":72},[33,159375,133],{"class":47},[33,159377,56040],{"class":72},[33,159379,133],{"class":47},[33,159381,159382],{"class":60},"\"请输入商品单价:\"",[33,159384,551],{"class":47},[33,159386,159387,159389,159391,159393,159395,159397,159399,159402],{"class":35,"line":51},[33,159388,148888],{"class":47},[33,159390,57],{"class":39},[33,159392,4641],{"class":72},[33,159394,133],{"class":47},[33,159396,56040],{"class":72},[33,159398,133],{"class":47},[33,159400,159401],{"class":60},"\"请输入购买数量:\"",[33,159403,551],{"class":47},[33,159405,159406,159409,159411,159413,159415,159417,159419,159422],{"class":35,"line":64},[33,159407,159408],{"class":47},"discount ",[33,159410,57],{"class":39},[33,159412,112000],{"class":72},[33,159414,133],{"class":47},[33,159416,56040],{"class":72},[33,159418,133],{"class":47},[33,159420,159421],{"class":60},"\"请输入折扣:\"",[33,159423,551],{"class":47},[33,159425,159426],{"class":35,"line":76},[33,159427,100],{"emptyLinePlaceholder":99},[33,159429,159430,159433,159435,159438,159440,159443,159445],{"class":35,"line":87},[33,159431,159432],{"class":47},"total ",[33,159434,57],{"class":39},[33,159436,159437],{"class":47}," price ",[33,159439,657],{"class":39},[33,159441,159442],{"class":47}," count ",[33,159444,657],{"class":39},[33,159446,159447],{"class":47}," discount\n",[33,159449,159450],{"class":35,"line":96},[33,159451,100],{"emptyLinePlaceholder":99},[33,159453,159454,159456,159458,159460,159463,159465,159467,159469,159471,159473],{"class":35,"line":103},[33,159455,122],{"class":72},[33,159457,133],{"class":47},[33,159459,198],{"class":39},[33,159461,159462],{"class":60},"\"商品单价:",[33,159464,204],{"class":72},[33,159466,82025],{"class":47},[33,159468,159331],{"class":39},[33,159470,210],{"class":72},[33,159472,397],{"class":60},[33,159474,226],{"class":47},[33,159476,159477,159479,159481,159483,159486,159488,159490,159492,159494],{"class":35,"line":108},[33,159478,122],{"class":72},[33,159480,133],{"class":47},[33,159482,198],{"class":39},[33,159484,159485],{"class":60},"\"购买数量:",[33,159487,204],{"class":72},[33,159489,86643],{"class":47},[33,159491,210],{"class":72},[33,159493,397],{"class":60},[33,159495,226],{"class":47},[33,159497,159498,159500,159502,159504,159507,159509,159512,159514,159516],{"class":35,"line":119},[33,159499,122],{"class":72},[33,159501,133],{"class":47},[33,159503,198],{"class":39},[33,159505,159506],{"class":60},"\"折扣:",[33,159508,204],{"class":72},[33,159510,159511],{"class":47},"discount",[33,159513,210],{"class":72},[33,159515,397],{"class":60},[33,159517,226],{"class":47},[33,159519,159520,159522,159524,159526,159529,159531,159534,159536,159538,159540],{"class":35,"line":128},[33,159521,122],{"class":72},[33,159523,133],{"class":47},[33,159525,198],{"class":39},[33,159527,159528],{"class":60},"\"应付金额:",[33,159530,204],{"class":72},[33,159532,159533],{"class":47},"total",[33,159535,159331],{"class":39},[33,159537,210],{"class":72},[33,159539,159184],{"class":60},[33,159541,226],{"class":47},[14,159543,159545],{"id":159544},"_213-易错点","2.13 易错点",[328,159547,159548,159553,159559,159567,159570],{},[331,159549,159550,159552],{},[30,159551,159195],{}," 的结果是字符串，做运算前要转换。",[331,159554,159555,159556,30622],{},"字符串拼接时，数字要先 ",[30,159557,159558],{},"str()",[331,159560,159561,159563,159564,159566],{},[30,159562,57],{}," 是赋值，",[30,159565,5206],{}," 是比较。",[331,159568,159569],{},"Python 没有自增自减运算符。",[331,159571,159572],{},"浮点数计算可能有精度误差：",[23,159574,159576],{"className":25,"code":159575,"language":27,"meta":28,"style":28},"print(0.1 + 0.2)\n",[30,159577,159578],{"__ignoreMap":28},[33,159579,159580,159582,159584,159586,159588,159591],{"class":35,"line":36},[33,159581,122],{"class":72},[33,159583,133],{"class":47},[33,159585,88419],{"class":72},[33,159587,47789],{"class":39},[33,159589,159590],{"class":72}," 0.2",[33,159592,226],{"class":47},[19,159594,159595,159596,159599],{},"金额计算如果要求严格，可以后续学习 ",[30,159597,159598],{},"decimal"," 模块。",[14,159601,159603],{"id":159602},"_214-本章练习","2.14 本章练习",[328,159605,159606,159609,159612,159615,159618],{},[331,159607,159608],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[331,159610,159611],{},"输入圆的半径，计算面积，保留两位小数。",[331,159613,159614],{},"输入工资和奖金，计算总收入。",[331,159616,159617],{},"输入摄氏温度，转换为华氏温度。",[331,159619,159620],{},"写一个 BMI 计算程序：",[23,159622,159625],{"className":159623,"code":159624,"language":7436,"meta":28},[7434],"BMI = 体重kg \u002F 身高m ** 2\n",[30,159626,159624],{"__ignoreMap":28},[2331,159628,159629],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":159631},[159632,159633,159634,159635,159636,159637,159638,159644,159645,159646,159651,159652,159653,159654],{"id":157196,"depth":51,"text":157197},{"id":157305,"depth":51,"text":157306},{"id":157476,"depth":51,"text":157477},{"id":157553,"depth":51,"text":157554},{"id":52953,"depth":51,"text":52954},{"id":157859,"depth":51,"text":157860},{"id":158084,"depth":51,"text":158085,"children":159639},[159640,159641,159642,159643],{"id":158088,"depth":64,"text":158089},{"id":158282,"depth":64,"text":158283},{"id":158369,"depth":64,"text":158370},{"id":158474,"depth":64,"text":158475},{"id":158583,"depth":51,"text":158584},{"id":158741,"depth":51,"text":158742},{"id":158806,"depth":51,"text":158807,"children":159647},[159648,159649,159650],{"id":158810,"depth":64,"text":158811},{"id":158955,"depth":64,"text":158956},{"id":159058,"depth":64,"text":159059},{"id":159189,"depth":51,"text":159190},{"id":159341,"depth":51,"text":159342},{"id":159544,"depth":51,"text":159545},{"id":159602,"depth":51,"text":159603},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":157188,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159661,"title":159662,"body":159663,"description":2359,"extension":2360,"meta":161295,"navigation":99,"path":161296,"seo":161297,"stem":161298,"__hash__":161299},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159664,"toc":161276},[159665,159668,159672,159675,159690,159693,159721,159725,159775,159777,159793,159795,159821,159824,159828,159895,159898,159914,159918,159921,160037,160040,160047,160096,160102,160106,160109,160222,160225,160229,160233,160236,160286,160290,160293,160343,160347,160350,160388,160392,160395,160441,160443,160478,160482,160487,160490,160536,160538,160605,160609,160615,160726,160735,160739,160741,160752,160754,160920,160924,160926,160940,160942,161156,161160,161179,161196,161199,161245,161249,161273],[10,159666,159662],{"id":159667},"_3-判断语句",[14,159669,159671],{"id":159670},"_31-布尔值","3.1 布尔值",[19,159673,159674],{},"判断语句依赖布尔值：",[23,159676,159678],{"className":25,"code":159677,"language":27,"meta":28,"style":28},"True\nFalse\n",[30,159679,159680,159685],{"__ignoreMap":28},[33,159681,159682],{"class":35,"line":36},[33,159683,159684],{"class":72},"True\n",[33,159686,159687],{"class":35,"line":51},[33,159688,159689],{"class":72},"False\n",[19,159691,159692],{},"比较表达式会产生布尔值：",[23,159694,159696],{"className":25,"code":159695,"language":27,"meta":28,"style":28},"age = 18\nprint(age >= 18)  # True\n",[30,159697,159698,159706],{"__ignoreMap":28},[33,159699,159700,159702,159704],{"class":35,"line":36},[33,159701,148744],{"class":47},[33,159703,57],{"class":39},[33,159705,73],{"class":72},[33,159707,159708,159710,159712,159714,159716,159718],{"class":35,"line":51},[33,159709,122],{"class":72},[33,159711,157943],{"class":47},[33,159713,2175],{"class":39},[33,159715,2229],{"class":72},[33,159717,48031],{"class":47},[33,159719,159720],{"class":2487},"# True\n",[14,159722,159724],{"id":159723},"_32-if基础语法","3.2 if基础语法",[23,159726,159728],{"className":25,"code":159727,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[30,159729,159730,159748,159752,159764],{"__ignoreMap":28},[33,159731,159732,159734,159736,159738,159740,159742,159744,159746],{"class":35,"line":36},[33,159733,148744],{"class":47},[33,159735,57],{"class":39},[33,159737,4641],{"class":72},[33,159739,133],{"class":47},[33,159741,56040],{"class":72},[33,159743,133],{"class":47},[33,159745,154574],{"class":60},[33,159747,551],{"class":47},[33,159749,159750],{"class":35,"line":51},[33,159751,100],{"emptyLinePlaceholder":99},[33,159753,159754,159756,159758,159760,159762],{"class":35,"line":64},[33,159755,3805],{"class":39},[33,159757,17945],{"class":47},[33,159759,2175],{"class":39},[33,159761,2229],{"class":72},[33,159763,605],{"class":47},[33,159765,159766,159768,159770,159773],{"class":35,"line":76},[33,159767,193],{"class":72},[33,159769,133],{"class":47},[33,159771,159772],{"class":60},"\"可以进入网吧\"",[33,159774,226],{"class":47},[19,159776,11271],{},[328,159778,159779,159784,159787,159790],{},[331,159780,159781,159783],{},[30,159782,3805],{}," 后面是条件表达式。",[331,159785,159786],{},"条件后面必须写冒号。",[331,159788,159789],{},"条件成立时执行缩进代码块。",[331,159791,159792],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159794,498],{},[23,159796,159798],{"className":25,"code":159797,"language":27,"meta":28,"style":28},"if age >= 18\n    print(\"可以进入\")\n",[30,159799,159800,159810],{"__ignoreMap":28},[33,159801,159802,159804,159806,159808],{"class":35,"line":36},[33,159803,3805],{"class":39},[33,159805,17945],{"class":47},[33,159807,2175],{"class":39},[33,159809,73],{"class":72},[33,159811,159812,159814,159816,159819],{"class":35,"line":51},[33,159813,193],{"class":72},[33,159815,133],{"class":47},[33,159817,159818],{"class":60},"\"可以进入\"",[33,159820,226],{"class":47},[19,159822,159823],{},"缺少冒号。",[14,159825,159827],{"id":159826},"_33-if-else","3.3 if else",[23,159829,159831],{"className":25,"code":159830,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[30,159832,159833,159851,159855,159867,159878,159884],{"__ignoreMap":28},[33,159834,159835,159837,159839,159841,159843,159845,159847,159849],{"class":35,"line":36},[33,159836,148744],{"class":47},[33,159838,57],{"class":39},[33,159840,4641],{"class":72},[33,159842,133],{"class":47},[33,159844,56040],{"class":72},[33,159846,133],{"class":47},[33,159848,154574],{"class":60},[33,159850,551],{"class":47},[33,159852,159853],{"class":35,"line":51},[33,159854,100],{"emptyLinePlaceholder":99},[33,159856,159857,159859,159861,159863,159865],{"class":35,"line":64},[33,159858,3805],{"class":39},[33,159860,17945],{"class":47},[33,159862,2175],{"class":39},[33,159864,2229],{"class":72},[33,159866,605],{"class":47},[33,159868,159869,159871,159873,159876],{"class":35,"line":76},[33,159870,193],{"class":72},[33,159872,133],{"class":47},[33,159874,159875],{"class":60},"\"成年人\"",[33,159877,226],{"class":47},[33,159879,159880,159882],{"class":35,"line":87},[33,159881,3963],{"class":39},[33,159883,605],{"class":47},[33,159885,159886,159888,159890,159893],{"class":35,"line":96},[33,159887,193],{"class":72},[33,159889,133],{"class":47},[33,159891,159892],{"class":60},"\"未成年人\"",[33,159894,226],{"class":47},[19,159896,159897],{},"执行逻辑：",[328,159899,159900,159906,159911],{},[331,159901,159902,159903,159905],{},"条件成立，执行 ",[30,159904,3805],{}," 代码块。",[331,159907,159908,159909,159905],{},"条件不成立，执行 ",[30,159910,3963],{},[331,159912,159913],{},"两个代码块只会执行其中一个。",[14,159915,159917],{"id":159916},"_34-if-elif-else","3.4 if elif else",[19,159919,159920],{},"多条件判断：",[23,159922,159924],{"className":25,"code":159923,"language":27,"meta":28,"style":28},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[30,159925,159926,159944,159948,159961,159972,159986,159997,160009,160020,160026],{"__ignoreMap":28},[33,159927,159928,159930,159932,159934,159936,159938,159940,159942],{"class":35,"line":36},[33,159929,157533],{"class":47},[33,159931,57],{"class":39},[33,159933,4641],{"class":72},[33,159935,133],{"class":47},[33,159937,56040],{"class":72},[33,159939,133],{"class":47},[33,159941,154588],{"class":60},[33,159943,551],{"class":47},[33,159945,159946],{"class":35,"line":51},[33,159947,100],{"emptyLinePlaceholder":99},[33,159949,159950,159952,159955,159957,159959],{"class":35,"line":64},[33,159951,3805],{"class":39},[33,159953,159954],{"class":47}," score ",[33,159956,2175],{"class":39},[33,159958,2203],{"class":72},[33,159960,605],{"class":47},[33,159962,159963,159965,159967,159970],{"class":35,"line":76},[33,159964,193],{"class":72},[33,159966,133],{"class":47},[33,159968,159969],{"class":60},"\"优秀\"",[33,159971,226],{"class":47},[33,159973,159974,159977,159979,159981,159984],{"class":35,"line":87},[33,159975,159976],{"class":39},"elif",[33,159978,159954],{"class":47},[33,159980,2175],{"class":39},[33,159982,159983],{"class":72}," 80",[33,159985,605],{"class":47},[33,159987,159988,159990,159992,159995],{"class":35,"line":96},[33,159989,193],{"class":72},[33,159991,133],{"class":47},[33,159993,159994],{"class":60},"\"良好\"",[33,159996,226],{"class":47},[33,159998,159999,160001,160003,160005,160007],{"class":35,"line":103},[33,160000,159976],{"class":39},[33,160002,159954],{"class":47},[33,160004,2175],{"class":39},[33,160006,2178],{"class":72},[33,160008,605],{"class":47},[33,160010,160011,160013,160015,160018],{"class":35,"line":108},[33,160012,193],{"class":72},[33,160014,133],{"class":47},[33,160016,160017],{"class":60},"\"及格\"",[33,160019,226],{"class":47},[33,160021,160022,160024],{"class":35,"line":119},[33,160023,3963],{"class":39},[33,160025,605],{"class":47},[33,160027,160028,160030,160032,160035],{"class":35,"line":128},[33,160029,193],{"class":72},[33,160031,133],{"class":47},[33,160033,160034],{"class":60},"\"不及格\"",[33,160036,226],{"class":47},[19,160038,160039],{},"注意判断顺序很重要。",[19,160041,160042,160043,160046],{},"如果把 ",[30,160044,160045],{},"score >= 60"," 放在最前面：",[23,160048,160050],{"className":25,"code":160049,"language":27,"meta":28,"style":28},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[30,160051,160052,160064,160074,160086],{"__ignoreMap":28},[33,160053,160054,160056,160058,160060,160062],{"class":35,"line":36},[33,160055,3805],{"class":39},[33,160057,159954],{"class":47},[33,160059,2175],{"class":39},[33,160061,2178],{"class":72},[33,160063,605],{"class":47},[33,160065,160066,160068,160070,160072],{"class":35,"line":51},[33,160067,193],{"class":72},[33,160069,133],{"class":47},[33,160071,160017],{"class":60},[33,160073,226],{"class":47},[33,160075,160076,160078,160080,160082,160084],{"class":35,"line":64},[33,160077,159976],{"class":39},[33,160079,159954],{"class":47},[33,160081,2175],{"class":39},[33,160083,2203],{"class":72},[33,160085,605],{"class":47},[33,160087,160088,160090,160092,160094],{"class":35,"line":76},[33,160089,193],{"class":72},[33,160091,133],{"class":47},[33,160093,159969],{"class":60},[33,160095,226],{"class":47},[19,160097,160098,160099,160101],{},"成绩 95 会先满足 ",[30,160100,160045],{},"，后面的优秀分支就不会执行。",[14,160103,160105],{"id":160104},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,160107,160108],{},"嵌套判断就是在一个判断内部再写判断。",[23,160110,160112],{"className":25,"code":160111,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[30,160113,160114,160132,160147,160151,160163,160177,160187,160194,160205,160211],{"__ignoreMap":28},[33,160115,160116,160118,160120,160122,160124,160126,160128,160130],{"class":35,"line":36},[33,160117,148744],{"class":47},[33,160119,57],{"class":39},[33,160121,4641],{"class":72},[33,160123,133],{"class":47},[33,160125,56040],{"class":72},[33,160127,133],{"class":47},[33,160129,154574],{"class":60},[33,160131,551],{"class":47},[33,160133,160134,160136,160138,160140,160142,160145],{"class":35,"line":51},[33,160135,158533],{"class":47},[33,160137,57],{"class":39},[33,160139,62823],{"class":72},[33,160141,133],{"class":47},[33,160143,160144],{"class":60},"\"是否有票(y\u002Fn):\"",[33,160146,226],{"class":47},[33,160148,160149],{"class":35,"line":64},[33,160150,100],{"emptyLinePlaceholder":99},[33,160152,160153,160155,160157,160159,160161],{"class":35,"line":76},[33,160154,3805],{"class":39},[33,160156,17945],{"class":47},[33,160158,2175],{"class":39},[33,160160,2229],{"class":72},[33,160162,605],{"class":47},[33,160164,160165,160167,160170,160172,160175],{"class":35,"line":87},[33,160166,593],{"class":39},[33,160168,160169],{"class":47}," has_ticket ",[33,160171,5206],{"class":39},[33,160173,160174],{"class":60}," \"y\"",[33,160176,605],{"class":47},[33,160178,160179,160181,160183,160185],{"class":35,"line":96},[33,160180,807],{"class":72},[33,160182,133],{"class":47},[33,160184,159818],{"class":60},[33,160186,226],{"class":47},[33,160188,160189,160192],{"class":35,"line":103},[33,160190,160191],{"class":39},"    else",[33,160193,605],{"class":47},[33,160195,160196,160198,160200,160203],{"class":35,"line":108},[33,160197,807],{"class":72},[33,160199,133],{"class":47},[33,160201,160202],{"class":60},"\"请先买票\"",[33,160204,226],{"class":47},[33,160206,160207,160209],{"class":35,"line":119},[33,160208,3963],{"class":39},[33,160210,605],{"class":47},[33,160212,160213,160215,160217,160220],{"class":35,"line":128},[33,160214,193],{"class":72},[33,160216,133],{"class":47},[33,160218,160219],{"class":60},"\"未成年人禁止进入\"",[33,160221,226],{"class":47},[19,160223,160224],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,160226,160228],{"id":160227},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[631,160230,160232],{"id":160231},"_361-and","3.6.1 and",[19,160234,160235],{},"两个条件都成立才成立。",[23,160237,160239],{"className":25,"code":160238,"language":27,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[30,160240,160241,160249,160257,160261,160276],{"__ignoreMap":28},[33,160242,160243,160245,160247],{"class":35,"line":36},[33,160244,148744],{"class":47},[33,160246,57],{"class":39},[33,160248,90273],{"class":72},[33,160250,160251,160253,160255],{"class":35,"line":51},[33,160252,158533],{"class":47},[33,160254,57],{"class":39},[33,160256,155778],{"class":72},[33,160258,160259],{"class":35,"line":64},[33,160260,100],{"emptyLinePlaceholder":99},[33,160262,160263,160265,160267,160269,160271,160273],{"class":35,"line":76},[33,160264,3805],{"class":39},[33,160266,17945],{"class":47},[33,160268,2175],{"class":39},[33,160270,2229],{"class":72},[33,160272,122629],{"class":39},[33,160274,160275],{"class":47}," has_ticket:\n",[33,160277,160278,160280,160282,160284],{"class":35,"line":87},[33,160279,193],{"class":72},[33,160281,133],{"class":47},[33,160283,159818],{"class":60},[33,160285,226],{"class":47},[631,160287,160289],{"id":160288},"_362-or","3.6.2 or",[19,160291,160292],{},"只要一个条件成立就成立。",[23,160294,160296],{"className":25,"code":160295,"language":27,"meta":28,"style":28},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[30,160297,160298,160307,160316,160320,160332],{"__ignoreMap":28},[33,160299,160300,160303,160305],{"class":35,"line":36},[33,160301,160302],{"class":47},"is_vip ",[33,160304,57],{"class":39},[33,160306,128005],{"class":72},[33,160308,160309,160312,160314],{"class":35,"line":51},[33,160310,160311],{"class":47},"coupon ",[33,160313,57],{"class":39},[33,160315,155778],{"class":72},[33,160317,160318],{"class":35,"line":64},[33,160319,100],{"emptyLinePlaceholder":99},[33,160321,160322,160324,160327,160329],{"class":35,"line":76},[33,160323,3805],{"class":39},[33,160325,160326],{"class":47}," is_vip ",[33,160328,117292],{"class":39},[33,160330,160331],{"class":47}," coupon:\n",[33,160333,160334,160336,160338,160341],{"class":35,"line":87},[33,160335,193],{"class":72},[33,160337,133],{"class":47},[33,160339,160340],{"class":60},"\"可以享受优惠\"",[33,160342,226],{"class":47},[631,160344,160346],{"id":160345},"_363-not","3.6.3 not",[19,160348,160349],{},"取反。",[23,160351,160353],{"className":25,"code":160352,"language":27,"meta":28,"style":28},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[30,160354,160355,160364,160368,160377],{"__ignoreMap":28},[33,160356,160357,160360,160362],{"class":35,"line":36},[33,160358,160359],{"class":47},"is_closed ",[33,160361,57],{"class":39},[33,160363,128005],{"class":72},[33,160365,160366],{"class":35,"line":51},[33,160367,100],{"emptyLinePlaceholder":99},[33,160369,160370,160372,160374],{"class":35,"line":64},[33,160371,3805],{"class":39},[33,160373,41154],{"class":39},[33,160375,160376],{"class":47}," is_closed:\n",[33,160378,160379,160381,160383,160386],{"class":35,"line":76},[33,160380,193],{"class":72},[33,160382,133],{"class":47},[33,160384,160385],{"class":60},"\"店铺营业中\"",[33,160387,226],{"class":47},[14,160389,160391],{"id":160390},"_37-链式比较","3.7 链式比较",[19,160393,160394],{},"Python 支持链式比较：",[23,160396,160398],{"className":25,"code":160397,"language":27,"meta":28,"style":28},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[30,160399,160400,160409,160413,160430],{"__ignoreMap":28},[33,160401,160402,160404,160406],{"class":35,"line":36},[33,160403,157533],{"class":47},[33,160405,57],{"class":39},[33,160407,160408],{"class":72}," 85\n",[33,160410,160411],{"class":35,"line":51},[33,160412,100],{"emptyLinePlaceholder":99},[33,160414,160415,160417,160419,160422,160424,160426,160428],{"class":35,"line":64},[33,160416,3805],{"class":39},[33,160418,1437],{"class":72},[33,160420,160421],{"class":39}," \u003C=",[33,160423,159954],{"class":47},[33,160425,3861],{"class":39},[33,160427,8001],{"class":72},[33,160429,605],{"class":47},[33,160431,160432,160434,160436,160439],{"class":35,"line":76},[33,160433,193],{"class":72},[33,160435,133],{"class":47},[33,160437,160438],{"class":60},"\"成绩合法\"",[33,160440,226],{"class":47},[19,160442,1791],{},[23,160444,160446],{"className":25,"code":160445,"language":27,"meta":28,"style":28},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[30,160447,160448,160468],{"__ignoreMap":28},[33,160449,160450,160452,160454,160456,160458,160460,160462,160464,160466],{"class":35,"line":36},[33,160451,3805],{"class":39},[33,160453,159954],{"class":47},[33,160455,2175],{"class":39},[33,160457,1437],{"class":72},[33,160459,122629],{"class":39},[33,160461,159954],{"class":47},[33,160463,3861],{"class":39},[33,160465,8001],{"class":72},[33,160467,605],{"class":47},[33,160469,160470,160472,160474,160476],{"class":35,"line":51},[33,160471,193],{"class":72},[33,160473,133],{"class":47},[33,160475,160438],{"class":60},[33,160477,226],{"class":47},[14,160479,160481],{"id":160480},"_38-真值和假值","3.8 真值和假值",[19,160483,118668,160484,160486],{},[30,160485,3805],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160488,160489],{},"假值：",[23,160491,160493],{"className":25,"code":160492,"language":27,"meta":28,"style":28},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[30,160494,160495,160499,160504,160508,160512,160517,160521,160525,160530],{"__ignoreMap":28},[33,160496,160497],{"class":35,"line":36},[33,160498,159689],{"class":72},[33,160500,160501],{"class":35,"line":51},[33,160502,160503],{"class":72},"None\n",[33,160505,160506],{"class":35,"line":64},[33,160507,5342],{"class":72},[33,160509,160510],{"class":35,"line":76},[33,160511,34569],{"class":72},[33,160513,160514],{"class":35,"line":87},[33,160515,160516],{"class":60},"\"\"\n",[33,160518,160519],{"class":35,"line":96},[33,160520,34584],{"class":47},[33,160522,160523],{"class":35,"line":103},[33,160524,4235],{"class":47},[33,160526,160527],{"class":35,"line":108},[33,160528,160529],{"class":47},"{}\n",[33,160531,160532,160534],{"class":35,"line":119},[33,160533,157465],{"class":72},[33,160535,4235],{"class":47},[19,160537,17373],{},[23,160539,160541],{"className":25,"code":160540,"language":27,"meta":28,"style":28},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[30,160542,160543,160557,160561,160568,160588,160594],{"__ignoreMap":28},[33,160544,160545,160547,160549,160551,160553,160555],{"class":35,"line":36},[33,160546,148734],{"class":47},[33,160548,57],{"class":39},[33,160550,62823],{"class":72},[33,160552,133],{"class":47},[33,160554,154560],{"class":60},[33,160556,226],{"class":47},[33,160558,160559],{"class":35,"line":51},[33,160560,100],{"emptyLinePlaceholder":99},[33,160562,160563,160565],{"class":35,"line":64},[33,160564,3805],{"class":39},[33,160566,160567],{"class":47}," name:\n",[33,160569,160570,160572,160574,160576,160578,160580,160582,160584,160586],{"class":35,"line":76},[33,160571,193],{"class":72},[33,160573,133],{"class":47},[33,160575,198],{"class":39},[33,160577,159226],{"class":60},[33,160579,204],{"class":72},[33,160581,207],{"class":47},[33,160583,210],{"class":72},[33,160585,397],{"class":60},[33,160587,226],{"class":47},[33,160589,160590,160592],{"class":35,"line":87},[33,160591,3963],{"class":39},[33,160593,605],{"class":47},[33,160595,160596,160598,160600,160603],{"class":35,"line":96},[33,160597,193],{"class":72},[33,160599,133],{"class":47},[33,160601,160602],{"class":60},"\"姓名不能为空\"",[33,160604,226],{"class":47},[14,160606,160608],{"id":160607},"_39-match语句","3.9 match语句",[19,160610,160611,160612,160614],{},"Python 3.10 开始支持 ",[30,160613,73478],{},"。它适合处理固定选项。",[23,160616,160618],{"className":25,"code":160617,"language":27,"meta":28,"style":28},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[30,160619,160620,160636,160640,160647,160657,160668,160677,160688,160697,160708,160715],{"__ignoreMap":28},[33,160621,160622,160625,160627,160629,160631,160634],{"class":35,"line":36},[33,160623,160624],{"class":47},"command ",[33,160626,57],{"class":39},[33,160628,62823],{"class":72},[33,160630,133],{"class":47},[33,160632,160633],{"class":60},"\"请输入命令:\"",[33,160635,226],{"class":47},[33,160637,160638],{"class":35,"line":51},[33,160639,100],{"emptyLinePlaceholder":99},[33,160641,160642,160644],{"class":35,"line":64},[33,160643,73478],{"class":39},[33,160645,160646],{"class":47}," command:\n",[33,160648,160649,160652,160655],{"class":35,"line":76},[33,160650,160651],{"class":39},"    case",[33,160653,160654],{"class":60}," \"start\"",[33,160656,605],{"class":47},[33,160658,160659,160661,160663,160666],{"class":35,"line":87},[33,160660,807],{"class":72},[33,160662,133],{"class":47},[33,160664,160665],{"class":60},"\"启动\"",[33,160667,226],{"class":47},[33,160669,160670,160672,160675],{"class":35,"line":96},[33,160671,160651],{"class":39},[33,160673,160674],{"class":60}," \"stop\"",[33,160676,605],{"class":47},[33,160678,160679,160681,160683,160686],{"class":35,"line":103},[33,160680,807],{"class":72},[33,160682,133],{"class":47},[33,160684,160685],{"class":60},"\"停止\"",[33,160687,226],{"class":47},[33,160689,160690,160692,160695],{"class":35,"line":108},[33,160691,160651],{"class":39},[33,160693,160694],{"class":60}," \"restart\"",[33,160696,605],{"class":47},[33,160698,160699,160701,160703,160706],{"class":35,"line":119},[33,160700,807],{"class":72},[33,160702,133],{"class":47},[33,160704,160705],{"class":60},"\"重启\"",[33,160707,226],{"class":47},[33,160709,160710,160712],{"class":35,"line":128},[33,160711,160651],{"class":39},[33,160713,160714],{"class":47}," _:\n",[33,160716,160717,160719,160721,160724],{"class":35,"line":1753},[33,160718,807],{"class":72},[33,160720,133],{"class":47},[33,160722,160723],{"class":60},"\"未知命令\"",[33,160725,226],{"class":47},[19,160727,160728,160729,160731,160732,160734],{},"入门阶段掌握 ",[30,160730,156833],{}," 更重要，",[30,160733,73478],{}," 可以作为补充。",[14,160736,160738],{"id":160737},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160740,1968],{},[328,160742,160743,160746,160749],{},[331,160744,160745],{},"输入成绩。",[331,160747,160748],{},"判断成绩是否合法。",[331,160750,160751],{},"输出等级。",[19,160753,1982],{},[23,160755,160757],{"className":25,"code":160756,"language":27,"meta":28,"style":28},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[30,160758,160759,160777,160781,160799,160810,160822,160833,160845,160856,160869,160880,160892,160903,160909],{"__ignoreMap":28},[33,160760,160761,160763,160765,160767,160769,160771,160773,160775],{"class":35,"line":36},[33,160762,157533],{"class":47},[33,160764,57],{"class":39},[33,160766,112000],{"class":72},[33,160768,133],{"class":47},[33,160770,56040],{"class":72},[33,160772,133],{"class":47},[33,160774,154588],{"class":60},[33,160776,551],{"class":47},[33,160778,160779],{"class":35,"line":51},[33,160780,100],{"emptyLinePlaceholder":99},[33,160782,160783,160785,160787,160789,160791,160793,160795,160797],{"class":35,"line":64},[33,160784,3805],{"class":39},[33,160786,41154],{"class":39},[33,160788,1437],{"class":72},[33,160790,160421],{"class":39},[33,160792,159954],{"class":47},[33,160794,3861],{"class":39},[33,160796,8001],{"class":72},[33,160798,605],{"class":47},[33,160800,160801,160803,160805,160808],{"class":35,"line":76},[33,160802,193],{"class":72},[33,160804,133],{"class":47},[33,160806,160807],{"class":60},"\"成绩不合法\"",[33,160809,226],{"class":47},[33,160811,160812,160814,160816,160818,160820],{"class":35,"line":87},[33,160813,159976],{"class":39},[33,160815,159954],{"class":47},[33,160817,2175],{"class":39},[33,160819,2203],{"class":72},[33,160821,605],{"class":47},[33,160823,160824,160826,160828,160831],{"class":35,"line":96},[33,160825,193],{"class":72},[33,160827,133],{"class":47},[33,160829,160830],{"class":60},"\"等级:A\"",[33,160832,226],{"class":47},[33,160834,160835,160837,160839,160841,160843],{"class":35,"line":103},[33,160836,159976],{"class":39},[33,160838,159954],{"class":47},[33,160840,2175],{"class":39},[33,160842,159983],{"class":72},[33,160844,605],{"class":47},[33,160846,160847,160849,160851,160854],{"class":35,"line":108},[33,160848,193],{"class":72},[33,160850,133],{"class":47},[33,160852,160853],{"class":60},"\"等级:B\"",[33,160855,226],{"class":47},[33,160857,160858,160860,160862,160864,160867],{"class":35,"line":119},[33,160859,159976],{"class":39},[33,160861,159954],{"class":47},[33,160863,2175],{"class":39},[33,160865,160866],{"class":72}," 70",[33,160868,605],{"class":47},[33,160870,160871,160873,160875,160878],{"class":35,"line":128},[33,160872,193],{"class":72},[33,160874,133],{"class":47},[33,160876,160877],{"class":60},"\"等级:C\"",[33,160879,226],{"class":47},[33,160881,160882,160884,160886,160888,160890],{"class":35,"line":1753},[33,160883,159976],{"class":39},[33,160885,159954],{"class":47},[33,160887,2175],{"class":39},[33,160889,2178],{"class":72},[33,160891,605],{"class":47},[33,160893,160894,160896,160898,160901],{"class":35,"line":1763},[33,160895,193],{"class":72},[33,160897,133],{"class":47},[33,160899,160900],{"class":60},"\"等级:D\"",[33,160902,226],{"class":47},[33,160904,160905,160907],{"class":35,"line":1775},[33,160906,3963],{"class":39},[33,160908,605],{"class":47},[33,160910,160911,160913,160915,160918],{"class":35,"line":1780},[33,160912,193],{"class":72},[33,160914,133],{"class":47},[33,160916,160917],{"class":60},"\"等级:E\"",[33,160919,226],{"class":47},[14,160921,160923],{"id":160922},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160925,1968],{},[328,160927,160928,160931,160934,160937],{},[331,160929,160930],{},"输入消费金额。",[331,160932,160933],{},"输入会员等级，普通、银卡、金卡。",[331,160935,160936],{},"普通不打折，银卡 9 折，金卡 8 折。",[331,160938,160939],{},"满 500 再减 50。",[19,160941,1982],{},[23,160943,160945],{"className":25,"code":160944,"language":27,"meta":28,"style":28},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[30,160946,160947,160967,160983,160987,160995,160999,161013,161023,161036,161045,161058,161066,161072,161083,161087,161101,161105,161119,161129,161133],{"__ignoreMap":28},[33,160948,160949,160952,160954,160956,160958,160960,160962,160965],{"class":35,"line":36},[33,160950,160951],{"class":47},"amount ",[33,160953,57],{"class":39},[33,160955,112000],{"class":72},[33,160957,133],{"class":47},[33,160959,56040],{"class":72},[33,160961,133],{"class":47},[33,160963,160964],{"class":60},"\"请输入消费金额:\"",[33,160966,551],{"class":47},[33,160968,160969,160972,160974,160976,160978,160981],{"class":35,"line":51},[33,160970,160971],{"class":47},"level ",[33,160973,57],{"class":39},[33,160975,62823],{"class":72},[33,160977,133],{"class":47},[33,160979,160980],{"class":60},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[33,160982,226],{"class":47},[33,160984,160985],{"class":35,"line":64},[33,160986,100],{"emptyLinePlaceholder":99},[33,160988,160989,160991,160993],{"class":35,"line":76},[33,160990,159408],{"class":47},[33,160992,57],{"class":39},[33,160994,57917],{"class":72},[33,160996,160997],{"class":35,"line":87},[33,160998,100],{"emptyLinePlaceholder":99},[33,161000,161001,161003,161006,161008,161011],{"class":35,"line":96},[33,161002,3805],{"class":39},[33,161004,161005],{"class":47}," level ",[33,161007,5206],{"class":39},[33,161009,161010],{"class":60}," \"银卡\"",[33,161012,605],{"class":47},[33,161014,161015,161018,161020],{"class":35,"line":103},[33,161016,161017],{"class":47},"    discount ",[33,161019,57],{"class":39},[33,161021,161022],{"class":72}," 0.9\n",[33,161024,161025,161027,161029,161031,161034],{"class":35,"line":108},[33,161026,159976],{"class":39},[33,161028,161005],{"class":47},[33,161030,5206],{"class":39},[33,161032,161033],{"class":60}," \"金卡\"",[33,161035,605],{"class":47},[33,161037,161038,161040,161042],{"class":35,"line":119},[33,161039,161017],{"class":47},[33,161041,57],{"class":39},[33,161043,161044],{"class":72}," 0.8\n",[33,161046,161047,161049,161051,161053,161056],{"class":35,"line":128},[33,161048,159976],{"class":39},[33,161050,161005],{"class":47},[33,161052,5206],{"class":39},[33,161054,161055],{"class":60}," \"普通\"",[33,161057,605],{"class":47},[33,161059,161060,161062,161064],{"class":35,"line":1753},[33,161061,161017],{"class":47},[33,161063,57],{"class":39},[33,161065,57917],{"class":72},[33,161067,161068,161070],{"class":35,"line":1763},[33,161069,3963],{"class":39},[33,161071,605],{"class":47},[33,161073,161074,161076,161078,161081],{"class":35,"line":1775},[33,161075,193],{"class":72},[33,161077,133],{"class":47},[33,161079,161080],{"class":60},"\"会员等级输入错误，按普通会员计算\"",[33,161082,226],{"class":47},[33,161084,161085],{"class":35,"line":1780},[33,161086,100],{"emptyLinePlaceholder":99},[33,161088,161089,161092,161094,161097,161099],{"class":35,"line":1785},[33,161090,161091],{"class":47},"pay ",[33,161093,57],{"class":39},[33,161095,161096],{"class":47}," amount ",[33,161098,657],{"class":39},[33,161100,159447],{"class":47},[33,161102,161103],{"class":35,"line":1940},[33,161104,100],{"emptyLinePlaceholder":99},[33,161106,161107,161109,161112,161114,161117],{"class":35,"line":2183},[33,161108,3805],{"class":39},[33,161110,161111],{"class":47}," pay ",[33,161113,2175],{"class":39},[33,161115,161116],{"class":72}," 500",[33,161118,605],{"class":47},[33,161120,161121,161124,161126],{"class":35,"line":2208},[33,161122,161123],{"class":47},"    pay ",[33,161125,152440],{"class":39},[33,161127,161128],{"class":72}," 50\n",[33,161130,161131],{"class":35,"line":2234},[33,161132,100],{"emptyLinePlaceholder":99},[33,161134,161135,161137,161139,161141,161143,161145,161148,161150,161152,161154],{"class":35,"line":2239},[33,161136,122],{"class":72},[33,161138,133],{"class":47},[33,161140,198],{"class":39},[33,161142,159528],{"class":60},[33,161144,204],{"class":72},[33,161146,161147],{"class":47},"pay",[33,161149,159331],{"class":39},[33,161151,210],{"class":72},[33,161153,159184],{"class":60},[33,161155,226],{"class":47},[14,161157,161159],{"id":161158},"_312-易错点","3.12 易错点",[328,161161,161162,161165,161168,161171,161176],{},[331,161163,161164],{},"冒号不能漏。",[331,161166,161167],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[331,161169,161170],{},"多分支判断要注意顺序。",[331,161172,161173,161174,30622],{},"判断相等用 ",[30,161175,5206],{},[331,161177,161178],{},"字符串比较区分大小写：",[23,161180,161182],{"className":25,"code":161181,"language":27,"meta":28,"style":28},"\"Y\" == \"y\"  # False\n",[30,161183,161184],{"__ignoreMap":28},[33,161185,161186,161189,161191,161193],{"class":35,"line":36},[33,161187,161188],{"class":60},"\"Y\"",[33,161190,1434],{"class":39},[33,161192,160174],{"class":60},[33,161194,161195],{"class":2487},"  # False\n",[19,161197,161198],{},"可转换后再判断：",[23,161200,161202],{"className":25,"code":161201,"language":27,"meta":28,"style":28},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[30,161203,161204,161221,161234],{"__ignoreMap":28},[33,161205,161206,161209,161211,161213,161215,161218],{"class":35,"line":36},[33,161207,161208],{"class":47},"answer ",[33,161210,57],{"class":39},[33,161212,62823],{"class":72},[33,161214,133],{"class":47},[33,161216,161217],{"class":60},"\"是否继续(y\u002Fn):\"",[33,161219,161220],{"class":47},").lower()\n",[33,161222,161223,161225,161228,161230,161232],{"class":35,"line":51},[33,161224,3805],{"class":39},[33,161226,161227],{"class":47}," answer ",[33,161229,5206],{"class":39},[33,161231,160174],{"class":60},[33,161233,605],{"class":47},[33,161235,161236,161238,161240,161243],{"class":35,"line":64},[33,161237,193],{"class":72},[33,161239,133],{"class":47},[33,161241,161242],{"class":60},"\"继续\"",[33,161244,226],{"class":47},[14,161246,161248],{"id":161247},"_313-本章练习","3.13 本章练习",[328,161250,161251,161254,161257,161260,161270],{},[331,161252,161253],{},"输入年龄，判断是否成年。",[331,161255,161256],{},"输入年份，判断是否为闰年。",[331,161258,161259],{},"输入三个数字，输出最大值。",[331,161261,161262,161263,161266,161267,161269],{},"写登录判断：用户名是 ",[30,161264,161265],{},"admin"," 且密码是 ",[30,161268,17322],{}," 才登录成功。",[331,161271,161272],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2331,161274,161275],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":28,"searchDepth":51,"depth":51,"links":161277},[161278,161279,161280,161281,161282,161283,161288,161289,161290,161291,161292,161293,161294],{"id":159670,"depth":51,"text":159671},{"id":159723,"depth":51,"text":159724},{"id":159826,"depth":51,"text":159827},{"id":159916,"depth":51,"text":159917},{"id":160104,"depth":51,"text":160105},{"id":160227,"depth":51,"text":160228,"children":161284},[161285,161286,161287],{"id":160231,"depth":64,"text":160232},{"id":160288,"depth":64,"text":160289},{"id":160345,"depth":64,"text":160346},{"id":160390,"depth":51,"text":160391},{"id":160480,"depth":51,"text":160481},{"id":160607,"depth":51,"text":160608},{"id":160737,"depth":51,"text":160738},{"id":160922,"depth":51,"text":160923},{"id":161158,"depth":51,"text":161159},{"id":161247,"depth":51,"text":161248},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159662,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":161301,"title":161302,"body":161303,"description":2359,"extension":2360,"meta":163068,"navigation":99,"path":163069,"seo":163070,"stem":163071,"__hash__":163072},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":161304,"toc":163048},[161305,161308,161312,161318,161321,161338,161342,161344,161361,161363,161408,161410,161427,161431,161434,161499,161502,161520,161524,161685,161694,161698,161702,161707,161754,161756,161762,161766,161771,161818,161820,161826,161830,161835,161871,161874,161919,161923,161929,161987,161992,162023,162028,162032,162087,162090,162161,162164,162223,162227,162230,162305,162308,162312,162418,162421,162447,162451,162463,162532,162535,162627,162631,162633,162644,162646,162776,162780,162982,162990,162994,163024,163028,163045],[10,161306,161302],{"id":161307},"_4-循环语句",[14,161309,161311],{"id":161310},"_41-为什么需要循环","4.1 为什么需要循环",[19,161313,161314,161315,161317],{},"如果要输出 1 到 100，不应该写 100 行 ",[30,161316,148670],{},"，而应该用循环。",[19,161319,161320],{},"循环适合处理重复任务：",[328,161322,161323,161326,161329,161332,161335],{},[331,161324,161325],{},"重复输出。",[331,161327,161328],{},"重复输入。",[331,161330,161331],{},"遍历数据。",[331,161333,161334],{},"持续执行菜单。",[331,161336,161337],{},"批量处理文件或数据。",[14,161339,161341],{"id":161340},"_42-while循环","4.2 while循环",[19,161343,7430],{},[23,161345,161347],{"className":25,"code":161346,"language":27,"meta":28,"style":28},"while 条件:\n    循环体\n",[30,161348,161349,161356],{"__ignoreMap":28},[33,161350,161351,161353],{"class":35,"line":36},[33,161352,110866],{"class":39},[33,161354,161355],{"class":47}," 条件:\n",[33,161357,161358],{"class":35,"line":51},[33,161359,161360],{"class":47},"    循环体\n",[19,161362,17373],{},[23,161364,161366],{"className":25,"code":161365,"language":27,"meta":28,"style":28},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[30,161367,161368,161376,161380,161392,161399],{"__ignoreMap":28},[33,161369,161370,161372,161374],{"class":35,"line":36},[33,161371,102355],{"class":47},[33,161373,57],{"class":39},[33,161375,57917],{"class":72},[33,161377,161378],{"class":35,"line":51},[33,161379,100],{"emptyLinePlaceholder":99},[33,161381,161382,161384,161386,161388,161390],{"class":35,"line":64},[33,161383,110866],{"class":39},[33,161385,11684],{"class":47},[33,161387,3861],{"class":39},[33,161389,4407],{"class":72},[33,161391,605],{"class":47},[33,161393,161394,161396],{"class":35,"line":76},[33,161395,193],{"class":72},[33,161397,161398],{"class":47},"(i)\n",[33,161400,161401,161404,161406],{"class":35,"line":87},[33,161402,161403],{"class":47},"    i ",[33,161405,692],{"class":39},[33,161407,57917],{"class":72},[19,161409,83138],{},[328,161411,161412,161418,161421,161424],{},[331,161413,161414,161415,30622],{},"判断条件 ",[30,161416,161417],{},"i \u003C= 5",[331,161419,161420],{},"条件成立，执行循环体。",[331,161422,161423],{},"执行完后回到条件判断。",[331,161425,161426],{},"条件不成立，退出循环。",[14,161428,161430],{"id":161429},"_43-while累加","4.3 while累加",[19,161432,161433],{},"计算 1 到 100 的和：",[23,161435,161437],{"className":25,"code":161436,"language":27,"meta":28,"style":28},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[30,161438,161439,161447,161455,161459,161471,161480,161488,161492],{"__ignoreMap":28},[33,161440,161441,161443,161445],{"class":35,"line":36},[33,161442,102355],{"class":47},[33,161444,57],{"class":39},[33,161446,57917],{"class":72},[33,161448,161449,161451,161453],{"class":35,"line":51},[33,161450,159432],{"class":47},[33,161452,57],{"class":39},[33,161454,670],{"class":72},[33,161456,161457],{"class":35,"line":64},[33,161458,100],{"emptyLinePlaceholder":99},[33,161460,161461,161463,161465,161467,161469],{"class":35,"line":76},[33,161462,110866],{"class":39},[33,161464,11684],{"class":47},[33,161466,3861],{"class":39},[33,161468,8001],{"class":72},[33,161470,605],{"class":47},[33,161472,161473,161475,161477],{"class":35,"line":87},[33,161474,665],{"class":47},[33,161476,692],{"class":39},[33,161478,161479],{"class":47}," i\n",[33,161481,161482,161484,161486],{"class":35,"line":96},[33,161483,161403],{"class":47},[33,161485,692],{"class":39},[33,161487,57917],{"class":72},[33,161489,161490],{"class":35,"line":103},[33,161491,100],{"emptyLinePlaceholder":99},[33,161493,161494,161496],{"class":35,"line":108},[33,161495,122],{"class":72},[33,161497,161498],{"class":47},"(total)\n",[19,161500,161501],{},"核心思想：",[328,161503,161504,161509,161514],{},[331,161505,161506,161508],{},[30,161507,2861],{}," 控制循环次数。",[331,161510,161511,161513],{},[30,161512,159533],{}," 保存累加结果。",[331,161515,161516,161517,161519],{},"每轮循环都要更新 ",[30,161518,2861],{},"，否则可能死循环。",[14,161521,161523],{"id":161522},"_44-while猜数字","4.4 while猜数字",[23,161525,161527],{"className":25,"code":161526,"language":27,"meta":28,"style":28},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[30,161528,161529,161535,161539,161556,161564,161568,161576,161596,161605,161609,161621,161632,161642,161653,161659,161681],{"__ignoreMap":28},[33,161530,161531,161533],{"class":35,"line":36},[33,161532,32627],{"class":39},[33,161534,47551],{"class":47},[33,161536,161537],{"class":35,"line":51},[33,161538,100],{"emptyLinePlaceholder":99},[33,161540,161541,161543,161545,161548,161550,161552,161554],{"class":35,"line":64},[33,161542,161208],{"class":47},[33,161544,57],{"class":39},[33,161546,161547],{"class":47}," random.randint(",[33,161549,720],{"class":72},[33,161551,245],{"class":47},[33,161553,2734],{"class":72},[33,161555,226],{"class":47},[33,161557,161558,161560,161562],{"class":35,"line":76},[33,161559,148888],{"class":47},[33,161561,57],{"class":39},[33,161563,670],{"class":72},[33,161565,161566],{"class":35,"line":87},[33,161567,100],{"emptyLinePlaceholder":99},[33,161569,161570,161572,161574],{"class":35,"line":96},[33,161571,110866],{"class":39},[33,161573,97500],{"class":72},[33,161575,605],{"class":47},[33,161577,161578,161581,161583,161585,161587,161589,161591,161594],{"class":35,"line":103},[33,161579,161580],{"class":47},"    guess ",[33,161582,57],{"class":39},[33,161584,4641],{"class":72},[33,161586,133],{"class":47},[33,161588,56040],{"class":72},[33,161590,133],{"class":47},[33,161592,161593],{"class":60},"\"请输入1到100之间的数字:\"",[33,161595,551],{"class":47},[33,161597,161598,161601,161603],{"class":35,"line":108},[33,161599,161600],{"class":47},"    count ",[33,161602,692],{"class":39},[33,161604,57917],{"class":72},[33,161606,161607],{"class":35,"line":119},[33,161608,100],{"emptyLinePlaceholder":99},[33,161610,161611,161613,161616,161618],{"class":35,"line":128},[33,161612,593],{"class":39},[33,161614,161615],{"class":47}," guess ",[33,161617,3367],{"class":39},[33,161619,161620],{"class":47}," answer:\n",[33,161622,161623,161625,161627,161630],{"class":35,"line":1753},[33,161624,807],{"class":72},[33,161626,133],{"class":47},[33,161628,161629],{"class":60},"\"猜大了\"",[33,161631,226],{"class":47},[33,161633,161634,161636,161638,161640],{"class":35,"line":1763},[33,161635,41516],{"class":39},[33,161637,161615],{"class":47},[33,161639,2226],{"class":39},[33,161641,161620],{"class":47},[33,161643,161644,161646,161648,161651],{"class":35,"line":1775},[33,161645,807],{"class":72},[33,161647,133],{"class":47},[33,161649,161650],{"class":60},"\"猜小了\"",[33,161652,226],{"class":47},[33,161654,161655,161657],{"class":35,"line":1780},[33,161656,160191],{"class":39},[33,161658,605],{"class":47},[33,161660,161661,161663,161665,161667,161670,161672,161674,161676,161679],{"class":35,"line":1785},[33,161662,807],{"class":72},[33,161664,133],{"class":47},[33,161666,198],{"class":39},[33,161668,161669],{"class":60},"\"猜对了，一共猜了",[33,161671,204],{"class":72},[33,161673,86643],{"class":47},[33,161675,210],{"class":72},[33,161677,161678],{"class":60},"次\"",[33,161680,226],{"class":47},[33,161682,161683],{"class":35,"line":1940},[33,161684,33856],{"class":39},[19,161686,161687,161690,161691,161693],{},[30,161688,161689],{},"while True"," 表示无限循环，通常配合 ",[30,161692,4312],{}," 使用。",[14,161695,161697],{"id":161696},"_45-break和continue","4.5 break和continue",[631,161699,161701],{"id":161700},"_451-break","4.5.1 break",[19,161703,161704,161706],{},[30,161705,4312],{}," 直接结束整个循环。",[23,161708,161710],{"className":25,"code":161709,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[30,161711,161712,161732,161744,161748],{"__ignoreMap":28},[33,161713,161714,161716,161718,161720,161722,161724,161726,161728,161730],{"class":35,"line":36},[33,161715,5282],{"class":39},[33,161717,11684],{"class":47},[33,161719,681],{"class":39},[33,161721,34670],{"class":72},[33,161723,133],{"class":47},[33,161725,720],{"class":72},[33,161727,245],{"class":47},[33,161729,2765],{"class":72},[33,161731,366],{"class":47},[33,161733,161734,161736,161738,161740,161742],{"class":35,"line":51},[33,161735,593],{"class":39},[33,161737,11684],{"class":47},[33,161739,5206],{"class":39},[33,161741,80281],{"class":72},[33,161743,605],{"class":47},[33,161745,161746],{"class":35,"line":64},[33,161747,33856],{"class":39},[33,161749,161750,161752],{"class":35,"line":76},[33,161751,193],{"class":72},[33,161753,161398],{"class":47},[19,161755,148655],{},[23,161757,161760],{"className":161758,"code":161759,"language":7436,"meta":28},[7434],"1\n2\n",[30,161761,161759],{"__ignoreMap":28},[631,161763,161765],{"id":161764},"_452-continue","4.5.2 continue",[19,161767,161768,161770],{},[30,161769,156847],{}," 跳过本轮剩余代码，进入下一轮循环。",[23,161772,161774],{"className":25,"code":161773,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[30,161775,161776,161796,161808,161812],{"__ignoreMap":28},[33,161777,161778,161780,161782,161784,161786,161788,161790,161792,161794],{"class":35,"line":36},[33,161779,5282],{"class":39},[33,161781,11684],{"class":47},[33,161783,681],{"class":39},[33,161785,34670],{"class":72},[33,161787,133],{"class":47},[33,161789,720],{"class":72},[33,161791,245],{"class":47},[33,161793,2765],{"class":72},[33,161795,366],{"class":47},[33,161797,161798,161800,161802,161804,161806],{"class":35,"line":51},[33,161799,593],{"class":39},[33,161801,11684],{"class":47},[33,161803,5206],{"class":39},[33,161805,80281],{"class":72},[33,161807,605],{"class":47},[33,161809,161810],{"class":35,"line":64},[33,161811,150708],{"class":39},[33,161813,161814,161816],{"class":35,"line":76},[33,161815,193],{"class":72},[33,161817,161398],{"class":47},[19,161819,148655],{},[23,161821,161824],{"className":161822,"code":161823,"language":7436,"meta":28},[7434],"1\n2\n4\n5\n",[30,161825,161823],{"__ignoreMap":28},[14,161827,161829],{"id":161828},"_46-for循环","4.6 for循环",[19,161831,161832,161834],{},[30,161833,5282],{}," 常用于遍历序列。",[23,161836,161838],{"className":25,"code":161837,"language":27,"meta":28,"style":28},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[30,161839,161840,161849,161853,161864],{"__ignoreMap":28},[33,161841,161842,161844,161846],{"class":35,"line":36},[33,161843,148734],{"class":47},[33,161845,57],{"class":39},[33,161847,161848],{"class":60}," \"python\"\n",[33,161850,161851],{"class":35,"line":51},[33,161852,100],{"emptyLinePlaceholder":99},[33,161854,161855,161857,161860,161862],{"class":35,"line":64},[33,161856,5282],{"class":39},[33,161858,161859],{"class":47}," ch ",[33,161861,681],{"class":39},[33,161863,160567],{"class":47},[33,161865,161866,161868],{"class":35,"line":76},[33,161867,193],{"class":72},[33,161869,161870],{"class":47},"(ch)\n",[19,161872,161873],{},"遍历列表：",[23,161875,161877],{"className":25,"code":161876,"language":27,"meta":28,"style":28},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[30,161878,161879,161899,161903,161913],{"__ignoreMap":28},[33,161880,161881,161883,161885,161887,161889,161891,161893,161895,161897],{"class":35,"line":36},[33,161882,1082],{"class":47},[33,161884,57],{"class":39},[33,161886,906],{"class":47},[33,161888,242],{"class":60},[33,161890,245],{"class":47},[33,161892,1122],{"class":60},[33,161894,245],{"class":47},[33,161896,1144],{"class":60},[33,161898,919],{"class":47},[33,161900,161901],{"class":35,"line":51},[33,161902,100],{"emptyLinePlaceholder":99},[33,161904,161905,161907,161909,161911],{"class":35,"line":64},[33,161906,5282],{"class":39},[33,161908,2120],{"class":47},[33,161910,681],{"class":39},[33,161912,2125],{"class":47},[33,161914,161915,161917],{"class":35,"line":76},[33,161916,193],{"class":72},[33,161918,152230],{"class":47},[14,161920,161922],{"id":161921},"_47-range函数","4.7 range函数",[19,161924,161925,161928],{},[30,161926,161927],{},"range()"," 用于生成整数序列。",[23,161930,161932],{"className":25,"code":161931,"language":27,"meta":28,"style":28},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[30,161933,161934,161948,161966],{"__ignoreMap":28},[33,161935,161936,161938,161940,161942,161945],{"class":35,"line":36},[33,161937,35641],{"class":72},[33,161939,133],{"class":47},[33,161941,758],{"class":72},[33,161943,161944],{"class":47},")          ",[33,161946,161947],{"class":2487},"# 0,1,2,3,4\n",[33,161949,161950,161952,161954,161956,161958,161960,161963],{"class":35,"line":51},[33,161951,35641],{"class":72},[33,161953,133],{"class":47},[33,161955,720],{"class":72},[33,161957,245],{"class":47},[33,161959,758],{"class":72},[33,161961,161962],{"class":47},")       ",[33,161964,161965],{"class":2487},"# 1,2,3,4\n",[33,161967,161968,161970,161972,161974,161976,161978,161980,161982,161984],{"class":35,"line":64},[33,161969,35641],{"class":72},[33,161971,133],{"class":47},[33,161973,720],{"class":72},[33,161975,245],{"class":47},[33,161977,1279],{"class":72},[33,161979,245],{"class":47},[33,161981,725],{"class":72},[33,161983,157836],{"class":47},[33,161985,161986],{"class":2487},"# 1,3,5,7,9\n",[19,161988,161989,161990,26857],{},"配合 ",[30,161991,5282],{},[23,161993,161995],{"className":25,"code":161994,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    print(i)\n",[30,161996,161997,162017],{"__ignoreMap":28},[33,161998,161999,162001,162003,162005,162007,162009,162011,162013,162015],{"class":35,"line":36},[33,162000,5282],{"class":39},[33,162002,11684],{"class":47},[33,162004,681],{"class":39},[33,162006,34670],{"class":72},[33,162008,133],{"class":47},[33,162010,720],{"class":72},[33,162012,245],{"class":47},[33,162014,2765],{"class":72},[33,162016,366],{"class":47},[33,162018,162019,162021],{"class":35,"line":51},[33,162020,193],{"class":72},[33,162022,161398],{"class":47},[19,162024,11271,162025,162027],{},[30,162026,35641],{}," 的结束值不包含在内。",[14,162029,162031],{"id":162030},"_48-for循环求和","4.8 for循环求和",[23,162033,162035],{"className":25,"code":162034,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[30,162036,162037,162045,162049,162069,162077,162081],{"__ignoreMap":28},[33,162038,162039,162041,162043],{"class":35,"line":36},[33,162040,159432],{"class":47},[33,162042,57],{"class":39},[33,162044,670],{"class":72},[33,162046,162047],{"class":35,"line":51},[33,162048,100],{"emptyLinePlaceholder":99},[33,162050,162051,162053,162055,162057,162059,162061,162063,162065,162067],{"class":35,"line":64},[33,162052,5282],{"class":39},[33,162054,11684],{"class":47},[33,162056,681],{"class":39},[33,162058,34670],{"class":72},[33,162060,133],{"class":47},[33,162062,720],{"class":72},[33,162064,245],{"class":47},[33,162066,2758],{"class":72},[33,162068,366],{"class":47},[33,162070,162071,162073,162075],{"class":35,"line":76},[33,162072,665],{"class":47},[33,162074,692],{"class":39},[33,162076,161479],{"class":47},[33,162078,162079],{"class":35,"line":87},[33,162080,100],{"emptyLinePlaceholder":99},[33,162082,162083,162085],{"class":35,"line":96},[33,162084,122],{"class":72},[33,162086,161498],{"class":47},[19,162088,162089],{},"求偶数和：",[23,162091,162093],{"className":25,"code":162092,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[30,162094,162095,162103,162107,162127,162143,162151,162155],{"__ignoreMap":28},[33,162096,162097,162099,162101],{"class":35,"line":36},[33,162098,159432],{"class":47},[33,162100,57],{"class":39},[33,162102,670],{"class":72},[33,162104,162105],{"class":35,"line":51},[33,162106,100],{"emptyLinePlaceholder":99},[33,162108,162109,162111,162113,162115,162117,162119,162121,162123,162125],{"class":35,"line":64},[33,162110,5282],{"class":39},[33,162112,11684],{"class":47},[33,162114,681],{"class":39},[33,162116,34670],{"class":72},[33,162118,133],{"class":47},[33,162120,720],{"class":72},[33,162122,245],{"class":47},[33,162124,2758],{"class":72},[33,162126,366],{"class":47},[33,162128,162129,162131,162133,162135,162137,162139,162141],{"class":35,"line":76},[33,162130,593],{"class":39},[33,162132,11684],{"class":47},[33,162134,1429],{"class":39},[33,162136,1354],{"class":72},[33,162138,1434],{"class":39},[33,162140,1437],{"class":72},[33,162142,605],{"class":47},[33,162144,162145,162147,162149],{"class":35,"line":87},[33,162146,689],{"class":47},[33,162148,692],{"class":39},[33,162150,161479],{"class":47},[33,162152,162153],{"class":35,"line":96},[33,162154,100],{"emptyLinePlaceholder":99},[33,162156,162157,162159],{"class":35,"line":103},[33,162158,122],{"class":72},[33,162160,161498],{"class":47},[19,162162,162163],{},"也可以：",[23,162165,162167],{"className":25,"code":162166,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[30,162168,162169,162177,162181,162205,162213,162217],{"__ignoreMap":28},[33,162170,162171,162173,162175],{"class":35,"line":36},[33,162172,159432],{"class":47},[33,162174,57],{"class":39},[33,162176,670],{"class":72},[33,162178,162179],{"class":35,"line":51},[33,162180,100],{"emptyLinePlaceholder":99},[33,162182,162183,162185,162187,162189,162191,162193,162195,162197,162199,162201,162203],{"class":35,"line":64},[33,162184,5282],{"class":39},[33,162186,11684],{"class":47},[33,162188,681],{"class":39},[33,162190,34670],{"class":72},[33,162192,133],{"class":47},[33,162194,725],{"class":72},[33,162196,245],{"class":47},[33,162198,2758],{"class":72},[33,162200,245],{"class":47},[33,162202,725],{"class":72},[33,162204,366],{"class":47},[33,162206,162207,162209,162211],{"class":35,"line":76},[33,162208,665],{"class":47},[33,162210,692],{"class":39},[33,162212,161479],{"class":47},[33,162214,162215],{"class":35,"line":87},[33,162216,100],{"emptyLinePlaceholder":99},[33,162218,162219,162221],{"class":35,"line":96},[33,162220,122],{"class":72},[33,162222,161498],{"class":47},[14,162224,162226],{"id":162225},"_49-循环嵌套","4.9 循环嵌套",[19,162228,162229],{},"嵌套循环就是循环里面再写循环。",[23,162231,162233],{"className":25,"code":162232,"language":27,"meta":28,"style":28},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[30,162234,162235,162255,162275],{"__ignoreMap":28},[33,162236,162237,162239,162241,162243,162245,162247,162249,162251,162253],{"class":35,"line":36},[33,162238,5282],{"class":39},[33,162240,11684],{"class":47},[33,162242,681],{"class":39},[33,162244,34670],{"class":72},[33,162246,133],{"class":47},[33,162248,720],{"class":72},[33,162250,245],{"class":47},[33,162252,753],{"class":72},[33,162254,366],{"class":47},[33,162256,162257,162259,162261,162263,162265,162267,162269,162271,162273],{"class":35,"line":51},[33,162258,675],{"class":39},[33,162260,11745],{"class":47},[33,162262,681],{"class":39},[33,162264,34670],{"class":72},[33,162266,133],{"class":47},[33,162268,720],{"class":72},[33,162270,245],{"class":47},[33,162272,753],{"class":72},[33,162274,366],{"class":47},[33,162276,162277,162279,162281,162283,162286,162288,162290,162292,162295,162297,162299,162301,162303],{"class":35,"line":64},[33,162278,807],{"class":72},[33,162280,133],{"class":47},[33,162282,198],{"class":39},[33,162284,162285],{"class":60},"\"i=",[33,162287,204],{"class":72},[33,162289,2861],{"class":47},[33,162291,210],{"class":72},[33,162293,162294],{"class":60},", j=",[33,162296,204],{"class":72},[33,162298,2885],{"class":47},[33,162300,210],{"class":72},[33,162302,397],{"class":60},[33,162304,226],{"class":47},[19,162306,162307],{},"外层循环执行一次，内层循环执行完整一轮。",[14,162309,162311],{"id":162310},"_410-九九乘法表","4.10 九九乘法表",[23,162313,162315],{"className":25,"code":162314,"language":27,"meta":28,"style":28},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[30,162316,162317,162337,162360,162412],{"__ignoreMap":28},[33,162318,162319,162321,162323,162325,162327,162329,162331,162333,162335],{"class":35,"line":36},[33,162320,5282],{"class":39},[33,162322,11684],{"class":47},[33,162324,681],{"class":39},[33,162326,34670],{"class":72},[33,162328,133],{"class":47},[33,162330,720],{"class":72},[33,162332,245],{"class":47},[33,162334,1279],{"class":72},[33,162336,366],{"class":47},[33,162338,162339,162341,162343,162345,162347,162349,162351,162354,162356,162358],{"class":35,"line":51},[33,162340,675],{"class":39},[33,162342,11745],{"class":47},[33,162344,681],{"class":39},[33,162346,34670],{"class":72},[33,162348,133],{"class":47},[33,162350,720],{"class":72},[33,162352,162353],{"class":47},", i ",[33,162355,880],{"class":39},[33,162357,27357],{"class":72},[33,162359,366],{"class":47},[33,162361,162362,162364,162366,162368,162370,162372,162374,162376,162378,162380,162382,162384,162386,162388,162390,162392,162394,162396,162398,162400,162402,162404,162406,162408,162410],{"class":35,"line":64},[33,162363,807],{"class":72},[33,162365,133],{"class":47},[33,162367,198],{"class":39},[33,162369,397],{"class":60},[33,162371,204],{"class":72},[33,162373,2885],{"class":47},[33,162375,210],{"class":72},[33,162377,657],{"class":60},[33,162379,204],{"class":72},[33,162381,2861],{"class":47},[33,162383,210],{"class":72},[33,162385,57],{"class":60},[33,162387,204],{"class":72},[33,162389,102355],{"class":47},[33,162391,657],{"class":39},[33,162393,5665],{"class":47},[33,162395,210],{"class":72},[33,162397,397],{"class":60},[33,162399,245],{"class":47},[33,162401,48024],{"class":289},[33,162403,57],{"class":39},[33,162405,397],{"class":60},[33,162407,3507],{"class":72},[33,162409,397],{"class":60},[33,162411,226],{"class":47},[33,162413,162414,162416],{"class":35,"line":76},[33,162415,193],{"class":72},[33,162417,4235],{"class":47},[19,162419,162420],{},"关键点：",[328,162422,162423,162429,162435,162441],{},[331,162424,162425,162426,162428],{},"外层 ",[30,162427,2861],{}," 控制行。",[331,162430,162431,162432,162434],{},"内层 ",[30,162433,2885],{}," 控制列。",[331,162436,162437,162438,162440],{},"每行结束后用 ",[30,162439,148670],{}," 换行。",[331,162442,162443,162446],{},[30,162444,162445],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,162448,162450],{"id":162449},"_411-循环else","4.11 循环else",[19,162452,162453,162454,162456,162457,162459,162460,162462],{},"Python 的循环可以带 ",[30,162455,3963],{},"。当循环正常结束时执行 ",[30,162458,3963],{},"，如果被 ",[30,162461,4312],{}," 打断，则不执行。",[23,162464,162466],{"className":25,"code":162465,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,162467,162468,162488,162500,162511,162515,162521],{"__ignoreMap":28},[33,162469,162470,162472,162474,162476,162478,162480,162482,162484,162486],{"class":35,"line":36},[33,162471,5282],{"class":39},[33,162473,11684],{"class":47},[33,162475,681],{"class":39},[33,162477,34670],{"class":72},[33,162479,133],{"class":47},[33,162481,720],{"class":72},[33,162483,245],{"class":47},[33,162485,2765],{"class":72},[33,162487,366],{"class":47},[33,162489,162490,162492,162494,162496,162498],{"class":35,"line":51},[33,162491,593],{"class":39},[33,162493,11684],{"class":47},[33,162495,5206],{"class":39},[33,162497,4297],{"class":72},[33,162499,605],{"class":47},[33,162501,162502,162504,162506,162509],{"class":35,"line":64},[33,162503,807],{"class":72},[33,162505,133],{"class":47},[33,162507,162508],{"class":60},"\"找到了\"",[33,162510,226],{"class":47},[33,162512,162513],{"class":35,"line":76},[33,162514,33856],{"class":39},[33,162516,162517,162519],{"class":35,"line":87},[33,162518,3963],{"class":39},[33,162520,605],{"class":47},[33,162522,162523,162525,162527,162530],{"class":35,"line":96},[33,162524,193],{"class":72},[33,162526,133],{"class":47},[33,162528,162529],{"class":60},"\"没找到\"",[33,162531,226],{"class":47},[19,162533,162534],{},"常用于搜索。",[23,162536,162538],{"className":25,"code":162537,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,162539,162540,162561,162570,162574,162586,162597,162607,162611,162617],{"__ignoreMap":28},[33,162541,162542,162545,162547,162549,162551,162553,162555,162557,162559],{"class":35,"line":36},[33,162543,162544],{"class":47},"names ",[33,162546,57],{"class":39},[33,162548,906],{"class":47},[33,162550,242],{"class":60},[33,162552,245],{"class":47},[33,162554,1122],{"class":60},[33,162556,245],{"class":47},[33,162558,1144],{"class":60},[33,162560,919],{"class":47},[33,162562,162563,162565,162567],{"class":35,"line":51},[33,162564,113781],{"class":47},[33,162566,57],{"class":39},[33,162568,162569],{"class":60}," \"小李\"\n",[33,162571,162572],{"class":35,"line":64},[33,162573,100],{"emptyLinePlaceholder":99},[33,162575,162576,162578,162581,162583],{"class":35,"line":76},[33,162577,5282],{"class":39},[33,162579,162580],{"class":47}," name ",[33,162582,681],{"class":39},[33,162584,162585],{"class":47}," names:\n",[33,162587,162588,162590,162592,162594],{"class":35,"line":87},[33,162589,593],{"class":39},[33,162591,162580],{"class":47},[33,162593,5206],{"class":39},[33,162595,162596],{"class":47}," target:\n",[33,162598,162599,162601,162603,162605],{"class":35,"line":96},[33,162600,807],{"class":72},[33,162602,133],{"class":47},[33,162604,162508],{"class":60},[33,162606,226],{"class":47},[33,162608,162609],{"class":35,"line":103},[33,162610,33856],{"class":39},[33,162612,162613,162615],{"class":35,"line":108},[33,162614,3963],{"class":39},[33,162616,605],{"class":47},[33,162618,162619,162621,162623,162625],{"class":35,"line":119},[33,162620,193],{"class":72},[33,162622,133],{"class":47},[33,162624,162529],{"class":60},[33,162626,226],{"class":47},[14,162628,162630],{"id":162629},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162632,1968],{},[328,162634,162635,162638,162641],{},[331,162636,162637],{},"用户最多输入 3 次密码。",[331,162639,162640],{},"密码正确则登录成功。",[331,162642,162643],{},"3 次都错误则锁定账号。",[19,162645,1982],{},[23,162647,162649],{"className":25,"code":162648,"language":27,"meta":28,"style":28},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[30,162650,162651,162661,162665,162681,162697,162701,162713,162724,162728,162734,162759,162765],{"__ignoreMap":28},[33,162652,162653,162656,162658],{"class":35,"line":36},[33,162654,162655],{"class":47},"password ",[33,162657,57],{"class":39},[33,162659,162660],{"class":60}," \"123456\"\n",[33,162662,162663],{"class":35,"line":51},[33,162664,100],{"emptyLinePlaceholder":99},[33,162666,162667,162669,162671,162673,162675,162677,162679],{"class":35,"line":64},[33,162668,5282],{"class":39},[33,162670,11684],{"class":47},[33,162672,681],{"class":39},[33,162674,34670],{"class":72},[33,162676,133],{"class":47},[33,162678,730],{"class":72},[33,162680,366],{"class":47},[33,162682,162683,162686,162688,162690,162692,162695],{"class":35,"line":76},[33,162684,162685],{"class":47},"    user_password ",[33,162687,57],{"class":39},[33,162689,62823],{"class":72},[33,162691,133],{"class":47},[33,162693,162694],{"class":60},"\"请输入密码:\"",[33,162696,226],{"class":47},[33,162698,162699],{"class":35,"line":87},[33,162700,100],{"emptyLinePlaceholder":99},[33,162702,162703,162705,162708,162710],{"class":35,"line":96},[33,162704,593],{"class":39},[33,162706,162707],{"class":47}," user_password ",[33,162709,5206],{"class":39},[33,162711,162712],{"class":47}," password:\n",[33,162714,162715,162717,162719,162722],{"class":35,"line":103},[33,162716,807],{"class":72},[33,162718,133],{"class":47},[33,162720,162721],{"class":60},"\"登录成功\"",[33,162723,226],{"class":47},[33,162725,162726],{"class":35,"line":108},[33,162727,33856],{"class":39},[33,162729,162730,162732],{"class":35,"line":119},[33,162731,160191],{"class":39},[33,162733,605],{"class":47},[33,162735,162736,162738,162740,162742,162745,162748,162750,162752,162754,162757],{"class":35,"line":128},[33,162737,807],{"class":72},[33,162739,133],{"class":47},[33,162741,198],{"class":39},[33,162743,162744],{"class":60},"\"密码错误，还剩",[33,162746,162747],{"class":72},"{2",[33,162749,54490],{"class":39},[33,162751,5289],{"class":47},[33,162753,210],{"class":72},[33,162755,162756],{"class":60},"次机会\"",[33,162758,226],{"class":47},[33,162760,162761,162763],{"class":35,"line":1753},[33,162762,3963],{"class":39},[33,162764,605],{"class":47},[33,162766,162767,162769,162771,162774],{"class":35,"line":1763},[33,162768,193],{"class":72},[33,162770,133],{"class":47},[33,162772,162773],{"class":60},"\"账号已锁定\"",[33,162775,226],{"class":47},[14,162777,162779],{"id":162778},"_413-小案例菜单程序","4.13 小案例：菜单程序",[23,162781,162783],{"className":25,"code":162782,"language":27,"meta":28,"style":28},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[30,162784,162785,162793,162804,162815,162826,162837,162848,162852,162867,162871,162883,162894,162906,162917,162929,162940,162952,162962,162966,162972],{"__ignoreMap":28},[33,162786,162787,162789,162791],{"class":35,"line":36},[33,162788,110866],{"class":39},[33,162790,97500],{"class":72},[33,162792,605],{"class":47},[33,162794,162795,162797,162799,162802],{"class":35,"line":51},[33,162796,193],{"class":72},[33,162798,133],{"class":47},[33,162800,162801],{"class":60},"\"====== 菜单 ======\"",[33,162803,226],{"class":47},[33,162805,162806,162808,162810,162813],{"class":35,"line":64},[33,162807,193],{"class":72},[33,162809,133],{"class":47},[33,162811,162812],{"class":60},"\"1. 查询余额\"",[33,162814,226],{"class":47},[33,162816,162817,162819,162821,162824],{"class":35,"line":76},[33,162818,193],{"class":72},[33,162820,133],{"class":47},[33,162822,162823],{"class":60},"\"2. 存款\"",[33,162825,226],{"class":47},[33,162827,162828,162830,162832,162835],{"class":35,"line":87},[33,162829,193],{"class":72},[33,162831,133],{"class":47},[33,162833,162834],{"class":60},"\"3. 取款\"",[33,162836,226],{"class":47},[33,162838,162839,162841,162843,162846],{"class":35,"line":96},[33,162840,193],{"class":72},[33,162842,133],{"class":47},[33,162844,162845],{"class":60},"\"0. 退出\"",[33,162847,226],{"class":47},[33,162849,162850],{"class":35,"line":103},[33,162851,100],{"emptyLinePlaceholder":99},[33,162853,162854,162857,162859,162861,162863,162865],{"class":35,"line":108},[33,162855,162856],{"class":47},"    choice ",[33,162858,57],{"class":39},[33,162860,62823],{"class":72},[33,162862,133],{"class":47},[33,162864,155252],{"class":60},[33,162866,226],{"class":47},[33,162868,162869],{"class":35,"line":119},[33,162870,100],{"emptyLinePlaceholder":99},[33,162872,162873,162875,162877,162879,162881],{"class":35,"line":128},[33,162874,593],{"class":39},[33,162876,155265],{"class":47},[33,162878,5206],{"class":39},[33,162880,155270],{"class":60},[33,162882,605],{"class":47},[33,162884,162885,162887,162889,162892],{"class":35,"line":1753},[33,162886,807],{"class":72},[33,162888,133],{"class":47},[33,162890,162891],{"class":60},"\"余额为1000元\"",[33,162893,226],{"class":47},[33,162895,162896,162898,162900,162902,162904],{"class":35,"line":1763},[33,162897,41516],{"class":39},[33,162899,155265],{"class":47},[33,162901,5206],{"class":39},[33,162903,155289],{"class":60},[33,162905,605],{"class":47},[33,162907,162908,162910,162912,162915],{"class":35,"line":1775},[33,162909,807],{"class":72},[33,162911,133],{"class":47},[33,162913,162914],{"class":60},"\"存款功能\"",[33,162916,226],{"class":47},[33,162918,162919,162921,162923,162925,162927],{"class":35,"line":1780},[33,162920,41516],{"class":39},[33,162922,155265],{"class":47},[33,162924,5206],{"class":39},[33,162926,155307],{"class":60},[33,162928,605],{"class":47},[33,162930,162931,162933,162935,162938],{"class":35,"line":1785},[33,162932,807],{"class":72},[33,162934,133],{"class":47},[33,162936,162937],{"class":60},"\"取款功能\"",[33,162939,226],{"class":47},[33,162941,162942,162944,162946,162948,162950],{"class":35,"line":1940},[33,162943,41516],{"class":39},[33,162945,155265],{"class":47},[33,162947,5206],{"class":39},[33,162949,155361],{"class":60},[33,162951,605],{"class":47},[33,162953,162954,162956,162958,162960],{"class":35,"line":2183},[33,162955,807],{"class":72},[33,162957,133],{"class":47},[33,162959,155372],{"class":60},[33,162961,226],{"class":47},[33,162963,162964],{"class":35,"line":2208},[33,162965,33856],{"class":39},[33,162967,162968,162970],{"class":35,"line":2234},[33,162969,160191],{"class":39},[33,162971,605],{"class":47},[33,162973,162974,162976,162978,162980],{"class":35,"line":2239},[33,162975,807],{"class":72},[33,162977,133],{"class":47},[33,162979,155393],{"class":60},[33,162981,226],{"class":47},[19,162983,162984,162985,162987,162988,30622],{},"菜单类程序通常使用 ",[30,162986,161689],{},"，用户选择退出时 ",[30,162989,4312],{},[14,162991,162993],{"id":162992},"_414-易错点","4.14 易错点",[328,162995,162996,163001,163007,163015,163021],{},[331,162997,162998,163000],{},[30,162999,110866],{}," 循环必须更新控制变量。",[331,163002,163003,163006],{},[30,163004,163005],{},"range(1, 10)"," 不包含 10。",[331,163008,163009,163011,163012,163014],{},[30,163010,4312],{}," 结束整个循环，",[30,163013,156847],{}," 只跳过本轮。",[331,163016,163017,163018,163020],{},"嵌套循环中，",[30,163019,4312],{}," 只跳出当前所在的一层循环。",[331,163022,163023],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,163025,163027],{"id":163026},"_415-本章练习","4.15 本章练习",[328,163029,163030,163033,163036,163039,163042],{},[331,163031,163032],{},"输出 1 到 100。",[331,163034,163035],{},"计算 1 到 100 的偶数和。",[331,163037,163038],{},"输出 100 以内能被 3 和 5 同时整除的数。",[331,163040,163041],{},"编写猜数字游戏，限制最多猜 7 次。",[331,163043,163044],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2331,163046,163047],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":163049},[163050,163051,163052,163053,163054,163058,163059,163060,163061,163062,163063,163064,163065,163066,163067],{"id":161310,"depth":51,"text":161311},{"id":161340,"depth":51,"text":161341},{"id":161429,"depth":51,"text":161430},{"id":161522,"depth":51,"text":161523},{"id":161696,"depth":51,"text":161697,"children":163055},[163056,163057],{"id":161700,"depth":64,"text":161701},{"id":161764,"depth":64,"text":161765},{"id":161828,"depth":51,"text":161829},{"id":161921,"depth":51,"text":161922},{"id":162030,"depth":51,"text":162031},{"id":162225,"depth":51,"text":162226},{"id":162310,"depth":51,"text":162311},{"id":162449,"depth":51,"text":162450},{"id":162629,"depth":51,"text":162630},{"id":162778,"depth":51,"text":162779},{"id":162992,"depth":51,"text":162993},{"id":163026,"depth":51,"text":163027},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":161302,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":163074,"title":163075,"body":163076,"description":2359,"extension":2360,"meta":165074,"navigation":99,"path":165075,"seo":165076,"stem":165077,"__hash__":165078},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":163077,"toc":165054},[163078,163081,163085,163088,163091,163105,163108,163122,163126,163128,163147,163149,163194,163196,163210,163214,163288,163291,163295,163298,163357,163365,163368,163420,163423,163427,163432,163486,163494,163544,163548,163553,163561,163660,163666,163670,163675,163678,163689,163730,163743,163747,163750,163786,163789,163802,163805,163865,163869,163873,163876,163927,163931,163934,163981,163987,164053,164056,164060,164063,164177,164180,164184,164187,164293,164297,164300,164338,164341,164383,164386,164445,164448,164452,164916,164919,164923,164950,164956,165017,165021,165051],[10,163079,163075],{"id":163080},"_5-函数基础",[14,163082,163084],{"id":163083},"_51-为什么需要函数","5.1 为什么需要函数",[19,163086,163087],{},"函数用于封装一段可以重复使用的代码。",[19,163089,163090],{},"不使用函数的问题：",[328,163092,163093,163096,163099,163102],{},[331,163094,163095],{},"重复代码多。",[331,163097,163098],{},"修改逻辑时容易漏改。",[331,163100,163101],{},"主流程不清晰。",[331,163103,163104],{},"程序越写越长，难以维护。",[19,163106,163107],{},"使用函数后的好处：",[328,163109,163110,163113,163116,163119],{},[331,163111,163112],{},"提高复用性。",[331,163114,163115],{},"提高可读性。",[331,163117,163118],{},"便于调试。",[331,163120,163121],{},"便于分工。",[14,163123,163125],{"id":163124},"_52-函数定义","5.2 函数定义",[19,163127,7430],{},[23,163129,163131],{"className":25,"code":163130,"language":27,"meta":28,"style":28},"def 函数名():\n    函数体\n",[30,163132,163133,163142],{"__ignoreMap":28},[33,163134,163135,163137,163140],{"class":35,"line":36},[33,163136,40],{"class":39},[33,163138,163139],{"class":43}," 函数名",[33,163141,48],{"class":47},[33,163143,163144],{"class":35,"line":51},[33,163145,163146],{"class":47},"    函数体\n",[19,163148,17373],{},[23,163150,163152],{"className":25,"code":163151,"language":27,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[30,163153,163154,163162,163172,163182,163186,163190],{"__ignoreMap":28},[33,163155,163156,163158,163160],{"class":35,"line":36},[33,163157,40],{"class":39},[33,163159,1758],{"class":43},[33,163161,48],{"class":47},[33,163163,163164,163166,163168,163170],{"class":35,"line":51},[33,163165,193],{"class":72},[33,163167,133],{"class":47},[33,163169,1770],{"class":60},[33,163171,226],{"class":47},[33,163173,163174,163176,163178,163180],{"class":35,"line":64},[33,163175,193],{"class":72},[33,163177,133],{"class":47},[33,163179,148836],{"class":60},[33,163181,226],{"class":47},[33,163183,163184],{"class":35,"line":76},[33,163185,100],{"emptyLinePlaceholder":99},[33,163187,163188],{"class":35,"line":87},[33,163189,100],{"emptyLinePlaceholder":99},[33,163191,163192],{"class":35,"line":96},[33,163193,1788],{"class":47},[19,163195,11271],{},[328,163197,163198,163201,163204,163207],{},[331,163199,163200],{},"函数必须先定义，再调用。",[331,163202,163203],{},"函数名遵循变量命名规则。",[331,163205,163206],{},"函数体需要缩进。",[331,163208,163209],{},"函数不调用就不会执行。",[14,163211,163213],{"id":163212},"_53-函数调用","5.3 函数调用",[23,163215,163217],{"className":25,"code":163216,"language":27,"meta":28,"style":28},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[30,163218,163219,163228,163239,163250,163261,163271,163275,163279,163284],{"__ignoreMap":28},[33,163220,163221,163223,163226],{"class":35,"line":36},[33,163222,40],{"class":39},[33,163224,163225],{"class":43}," print_menu",[33,163227,48],{"class":47},[33,163229,163230,163232,163234,163237],{"class":35,"line":51},[33,163231,193],{"class":72},[33,163233,133],{"class":47},[33,163235,163236],{"class":60},"\"1. 查询\"",[33,163238,226],{"class":47},[33,163240,163241,163243,163245,163248],{"class":35,"line":64},[33,163242,193],{"class":72},[33,163244,133],{"class":47},[33,163246,163247],{"class":60},"\"2. 添加\"",[33,163249,226],{"class":47},[33,163251,163252,163254,163256,163259],{"class":35,"line":76},[33,163253,193],{"class":72},[33,163255,133],{"class":47},[33,163257,163258],{"class":60},"\"3. 删除\"",[33,163260,226],{"class":47},[33,163262,163263,163265,163267,163269],{"class":35,"line":87},[33,163264,193],{"class":72},[33,163266,133],{"class":47},[33,163268,162845],{"class":60},[33,163270,226],{"class":47},[33,163272,163273],{"class":35,"line":96},[33,163274,100],{"emptyLinePlaceholder":99},[33,163276,163277],{"class":35,"line":103},[33,163278,100],{"emptyLinePlaceholder":99},[33,163280,163281],{"class":35,"line":108},[33,163282,163283],{"class":47},"print_menu()\n",[33,163285,163286],{"class":35,"line":119},[33,163287,163283],{"class":47},[19,163289,163290],{},"函数可以多次调用，每次调用都会执行函数体。",[14,163292,163294],{"id":163293},"_54-参数","5.4 参数",[19,163296,163297],{},"参数用于向函数传递数据。",[23,163299,163301],{"className":25,"code":163300,"language":27,"meta":28,"style":28},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[30,163302,163303,163312,163332,163336,163340,163349],{"__ignoreMap":28},[33,163304,163305,163307,163309],{"class":35,"line":36},[33,163306,40],{"class":39},[33,163308,1758],{"class":43},[33,163310,163311],{"class":47},"(name):\n",[33,163313,163314,163316,163318,163320,163322,163324,163326,163328,163330],{"class":35,"line":51},[33,163315,193],{"class":72},[33,163317,133],{"class":47},[33,163319,198],{"class":39},[33,163321,159226],{"class":60},[33,163323,204],{"class":72},[33,163325,207],{"class":47},[33,163327,210],{"class":72},[33,163329,397],{"class":60},[33,163331,226],{"class":47},[33,163333,163334],{"class":35,"line":64},[33,163335,100],{"emptyLinePlaceholder":99},[33,163337,163338],{"class":35,"line":76},[33,163339,100],{"emptyLinePlaceholder":99},[33,163341,163342,163345,163347],{"class":35,"line":87},[33,163343,163344],{"class":47},"say_hello(",[33,163346,242],{"class":60},[33,163348,226],{"class":47},[33,163350,163351,163353,163355],{"class":35,"line":96},[33,163352,163344],{"class":47},[33,163354,1122],{"class":60},[33,163356,226],{"class":47},[19,163358,163359,163361,163362,163364],{},[30,163360,207],{}," 是形参，",[30,163363,242],{}," 是实参。",[19,163366,163367],{},"多个参数：",[23,163369,163371],{"className":25,"code":163370,"language":27,"meta":28,"style":28},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[30,163372,163373,163381,163393,163399,163403,163407],{"__ignoreMap":28},[33,163374,163375,163377,163379],{"class":35,"line":36},[33,163376,40],{"class":39},[33,163378,652],{"class":43},[33,163380,1226],{"class":47},[33,163382,163383,163385,163387,163389,163391],{"class":35,"line":51},[33,163384,2109],{"class":47},[33,163386,57],{"class":39},[33,163388,877],{"class":47},[33,163390,880],{"class":39},[33,163392,1052],{"class":47},[33,163394,163395,163397],{"class":35,"line":64},[33,163396,193],{"class":72},[33,163398,125],{"class":47},[33,163400,163401],{"class":35,"line":76},[33,163402,100],{"emptyLinePlaceholder":99},[33,163404,163405],{"class":35,"line":87},[33,163406,100],{"emptyLinePlaceholder":99},[33,163408,163409,163412,163414,163416,163418],{"class":35,"line":96},[33,163410,163411],{"class":47},"add(",[33,163413,1279],{"class":72},[33,163415,245],{"class":47},[33,163417,1284],{"class":72},[33,163419,226],{"class":47},[19,163421,163422],{},"调用时参数数量必须匹配。",[14,163424,163426],{"id":163425},"_55-返回值","5.5 返回值",[19,163428,163429,163431],{},[30,163430,19284],{}," 用于把函数内部的结果返回给调用者。",[23,163433,163435],{"className":25,"code":163434,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[30,163436,163437,163445,163455,163459,163463,163480],{"__ignoreMap":28},[33,163438,163439,163441,163443],{"class":35,"line":36},[33,163440,40],{"class":39},[33,163442,652],{"class":43},[33,163444,1226],{"class":47},[33,163446,163447,163449,163451,163453],{"class":35,"line":51},[33,163448,90],{"class":39},[33,163450,877],{"class":47},[33,163452,880],{"class":39},[33,163454,1052],{"class":47},[33,163456,163457],{"class":35,"line":64},[33,163458,100],{"emptyLinePlaceholder":99},[33,163460,163461],{"class":35,"line":76},[33,163462,100],{"emptyLinePlaceholder":99},[33,163464,163465,163467,163469,163472,163474,163476,163478],{"class":35,"line":87},[33,163466,111],{"class":47},[33,163468,57],{"class":39},[33,163470,163471],{"class":47}," add(",[33,163473,1279],{"class":72},[33,163475,245],{"class":47},[33,163477,1284],{"class":72},[33,163479,226],{"class":47},[33,163481,163482,163484],{"class":35,"line":96},[33,163483,122],{"class":72},[33,163485,125],{"class":47},[19,163487,163488,163489,163491,163492,30622],{},"如果函数没有写 ",[30,163490,19284],{},"，默认返回 ",[30,163493,586],{},[23,163495,163497],{"className":25,"code":163496,"language":27,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[30,163498,163499,163507,163517,163521,163525,163534],{"__ignoreMap":28},[33,163500,163501,163503,163505],{"class":35,"line":36},[33,163502,40],{"class":39},[33,163504,1758],{"class":43},[33,163506,48],{"class":47},[33,163508,163509,163511,163513,163515],{"class":35,"line":51},[33,163510,193],{"class":72},[33,163512,133],{"class":47},[33,163514,1770],{"class":60},[33,163516,226],{"class":47},[33,163518,163519],{"class":35,"line":64},[33,163520,100],{"emptyLinePlaceholder":99},[33,163522,163523],{"class":35,"line":76},[33,163524,100],{"emptyLinePlaceholder":99},[33,163526,163527,163529,163531],{"class":35,"line":87},[33,163528,111],{"class":47},[33,163530,57],{"class":39},[33,163532,163533],{"class":47}," say_hello()\n",[33,163535,163536,163538,163541],{"class":35,"line":96},[33,163537,122],{"class":72},[33,163539,163540],{"class":47},"(result)  ",[33,163542,163543],{"class":2487},"# None\n",[14,163545,163547],{"id":163546},"_56-return的作用","5.6 return的作用",[19,163549,163550,163552],{},[30,163551,19284],{}," 有两个作用：",[328,163554,163555,163558],{},[331,163556,163557],{},"返回结果。",[331,163559,163560],{},"结束函数。",[23,163562,163564],{"className":25,"code":163563,"language":27,"meta":28,"style":28},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[30,163565,163566,163576,163588,163595,163599,163611,163618,163622,163629,163633,163637,163648],{"__ignoreMap":28},[33,163567,163568,163570,163573],{"class":35,"line":36},[33,163569,40],{"class":39},[33,163571,163572],{"class":43}," check_age",[33,163574,163575],{"class":47},"(age):\n",[33,163577,163578,163580,163582,163584,163586],{"class":35,"line":51},[33,163579,593],{"class":39},[33,163581,17945],{"class":47},[33,163583,2226],{"class":39},[33,163585,1437],{"class":72},[33,163587,605],{"class":47},[33,163589,163590,163592],{"class":35,"line":64},[33,163591,1614],{"class":39},[33,163593,163594],{"class":60}," \"年龄不合法\"\n",[33,163596,163597],{"class":35,"line":76},[33,163598,100],{"emptyLinePlaceholder":99},[33,163600,163601,163603,163605,163607,163609],{"class":35,"line":87},[33,163602,593],{"class":39},[33,163604,17945],{"class":47},[33,163606,2175],{"class":39},[33,163608,2229],{"class":72},[33,163610,605],{"class":47},[33,163612,163613,163615],{"class":35,"line":96},[33,163614,1614],{"class":39},[33,163616,163617],{"class":60}," \"成年人\"\n",[33,163619,163620],{"class":35,"line":103},[33,163621,100],{"emptyLinePlaceholder":99},[33,163623,163624,163626],{"class":35,"line":108},[33,163625,90],{"class":39},[33,163627,163628],{"class":60}," \"未成年人\"\n",[33,163630,163631],{"class":35,"line":119},[33,163632,100],{"emptyLinePlaceholder":99},[33,163634,163635],{"class":35,"line":128},[33,163636,100],{"emptyLinePlaceholder":99},[33,163638,163639,163641,163644,163646],{"class":35,"line":1753},[33,163640,122],{"class":72},[33,163642,163643],{"class":47},"(check_age(",[33,163645,1284],{"class":72},[33,163647,551],{"class":47},[33,163649,163650,163652,163654,163656,163658],{"class":35,"line":1763},[33,163651,122],{"class":72},[33,163653,163643],{"class":47},[33,163655,2949],{"class":39},[33,163657,720],{"class":72},[33,163659,551],{"class":47},[19,163661,163662,163663,163665],{},"函数执行到 ",[30,163664,19284],{}," 后，后面的代码不会继续执行。",[14,163667,163669],{"id":163668},"_57-none","5.7 None",[19,163671,163672,163674],{},[30,163673,586],{}," 表示空值或没有结果。",[19,163676,163677],{},"常见使用场景：",[328,163679,163680,163683,163686],{},[331,163681,163682],{},"函数没有返回值。",[331,163684,163685],{},"变量暂时没有具体值。",[331,163687,163688],{},"表示查询不到结果。",[23,163690,163692],{"className":25,"code":163691,"language":27,"meta":28,"style":28},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[30,163693,163694,163702,163706,163719],{"__ignoreMap":28},[33,163695,163696,163698,163700],{"class":35,"line":36},[33,163697,111],{"class":47},[33,163699,57],{"class":39},[33,163701,154354],{"class":72},[33,163703,163704],{"class":35,"line":51},[33,163705,100],{"emptyLinePlaceholder":99},[33,163707,163708,163710,163713,163715,163717],{"class":35,"line":64},[33,163709,3805],{"class":39},[33,163711,163712],{"class":47}," result ",[33,163714,599],{"class":39},[33,163716,602],{"class":72},[33,163718,605],{"class":47},[33,163720,163721,163723,163725,163728],{"class":35,"line":76},[33,163722,193],{"class":72},[33,163724,133],{"class":47},[33,163726,163727],{"class":60},"\"没有数据\"",[33,163729,226],{"class":47},[19,163731,163732,163733,163735,163736,163739,163740,30622],{},"判断 ",[30,163734,586],{}," 推荐使用 ",[30,163737,163738],{},"is None","，不要写成 ",[30,163741,163742],{},"== None",[14,163744,163746],{"id":163745},"_58-函数文档字符串","5.8 函数文档字符串",[19,163748,163749],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[23,163751,163753],{"className":25,"code":163752,"language":27,"meta":28,"style":28},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[30,163754,163755,163765,163770],{"__ignoreMap":28},[33,163756,163757,163759,163762],{"class":35,"line":36},[33,163758,40],{"class":39},[33,163760,163761],{"class":43}," calculate_bmi",[33,163763,163764],{"class":47},"(weight, height):\n",[33,163766,163767],{"class":35,"line":51},[33,163768,163769],{"class":60},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[33,163771,163772,163774,163777,163779,163782,163784],{"class":35,"line":64},[33,163773,90],{"class":39},[33,163775,163776],{"class":47}," weight ",[33,163778,3001],{"class":39},[33,163780,163781],{"class":47}," height ",[33,163783,787],{"class":39},[33,163785,49945],{"class":72},[19,163787,163788],{},"查看说明：",[23,163790,163792],{"className":25,"code":163791,"language":27,"meta":28,"style":28},"help(calculate_bmi)\n",[30,163793,163794],{"__ignoreMap":28},[33,163795,163796,163799],{"class":35,"line":36},[33,163797,163798],{"class":72},"help",[33,163800,163801],{"class":47},"(calculate_bmi)\n",[19,163803,163804],{},"较完整的写法：",[23,163806,163808],{"className":25,"code":163807,"language":27,"meta":28,"style":28},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[30,163809,163810,163818,163823,163828,163832,163837,163842,163847,163851],{"__ignoreMap":28},[33,163811,163812,163814,163816],{"class":35,"line":36},[33,163813,40],{"class":39},[33,163815,163761],{"class":43},[33,163817,163764],{"class":47},[33,163819,163820],{"class":35,"line":51},[33,163821,163822],{"class":60},"    \"\"\"\n",[33,163824,163825],{"class":35,"line":64},[33,163826,163827],{"class":60},"    计算BMI。\n",[33,163829,163830],{"class":35,"line":76},[33,163831,100],{"emptyLinePlaceholder":99},[33,163833,163834],{"class":35,"line":87},[33,163835,163836],{"class":60},"    :param weight: 体重，单位kg\n",[33,163838,163839],{"class":35,"line":96},[33,163840,163841],{"class":60},"    :param height: 身高，单位m\n",[33,163843,163844],{"class":35,"line":103},[33,163845,163846],{"class":60},"    :return: BMI数值\n",[33,163848,163849],{"class":35,"line":108},[33,163850,163822],{"class":60},[33,163852,163853,163855,163857,163859,163861,163863],{"class":35,"line":119},[33,163854,90],{"class":39},[33,163856,163776],{"class":47},[33,163858,3001],{"class":39},[33,163860,163781],{"class":47},[33,163862,787],{"class":39},[33,163864,49945],{"class":72},[14,163866,163868],{"id":163867},"_59-变量作用域","5.9 变量作用域",[631,163870,163872],{"id":163871},"_591-局部变量","5.9.1 局部变量",[19,163874,163875],{},"在函数内部定义的变量，只能在函数内部使用。",[23,163877,163879],{"className":25,"code":163878,"language":27,"meta":28,"style":28},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[30,163880,163881,163890,163898,163904,163908,163912,163917],{"__ignoreMap":28},[33,163882,163883,163885,163888],{"class":35,"line":36},[33,163884,40],{"class":39},[33,163886,163887],{"class":43}," test",[33,163889,48],{"class":47},[33,163891,163892,163894,163896],{"class":35,"line":51},[33,163893,47816],{"class":47},[33,163895,57],{"class":39},[33,163897,60646],{"class":72},[33,163899,163900,163902],{"class":35,"line":64},[33,163901,193],{"class":72},[33,163903,2445],{"class":47},[33,163905,163906],{"class":35,"line":76},[33,163907,100],{"emptyLinePlaceholder":99},[33,163909,163910],{"class":35,"line":87},[33,163911,100],{"emptyLinePlaceholder":99},[33,163913,163914],{"class":35,"line":96},[33,163915,163916],{"class":47},"test()\n",[33,163918,163919,163921,163924],{"class":35,"line":103},[33,163920,122],{"class":72},[33,163922,163923],{"class":47},"(num)  ",[33,163925,163926],{"class":2487},"# 报错\n",[631,163928,163930],{"id":163929},"_592-全局变量","5.9.2 全局变量",[19,163932,163933],{},"在函数外部定义的变量，可以在函数内部读取。",[23,163935,163937],{"className":25,"code":163936,"language":27,"meta":28,"style":28},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[30,163938,163939,163947,163951,163955,163963,163969,163973,163977],{"__ignoreMap":28},[33,163940,163941,163943,163945],{"class":35,"line":36},[33,163942,148734],{"class":47},[33,163944,57],{"class":39},[33,163946,61],{"class":60},[33,163948,163949],{"class":35,"line":51},[33,163950,100],{"emptyLinePlaceholder":99},[33,163952,163953],{"class":35,"line":64},[33,163954,100],{"emptyLinePlaceholder":99},[33,163956,163957,163959,163961],{"class":35,"line":76},[33,163958,40],{"class":39},[33,163960,1758],{"class":43},[33,163962,48],{"class":47},[33,163964,163965,163967],{"class":35,"line":87},[33,163966,193],{"class":72},[33,163968,152848],{"class":47},[33,163970,163971],{"class":35,"line":96},[33,163972,100],{"emptyLinePlaceholder":99},[33,163974,163975],{"class":35,"line":103},[33,163976,100],{"emptyLinePlaceholder":99},[33,163978,163979],{"class":35,"line":108},[33,163980,1788],{"class":47},[19,163982,163983,163984,30622],{},"如果要在函数内部修改全局变量，需要 ",[30,163985,163986],{},"global",[23,163988,163990],{"className":25,"code":163989,"language":27,"meta":28,"style":28},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[30,163991,163992,164000,164004,164008,164017,164025,164033,164037,164041,164046],{"__ignoreMap":28},[33,163993,163994,163996,163998],{"class":35,"line":36},[33,163995,148888],{"class":47},[33,163997,57],{"class":39},[33,163999,670],{"class":72},[33,164001,164002],{"class":35,"line":51},[33,164003,100],{"emptyLinePlaceholder":99},[33,164005,164006],{"class":35,"line":64},[33,164007,100],{"emptyLinePlaceholder":99},[33,164009,164010,164012,164015],{"class":35,"line":76},[33,164011,40],{"class":39},[33,164013,164014],{"class":43}," add_count",[33,164016,48],{"class":47},[33,164018,164019,164022],{"class":35,"line":87},[33,164020,164021],{"class":39},"    global",[33,164023,164024],{"class":47}," count\n",[33,164026,164027,164029,164031],{"class":35,"line":96},[33,164028,161600],{"class":47},[33,164030,692],{"class":39},[33,164032,57917],{"class":72},[33,164034,164035],{"class":35,"line":103},[33,164036,100],{"emptyLinePlaceholder":99},[33,164038,164039],{"class":35,"line":108},[33,164040,100],{"emptyLinePlaceholder":99},[33,164042,164043],{"class":35,"line":119},[33,164044,164045],{"class":47},"add_count()\n",[33,164047,164048,164050],{"class":35,"line":128},[33,164049,122],{"class":72},[33,164051,164052],{"class":47},"(count)\n",[19,164054,164055],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,164057,164059],{"id":164058},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,164061,164062],{},"一个函数中可以调用另一个函数。",[23,164064,164066],{"className":25,"code":164065,"language":27,"meta":28,"style":28},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[30,164067,164068,164077,164091,164095,164099,164107,164112,164132,164153,164157,164161,164165],{"__ignoreMap":28},[33,164069,164070,164072,164075],{"class":35,"line":36},[33,164071,40],{"class":39},[33,164073,164074],{"class":43}," print_line",[33,164076,48],{"class":47},[33,164078,164079,164081,164083,164085,164087,164089],{"class":35,"line":51},[33,164080,193],{"class":72},[33,164082,133],{"class":47},[33,164084,34709],{"class":60},[33,164086,8764],{"class":39},[33,164088,80876],{"class":72},[33,164090,226],{"class":47},[33,164092,164093],{"class":35,"line":64},[33,164094,100],{"emptyLinePlaceholder":99},[33,164096,164097],{"class":35,"line":76},[33,164098,100],{"emptyLinePlaceholder":99},[33,164100,164101,164103,164105],{"class":35,"line":87},[33,164102,40],{"class":39},[33,164104,782],{"class":43},[33,164106,188],{"class":47},[33,164108,164109],{"class":35,"line":96},[33,164110,164111],{"class":47},"    print_line()\n",[33,164113,164114,164116,164118,164120,164122,164124,164126,164128,164130],{"class":35,"line":103},[33,164115,193],{"class":72},[33,164117,133],{"class":47},[33,164119,198],{"class":39},[33,164121,158854],{"class":60},[33,164123,204],{"class":72},[33,164125,207],{"class":47},[33,164127,210],{"class":72},[33,164129,397],{"class":60},[33,164131,226],{"class":47},[33,164133,164134,164136,164138,164140,164143,164145,164147,164149,164151],{"class":35,"line":108},[33,164135,193],{"class":72},[33,164137,133],{"class":47},[33,164139,198],{"class":39},[33,164141,164142],{"class":60},"\"年龄:",[33,164144,204],{"class":72},[33,164146,218],{"class":47},[33,164148,210],{"class":72},[33,164150,397],{"class":60},[33,164152,226],{"class":47},[33,164154,164155],{"class":35,"line":119},[33,164156,164111],{"class":47},[33,164158,164159],{"class":35,"line":128},[33,164160,100],{"emptyLinePlaceholder":99},[33,164162,164163],{"class":35,"line":1753},[33,164164,100],{"emptyLinePlaceholder":99},[33,164166,164167,164169,164171,164173,164175],{"class":35,"line":1763},[33,164168,823],{"class":47},[33,164170,242],{"class":60},[33,164172,245],{"class":47},[33,164174,248],{"class":72},[33,164176,226],{"class":47},[19,164178,164179],{},"这种方式可以把小功能组合成大功能。",[14,164181,164183],{"id":164182},"_511-参数检查","5.11 参数检查",[19,164185,164186],{},"函数内部可以检查参数是否合法。",[23,164188,164190],{"className":25,"code":164189,"language":27,"meta":28,"style":28},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[30,164191,164192,164201,164213,164219,164229,164233,164237,164254,164258,164270,164281,164287],{"__ignoreMap":28},[33,164193,164194,164196,164199],{"class":35,"line":36},[33,164195,40],{"class":39},[33,164197,164198],{"class":43}," divide",[33,164200,1226],{"class":47},[33,164202,164203,164205,164207,164209,164211],{"class":35,"line":51},[33,164204,593],{"class":39},[33,164206,883],{"class":47},[33,164208,5206],{"class":39},[33,164210,1437],{"class":72},[33,164212,605],{"class":47},[33,164214,164215,164217],{"class":35,"line":64},[33,164216,1614],{"class":39},[33,164218,154354],{"class":72},[33,164220,164221,164223,164225,164227],{"class":35,"line":76},[33,164222,90],{"class":39},[33,164224,877],{"class":47},[33,164226,3001],{"class":39},[33,164228,1052],{"class":47},[33,164230,164231],{"class":35,"line":87},[33,164232,100],{"emptyLinePlaceholder":99},[33,164234,164235],{"class":35,"line":96},[33,164236,100],{"emptyLinePlaceholder":99},[33,164238,164239,164241,164243,164246,164248,164250,164252],{"class":35,"line":103},[33,164240,111],{"class":47},[33,164242,57],{"class":39},[33,164244,164245],{"class":47}," divide(",[33,164247,1279],{"class":72},[33,164249,245],{"class":47},[33,164251,2617],{"class":72},[33,164253,226],{"class":47},[33,164255,164256],{"class":35,"line":108},[33,164257,100],{"emptyLinePlaceholder":99},[33,164259,164260,164262,164264,164266,164268],{"class":35,"line":119},[33,164261,3805],{"class":39},[33,164263,163712],{"class":47},[33,164265,599],{"class":39},[33,164267,602],{"class":72},[33,164269,605],{"class":47},[33,164271,164272,164274,164276,164279],{"class":35,"line":128},[33,164273,193],{"class":72},[33,164275,133],{"class":47},[33,164277,164278],{"class":60},"\"除数不能为0\"",[33,164280,226],{"class":47},[33,164282,164283,164285],{"class":35,"line":1753},[33,164284,3963],{"class":39},[33,164286,605],{"class":47},[33,164288,164289,164291],{"class":35,"line":1763},[33,164290,193],{"class":72},[33,164292,125],{"class":47},[14,164294,164296],{"id":164295},"_512-类型提示","5.12 类型提示",[19,164298,164299],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[23,164301,164303],{"className":25,"code":164302,"language":27,"meta":28,"style":28},"def add(a: int, b: int) -> int:\n    return a + b\n",[30,164304,164305,164328],{"__ignoreMap":28},[33,164306,164307,164309,164311,164314,164316,164319,164321,164324,164326],{"class":35,"line":36},[33,164308,40],{"class":39},[33,164310,652],{"class":43},[33,164312,164313],{"class":47},"(a: ",[33,164315,2436],{"class":72},[33,164317,164318],{"class":47},", b: ",[33,164320,2436],{"class":72},[33,164322,164323],{"class":47},") -> ",[33,164325,2436],{"class":72},[33,164327,605],{"class":47},[33,164329,164330,164332,164334,164336],{"class":35,"line":51},[33,164331,90],{"class":39},[33,164333,877],{"class":47},[33,164335,880],{"class":39},[33,164337,1052],{"class":47},[19,164339,164340],{},"字符串参数：",[23,164342,164344],{"className":25,"code":164343,"language":27,"meta":28,"style":28},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[30,164345,164346,164363],{"__ignoreMap":28},[33,164347,164348,164350,164352,164355,164357,164359,164361],{"class":35,"line":36},[33,164349,40],{"class":39},[33,164351,1758],{"class":43},[33,164353,164354],{"class":47},"(name: ",[33,164356,3576],{"class":72},[33,164358,164323],{"class":47},[33,164360,586],{"class":72},[33,164362,605],{"class":47},[33,164364,164365,164367,164369,164371,164373,164375,164377,164379,164381],{"class":35,"line":51},[33,164366,193],{"class":72},[33,164368,133],{"class":47},[33,164370,198],{"class":39},[33,164372,159226],{"class":60},[33,164374,204],{"class":72},[33,164376,207],{"class":47},[33,164378,210],{"class":72},[33,164380,397],{"class":60},[33,164382,226],{"class":47},[19,164384,164385],{},"列表参数：",[23,164387,164389],{"className":25,"code":164388,"language":27,"meta":28,"style":28},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[30,164390,164391,164410,164418,164430,164439],{"__ignoreMap":28},[33,164392,164393,164395,164398,164401,164403,164406,164408],{"class":35,"line":36},[33,164394,40],{"class":39},[33,164396,164397],{"class":43}," get_total",[33,164399,164400],{"class":47},"(numbers: list[",[33,164402,2436],{"class":72},[33,164404,164405],{"class":47},"]) -> ",[33,164407,2436],{"class":72},[33,164409,605],{"class":47},[33,164411,164412,164414,164416],{"class":35,"line":51},[33,164413,665],{"class":47},[33,164415,57],{"class":39},[33,164417,670],{"class":72},[33,164419,164420,164422,164425,164427],{"class":35,"line":64},[33,164421,675],{"class":39},[33,164423,164424],{"class":47}," number ",[33,164426,681],{"class":39},[33,164428,164429],{"class":47}," numbers:\n",[33,164431,164432,164434,164436],{"class":35,"line":76},[33,164433,689],{"class":47},[33,164435,692],{"class":39},[33,164437,164438],{"class":47}," number\n",[33,164440,164441,164443],{"class":35,"line":87},[33,164442,90],{"class":39},[33,164444,702],{"class":47},[19,164446,164447],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,164449,164451],{"id":164450},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[23,164453,164455],{"className":25,"code":164454,"language":27,"meta":28,"style":28},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[30,164456,164457,164467,164471,164475,164483,164494,164504,164514,164524,164534,164538,164542,164551,164573,164577,164581,164590,164596,164616,164628,164639,164643,164652,164663,164668,164672,164676,164685,164691,164710,164722,164732,164736,164747,164757,164761,164769,164780,164784,164788,164792,164800,164805,164819,164823,164835,164840,164852,164857,164869,164874,164886,164896,164900,164906],{"__ignoreMap":28},[33,164458,164459,164462,164464],{"class":35,"line":36},[33,164460,164461],{"class":47},"balance ",[33,164463,57],{"class":39},[33,164465,164466],{"class":72}," 1000\n",[33,164468,164469],{"class":35,"line":51},[33,164470,100],{"emptyLinePlaceholder":99},[33,164472,164473],{"class":35,"line":64},[33,164474,100],{"emptyLinePlaceholder":99},[33,164476,164477,164479,164481],{"class":35,"line":76},[33,164478,40],{"class":39},[33,164480,154217],{"class":43},[33,164482,48],{"class":47},[33,164484,164485,164487,164489,164492],{"class":35,"line":87},[33,164486,193],{"class":72},[33,164488,133],{"class":47},[33,164490,164491],{"class":60},"\"====== ATM ======\"",[33,164493,226],{"class":47},[33,164495,164496,164498,164500,164502],{"class":35,"line":96},[33,164497,193],{"class":72},[33,164499,133],{"class":47},[33,164501,162812],{"class":60},[33,164503,226],{"class":47},[33,164505,164506,164508,164510,164512],{"class":35,"line":103},[33,164507,193],{"class":72},[33,164509,133],{"class":47},[33,164511,162823],{"class":60},[33,164513,226],{"class":47},[33,164515,164516,164518,164520,164522],{"class":35,"line":108},[33,164517,193],{"class":72},[33,164519,133],{"class":47},[33,164521,162834],{"class":60},[33,164523,226],{"class":47},[33,164525,164526,164528,164530,164532],{"class":35,"line":119},[33,164527,193],{"class":72},[33,164529,133],{"class":47},[33,164531,162845],{"class":60},[33,164533,226],{"class":47},[33,164535,164536],{"class":35,"line":128},[33,164537,100],{"emptyLinePlaceholder":99},[33,164539,164540],{"class":35,"line":1753},[33,164541,100],{"emptyLinePlaceholder":99},[33,164543,164544,164546,164549],{"class":35,"line":1763},[33,164545,40],{"class":39},[33,164547,164548],{"class":43}," show_balance",[33,164550,48],{"class":47},[33,164552,164553,164555,164557,164559,164562,164564,164567,164569,164571],{"class":35,"line":1775},[33,164554,193],{"class":72},[33,164556,133],{"class":47},[33,164558,198],{"class":39},[33,164560,164561],{"class":60},"\"当前余额:",[33,164563,204],{"class":72},[33,164565,164566],{"class":47},"balance",[33,164568,210],{"class":72},[33,164570,159184],{"class":60},[33,164572,226],{"class":47},[33,164574,164575],{"class":35,"line":1780},[33,164576,100],{"emptyLinePlaceholder":99},[33,164578,164579],{"class":35,"line":1785},[33,164580,100],{"emptyLinePlaceholder":99},[33,164582,164583,164585,164588],{"class":35,"line":1940},[33,164584,40],{"class":39},[33,164586,164587],{"class":43}," save_money",[33,164589,48],{"class":47},[33,164591,164592,164594],{"class":35,"line":2183},[33,164593,164021],{"class":39},[33,164595,152287],{"class":47},[33,164597,164598,164601,164603,164605,164607,164609,164611,164614],{"class":35,"line":2208},[33,164599,164600],{"class":47},"    money ",[33,164602,57],{"class":39},[33,164604,112000],{"class":72},[33,164606,133],{"class":47},[33,164608,56040],{"class":72},[33,164610,133],{"class":47},[33,164612,164613],{"class":60},"\"请输入存款金额:\"",[33,164615,551],{"class":47},[33,164617,164618,164620,164622,164624,164626],{"class":35,"line":2234},[33,164619,593],{"class":39},[33,164621,152330],{"class":47},[33,164623,3861],{"class":39},[33,164625,1437],{"class":72},[33,164627,605],{"class":47},[33,164629,164630,164632,164634,164637],{"class":35,"line":2239},[33,164631,807],{"class":72},[33,164633,133],{"class":47},[33,164635,164636],{"class":60},"\"金额必须大于0\"",[33,164638,226],{"class":47},[33,164640,164641],{"class":35,"line":2247},[33,164642,154543],{"class":39},[33,164644,164645,164648,164650],{"class":35,"line":2255},[33,164646,164647],{"class":47},"    balance ",[33,164649,692],{"class":39},[33,164651,152363],{"class":47},[33,164653,164654,164656,164658,164661],{"class":35,"line":3992},[33,164655,193],{"class":72},[33,164657,133],{"class":47},[33,164659,164660],{"class":60},"\"存款成功\"",[33,164662,226],{"class":47},[33,164664,164665],{"class":35,"line":4009},[33,164666,164667],{"class":47},"    show_balance()\n",[33,164669,164670],{"class":35,"line":4014},[33,164671,100],{"emptyLinePlaceholder":99},[33,164673,164674],{"class":35,"line":4019},[33,164675,100],{"emptyLinePlaceholder":99},[33,164677,164678,164680,164683],{"class":35,"line":4024},[33,164679,40],{"class":39},[33,164681,164682],{"class":43}," withdraw_money",[33,164684,48],{"class":47},[33,164686,164687,164689],{"class":35,"line":4038},[33,164688,164021],{"class":39},[33,164690,152287],{"class":47},[33,164692,164693,164695,164697,164699,164701,164703,164705,164708],{"class":35,"line":4043},[33,164694,164600],{"class":47},[33,164696,57],{"class":39},[33,164698,112000],{"class":72},[33,164700,133],{"class":47},[33,164702,56040],{"class":72},[33,164704,133],{"class":47},[33,164706,164707],{"class":60},"\"请输入取款金额:\"",[33,164709,551],{"class":47},[33,164711,164712,164714,164716,164718,164720],{"class":35,"line":4834},[33,164713,593],{"class":39},[33,164715,152330],{"class":47},[33,164717,3861],{"class":39},[33,164719,1437],{"class":72},[33,164721,605],{"class":47},[33,164723,164724,164726,164728,164730],{"class":35,"line":4848},[33,164725,807],{"class":72},[33,164727,133],{"class":47},[33,164729,164636],{"class":60},[33,164731,226],{"class":47},[33,164733,164734],{"class":35,"line":4856},[33,164735,154543],{"class":39},[33,164737,164738,164740,164742,164744],{"class":35,"line":4861},[33,164739,593],{"class":39},[33,164741,152330],{"class":47},[33,164743,3367],{"class":39},[33,164745,164746],{"class":47}," balance:\n",[33,164748,164749,164751,164753,164755],{"class":35,"line":4867},[33,164750,807],{"class":72},[33,164752,133],{"class":47},[33,164754,152425],{"class":60},[33,164756,226],{"class":47},[33,164758,164759],{"class":35,"line":4873},[33,164760,154543],{"class":39},[33,164762,164763,164765,164767],{"class":35,"line":4878},[33,164764,164647],{"class":47},[33,164766,152440],{"class":39},[33,164768,152363],{"class":47},[33,164770,164771,164773,164775,164778],{"class":35,"line":10194},[33,164772,193],{"class":72},[33,164774,133],{"class":47},[33,164776,164777],{"class":60},"\"取款成功\"",[33,164779,226],{"class":47},[33,164781,164782],{"class":35,"line":10218},[33,164783,164667],{"class":47},[33,164785,164786],{"class":35,"line":10223},[33,164787,100],{"emptyLinePlaceholder":99},[33,164789,164790],{"class":35,"line":10229},[33,164791,100],{"emptyLinePlaceholder":99},[33,164793,164794,164796,164798],{"class":35,"line":10256},[33,164795,110866],{"class":39},[33,164797,97500],{"class":72},[33,164799,605],{"class":47},[33,164801,164802],{"class":35,"line":10261},[33,164803,164804],{"class":47},"    show_menu()\n",[33,164806,164807,164809,164811,164813,164815,164817],{"class":35,"line":10267},[33,164808,162856],{"class":47},[33,164810,57],{"class":39},[33,164812,62823],{"class":72},[33,164814,133],{"class":47},[33,164816,155252],{"class":60},[33,164818,226],{"class":47},[33,164820,164821],{"class":35,"line":10279},[33,164822,100],{"emptyLinePlaceholder":99},[33,164824,164825,164827,164829,164831,164833],{"class":35,"line":10291},[33,164826,593],{"class":39},[33,164828,155265],{"class":47},[33,164830,5206],{"class":39},[33,164832,155270],{"class":60},[33,164834,605],{"class":47},[33,164836,164837],{"class":35,"line":10303},[33,164838,164839],{"class":47},"        show_balance()\n",[33,164841,164842,164844,164846,164848,164850],{"class":35,"line":11961},[33,164843,41516],{"class":39},[33,164845,155265],{"class":47},[33,164847,5206],{"class":39},[33,164849,155289],{"class":60},[33,164851,605],{"class":47},[33,164853,164854],{"class":35,"line":11986},[33,164855,164856],{"class":47},"        save_money()\n",[33,164858,164859,164861,164863,164865,164867],{"class":35,"line":12009},[33,164860,41516],{"class":39},[33,164862,155265],{"class":47},[33,164864,5206],{"class":39},[33,164866,155307],{"class":60},[33,164868,605],{"class":47},[33,164870,164871],{"class":35,"line":12033},[33,164872,164873],{"class":47},"        withdraw_money()\n",[33,164875,164876,164878,164880,164882,164884],{"class":35,"line":12038},[33,164877,41516],{"class":39},[33,164879,155265],{"class":47},[33,164881,5206],{"class":39},[33,164883,155361],{"class":60},[33,164885,605],{"class":47},[33,164887,164888,164890,164892,164894],{"class":35,"line":12043},[33,164889,807],{"class":72},[33,164891,133],{"class":47},[33,164893,155372],{"class":60},[33,164895,226],{"class":47},[33,164897,164898],{"class":35,"line":12048},[33,164899,33856],{"class":39},[33,164901,164902,164904],{"class":35,"line":12057},[33,164903,160191],{"class":39},[33,164905,605],{"class":47},[33,164907,164908,164910,164912,164914],{"class":35,"line":12062},[33,164909,807],{"class":72},[33,164911,133],{"class":47},[33,164913,155393],{"class":60},[33,164915,226],{"class":47},[19,164917,164918],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164920,164922],{"id":164921},"_514-易错点","5.14 易错点",[328,164924,164925,164928,164931,164936,164941,164944],{},[331,164926,164927],{},"函数定义后必须调用才会执行。",[331,164929,164930],{},"函数名后面有括号才是调用。",[331,164932,164933,164935],{},[30,164934,19284],{}," 后面的代码不会执行。",[331,164937,164938,164939,30622],{},"没有返回值的函数默认返回 ",[30,164940,586],{},[331,164942,164943],{},"局部变量不能在函数外部访问。",[331,164945,164946,164947,164949],{},"不要滥用 ",[30,164948,163986],{},"，更好的方式是让函数返回新值。",[19,164951,164952,164953,164955],{},"例如不用 ",[30,164954,163986],{}," 改写存款：",[23,164957,164959],{"className":25,"code":164958,"language":27,"meta":28,"style":28},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[30,164960,164961,164970,164981,164985,164989,164997,165010],{"__ignoreMap":28},[33,164962,164963,164965,164967],{"class":35,"line":36},[33,164964,40],{"class":39},[33,164966,164587],{"class":43},[33,164968,164969],{"class":47},"(balance, money):\n",[33,164971,164972,164974,164977,164979],{"class":35,"line":51},[33,164973,90],{"class":39},[33,164975,164976],{"class":47}," balance ",[33,164978,880],{"class":39},[33,164980,152363],{"class":47},[33,164982,164983],{"class":35,"line":64},[33,164984,100],{"emptyLinePlaceholder":99},[33,164986,164987],{"class":35,"line":76},[33,164988,100],{"emptyLinePlaceholder":99},[33,164990,164991,164993,164995],{"class":35,"line":87},[33,164992,164461],{"class":47},[33,164994,57],{"class":39},[33,164996,164466],{"class":72},[33,164998,164999,165001,165003,165006,165008],{"class":35,"line":96},[33,165000,164461],{"class":47},[33,165002,57],{"class":39},[33,165004,165005],{"class":47}," save_money(balance, ",[33,165007,3983],{"class":72},[33,165009,226],{"class":47},[33,165011,165012,165014],{"class":35,"line":103},[33,165013,122],{"class":72},[33,165015,165016],{"class":47},"(balance)\n",[14,165018,165020],{"id":165019},"_515-本章练习","5.15 本章练习",[328,165022,165023,165030,165036,165042,165048],{},[331,165024,165025,165026,165029],{},"定义函数 ",[30,165027,165028],{},"print_student(name, age)","，输出学生信息。",[331,165031,165025,165032,165035],{},[30,165033,165034],{},"get_max(a, b, c)","，返回三个数中的最大值。",[331,165037,165025,165038,165041],{},[30,165039,165040],{},"is_even(num)","，判断一个数是否为偶数。",[331,165043,165025,165044,165047],{},[30,165045,165046],{},"calculate_bmi(weight, height)","，返回 BMI。",[331,165049,165050],{},"把第 4 章的菜单程序拆分成多个函数。",[2331,165052,165053],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":28,"searchDepth":51,"depth":51,"links":165055},[165056,165057,165058,165059,165060,165061,165062,165063,165064,165068,165069,165070,165071,165072,165073],{"id":163083,"depth":51,"text":163084},{"id":163124,"depth":51,"text":163125},{"id":163212,"depth":51,"text":163213},{"id":163293,"depth":51,"text":163294},{"id":163425,"depth":51,"text":163426},{"id":163546,"depth":51,"text":163547},{"id":163668,"depth":51,"text":163669},{"id":163745,"depth":51,"text":163746},{"id":163867,"depth":51,"text":163868,"children":165065},[165066,165067],{"id":163871,"depth":64,"text":163872},{"id":163929,"depth":64,"text":163930},{"id":164058,"depth":51,"text":164059},{"id":164182,"depth":51,"text":164183},{"id":164295,"depth":51,"text":164296},{"id":164450,"depth":51,"text":164451},{"id":164921,"depth":51,"text":164922},{"id":165019,"depth":51,"text":165020},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":163075,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":165080,"title":165081,"body":165082,"description":2359,"extension":2360,"meta":168117,"navigation":99,"path":168118,"seo":168119,"stem":168120,"__hash__":168121},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":165083,"toc":168098},[165084,165087,165091,165094,165097,165201,165204,165208,165211,165291,165294,165298,165301,165361,165364,165400,165403,165418,165422,165495,165498,165553,165556,165626,165629,165712,165722,165779,165783,165828,165831,165857,165860,165966,165970,165973,166015,166018,166082,166085,166089,166092,166153,166156,166186,166189,166227,166231,166234,166243,166246,166369,166372,166413,166417,166420,166431,166471,166474,166489,166494,166497,166564,166567,166657,166661,166664,166712,166715,166742,166744,166774,166777,166797,166800,166831,166834,166867,166871,166874,166898,166901,166925,166928,166950,166954,166957,167087,167090,167169,167172,167247,167251,167254,167304,167307,167349,167352,167376,167378,167401,167404,167459,167462,167527,167531,167534,167537,167575,167578,167631,167634,167680,167683,167716,167719,167723,168041,168045,168074,168078,168095],[10,165085,165081],{"id":165086},"_6-数据容器",[14,165088,165090],{"id":165089},"_61-什么是数据容器","6.1 什么是数据容器",[19,165092,165093],{},"数据容器用于一次保存多个数据。",[19,165095,165096],{},"常见容器：",[2563,165098,165099,165116],{},[2566,165100,165101],{},[2569,165102,165103,165105,165108,165111,165114],{},[2572,165104,28010],{},[2572,165106,165107],{},"是否有序",[2572,165109,165110],{},"是否可变",[2572,165112,165113],{},"是否允许重复",[2572,165115,29729],{},[2610,165117,165118,165136,165152,165167,165184],{},[2569,165119,165120,165123,165126,165129,165132],{},[2615,165121,165122],{},"list列表",[2615,165124,165125],{},"有序",[2615,165127,165128],{},"可变",[2615,165130,165131],{},"允许",[2615,165133,165134],{},[30,165135,157432],{},[2569,165137,165138,165141,165143,165146,165148],{},[2615,165139,165140],{},"tuple元组",[2615,165142,165125],{},[2615,165144,165145],{},"不可变",[2615,165147,165131],{},[2615,165149,165150],{},[30,165151,157445],{},[2569,165153,165154,165157,165159,165161,165163],{},[2615,165155,165156],{},"str字符串",[2615,165158,165125],{},[2615,165160,165145],{},[2615,165162,165131],{},[2615,165164,165165],{},[30,165166,158055],{},[2569,165168,165169,165172,165175,165177,165180],{},[2615,165170,165171],{},"set集合",[2615,165173,165174],{},"无序",[2615,165176,165128],{},[2615,165178,165179],{},"不允许",[2615,165181,165182],{},[30,165183,157470],{},[2569,165185,165186,165189,165191,165193,165196],{},[2615,165187,165188],{},"dict字典",[2615,165190,165125],{},[2615,165192,165128],{},[2615,165194,165195],{},"key不允许重复",[2615,165197,165198],{},[30,165199,165200],{},"{\"name\": \"小明\"}",[19,165202,165203],{},"Python 3.7 之后，字典保持插入顺序。",[14,165205,165207],{"id":165206},"_62-列表list","6.2 列表list",[19,165209,165210],{},"列表用于保存一组有顺序的数据。",[23,165212,165214],{"className":25,"code":165213,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[30,165215,165216,165236,165261,165282],{"__ignoreMap":28},[33,165217,165218,165220,165222,165224,165226,165228,165230,165232,165234],{"class":35,"line":36},[33,165219,162544],{"class":47},[33,165221,57],{"class":39},[33,165223,906],{"class":47},[33,165225,242],{"class":60},[33,165227,245],{"class":47},[33,165229,1122],{"class":60},[33,165231,245],{"class":47},[33,165233,1144],{"class":60},[33,165235,919],{"class":47},[33,165237,165238,165241,165243,165245,165247,165249,165251,165253,165255,165257,165259],{"class":35,"line":51},[33,165239,165240],{"class":47},"numbers ",[33,165242,57],{"class":39},[33,165244,906],{"class":47},[33,165246,720],{"class":72},[33,165248,245],{"class":47},[33,165250,725],{"class":72},[33,165252,245],{"class":47},[33,165254,730],{"class":72},[33,165256,245],{"class":47},[33,165258,753],{"class":72},[33,165260,919],{"class":47},[33,165262,165263,165266,165268,165270,165272,165274,165276,165278,165280],{"class":35,"line":64},[33,165264,165265],{"class":47},"mixed ",[33,165267,57],{"class":39},[33,165269,906],{"class":47},[33,165271,242],{"class":60},[33,165273,245],{"class":47},[33,165275,248],{"class":72},[33,165277,245],{"class":47},[33,165279,1190],{"class":72},[33,165281,919],{"class":47},[33,165283,165284,165287,165289],{"class":35,"line":76},[33,165285,165286],{"class":47},"empty ",[33,165288,57],{"class":39},[33,165290,615],{"class":47},[19,165292,165293],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,165295,165297],{"id":165296},"_63-列表索引","6.3 列表索引",[19,165299,165300],{},"正向索引从 0 开始：",[23,165302,165304],{"className":25,"code":165303,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[30,165305,165306,165326,165330,165341,165351],{"__ignoreMap":28},[33,165307,165308,165310,165312,165314,165316,165318,165320,165322,165324],{"class":35,"line":36},[33,165309,162544],{"class":47},[33,165311,57],{"class":39},[33,165313,906],{"class":47},[33,165315,242],{"class":60},[33,165317,245],{"class":47},[33,165319,1122],{"class":60},[33,165321,245],{"class":47},[33,165323,1144],{"class":60},[33,165325,919],{"class":47},[33,165327,165328],{"class":35,"line":51},[33,165329,100],{"emptyLinePlaceholder":99},[33,165331,165332,165334,165337,165339],{"class":35,"line":64},[33,165333,122],{"class":72},[33,165335,165336],{"class":47},"(names[",[33,165338,2617],{"class":72},[33,165340,6907],{"class":47},[33,165342,165343,165345,165347,165349],{"class":35,"line":76},[33,165344,122],{"class":72},[33,165346,165336],{"class":47},[33,165348,720],{"class":72},[33,165350,6907],{"class":47},[33,165352,165353,165355,165357,165359],{"class":35,"line":87},[33,165354,122],{"class":72},[33,165356,165336],{"class":47},[33,165358,725],{"class":72},[33,165360,6907],{"class":47},[19,165362,165363],{},"反向索引从 -1 开始：",[23,165365,165367],{"className":25,"code":165366,"language":27,"meta":28,"style":28},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[30,165368,165369,165385],{"__ignoreMap":28},[33,165370,165371,165373,165375,165377,165379,165382],{"class":35,"line":36},[33,165372,122],{"class":72},[33,165374,165336],{"class":47},[33,165376,2949],{"class":39},[33,165378,720],{"class":72},[33,165380,165381],{"class":47},"])  ",[33,165383,165384],{"class":2487},"# 小刚\n",[33,165386,165387,165389,165391,165393,165395,165397],{"class":35,"line":51},[33,165388,122],{"class":72},[33,165390,165336],{"class":47},[33,165392,2949],{"class":39},[33,165394,725],{"class":72},[33,165396,165381],{"class":47},[33,165398,165399],{"class":2487},"# 小红\n",[19,165401,165402],{},"索引越界会报错：",[23,165404,165406],{"className":25,"code":165405,"language":27,"meta":28,"style":28},"print(names[3])\n",[30,165407,165408],{"__ignoreMap":28},[33,165409,165410,165412,165414,165416],{"class":35,"line":36},[33,165411,122],{"class":72},[33,165413,165336],{"class":47},[33,165415,730],{"class":72},[33,165417,6907],{"class":47},[14,165419,165421],{"id":165420},"_64-列表常用方法","6.4 列表常用方法",[23,165423,165425],{"className":25,"code":165424,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[30,165426,165427,165443,165447,165456,165470,165484,165488],{"__ignoreMap":28},[33,165428,165429,165431,165433,165435,165437,165439,165441],{"class":35,"line":36},[33,165430,162544],{"class":47},[33,165432,57],{"class":39},[33,165434,906],{"class":47},[33,165436,242],{"class":60},[33,165438,245],{"class":47},[33,165440,1122],{"class":60},[33,165442,919],{"class":47},[33,165444,165445],{"class":35,"line":51},[33,165446,100],{"emptyLinePlaceholder":99},[33,165448,165449,165452,165454],{"class":35,"line":64},[33,165450,165451],{"class":47},"names.append(",[33,165453,1144],{"class":60},[33,165455,226],{"class":47},[33,165457,165458,165461,165463,165465,165468],{"class":35,"line":76},[33,165459,165460],{"class":47},"names.insert(",[33,165462,720],{"class":72},[33,165464,245],{"class":47},[33,165466,165467],{"class":60},"\"小李\"",[33,165469,226],{"class":47},[33,165471,165472,165475,165477,165479,165482],{"class":35,"line":87},[33,165473,165474],{"class":47},"names.extend([",[33,165476,10929],{"class":60},[33,165478,245],{"class":47},[33,165480,165481],{"class":60},"\"小赵\"",[33,165483,6907],{"class":47},[33,165485,165486],{"class":35,"line":96},[33,165487,100],{"emptyLinePlaceholder":99},[33,165489,165490,165492],{"class":35,"line":103},[33,165491,122],{"class":72},[33,165493,165494],{"class":47},"(names)\n",[19,165496,165497],{},"删除元素：",[23,165499,165501],{"className":25,"code":165500,"language":27,"meta":28,"style":28},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[30,165502,165503,165512,165522,165536,165548],{"__ignoreMap":28},[33,165504,165505,165508,165510],{"class":35,"line":36},[33,165506,165507],{"class":47},"names.remove(",[33,165509,1122],{"class":60},[33,165511,226],{"class":47},[33,165513,165514,165517,165519],{"class":35,"line":51},[33,165515,165516],{"class":47},"last ",[33,165518,57],{"class":39},[33,165520,165521],{"class":47}," names.pop()\n",[33,165523,165524,165527,165529,165532,165534],{"class":35,"line":64},[33,165525,165526],{"class":47},"first ",[33,165528,57],{"class":39},[33,165530,165531],{"class":47}," names.pop(",[33,165533,2617],{"class":72},[33,165535,226],{"class":47},[33,165537,165538,165541,165544,165546],{"class":35,"line":76},[33,165539,165540],{"class":39},"del",[33,165542,165543],{"class":47}," names[",[33,165545,2617],{"class":72},[33,165547,919],{"class":47},[33,165549,165550],{"class":35,"line":87},[33,165551,165552],{"class":47},"names.clear()\n",[19,165554,165555],{},"查询和统计：",[23,165557,165559],{"className":25,"code":165558,"language":27,"meta":28,"style":28},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[30,165560,165561,165589,165593,165604,165615],{"__ignoreMap":28},[33,165562,165563,165565,165567,165569,165571,165573,165575,165577,165579,165581,165583,165585,165587],{"class":35,"line":36},[33,165564,165240],{"class":47},[33,165566,57],{"class":39},[33,165568,906],{"class":47},[33,165570,720],{"class":72},[33,165572,245],{"class":47},[33,165574,725],{"class":72},[33,165576,245],{"class":47},[33,165578,730],{"class":72},[33,165580,245],{"class":47},[33,165582,725],{"class":72},[33,165584,245],{"class":47},[33,165586,753],{"class":72},[33,165588,919],{"class":47},[33,165590,165591],{"class":35,"line":51},[33,165592,100],{"emptyLinePlaceholder":99},[33,165594,165595,165597,165600,165602],{"class":35,"line":64},[33,165596,122],{"class":72},[33,165598,165599],{"class":47},"(numbers.index(",[33,165601,730],{"class":72},[33,165603,551],{"class":47},[33,165605,165606,165608,165611,165613],{"class":35,"line":76},[33,165607,122],{"class":72},[33,165609,165610],{"class":47},"(numbers.count(",[33,165612,725],{"class":72},[33,165614,551],{"class":47},[33,165616,165617,165619,165621,165623],{"class":35,"line":87},[33,165618,122],{"class":72},[33,165620,133],{"class":47},[33,165622,9604],{"class":72},[33,165624,165625],{"class":47},"(numbers))\n",[19,165627,165628],{},"排序：",[23,165630,165632],{"className":25,"code":165631,"language":27,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[30,165633,165634,165658,165662,165667,165674,165678,165691,165697,165701,165706],{"__ignoreMap":28},[33,165635,165636,165638,165640,165642,165644,165646,165648,165650,165652,165654,165656],{"class":35,"line":36},[33,165637,165240],{"class":47},[33,165639,57],{"class":39},[33,165641,906],{"class":47},[33,165643,730],{"class":72},[33,165645,245],{"class":47},[33,165647,720],{"class":72},[33,165649,245],{"class":47},[33,165651,758],{"class":72},[33,165653,245],{"class":47},[33,165655,725],{"class":72},[33,165657,919],{"class":47},[33,165659,165660],{"class":35,"line":51},[33,165661,100],{"emptyLinePlaceholder":99},[33,165663,165664],{"class":35,"line":64},[33,165665,165666],{"class":47},"numbers.sort()\n",[33,165668,165669,165671],{"class":35,"line":76},[33,165670,122],{"class":72},[33,165672,165673],{"class":47},"(numbers)\n",[33,165675,165676],{"class":35,"line":87},[33,165677,100],{"emptyLinePlaceholder":99},[33,165679,165680,165683,165685,165687,165689],{"class":35,"line":96},[33,165681,165682],{"class":47},"numbers.sort(",[33,165684,1185],{"class":289},[33,165686,57],{"class":39},[33,165688,1190],{"class":72},[33,165690,226],{"class":47},[33,165692,165693,165695],{"class":35,"line":103},[33,165694,122],{"class":72},[33,165696,165673],{"class":47},[33,165698,165699],{"class":35,"line":108},[33,165700,100],{"emptyLinePlaceholder":99},[33,165702,165703],{"class":35,"line":119},[33,165704,165705],{"class":47},"numbers.reverse()\n",[33,165707,165708,165710],{"class":35,"line":128},[33,165709,122],{"class":72},[33,165711,165673],{"class":47},[19,165713,165714,165717,165718,165721],{},[30,165715,165716],{},"sort()"," 会修改原列表，",[30,165719,165720],{},"sorted()"," 返回新列表。",[23,165723,165725],{"className":25,"code":165724,"language":27,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[30,165726,165727,165751,165762,165766,165772],{"__ignoreMap":28},[33,165728,165729,165731,165733,165735,165737,165739,165741,165743,165745,165747,165749],{"class":35,"line":36},[33,165730,165240],{"class":47},[33,165732,57],{"class":39},[33,165734,906],{"class":47},[33,165736,730],{"class":72},[33,165738,245],{"class":47},[33,165740,720],{"class":72},[33,165742,245],{"class":47},[33,165744,758],{"class":72},[33,165746,245],{"class":47},[33,165748,725],{"class":72},[33,165750,919],{"class":47},[33,165752,165753,165756,165758,165760],{"class":35,"line":51},[33,165754,165755],{"class":47},"new_numbers ",[33,165757,57],{"class":39},[33,165759,1549],{"class":72},[33,165761,165673],{"class":47},[33,165763,165764],{"class":35,"line":64},[33,165765,100],{"emptyLinePlaceholder":99},[33,165767,165768,165770],{"class":35,"line":76},[33,165769,122],{"class":72},[33,165771,165673],{"class":47},[33,165773,165774,165776],{"class":35,"line":87},[33,165775,122],{"class":72},[33,165777,165778],{"class":47},"(new_numbers)\n",[14,165780,165782],{"id":165781},"_65-列表遍历","6.5 列表遍历",[23,165784,165786],{"className":25,"code":165785,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[30,165787,165788,165808,165812,165822],{"__ignoreMap":28},[33,165789,165790,165792,165794,165796,165798,165800,165802,165804,165806],{"class":35,"line":36},[33,165791,162544],{"class":47},[33,165793,57],{"class":39},[33,165795,906],{"class":47},[33,165797,242],{"class":60},[33,165799,245],{"class":47},[33,165801,1122],{"class":60},[33,165803,245],{"class":47},[33,165805,1144],{"class":60},[33,165807,919],{"class":47},[33,165809,165810],{"class":35,"line":51},[33,165811,100],{"emptyLinePlaceholder":99},[33,165813,165814,165816,165818,165820],{"class":35,"line":64},[33,165815,5282],{"class":39},[33,165817,162580],{"class":47},[33,165819,681],{"class":39},[33,165821,162585],{"class":47},[33,165823,165824,165826],{"class":35,"line":76},[33,165825,193],{"class":72},[33,165827,152848],{"class":47},[19,165829,165830],{},"需要索引时：",[23,165832,165834],{"className":25,"code":165833,"language":27,"meta":28,"style":28},"for index, name in enumerate(names):\n    print(index, name)\n",[30,165835,165836,165850],{"__ignoreMap":28},[33,165837,165838,165840,165843,165845,165847],{"class":35,"line":36},[33,165839,5282],{"class":39},[33,165841,165842],{"class":47}," index, name ",[33,165844,681],{"class":39},[33,165846,33835],{"class":72},[33,165848,165849],{"class":47},"(names):\n",[33,165851,165852,165854],{"class":35,"line":51},[33,165853,193],{"class":72},[33,165855,165856],{"class":47},"(index, name)\n",[19,165858,165859],{},"统计总分：",[23,165861,165863],{"className":25,"code":165862,"language":27,"meta":28,"style":28},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[30,165864,165865,165890,165898,165902,165913,165921,165925,165942],{"__ignoreMap":28},[33,165866,165867,165870,165872,165874,165876,165878,165880,165882,165884,165886,165888],{"class":35,"line":36},[33,165868,165869],{"class":47},"scores ",[33,165871,57],{"class":39},[33,165873,906],{"class":47},[33,165875,3273],{"class":72},[33,165877,245],{"class":47},[33,165879,3149],{"class":72},[33,165881,245],{"class":47},[33,165883,2678],{"class":72},[33,165885,245],{"class":47},[33,165887,2978],{"class":72},[33,165889,919],{"class":47},[33,165891,165892,165894,165896],{"class":35,"line":51},[33,165893,159432],{"class":47},[33,165895,57],{"class":39},[33,165897,670],{"class":72},[33,165899,165900],{"class":35,"line":64},[33,165901,100],{"emptyLinePlaceholder":99},[33,165903,165904,165906,165908,165910],{"class":35,"line":76},[33,165905,5282],{"class":39},[33,165907,159954],{"class":47},[33,165909,681],{"class":39},[33,165911,165912],{"class":47}," scores:\n",[33,165914,165915,165917,165919],{"class":35,"line":87},[33,165916,665],{"class":47},[33,165918,692],{"class":39},[33,165920,3852],{"class":47},[33,165922,165923],{"class":35,"line":96},[33,165924,100],{"emptyLinePlaceholder":99},[33,165926,165927,165930,165932,165935,165937,165939],{"class":35,"line":103},[33,165928,165929],{"class":47},"avg ",[33,165931,57],{"class":39},[33,165933,165934],{"class":47}," total ",[33,165936,3001],{"class":39},[33,165938,9577],{"class":72},[33,165940,165941],{"class":47},"(scores)\n",[33,165943,165944,165946,165948,165950,165953,165955,165958,165960,165962,165964],{"class":35,"line":108},[33,165945,122],{"class":72},[33,165947,133],{"class":47},[33,165949,198],{"class":39},[33,165951,165952],{"class":60},"\"平均分:",[33,165954,204],{"class":72},[33,165956,165957],{"class":47},"avg",[33,165959,159331],{"class":39},[33,165961,210],{"class":72},[33,165963,397],{"class":60},[33,165965,226],{"class":47},[14,165967,165969],{"id":165968},"_66-元组tuple","6.6 元组tuple",[19,165971,165972],{},"元组和列表类似，但不可修改。",[23,165974,165976],{"className":25,"code":165975,"language":27,"meta":28,"style":28},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[30,165977,165978,165995],{"__ignoreMap":28},[33,165979,165980,165983,165985,165987,165989,165991,165993],{"class":35,"line":36},[33,165981,165982],{"class":47},"point ",[33,165984,57],{"class":39},[33,165986,3924],{"class":47},[33,165988,1279],{"class":72},[33,165990,245],{"class":47},[33,165992,1284],{"class":72},[33,165994,226],{"class":47},[33,165996,165997,165999,166001,166003,166005,166007,166009,166011,166013],{"class":35,"line":51},[33,165998,986],{"class":47},[33,166000,57],{"class":39},[33,166002,3924],{"class":47},[33,166004,242],{"class":60},[33,166006,245],{"class":47},[33,166008,248],{"class":72},[33,166010,245],{"class":47},[33,166012,847],{"class":60},[33,166014,226],{"class":47},[19,166016,166017],{},"单元素元组必须加逗号：",[23,166019,166021],{"className":25,"code":166020,"language":27,"meta":28,"style":28},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[30,166022,166023,166037,166050,166054,166068],{"__ignoreMap":28},[33,166024,166025,166028,166030,166032,166034],{"class":35,"line":36},[33,166026,166027],{"class":47},"t1 ",[33,166029,57],{"class":39},[33,166031,3924],{"class":47},[33,166033,1279],{"class":72},[33,166035,166036],{"class":47},",)\n",[33,166038,166039,166042,166044,166046,166048],{"class":35,"line":51},[33,166040,166041],{"class":47},"t2 ",[33,166043,57],{"class":39},[33,166045,3924],{"class":47},[33,166047,1279],{"class":72},[33,166049,226],{"class":47},[33,166051,166052],{"class":35,"line":64},[33,166053,100],{"emptyLinePlaceholder":99},[33,166055,166056,166058,166060,166062,166065],{"class":35,"line":76},[33,166057,122],{"class":72},[33,166059,133],{"class":47},[33,166061,136],{"class":72},[33,166063,166064],{"class":47},"(t1))  ",[33,166066,166067],{"class":2487},"# tuple\n",[33,166069,166070,166072,166074,166076,166079],{"class":35,"line":87},[33,166071,122],{"class":72},[33,166073,133],{"class":47},[33,166075,136],{"class":72},[33,166077,166078],{"class":47},"(t2))  ",[33,166080,166081],{"class":2487},"# int\n",[19,166083,166084],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,166086,166088],{"id":166087},"_67-字符串str","6.7 字符串str",[19,166090,166091],{},"字符串也是序列，可以索引、切片和遍历。",[23,166093,166095],{"className":25,"code":166094,"language":27,"meta":28,"style":28},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[30,166096,166097,166105,166109,166120,166132,166136,166147],{"__ignoreMap":28},[33,166098,166099,166101,166103],{"class":35,"line":36},[33,166100,158616],{"class":47},[33,166102,57],{"class":39},[33,166104,161848],{"class":60},[33,166106,166107],{"class":35,"line":51},[33,166108,100],{"emptyLinePlaceholder":99},[33,166110,166111,166113,166116,166118],{"class":35,"line":64},[33,166112,122],{"class":72},[33,166114,166115],{"class":47},"(text[",[33,166117,2617],{"class":72},[33,166119,6907],{"class":47},[33,166121,166122,166124,166126,166128,166130],{"class":35,"line":76},[33,166123,122],{"class":72},[33,166125,166115],{"class":47},[33,166127,2949],{"class":39},[33,166129,720],{"class":72},[33,166131,6907],{"class":47},[33,166133,166134],{"class":35,"line":87},[33,166135,100],{"emptyLinePlaceholder":99},[33,166137,166138,166140,166142,166144],{"class":35,"line":96},[33,166139,5282],{"class":39},[33,166141,161859],{"class":47},[33,166143,681],{"class":39},[33,166145,166146],{"class":47}," text:\n",[33,166148,166149,166151],{"class":35,"line":103},[33,166150,193],{"class":72},[33,166152,161870],{"class":47},[19,166154,166155],{},"字符串不可变：",[23,166157,166159],{"className":25,"code":166158,"language":27,"meta":28,"style":28},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[30,166160,166161,166169],{"__ignoreMap":28},[33,166162,166163,166165,166167],{"class":35,"line":36},[33,166164,158616],{"class":47},[33,166166,57],{"class":39},[33,166168,161848],{"class":60},[33,166170,166171,166174,166176,166178,166180,166183],{"class":35,"line":51},[33,166172,166173],{"class":47},"text[",[33,166175,2617],{"class":72},[33,166177,2172],{"class":47},[33,166179,57],{"class":39},[33,166181,166182],{"class":60}," \"P\"",[33,166184,166185],{"class":2487},"  # 报错\n",[19,166187,166188],{},"如果要得到新字符串：",[23,166190,166192],{"className":25,"code":166191,"language":27,"meta":28,"style":28},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[30,166193,166194,166202,166220],{"__ignoreMap":28},[33,166195,166196,166198,166200],{"class":35,"line":36},[33,166197,158616],{"class":47},[33,166199,57],{"class":39},[33,166201,161848],{"class":60},[33,166203,166204,166206,166208,166210,166212,166215,166217],{"class":35,"line":51},[33,166205,158616],{"class":47},[33,166207,57],{"class":39},[33,166209,166182],{"class":60},[33,166211,47789],{"class":39},[33,166213,166214],{"class":47}," text[",[33,166216,720],{"class":72},[33,166218,166219],{"class":47},":]\n",[33,166221,166222,166224],{"class":35,"line":64},[33,166223,122],{"class":72},[33,166225,166226],{"class":47},"(text)\n",[14,166228,166230],{"id":166229},"_68-切片","6.8 切片",[19,166232,166233],{},"切片用于从序列中取一部分。",[23,166235,166237],{"className":25,"code":166236,"language":27,"meta":28,"style":28},"序列[开始:结束:步长]\n",[30,166238,166239],{"__ignoreMap":28},[33,166240,166241],{"class":35,"line":36},[33,166242,166236],{"class":47},[19,166244,166245],{},"结束位置不包含。",[23,166247,166249],{"className":25,"code":166248,"language":27,"meta":28,"style":28},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[30,166250,166251,166287,166291,166310,166325,166339,166353],{"__ignoreMap":28},[33,166252,166253,166255,166257,166259,166261,166263,166265,166267,166269,166271,166273,166275,166277,166279,166281,166283,166285],{"class":35,"line":36},[33,166254,901],{"class":47},[33,166256,57],{"class":39},[33,166258,906],{"class":47},[33,166260,2617],{"class":72},[33,166262,245],{"class":47},[33,166264,720],{"class":72},[33,166266,245],{"class":47},[33,166268,725],{"class":72},[33,166270,245],{"class":47},[33,166272,730],{"class":72},[33,166274,245],{"class":47},[33,166276,753],{"class":72},[33,166278,245],{"class":47},[33,166280,758],{"class":72},[33,166282,245],{"class":47},[33,166284,2765],{"class":72},[33,166286,919],{"class":47},[33,166288,166289],{"class":35,"line":51},[33,166290,100],{"emptyLinePlaceholder":99},[33,166292,166293,166295,166298,166300,166302,166304,166307],{"class":35,"line":64},[33,166294,122],{"class":72},[33,166296,166297],{"class":47},"(nums[",[33,166299,720],{"class":72},[33,166301,387],{"class":47},[33,166303,753],{"class":72},[33,166305,166306],{"class":47},"])    ",[33,166308,166309],{"class":2487},"# [1, 2, 3]\n",[33,166311,166312,166314,166317,166319,166322],{"class":35,"line":76},[33,166313,122],{"class":72},[33,166315,166316],{"class":47},"(nums[:",[33,166318,730],{"class":72},[33,166320,166321],{"class":47},"])     ",[33,166323,166324],{"class":2487},"# [0, 1, 2]\n",[33,166326,166327,166329,166331,166333,166336],{"class":35,"line":87},[33,166328,122],{"class":72},[33,166330,166297],{"class":47},[33,166332,730],{"class":72},[33,166334,166335],{"class":47},":])     ",[33,166337,166338],{"class":2487},"# [3, 4, 5, 6]\n",[33,166340,166341,166343,166346,166348,166350],{"class":35,"line":96},[33,166342,122],{"class":72},[33,166344,166345],{"class":47},"(nums[::",[33,166347,725],{"class":72},[33,166349,166306],{"class":47},[33,166351,166352],{"class":2487},"# [0, 2, 4, 6]\n",[33,166354,166355,166357,166359,166361,166363,166366],{"class":35,"line":103},[33,166356,122],{"class":72},[33,166358,166345],{"class":47},[33,166360,2949],{"class":39},[33,166362,720],{"class":72},[33,166364,166365],{"class":47},"])   ",[33,166367,166368],{"class":2487},"# 反转\n",[19,166370,166371],{},"字符串切片：",[23,166373,166375],{"className":25,"code":166374,"language":27,"meta":28,"style":28},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[30,166376,166377,166386,166400],{"__ignoreMap":28},[33,166378,166379,166381,166383],{"class":35,"line":36},[33,166380,158616],{"class":47},[33,166382,57],{"class":39},[33,166384,166385],{"class":60}," \"abcdef\"\n",[33,166387,166388,166390,166392,166394,166396,166398],{"class":35,"line":51},[33,166389,122],{"class":72},[33,166391,166115],{"class":47},[33,166393,720],{"class":72},[33,166395,387],{"class":47},[33,166397,753],{"class":72},[33,166399,6907],{"class":47},[33,166401,166402,166404,166407,166409,166411],{"class":35,"line":64},[33,166403,122],{"class":72},[33,166405,166406],{"class":47},"(text[::",[33,166408,2949],{"class":39},[33,166410,720],{"class":72},[33,166412,6907],{"class":47},[14,166414,166416],{"id":166415},"_69-集合set","6.9 集合set",[19,166418,166419],{},"集合特点：",[328,166421,166422,166425,166428],{},[331,166423,166424],{},"无序。",[331,166426,166427],{},"元素不重复。",[331,166429,166430],{},"可以做交集、并集、差集。",[23,166432,166434],{"className":25,"code":166433,"language":27,"meta":28,"style":28},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[30,166435,166436,166464],{"__ignoreMap":28},[33,166437,166438,166440,166442,166444,166446,166448,166450,166452,166454,166456,166458,166460,166462],{"class":35,"line":36},[33,166439,901],{"class":47},[33,166441,57],{"class":39},[33,166443,965],{"class":47},[33,166445,720],{"class":72},[33,166447,245],{"class":47},[33,166449,725],{"class":72},[33,166451,245],{"class":47},[33,166453,730],{"class":72},[33,166455,245],{"class":47},[33,166457,730],{"class":72},[33,166459,245],{"class":47},[33,166461,753],{"class":72},[33,166463,1010],{"class":47},[33,166465,166466,166468],{"class":35,"line":51},[33,166467,122],{"class":72},[33,166469,166470],{"class":47},"(nums)\n",[19,166472,166473],{},"创建空集合：",[23,166475,166477],{"className":25,"code":166476,"language":27,"meta":28,"style":28},"s = set()\n",[30,166478,166479],{"__ignoreMap":28},[33,166480,166481,166483,166485,166487],{"class":35,"line":36},[33,166482,12823],{"class":47},[33,166484,57],{"class":39},[33,166486,121922],{"class":72},[33,166488,4235],{"class":47},[19,166490,11271,166491,166493],{},[30,166492,34685],{}," 是空字典，不是空集合。",[19,166495,166496],{},"集合常用操作：",[23,166498,166500],{"className":25,"code":166499,"language":27,"meta":28,"style":28},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[30,166501,166502,166522,166526,166535,166544,166553],{"__ignoreMap":28},[33,166503,166504,166506,166508,166510,166512,166514,166516,166518,166520],{"class":35,"line":36},[33,166505,12823],{"class":47},[33,166507,57],{"class":39},[33,166509,965],{"class":47},[33,166511,720],{"class":72},[33,166513,245],{"class":47},[33,166515,725],{"class":72},[33,166517,245],{"class":47},[33,166519,730],{"class":72},[33,166521,1010],{"class":47},[33,166523,166524],{"class":35,"line":51},[33,166525,100],{"emptyLinePlaceholder":99},[33,166527,166528,166531,166533],{"class":35,"line":64},[33,166529,166530],{"class":47},"s.add(",[33,166532,753],{"class":72},[33,166534,226],{"class":47},[33,166536,166537,166540,166542],{"class":35,"line":76},[33,166538,166539],{"class":47},"s.remove(",[33,166541,725],{"class":72},[33,166543,226],{"class":47},[33,166545,166546,166549,166551],{"class":35,"line":87},[33,166547,166548],{"class":47},"s.discard(",[33,166550,1279],{"class":72},[33,166552,226],{"class":47},[33,166554,166555,166557,166559,166561],{"class":35,"line":96},[33,166556,122],{"class":72},[33,166558,133],{"class":47},[33,166560,9604],{"class":72},[33,166562,166563],{"class":47},"(s))\n",[19,166565,166566],{},"交并差：",[23,166568,166570],{"className":25,"code":166569,"language":27,"meta":28,"style":28},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[30,166571,166572,166592,166612,166616,166631,166644],{"__ignoreMap":28},[33,166573,166574,166576,166578,166580,166582,166584,166586,166588,166590],{"class":35,"line":36},[33,166575,13160],{"class":47},[33,166577,57],{"class":39},[33,166579,965],{"class":47},[33,166581,720],{"class":72},[33,166583,245],{"class":47},[33,166585,725],{"class":72},[33,166587,245],{"class":47},[33,166589,730],{"class":72},[33,166591,1010],{"class":47},[33,166593,166594,166596,166598,166600,166602,166604,166606,166608,166610],{"class":35,"line":51},[33,166595,13186],{"class":47},[33,166597,57],{"class":39},[33,166599,965],{"class":47},[33,166601,730],{"class":72},[33,166603,245],{"class":47},[33,166605,753],{"class":72},[33,166607,245],{"class":47},[33,166609,758],{"class":72},[33,166611,1010],{"class":47},[33,166613,166614],{"class":35,"line":64},[33,166615,100],{"emptyLinePlaceholder":99},[33,166617,166618,166620,166623,166625,166628],{"class":35,"line":76},[33,166619,122],{"class":72},[33,166621,166622],{"class":47},"(a ",[33,166624,2774],{"class":39},[33,166626,166627],{"class":47}," b)  ",[33,166629,166630],{"class":2487},"# 交集\n",[33,166632,166633,166635,166637,166639,166641],{"class":35,"line":87},[33,166634,122],{"class":72},[33,166636,166622],{"class":47},[33,166638,3329],{"class":39},[33,166640,166627],{"class":47},[33,166642,166643],{"class":2487},"# 并集\n",[33,166645,166646,166648,166650,166652,166654],{"class":35,"line":96},[33,166647,122],{"class":72},[33,166649,166622],{"class":47},[33,166651,2949],{"class":39},[33,166653,166627],{"class":47},[33,166655,166656],{"class":2487},"# 差集\n",[14,166658,166660],{"id":166659},"_610-字典dict","6.10 字典dict",[19,166662,166663],{},"字典通过 key-value 保存数据。",[23,166665,166667],{"className":25,"code":166666,"language":27,"meta":28,"style":28},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[30,166668,166669,166677,166687,166698,166708],{"__ignoreMap":28},[33,166670,166671,166673,166675],{"class":35,"line":36},[33,166672,151671],{"class":47},[33,166674,57],{"class":39},[33,166676,17810],{"class":47},[33,166678,166679,166681,166683,166685],{"class":35,"line":51},[33,166680,149217],{"class":60},[33,166682,996],{"class":47},[33,166684,242],{"class":60},[33,166686,33696],{"class":47},[33,166688,166689,166692,166694,166696],{"class":35,"line":64},[33,166690,166691],{"class":60},"    \"age\"",[33,166693,996],{"class":47},[33,166695,248],{"class":72},[33,166697,33696],{"class":47},[33,166699,166700,166703,166705],{"class":35,"line":76},[33,166701,166702],{"class":60},"    \"score\"",[33,166704,996],{"class":47},[33,166706,166707],{"class":72},"95\n",[33,166709,166710],{"class":35,"line":87},[33,166711,1010],{"class":47},[19,166713,166714],{},"获取值：",[23,166716,166718],{"className":25,"code":166717,"language":27,"meta":28,"style":28},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[30,166719,166720,166731],{"__ignoreMap":28},[33,166721,166722,166724,166727,166729],{"class":35,"line":36},[33,166723,122],{"class":72},[33,166725,166726],{"class":47},"(student[",[33,166728,993],{"class":60},[33,166730,6907],{"class":47},[33,166732,166733,166735,166738,166740],{"class":35,"line":51},[33,166734,122],{"class":72},[33,166736,166737],{"class":47},"(student.get(",[33,166739,993],{"class":60},[33,166741,551],{"class":47},[19,166743,17626],{},[23,166745,166747],{"className":25,"code":166746,"language":27,"meta":28,"style":28},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[30,166748,166749,166762],{"__ignoreMap":28},[33,166750,166751,166753,166756,166759],{"class":35,"line":36},[33,166752,155038],{"class":47},[33,166754,166755],{"class":60},"\"address\"",[33,166757,166758],{"class":47},"]     ",[33,166760,166761],{"class":2487},"# key不存在会报错\n",[33,166763,166764,166767,166769,166771],{"class":35,"line":51},[33,166765,166766],{"class":47},"student.get(",[33,166768,166755],{"class":60},[33,166770,15954],{"class":47},[33,166772,166773],{"class":2487},"# key不存在返回None\n",[19,166775,166776],{},"设置默认值：",[23,166778,166780],{"className":25,"code":166779,"language":27,"meta":28,"style":28},"print(student.get(\"address\", \"未知\"))\n",[30,166781,166782],{"__ignoreMap":28},[33,166783,166784,166786,166788,166790,166792,166795],{"class":35,"line":36},[33,166785,122],{"class":72},[33,166787,166737],{"class":47},[33,166789,166755],{"class":60},[33,166791,245],{"class":47},[33,166793,166794],{"class":60},"\"未知\"",[33,166796,551],{"class":47},[19,166798,166799],{},"新增和修改：",[23,166801,166803],{"className":25,"code":166802,"language":27,"meta":28,"style":28},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[30,166804,166805,166818],{"__ignoreMap":28},[33,166806,166807,166809,166811,166813,166815],{"class":35,"line":36},[33,166808,155038],{"class":47},[33,166810,1003],{"class":60},[33,166812,2172],{"class":47},[33,166814,57],{"class":39},[33,166816,166817],{"class":72}," 19\n",[33,166819,166820,166822,166824,166826,166828],{"class":35,"line":51},[33,166821,155038],{"class":47},[33,166823,166755],{"class":60},[33,166825,2172],{"class":47},[33,166827,57],{"class":39},[33,166829,166830],{"class":60}," \"北京\"\n",[19,166832,166833],{},"删除：",[23,166835,166837],{"className":25,"code":166836,"language":27,"meta":28,"style":28},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[30,166838,166839,166852,166862],{"__ignoreMap":28},[33,166840,166841,166843,166845,166848,166850],{"class":35,"line":36},[33,166842,157533],{"class":47},[33,166844,57],{"class":39},[33,166846,166847],{"class":47}," student.pop(",[33,166849,1103],{"class":60},[33,166851,226],{"class":47},[33,166853,166854,166856,166858,166860],{"class":35,"line":51},[33,166855,165540],{"class":39},[33,166857,154331],{"class":47},[33,166859,1003],{"class":60},[33,166861,919],{"class":47},[33,166863,166864],{"class":35,"line":64},[33,166865,166866],{"class":47},"student.clear()\n",[14,166868,166870],{"id":166869},"_611-字典遍历","6.11 字典遍历",[19,166872,166873],{},"遍历 key：",[23,166875,166877],{"className":25,"code":166876,"language":27,"meta":28,"style":28},"for key in student:\n    print(key, student[key])\n",[30,166878,166879,166891],{"__ignoreMap":28},[33,166880,166881,166883,166886,166888],{"class":35,"line":36},[33,166882,5282],{"class":39},[33,166884,166885],{"class":47}," key ",[33,166887,681],{"class":39},[33,166889,166890],{"class":47}," student:\n",[33,166892,166893,166895],{"class":35,"line":51},[33,166894,193],{"class":72},[33,166896,166897],{"class":47},"(key, student[key])\n",[19,166899,166900],{},"遍历 value：",[23,166902,166904],{"className":25,"code":166903,"language":27,"meta":28,"style":28},"for value in student.values():\n    print(value)\n",[30,166905,166906,166918],{"__ignoreMap":28},[33,166907,166908,166910,166913,166915],{"class":35,"line":36},[33,166909,5282],{"class":39},[33,166911,166912],{"class":47}," value ",[33,166914,681],{"class":39},[33,166916,166917],{"class":47}," student.values():\n",[33,166919,166920,166922],{"class":35,"line":51},[33,166921,193],{"class":72},[33,166923,166924],{"class":47},"(value)\n",[19,166926,166927],{},"遍历 key 和 value：",[23,166929,166931],{"className":25,"code":166930,"language":27,"meta":28,"style":28},"for key, value in student.items():\n    print(key, value)\n",[30,166932,166933,166944],{"__ignoreMap":28},[33,166934,166935,166937,166939,166941],{"class":35,"line":36},[33,166936,5282],{"class":39},[33,166938,797],{"class":47},[33,166940,681],{"class":39},[33,166942,166943],{"class":47}," student.items():\n",[33,166945,166946,166948],{"class":35,"line":51},[33,166947,193],{"class":72},[33,166949,810],{"class":47},[14,166951,166953],{"id":166952},"_612-嵌套容器","6.12 嵌套容器",[19,166955,166956],{},"列表中保存字典，是项目中最常见的结构之一。",[23,166958,166960],{"className":25,"code":166959,"language":27,"meta":28,"style":28},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[30,166961,166962,166970,166998,167026,167054,167058,167062,167072],{"__ignoreMap":28},[33,166963,166964,166966,166968],{"class":35,"line":36},[33,166965,1082],{"class":47},[33,166967,57],{"class":39},[33,166969,1087],{"class":47},[33,166971,166972,166974,166976,166978,166980,166982,166984,166986,166988,166990,166992,166994,166996],{"class":35,"line":51},[33,166973,1092],{"class":47},[33,166975,993],{"class":60},[33,166977,996],{"class":47},[33,166979,242],{"class":60},[33,166981,245],{"class":47},[33,166983,1003],{"class":60},[33,166985,996],{"class":47},[33,166987,248],{"class":72},[33,166989,245],{"class":47},[33,166991,1103],{"class":60},[33,166993,996],{"class":47},[33,166995,1108],{"class":72},[33,166997,1111],{"class":47},[33,166999,167000,167002,167004,167006,167008,167010,167012,167014,167016,167018,167020,167022,167024],{"class":35,"line":64},[33,167001,1092],{"class":47},[33,167003,993],{"class":60},[33,167005,996],{"class":47},[33,167007,1122],{"class":60},[33,167009,245],{"class":47},[33,167011,1003],{"class":60},[33,167013,996],{"class":47},[33,167015,2042],{"class":72},[33,167017,245],{"class":47},[33,167019,1103],{"class":60},[33,167021,996],{"class":47},[33,167023,1131],{"class":72},[33,167025,1111],{"class":47},[33,167027,167028,167030,167032,167034,167036,167038,167040,167042,167044,167046,167048,167050,167052],{"class":35,"line":76},[33,167029,1092],{"class":47},[33,167031,993],{"class":60},[33,167033,996],{"class":47},[33,167035,1144],{"class":60},[33,167037,245],{"class":47},[33,167039,1003],{"class":60},[33,167041,996],{"class":47},[33,167043,2071],{"class":72},[33,167045,245],{"class":47},[33,167047,1103],{"class":60},[33,167049,996],{"class":47},[33,167051,1153],{"class":72},[33,167053,1111],{"class":47},[33,167055,167056],{"class":35,"line":87},[33,167057,919],{"class":47},[33,167059,167060],{"class":35,"line":96},[33,167061,100],{"emptyLinePlaceholder":99},[33,167063,167064,167066,167068,167070],{"class":35,"line":103},[33,167065,5282],{"class":39},[33,167067,2120],{"class":47},[33,167069,681],{"class":39},[33,167071,2125],{"class":47},[33,167073,167074,167076,167078,167080,167083,167085],{"class":35,"line":108},[33,167075,193],{"class":72},[33,167077,166726],{"class":47},[33,167079,993],{"class":60},[33,167081,167082],{"class":47},"], student[",[33,167084,1103],{"class":60},[33,167086,6907],{"class":47},[19,167088,167089],{},"统计平均分：",[23,167091,167093],{"className":25,"code":167092,"language":27,"meta":28,"style":28},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[30,167094,167095,167103,167107,167117,167129,167133,167147],{"__ignoreMap":28},[33,167096,167097,167099,167101],{"class":35,"line":36},[33,167098,159432],{"class":47},[33,167100,57],{"class":39},[33,167102,670],{"class":72},[33,167104,167105],{"class":35,"line":51},[33,167106,100],{"emptyLinePlaceholder":99},[33,167108,167109,167111,167113,167115],{"class":35,"line":64},[33,167110,5282],{"class":39},[33,167112,2120],{"class":47},[33,167114,681],{"class":39},[33,167116,2125],{"class":47},[33,167118,167119,167121,167123,167125,167127],{"class":35,"line":76},[33,167120,665],{"class":47},[33,167122,692],{"class":39},[33,167124,154331],{"class":47},[33,167126,1103],{"class":60},[33,167128,919],{"class":47},[33,167130,167131],{"class":35,"line":87},[33,167132,100],{"emptyLinePlaceholder":99},[33,167134,167135,167137,167139,167141,167143,167145],{"class":35,"line":96},[33,167136,165929],{"class":47},[33,167138,57],{"class":39},[33,167140,165934],{"class":47},[33,167142,3001],{"class":39},[33,167144,9577],{"class":72},[33,167146,1199],{"class":47},[33,167148,167149,167151,167153,167155,167157,167159,167161,167163,167165,167167],{"class":35,"line":103},[33,167150,122],{"class":72},[33,167152,133],{"class":47},[33,167154,198],{"class":39},[33,167156,165952],{"class":60},[33,167158,204],{"class":72},[33,167160,165957],{"class":47},[33,167162,159331],{"class":39},[33,167164,210],{"class":72},[33,167166,397],{"class":60},[33,167168,226],{"class":47},[19,167170,167171],{},"查找学生：",[23,167173,167175],{"className":25,"code":167174,"language":27,"meta":28,"style":28},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[30,167176,167177,167192,167196,167206,167220,167226,167230,167236],{"__ignoreMap":28},[33,167178,167179,167181,167183,167185,167187,167190],{"class":35,"line":36},[33,167180,113781],{"class":47},[33,167182,57],{"class":39},[33,167184,62823],{"class":72},[33,167186,133],{"class":47},[33,167188,167189],{"class":60},"\"请输入学生姓名:\"",[33,167191,226],{"class":47},[33,167193,167194],{"class":35,"line":51},[33,167195,100],{"emptyLinePlaceholder":99},[33,167197,167198,167200,167202,167204],{"class":35,"line":64},[33,167199,5282],{"class":39},[33,167201,2120],{"class":47},[33,167203,681],{"class":39},[33,167205,2125],{"class":47},[33,167207,167208,167210,167212,167214,167216,167218],{"class":35,"line":76},[33,167209,593],{"class":39},[33,167211,154331],{"class":47},[33,167213,993],{"class":60},[33,167215,2172],{"class":47},[33,167217,5206],{"class":39},[33,167219,162596],{"class":47},[33,167221,167222,167224],{"class":35,"line":87},[33,167223,807],{"class":72},[33,167225,152230],{"class":47},[33,167227,167228],{"class":35,"line":96},[33,167229,33856],{"class":39},[33,167231,167232,167234],{"class":35,"line":103},[33,167233,3963],{"class":39},[33,167235,605],{"class":47},[33,167237,167238,167240,167242,167245],{"class":35,"line":108},[33,167239,193],{"class":72},[33,167241,133],{"class":47},[33,167243,167244],{"class":60},"\"没有找到\"",[33,167246,226],{"class":47},[14,167248,167250],{"id":167249},"_613-容器通用操作","6.13 容器通用操作",[19,167252,167253],{},"长度：",[23,167255,167257],{"className":25,"code":167256,"language":27,"meta":28,"style":28},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[30,167258,167259,167278,167288],{"__ignoreMap":28},[33,167260,167261,167263,167266,167268,167270,167272,167274,167276],{"class":35,"line":36},[33,167262,9604],{"class":72},[33,167264,167265],{"class":47},"([",[33,167267,720],{"class":72},[33,167269,245],{"class":47},[33,167271,725],{"class":72},[33,167273,245],{"class":47},[33,167275,730],{"class":72},[33,167277,6907],{"class":47},[33,167279,167280,167282,167284,167286],{"class":35,"line":51},[33,167281,9604],{"class":72},[33,167283,133],{"class":47},[33,167285,158055],{"class":60},[33,167287,226],{"class":47},[33,167289,167290,167292,167295,167297,167299,167301],{"class":35,"line":64},[33,167291,9604],{"class":72},[33,167293,167294],{"class":47},"({",[33,167296,993],{"class":60},[33,167298,996],{"class":47},[33,167300,242],{"class":60},[33,167302,167303],{"class":47},"})\n",[19,167305,167306],{},"最大最小：",[23,167308,167310],{"className":25,"code":167309,"language":27,"meta":28,"style":28},"max([1, 2, 3])\nmin([1, 2, 3])\n",[30,167311,167312,167330],{"__ignoreMap":28},[33,167313,167314,167316,167318,167320,167322,167324,167326,167328],{"class":35,"line":36},[33,167315,8261],{"class":72},[33,167317,167265],{"class":47},[33,167319,720],{"class":72},[33,167321,245],{"class":47},[33,167323,725],{"class":72},[33,167325,245],{"class":47},[33,167327,730],{"class":72},[33,167329,6907],{"class":47},[33,167331,167332,167335,167337,167339,167341,167343,167345,167347],{"class":35,"line":51},[33,167333,167334],{"class":72},"min",[33,167336,167265],{"class":47},[33,167338,720],{"class":72},[33,167340,245],{"class":47},[33,167342,725],{"class":72},[33,167344,245],{"class":47},[33,167346,730],{"class":72},[33,167348,6907],{"class":47},[19,167350,167351],{},"求和：",[23,167353,167355],{"className":25,"code":167354,"language":27,"meta":28,"style":28},"sum([1, 2, 3])\n",[30,167356,167357],{"__ignoreMap":28},[33,167358,167359,167362,167364,167366,167368,167370,167372,167374],{"class":35,"line":36},[33,167360,167361],{"class":72},"sum",[33,167363,167265],{"class":47},[33,167365,720],{"class":72},[33,167367,245],{"class":47},[33,167369,725],{"class":72},[33,167371,245],{"class":47},[33,167373,730],{"class":72},[33,167375,6907],{"class":47},[19,167377,165628],{},[23,167379,167381],{"className":25,"code":167380,"language":27,"meta":28,"style":28},"sorted([3, 1, 2])\n",[30,167382,167383],{"__ignoreMap":28},[33,167384,167385,167387,167389,167391,167393,167395,167397,167399],{"class":35,"line":36},[33,167386,1458],{"class":72},[33,167388,167265],{"class":47},[33,167390,730],{"class":72},[33,167392,245],{"class":47},[33,167394,720],{"class":72},[33,167396,245],{"class":47},[33,167398,725],{"class":72},[33,167400,6907],{"class":47},[19,167402,167403],{},"类型转换：",[23,167405,167407],{"className":25,"code":167406,"language":27,"meta":28,"style":28},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[30,167408,167409,167419,167437],{"__ignoreMap":28},[33,167410,167411,167413,167415,167417],{"class":35,"line":36},[33,167412,1366],{"class":72},[33,167414,133],{"class":47},[33,167416,158055],{"class":60},[33,167418,226],{"class":47},[33,167420,167421,167423,167425,167427,167429,167431,167433,167435],{"class":35,"line":51},[33,167422,157440],{"class":72},[33,167424,167265],{"class":47},[33,167426,720],{"class":72},[33,167428,245],{"class":47},[33,167430,725],{"class":72},[33,167432,245],{"class":47},[33,167434,730],{"class":72},[33,167436,6907],{"class":47},[33,167438,167439,167441,167443,167445,167447,167449,167451,167453,167455,167457],{"class":35,"line":64},[33,167440,157465],{"class":72},[33,167442,167265],{"class":47},[33,167444,720],{"class":72},[33,167446,245],{"class":47},[33,167448,720],{"class":72},[33,167450,245],{"class":47},[33,167452,725],{"class":72},[33,167454,245],{"class":47},[33,167456,730],{"class":72},[33,167458,6907],{"class":47},[19,167460,167461],{},"成员判断：",[23,167463,167465],{"className":25,"code":167464,"language":27,"meta":28,"style":28},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[30,167466,167467,167483,167507],{"__ignoreMap":28},[33,167468,167469,167471,167473,167475,167478,167481],{"class":35,"line":36},[33,167470,122],{"class":72},[33,167472,133],{"class":47},[33,167474,548],{"class":60},[33,167476,167477],{"class":39}," in",[33,167479,167480],{"class":60}," \"abc\"",[33,167482,226],{"class":47},[33,167484,167485,167487,167489,167491,167493,167495,167497,167499,167501,167503,167505],{"class":35,"line":51},[33,167486,122],{"class":72},[33,167488,133],{"class":47},[33,167490,720],{"class":72},[33,167492,167477],{"class":39},[33,167494,906],{"class":47},[33,167496,720],{"class":72},[33,167498,245],{"class":47},[33,167500,725],{"class":72},[33,167502,245],{"class":47},[33,167504,730],{"class":72},[33,167506,6907],{"class":47},[33,167508,167509,167511,167513,167515,167517,167519,167521,167523,167525],{"class":35,"line":64},[33,167510,122],{"class":72},[33,167512,133],{"class":47},[33,167514,993],{"class":60},[33,167516,167477],{"class":39},[33,167518,965],{"class":47},[33,167520,993],{"class":60},[33,167522,996],{"class":47},[33,167524,242],{"class":60},[33,167526,167303],{"class":47},[14,167528,167530],{"id":167529},"_614-推导式","6.14 推导式",[19,167532,167533],{},"推导式用于快速生成容器。",[19,167535,167536],{},"列表推导式：",[23,167538,167540],{"className":25,"code":167539,"language":27,"meta":28,"style":28},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[30,167541,167542,167569],{"__ignoreMap":28},[33,167543,167544,167546,167548,167551,167553,167555,167557,167559,167561,167563,167565,167567],{"class":35,"line":36},[33,167545,901],{"class":47},[33,167547,57],{"class":39},[33,167549,167550],{"class":47}," [i ",[33,167552,5282],{"class":39},[33,167554,11684],{"class":47},[33,167556,681],{"class":39},[33,167558,34670],{"class":72},[33,167560,133],{"class":47},[33,167562,720],{"class":72},[33,167564,245],{"class":47},[33,167566,2765],{"class":72},[33,167568,99507],{"class":47},[33,167570,167571,167573],{"class":35,"line":51},[33,167572,122],{"class":72},[33,167574,166470],{"class":47},[19,167576,167577],{},"带条件：",[23,167579,167581],{"className":25,"code":167580,"language":27,"meta":28,"style":28},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[30,167582,167583,167624],{"__ignoreMap":28},[33,167584,167585,167588,167590,167592,167594,167596,167598,167600,167602,167604,167606,167608,167610,167612,167614,167616,167618,167620,167622],{"class":35,"line":36},[33,167586,167587],{"class":47},"even_nums ",[33,167589,57],{"class":39},[33,167591,167550],{"class":47},[33,167593,5282],{"class":39},[33,167595,11684],{"class":47},[33,167597,681],{"class":39},[33,167599,34670],{"class":72},[33,167601,133],{"class":47},[33,167603,720],{"class":72},[33,167605,245],{"class":47},[33,167607,2758],{"class":72},[33,167609,15954],{"class":47},[33,167611,3805],{"class":39},[33,167613,11684],{"class":47},[33,167615,1429],{"class":39},[33,167617,1354],{"class":72},[33,167619,1434],{"class":39},[33,167621,1437],{"class":72},[33,167623,919],{"class":47},[33,167625,167626,167628],{"class":35,"line":51},[33,167627,122],{"class":72},[33,167629,167630],{"class":47},"(even_nums)\n",[19,167632,167633],{},"字典推导式：",[23,167635,167637],{"className":25,"code":167636,"language":27,"meta":28,"style":28},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[30,167638,167639,167673],{"__ignoreMap":28},[33,167640,167641,167644,167646,167649,167651,167653,167656,167658,167660,167662,167664,167666,167668,167670],{"class":35,"line":36},[33,167642,167643],{"class":47},"squares ",[33,167645,57],{"class":39},[33,167647,167648],{"class":47}," {i: i ",[33,167650,787],{"class":39},[33,167652,1354],{"class":72},[33,167654,167655],{"class":39}," for",[33,167657,11684],{"class":47},[33,167659,681],{"class":39},[33,167661,34670],{"class":72},[33,167663,133],{"class":47},[33,167665,720],{"class":72},[33,167667,245],{"class":47},[33,167669,2765],{"class":72},[33,167671,167672],{"class":47},")}\n",[33,167674,167675,167677],{"class":35,"line":51},[33,167676,122],{"class":72},[33,167678,167679],{"class":47},"(squares)\n",[19,167681,167682],{},"集合推导式：",[23,167684,167686],{"className":25,"code":167685,"language":27,"meta":28,"style":28},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[30,167687,167688,167709],{"__ignoreMap":28},[33,167689,167690,167693,167695,167698,167700,167702,167704,167707],{"class":35,"line":36},[33,167691,167692],{"class":47},"chars ",[33,167694,57],{"class":39},[33,167696,167697],{"class":47}," {ch ",[33,167699,5282],{"class":39},[33,167701,161859],{"class":47},[33,167703,681],{"class":39},[33,167705,167706],{"class":60}," \"hello\"",[33,167708,1010],{"class":47},[33,167710,167711,167713],{"class":35,"line":51},[33,167712,122],{"class":72},[33,167714,167715],{"class":47},"(chars)\n",[19,167717,167718],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167720,167722],{"id":167721},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[23,167724,167726],{"className":25,"code":167725,"language":27,"meta":28,"style":28},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[30,167727,167728,167736,167756,167776,167796,167816,167820,167824,167832,167846,167854,167858,167868,167880,167884,167904,167913,167917,167933,167938,167942,167956,167960,167982,168018],{"__ignoreMap":28},[33,167729,167730,167732,167734],{"class":35,"line":36},[33,167731,1082],{"class":47},[33,167733,57],{"class":39},[33,167735,1087],{"class":47},[33,167737,167738,167740,167742,167744,167746,167748,167750,167752,167754],{"class":35,"line":51},[33,167739,1092],{"class":47},[33,167741,993],{"class":60},[33,167743,996],{"class":47},[33,167745,242],{"class":60},[33,167747,245],{"class":47},[33,167749,1103],{"class":60},[33,167751,996],{"class":47},[33,167753,1108],{"class":72},[33,167755,1111],{"class":47},[33,167757,167758,167760,167762,167764,167766,167768,167770,167772,167774],{"class":35,"line":64},[33,167759,1092],{"class":47},[33,167761,993],{"class":60},[33,167763,996],{"class":47},[33,167765,1122],{"class":60},[33,167767,245],{"class":47},[33,167769,1103],{"class":60},[33,167771,996],{"class":47},[33,167773,1131],{"class":72},[33,167775,1111],{"class":47},[33,167777,167778,167780,167782,167784,167786,167788,167790,167792,167794],{"class":35,"line":76},[33,167779,1092],{"class":47},[33,167781,993],{"class":60},[33,167783,996],{"class":47},[33,167785,1144],{"class":60},[33,167787,245],{"class":47},[33,167789,1103],{"class":60},[33,167791,996],{"class":47},[33,167793,1153],{"class":72},[33,167795,1111],{"class":47},[33,167797,167798,167800,167802,167804,167806,167808,167810,167812,167814],{"class":35,"line":87},[33,167799,1092],{"class":47},[33,167801,993],{"class":60},[33,167803,996],{"class":47},[33,167805,165467],{"class":60},[33,167807,245],{"class":47},[33,167809,1103],{"class":60},[33,167811,996],{"class":47},[33,167813,2080],{"class":72},[33,167815,1111],{"class":47},[33,167817,167818],{"class":35,"line":96},[33,167819,919],{"class":47},[33,167821,167822],{"class":35,"line":103},[33,167823,100],{"emptyLinePlaceholder":99},[33,167825,167826,167828,167830],{"class":35,"line":108},[33,167827,159432],{"class":47},[33,167829,57],{"class":39},[33,167831,670],{"class":72},[33,167833,167834,167837,167839,167842,167844],{"class":35,"line":119},[33,167835,167836],{"class":47},"max_student ",[33,167838,57],{"class":39},[33,167840,167841],{"class":47}," students[",[33,167843,2617],{"class":72},[33,167845,919],{"class":47},[33,167847,167848,167850,167852],{"class":35,"line":128},[33,167849,2157],{"class":47},[33,167851,57],{"class":39},[33,167853,615],{"class":47},[33,167855,167856],{"class":35,"line":1753},[33,167857,100],{"emptyLinePlaceholder":99},[33,167859,167860,167862,167864,167866],{"class":35,"line":1763},[33,167861,5282],{"class":39},[33,167863,2120],{"class":47},[33,167865,681],{"class":39},[33,167867,2125],{"class":47},[33,167869,167870,167872,167874,167876,167878],{"class":35,"line":1775},[33,167871,665],{"class":47},[33,167873,692],{"class":39},[33,167875,154331],{"class":47},[33,167877,1103],{"class":60},[33,167879,919],{"class":47},[33,167881,167882],{"class":35,"line":1780},[33,167883,100],{"emptyLinePlaceholder":99},[33,167885,167886,167888,167890,167892,167894,167896,167899,167901],{"class":35,"line":1785},[33,167887,593],{"class":39},[33,167889,154331],{"class":47},[33,167891,1103],{"class":60},[33,167893,2172],{"class":47},[33,167895,3367],{"class":39},[33,167897,167898],{"class":47}," max_student[",[33,167900,1103],{"class":60},[33,167902,167903],{"class":47},"]:\n",[33,167905,167906,167909,167911],{"class":35,"line":1940},[33,167907,167908],{"class":47},"        max_student ",[33,167910,57],{"class":39},[33,167912,154347],{"class":47},[33,167914,167915],{"class":35,"line":2183},[33,167916,100],{"emptyLinePlaceholder":99},[33,167918,167919,167921,167923,167925,167927,167929,167931],{"class":35,"line":2208},[33,167920,593],{"class":39},[33,167922,154331],{"class":47},[33,167924,1103],{"class":60},[33,167926,2172],{"class":47},[33,167928,2175],{"class":39},[33,167930,2178],{"class":72},[33,167932,605],{"class":47},[33,167934,167935],{"class":35,"line":2234},[33,167936,167937],{"class":47},"        passed.append(student)\n",[33,167939,167940],{"class":35,"line":2239},[33,167941,100],{"emptyLinePlaceholder":99},[33,167943,167944,167946,167948,167950,167952,167954],{"class":35,"line":2247},[33,167945,165929],{"class":47},[33,167947,57],{"class":39},[33,167949,165934],{"class":47},[33,167951,3001],{"class":39},[33,167953,9577],{"class":72},[33,167955,1199],{"class":47},[33,167957,167958],{"class":35,"line":2255},[33,167959,100],{"emptyLinePlaceholder":99},[33,167961,167962,167964,167966,167968,167970,167972,167974,167976,167978,167980],{"class":35,"line":3992},[33,167963,122],{"class":72},[33,167965,133],{"class":47},[33,167967,198],{"class":39},[33,167969,165952],{"class":60},[33,167971,204],{"class":72},[33,167973,165957],{"class":47},[33,167975,159331],{"class":39},[33,167977,210],{"class":72},[33,167979,397],{"class":60},[33,167981,226],{"class":47},[33,167983,167984,167986,167988,167990,167993,167995,167998,168000,168002,168004,168006,168008,168010,168012,168014,168016],{"class":35,"line":4009},[33,167985,122],{"class":72},[33,167987,133],{"class":47},[33,167989,198],{"class":39},[33,167991,167992],{"class":60},"\"最高分学生:",[33,167994,204],{"class":72},[33,167996,167997],{"class":47},"max_student[",[33,167999,155061],{"class":60},[33,168001,3348],{"class":47},[33,168003,210],{"class":72},[33,168005,965],{"class":72},[33,168007,167997],{"class":47},[33,168009,155099],{"class":60},[33,168011,3348],{"class":47},[33,168013,210],{"class":72},[33,168015,397],{"class":60},[33,168017,226],{"class":47},[33,168019,168020,168022,168024,168026,168029,168032,168035,168037,168039],{"class":35,"line":4014},[33,168021,122],{"class":72},[33,168023,133],{"class":47},[33,168025,198],{"class":39},[33,168027,168028],{"class":60},"\"及格人数:",[33,168030,168031],{"class":72},"{len",[33,168033,168034],{"class":47},"(passed)",[33,168036,210],{"class":72},[33,168038,397],{"class":60},[33,168040,226],{"class":47},[14,168042,168044],{"id":168043},"_616-易错点","6.16 易错点",[328,168046,168047,168050,168053,168056,168062,168071],{},[331,168048,168049],{},"列表可变，元组和字符串不可变。",[331,168051,168052],{},"切片结束位置不包含。",[331,168054,168055],{},"字典通过 key 取值，不是通过索引。",[331,168057,168058,168059,30622],{},"空集合要用 ",[30,168060,168061],{},"set()",[331,168063,2318,168064,168067,168068,30622],{},[30,168065,168066],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[30,168069,168070],{},"get()",[331,168072,168073],{},"嵌套容器要先看清楚每一层是什么类型。",[14,168075,168077],{"id":168076},"_617-本章练习","6.17 本章练习",[328,168079,168080,168083,168086,168089,168092],{},[331,168081,168082],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[331,168084,168085],{},"输入一句话，统计每个字符出现次数。",[331,168087,168088],{},"使用集合去除列表中的重复元素。",[331,168090,168091],{},"使用字典保存一个学生的信息，并实现修改成绩。",[331,168093,168094],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2331,168096,168097],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":168099},[168100,168101,168102,168103,168104,168105,168106,168107,168108,168109,168110,168111,168112,168113,168114,168115,168116],{"id":165089,"depth":51,"text":165090},{"id":165206,"depth":51,"text":165207},{"id":165296,"depth":51,"text":165297},{"id":165420,"depth":51,"text":165421},{"id":165781,"depth":51,"text":165782},{"id":165968,"depth":51,"text":165969},{"id":166087,"depth":51,"text":166088},{"id":166229,"depth":51,"text":166230},{"id":166415,"depth":51,"text":166416},{"id":166659,"depth":51,"text":166660},{"id":166869,"depth":51,"text":166870},{"id":166952,"depth":51,"text":166953},{"id":167249,"depth":51,"text":167250},{"id":167529,"depth":51,"text":167530},{"id":167721,"depth":51,"text":167722},{"id":168043,"depth":51,"text":168044},{"id":168076,"depth":51,"text":168077},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":165081,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":4,"title":5,"body":168123,"description":2359,"extension":2360,"meta":170086,"navigation":99,"path":2362,"seo":170087,"stem":2364,"__hash__":2365},{"type":7,"value":168124,"toc":170061},[168125,168127,168129,168131,168205,168207,168225,168227,168229,168231,168291,168293,168309,168311,168313,168357,168359,168365,168367,168369,168443,168445,168447,168469,168471,168493,168495,168497,168499,168553,168555,168557,168605,168607,168609,168613,168713,168715,168719,168787,168789,168791,168855,168857,168935,168937,168941,168973,168975,168977,169085,169089,169091,169093,169159,169161,169163,169165,169169,169227,169229,169233,169299,169301,169305,169419,169421,169423,169493,169495,169497,169499,169595,169597,169609,169611,169613,169745,169751,169753,169755,169763,169765,170011,170013,170037,170039,170059],[10,168126,5],{"id":12},[14,168128,17],{"id":16},[19,168130,21],{},[23,168132,168133],{"className":25,"code":26,"language":27,"meta":28,"style":28},[30,168134,168135,168143,168151,168159,168167,168173,168177,168181,168189,168195],{"__ignoreMap":28},[33,168136,168137,168139,168141],{"class":35,"line":36},[33,168138,40],{"class":39},[33,168140,44],{"class":43},[33,168142,48],{"class":47},[33,168144,168145,168147,168149],{"class":35,"line":51},[33,168146,54],{"class":47},[33,168148,57],{"class":39},[33,168150,61],{"class":60},[33,168152,168153,168155,168157],{"class":35,"line":64},[33,168154,67],{"class":47},[33,168156,57],{"class":39},[33,168158,73],{"class":72},[33,168160,168161,168163,168165],{"class":35,"line":76},[33,168162,79],{"class":47},[33,168164,57],{"class":39},[33,168166,84],{"class":72},[33,168168,168169,168171],{"class":35,"line":87},[33,168170,90],{"class":39},[33,168172,93],{"class":47},[33,168174,168175],{"class":35,"line":96},[33,168176,100],{"emptyLinePlaceholder":99},[33,168178,168179],{"class":35,"line":103},[33,168180,100],{"emptyLinePlaceholder":99},[33,168182,168183,168185,168187],{"class":35,"line":108},[33,168184,111],{"class":47},[33,168186,57],{"class":39},[33,168188,116],{"class":47},[33,168190,168191,168193],{"class":35,"line":119},[33,168192,122],{"class":72},[33,168194,125],{"class":47},[33,168196,168197,168199,168201,168203],{"class":35,"line":128},[33,168198,122],{"class":72},[33,168200,133],{"class":47},[33,168202,136],{"class":72},[33,168204,139],{"class":47},[19,168206,142],{},[23,168208,168209],{"className":25,"code":145,"language":27,"meta":28,"style":28},[30,168210,168211,168219],{"__ignoreMap":28},[33,168212,168213,168215,168217],{"class":35,"line":36},[33,168214,152],{"class":47},[33,168216,57],{"class":39},[33,168218,116],{"class":47},[33,168220,168221,168223],{"class":35,"line":51},[33,168222,122],{"class":72},[33,168224,163],{"class":47},[19,168226,166],{},[14,168228,170],{"id":169},[19,168230,173],{},[23,168232,168233],{"className":25,"code":176,"language":27,"meta":28,"style":28},[30,168234,168235,168243,168271,168275,168279],{"__ignoreMap":28},[33,168236,168237,168239,168241],{"class":35,"line":36},[33,168238,40],{"class":39},[33,168240,185],{"class":43},[33,168242,188],{"class":47},[33,168244,168245,168247,168249,168251,168253,168255,168257,168259,168261,168263,168265,168267,168269],{"class":35,"line":51},[33,168246,193],{"class":72},[33,168248,133],{"class":47},[33,168250,198],{"class":39},[33,168252,201],{"class":60},[33,168254,204],{"class":72},[33,168256,207],{"class":47},[33,168258,210],{"class":72},[33,168260,213],{"class":60},[33,168262,204],{"class":72},[33,168264,218],{"class":47},[33,168266,210],{"class":72},[33,168268,223],{"class":60},[33,168270,226],{"class":47},[33,168272,168273],{"class":35,"line":64},[33,168274,100],{"emptyLinePlaceholder":99},[33,168276,168277],{"class":35,"line":76},[33,168278,100],{"emptyLinePlaceholder":99},[33,168280,168281,168283,168285,168287,168289],{"class":35,"line":87},[33,168282,239],{"class":47},[33,168284,242],{"class":60},[33,168286,245],{"class":47},[33,168288,248],{"class":72},[33,168290,226],{"class":47},[19,168292,253],{},[23,168294,168295],{"className":25,"code":256,"language":27,"meta":28,"style":28},[30,168296,168297],{"__ignoreMap":28},[33,168298,168299,168301,168303,168305,168307],{"class":35,"line":36},[33,168300,239],{"class":47},[33,168302,248],{"class":72},[33,168304,245],{"class":47},[33,168306,242],{"class":60},[33,168308,226],{"class":47},[14,168310,274],{"id":273},[19,168312,277],{},[23,168314,168315],{"className":25,"code":280,"language":27,"meta":28,"style":28},[30,168316,168317,168337],{"__ignoreMap":28},[33,168318,168319,168321,168323,168325,168327,168329,168331,168333,168335],{"class":35,"line":36},[33,168320,239],{"class":47},[33,168322,207],{"class":289},[33,168324,57],{"class":39},[33,168326,242],{"class":60},[33,168328,245],{"class":47},[33,168330,218],{"class":289},[33,168332,57],{"class":39},[33,168334,248],{"class":72},[33,168336,226],{"class":47},[33,168338,168339,168341,168343,168345,168347,168349,168351,168353,168355],{"class":35,"line":51},[33,168340,239],{"class":47},[33,168342,218],{"class":289},[33,168344,57],{"class":39},[33,168346,248],{"class":72},[33,168348,245],{"class":47},[33,168350,207],{"class":289},[33,168352,57],{"class":39},[33,168354,242],{"class":60},[33,168356,226],{"class":47},[19,168358,326],{},[328,168360,168361,168363],{},[331,168362,333],{},[331,168364,336],{},[14,168366,340],{"id":339},[19,168368,343],{},[23,168370,168371],{"className":25,"code":346,"language":27,"meta":28,"style":28},[30,168372,168373,168387,168415,168419,168423,168431],{"__ignoreMap":28},[33,168374,168375,168377,168379,168381,168383,168385],{"class":35,"line":36},[33,168376,40],{"class":39},[33,168378,355],{"class":43},[33,168380,358],{"class":47},[33,168382,57],{"class":39},[33,168384,363],{"class":72},[33,168386,366],{"class":47},[33,168388,168389,168391,168393,168395,168397,168399,168401,168403,168405,168407,168409,168411,168413],{"class":35,"line":51},[33,168390,193],{"class":72},[33,168392,133],{"class":47},[33,168394,198],{"class":39},[33,168396,377],{"class":60},[33,168398,204],{"class":72},[33,168400,382],{"class":47},[33,168402,210],{"class":72},[33,168404,387],{"class":60},[33,168406,204],{"class":72},[33,168408,392],{"class":47},[33,168410,210],{"class":72},[33,168412,397],{"class":60},[33,168414,226],{"class":47},[33,168416,168417],{"class":35,"line":64},[33,168418,100],{"emptyLinePlaceholder":99},[33,168420,168421],{"class":35,"line":76},[33,168422,100],{"emptyLinePlaceholder":99},[33,168424,168425,168427,168429],{"class":35,"line":87},[33,168426,412],{"class":47},[33,168428,415],{"class":60},[33,168430,226],{"class":47},[33,168432,168433,168435,168437,168439,168441],{"class":35,"line":96},[33,168434,412],{"class":47},[33,168436,415],{"class":60},[33,168438,245],{"class":47},[33,168440,428],{"class":72},[33,168442,226],{"class":47},[19,168444,433],{},[19,168446,436],{},[23,168448,168449],{"className":25,"code":439,"language":27,"meta":28,"style":28},[30,168450,168451,168465],{"__ignoreMap":28},[33,168452,168453,168455,168457,168459,168461,168463],{"class":35,"line":36},[33,168454,40],{"class":39},[33,168456,355],{"class":43},[33,168458,450],{"class":47},[33,168460,57],{"class":39},[33,168462,363],{"class":72},[33,168464,457],{"class":47},[33,168466,168467],{"class":35,"line":51},[33,168468,462],{"class":39},[19,168470,465],{},[23,168472,168473],{"className":25,"code":468,"language":27,"meta":28,"style":28},[30,168474,168475,168489],{"__ignoreMap":28},[33,168476,168477,168479,168481,168483,168485,168487],{"class":35,"line":36},[33,168478,40],{"class":39},[33,168480,355],{"class":43},[33,168482,358],{"class":47},[33,168484,57],{"class":39},[33,168486,363],{"class":72},[33,168488,366],{"class":47},[33,168490,168491],{"class":35,"line":51},[33,168492,462],{"class":39},[14,168494,492],{"id":491},[19,168496,495],{},[19,168498,498],{},[23,168500,168501],{"className":25,"code":501,"language":27,"meta":28,"style":28},[30,168502,168503,168515,168519,168525,168529,168533,168543],{"__ignoreMap":28},[33,168504,168505,168507,168509,168511,168513],{"class":35,"line":36},[33,168506,40],{"class":39},[33,168508,510],{"class":43},[33,168510,513],{"class":47},[33,168512,57],{"class":39},[33,168514,518],{"class":47},[33,168516,168517],{"class":35,"line":51},[33,168518,523],{"class":47},[33,168520,168521,168523],{"class":35,"line":64},[33,168522,90],{"class":39},[33,168524,530],{"class":47},[33,168526,168527],{"class":35,"line":76},[33,168528,100],{"emptyLinePlaceholder":99},[33,168530,168531],{"class":35,"line":87},[33,168532,100],{"emptyLinePlaceholder":99},[33,168534,168535,168537,168539,168541],{"class":35,"line":96},[33,168536,122],{"class":72},[33,168538,545],{"class":47},[33,168540,548],{"class":60},[33,168542,551],{"class":47},[33,168544,168545,168547,168549,168551],{"class":35,"line":103},[33,168546,122],{"class":72},[33,168548,545],{"class":47},[33,168550,560],{"class":60},[33,168552,551],{"class":47},[19,168554,565],{},[19,168556,568],{},[23,168558,168559],{"className":25,"code":571,"language":27,"meta":28,"style":28},[30,168560,168561,168575,168587,168595,168599],{"__ignoreMap":28},[33,168562,168563,168565,168567,168569,168571,168573],{"class":35,"line":36},[33,168564,40],{"class":39},[33,168566,510],{"class":43},[33,168568,513],{"class":47},[33,168570,57],{"class":39},[33,168572,586],{"class":72},[33,168574,366],{"class":47},[33,168576,168577,168579,168581,168583,168585],{"class":35,"line":51},[33,168578,593],{"class":39},[33,168580,596],{"class":47},[33,168582,599],{"class":39},[33,168584,602],{"class":72},[33,168586,605],{"class":47},[33,168588,168589,168591,168593],{"class":35,"line":64},[33,168590,610],{"class":47},[33,168592,57],{"class":39},[33,168594,615],{"class":47},[33,168596,168597],{"class":35,"line":76},[33,168598,523],{"class":47},[33,168600,168601,168603],{"class":35,"line":87},[33,168602,90],{"class":39},[33,168604,530],{"class":47},[14,168606,629],{"id":628},[631,168608,634],{"id":633},[19,168610,168611,640],{},[30,168612,639],{},[23,168614,168615],{"className":25,"code":643,"language":27,"meta":28,"style":28},[30,168616,168617,168629,168637,168647,168655,168661,168665,168669,168687],{"__ignoreMap":28},[33,168618,168619,168621,168623,168625,168627],{"class":35,"line":36},[33,168620,40],{"class":39},[33,168622,652],{"class":43},[33,168624,133],{"class":47},[33,168626,657],{"class":39},[33,168628,660],{"class":47},[33,168630,168631,168633,168635],{"class":35,"line":51},[33,168632,665],{"class":47},[33,168634,57],{"class":39},[33,168636,670],{"class":72},[33,168638,168639,168641,168643,168645],{"class":35,"line":64},[33,168640,675],{"class":39},[33,168642,678],{"class":47},[33,168644,681],{"class":39},[33,168646,684],{"class":47},[33,168648,168649,168651,168653],{"class":35,"line":76},[33,168650,689],{"class":47},[33,168652,692],{"class":39},[33,168654,695],{"class":47},[33,168656,168657,168659],{"class":35,"line":87},[33,168658,90],{"class":39},[33,168660,702],{"class":47},[33,168662,168663],{"class":35,"line":96},[33,168664,100],{"emptyLinePlaceholder":99},[33,168666,168667],{"class":35,"line":103},[33,168668,100],{"emptyLinePlaceholder":99},[33,168670,168671,168673,168675,168677,168679,168681,168683,168685],{"class":35,"line":108},[33,168672,122],{"class":72},[33,168674,717],{"class":47},[33,168676,720],{"class":72},[33,168678,245],{"class":47},[33,168680,725],{"class":72},[33,168682,245],{"class":47},[33,168684,730],{"class":72},[33,168686,551],{"class":47},[33,168688,168689,168691,168693,168695,168697,168699,168701,168703,168705,168707,168709,168711],{"class":35,"line":119},[33,168690,122],{"class":72},[33,168692,717],{"class":47},[33,168694,720],{"class":72},[33,168696,245],{"class":47},[33,168698,725],{"class":72},[33,168700,245],{"class":47},[33,168702,730],{"class":72},[33,168704,245],{"class":47},[33,168706,753],{"class":72},[33,168708,245],{"class":47},[33,168710,758],{"class":72},[33,168712,551],{"class":47},[631,168714,764],{"id":763},[19,168716,168717,770],{},[30,168718,769],{},[23,168720,168721],{"className":25,"code":773,"language":27,"meta":28,"style":28},[30,168722,168723,168735,168745,168751,168755,168759],{"__ignoreMap":28},[33,168724,168725,168727,168729,168731,168733],{"class":35,"line":36},[33,168726,40],{"class":39},[33,168728,782],{"class":43},[33,168730,133],{"class":47},[33,168732,787],{"class":39},[33,168734,790],{"class":47},[33,168736,168737,168739,168741,168743],{"class":35,"line":51},[33,168738,675],{"class":39},[33,168740,797],{"class":47},[33,168742,681],{"class":39},[33,168744,802],{"class":47},[33,168746,168747,168749],{"class":35,"line":64},[33,168748,807],{"class":72},[33,168750,810],{"class":47},[33,168752,168753],{"class":35,"line":76},[33,168754,100],{"emptyLinePlaceholder":99},[33,168756,168757],{"class":35,"line":87},[33,168758,100],{"emptyLinePlaceholder":99},[33,168760,168761,168763,168765,168767,168769,168771,168773,168775,168777,168779,168781,168783,168785],{"class":35,"line":96},[33,168762,823],{"class":47},[33,168764,207],{"class":289},[33,168766,57],{"class":39},[33,168768,242],{"class":60},[33,168770,245],{"class":47},[33,168772,218],{"class":289},[33,168774,57],{"class":39},[33,168776,248],{"class":72},[33,168778,245],{"class":47},[33,168780,842],{"class":289},[33,168782,57],{"class":39},[33,168784,847],{"class":60},[33,168786,226],{"class":47},[14,168788,853],{"id":852},[19,168790,856],{},[23,168792,168793],{"className":25,"code":859,"language":27,"meta":28,"style":28},[30,168794,168795,168803,168817,168821,168825,168845],{"__ignoreMap":28},[33,168796,168797,168799,168801],{"class":35,"line":36},[33,168798,40],{"class":39},[33,168800,652],{"class":43},[33,168802,870],{"class":47},[33,168804,168805,168807,168809,168811,168813,168815],{"class":35,"line":51},[33,168806,90],{"class":39},[33,168808,877],{"class":47},[33,168810,880],{"class":39},[33,168812,883],{"class":47},[33,168814,880],{"class":39},[33,168816,888],{"class":47},[33,168818,168819],{"class":35,"line":64},[33,168820,100],{"emptyLinePlaceholder":99},[33,168822,168823],{"class":35,"line":76},[33,168824,100],{"emptyLinePlaceholder":99},[33,168826,168827,168829,168831,168833,168835,168837,168839,168841,168843],{"class":35,"line":87},[33,168828,901],{"class":47},[33,168830,57],{"class":39},[33,168832,906],{"class":47},[33,168834,720],{"class":72},[33,168836,245],{"class":47},[33,168838,725],{"class":72},[33,168840,245],{"class":47},[33,168842,730],{"class":72},[33,168844,919],{"class":47},[33,168846,168847,168849,168851,168853],{"class":35,"line":96},[33,168848,122],{"class":72},[33,168850,717],{"class":47},[33,168852,657],{"class":39},[33,168854,930],{"class":47},[19,168856,933],{},[23,168858,168859],{"className":25,"code":936,"language":27,"meta":28,"style":28},[30,168860,168861,168869,168895,168899,168903,168927],{"__ignoreMap":28},[33,168862,168863,168865,168867],{"class":35,"line":36},[33,168864,40],{"class":39},[33,168866,185],{"class":43},[33,168868,188],{"class":47},[33,168870,168871,168873,168875,168877,168879,168881,168883,168885,168887,168889,168891,168893],{"class":35,"line":51},[33,168872,193],{"class":72},[33,168874,133],{"class":47},[33,168876,198],{"class":39},[33,168878,397],{"class":60},[33,168880,204],{"class":72},[33,168882,207],{"class":47},[33,168884,210],{"class":72},[33,168886,965],{"class":72},[33,168888,218],{"class":47},[33,168890,210],{"class":72},[33,168892,397],{"class":60},[33,168894,226],{"class":47},[33,168896,168897],{"class":35,"line":64},[33,168898,100],{"emptyLinePlaceholder":99},[33,168900,168901],{"class":35,"line":76},[33,168902,100],{"emptyLinePlaceholder":99},[33,168904,168905,168907,168909,168911,168913,168915,168917,168919,168921,168923,168925],{"class":35,"line":87},[33,168906,986],{"class":47},[33,168908,57],{"class":39},[33,168910,965],{"class":47},[33,168912,993],{"class":60},[33,168914,996],{"class":47},[33,168916,242],{"class":60},[33,168918,245],{"class":47},[33,168920,1003],{"class":60},[33,168922,996],{"class":47},[33,168924,248],{"class":72},[33,168926,1010],{"class":47},[33,168928,168929,168931,168933],{"class":35,"line":96},[33,168930,239],{"class":47},[33,168932,787],{"class":39},[33,168934,1019],{"class":47},[14,168936,1023],{"id":1022},[19,168938,168939,1029],{},[30,168940,1028],{},[23,168942,168943],{"className":25,"code":1032,"language":27,"meta":28,"style":28},[30,168944,168945,168959],{"__ignoreMap":28},[33,168946,168947,168949,168951,168953,168955,168957],{"class":35,"line":36},[33,168948,1039],{"class":47},[33,168950,57],{"class":39},[33,168952,1044],{"class":39},[33,168954,1047],{"class":47},[33,168956,880],{"class":39},[33,168958,1052],{"class":47},[33,168960,168961,168963,168965,168967,168969,168971],{"class":35,"line":51},[33,168962,122],{"class":72},[33,168964,717],{"class":47},[33,168966,720],{"class":72},[33,168968,245],{"class":47},[33,168970,725],{"class":72},[33,168972,551],{"class":47},[19,168974,1069],{},[19,168976,1072],{},[23,168978,168979],{"className":25,"code":1075,"language":27,"meta":28,"style":28},[30,168980,168981,168989,169009,169029,169049,169053,169057,169079],{"__ignoreMap":28},[33,168982,168983,168985,168987],{"class":35,"line":36},[33,168984,1082],{"class":47},[33,168986,57],{"class":39},[33,168988,1087],{"class":47},[33,168990,168991,168993,168995,168997,168999,169001,169003,169005,169007],{"class":35,"line":51},[33,168992,1092],{"class":47},[33,168994,993],{"class":60},[33,168996,996],{"class":47},[33,168998,242],{"class":60},[33,169000,245],{"class":47},[33,169002,1103],{"class":60},[33,169004,996],{"class":47},[33,169006,1108],{"class":72},[33,169008,1111],{"class":47},[33,169010,169011,169013,169015,169017,169019,169021,169023,169025,169027],{"class":35,"line":64},[33,169012,1092],{"class":47},[33,169014,993],{"class":60},[33,169016,996],{"class":47},[33,169018,1122],{"class":60},[33,169020,245],{"class":47},[33,169022,1103],{"class":60},[33,169024,996],{"class":47},[33,169026,1131],{"class":72},[33,169028,1111],{"class":47},[33,169030,169031,169033,169035,169037,169039,169041,169043,169045,169047],{"class":35,"line":76},[33,169032,1092],{"class":47},[33,169034,993],{"class":60},[33,169036,996],{"class":47},[33,169038,1144],{"class":60},[33,169040,245],{"class":47},[33,169042,1103],{"class":60},[33,169044,996],{"class":47},[33,169046,1153],{"class":72},[33,169048,1111],{"class":47},[33,169050,169051],{"class":35,"line":87},[33,169052,919],{"class":47},[33,169054,169055],{"class":35,"line":96},[33,169056,100],{"emptyLinePlaceholder":99},[33,169058,169059,169061,169063,169065,169067,169069,169071,169073,169075,169077],{"class":35,"line":103},[33,169060,1168],{"class":47},[33,169062,1171],{"class":289},[33,169064,1174],{"class":39},[33,169066,1177],{"class":47},[33,169068,1103],{"class":60},[33,169070,1182],{"class":47},[33,169072,1185],{"class":289},[33,169074,57],{"class":39},[33,169076,1190],{"class":72},[33,169078,226],{"class":47},[33,169080,169081,169083],{"class":35,"line":108},[33,169082,122],{"class":72},[33,169084,1199],{"class":47},[19,169086,1202,169087,1205],{},[30,169088,1028],{},[14,169090,1209],{"id":1208},[19,169092,1212],{},[23,169094,169095],{"className":25,"code":1215,"language":27,"meta":28,"style":28},[30,169096,169097,169105,169115,169119,169123,169131,169137,169141,169145],{"__ignoreMap":28},[33,169098,169099,169101,169103],{"class":35,"line":36},[33,169100,40],{"class":39},[33,169102,652],{"class":43},[33,169104,1226],{"class":47},[33,169106,169107,169109,169111,169113],{"class":35,"line":51},[33,169108,90],{"class":39},[33,169110,877],{"class":47},[33,169112,880],{"class":39},[33,169114,1052],{"class":47},[33,169116,169117],{"class":35,"line":64},[33,169118,100],{"emptyLinePlaceholder":99},[33,169120,169121],{"class":35,"line":76},[33,169122,100],{"emptyLinePlaceholder":99},[33,169124,169125,169127,169129],{"class":35,"line":87},[33,169126,40],{"class":39},[33,169128,1251],{"class":43},[33,169130,1254],{"class":47},[33,169132,169133,169135],{"class":35,"line":96},[33,169134,90],{"class":39},[33,169136,1261],{"class":47},[33,169138,169139],{"class":35,"line":103},[33,169140,100],{"emptyLinePlaceholder":99},[33,169142,169143],{"class":35,"line":108},[33,169144,100],{"emptyLinePlaceholder":99},[33,169146,169147,169149,169151,169153,169155,169157],{"class":35,"line":119},[33,169148,122],{"class":72},[33,169150,1276],{"class":47},[33,169152,1279],{"class":72},[33,169154,245],{"class":47},[33,169156,1284],{"class":72},[33,169158,1287],{"class":47},[19,169160,1290],{},[14,169162,1294],{"id":1293},[631,169164,1298],{"id":1297},[19,169166,169167,1304],{},[30,169168,1303],{},[23,169170,169171],{"className":25,"code":1307,"language":27,"meta":28,"style":28},[30,169172,169173,169197,169217],{"__ignoreMap":28},[33,169174,169175,169177,169179,169181,169183,169185,169187,169189,169191,169193,169195],{"class":35,"line":36},[33,169176,901],{"class":47},[33,169178,57],{"class":39},[33,169180,906],{"class":47},[33,169182,720],{"class":72},[33,169184,245],{"class":47},[33,169186,725],{"class":72},[33,169188,245],{"class":47},[33,169190,730],{"class":72},[33,169192,245],{"class":47},[33,169194,753],{"class":72},[33,169196,919],{"class":47},[33,169198,169199,169201,169203,169205,169207,169209,169211,169213,169215],{"class":35,"line":51},[33,169200,111],{"class":47},[33,169202,57],{"class":39},[33,169204,1342],{"class":72},[33,169206,133],{"class":47},[33,169208,1028],{"class":39},[33,169210,1349],{"class":47},[33,169212,657],{"class":39},[33,169214,1354],{"class":72},[33,169216,1357],{"class":47},[33,169218,169219,169221,169223,169225],{"class":35,"line":64},[33,169220,122],{"class":72},[33,169222,133],{"class":47},[33,169224,1366],{"class":72},[33,169226,139],{"class":47},[631,169228,1372],{"id":1371},[19,169230,169231,1378],{},[30,169232,1377],{},[23,169234,169235],{"className":25,"code":1381,"language":27,"meta":28,"style":28},[30,169236,169237,169265,169289],{"__ignoreMap":28},[33,169238,169239,169241,169243,169245,169247,169249,169251,169253,169255,169257,169259,169261,169263],{"class":35,"line":36},[33,169240,901],{"class":47},[33,169242,57],{"class":39},[33,169244,906],{"class":47},[33,169246,720],{"class":72},[33,169248,245],{"class":47},[33,169250,725],{"class":72},[33,169252,245],{"class":47},[33,169254,730],{"class":72},[33,169256,245],{"class":47},[33,169258,753],{"class":72},[33,169260,245],{"class":47},[33,169262,758],{"class":72},[33,169264,919],{"class":47},[33,169266,169267,169269,169271,169273,169275,169277,169279,169281,169283,169285,169287],{"class":35,"line":51},[33,169268,111],{"class":47},[33,169270,57],{"class":39},[33,169272,1420],{"class":72},[33,169274,133],{"class":47},[33,169276,1028],{"class":39},[33,169278,1349],{"class":47},[33,169280,1429],{"class":39},[33,169282,1354],{"class":72},[33,169284,1434],{"class":39},[33,169286,1437],{"class":72},[33,169288,1357],{"class":47},[33,169290,169291,169293,169295,169297],{"class":35,"line":64},[33,169292,122],{"class":72},[33,169294,133],{"class":47},[33,169296,1366],{"class":72},[33,169298,139],{"class":47},[631,169300,1453],{"id":1452},[19,169302,169303,1459],{},[30,169304,1458],{},[23,169306,169307],{"className":25,"code":1462,"language":27,"meta":28,"style":28},[30,169308,169309,169317,169337,169357,169377,169381,169385,169413],{"__ignoreMap":28},[33,169310,169311,169313,169315],{"class":35,"line":36},[33,169312,1082],{"class":47},[33,169314,57],{"class":39},[33,169316,1087],{"class":47},[33,169318,169319,169321,169323,169325,169327,169329,169331,169333,169335],{"class":35,"line":51},[33,169320,1092],{"class":47},[33,169322,993],{"class":60},[33,169324,996],{"class":47},[33,169326,242],{"class":60},[33,169328,245],{"class":47},[33,169330,1103],{"class":60},[33,169332,996],{"class":47},[33,169334,1108],{"class":72},[33,169336,1111],{"class":47},[33,169338,169339,169341,169343,169345,169347,169349,169351,169353,169355],{"class":35,"line":64},[33,169340,1092],{"class":47},[33,169342,993],{"class":60},[33,169344,996],{"class":47},[33,169346,1122],{"class":60},[33,169348,245],{"class":47},[33,169350,1103],{"class":60},[33,169352,996],{"class":47},[33,169354,1131],{"class":72},[33,169356,1111],{"class":47},[33,169358,169359,169361,169363,169365,169367,169369,169371,169373,169375],{"class":35,"line":76},[33,169360,1092],{"class":47},[33,169362,993],{"class":60},[33,169364,996],{"class":47},[33,169366,1144],{"class":60},[33,169368,245],{"class":47},[33,169370,1103],{"class":60},[33,169372,996],{"class":47},[33,169374,1153],{"class":72},[33,169376,1111],{"class":47},[33,169378,169379],{"class":35,"line":87},[33,169380,919],{"class":47},[33,169382,169383],{"class":35,"line":96},[33,169384,100],{"emptyLinePlaceholder":99},[33,169386,169387,169389,169391,169393,169395,169397,169399,169401,169403,169405,169407,169409,169411],{"class":35,"line":103},[33,169388,111],{"class":47},[33,169390,57],{"class":39},[33,169392,1549],{"class":72},[33,169394,1552],{"class":47},[33,169396,1171],{"class":289},[33,169398,1174],{"class":39},[33,169400,1177],{"class":47},[33,169402,1103],{"class":60},[33,169404,1182],{"class":47},[33,169406,1185],{"class":289},[33,169408,57],{"class":39},[33,169410,1190],{"class":72},[33,169412,226],{"class":47},[33,169414,169415,169417],{"class":35,"line":108},[33,169416,122],{"class":72},[33,169418,125],{"class":47},[14,169420,1580],{"id":1579},[19,169422,1583],{},[23,169424,169425],{"className":25,"code":1586,"language":27,"meta":28,"style":28},[30,169426,169427,169435,169443,169453,169457,169463,169467,169471,169483],{"__ignoreMap":28},[33,169428,169429,169431,169433],{"class":35,"line":36},[33,169430,40],{"class":39},[33,169432,1595],{"class":43},[33,169434,1598],{"class":47},[33,169436,169437,169439,169441],{"class":35,"line":51},[33,169438,1603],{"class":39},[33,169440,1606],{"class":43},[33,169442,1609],{"class":47},[33,169444,169445,169447,169449,169451],{"class":35,"line":64},[33,169446,1614],{"class":39},[33,169448,1617],{"class":47},[33,169450,880],{"class":39},[33,169452,695],{"class":47},[33,169454,169455],{"class":35,"line":76},[33,169456,100],{"emptyLinePlaceholder":99},[33,169458,169459,169461],{"class":35,"line":87},[33,169460,90],{"class":39},[33,169462,1632],{"class":47},[33,169464,169465],{"class":35,"line":96},[33,169466,100],{"emptyLinePlaceholder":99},[33,169468,169469],{"class":35,"line":103},[33,169470,100],{"emptyLinePlaceholder":99},[33,169472,169473,169475,169477,169479,169481],{"class":35,"line":108},[33,169474,1645],{"class":47},[33,169476,57],{"class":39},[33,169478,1650],{"class":47},[33,169480,1279],{"class":72},[33,169482,226],{"class":47},[33,169484,169485,169487,169489,169491],{"class":35,"line":119},[33,169486,122],{"class":72},[33,169488,1661],{"class":47},[33,169490,758],{"class":72},[33,169492,551],{"class":47},[19,169494,1668],{},[14,169496,1672],{"id":1671},[19,169498,1675],{},[23,169500,169501],{"className":25,"code":1678,"language":27,"meta":28,"style":28},[30,169502,169503,169511,169519,169529,169533,169543,169547,169553,169557,169561,169565,169573,169583,169587,169591],{"__ignoreMap":28},[33,169504,169505,169507,169509],{"class":35,"line":36},[33,169506,40],{"class":39},[33,169508,1687],{"class":43},[33,169510,1690],{"class":47},[33,169512,169513,169515,169517],{"class":35,"line":51},[33,169514,1603],{"class":39},[33,169516,1697],{"class":43},[33,169518,48],{"class":47},[33,169520,169521,169523,169525,169527],{"class":35,"line":64},[33,169522,807],{"class":72},[33,169524,133],{"class":47},[33,169526,1708],{"class":60},[33,169528,226],{"class":47},[33,169530,169531],{"class":35,"line":76},[33,169532,1715],{"class":47},[33,169534,169535,169537,169539,169541],{"class":35,"line":87},[33,169536,807],{"class":72},[33,169538,133],{"class":47},[33,169540,1724],{"class":60},[33,169542,226],{"class":47},[33,169544,169545],{"class":35,"line":96},[33,169546,100],{"emptyLinePlaceholder":99},[33,169548,169549,169551],{"class":35,"line":103},[33,169550,90],{"class":39},[33,169552,1737],{"class":47},[33,169554,169555],{"class":35,"line":108},[33,169556,100],{"emptyLinePlaceholder":99},[33,169558,169559],{"class":35,"line":119},[33,169560,100],{"emptyLinePlaceholder":99},[33,169562,169563],{"class":35,"line":128},[33,169564,1750],{"class":43},[33,169566,169567,169569,169571],{"class":35,"line":1753},[33,169568,40],{"class":39},[33,169570,1758],{"class":43},[33,169572,48],{"class":47},[33,169574,169575,169577,169579,169581],{"class":35,"line":1763},[33,169576,193],{"class":72},[33,169578,133],{"class":47},[33,169580,1770],{"class":60},[33,169582,226],{"class":47},[33,169584,169585],{"class":35,"line":1775},[33,169586,100],{"emptyLinePlaceholder":99},[33,169588,169589],{"class":35,"line":1780},[33,169590,100],{"emptyLinePlaceholder":99},[33,169592,169593],{"class":35,"line":1785},[33,169594,1788],{"class":47},[19,169596,1791],{},[23,169598,169599],{"className":25,"code":1794,"language":27,"meta":28,"style":28},[30,169600,169601],{"__ignoreMap":28},[33,169602,169603,169605,169607],{"class":35,"line":36},[33,169604,1801],{"class":47},[33,169606,57],{"class":39},[33,169608,1806],{"class":47},[19,169610,1809],{},[14,169612,1813],{"id":1812},[23,169614,169615],{"className":25,"code":1816,"language":27,"meta":28,"style":28},[30,169616,169617,169625,169641,169651,169667,169677,169683,169687,169693,169697,169701,169705,169713,169723,169727,169731],{"__ignoreMap":28},[33,169618,169619,169621,169623],{"class":35,"line":36},[33,169620,40],{"class":39},[33,169622,1687],{"class":43},[33,169624,1690],{"class":47},[33,169626,169627,169629,169631,169633,169635,169637,169639],{"class":35,"line":51},[33,169628,1603],{"class":39},[33,169630,1697],{"class":43},[33,169632,133],{"class":47},[33,169634,657],{"class":39},[33,169636,1839],{"class":47},[33,169638,787],{"class":39},[33,169640,790],{"class":47},[33,169642,169643,169645,169647,169649],{"class":35,"line":64},[33,169644,807],{"class":72},[33,169646,133],{"class":47},[33,169648,1708],{"class":60},[33,169650,226],{"class":47},[33,169652,169653,169655,169657,169659,169661,169663,169665],{"class":35,"line":76},[33,169654,1858],{"class":47},[33,169656,57],{"class":39},[33,169658,1863],{"class":47},[33,169660,657],{"class":39},[33,169662,1839],{"class":47},[33,169664,787],{"class":39},[33,169666,1872],{"class":47},[33,169668,169669,169671,169673,169675],{"class":35,"line":87},[33,169670,807],{"class":72},[33,169672,133],{"class":47},[33,169674,1724],{"class":60},[33,169676,226],{"class":47},[33,169678,169679,169681],{"class":35,"line":96},[33,169680,1614],{"class":39},[33,169682,1889],{"class":47},[33,169684,169685],{"class":35,"line":103},[33,169686,100],{"emptyLinePlaceholder":99},[33,169688,169689,169691],{"class":35,"line":108},[33,169690,90],{"class":39},[33,169692,1737],{"class":47},[33,169694,169695],{"class":35,"line":119},[33,169696,100],{"emptyLinePlaceholder":99},[33,169698,169699],{"class":35,"line":128},[33,169700,100],{"emptyLinePlaceholder":99},[33,169702,169703],{"class":35,"line":1753},[33,169704,1750],{"class":43},[33,169706,169707,169709,169711],{"class":35,"line":1763},[33,169708,40],{"class":39},[33,169710,652],{"class":43},[33,169712,1226],{"class":47},[33,169714,169715,169717,169719,169721],{"class":35,"line":1775},[33,169716,90],{"class":39},[33,169718,877],{"class":47},[33,169720,880],{"class":39},[33,169722,1052],{"class":47},[33,169724,169725],{"class":35,"line":1780},[33,169726,100],{"emptyLinePlaceholder":99},[33,169728,169729],{"class":35,"line":1785},[33,169730,100],{"emptyLinePlaceholder":99},[33,169732,169733,169735,169737,169739,169741,169743],{"class":35,"line":1940},[33,169734,122],{"class":72},[33,169736,717],{"class":47},[33,169738,1279],{"class":72},[33,169740,245],{"class":47},[33,169742,1284],{"class":72},[33,169744,551],{"class":47},[19,169746,1955,169747,1958,169749,1961],{},[30,169748,639],{},[30,169750,769],{},[14,169752,1965],{"id":1964},[19,169754,1968],{},[328,169756,169757,169759,169761],{},[331,169758,1973],{},[331,169760,1976],{},[331,169762,1979],{},[19,169764,1982],{},[23,169766,169767],{"className":25,"code":1985,"language":27,"meta":28,"style":28},[30,169768,169769,169777,169805,169833,169861,169865,169869,169873,169881,169889,169899,169905,169909,169915,169919,169923,169945,169967,169989,169993,169999,170005],{"__ignoreMap":28},[33,169770,169771,169773,169775],{"class":35,"line":36},[33,169772,1082],{"class":47},[33,169774,57],{"class":39},[33,169776,1087],{"class":47},[33,169778,169779,169781,169783,169785,169787,169789,169791,169793,169795,169797,169799,169801,169803],{"class":35,"line":51},[33,169780,1092],{"class":47},[33,169782,993],{"class":60},[33,169784,996],{"class":47},[33,169786,242],{"class":60},[33,169788,245],{"class":47},[33,169790,1003],{"class":60},[33,169792,996],{"class":47},[33,169794,248],{"class":72},[33,169796,245],{"class":47},[33,169798,1103],{"class":60},[33,169800,996],{"class":47},[33,169802,1108],{"class":72},[33,169804,1111],{"class":47},[33,169806,169807,169809,169811,169813,169815,169817,169819,169821,169823,169825,169827,169829,169831],{"class":35,"line":64},[33,169808,1092],{"class":47},[33,169810,993],{"class":60},[33,169812,996],{"class":47},[33,169814,1122],{"class":60},[33,169816,245],{"class":47},[33,169818,1003],{"class":60},[33,169820,996],{"class":47},[33,169822,2042],{"class":72},[33,169824,245],{"class":47},[33,169826,1103],{"class":60},[33,169828,996],{"class":47},[33,169830,1131],{"class":72},[33,169832,1111],{"class":47},[33,169834,169835,169837,169839,169841,169843,169845,169847,169849,169851,169853,169855,169857,169859],{"class":35,"line":76},[33,169836,1092],{"class":47},[33,169838,993],{"class":60},[33,169840,996],{"class":47},[33,169842,1144],{"class":60},[33,169844,245],{"class":47},[33,169846,1003],{"class":60},[33,169848,996],{"class":47},[33,169850,2071],{"class":72},[33,169852,245],{"class":47},[33,169854,1103],{"class":60},[33,169856,996],{"class":47},[33,169858,2080],{"class":72},[33,169860,1111],{"class":47},[33,169862,169863],{"class":35,"line":87},[33,169864,919],{"class":47},[33,169866,169867],{"class":35,"line":96},[33,169868,100],{"emptyLinePlaceholder":99},[33,169870,169871],{"class":35,"line":103},[33,169872,100],{"emptyLinePlaceholder":99},[33,169874,169875,169877,169879],{"class":35,"line":108},[33,169876,40],{"class":39},[33,169878,2101],{"class":43},[33,169880,2104],{"class":47},[33,169882,169883,169885,169887],{"class":35,"line":119},[33,169884,2109],{"class":47},[33,169886,57],{"class":39},[33,169888,615],{"class":47},[33,169890,169891,169893,169895,169897],{"class":35,"line":128},[33,169892,675],{"class":39},[33,169894,2120],{"class":47},[33,169896,681],{"class":39},[33,169898,2125],{"class":47},[33,169900,169901,169903],{"class":35,"line":1753},[33,169902,2130],{"class":39},[33,169904,2133],{"class":47},[33,169906,169907],{"class":35,"line":1763},[33,169908,2138],{"class":47},[33,169910,169911,169913],{"class":35,"line":1775},[33,169912,90],{"class":39},[33,169914,1889],{"class":47},[33,169916,169917],{"class":35,"line":1780},[33,169918,100],{"emptyLinePlaceholder":99},[33,169920,169921],{"class":35,"line":1785},[33,169922,100],{"emptyLinePlaceholder":99},[33,169924,169925,169927,169929,169931,169933,169935,169937,169939,169941,169943],{"class":35,"line":1940},[33,169926,2157],{"class":47},[33,169928,57],{"class":39},[33,169930,2162],{"class":47},[33,169932,1028],{"class":39},[33,169934,2167],{"class":47},[33,169936,1103],{"class":60},[33,169938,2172],{"class":47},[33,169940,2175],{"class":39},[33,169942,2178],{"class":72},[33,169944,226],{"class":47},[33,169946,169947,169949,169951,169953,169955,169957,169959,169961,169963,169965],{"class":35,"line":2183},[33,169948,2186],{"class":47},[33,169950,57],{"class":39},[33,169952,2162],{"class":47},[33,169954,1028],{"class":39},[33,169956,2167],{"class":47},[33,169958,1103],{"class":60},[33,169960,2172],{"class":47},[33,169962,2175],{"class":39},[33,169964,2203],{"class":72},[33,169966,226],{"class":47},[33,169968,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987],{"class":35,"line":2208},[33,169970,2211],{"class":47},[33,169972,57],{"class":39},[33,169974,2162],{"class":47},[33,169976,1028],{"class":39},[33,169978,2167],{"class":47},[33,169980,1003],{"class":60},[33,169982,2172],{"class":47},[33,169984,2226],{"class":39},[33,169986,2229],{"class":72},[33,169988,226],{"class":47},[33,169990,169991],{"class":35,"line":2234},[33,169992,100],{"emptyLinePlaceholder":99},[33,169994,169995,169997],{"class":35,"line":2239},[33,169996,122],{"class":72},[33,169998,2244],{"class":47},[33,170000,170001,170003],{"class":35,"line":2247},[33,170002,122],{"class":72},[33,170004,2252],{"class":47},[33,170006,170007,170009],{"class":35,"line":2255},[33,170008,122],{"class":72},[33,170010,2260],{"class":47},[14,170012,2264],{"id":2263},[328,170014,170015,170017,170023,170027,170035],{},[331,170016,2269],{},[331,170018,170019,2274,170021,2277],{},[30,170020,639],{},[30,170022,769],{},[331,170024,170025,2282],{},[30,170026,1028],{},[331,170028,170029,1958,170031,2289,170033,2293],{},[30,170030,1303],{},[30,170032,1377],{},[30,170034,2292],{},[331,170036,2296],{},[14,170038,2300],{"id":2299},[328,170040,170041,170045,170049,170053,170057],{},[331,170042,2305,170043,2309],{},[30,170044,2308],{},[331,170046,2305,170047,2315],{},[30,170048,2314],{},[331,170050,2318,170051,2321],{},[30,170052,1028],{},[331,170054,2318,170055,2326],{},[30,170056,1377],{},[331,170058,2329],{},[2331,170060,2333],{},{"title":28,"searchDepth":51,"depth":51,"links":170062},[170063,170064,170065,170066,170067,170068,170072,170073,170074,170075,170080,170081,170082,170083,170084,170085],{"id":16,"depth":51,"text":17},{"id":169,"depth":51,"text":170},{"id":273,"depth":51,"text":274},{"id":339,"depth":51,"text":340},{"id":491,"depth":51,"text":492},{"id":628,"depth":51,"text":629,"children":170069},[170070,170071],{"id":633,"depth":64,"text":634},{"id":763,"depth":64,"text":764},{"id":852,"depth":51,"text":853},{"id":1022,"depth":51,"text":1023},{"id":1208,"depth":51,"text":1209},{"id":1293,"depth":51,"text":1294,"children":170076},[170077,170078,170079],{"id":1297,"depth":64,"text":1298},{"id":1371,"depth":64,"text":1372},{"id":1452,"depth":64,"text":1453},{"id":1579,"depth":51,"text":1580},{"id":1671,"depth":51,"text":1672},{"id":1812,"depth":51,"text":1813},{"id":1964,"depth":51,"text":1965},{"id":2263,"depth":51,"text":2264},{"id":2299,"depth":51,"text":2300},{},{"title":5,"description":2359},{"id":170089,"title":170090,"body":170091,"description":2359,"extension":2360,"meta":172610,"navigation":99,"path":172611,"seo":172612,"stem":172613,"__hash__":172614},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":170092,"toc":172585},[170093,170096,170100,170103,170106,170137,170141,170145,170148,170175,170179,170182,170233,170236,170251,170254,170289,170293,170295,170319,170322,170382,170386,170390,170393,170450,170453,170473,170477,170480,170543,170547,170550,170606,170613,170637,170641,170644,170707,170711,170716,170767,170770,170774,170779,170846,170849,170931,170935,170940,170991,170994,170998,171001,171004,171012,171015,171061,171064,171110,171114,171120,171164,171167,171213,171216,171256,171259,171320,171324,171327,171417,171420,171562,171565,171632,171636,171639,171642,171783,171786,171864,171867,172043,172047,172049,172060,172062,172261,172265,172509,172513,172547,172551,172582],[10,170094,170090],{"id":170095},"_8-文件操作",[14,170097,170099],{"id":170098},"_81-文件操作的意义","8.1 文件操作的意义",[19,170101,170102],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,170104,170105],{},"常见文件类型：",[328,170107,170108,170114,170120,170126,170132],{},[331,170109,170110,170113],{},[30,170111,170112],{},".txt","：普通文本。",[331,170115,170116,170119],{},[30,170117,170118],{},".csv","：表格文本。",[331,170121,170122,170125],{},[30,170123,170124],{},".json","：结构化数据。",[331,170127,170128,170131],{},[30,170129,170130],{},".log","：日志文件。",[331,170133,170134,170136],{},[30,170135,148550],{},"：Python 源代码。",[14,170138,170140],{"id":170139},"_82-路径","8.2 路径",[631,170142,170144],{"id":170143},"_821-相对路径","8.2.1 相对路径",[19,170146,170147],{},"相对当前运行目录：",[23,170149,170151],{"className":25,"code":170150,"language":27,"meta":28,"style":28},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[30,170152,170153],{"__ignoreMap":28},[33,170154,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173],{"class":35,"line":36},[33,170156,89124],{"class":72},[33,170158,133],{"class":47},[33,170160,148993],{"class":60},[33,170162,245],{"class":47},[33,170164,148998],{"class":60},[33,170166,245],{"class":47},[33,170168,149003],{"class":289},[33,170170,57],{"class":39},[33,170172,149008],{"class":60},[33,170174,226],{"class":47},[631,170176,170178],{"id":170177},"_822-绝对路径","8.2.2 绝对路径",[19,170180,170181],{},"从根目录或盘符开始：",[23,170183,170185],{"className":25,"code":170184,"language":27,"meta":28,"style":28},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[30,170186,170187,170210],{"__ignoreMap":28},[33,170188,170189,170191,170193,170196,170198,170200,170202,170204,170206,170208],{"class":35,"line":36},[33,170190,89124],{"class":72},[33,170192,133],{"class":47},[33,170194,170195],{"class":60},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[33,170197,245],{"class":47},[33,170199,148998],{"class":60},[33,170201,245],{"class":47},[33,170203,149003],{"class":289},[33,170205,57],{"class":39},[33,170207,149008],{"class":60},[33,170209,226],{"class":47},[33,170211,170212,170214,170216,170219,170221,170223,170225,170227,170229,170231],{"class":35,"line":51},[33,170213,89124],{"class":72},[33,170215,133],{"class":47},[33,170217,170218],{"class":60},"\"D:\u002Fdata\u002Fdata.txt\"",[33,170220,245],{"class":47},[33,170222,148998],{"class":60},[33,170224,245],{"class":47},[33,170226,149003],{"class":289},[33,170228,57],{"class":39},[33,170230,149008],{"class":60},[33,170232,226],{"class":47},[19,170234,170235],{},"Windows 路径建议写成：",[23,170237,170239],{"className":25,"code":170238,"language":27,"meta":28,"style":28},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[30,170240,170241],{"__ignoreMap":28},[33,170242,170243,170246,170248],{"class":35,"line":36},[33,170244,170245],{"class":47},"path ",[33,170247,57],{"class":39},[33,170249,170250],{"class":60}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,170252,170253],{},"或原始字符串：",[23,170255,170257],{"className":25,"code":170256,"language":27,"meta":28,"style":28},"path = r\"D:\\data\\data.txt\"\n",[30,170258,170259],{"__ignoreMap":28},[33,170260,170261,170263,170265,170267,170269,170272,170275,170278,170280,170282,170284,170287],{"class":35,"line":36},[33,170262,170245],{"class":47},[33,170264,57],{"class":39},[33,170266,19359],{"class":39},[33,170268,397],{"class":60},[33,170270,170271],{"class":50199},"D:",[33,170273,170274],{"class":72},"\\d",[33,170276,170277],{"class":50199},"ata",[33,170279,170274],{"class":72},[33,170281,170277],{"class":50199},[33,170283,2975],{"class":72},[33,170285,170286],{"class":50199},"txt",[33,170288,27372],{"class":60},[14,170290,170292],{"id":170291},"_83-open函数","8.3 open函数",[19,170294,7430],{},[23,170296,170298],{"className":25,"code":170297,"language":27,"meta":28,"style":28},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[30,170299,170300],{"__ignoreMap":28},[33,170301,170302,170304,170306,170308,170311,170313,170315,170317],{"class":35,"line":36},[33,170303,47577],{"class":289},[33,170305,15804],{"class":39},[33,170307,148988],{"class":72},[33,170309,170310],{"class":47},"(文件路径, 打开模式, ",[33,170312,149003],{"class":289},[33,170314,57],{"class":39},[33,170316,149008],{"class":60},[33,170318,226],{"class":47},[19,170320,170321],{},"常见模式：",[2563,170323,170324,170333],{},[2566,170325,170326],{},[2569,170327,170328,170331],{},[2572,170329,170330],{},"模式",[2572,170332,28108],{},[2610,170334,170335,170344,170353,170362,170372],{},[2569,170336,170337,170341],{},[2615,170338,170339],{},[30,170340,3085],{},[2615,170342,170343],{},"只读，文件不存在会报错",[2569,170345,170346,170350],{},[2615,170347,170348],{},[30,170349,3208],{},[2615,170351,170352],{},"只写，文件不存在会创建，存在会清空",[2569,170354,170355,170359],{},[2615,170356,170357],{},[30,170358,2663],{},[2615,170360,170361],{},"追加，文件不存在会创建",[2569,170363,170364,170369],{},[2615,170365,170366],{},[30,170367,170368],{},"rb",[2615,170370,170371],{},"二进制只读",[2569,170373,170374,170379],{},[2615,170375,170376],{},[30,170377,170378],{},"wb",[2615,170380,170381],{},"二进制只写",[14,170383,170385],{"id":170384},"_84-读取文件","8.4 读取文件",[631,170387,170389],{"id":170388},"_841-read","8.4.1 read",[19,170391,170392],{},"一次读取全部内容：",[23,170394,170396],{"className":25,"code":170395,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[30,170397,170398,170424,170436,170443],{"__ignoreMap":28},[33,170399,170400,170402,170404,170406,170408,170410,170412,170414,170416,170418,170420,170422],{"class":35,"line":36},[33,170401,47577],{"class":289},[33,170403,15804],{"class":39},[33,170405,148988],{"class":72},[33,170407,133],{"class":47},[33,170409,148993],{"class":60},[33,170411,245],{"class":47},[33,170413,148998],{"class":60},[33,170415,245],{"class":47},[33,170417,149003],{"class":289},[33,170419,57],{"class":39},[33,170421,149008],{"class":60},[33,170423,226],{"class":47},[33,170425,170426,170429,170431,170433],{"class":35,"line":51},[33,170427,170428],{"class":47},"content ",[33,170430,57],{"class":39},[33,170432,150350],{"class":289},[33,170434,170435],{"class":47},".read()\n",[33,170437,170438,170440],{"class":35,"line":64},[33,170439,122],{"class":72},[33,170441,170442],{"class":47},"(content)\n",[33,170444,170445,170447],{"class":35,"line":76},[33,170446,47577],{"class":289},[33,170448,170449],{"class":47},".close()\n",[19,170451,170452],{},"可以指定读取字符数：",[23,170454,170456],{"className":25,"code":170455,"language":27,"meta":28,"style":28},"content = file.read(10)\n",[30,170457,170458],{"__ignoreMap":28},[33,170459,170460,170462,170464,170466,170469,170471],{"class":35,"line":36},[33,170461,170428],{"class":47},[33,170463,57],{"class":39},[33,170465,150350],{"class":289},[33,170467,170468],{"class":47},".read(",[33,170470,1279],{"class":72},[33,170472,226],{"class":47},[631,170474,170476],{"id":170475},"_842-readline","8.4.2 readline",[19,170478,170479],{},"一次读取一行：",[23,170481,170483],{"className":25,"code":170482,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[30,170484,170485,170511,170515,170526,170533,170537],{"__ignoreMap":28},[33,170486,170487,170489,170491,170493,170495,170497,170499,170501,170503,170505,170507,170509],{"class":35,"line":36},[33,170488,47577],{"class":289},[33,170490,15804],{"class":39},[33,170492,148988],{"class":72},[33,170494,133],{"class":47},[33,170496,148993],{"class":60},[33,170498,245],{"class":47},[33,170500,148998],{"class":60},[33,170502,245],{"class":47},[33,170504,149003],{"class":289},[33,170506,57],{"class":39},[33,170508,149008],{"class":60},[33,170510,226],{"class":47},[33,170512,170513],{"class":35,"line":51},[33,170514,100],{"emptyLinePlaceholder":99},[33,170516,170517,170519,170521,170523],{"class":35,"line":64},[33,170518,149449],{"class":47},[33,170520,57],{"class":39},[33,170522,150350],{"class":289},[33,170524,170525],{"class":47},".readline()\n",[33,170527,170528,170530],{"class":35,"line":76},[33,170529,122],{"class":72},[33,170531,170532],{"class":47},"(line)\n",[33,170534,170535],{"class":35,"line":87},[33,170536,100],{"emptyLinePlaceholder":99},[33,170538,170539,170541],{"class":35,"line":96},[33,170540,47577],{"class":289},[33,170542,170449],{"class":47},[631,170544,170546],{"id":170545},"_843-readlines","8.4.3 readlines",[19,170548,170549],{},"读取所有行，返回列表：",[23,170551,170553],{"className":25,"code":170552,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[30,170554,170555,170581,170593,170600],{"__ignoreMap":28},[33,170556,170557,170559,170561,170563,170565,170567,170569,170571,170573,170575,170577,170579],{"class":35,"line":36},[33,170558,47577],{"class":289},[33,170560,15804],{"class":39},[33,170562,148988],{"class":72},[33,170564,133],{"class":47},[33,170566,148993],{"class":60},[33,170568,245],{"class":47},[33,170570,148998],{"class":60},[33,170572,245],{"class":47},[33,170574,149003],{"class":289},[33,170576,57],{"class":39},[33,170578,149008],{"class":60},[33,170580,226],{"class":47},[33,170582,170583,170586,170588,170590],{"class":35,"line":51},[33,170584,170585],{"class":47},"lines ",[33,170587,57],{"class":39},[33,170589,150350],{"class":289},[33,170591,170592],{"class":47},".readlines()\n",[33,170594,170595,170597],{"class":35,"line":64},[33,170596,122],{"class":72},[33,170598,170599],{"class":47},"(lines)\n",[33,170601,170602,170604],{"class":35,"line":76},[33,170603,47577],{"class":289},[33,170605,170449],{"class":47},[19,170607,170608,170609,170612],{},"每一行通常带有换行符，可以用 ",[30,170610,170611],{},"strip()"," 去掉：",[23,170614,170616],{"className":25,"code":170615,"language":27,"meta":28,"style":28},"for line in lines:\n    print(line.strip())\n",[30,170617,170618,170630],{"__ignoreMap":28},[33,170619,170620,170622,170625,170627],{"class":35,"line":36},[33,170621,5282],{"class":39},[33,170623,170624],{"class":47}," line ",[33,170626,681],{"class":39},[33,170628,170629],{"class":47}," lines:\n",[33,170631,170632,170634],{"class":35,"line":51},[33,170633,193],{"class":72},[33,170635,170636],{"class":47},"(line.strip())\n",[631,170638,170640],{"id":170639},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170642,170643],{},"推荐读取大文件时使用：",[23,170645,170647],{"className":25,"code":170646,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[30,170648,170649,170675,170679,170691,170697,170701],{"__ignoreMap":28},[33,170650,170651,170653,170655,170657,170659,170661,170663,170665,170667,170669,170671,170673],{"class":35,"line":36},[33,170652,47577],{"class":289},[33,170654,15804],{"class":39},[33,170656,148988],{"class":72},[33,170658,133],{"class":47},[33,170660,148993],{"class":60},[33,170662,245],{"class":47},[33,170664,148998],{"class":60},[33,170666,245],{"class":47},[33,170668,149003],{"class":289},[33,170670,57],{"class":39},[33,170672,149008],{"class":60},[33,170674,226],{"class":47},[33,170676,170677],{"class":35,"line":51},[33,170678,100],{"emptyLinePlaceholder":99},[33,170680,170681,170683,170685,170687,170689],{"class":35,"line":64},[33,170682,5282],{"class":39},[33,170684,170624],{"class":47},[33,170686,681],{"class":39},[33,170688,150350],{"class":289},[33,170690,605],{"class":47},[33,170692,170693,170695],{"class":35,"line":76},[33,170694,193],{"class":72},[33,170696,170636],{"class":47},[33,170698,170699],{"class":35,"line":87},[33,170700,100],{"emptyLinePlaceholder":99},[33,170702,170703,170705],{"class":35,"line":96},[33,170704,47577],{"class":289},[33,170706,170449],{"class":47},[14,170708,170710],{"id":170709},"_85-with语句","8.5 with语句",[19,170712,170713,170715],{},[30,170714,110036],{}," 会自动关闭文件，推荐使用。",[23,170717,170719],{"className":25,"code":170718,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[30,170720,170721,170751,170761],{"__ignoreMap":28},[33,170722,170723,170725,170727,170729,170731,170733,170735,170737,170739,170741,170743,170745,170747,170749],{"class":35,"line":36},[33,170724,110036],{"class":39},[33,170726,148988],{"class":72},[33,170728,133],{"class":47},[33,170730,148993],{"class":60},[33,170732,245],{"class":47},[33,170734,148998],{"class":60},[33,170736,245],{"class":47},[33,170738,149003],{"class":289},[33,170740,57],{"class":39},[33,170742,149008],{"class":60},[33,170744,15954],{"class":47},[33,170746,33613],{"class":39},[33,170748,150350],{"class":289},[33,170750,605],{"class":47},[33,170752,170753,170755,170757,170759],{"class":35,"line":51},[33,170754,149020],{"class":47},[33,170756,57],{"class":39},[33,170758,150350],{"class":289},[33,170760,170435],{"class":47},[33,170762,170763,170765],{"class":35,"line":64},[33,170764,193],{"class":72},[33,170766,170442],{"class":47},[19,170768,170769],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170771,170773],{"id":170772},"_86-写入文件","8.6 写入文件",[19,170775,170776,170778],{},[30,170777,3208],{}," 模式会清空原文件。",[23,170780,170782],{"className":25,"code":170781,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[30,170783,170784,170814,170831],{"__ignoreMap":28},[33,170785,170786,170788,170790,170792,170794,170796,170798,170800,170802,170804,170806,170808,170810,170812],{"class":35,"line":36},[33,170787,110036],{"class":39},[33,170789,148988],{"class":72},[33,170791,133],{"class":47},[33,170793,148993],{"class":60},[33,170795,245],{"class":47},[33,170797,154160],{"class":60},[33,170799,245],{"class":47},[33,170801,149003],{"class":289},[33,170803,57],{"class":39},[33,170805,149008],{"class":60},[33,170807,15954],{"class":47},[33,170809,33613],{"class":39},[33,170811,150350],{"class":289},[33,170813,605],{"class":47},[33,170815,170816,170819,170822,170825,170827,170829],{"class":35,"line":51},[33,170817,170818],{"class":289},"    file",[33,170820,170821],{"class":47},".write(",[33,170823,170824],{"class":60},"\"hello",[33,170826,158697],{"class":72},[33,170828,397],{"class":60},[33,170830,226],{"class":47},[33,170832,170833,170835,170837,170840,170842,170844],{"class":35,"line":64},[33,170834,170818],{"class":289},[33,170836,170821],{"class":47},[33,170838,170839],{"class":60},"\"python",[33,170841,158697],{"class":72},[33,170843,397],{"class":60},[33,170845,226],{"class":47},[19,170847,170848],{},"写入多行：",[23,170850,170852],{"className":25,"code":170851,"language":27,"meta":28,"style":28},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[30,170853,170854,170889,170893,170924],{"__ignoreMap":28},[33,170855,170856,170858,170860,170862,170865,170867,170869,170871,170874,170876,170878,170880,170883,170885,170887],{"class":35,"line":36},[33,170857,170585],{"class":47},[33,170859,57],{"class":39},[33,170861,906],{"class":47},[33,170863,170864],{"class":60},"\"小明,18",[33,170866,158697],{"class":72},[33,170868,397],{"class":60},[33,170870,245],{"class":47},[33,170872,170873],{"class":60},"\"小红,17",[33,170875,158697],{"class":72},[33,170877,397],{"class":60},[33,170879,245],{"class":47},[33,170881,170882],{"class":60},"\"小刚,19",[33,170884,158697],{"class":72},[33,170886,397],{"class":60},[33,170888,919],{"class":47},[33,170890,170891],{"class":35,"line":51},[33,170892,100],{"emptyLinePlaceholder":99},[33,170894,170895,170897,170899,170901,170904,170906,170908,170910,170912,170914,170916,170918,170920,170922],{"class":35,"line":64},[33,170896,110036],{"class":39},[33,170898,148988],{"class":72},[33,170900,133],{"class":47},[33,170902,170903],{"class":60},"\"students.txt\"",[33,170905,245],{"class":47},[33,170907,154160],{"class":60},[33,170909,245],{"class":47},[33,170911,149003],{"class":289},[33,170913,57],{"class":39},[33,170915,149008],{"class":60},[33,170917,15954],{"class":47},[33,170919,33613],{"class":39},[33,170921,150350],{"class":289},[33,170923,605],{"class":47},[33,170925,170926,170928],{"class":35,"line":76},[33,170927,170818],{"class":289},[33,170929,170930],{"class":47},".writelines(lines)\n",[14,170932,170934],{"id":170933},"_87-追加文件","8.7 追加文件",[19,170936,170937,170939],{},[30,170938,2663],{}," 模式不会清空原内容，而是在末尾追加。",[23,170941,170943],{"className":25,"code":170942,"language":27,"meta":28,"style":28},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[30,170944,170945,170976],{"__ignoreMap":28},[33,170946,170947,170949,170951,170953,170956,170958,170960,170962,170964,170966,170968,170970,170972,170974],{"class":35,"line":36},[33,170948,110036],{"class":39},[33,170950,148988],{"class":72},[33,170952,133],{"class":47},[33,170954,170955],{"class":60},"\"log.txt\"",[33,170957,245],{"class":47},[33,170959,548],{"class":60},[33,170961,245],{"class":47},[33,170963,149003],{"class":289},[33,170965,57],{"class":39},[33,170967,149008],{"class":60},[33,170969,15954],{"class":47},[33,170971,33613],{"class":39},[33,170973,150350],{"class":289},[33,170975,605],{"class":47},[33,170977,170978,170980,170982,170985,170987,170989],{"class":35,"line":51},[33,170979,170818],{"class":289},[33,170981,170821],{"class":47},[33,170983,170984],{"class":60},"\"程序启动",[33,170986,158697],{"class":72},[33,170988,397],{"class":60},[33,170990,226],{"class":47},[19,170992,170993],{},"日志类文件常用追加模式。",[14,170995,170997],{"id":170996},"_88-文件编码","8.8 文件编码",[19,170999,171000],{},"编码决定文字如何保存为字节。",[19,171002,171003],{},"常见编码：",[328,171005,171006,171009],{},[331,171007,171008],{},"UTF-8：推荐。",[331,171010,171011],{},"GBK：部分 Windows 中文文件常见。",[19,171013,171014],{},"读取文件乱码时，可以尝试：",[23,171016,171018],{"className":25,"code":171017,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[30,171019,171020,171051],{"__ignoreMap":28},[33,171021,171022,171024,171026,171028,171030,171032,171034,171036,171038,171040,171043,171045,171047,171049],{"class":35,"line":36},[33,171023,110036],{"class":39},[33,171025,148988],{"class":72},[33,171027,133],{"class":47},[33,171029,148993],{"class":60},[33,171031,245],{"class":47},[33,171033,148998],{"class":60},[33,171035,245],{"class":47},[33,171037,149003],{"class":289},[33,171039,57],{"class":39},[33,171041,171042],{"class":60},"\"gbk\"",[33,171044,15954],{"class":47},[33,171046,33613],{"class":39},[33,171048,150350],{"class":289},[33,171050,605],{"class":47},[33,171052,171053,171055,171057,171059],{"class":35,"line":51},[33,171054,149020],{"class":47},[33,171056,57],{"class":39},[33,171058,150350],{"class":289},[33,171060,170435],{"class":47},[19,171062,171063],{},"写文件时建议统一 UTF-8：",[23,171065,171067],{"className":25,"code":171066,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[30,171068,171069,171099],{"__ignoreMap":28},[33,171070,171071,171073,171075,171077,171079,171081,171083,171085,171087,171089,171091,171093,171095,171097],{"class":35,"line":36},[33,171072,110036],{"class":39},[33,171074,148988],{"class":72},[33,171076,133],{"class":47},[33,171078,148993],{"class":60},[33,171080,245],{"class":47},[33,171082,154160],{"class":60},[33,171084,245],{"class":47},[33,171086,149003],{"class":289},[33,171088,57],{"class":39},[33,171090,149008],{"class":60},[33,171092,15954],{"class":47},[33,171094,33613],{"class":39},[33,171096,150350],{"class":289},[33,171098,605],{"class":47},[33,171100,171101,171103,171105,171108],{"class":35,"line":51},[33,171102,170818],{"class":289},[33,171104,170821],{"class":47},[33,171106,171107],{"class":60},"\"中文内容\"",[33,171109,226],{"class":47},[14,171111,171113],{"id":171112},"_89-pathlib","8.9 pathlib",[19,171115,171116,171119],{},[30,171117,171118],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[23,171121,171123],{"className":25,"code":171122,"language":27,"meta":28,"style":28},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[30,171124,171125,171135,171139,171157],{"__ignoreMap":28},[33,171126,171127,171129,171131,171133],{"class":35,"line":36},[33,171128,32970],{"class":39},[33,171130,110514],{"class":47},[33,171132,32627],{"class":39},[33,171134,110519],{"class":47},[33,171136,171137],{"class":35,"line":51},[33,171138,100],{"emptyLinePlaceholder":99},[33,171140,171141,171143,171145,171147,171150,171152,171154],{"class":35,"line":64},[33,171142,170245],{"class":47},[33,171144,57],{"class":39},[33,171146,110748],{"class":47},[33,171148,171149],{"class":60},"\"data\"",[33,171151,15954],{"class":47},[33,171153,3001],{"class":39},[33,171155,171156],{"class":60}," \"students.txt\"\n",[33,171158,171159,171161],{"class":35,"line":76},[33,171160,122],{"class":72},[33,171162,171163],{"class":47},"(path)\n",[19,171165,171166],{},"创建目录：",[23,171168,171170],{"className":25,"code":171169,"language":27,"meta":28,"style":28},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[30,171171,171172,171182,171186,171199],{"__ignoreMap":28},[33,171173,171174,171176,171178,171180],{"class":35,"line":36},[33,171175,32970],{"class":39},[33,171177,110514],{"class":47},[33,171179,32627],{"class":39},[33,171181,110519],{"class":47},[33,171183,171184],{"class":35,"line":51},[33,171185,100],{"emptyLinePlaceholder":99},[33,171187,171188,171191,171193,171195,171197],{"class":35,"line":64},[33,171189,171190],{"class":47},"data_dir ",[33,171192,57],{"class":39},[33,171194,110748],{"class":47},[33,171196,171149],{"class":60},[33,171198,226],{"class":47},[33,171200,171201,171204,171207,171209,171211],{"class":35,"line":76},[33,171202,171203],{"class":47},"data_dir.mkdir(",[33,171205,171206],{"class":289},"exist_ok",[33,171208,57],{"class":39},[33,171210,1190],{"class":72},[33,171212,226],{"class":47},[19,171214,171215],{},"判断文件是否存在：",[23,171217,171219],{"className":25,"code":171218,"language":27,"meta":28,"style":28},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[30,171220,171221,171234,171238,171245],{"__ignoreMap":28},[33,171222,171223,171225,171227,171229,171232],{"class":35,"line":36},[33,171224,170245],{"class":47},[33,171226,57],{"class":39},[33,171228,110748],{"class":47},[33,171230,171231],{"class":60},"\"data\u002Fstudents.txt\"",[33,171233,226],{"class":47},[33,171235,171236],{"class":35,"line":51},[33,171237,100],{"emptyLinePlaceholder":99},[33,171239,171240,171242],{"class":35,"line":64},[33,171241,3805],{"class":39},[33,171243,171244],{"class":47}," path.exists():\n",[33,171246,171247,171249,171251,171254],{"class":35,"line":76},[33,171248,193],{"class":72},[33,171250,133],{"class":47},[33,171252,171253],{"class":60},"\"文件存在\"",[33,171255,226],{"class":47},[19,171257,171258],{},"读写文本：",[23,171260,171262],{"className":25,"code":171261,"language":27,"meta":28,"style":28},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[30,171263,171264,171276,171280,171297,171314],{"__ignoreMap":28},[33,171265,171266,171268,171270,171272,171274],{"class":35,"line":36},[33,171267,170245],{"class":47},[33,171269,57],{"class":39},[33,171271,110748],{"class":47},[33,171273,148993],{"class":60},[33,171275,226],{"class":47},[33,171277,171278],{"class":35,"line":51},[33,171279,100],{"emptyLinePlaceholder":99},[33,171281,171282,171285,171287,171289,171291,171293,171295],{"class":35,"line":64},[33,171283,171284],{"class":47},"path.write_text(",[33,171286,148074],{"class":60},[33,171288,245],{"class":47},[33,171290,149003],{"class":289},[33,171292,57],{"class":39},[33,171294,149008],{"class":60},[33,171296,226],{"class":47},[33,171298,171299,171301,171303,171306,171308,171310,171312],{"class":35,"line":76},[33,171300,170428],{"class":47},[33,171302,57],{"class":39},[33,171304,171305],{"class":47}," path.read_text(",[33,171307,149003],{"class":289},[33,171309,57],{"class":39},[33,171311,149008],{"class":60},[33,171313,226],{"class":47},[33,171315,171316,171318],{"class":35,"line":87},[33,171317,122],{"class":72},[33,171319,170442],{"class":47},[14,171321,171323],{"id":171322},"_810-json文件","8.10 JSON文件",[19,171325,171326],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[23,171328,171330],{"className":25,"code":171329,"language":27,"meta":28,"style":28},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[30,171331,171332,171338,171342,171350,171360,171370,171378,171382,171386,171411],{"__ignoreMap":28},[33,171333,171334,171336],{"class":35,"line":36},[33,171335,32627],{"class":39},[33,171337,149288],{"class":47},[33,171339,171340],{"class":35,"line":51},[33,171341,100],{"emptyLinePlaceholder":99},[33,171343,171344,171346,171348],{"class":35,"line":64},[33,171345,151671],{"class":47},[33,171347,57],{"class":39},[33,171349,17810],{"class":47},[33,171351,171352,171354,171356,171358],{"class":35,"line":76},[33,171353,149217],{"class":60},[33,171355,996],{"class":47},[33,171357,242],{"class":60},[33,171359,33696],{"class":47},[33,171361,171362,171364,171366,171368],{"class":35,"line":87},[33,171363,166691],{"class":60},[33,171365,996],{"class":47},[33,171367,248],{"class":72},[33,171369,33696],{"class":47},[33,171371,171372,171374,171376],{"class":35,"line":96},[33,171373,166702],{"class":60},[33,171375,996],{"class":47},[33,171377,166707],{"class":72},[33,171379,171380],{"class":35,"line":103},[33,171381,1010],{"class":47},[33,171383,171384],{"class":35,"line":108},[33,171385,100],{"emptyLinePlaceholder":99},[33,171387,171388,171390,171392,171395,171397,171399,171401,171403,171405,171407,171409],{"class":35,"line":119},[33,171389,158616],{"class":47},[33,171391,57],{"class":39},[33,171393,171394],{"class":47}," json.dumps(student, ",[33,171396,149334],{"class":289},[33,171398,57],{"class":39},[33,171400,36212],{"class":72},[33,171402,245],{"class":47},[33,171404,154196],{"class":289},[33,171406,57],{"class":39},[33,171408,725],{"class":72},[33,171410,226],{"class":47},[33,171412,171413,171415],{"class":35,"line":128},[33,171414,122],{"class":72},[33,171416,166226],{"class":47},[19,171418,171419],{},"写入 JSON 文件：",[23,171421,171423],{"className":25,"code":171422,"language":27,"meta":28,"style":28},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[30,171424,171425,171431,171435,171443,171471,171499,171503,171507,171537],{"__ignoreMap":28},[33,171426,171427,171429],{"class":35,"line":36},[33,171428,32627],{"class":39},[33,171430,149288],{"class":47},[33,171432,171433],{"class":35,"line":51},[33,171434,100],{"emptyLinePlaceholder":99},[33,171436,171437,171439,171441],{"class":35,"line":64},[33,171438,1082],{"class":47},[33,171440,57],{"class":39},[33,171442,1087],{"class":47},[33,171444,171445,171447,171449,171451,171453,171455,171457,171459,171461,171463,171465,171467,171469],{"class":35,"line":76},[33,171446,1092],{"class":47},[33,171448,993],{"class":60},[33,171450,996],{"class":47},[33,171452,242],{"class":60},[33,171454,245],{"class":47},[33,171456,1003],{"class":60},[33,171458,996],{"class":47},[33,171460,248],{"class":72},[33,171462,245],{"class":47},[33,171464,1103],{"class":60},[33,171466,996],{"class":47},[33,171468,1108],{"class":72},[33,171470,1111],{"class":47},[33,171472,171473,171475,171477,171479,171481,171483,171485,171487,171489,171491,171493,171495,171497],{"class":35,"line":87},[33,171474,1092],{"class":47},[33,171476,993],{"class":60},[33,171478,996],{"class":47},[33,171480,1122],{"class":60},[33,171482,245],{"class":47},[33,171484,1003],{"class":60},[33,171486,996],{"class":47},[33,171488,2042],{"class":72},[33,171490,245],{"class":47},[33,171492,1103],{"class":60},[33,171494,996],{"class":47},[33,171496,1131],{"class":72},[33,171498,1111],{"class":47},[33,171500,171501],{"class":35,"line":96},[33,171502,919],{"class":47},[33,171504,171505],{"class":35,"line":103},[33,171506,100],{"emptyLinePlaceholder":99},[33,171508,171509,171511,171513,171515,171517,171519,171521,171523,171525,171527,171529,171531,171533,171535],{"class":35,"line":108},[33,171510,110036],{"class":39},[33,171512,148988],{"class":72},[33,171514,133],{"class":47},[33,171516,154015],{"class":60},[33,171518,245],{"class":47},[33,171520,154160],{"class":60},[33,171522,245],{"class":47},[33,171524,149003],{"class":289},[33,171526,57],{"class":39},[33,171528,149008],{"class":60},[33,171530,15954],{"class":47},[33,171532,33613],{"class":39},[33,171534,150350],{"class":289},[33,171536,605],{"class":47},[33,171538,171539,171542,171544,171546,171548,171550,171552,171554,171556,171558,171560],{"class":35,"line":119},[33,171540,171541],{"class":47},"    json.dump(students, ",[33,171543,47577],{"class":289},[33,171545,245],{"class":47},[33,171547,149334],{"class":289},[33,171549,57],{"class":39},[33,171551,36212],{"class":72},[33,171553,245],{"class":47},[33,171555,154196],{"class":289},[33,171557,57],{"class":39},[33,171559,725],{"class":72},[33,171561,226],{"class":47},[19,171563,171564],{},"读取 JSON 文件：",[23,171566,171568],{"className":25,"code":171567,"language":27,"meta":28,"style":28},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[30,171569,171570,171576,171580,171610,171622,171626],{"__ignoreMap":28},[33,171571,171572,171574],{"class":35,"line":36},[33,171573,32627],{"class":39},[33,171575,149288],{"class":47},[33,171577,171578],{"class":35,"line":51},[33,171579,100],{"emptyLinePlaceholder":99},[33,171581,171582,171584,171586,171588,171590,171592,171594,171596,171598,171600,171602,171604,171606,171608],{"class":35,"line":64},[33,171583,110036],{"class":39},[33,171585,148988],{"class":72},[33,171587,133],{"class":47},[33,171589,154015],{"class":60},[33,171591,245],{"class":47},[33,171593,148998],{"class":60},[33,171595,245],{"class":47},[33,171597,149003],{"class":289},[33,171599,57],{"class":39},[33,171601,149008],{"class":60},[33,171603,15954],{"class":47},[33,171605,33613],{"class":39},[33,171607,150350],{"class":289},[33,171609,605],{"class":47},[33,171611,171612,171614,171616,171618,171620],{"class":35,"line":76},[33,171613,155216],{"class":47},[33,171615,57],{"class":39},[33,171617,150361],{"class":47},[33,171619,47577],{"class":289},[33,171621,226],{"class":47},[33,171623,171624],{"class":35,"line":87},[33,171625,100],{"emptyLinePlaceholder":99},[33,171627,171628,171630],{"class":35,"line":96},[33,171629,122],{"class":72},[33,171631,1199],{"class":47},[14,171633,171635],{"id":171634},"_811-csv文件","8.11 CSV文件",[19,171637,171638],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171640,171641],{},"写入 CSV：",[23,171643,171645],{"className":25,"code":171644,"language":27,"meta":28,"style":28},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[30,171646,171647,171654,171658,171666,171684,171700,171716,171720,171724,171764,171778],{"__ignoreMap":28},[33,171648,171649,171651],{"class":35,"line":36},[33,171650,32627],{"class":39},[33,171652,171653],{"class":47}," csv\n",[33,171655,171656],{"class":35,"line":51},[33,171657,100],{"emptyLinePlaceholder":99},[33,171659,171660,171662,171664],{"class":35,"line":64},[33,171661,1082],{"class":47},[33,171663,57],{"class":39},[33,171665,1087],{"class":47},[33,171667,171668,171671,171673,171675,171677,171679,171682],{"class":35,"line":76},[33,171669,171670],{"class":47},"    [",[33,171672,75312],{"class":60},[33,171674,245],{"class":47},[33,171676,75345],{"class":60},[33,171678,245],{"class":47},[33,171680,171681],{"class":60},"\"成绩\"",[33,171683,90044],{"class":47},[33,171685,171686,171688,171690,171692,171694,171696,171698],{"class":35,"line":87},[33,171687,171670],{"class":47},[33,171689,242],{"class":60},[33,171691,245],{"class":47},[33,171693,248],{"class":72},[33,171695,245],{"class":47},[33,171697,1108],{"class":72},[33,171699,90044],{"class":47},[33,171701,171702,171704,171706,171708,171710,171712,171714],{"class":35,"line":96},[33,171703,171670],{"class":47},[33,171705,1122],{"class":60},[33,171707,245],{"class":47},[33,171709,2042],{"class":72},[33,171711,245],{"class":47},[33,171713,1131],{"class":72},[33,171715,90044],{"class":47},[33,171717,171718],{"class":35,"line":103},[33,171719,919],{"class":47},[33,171721,171722],{"class":35,"line":108},[33,171723,100],{"emptyLinePlaceholder":99},[33,171725,171726,171728,171730,171732,171735,171737,171739,171741,171743,171745,171747,171749,171752,171754,171756,171758,171760,171762],{"class":35,"line":119},[33,171727,110036],{"class":39},[33,171729,148988],{"class":72},[33,171731,133],{"class":47},[33,171733,171734],{"class":60},"\"students.csv\"",[33,171736,245],{"class":47},[33,171738,154160],{"class":60},[33,171740,245],{"class":47},[33,171742,149003],{"class":289},[33,171744,57],{"class":39},[33,171746,149008],{"class":60},[33,171748,245],{"class":47},[33,171750,171751],{"class":289},"newline",[33,171753,57],{"class":39},[33,171755,9898],{"class":60},[33,171757,15954],{"class":47},[33,171759,33613],{"class":39},[33,171761,150350],{"class":289},[33,171763,605],{"class":47},[33,171765,171766,171769,171771,171774,171776],{"class":35,"line":128},[33,171767,171768],{"class":47},"    writer ",[33,171770,57],{"class":39},[33,171772,171773],{"class":47}," csv.writer(",[33,171775,47577],{"class":289},[33,171777,226],{"class":47},[33,171779,171780],{"class":35,"line":1753},[33,171781,171782],{"class":47},"    writer.writerows(students)\n",[19,171784,171785],{},"读取 CSV：",[23,171787,171789],{"className":25,"code":171788,"language":27,"meta":28,"style":28},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[30,171790,171791,171797,171801,171831,171845,171857],{"__ignoreMap":28},[33,171792,171793,171795],{"class":35,"line":36},[33,171794,32627],{"class":39},[33,171796,171653],{"class":47},[33,171798,171799],{"class":35,"line":51},[33,171800,100],{"emptyLinePlaceholder":99},[33,171802,171803,171805,171807,171809,171811,171813,171815,171817,171819,171821,171823,171825,171827,171829],{"class":35,"line":64},[33,171804,110036],{"class":39},[33,171806,148988],{"class":72},[33,171808,133],{"class":47},[33,171810,171734],{"class":60},[33,171812,245],{"class":47},[33,171814,148998],{"class":60},[33,171816,245],{"class":47},[33,171818,149003],{"class":289},[33,171820,57],{"class":39},[33,171822,149008],{"class":60},[33,171824,15954],{"class":47},[33,171826,33613],{"class":39},[33,171828,150350],{"class":289},[33,171830,605],{"class":47},[33,171832,171833,171836,171838,171841,171843],{"class":35,"line":76},[33,171834,171835],{"class":47},"    reader ",[33,171837,57],{"class":39},[33,171839,171840],{"class":47}," csv.reader(",[33,171842,47577],{"class":289},[33,171844,226],{"class":47},[33,171846,171847,171849,171852,171854],{"class":35,"line":87},[33,171848,675],{"class":39},[33,171850,171851],{"class":47}," row ",[33,171853,681],{"class":39},[33,171855,171856],{"class":47}," reader:\n",[33,171858,171859,171861],{"class":35,"line":96},[33,171860,807],{"class":72},[33,171862,171863],{"class":47},"(row)\n",[19,171865,171866],{},"使用字典写入：",[23,171868,171870],{"className":25,"code":171869,"language":27,"meta":28,"style":28},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[30,171871,171872,171878,171882,171890,171918,171946,171950,171954,171992,172013,172034,172039],{"__ignoreMap":28},[33,171873,171874,171876],{"class":35,"line":36},[33,171875,32627],{"class":39},[33,171877,171653],{"class":47},[33,171879,171880],{"class":35,"line":51},[33,171881,100],{"emptyLinePlaceholder":99},[33,171883,171884,171886,171888],{"class":35,"line":64},[33,171885,1082],{"class":47},[33,171887,57],{"class":39},[33,171889,1087],{"class":47},[33,171891,171892,171894,171896,171898,171900,171902,171904,171906,171908,171910,171912,171914,171916],{"class":35,"line":76},[33,171893,1092],{"class":47},[33,171895,993],{"class":60},[33,171897,996],{"class":47},[33,171899,242],{"class":60},[33,171901,245],{"class":47},[33,171903,1003],{"class":60},[33,171905,996],{"class":47},[33,171907,248],{"class":72},[33,171909,245],{"class":47},[33,171911,1103],{"class":60},[33,171913,996],{"class":47},[33,171915,1108],{"class":72},[33,171917,1111],{"class":47},[33,171919,171920,171922,171924,171926,171928,171930,171932,171934,171936,171938,171940,171942,171944],{"class":35,"line":87},[33,171921,1092],{"class":47},[33,171923,993],{"class":60},[33,171925,996],{"class":47},[33,171927,1122],{"class":60},[33,171929,245],{"class":47},[33,171931,1003],{"class":60},[33,171933,996],{"class":47},[33,171935,2042],{"class":72},[33,171937,245],{"class":47},[33,171939,1103],{"class":60},[33,171941,996],{"class":47},[33,171943,1131],{"class":72},[33,171945,1111],{"class":47},[33,171947,171948],{"class":35,"line":96},[33,171949,919],{"class":47},[33,171951,171952],{"class":35,"line":103},[33,171953,100],{"emptyLinePlaceholder":99},[33,171955,171956,171958,171960,171962,171964,171966,171968,171970,171972,171974,171976,171978,171980,171982,171984,171986,171988,171990],{"class":35,"line":108},[33,171957,110036],{"class":39},[33,171959,148988],{"class":72},[33,171961,133],{"class":47},[33,171963,171734],{"class":60},[33,171965,245],{"class":47},[33,171967,154160],{"class":60},[33,171969,245],{"class":47},[33,171971,149003],{"class":289},[33,171973,57],{"class":39},[33,171975,149008],{"class":60},[33,171977,245],{"class":47},[33,171979,171751],{"class":289},[33,171981,57],{"class":39},[33,171983,9898],{"class":60},[33,171985,15954],{"class":47},[33,171987,33613],{"class":39},[33,171989,150350],{"class":289},[33,171991,605],{"class":47},[33,171993,171994,171997,171999,172001,172003,172005,172007,172009,172011],{"class":35,"line":119},[33,171995,171996],{"class":47},"    fieldnames ",[33,171998,57],{"class":39},[33,172000,906],{"class":47},[33,172002,993],{"class":60},[33,172004,245],{"class":47},[33,172006,1003],{"class":60},[33,172008,245],{"class":47},[33,172010,1103],{"class":60},[33,172012,919],{"class":47},[33,172014,172015,172017,172019,172022,172024,172026,172029,172031],{"class":35,"line":128},[33,172016,171768],{"class":47},[33,172018,57],{"class":39},[33,172020,172021],{"class":47}," csv.DictWriter(",[33,172023,47577],{"class":289},[33,172025,245],{"class":47},[33,172027,172028],{"class":289},"fieldnames",[33,172030,57],{"class":39},[33,172032,172033],{"class":47},"fieldnames)\n",[33,172035,172036],{"class":35,"line":1753},[33,172037,172038],{"class":47},"    writer.writeheader()\n",[33,172040,172041],{"class":35,"line":1763},[33,172042,171782],{"class":47},[14,172044,172046],{"id":172045},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,172048,1968],{},[328,172050,172051,172054,172057],{},[331,172052,172053],{},"读取文本文件。",[331,172055,172056],{},"统计每个单词出现次数。",[331,172058,172059],{},"输出出现次数最多的前 10 个单词。",[19,172061,1982],{},[23,172063,172065],{"className":25,"code":172064,"language":27,"meta":28,"style":28},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[30,172066,172067,172077,172081,172094,172110,172114,172124,172133,172137,172149,172169,172178,172182,172200,172204,172234,172238,172254],{"__ignoreMap":28},[33,172068,172069,172071,172073,172075],{"class":35,"line":36},[33,172070,32970],{"class":39},[33,172072,110514],{"class":47},[33,172074,32627],{"class":39},[33,172076,110519],{"class":47},[33,172078,172079],{"class":35,"line":51},[33,172080,100],{"emptyLinePlaceholder":99},[33,172082,172083,172085,172087,172089,172092],{"class":35,"line":64},[33,172084,170245],{"class":47},[33,172086,57],{"class":39},[33,172088,110748],{"class":47},[33,172090,172091],{"class":60},"\"article.txt\"",[33,172093,226],{"class":47},[33,172095,172096,172098,172100,172102,172104,172106,172108],{"class":35,"line":76},[33,172097,170428],{"class":47},[33,172099,57],{"class":39},[33,172101,171305],{"class":47},[33,172103,149003],{"class":289},[33,172105,57],{"class":39},[33,172107,149008],{"class":60},[33,172109,226],{"class":47},[33,172111,172112],{"class":35,"line":87},[33,172113,100],{"emptyLinePlaceholder":99},[33,172115,172116,172119,172121],{"class":35,"line":96},[33,172117,172118],{"class":47},"words ",[33,172120,57],{"class":39},[33,172122,172123],{"class":47}," content.lower().split()\n",[33,172125,172126,172129,172131],{"class":35,"line":103},[33,172127,172128],{"class":47},"counter ",[33,172130,57],{"class":39},[33,172132,90076],{"class":47},[33,172134,172135],{"class":35,"line":108},[33,172136,100],{"emptyLinePlaceholder":99},[33,172138,172139,172141,172144,172146],{"class":35,"line":119},[33,172140,5282],{"class":39},[33,172142,172143],{"class":47}," word ",[33,172145,681],{"class":39},[33,172147,172148],{"class":47}," words:\n",[33,172150,172151,172154,172156,172159,172162,172164,172167],{"class":35,"line":128},[33,172152,172153],{"class":47},"    word ",[33,172155,57],{"class":39},[33,172157,172158],{"class":47}," word.strip(",[33,172160,172161],{"class":60},"\".,!?;:",[33,172163,158667],{"class":72},[33,172165,172166],{"class":60},"'()[]\"",[33,172168,226],{"class":47},[33,172170,172171,172173,172175],{"class":35,"line":1753},[33,172172,593],{"class":39},[33,172174,41154],{"class":39},[33,172176,172177],{"class":47}," word:\n",[33,172179,172180],{"class":35,"line":1763},[33,172181,150708],{"class":39},[33,172183,172184,172187,172189,172192,172194,172196,172198],{"class":35,"line":1775},[33,172185,172186],{"class":47},"    counter[word] ",[33,172188,57],{"class":39},[33,172190,172191],{"class":47}," counter.get(word, ",[33,172193,2617],{"class":72},[33,172195,15954],{"class":47},[33,172197,880],{"class":39},[33,172199,57917],{"class":72},[33,172201,172202],{"class":35,"line":1780},[33,172203,100],{"emptyLinePlaceholder":99},[33,172205,172206,172209,172211,172213,172216,172218,172220,172222,172224,172226,172228,172230,172232],{"class":35,"line":1785},[33,172207,172208],{"class":47},"items ",[33,172210,57],{"class":39},[33,172212,1549],{"class":72},[33,172214,172215],{"class":47},"(counter.items(), ",[33,172217,1171],{"class":289},[33,172219,1174],{"class":39},[33,172221,1177],{"class":47},[33,172223,720],{"class":72},[33,172225,1182],{"class":47},[33,172227,1185],{"class":289},[33,172229,57],{"class":39},[33,172231,1190],{"class":72},[33,172233,226],{"class":47},[33,172235,172236],{"class":35,"line":1940},[33,172237,100],{"emptyLinePlaceholder":99},[33,172239,172240,172242,172245,172247,172250,172252],{"class":35,"line":2183},[33,172241,5282],{"class":39},[33,172243,172244],{"class":47}," word, count ",[33,172246,681],{"class":39},[33,172248,172249],{"class":47}," items[:",[33,172251,1279],{"class":72},[33,172253,167903],{"class":47},[33,172255,172256,172258],{"class":35,"line":2208},[33,172257,193],{"class":72},[33,172259,172260],{"class":47},"(word, count)\n",[14,172262,172264],{"id":172263},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[23,172266,172268],{"className":25,"code":172267,"language":27,"meta":28,"style":28},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[30,172269,172270,172276,172286,172290,172302,172306,172310,172318,172328,172334,172338,172368,172378,172382,172386,172394,172424,172448,172452,172456,172464,172493,172498],{"__ignoreMap":28},[33,172271,172272,172274],{"class":35,"line":36},[33,172273,32627],{"class":39},[33,172275,149288],{"class":47},[33,172277,172278,172280,172282,172284],{"class":35,"line":51},[33,172279,32970],{"class":39},[33,172281,110514],{"class":47},[33,172283,32627],{"class":39},[33,172285,110519],{"class":47},[33,172287,172288],{"class":35,"line":64},[33,172289,100],{"emptyLinePlaceholder":99},[33,172291,172292,172294,172296,172298,172300],{"class":35,"line":76},[33,172293,154008],{"class":72},[33,172295,15804],{"class":39},[33,172297,110748],{"class":47},[33,172299,154015],{"class":60},[33,172301,226],{"class":47},[33,172303,172304],{"class":35,"line":87},[33,172305,100],{"emptyLinePlaceholder":99},[33,172307,172308],{"class":35,"line":96},[33,172309,100],{"emptyLinePlaceholder":99},[33,172311,172312,172314,172316],{"class":35,"line":103},[33,172313,40],{"class":39},[33,172315,154032],{"class":43},[33,172317,48],{"class":47},[33,172319,172320,172322,172324,172326],{"class":35,"line":108},[33,172321,593],{"class":39},[33,172323,41154],{"class":39},[33,172325,154043],{"class":72},[33,172327,154046],{"class":47},[33,172329,172330,172332],{"class":35,"line":119},[33,172331,1614],{"class":39},[33,172333,615],{"class":47},[33,172335,172336],{"class":35,"line":128},[33,172337,100],{"emptyLinePlaceholder":99},[33,172339,172340,172342,172344,172346,172348,172350,172352,172354,172356,172358,172360,172362,172364,172366],{"class":35,"line":1753},[33,172341,36403],{"class":39},[33,172343,148988],{"class":72},[33,172345,133],{"class":47},[33,172347,154008],{"class":72},[33,172349,245],{"class":47},[33,172351,148998],{"class":60},[33,172353,245],{"class":47},[33,172355,149003],{"class":289},[33,172357,57],{"class":39},[33,172359,149008],{"class":60},[33,172361,15954],{"class":47},[33,172363,33613],{"class":39},[33,172365,150350],{"class":289},[33,172367,605],{"class":47},[33,172369,172370,172372,172374,172376],{"class":35,"line":1763},[33,172371,1614],{"class":39},[33,172373,150361],{"class":47},[33,172375,47577],{"class":289},[33,172377,226],{"class":47},[33,172379,172380],{"class":35,"line":1775},[33,172381,100],{"emptyLinePlaceholder":99},[33,172383,172384],{"class":35,"line":1780},[33,172385,100],{"emptyLinePlaceholder":99},[33,172387,172388,172390,172392],{"class":35,"line":1785},[33,172389,40],{"class":39},[33,172391,154142],{"class":43},[33,172393,154145],{"class":47},[33,172395,172396,172398,172400,172402,172404,172406,172408,172410,172412,172414,172416,172418,172420,172422],{"class":35,"line":1940},[33,172397,36403],{"class":39},[33,172399,148988],{"class":72},[33,172401,133],{"class":47},[33,172403,154008],{"class":72},[33,172405,245],{"class":47},[33,172407,154160],{"class":60},[33,172409,245],{"class":47},[33,172411,149003],{"class":289},[33,172413,57],{"class":39},[33,172415,149008],{"class":60},[33,172417,15954],{"class":47},[33,172419,33613],{"class":39},[33,172421,150350],{"class":289},[33,172423,605],{"class":47},[33,172425,172426,172428,172430,172432,172434,172436,172438,172440,172442,172444,172446],{"class":35,"line":2183},[33,172427,154181],{"class":47},[33,172429,47577],{"class":289},[33,172431,245],{"class":47},[33,172433,149334],{"class":289},[33,172435,57],{"class":39},[33,172437,36212],{"class":72},[33,172439,245],{"class":47},[33,172441,154196],{"class":289},[33,172443,57],{"class":39},[33,172445,725],{"class":72},[33,172447,226],{"class":47},[33,172449,172450],{"class":35,"line":2208},[33,172451,100],{"emptyLinePlaceholder":99},[33,172453,172454],{"class":35,"line":2234},[33,172455,100],{"emptyLinePlaceholder":99},[33,172457,172458,172460,172462],{"class":35,"line":2239},[33,172459,1082],{"class":47},[33,172461,57],{"class":39},[33,172463,155221],{"class":47},[33,172465,172466,172469,172471,172473,172475,172477,172479,172481,172483,172485,172487,172489,172491],{"class":35,"line":2247},[33,172467,172468],{"class":47},"students.append({",[33,172470,993],{"class":60},[33,172472,996],{"class":47},[33,172474,242],{"class":60},[33,172476,245],{"class":47},[33,172478,1003],{"class":60},[33,172480,996],{"class":47},[33,172482,248],{"class":72},[33,172484,245],{"class":47},[33,172486,1103],{"class":60},[33,172488,996],{"class":47},[33,172490,1108],{"class":72},[33,172492,167303],{"class":47},[33,172494,172495],{"class":35,"line":2255},[33,172496,172497],{"class":47},"save_students(students)\n",[33,172499,172500,172502,172504,172507],{"class":35,"line":3992},[33,172501,122],{"class":72},[33,172503,133],{"class":47},[33,172505,172506],{"class":60},"\"保存成功\"",[33,172508,226],{"class":47},[14,172510,172512],{"id":172511},"_814-易错点","8.14 易错点",[328,172514,172515,172519,172525,172530,172537,172544],{},[331,172516,172517,170778],{},[30,172518,3208],{},[331,172520,172521,172522,30622],{},"读写中文要指定 ",[30,172523,172524],{},"encoding=\"utf-8\"",[331,172526,172527,172528,30622],{},"打开文件后要关闭，推荐使用 ",[30,172529,110036],{},[331,172531,172532,172533,172536],{},"读取大文件不要直接 ",[30,172534,172535],{},"read()"," 全部内容。",[331,172538,172539,172540,172543],{},"Windows 写 CSV 时建议加 ",[30,172541,172542],{},"newline=\"\"","，避免空行。",[331,172545,172546],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172548,172550],{"id":172549},"_815-本章练习","8.15 本章练习",[328,172552,172553,172560,172565,172568,172571],{},[331,172554,172555,172556,172559],{},"写入一个 ",[30,172557,172558],{},"students.txt","，每行保存一个学生姓名。",[331,172561,106559,172562,172564],{},[30,172563,172558],{}," 并输出所有学生。",[331,172566,172567],{},"把学生列表保存为 JSON 文件。",[331,172569,172570],{},"从 JSON 文件读取学生数据，计算平均分。",[331,172572,172573,172574,172577,172578,172581],{},"写一个日志函数 ",[30,172575,172576],{},"write_log(message)","，每次调用向 ",[30,172579,172580],{},"app.log"," 追加一行。",[2331,172583,172584],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":28,"searchDepth":51,"depth":51,"links":172586},[172587,172588,172592,172593,172599,172600,172601,172602,172603,172604,172605,172606,172607,172608,172609],{"id":170098,"depth":51,"text":170099},{"id":170139,"depth":51,"text":170140,"children":172589},[172590,172591],{"id":170143,"depth":64,"text":170144},{"id":170177,"depth":64,"text":170178},{"id":170291,"depth":51,"text":170292},{"id":170384,"depth":51,"text":170385,"children":172594},[172595,172596,172597,172598],{"id":170388,"depth":64,"text":170389},{"id":170475,"depth":64,"text":170476},{"id":170545,"depth":64,"text":170546},{"id":170639,"depth":64,"text":170640},{"id":170709,"depth":51,"text":170710},{"id":170772,"depth":51,"text":170773},{"id":170933,"depth":51,"text":170934},{"id":170996,"depth":51,"text":170997},{"id":171112,"depth":51,"text":171113},{"id":171322,"depth":51,"text":171323},{"id":171634,"depth":51,"text":171635},{"id":172045,"depth":51,"text":172046},{"id":172263,"depth":51,"text":172264},{"id":172511,"depth":51,"text":172512},{"id":172549,"depth":51,"text":172550},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":170090,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172616,"title":172617,"body":172618,"description":2359,"extension":2360,"meta":174804,"navigation":99,"path":174805,"seo":174806,"stem":174807,"__hash__":174808},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172619,"toc":174771},[172620,172623,172627,172630,172633,172725,172727,172746,172751,172755,172758,172761,172790,172797,172800,172804,172807,172836,172838,172890,172896,172949,172953,173051,173054,173121,173125,173182,173184,173190,173194,173199,173205,173296,173301,173305,173308,173386,173389,173427,173431,173549,173552,173556,173559,173604,173607,173611,173616,173622,173672,173675,173706,173710,173714,173744,173748,173783,173787,173822,173862,173866,173882,173885,173889,173893,173972,173976,174017,174021,174076,174080,174114,174118,174148,174157,174164,174170,174227,174230,174238,174241,174245,174252,174255,174261,174264,174281,174286,174290,174296,174309,174312,174349,174352,174363,174366,174380,174383,174397,174401,174408,174441,174444,174446,174452,174455,174459,174461,174467,174472,174645,174649,174712,174716,174740,174744,174768],[10,172621,172617],{"id":172622},"_9-异常模块与包",[14,172624,172626],{"id":172625},"_91-什么是异常","9.1 什么是异常",[19,172628,172629],{},"异常是程序运行过程中出现的错误。",[19,172631,172632],{},"常见异常：",[2563,172634,172635,172644],{},[2566,172636,172637],{},[2569,172638,172639,172642],{},[2572,172640,172641],{},"异常",[2572,172643,28108],{},[2610,172645,172646,172656,172666,172675,172685,172695,172705,172715],{},[2569,172647,172648,172653],{},[2615,172649,172650],{},[30,172651,172652],{},"NameError",[2615,172654,172655],{},"使用了未定义变量",[2569,172657,172658,172663],{},[2615,172659,172660],{},[30,172661,172662],{},"TypeError",[2615,172664,172665],{},"类型不匹配",[2569,172667,172668,172672],{},[2615,172669,172670],{},[30,172671,157009],{},[2615,172673,172674],{},"值不合法",[2569,172676,172677,172682],{},[2615,172678,172679],{},[30,172680,172681],{},"IndexError",[2615,172683,172684],{},"列表索引越界",[2569,172686,172687,172692],{},[2615,172688,172689],{},[30,172690,172691],{},"KeyError",[2615,172693,172694],{},"字典 key 不存在",[2569,172696,172697,172702],{},[2615,172698,172699],{},[30,172700,172701],{},"FileNotFoundError",[2615,172703,172704],{},"文件不存在",[2569,172706,172707,172712],{},[2615,172708,172709],{},[30,172710,172711],{},"ZeroDivisionError",[2615,172713,172714],{},"除数为 0",[2569,172716,172717,172722],{},[2615,172718,172719],{},[30,172720,172721],{},"ImportError",[2615,172723,172724],{},"导入失败",[19,172726,17373],{},[23,172728,172730],{"className":25,"code":172729,"language":27,"meta":28,"style":28},"num = int(\"abc\")\n",[30,172731,172732],{"__ignoreMap":28},[33,172733,172734,172736,172738,172740,172742,172744],{"class":35,"line":36},[33,172735,157962],{"class":47},[33,172737,57],{"class":39},[33,172739,4641],{"class":72},[33,172741,133],{"class":47},[33,172743,158055],{"class":60},[33,172745,226],{"class":47},[19,172747,172748,172749,30622],{},"会触发 ",[30,172750,157009],{},[14,172752,172754],{"id":172753},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172756,172757],{},"如果不处理异常，程序会直接终止。",[19,172759,172760],{},"例如用户输入年龄：",[23,172762,172764],{"className":25,"code":172763,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[30,172765,172766,172784],{"__ignoreMap":28},[33,172767,172768,172770,172772,172774,172776,172778,172780,172782],{"class":35,"line":36},[33,172769,148744],{"class":47},[33,172771,57],{"class":39},[33,172773,4641],{"class":72},[33,172775,133],{"class":47},[33,172777,56040],{"class":72},[33,172779,133],{"class":47},[33,172781,154574],{"class":60},[33,172783,551],{"class":47},[33,172785,172786,172788],{"class":35,"line":51},[33,172787,122],{"class":72},[33,172789,157936],{"class":47},[19,172791,172792,172793,172796],{},"用户输入 ",[30,172794,172795],{},"abc","，程序就会报错退出。",[19,172798,172799],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172801,172803],{"id":172802},"_93-try-except","9.3 try except",[19,172805,172806],{},"基础语法：",[23,172808,172810],{"className":25,"code":172809,"language":27,"meta":28,"style":28},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[30,172811,172812,172819,172824,172831],{"__ignoreMap":28},[33,172813,172814,172817],{"class":35,"line":36},[33,172815,172816],{"class":39},"try",[33,172818,605],{"class":47},[33,172820,172821],{"class":35,"line":51},[33,172822,172823],{"class":47},"    可能出错的代码\n",[33,172825,172826,172829],{"class":35,"line":64},[33,172827,172828],{"class":39},"except",[33,172830,605],{"class":47},[33,172832,172833],{"class":35,"line":76},[33,172834,172835],{"class":47},"    出错后的处理代码\n",[19,172837,17373],{},[23,172839,172841],{"className":25,"code":172840,"language":27,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[30,172842,172843,172849,172867,172873,172879],{"__ignoreMap":28},[33,172844,172845,172847],{"class":35,"line":36},[33,172846,172816],{"class":39},[33,172848,605],{"class":47},[33,172850,172851,172853,172855,172857,172859,172861,172863,172865],{"class":35,"line":51},[33,172852,67],{"class":47},[33,172854,57],{"class":39},[33,172856,4641],{"class":72},[33,172858,133],{"class":47},[33,172860,56040],{"class":72},[33,172862,133],{"class":47},[33,172864,154574],{"class":60},[33,172866,551],{"class":47},[33,172868,172869,172871],{"class":35,"line":64},[33,172870,193],{"class":72},[33,172872,157936],{"class":47},[33,172874,172875,172877],{"class":35,"line":76},[33,172876,172828],{"class":39},[33,172878,605],{"class":47},[33,172880,172881,172883,172885,172888],{"class":35,"line":87},[33,172882,193],{"class":72},[33,172884,133],{"class":47},[33,172886,172887],{"class":60},"\"年龄必须是数字\"",[33,172889,226],{"class":47},[19,172891,172892,172893,172895],{},"不建议裸写 ",[30,172894,172828],{},"，最好指定异常类型。",[23,172897,172899],{"className":25,"code":172898,"language":27,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[30,172900,172901,172907,172925,172931,172939],{"__ignoreMap":28},[33,172902,172903,172905],{"class":35,"line":36},[33,172904,172816],{"class":39},[33,172906,605],{"class":47},[33,172908,172909,172911,172913,172915,172917,172919,172921,172923],{"class":35,"line":51},[33,172910,67],{"class":47},[33,172912,57],{"class":39},[33,172914,4641],{"class":72},[33,172916,133],{"class":47},[33,172918,56040],{"class":72},[33,172920,133],{"class":47},[33,172922,154574],{"class":60},[33,172924,551],{"class":47},[33,172926,172927,172929],{"class":35,"line":64},[33,172928,193],{"class":72},[33,172930,157936],{"class":47},[33,172932,172933,172935,172937],{"class":35,"line":76},[33,172934,172828],{"class":39},[33,172936,154408],{"class":72},[33,172938,605],{"class":47},[33,172940,172941,172943,172945,172947],{"class":35,"line":87},[33,172942,193],{"class":72},[33,172944,133],{"class":47},[33,172946,172887],{"class":60},[33,172948,226],{"class":47},[14,172950,172952],{"id":172951},"_94-捕获多个异常","9.4 捕获多个异常",[23,172954,172956],{"className":25,"code":172955,"language":27,"meta":28,"style":28},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[30,172957,172958,172964,172985,173005,173012,173020,173031,173040],{"__ignoreMap":28},[33,172959,172960,172962],{"class":35,"line":36},[33,172961,172816],{"class":39},[33,172963,605],{"class":47},[33,172965,172966,172969,172971,172973,172975,172977,172979,172981,172983],{"class":35,"line":51},[33,172967,172968],{"class":47},"    nums ",[33,172970,57],{"class":39},[33,172972,906],{"class":47},[33,172974,720],{"class":72},[33,172976,245],{"class":47},[33,172978,725],{"class":72},[33,172980,245],{"class":47},[33,172982,730],{"class":72},[33,172984,919],{"class":47},[33,172986,172987,172990,172992,172994,172996,172998,173000,173003],{"class":35,"line":64},[33,172988,172989],{"class":47},"    index ",[33,172991,57],{"class":39},[33,172993,4641],{"class":72},[33,172995,133],{"class":47},[33,172997,56040],{"class":72},[33,172999,133],{"class":47},[33,173001,173002],{"class":60},"\"请输入索引:\"",[33,173004,551],{"class":47},[33,173006,173007,173009],{"class":35,"line":76},[33,173008,193],{"class":72},[33,173010,173011],{"class":47},"(nums[index])\n",[33,173013,173014,173016,173018],{"class":35,"line":87},[33,173015,172828],{"class":39},[33,173017,154408],{"class":72},[33,173019,605],{"class":47},[33,173021,173022,173024,173026,173029],{"class":35,"line":96},[33,173023,193],{"class":72},[33,173025,133],{"class":47},[33,173027,173028],{"class":60},"\"索引必须是整数\"",[33,173030,226],{"class":47},[33,173032,173033,173035,173038],{"class":35,"line":103},[33,173034,172828],{"class":39},[33,173036,173037],{"class":72}," IndexError",[33,173039,605],{"class":47},[33,173041,173042,173044,173046,173049],{"class":35,"line":108},[33,173043,193],{"class":72},[33,173045,133],{"class":47},[33,173047,173048],{"class":60},"\"索引越界\"",[33,173050,226],{"class":47},[19,173052,173053],{},"多个异常使用相同处理逻辑：",[23,173055,173057],{"className":25,"code":173056,"language":27,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[30,173058,173059,173065,173083,173096,173110],{"__ignoreMap":28},[33,173060,173061,173063],{"class":35,"line":36},[33,173062,172816],{"class":39},[33,173064,605],{"class":47},[33,173066,173067,173069,173071,173073,173075,173077,173079,173081],{"class":35,"line":51},[33,173068,47816],{"class":47},[33,173070,57],{"class":39},[33,173072,4641],{"class":72},[33,173074,133],{"class":47},[33,173076,56040],{"class":72},[33,173078,133],{"class":47},[33,173080,157971],{"class":60},[33,173082,551],{"class":47},[33,173084,173085,173087,173089,173091,173093],{"class":35,"line":64},[33,173086,193],{"class":72},[33,173088,133],{"class":47},[33,173090,1279],{"class":72},[33,173092,158220],{"class":39},[33,173094,173095],{"class":47}," num)\n",[33,173097,173098,173100,173102,173104,173106,173108],{"class":35,"line":76},[33,173099,172828],{"class":39},[33,173101,3924],{"class":47},[33,173103,157009],{"class":72},[33,173105,245],{"class":47},[33,173107,172711],{"class":72},[33,173109,366],{"class":47},[33,173111,173112,173114,173116,173119],{"class":35,"line":87},[33,173113,193],{"class":72},[33,173115,133],{"class":47},[33,173117,173118],{"class":60},"\"输入不合法\"",[33,173120,226],{"class":47},[14,173122,173124],{"id":173123},"_95-获取异常信息","9.5 获取异常信息",[23,173126,173128],{"className":25,"code":173127,"language":27,"meta":28,"style":28},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[30,173129,173130,173136,173150,173161],{"__ignoreMap":28},[33,173131,173132,173134],{"class":35,"line":36},[33,173133,172816],{"class":39},[33,173135,605],{"class":47},[33,173137,173138,173140,173142,173144,173146,173148],{"class":35,"line":51},[33,173139,47816],{"class":47},[33,173141,57],{"class":39},[33,173143,4641],{"class":72},[33,173145,133],{"class":47},[33,173147,158055],{"class":60},[33,173149,226],{"class":47},[33,173151,173152,173154,173156,173158],{"class":35,"line":64},[33,173153,172828],{"class":39},[33,173155,154408],{"class":72},[33,173157,66821],{"class":39},[33,173159,173160],{"class":47}," e:\n",[33,173162,173163,173165,173167,173169,173172,173174,173176,173178,173180],{"class":35,"line":76},[33,173164,193],{"class":72},[33,173166,133],{"class":47},[33,173168,198],{"class":39},[33,173170,173171],{"class":60},"\"出错了:",[33,173173,204],{"class":72},[33,173175,2502],{"class":47},[33,173177,210],{"class":72},[33,173179,397],{"class":60},[33,173181,226],{"class":47},[19,173183,148655],{},[23,173185,173188],{"className":173186,"code":173187,"language":7436,"meta":28},[7434],"出错了:invalid literal for int() with base 10: 'abc'\n",[30,173189,173187],{"__ignoreMap":28},[14,173191,173193],{"id":173192},"_96-else和finally","9.6 else和finally",[19,173195,173196,173198],{},[30,173197,3963],{},"：没有异常时执行。",[19,173200,173201,173204],{},[30,173202,173203],{},"finally","：无论是否异常都会执行。",[23,173206,173208],{"className":25,"code":173207,"language":27,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[30,173209,173210,173216,173234,173242,173252,173258,173279,173285],{"__ignoreMap":28},[33,173211,173212,173214],{"class":35,"line":36},[33,173213,172816],{"class":39},[33,173215,605],{"class":47},[33,173217,173218,173220,173222,173224,173226,173228,173230,173232],{"class":35,"line":51},[33,173219,47816],{"class":47},[33,173221,57],{"class":39},[33,173223,4641],{"class":72},[33,173225,133],{"class":47},[33,173227,56040],{"class":72},[33,173229,133],{"class":47},[33,173231,157971],{"class":60},[33,173233,551],{"class":47},[33,173235,173236,173238,173240],{"class":35,"line":64},[33,173237,172828],{"class":39},[33,173239,154408],{"class":72},[33,173241,605],{"class":47},[33,173243,173244,173246,173248,173250],{"class":35,"line":76},[33,173245,193],{"class":72},[33,173247,133],{"class":47},[33,173249,155393],{"class":60},[33,173251,226],{"class":47},[33,173253,173254,173256],{"class":35,"line":87},[33,173255,3963],{"class":39},[33,173257,605],{"class":47},[33,173259,173260,173262,173264,173266,173269,173271,173273,173275,173277],{"class":35,"line":96},[33,173261,193],{"class":72},[33,173263,133],{"class":47},[33,173265,198],{"class":39},[33,173267,173268],{"class":60},"\"输入正确:",[33,173270,204],{"class":72},[33,173272,3931],{"class":47},[33,173274,210],{"class":72},[33,173276,397],{"class":60},[33,173278,226],{"class":47},[33,173280,173281,173283],{"class":35,"line":103},[33,173282,173203],{"class":39},[33,173284,605],{"class":47},[33,173286,173287,173289,173291,173294],{"class":35,"line":108},[33,173288,193],{"class":72},[33,173290,133],{"class":47},[33,173292,173293],{"class":60},"\"程序结束\"",[33,173295,226],{"class":47},[19,173297,173298,173300],{},[30,173299,173203],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,173302,173304],{"id":173303},"_97-抛出异常","9.7 抛出异常",[19,173306,173307],{},"程序可以主动抛出异常。",[23,173309,173311],{"className":25,"code":173310,"language":27,"meta":28,"style":28},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[30,173312,173313,173322,173334,173347,173367,173371,173375],{"__ignoreMap":28},[33,173314,173315,173317,173320],{"class":35,"line":36},[33,173316,40],{"class":39},[33,173318,173319],{"class":43}," set_age",[33,173321,163575],{"class":47},[33,173323,173324,173326,173328,173330,173332],{"class":35,"line":51},[33,173325,593],{"class":39},[33,173327,17945],{"class":47},[33,173329,2226],{"class":39},[33,173331,1437],{"class":72},[33,173333,605],{"class":47},[33,173335,173336,173338,173340,173342,173345],{"class":35,"line":64},[33,173337,105636],{"class":39},[33,173339,154408],{"class":72},[33,173341,133],{"class":47},[33,173343,173344],{"class":60},"\"年龄不能为负数\"",[33,173346,226],{"class":47},[33,173348,173349,173351,173353,173355,173357,173359,173361,173363,173365],{"class":35,"line":76},[33,173350,193],{"class":72},[33,173352,133],{"class":47},[33,173354,198],{"class":39},[33,173356,164142],{"class":60},[33,173358,204],{"class":72},[33,173360,218],{"class":47},[33,173362,210],{"class":72},[33,173364,397],{"class":60},[33,173366,226],{"class":47},[33,173368,173369],{"class":35,"line":87},[33,173370,100],{"emptyLinePlaceholder":99},[33,173372,173373],{"class":35,"line":96},[33,173374,100],{"emptyLinePlaceholder":99},[33,173376,173377,173380,173382,173384],{"class":35,"line":103},[33,173378,173379],{"class":47},"set_age(",[33,173381,2949],{"class":39},[33,173383,720],{"class":72},[33,173385,226],{"class":47},[19,173387,173388],{},"调用者可以捕获：",[23,173390,173392],{"className":25,"code":173391,"language":27,"meta":28,"style":28},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[30,173393,173394,173400,173411,173421],{"__ignoreMap":28},[33,173395,173396,173398],{"class":35,"line":36},[33,173397,172816],{"class":39},[33,173399,605],{"class":47},[33,173401,173402,173405,173407,173409],{"class":35,"line":51},[33,173403,173404],{"class":47},"    set_age(",[33,173406,2949],{"class":39},[33,173408,720],{"class":72},[33,173410,226],{"class":47},[33,173412,173413,173415,173417,173419],{"class":35,"line":64},[33,173414,172828],{"class":39},[33,173416,154408],{"class":72},[33,173418,66821],{"class":39},[33,173420,173160],{"class":47},[33,173422,173423,173425],{"class":35,"line":76},[33,173424,193],{"class":72},[33,173426,69216],{"class":47},[14,173428,173430],{"id":173429},"_98-自定义异常","9.8 自定义异常",[23,173432,173434],{"className":25,"code":173433,"language":27,"meta":28,"style":28},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[30,173435,173436,173450,173454,173458,173462,173470,173480,173491,173501,173505,173509,173515,173532,173543],{"__ignoreMap":28},[33,173437,173438,173440,173443,173445,173448],{"class":35,"line":36},[33,173439,16934],{"class":39},[33,173441,173442],{"class":43}," BalanceNotEnoughError",[33,173444,133],{"class":47},[33,173446,173447],{"class":72},"Exception",[33,173449,366],{"class":47},[33,173451,173452],{"class":35,"line":51},[33,173453,462],{"class":39},[33,173455,173456],{"class":35,"line":64},[33,173457,100],{"emptyLinePlaceholder":99},[33,173459,173460],{"class":35,"line":76},[33,173461,100],{"emptyLinePlaceholder":99},[33,173463,173464,173466,173468],{"class":35,"line":87},[33,173465,40],{"class":39},[33,173467,152374],{"class":43},[33,173469,164969],{"class":47},[33,173471,173472,173474,173476,173478],{"class":35,"line":96},[33,173473,593],{"class":39},[33,173475,152330],{"class":47},[33,173477,3367],{"class":39},[33,173479,164746],{"class":47},[33,173481,173482,173484,173487,173489],{"class":35,"line":103},[33,173483,105636],{"class":39},[33,173485,173486],{"class":47}," BalanceNotEnoughError(",[33,173488,152425],{"class":60},[33,173490,226],{"class":47},[33,173492,173493,173495,173497,173499],{"class":35,"line":108},[33,173494,90],{"class":39},[33,173496,164976],{"class":47},[33,173498,2949],{"class":39},[33,173500,152363],{"class":47},[33,173502,173503],{"class":35,"line":119},[33,173504,100],{"emptyLinePlaceholder":99},[33,173506,173507],{"class":35,"line":128},[33,173508,100],{"emptyLinePlaceholder":99},[33,173510,173511,173513],{"class":35,"line":1753},[33,173512,172816],{"class":39},[33,173514,605],{"class":47},[33,173516,173517,173519,173521,173524,173526,173528,173530],{"class":35,"line":1763},[33,173518,164647],{"class":47},[33,173520,57],{"class":39},[33,173522,173523],{"class":47}," withdraw(",[33,173525,2734],{"class":72},[33,173527,245],{"class":47},[33,173529,3983],{"class":72},[33,173531,226],{"class":47},[33,173533,173534,173536,173539,173541],{"class":35,"line":1775},[33,173535,172828],{"class":39},[33,173537,173538],{"class":47}," BalanceNotEnoughError ",[33,173540,33613],{"class":39},[33,173542,173160],{"class":47},[33,173544,173545,173547],{"class":35,"line":1780},[33,173546,193],{"class":72},[33,173548,69216],{"class":47},[19,173550,173551],{},"入门阶段大多数情况使用内置异常即可。",[14,173553,173555],{"id":173554},"_99-traceback","9.9 traceback",[19,173557,173558],{},"调试时可以输出完整异常堆栈。",[23,173560,173562],{"className":25,"code":173561,"language":27,"meta":28,"style":28},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[30,173563,173564,173571,173575,173581,173591,173599],{"__ignoreMap":28},[33,173565,173566,173568],{"class":35,"line":36},[33,173567,32627],{"class":39},[33,173569,173570],{"class":47}," traceback\n",[33,173572,173573],{"class":35,"line":51},[33,173574,100],{"emptyLinePlaceholder":99},[33,173576,173577,173579],{"class":35,"line":64},[33,173578,172816],{"class":39},[33,173580,605],{"class":47},[33,173582,173583,173585,173587,173589],{"class":35,"line":76},[33,173584,4244],{"class":72},[33,173586,133],{"class":47},[33,173588,158055],{"class":60},[33,173590,226],{"class":47},[33,173592,173593,173595,173597],{"class":35,"line":87},[33,173594,172828],{"class":39},[33,173596,154408],{"class":72},[33,173598,605],{"class":47},[33,173600,173601],{"class":35,"line":96},[33,173602,173603],{"class":47},"    traceback.print_exc()\n",[19,173605,173606],{},"日志系统中常把异常堆栈记录到文件。",[14,173608,173610],{"id":173609},"_910-什么是模块","9.10 什么是模块",[19,173612,173613,173614,128181],{},"模块就是一个 ",[30,173615,148550],{},[19,173617,173618,173619,26857],{},"例如创建 ",[30,173620,173621],{},"my_math.py",[23,173623,173625],{"className":25,"code":173624,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[30,173626,173627,173635,173645,173649,173653,173662],{"__ignoreMap":28},[33,173628,173629,173631,173633],{"class":35,"line":36},[33,173630,40],{"class":39},[33,173632,652],{"class":43},[33,173634,1226],{"class":47},[33,173636,173637,173639,173641,173643],{"class":35,"line":51},[33,173638,90],{"class":39},[33,173640,877],{"class":47},[33,173642,880],{"class":39},[33,173644,1052],{"class":47},[33,173646,173647],{"class":35,"line":64},[33,173648,100],{"emptyLinePlaceholder":99},[33,173650,173651],{"class":35,"line":76},[33,173652,100],{"emptyLinePlaceholder":99},[33,173654,173655,173657,173660],{"class":35,"line":87},[33,173656,40],{"class":39},[33,173658,173659],{"class":43}," sub",[33,173661,1226],{"class":47},[33,173663,173664,173666,173668,173670],{"class":35,"line":96},[33,173665,90],{"class":39},[33,173667,877],{"class":47},[33,173669,2949],{"class":39},[33,173671,1052],{"class":47},[19,173673,173674],{},"在另一个文件中导入：",[23,173676,173678],{"className":25,"code":173677,"language":27,"meta":28,"style":28},"import my_math\n\nprint(my_math.add(1, 2))\n",[30,173679,173680,173687,173691],{"__ignoreMap":28},[33,173681,173682,173684],{"class":35,"line":36},[33,173683,32627],{"class":39},[33,173685,173686],{"class":47}," my_math\n",[33,173688,173689],{"class":35,"line":51},[33,173690,100],{"emptyLinePlaceholder":99},[33,173692,173693,173695,173698,173700,173702,173704],{"class":35,"line":64},[33,173694,122],{"class":72},[33,173696,173697],{"class":47},"(my_math.add(",[33,173699,720],{"class":72},[33,173701,245],{"class":47},[33,173703,725],{"class":72},[33,173705,551],{"class":47},[14,173707,173709],{"id":173708},"_911-import导入","9.11 import导入",[631,173711,173713],{"id":173712},"_9111-导入模块","9.11.1 导入模块",[23,173715,173717],{"className":25,"code":173716,"language":27,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\n",[30,173718,173719,173725,173729],{"__ignoreMap":28},[33,173720,173721,173723],{"class":35,"line":36},[33,173722,32627],{"class":39},[33,173724,47551],{"class":47},[33,173726,173727],{"class":35,"line":51},[33,173728,100],{"emptyLinePlaceholder":99},[33,173730,173731,173733,173736,173738,173740,173742],{"class":35,"line":64},[33,173732,122],{"class":72},[33,173734,173735],{"class":47},"(random.randint(",[33,173737,720],{"class":72},[33,173739,245],{"class":47},[33,173741,1279],{"class":72},[33,173743,551],{"class":47},[631,173745,173747],{"id":173746},"_9112-导入指定内容","9.11.2 导入指定内容",[23,173749,173751],{"className":25,"code":173750,"language":27,"meta":28,"style":28},"from random import randint\n\nprint(randint(1, 10))\n",[30,173752,173753,173764,173768],{"__ignoreMap":28},[33,173754,173755,173757,173759,173761],{"class":35,"line":36},[33,173756,32970],{"class":39},[33,173758,60014],{"class":47},[33,173760,32627],{"class":39},[33,173762,173763],{"class":47}," randint\n",[33,173765,173766],{"class":35,"line":51},[33,173767,100],{"emptyLinePlaceholder":99},[33,173769,173770,173772,173775,173777,173779,173781],{"class":35,"line":64},[33,173771,122],{"class":72},[33,173773,173774],{"class":47},"(randint(",[33,173776,720],{"class":72},[33,173778,245],{"class":47},[33,173780,1279],{"class":72},[33,173782,551],{"class":47},[631,173784,173786],{"id":173785},"_9113-起别名","9.11.3 起别名",[23,173788,173790],{"className":25,"code":173789,"language":27,"meta":28,"style":28},"import random as rd\n\nprint(rd.randint(1, 10))\n",[30,173791,173792,173803,173807],{"__ignoreMap":28},[33,173793,173794,173796,173798,173800],{"class":35,"line":36},[33,173795,32627],{"class":39},[33,173797,60014],{"class":47},[33,173799,33613],{"class":39},[33,173801,173802],{"class":47}," rd\n",[33,173804,173805],{"class":35,"line":51},[33,173806,100],{"emptyLinePlaceholder":99},[33,173808,173809,173811,173814,173816,173818,173820],{"class":35,"line":64},[33,173810,122],{"class":72},[33,173812,173813],{"class":47},"(rd.randint(",[33,173815,720],{"class":72},[33,173817,245],{"class":47},[33,173819,1279],{"class":72},[33,173821,551],{"class":47},[23,173823,173825],{"className":25,"code":173824,"language":27,"meta":28,"style":28},"from random import randint as rint\n\nprint(rint(1, 10))\n",[30,173826,173827,173843,173847],{"__ignoreMap":28},[33,173828,173829,173831,173833,173835,173838,173840],{"class":35,"line":36},[33,173830,32970],{"class":39},[33,173832,60014],{"class":47},[33,173834,32627],{"class":39},[33,173836,173837],{"class":47}," randint ",[33,173839,33613],{"class":39},[33,173841,173842],{"class":47}," rint\n",[33,173844,173845],{"class":35,"line":51},[33,173846,100],{"emptyLinePlaceholder":99},[33,173848,173849,173851,173854,173856,173858,173860],{"class":35,"line":64},[33,173850,122],{"class":72},[33,173852,173853],{"class":47},"(rint(",[33,173855,720],{"class":72},[33,173857,245],{"class":47},[33,173859,1279],{"class":72},[33,173861,551],{"class":47},[631,173863,173865],{"id":173864},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[23,173867,173869],{"className":25,"code":173868,"language":27,"meta":28,"style":28},"from random import *\n",[30,173870,173871],{"__ignoreMap":28},[33,173872,173873,173875,173877,173879],{"class":35,"line":36},[33,173874,32970],{"class":39},[33,173876,60014],{"class":47},[33,173878,32627],{"class":39},[33,173880,173881],{"class":39}," *\n",[19,173883,173884],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173886,173888],{"id":173887},"_912-常用内置模块","9.12 常用内置模块",[631,173890,173892],{"id":173891},"_9121-random","9.12.1 random",[23,173894,173896],{"className":25,"code":173895,"language":27,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[30,173897,173898,173904,173908,173922,173941],{"__ignoreMap":28},[33,173899,173900,173902],{"class":35,"line":36},[33,173901,32627],{"class":39},[33,173903,47551],{"class":47},[33,173905,173906],{"class":35,"line":51},[33,173907,100],{"emptyLinePlaceholder":99},[33,173909,173910,173912,173914,173916,173918,173920],{"class":35,"line":64},[33,173911,122],{"class":72},[33,173913,173735],{"class":47},[33,173915,720],{"class":72},[33,173917,245],{"class":47},[33,173919,1279],{"class":72},[33,173921,551],{"class":47},[33,173923,173924,173926,173929,173931,173933,173935,173937,173939],{"class":35,"line":76},[33,173925,122],{"class":72},[33,173927,173928],{"class":47},"(random.choice([",[33,173930,242],{"class":60},[33,173932,245],{"class":47},[33,173934,1122],{"class":60},[33,173936,245],{"class":47},[33,173938,1144],{"class":60},[33,173940,35369],{"class":47},[33,173942,173943,173945,173948,173950,173952,173954,173956,173958,173960,173962,173964,173966,173968,173970],{"class":35,"line":87},[33,173944,122],{"class":72},[33,173946,173947],{"class":47},"(random.sample([",[33,173949,720],{"class":72},[33,173951,245],{"class":47},[33,173953,725],{"class":72},[33,173955,245],{"class":47},[33,173957,730],{"class":72},[33,173959,245],{"class":47},[33,173961,753],{"class":72},[33,173963,245],{"class":47},[33,173965,758],{"class":72},[33,173967,1182],{"class":47},[33,173969,725],{"class":72},[33,173971,551],{"class":47},[631,173973,173975],{"id":173974},"_9122-time","9.12.2 time",[23,173977,173979],{"className":25,"code":173978,"language":27,"meta":28,"style":28},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[30,173980,173981,173987,173991,173998,174006],{"__ignoreMap":28},[33,173982,173983,173985],{"class":35,"line":36},[33,173984,32627],{"class":39},[33,173986,34058],{"class":47},[33,173988,173989],{"class":35,"line":51},[33,173990,100],{"emptyLinePlaceholder":99},[33,173992,173993,173995],{"class":35,"line":64},[33,173994,122],{"class":72},[33,173996,173997],{"class":47},"(time.time())\n",[33,173999,174000,174002,174004],{"class":35,"line":76},[33,174001,97279],{"class":47},[33,174003,720],{"class":72},[33,174005,226],{"class":47},[33,174007,174008,174010,174012,174015],{"class":35,"line":87},[33,174009,122],{"class":72},[33,174011,133],{"class":47},[33,174013,174014],{"class":60},"\"1秒后执行\"",[33,174016,226],{"class":47},[631,174018,174020],{"id":174019},"_9123-datetime","9.12.3 datetime",[23,174022,174024],{"className":25,"code":174023,"language":27,"meta":28,"style":28},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[30,174025,174026,174038,174042,174052,174059],{"__ignoreMap":28},[33,174027,174028,174030,174033,174035],{"class":35,"line":36},[33,174029,32970],{"class":39},[33,174031,174032],{"class":47}," datetime ",[33,174034,32627],{"class":39},[33,174036,174037],{"class":47}," datetime\n",[33,174039,174040],{"class":35,"line":51},[33,174041,100],{"emptyLinePlaceholder":99},[33,174043,174044,174047,174049],{"class":35,"line":64},[33,174045,174046],{"class":47},"now ",[33,174048,57],{"class":39},[33,174050,174051],{"class":47}," datetime.now()\n",[33,174053,174054,174056],{"class":35,"line":76},[33,174055,122],{"class":72},[33,174057,174058],{"class":47},"(now)\n",[33,174060,174061,174063,174066,174069,174071,174074],{"class":35,"line":87},[33,174062,122],{"class":72},[33,174064,174065],{"class":47},"(now.strftime(",[33,174067,174068],{"class":60},"\"%Y-%m-",[33,174070,158863],{"class":72},[33,174072,174073],{"class":60}," %H:%M:%S\"",[33,174075,551],{"class":47},[631,174077,174079],{"id":174078},"_9124-os","9.12.4 os",[23,174081,174083],{"className":25,"code":174082,"language":27,"meta":28,"style":28},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[30,174084,174085,174091,174095,174102],{"__ignoreMap":28},[33,174086,174087,174089],{"class":35,"line":36},[33,174088,32627],{"class":39},[33,174090,47528],{"class":47},[33,174092,174093],{"class":35,"line":51},[33,174094,100],{"emptyLinePlaceholder":99},[33,174096,174097,174099],{"class":35,"line":64},[33,174098,122],{"class":72},[33,174100,174101],{"class":47},"(os.getcwd())\n",[33,174103,174104,174106,174109,174112],{"class":35,"line":76},[33,174105,122],{"class":72},[33,174107,174108],{"class":47},"(os.listdir(",[33,174110,174111],{"class":60},"\".\"",[33,174113,551],{"class":47},[631,174115,174117],{"id":174116},"_9125-sys","9.12.5 sys",[23,174119,174121],{"className":25,"code":174120,"language":27,"meta":28,"style":28},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[30,174122,174123,174130,174134,174141],{"__ignoreMap":28},[33,174124,174125,174127],{"class":35,"line":36},[33,174126,32627],{"class":39},[33,174128,174129],{"class":47}," sys\n",[33,174131,174132],{"class":35,"line":51},[33,174133,100],{"emptyLinePlaceholder":99},[33,174135,174136,174138],{"class":35,"line":64},[33,174137,122],{"class":72},[33,174139,174140],{"class":47},"(sys.version)\n",[33,174142,174143,174145],{"class":35,"line":76},[33,174144,122],{"class":72},[33,174146,174147],{"class":47},"(sys.path)\n",[14,174149,174151,174152,174154,174155,397],{"id":174150},"_913-if-name-main","9.13 if ",[2575,174153,207],{}," == \"",[2575,174156,104263],{},[19,174158,174159,174160,174163],{},"模块被直接运行和被导入时，",[30,174161,174162],{},"__name__"," 的值不同。",[19,174165,174166,174167,26857],{},"创建 ",[30,174168,174169],{},"my_module.py",[23,174171,174173],{"className":25,"code":174172,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[30,174174,174175,174183,174193,174197,174201,174213],{"__ignoreMap":28},[33,174176,174177,174179,174181],{"class":35,"line":36},[33,174178,40],{"class":39},[33,174180,652],{"class":43},[33,174182,1226],{"class":47},[33,174184,174185,174187,174189,174191],{"class":35,"line":51},[33,174186,90],{"class":39},[33,174188,877],{"class":47},[33,174190,880],{"class":39},[33,174192,1052],{"class":47},[33,174194,174195],{"class":35,"line":64},[33,174196,100],{"emptyLinePlaceholder":99},[33,174198,174199],{"class":35,"line":76},[33,174200,100],{"emptyLinePlaceholder":99},[33,174202,174203,174205,174207,174209,174211],{"class":35,"line":87},[33,174204,3805],{"class":39},[33,174206,33451],{"class":72},[33,174208,1434],{"class":39},[33,174210,103767],{"class":60},[33,174212,605],{"class":47},[33,174214,174215,174217,174219,174221,174223,174225],{"class":35,"line":96},[33,174216,193],{"class":72},[33,174218,717],{"class":47},[33,174220,720],{"class":72},[33,174222,245],{"class":47},[33,174224,725],{"class":72},[33,174226,551],{"class":47},[19,174228,174229],{},"作用：",[328,174231,174232,174235],{},[331,174233,174234],{},"直接运行该文件时，执行测试代码。",[331,174236,174237],{},"被其他文件导入时，不执行测试代码。",[19,174239,174240],{},"这是写模块时很常用的习惯。",[14,174242,174244],{"id":174243},"_914-包","9.14 包",[19,174246,174247,174248,174251],{},"包是包含 ",[30,174249,174250],{},"__init__.py"," 的目录，用于组织多个模块。",[19,174253,174254],{},"目录结构：",[23,174256,174259],{"className":174257,"code":174258,"language":7436,"meta":28},[7434],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[30,174260,174258],{"__ignoreMap":28},[19,174262,174263],{},"导入：",[23,174265,174267],{"className":25,"code":174266,"language":27,"meta":28,"style":28},"from utils.file_utils import read_file\n",[30,174268,174269],{"__ignoreMap":28},[33,174270,174271,174273,174276,174278],{"class":35,"line":36},[33,174272,32970],{"class":39},[33,174274,174275],{"class":47}," utils.file_utils ",[33,174277,32627],{"class":39},[33,174279,174280],{"class":47}," read_file\n",[19,174282,174283,174285],{},[30,174284,174250],{}," 可以为空，也可以写包初始化逻辑。",[14,174287,174289],{"id":174288},"_915-第三方包","9.15 第三方包",[19,174291,174292,174293,174295],{},"第三方包通过 ",[30,174294,26069],{}," 安装。",[23,174297,174299],{"className":26060,"code":174298,"language":26062,"meta":28,"style":28},"pip install requests\n",[30,174300,174301],{"__ignoreMap":28},[33,174302,174303,174305,174307],{"class":35,"line":36},[33,174304,26069],{"class":43},[33,174306,26072],{"class":60},[33,174308,148296],{"class":60},[19,174310,174311],{},"使用：",[23,174313,174315],{"className":25,"code":174314,"language":27,"meta":28,"style":28},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[30,174316,174317,174323,174327,174342],{"__ignoreMap":28},[33,174318,174319,174321],{"class":35,"line":36},[33,174320,32627],{"class":39},[33,174322,148296],{"class":47},[33,174324,174325],{"class":35,"line":51},[33,174326,100],{"emptyLinePlaceholder":99},[33,174328,174329,174332,174334,174337,174340],{"class":35,"line":64},[33,174330,174331],{"class":47},"response ",[33,174333,57],{"class":39},[33,174335,174336],{"class":47}," requests.get(",[33,174338,174339],{"class":60},"\"https:\u002F\u002Fwww.example.com\"",[33,174341,226],{"class":47},[33,174343,174344,174346],{"class":35,"line":76},[33,174345,122],{"class":72},[33,174347,174348],{"class":47},"(response.status_code)\n",[19,174350,174351],{},"查看已安装包：",[23,174353,174355],{"className":26060,"code":174354,"language":26062,"meta":28,"style":28},"pip list\n",[30,174356,174357],{"__ignoreMap":28},[33,174358,174359,174361],{"class":35,"line":36},[33,174360,26069],{"class":43},[33,174362,121155],{"class":60},[19,174364,174365],{},"导出项目依赖：",[23,174367,174368],{"className":26060,"code":148491,"language":26062,"meta":28,"style":28},[30,174369,174370],{"__ignoreMap":28},[33,174371,174372,174374,174376,174378],{"class":35,"line":36},[33,174373,26069],{"class":43},[33,174375,148500],{"class":60},[33,174377,28460],{"class":39},[33,174379,148505],{"class":60},[19,174381,174382],{},"安装项目依赖：",[23,174384,174385],{"className":26060,"code":148511,"language":26062,"meta":28,"style":28},[30,174386,174387],{"__ignoreMap":28},[33,174388,174389,174391,174393,174395],{"class":35,"line":36},[33,174390,26069],{"class":43},[33,174392,26072],{"class":60},[33,174394,121839],{"class":72},[33,174396,148505],{"class":60},[14,174398,174400],{"id":174399},"_916-模块搜索路径","9.16 模块搜索路径",[19,174402,174403,174404,174407],{},"Python 导入模块时会在 ",[30,174405,174406],{},"sys.path"," 中查找。",[23,174409,174411],{"className":25,"code":174410,"language":27,"meta":28,"style":28},"import sys\n\nfor path in sys.path:\n    print(path)\n",[30,174412,174413,174419,174423,174435],{"__ignoreMap":28},[33,174414,174415,174417],{"class":35,"line":36},[33,174416,32627],{"class":39},[33,174418,174129],{"class":47},[33,174420,174421],{"class":35,"line":51},[33,174422,100],{"emptyLinePlaceholder":99},[33,174424,174425,174427,174430,174432],{"class":35,"line":64},[33,174426,5282],{"class":39},[33,174428,174429],{"class":47}," path ",[33,174431,681],{"class":39},[33,174433,174434],{"class":47}," sys.path:\n",[33,174436,174437,174439],{"class":35,"line":76},[33,174438,193],{"class":72},[33,174440,171163],{"class":47},[19,174442,174443],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174445,498],{},[23,174447,174450],{"className":174448,"code":174449,"language":7436,"meta":28},[7434],"random.py\njson.py\ntime.py\n",[30,174451,174449],{"__ignoreMap":28},[19,174453,174454],{},"这些文件名可能导致导入异常。",[14,174456,174458],{"id":174457},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174460,174254],{},[23,174462,174465],{"className":174463,"code":174464,"language":7436,"meta":28},[7434],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[30,174466,174464],{"__ignoreMap":28},[19,174468,174469,26857],{},[30,174470,174471],{},"utils\u002Ffile_utils.py",[23,174473,174475],{"className":25,"code":174474,"language":27,"meta":28,"style":28},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[30,174476,174477,174483,174493,174497,174501,174511,174521,174529,174535,174539,174566,174576,174580,174584,174594,174620],{"__ignoreMap":28},[33,174478,174479,174481],{"class":35,"line":36},[33,174480,32627],{"class":39},[33,174482,149288],{"class":47},[33,174484,174485,174487,174489,174491],{"class":35,"line":51},[33,174486,32970],{"class":39},[33,174488,110514],{"class":47},[33,174490,32627],{"class":39},[33,174492,110519],{"class":47},[33,174494,174495],{"class":35,"line":64},[33,174496,100],{"emptyLinePlaceholder":99},[33,174498,174499],{"class":35,"line":76},[33,174500,100],{"emptyLinePlaceholder":99},[33,174502,174503,174505,174508],{"class":35,"line":87},[33,174504,40],{"class":39},[33,174506,174507],{"class":43}," read_json",[33,174509,174510],{"class":47},"(path):\n",[33,174512,174513,174516,174518],{"class":35,"line":96},[33,174514,174515],{"class":47},"    path ",[33,174517,57],{"class":39},[33,174519,174520],{"class":47}," Path(path)\n",[33,174522,174523,174525,174527],{"class":35,"line":103},[33,174524,593],{"class":39},[33,174526,41154],{"class":39},[33,174528,171244],{"class":47},[33,174530,174531,174533],{"class":35,"line":108},[33,174532,1614],{"class":39},[33,174534,615],{"class":47},[33,174536,174537],{"class":35,"line":119},[33,174538,100],{"emptyLinePlaceholder":99},[33,174540,174541,174543,174545,174548,174550,174552,174554,174556,174558,174560,174562,174564],{"class":35,"line":128},[33,174542,36403],{"class":39},[33,174544,148988],{"class":72},[33,174546,174547],{"class":47},"(path, ",[33,174549,148998],{"class":60},[33,174551,245],{"class":47},[33,174553,149003],{"class":289},[33,174555,57],{"class":39},[33,174557,149008],{"class":60},[33,174559,15954],{"class":47},[33,174561,33613],{"class":39},[33,174563,150350],{"class":289},[33,174565,605],{"class":47},[33,174567,174568,174570,174572,174574],{"class":35,"line":1753},[33,174569,1614],{"class":39},[33,174571,150361],{"class":47},[33,174573,47577],{"class":289},[33,174575,226],{"class":47},[33,174577,174578],{"class":35,"line":1763},[33,174579,100],{"emptyLinePlaceholder":99},[33,174581,174582],{"class":35,"line":1775},[33,174583,100],{"emptyLinePlaceholder":99},[33,174585,174586,174588,174591],{"class":35,"line":1780},[33,174587,40],{"class":39},[33,174589,174590],{"class":43}," write_json",[33,174592,174593],{"class":47},"(path, data):\n",[33,174595,174596,174598,174600,174602,174604,174606,174608,174610,174612,174614,174616,174618],{"class":35,"line":1785},[33,174597,36403],{"class":39},[33,174599,148988],{"class":72},[33,174601,174547],{"class":47},[33,174603,154160],{"class":60},[33,174605,245],{"class":47},[33,174607,149003],{"class":289},[33,174609,57],{"class":39},[33,174611,149008],{"class":60},[33,174613,15954],{"class":47},[33,174615,33613],{"class":39},[33,174617,150350],{"class":289},[33,174619,605],{"class":47},[33,174621,174622,174625,174627,174629,174631,174633,174635,174637,174639,174641,174643],{"class":35,"line":1940},[33,174623,174624],{"class":47},"        json.dump(data, ",[33,174626,47577],{"class":289},[33,174628,245],{"class":47},[33,174630,149334],{"class":289},[33,174632,57],{"class":39},[33,174634,36212],{"class":72},[33,174636,245],{"class":47},[33,174638,154196],{"class":289},[33,174640,57],{"class":39},[33,174642,725],{"class":72},[33,174644,226],{"class":47},[19,174646,174647,26857],{},[30,174648,156782],{},[23,174650,174652],{"className":25,"code":174651,"language":27,"meta":28,"style":28},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[30,174653,174654,174665,174669,174682,174702],{"__ignoreMap":28},[33,174655,174656,174658,174660,174662],{"class":35,"line":36},[33,174657,32970],{"class":39},[33,174659,174275],{"class":47},[33,174661,32627],{"class":39},[33,174663,174664],{"class":47}," read_json, write_json\n",[33,174666,174667],{"class":35,"line":51},[33,174668,100],{"emptyLinePlaceholder":99},[33,174670,174671,174673,174675,174678,174680],{"class":35,"line":64},[33,174672,1082],{"class":47},[33,174674,57],{"class":39},[33,174676,174677],{"class":47}," read_json(",[33,174679,154015],{"class":60},[33,174681,226],{"class":47},[33,174683,174684,174686,174688,174690,174692,174694,174696,174698,174700],{"class":35,"line":76},[33,174685,172468],{"class":47},[33,174687,993],{"class":60},[33,174689,996],{"class":47},[33,174691,242],{"class":60},[33,174693,245],{"class":47},[33,174695,1103],{"class":60},[33,174697,996],{"class":47},[33,174699,1108],{"class":72},[33,174701,167303],{"class":47},[33,174703,174704,174707,174709],{"class":35,"line":87},[33,174705,174706],{"class":47},"write_json(",[33,174708,154015],{"class":60},[33,174710,174711],{"class":47},", students)\n",[14,174713,174715],{"id":174714},"_918-易错点","9.18 易错点",[328,174717,174718,174721,174726,174731,174734,174737],{},[331,174719,174720],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[331,174722,174723,174724,30622],{},"能指定异常类型就不要裸写 ",[30,174725,172828],{},[331,174727,174728,174730],{},[30,174729,173203],{}," 无论是否出错都会执行。",[331,174732,174733],{},"模块文件名不要和标准库重名。",[331,174735,174736],{},"导入自己写的模块时，要注意运行目录。",[331,174738,174739],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174741,174743],{"id":174742},"_919-本章练习","9.19 本章练习",[328,174745,174746,174749,174752,174758,174765],{},[331,174747,174748],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[331,174750,174751],{},"写函数读取文件，如果文件不存在则返回空字符串。",[331,174753,174166,174754,174757],{},[30,174755,174756],{},"math_utils.py","，实现加减乘除函数并导入使用。",[331,174759,174760,174761,174764],{},"创建一个 ",[30,174762,174763],{},"utils"," 包，把 JSON 读写函数放进去。",[331,174766,174767],{},"写一个程序，捕获除零异常和输入格式异常。",[2331,174769,174770],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":174772},[174773,174774,174775,174776,174777,174778,174779,174780,174781,174782,174783,174789,174796,174798,174799,174800,174801,174802,174803],{"id":172625,"depth":51,"text":172626},{"id":172753,"depth":51,"text":172754},{"id":172802,"depth":51,"text":172803},{"id":172951,"depth":51,"text":172952},{"id":173123,"depth":51,"text":173124},{"id":173192,"depth":51,"text":173193},{"id":173303,"depth":51,"text":173304},{"id":173429,"depth":51,"text":173430},{"id":173554,"depth":51,"text":173555},{"id":173609,"depth":51,"text":173610},{"id":173708,"depth":51,"text":173709,"children":174784},[174785,174786,174787,174788],{"id":173712,"depth":64,"text":173713},{"id":173746,"depth":64,"text":173747},{"id":173785,"depth":64,"text":173786},{"id":173864,"depth":64,"text":173865},{"id":173887,"depth":51,"text":173888,"children":174790},[174791,174792,174793,174794,174795],{"id":173891,"depth":64,"text":173892},{"id":173974,"depth":64,"text":173975},{"id":174019,"depth":64,"text":174020},{"id":174078,"depth":64,"text":174079},{"id":174116,"depth":64,"text":174117},{"id":174150,"depth":51,"text":174797},"9.13 if name == \"main\"",{"id":174243,"depth":51,"text":174244},{"id":174288,"depth":51,"text":174289},{"id":174399,"depth":51,"text":174400},{"id":174457,"depth":51,"text":174458},{"id":174714,"depth":51,"text":174715},{"id":174742,"depth":51,"text":174743},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172617,"description":2359},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174810,"title":174811,"body":174812,"description":174975,"extension":2360,"meta":174976,"navigation":99,"path":174977,"seo":174978,"stem":174979,"__hash__":174980},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174813,"toc":174970},[174814,174817,174820,174823,174834,174836,174910,174913,174916,174919,174922,174925,174928,174931,174934,174937,174940],[10,174815,174811],{"id":174816},"python教程",[19,174818,174819],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174821,174822],{},"建议学习环境：",[328,174824,174825,174828,174831],{},[331,174826,174827],{},"Python 版本：Python 3.10 及以上。",[331,174829,174830],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[331,174832,174833],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174835,119279],{"id":119279},[328,174837,174838,174844,174850,174856,174862,174868,174874,174880,174886,174892,174898,174904],{},[331,174839,174840],{},[2663,174841,174843],{"href":174842},".\u002Fch1-Python","Python环境与第一个程序",[331,174845,174846],{},[2663,174847,174849],{"href":174848},".\u002Fch2","基础语法、变量与字符串",[331,174851,174852],{},[2663,174853,174855],{"href":174854},".\u002Fch3","判断语句",[331,174857,174858],{},[2663,174859,174861],{"href":174860},".\u002Fch4","循环语句",[331,174863,174864],{},[2663,174865,174867],{"href":174866},".\u002Fch5","函数基础",[331,174869,174870],{},[2663,174871,174873],{"href":174872},".\u002Fch6","数据容器",[331,174875,174876],{},[2663,174877,174879],{"href":174878},".\u002Fch7","函数进阶",[331,174881,174882],{},[2663,174883,174885],{"href":174884},".\u002Fch8","文件操作",[331,174887,174888],{},[2663,174889,174891],{"href":174890},".\u002Fch9","异常、模块与包",[331,174893,174894],{},[2663,174895,174897],{"href":174896},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[331,174899,174900],{},[2663,174901,174903],{"href":174902},".\u002Fch11","面向对象基础",[331,174905,174906],{},[2663,174907,174909],{"href":174908},".\u002Fch12","综合案例与复习路线",[14,174911,174912],{"id":174912},"学习路线",[19,174914,174915],{},"第一阶段：能运行程序。",[19,174917,174918],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174920,174921],{},"第二阶段：能组织数据。",[19,174923,174924],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174926,174927],{},"第三阶段：能封装逻辑。",[19,174929,174930],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174932,174933],{},"第四阶段：能做小项目。",[19,174935,174936],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174938,174939],{"id":174939},"参考资料",[328,174941,174942,174949,174956,174963],{},[331,174943,174944,174945],{},"黑马程序员 Python 入门教程推荐：",[2663,174946,174947],{"href":174947,"rel":174948},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[26103],[331,174950,174951,174952],{},"Python 官方中文教程：",[2663,174953,174954],{"href":174954,"rel":174955},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[26103],[331,174957,174958,174959],{},"Python 标准库文档：",[2663,174960,174961],{"href":174961,"rel":174962},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[26103],[331,174964,174965,174966],{},"pyecharts 文档：",[2663,174967,174968],{"href":174968,"rel":174969},"https:\u002F\u002Fpyecharts.org\u002F",[26103],{"title":28,"searchDepth":51,"depth":51,"links":174971},[174972,174973,174974],{"id":119279,"depth":51,"text":119279},{"id":174912,"depth":51,"text":174912},{"id":174939,"depth":51,"text":174939},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25616},"\u002Fwiki\u002F2024-10-10-python",{"title":174811,"description":174975},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331479038]