[{"data":1,"prerenderedAt":174461},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch3-pan-duan-yu-ju":3,"wiki-doc-nav":1758},{"id":4,"title":5,"body":6,"description":1751,"extension":1752,"meta":1753,"navigation":126,"path":1754,"seo":1755,"stem":1756,"__hash__":1757},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":8,"toc":1732},"minimark",[9,13,18,22,47,50,89,93,158,161,179,182,208,211,215,285,288,304,308,311,435,438,445,494,500,504,507,625,628,632,637,640,693,697,700,752,756,759,798,802,805,854,857,892,896,902,905,956,959,1034,1038,1045,1157,1167,1171,1174,1185,1188,1358,1362,1364,1378,1380,1608,1612,1632,1650,1653,1699,1703,1728],[10,11,5],"h1",{"id":12},"_3-判断语句",[14,15,17],"h2",{"id":16},"_31-布尔值","3.1 布尔值",[19,20,21],"p",{},"判断语句依赖布尔值：",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-python shiki shiki-themes github-light github-dark","True\nFalse\n","python","",[30,31,32,41],"code",{"__ignoreMap":28},[33,34,37],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"sj4cs","True\n",[33,42,44],{"class":35,"line":43},2,[33,45,46],{"class":39},"False\n",[19,48,49],{},"比较表达式会产生布尔值：",[23,51,53],{"className":25,"code":52,"language":27,"meta":28,"style":28},"age = 18\nprint(age >= 18)  # True\n",[30,54,55,68],{"__ignoreMap":28},[33,56,57,61,65],{"class":35,"line":36},[33,58,60],{"class":59},"sVt8B","age ",[33,62,64],{"class":63},"szBVR","=",[33,66,67],{"class":39}," 18\n",[33,69,70,73,76,79,82,85],{"class":35,"line":43},[33,71,72],{"class":39},"print",[33,74,75],{"class":59},"(age ",[33,77,78],{"class":63},">=",[33,80,81],{"class":39}," 18",[33,83,84],{"class":59},")  ",[33,86,88],{"class":87},"sJ8bj","# True\n",[14,90,92],{"id":91},"_32-if基础语法","3.2 if基础语法",[23,94,96],{"className":25,"code":95,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[30,97,98,122,128,144],{"__ignoreMap":28},[33,99,100,102,104,107,110,113,115,119],{"class":35,"line":36},[33,101,60],{"class":59},[33,103,64],{"class":63},[33,105,106],{"class":39}," int",[33,108,109],{"class":59},"(",[33,111,112],{"class":39},"input",[33,114,109],{"class":59},[33,116,118],{"class":117},"sZZnC","\"请输入年龄:\"",[33,120,121],{"class":59},"))\n",[33,123,124],{"class":35,"line":43},[33,125,127],{"emptyLinePlaceholder":126},true,"\n",[33,129,131,134,137,139,141],{"class":35,"line":130},3,[33,132,133],{"class":63},"if",[33,135,136],{"class":59}," age ",[33,138,78],{"class":63},[33,140,81],{"class":39},[33,142,143],{"class":59},":\n",[33,145,147,150,152,155],{"class":35,"line":146},4,[33,148,149],{"class":39},"    print",[33,151,109],{"class":59},[33,153,154],{"class":117},"\"可以进入网吧\"",[33,156,157],{"class":59},")\n",[19,159,160],{},"注意：",[162,163,164,170,173,176],"ol",{},[165,166,167,169],"li",{},[30,168,133],{}," 后面是条件表达式。",[165,171,172],{},"条件后面必须写冒号。",[165,174,175],{},"条件成立时执行缩进代码块。",[165,177,178],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,180,181],{},"错误示例：",[23,183,185],{"className":25,"code":184,"language":27,"meta":28,"style":28},"if age >= 18\n    print(\"可以进入\")\n",[30,186,187,197],{"__ignoreMap":28},[33,188,189,191,193,195],{"class":35,"line":36},[33,190,133],{"class":63},[33,192,136],{"class":59},[33,194,78],{"class":63},[33,196,67],{"class":39},[33,198,199,201,203,206],{"class":35,"line":43},[33,200,149],{"class":39},[33,202,109],{"class":59},[33,204,205],{"class":117},"\"可以进入\"",[33,207,157],{"class":59},[19,209,210],{},"缺少冒号。",[14,212,214],{"id":213},"_33-if-else","3.3 if else",[23,216,218],{"className":25,"code":217,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[30,219,220,238,242,254,265,273],{"__ignoreMap":28},[33,221,222,224,226,228,230,232,234,236],{"class":35,"line":36},[33,223,60],{"class":59},[33,225,64],{"class":63},[33,227,106],{"class":39},[33,229,109],{"class":59},[33,231,112],{"class":39},[33,233,109],{"class":59},[33,235,118],{"class":117},[33,237,121],{"class":59},[33,239,240],{"class":35,"line":43},[33,241,127],{"emptyLinePlaceholder":126},[33,243,244,246,248,250,252],{"class":35,"line":130},[33,245,133],{"class":63},[33,247,136],{"class":59},[33,249,78],{"class":63},[33,251,81],{"class":39},[33,253,143],{"class":59},[33,255,256,258,260,263],{"class":35,"line":146},[33,257,149],{"class":39},[33,259,109],{"class":59},[33,261,262],{"class":117},"\"成年人\"",[33,264,157],{"class":59},[33,266,268,271],{"class":35,"line":267},5,[33,269,270],{"class":63},"else",[33,272,143],{"class":59},[33,274,276,278,280,283],{"class":35,"line":275},6,[33,277,149],{"class":39},[33,279,109],{"class":59},[33,281,282],{"class":117},"\"未成年人\"",[33,284,157],{"class":59},[19,286,287],{},"执行逻辑：",[162,289,290,296,301],{},[165,291,292,293,295],{},"条件成立，执行 ",[30,294,133],{}," 代码块。",[165,297,298,299,295],{},"条件不成立，执行 ",[30,300,270],{},[165,302,303],{},"两个代码块只会执行其中一个。",[14,305,307],{"id":306},"_34-if-elif-else","3.4 if elif else",[19,309,310],{},"多条件判断：",[23,312,314],{"className":25,"code":313,"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,315,316,336,340,354,365,379,390,404,416,423],{"__ignoreMap":28},[33,317,318,321,323,325,327,329,331,334],{"class":35,"line":36},[33,319,320],{"class":59},"score ",[33,322,64],{"class":63},[33,324,106],{"class":39},[33,326,109],{"class":59},[33,328,112],{"class":39},[33,330,109],{"class":59},[33,332,333],{"class":117},"\"请输入成绩:\"",[33,335,121],{"class":59},[33,337,338],{"class":35,"line":43},[33,339,127],{"emptyLinePlaceholder":126},[33,341,342,344,347,349,352],{"class":35,"line":130},[33,343,133],{"class":63},[33,345,346],{"class":59}," score ",[33,348,78],{"class":63},[33,350,351],{"class":39}," 90",[33,353,143],{"class":59},[33,355,356,358,360,363],{"class":35,"line":146},[33,357,149],{"class":39},[33,359,109],{"class":59},[33,361,362],{"class":117},"\"优秀\"",[33,364,157],{"class":59},[33,366,367,370,372,374,377],{"class":35,"line":267},[33,368,369],{"class":63},"elif",[33,371,346],{"class":59},[33,373,78],{"class":63},[33,375,376],{"class":39}," 80",[33,378,143],{"class":59},[33,380,381,383,385,388],{"class":35,"line":275},[33,382,149],{"class":39},[33,384,109],{"class":59},[33,386,387],{"class":117},"\"良好\"",[33,389,157],{"class":59},[33,391,393,395,397,399,402],{"class":35,"line":392},7,[33,394,369],{"class":63},[33,396,346],{"class":59},[33,398,78],{"class":63},[33,400,401],{"class":39}," 60",[33,403,143],{"class":59},[33,405,407,409,411,414],{"class":35,"line":406},8,[33,408,149],{"class":39},[33,410,109],{"class":59},[33,412,413],{"class":117},"\"及格\"",[33,415,157],{"class":59},[33,417,419,421],{"class":35,"line":418},9,[33,420,270],{"class":63},[33,422,143],{"class":59},[33,424,426,428,430,433],{"class":35,"line":425},10,[33,427,149],{"class":39},[33,429,109],{"class":59},[33,431,432],{"class":117},"\"不及格\"",[33,434,157],{"class":59},[19,436,437],{},"注意判断顺序很重要。",[19,439,440,441,444],{},"如果把 ",[30,442,443],{},"score >= 60"," 放在最前面：",[23,446,448],{"className":25,"code":447,"language":27,"meta":28,"style":28},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[30,449,450,462,472,484],{"__ignoreMap":28},[33,451,452,454,456,458,460],{"class":35,"line":36},[33,453,133],{"class":63},[33,455,346],{"class":59},[33,457,78],{"class":63},[33,459,401],{"class":39},[33,461,143],{"class":59},[33,463,464,466,468,470],{"class":35,"line":43},[33,465,149],{"class":39},[33,467,109],{"class":59},[33,469,413],{"class":117},[33,471,157],{"class":59},[33,473,474,476,478,480,482],{"class":35,"line":130},[33,475,369],{"class":63},[33,477,346],{"class":59},[33,479,78],{"class":63},[33,481,351],{"class":39},[33,483,143],{"class":59},[33,485,486,488,490,492],{"class":35,"line":146},[33,487,149],{"class":39},[33,489,109],{"class":59},[33,491,362],{"class":117},[33,493,157],{"class":59},[19,495,496,497,499],{},"成绩 95 会先满足 ",[30,498,443],{},"，后面的优秀分支就不会执行。",[14,501,503],{"id":502},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,505,506],{},"嵌套判断就是在一个判断内部再写判断。",[23,508,510],{"className":25,"code":509,"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,511,512,530,547,551,563,579,590,597,608,614],{"__ignoreMap":28},[33,513,514,516,518,520,522,524,526,528],{"class":35,"line":36},[33,515,60],{"class":59},[33,517,64],{"class":63},[33,519,106],{"class":39},[33,521,109],{"class":59},[33,523,112],{"class":39},[33,525,109],{"class":59},[33,527,118],{"class":117},[33,529,121],{"class":59},[33,531,532,535,537,540,542,545],{"class":35,"line":43},[33,533,534],{"class":59},"has_ticket ",[33,536,64],{"class":63},[33,538,539],{"class":39}," input",[33,541,109],{"class":59},[33,543,544],{"class":117},"\"是否有票(y\u002Fn):\"",[33,546,157],{"class":59},[33,548,549],{"class":35,"line":130},[33,550,127],{"emptyLinePlaceholder":126},[33,552,553,555,557,559,561],{"class":35,"line":146},[33,554,133],{"class":63},[33,556,136],{"class":59},[33,558,78],{"class":63},[33,560,81],{"class":39},[33,562,143],{"class":59},[33,564,565,568,571,574,577],{"class":35,"line":267},[33,566,567],{"class":63},"    if",[33,569,570],{"class":59}," has_ticket ",[33,572,573],{"class":63},"==",[33,575,576],{"class":117}," \"y\"",[33,578,143],{"class":59},[33,580,581,584,586,588],{"class":35,"line":275},[33,582,583],{"class":39},"        print",[33,585,109],{"class":59},[33,587,205],{"class":117},[33,589,157],{"class":59},[33,591,592,595],{"class":35,"line":392},[33,593,594],{"class":63},"    else",[33,596,143],{"class":59},[33,598,599,601,603,606],{"class":35,"line":406},[33,600,583],{"class":39},[33,602,109],{"class":59},[33,604,605],{"class":117},"\"请先买票\"",[33,607,157],{"class":59},[33,609,610,612],{"class":35,"line":418},[33,611,270],{"class":63},[33,613,143],{"class":59},[33,615,616,618,620,623],{"class":35,"line":425},[33,617,149],{"class":39},[33,619,109],{"class":59},[33,621,622],{"class":117},"\"未成年人禁止进入\"",[33,624,157],{"class":59},[19,626,627],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,629,631],{"id":630},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[633,634,636],"h3",{"id":635},"_361-and","3.6.1 and",[19,638,639],{},"两个条件都成立才成立。",[23,641,643],{"className":25,"code":642,"language":27,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[30,644,645,654,663,667,683],{"__ignoreMap":28},[33,646,647,649,651],{"class":35,"line":36},[33,648,60],{"class":59},[33,650,64],{"class":63},[33,652,653],{"class":39}," 20\n",[33,655,656,658,660],{"class":35,"line":43},[33,657,534],{"class":59},[33,659,64],{"class":63},[33,661,662],{"class":39}," True\n",[33,664,665],{"class":35,"line":130},[33,666,127],{"emptyLinePlaceholder":126},[33,668,669,671,673,675,677,680],{"class":35,"line":146},[33,670,133],{"class":63},[33,672,136],{"class":59},[33,674,78],{"class":63},[33,676,81],{"class":39},[33,678,679],{"class":63}," and",[33,681,682],{"class":59}," has_ticket:\n",[33,684,685,687,689,691],{"class":35,"line":267},[33,686,149],{"class":39},[33,688,109],{"class":59},[33,690,205],{"class":117},[33,692,157],{"class":59},[633,694,696],{"id":695},"_362-or","3.6.2 or",[19,698,699],{},"只要一个条件成立就成立。",[23,701,703],{"className":25,"code":702,"language":27,"meta":28,"style":28},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[30,704,705,715,724,728,741],{"__ignoreMap":28},[33,706,707,710,712],{"class":35,"line":36},[33,708,709],{"class":59},"is_vip ",[33,711,64],{"class":63},[33,713,714],{"class":39}," False\n",[33,716,717,720,722],{"class":35,"line":43},[33,718,719],{"class":59},"coupon ",[33,721,64],{"class":63},[33,723,662],{"class":39},[33,725,726],{"class":35,"line":130},[33,727,127],{"emptyLinePlaceholder":126},[33,729,730,732,735,738],{"class":35,"line":146},[33,731,133],{"class":63},[33,733,734],{"class":59}," is_vip ",[33,736,737],{"class":63},"or",[33,739,740],{"class":59}," coupon:\n",[33,742,743,745,747,750],{"class":35,"line":267},[33,744,149],{"class":39},[33,746,109],{"class":59},[33,748,749],{"class":117},"\"可以享受优惠\"",[33,751,157],{"class":59},[633,753,755],{"id":754},"_363-not","3.6.3 not",[19,757,758],{},"取反。",[23,760,762],{"className":25,"code":761,"language":27,"meta":28,"style":28},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[30,763,764,773,777,787],{"__ignoreMap":28},[33,765,766,769,771],{"class":35,"line":36},[33,767,768],{"class":59},"is_closed ",[33,770,64],{"class":63},[33,772,714],{"class":39},[33,774,775],{"class":35,"line":43},[33,776,127],{"emptyLinePlaceholder":126},[33,778,779,781,784],{"class":35,"line":130},[33,780,133],{"class":63},[33,782,783],{"class":63}," not",[33,785,786],{"class":59}," is_closed:\n",[33,788,789,791,793,796],{"class":35,"line":146},[33,790,149],{"class":39},[33,792,109],{"class":59},[33,794,795],{"class":117},"\"店铺营业中\"",[33,797,157],{"class":59},[14,799,801],{"id":800},"_37-链式比较","3.7 链式比较",[19,803,804],{},"Python 支持链式比较：",[23,806,808],{"className":25,"code":807,"language":27,"meta":28,"style":28},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[30,809,810,819,823,843],{"__ignoreMap":28},[33,811,812,814,816],{"class":35,"line":36},[33,813,320],{"class":59},[33,815,64],{"class":63},[33,817,818],{"class":39}," 85\n",[33,820,821],{"class":35,"line":43},[33,822,127],{"emptyLinePlaceholder":126},[33,824,825,827,830,833,835,838,841],{"class":35,"line":130},[33,826,133],{"class":63},[33,828,829],{"class":39}," 0",[33,831,832],{"class":63}," \u003C=",[33,834,346],{"class":59},[33,836,837],{"class":63},"\u003C=",[33,839,840],{"class":39}," 100",[33,842,143],{"class":59},[33,844,845,847,849,852],{"class":35,"line":146},[33,846,149],{"class":39},[33,848,109],{"class":59},[33,850,851],{"class":117},"\"成绩合法\"",[33,853,157],{"class":59},[19,855,856],{},"等价于：",[23,858,860],{"className":25,"code":859,"language":27,"meta":28,"style":28},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[30,861,862,882],{"__ignoreMap":28},[33,863,864,866,868,870,872,874,876,878,880],{"class":35,"line":36},[33,865,133],{"class":63},[33,867,346],{"class":59},[33,869,78],{"class":63},[33,871,829],{"class":39},[33,873,679],{"class":63},[33,875,346],{"class":59},[33,877,837],{"class":63},[33,879,840],{"class":39},[33,881,143],{"class":59},[33,883,884,886,888,890],{"class":35,"line":43},[33,885,149],{"class":39},[33,887,109],{"class":59},[33,889,851],{"class":117},[33,891,157],{"class":59},[14,893,895],{"id":894},"_38-真值和假值","3.8 真值和假值",[19,897,898,899,901],{},"在 ",[30,900,133],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,903,904],{},"假值：",[23,906,908],{"className":25,"code":907,"language":27,"meta":28,"style":28},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[30,909,910,914,919,924,929,934,939,944,949],{"__ignoreMap":28},[33,911,912],{"class":35,"line":36},[33,913,46],{"class":39},[33,915,916],{"class":35,"line":43},[33,917,918],{"class":39},"None\n",[33,920,921],{"class":35,"line":130},[33,922,923],{"class":39},"0\n",[33,925,926],{"class":35,"line":146},[33,927,928],{"class":39},"0.0\n",[33,930,931],{"class":35,"line":267},[33,932,933],{"class":117},"\"\"\n",[33,935,936],{"class":35,"line":275},[33,937,938],{"class":59},"[]\n",[33,940,941],{"class":35,"line":392},[33,942,943],{"class":59},"()\n",[33,945,946],{"class":35,"line":406},[33,947,948],{"class":59},"{}\n",[33,950,951,954],{"class":35,"line":418},[33,952,953],{"class":39},"set",[33,955,943],{"class":59},[19,957,958],{},"示例：",[23,960,962],{"className":25,"code":961,"language":27,"meta":28,"style":28},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[30,963,964,980,984,991,1017,1023],{"__ignoreMap":28},[33,965,966,969,971,973,975,978],{"class":35,"line":36},[33,967,968],{"class":59},"name ",[33,970,64],{"class":63},[33,972,539],{"class":39},[33,974,109],{"class":59},[33,976,977],{"class":117},"\"请输入姓名:\"",[33,979,157],{"class":59},[33,981,982],{"class":35,"line":43},[33,983,127],{"emptyLinePlaceholder":126},[33,985,986,988],{"class":35,"line":130},[33,987,133],{"class":63},[33,989,990],{"class":59}," name:\n",[33,992,993,995,997,1000,1003,1006,1009,1012,1015],{"class":35,"line":146},[33,994,149],{"class":39},[33,996,109],{"class":59},[33,998,999],{"class":63},"f",[33,1001,1002],{"class":117},"\"你好，",[33,1004,1005],{"class":39},"{",[33,1007,1008],{"class":59},"name",[33,1010,1011],{"class":39},"}",[33,1013,1014],{"class":117},"\"",[33,1016,157],{"class":59},[33,1018,1019,1021],{"class":35,"line":267},[33,1020,270],{"class":63},[33,1022,143],{"class":59},[33,1024,1025,1027,1029,1032],{"class":35,"line":275},[33,1026,149],{"class":39},[33,1028,109],{"class":59},[33,1030,1031],{"class":117},"\"姓名不能为空\"",[33,1033,157],{"class":59},[14,1035,1037],{"id":1036},"_39-match语句","3.9 match语句",[19,1039,1040,1041,1044],{},"Python 3.10 开始支持 ",[30,1042,1043],{},"match","。它适合处理固定选项。",[23,1046,1048],{"className":25,"code":1047,"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,1049,1050,1066,1070,1077,1087,1098,1107,1118,1127,1138,1145],{"__ignoreMap":28},[33,1051,1052,1055,1057,1059,1061,1064],{"class":35,"line":36},[33,1053,1054],{"class":59},"command ",[33,1056,64],{"class":63},[33,1058,539],{"class":39},[33,1060,109],{"class":59},[33,1062,1063],{"class":117},"\"请输入命令:\"",[33,1065,157],{"class":59},[33,1067,1068],{"class":35,"line":43},[33,1069,127],{"emptyLinePlaceholder":126},[33,1071,1072,1074],{"class":35,"line":130},[33,1073,1043],{"class":63},[33,1075,1076],{"class":59}," command:\n",[33,1078,1079,1082,1085],{"class":35,"line":146},[33,1080,1081],{"class":63},"    case",[33,1083,1084],{"class":117}," \"start\"",[33,1086,143],{"class":59},[33,1088,1089,1091,1093,1096],{"class":35,"line":267},[33,1090,583],{"class":39},[33,1092,109],{"class":59},[33,1094,1095],{"class":117},"\"启动\"",[33,1097,157],{"class":59},[33,1099,1100,1102,1105],{"class":35,"line":275},[33,1101,1081],{"class":63},[33,1103,1104],{"class":117}," \"stop\"",[33,1106,143],{"class":59},[33,1108,1109,1111,1113,1116],{"class":35,"line":392},[33,1110,583],{"class":39},[33,1112,109],{"class":59},[33,1114,1115],{"class":117},"\"停止\"",[33,1117,157],{"class":59},[33,1119,1120,1122,1125],{"class":35,"line":406},[33,1121,1081],{"class":63},[33,1123,1124],{"class":117}," \"restart\"",[33,1126,143],{"class":59},[33,1128,1129,1131,1133,1136],{"class":35,"line":418},[33,1130,583],{"class":39},[33,1132,109],{"class":59},[33,1134,1135],{"class":117},"\"重启\"",[33,1137,157],{"class":59},[33,1139,1140,1142],{"class":35,"line":425},[33,1141,1081],{"class":63},[33,1143,1144],{"class":59}," _:\n",[33,1146,1148,1150,1152,1155],{"class":35,"line":1147},11,[33,1149,583],{"class":39},[33,1151,109],{"class":59},[33,1153,1154],{"class":117},"\"未知命令\"",[33,1156,157],{"class":59},[19,1158,1159,1160,1163,1164,1166],{},"入门阶段掌握 ",[30,1161,1162],{},"if elif else"," 更重要，",[30,1165,1043],{}," 可以作为补充。",[14,1168,1170],{"id":1169},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,1172,1173],{},"需求：",[162,1175,1176,1179,1182],{},[165,1177,1178],{},"输入成绩。",[165,1180,1181],{},"判断成绩是否合法。",[165,1183,1184],{},"输出等级。",[19,1186,1187],{},"代码：",[23,1189,1191],{"className":25,"code":1190,"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,1192,1193,1212,1216,1234,1245,1257,1268,1280,1291,1304,1315,1327,1339,1346],{"__ignoreMap":28},[33,1194,1195,1197,1199,1202,1204,1206,1208,1210],{"class":35,"line":36},[33,1196,320],{"class":59},[33,1198,64],{"class":63},[33,1200,1201],{"class":39}," float",[33,1203,109],{"class":59},[33,1205,112],{"class":39},[33,1207,109],{"class":59},[33,1209,333],{"class":117},[33,1211,121],{"class":59},[33,1213,1214],{"class":35,"line":43},[33,1215,127],{"emptyLinePlaceholder":126},[33,1217,1218,1220,1222,1224,1226,1228,1230,1232],{"class":35,"line":130},[33,1219,133],{"class":63},[33,1221,783],{"class":63},[33,1223,829],{"class":39},[33,1225,832],{"class":63},[33,1227,346],{"class":59},[33,1229,837],{"class":63},[33,1231,840],{"class":39},[33,1233,143],{"class":59},[33,1235,1236,1238,1240,1243],{"class":35,"line":146},[33,1237,149],{"class":39},[33,1239,109],{"class":59},[33,1241,1242],{"class":117},"\"成绩不合法\"",[33,1244,157],{"class":59},[33,1246,1247,1249,1251,1253,1255],{"class":35,"line":267},[33,1248,369],{"class":63},[33,1250,346],{"class":59},[33,1252,78],{"class":63},[33,1254,351],{"class":39},[33,1256,143],{"class":59},[33,1258,1259,1261,1263,1266],{"class":35,"line":275},[33,1260,149],{"class":39},[33,1262,109],{"class":59},[33,1264,1265],{"class":117},"\"等级:A\"",[33,1267,157],{"class":59},[33,1269,1270,1272,1274,1276,1278],{"class":35,"line":392},[33,1271,369],{"class":63},[33,1273,346],{"class":59},[33,1275,78],{"class":63},[33,1277,376],{"class":39},[33,1279,143],{"class":59},[33,1281,1282,1284,1286,1289],{"class":35,"line":406},[33,1283,149],{"class":39},[33,1285,109],{"class":59},[33,1287,1288],{"class":117},"\"等级:B\"",[33,1290,157],{"class":59},[33,1292,1293,1295,1297,1299,1302],{"class":35,"line":418},[33,1294,369],{"class":63},[33,1296,346],{"class":59},[33,1298,78],{"class":63},[33,1300,1301],{"class":39}," 70",[33,1303,143],{"class":59},[33,1305,1306,1308,1310,1313],{"class":35,"line":425},[33,1307,149],{"class":39},[33,1309,109],{"class":59},[33,1311,1312],{"class":117},"\"等级:C\"",[33,1314,157],{"class":59},[33,1316,1317,1319,1321,1323,1325],{"class":35,"line":1147},[33,1318,369],{"class":63},[33,1320,346],{"class":59},[33,1322,78],{"class":63},[33,1324,401],{"class":39},[33,1326,143],{"class":59},[33,1328,1330,1332,1334,1337],{"class":35,"line":1329},12,[33,1331,149],{"class":39},[33,1333,109],{"class":59},[33,1335,1336],{"class":117},"\"等级:D\"",[33,1338,157],{"class":59},[33,1340,1342,1344],{"class":35,"line":1341},13,[33,1343,270],{"class":63},[33,1345,143],{"class":59},[33,1347,1349,1351,1353,1356],{"class":35,"line":1348},14,[33,1350,149],{"class":39},[33,1352,109],{"class":59},[33,1354,1355],{"class":117},"\"等级:E\"",[33,1357,157],{"class":59},[14,1359,1361],{"id":1360},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,1363,1173],{},[162,1365,1366,1369,1372,1375],{},[165,1367,1368],{},"输入消费金额。",[165,1370,1371],{},"输入会员等级，普通、银卡、金卡。",[165,1373,1374],{},"普通不打折，银卡 9 折，金卡 8 折。",[165,1376,1377],{},"满 500 再减 50。",[19,1379,1187],{},[23,1381,1383],{"className":25,"code":1382,"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,1384,1385,1405,1421,1425,1435,1439,1453,1463,1476,1485,1498,1506,1512,1523,1527,1544,1549,1564,1576,1581],{"__ignoreMap":28},[33,1386,1387,1390,1392,1394,1396,1398,1400,1403],{"class":35,"line":36},[33,1388,1389],{"class":59},"amount ",[33,1391,64],{"class":63},[33,1393,1201],{"class":39},[33,1395,109],{"class":59},[33,1397,112],{"class":39},[33,1399,109],{"class":59},[33,1401,1402],{"class":117},"\"请输入消费金额:\"",[33,1404,121],{"class":59},[33,1406,1407,1410,1412,1414,1416,1419],{"class":35,"line":43},[33,1408,1409],{"class":59},"level ",[33,1411,64],{"class":63},[33,1413,539],{"class":39},[33,1415,109],{"class":59},[33,1417,1418],{"class":117},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[33,1420,157],{"class":59},[33,1422,1423],{"class":35,"line":130},[33,1424,127],{"emptyLinePlaceholder":126},[33,1426,1427,1430,1432],{"class":35,"line":146},[33,1428,1429],{"class":59},"discount ",[33,1431,64],{"class":63},[33,1433,1434],{"class":39}," 1\n",[33,1436,1437],{"class":35,"line":267},[33,1438,127],{"emptyLinePlaceholder":126},[33,1440,1441,1443,1446,1448,1451],{"class":35,"line":275},[33,1442,133],{"class":63},[33,1444,1445],{"class":59}," level ",[33,1447,573],{"class":63},[33,1449,1450],{"class":117}," \"银卡\"",[33,1452,143],{"class":59},[33,1454,1455,1458,1460],{"class":35,"line":392},[33,1456,1457],{"class":59},"    discount ",[33,1459,64],{"class":63},[33,1461,1462],{"class":39}," 0.9\n",[33,1464,1465,1467,1469,1471,1474],{"class":35,"line":406},[33,1466,369],{"class":63},[33,1468,1445],{"class":59},[33,1470,573],{"class":63},[33,1472,1473],{"class":117}," \"金卡\"",[33,1475,143],{"class":59},[33,1477,1478,1480,1482],{"class":35,"line":418},[33,1479,1457],{"class":59},[33,1481,64],{"class":63},[33,1483,1484],{"class":39}," 0.8\n",[33,1486,1487,1489,1491,1493,1496],{"class":35,"line":425},[33,1488,369],{"class":63},[33,1490,1445],{"class":59},[33,1492,573],{"class":63},[33,1494,1495],{"class":117}," \"普通\"",[33,1497,143],{"class":59},[33,1499,1500,1502,1504],{"class":35,"line":1147},[33,1501,1457],{"class":59},[33,1503,64],{"class":63},[33,1505,1434],{"class":39},[33,1507,1508,1510],{"class":35,"line":1329},[33,1509,270],{"class":63},[33,1511,143],{"class":59},[33,1513,1514,1516,1518,1521],{"class":35,"line":1341},[33,1515,149],{"class":39},[33,1517,109],{"class":59},[33,1519,1520],{"class":117},"\"会员等级输入错误，按普通会员计算\"",[33,1522,157],{"class":59},[33,1524,1525],{"class":35,"line":1348},[33,1526,127],{"emptyLinePlaceholder":126},[33,1528,1530,1533,1535,1538,1541],{"class":35,"line":1529},15,[33,1531,1532],{"class":59},"pay ",[33,1534,64],{"class":63},[33,1536,1537],{"class":59}," amount ",[33,1539,1540],{"class":63},"*",[33,1542,1543],{"class":59}," discount\n",[33,1545,1547],{"class":35,"line":1546},16,[33,1548,127],{"emptyLinePlaceholder":126},[33,1550,1552,1554,1557,1559,1562],{"class":35,"line":1551},17,[33,1553,133],{"class":63},[33,1555,1556],{"class":59}," pay ",[33,1558,78],{"class":63},[33,1560,1561],{"class":39}," 500",[33,1563,143],{"class":59},[33,1565,1567,1570,1573],{"class":35,"line":1566},18,[33,1568,1569],{"class":59},"    pay ",[33,1571,1572],{"class":63},"-=",[33,1574,1575],{"class":39}," 50\n",[33,1577,1579],{"class":35,"line":1578},19,[33,1580,127],{"emptyLinePlaceholder":126},[33,1582,1584,1586,1588,1590,1593,1595,1598,1601,1603,1606],{"class":35,"line":1583},20,[33,1585,72],{"class":39},[33,1587,109],{"class":59},[33,1589,999],{"class":63},[33,1591,1592],{"class":117},"\"应付金额:",[33,1594,1005],{"class":39},[33,1596,1597],{"class":59},"pay",[33,1599,1600],{"class":63},":.2f",[33,1602,1011],{"class":39},[33,1604,1605],{"class":117},"元\"",[33,1607,157],{"class":59},[14,1609,1611],{"id":1610},"_312-易错点","3.12 易错点",[162,1613,1614,1617,1620,1623,1629],{},[165,1615,1616],{},"冒号不能漏。",[165,1618,1619],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[165,1621,1622],{},"多分支判断要注意顺序。",[165,1624,1625,1626,1628],{},"判断相等用 ",[30,1627,573],{},"。",[165,1630,1631],{},"字符串比较区分大小写：",[23,1633,1635],{"className":25,"code":1634,"language":27,"meta":28,"style":28},"\"Y\" == \"y\"  # False\n",[30,1636,1637],{"__ignoreMap":28},[33,1638,1639,1642,1645,1647],{"class":35,"line":36},[33,1640,1641],{"class":117},"\"Y\"",[33,1643,1644],{"class":63}," ==",[33,1646,576],{"class":117},[33,1648,1649],{"class":87},"  # False\n",[19,1651,1652],{},"可转换后再判断：",[23,1654,1656],{"className":25,"code":1655,"language":27,"meta":28,"style":28},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[30,1657,1658,1675,1688],{"__ignoreMap":28},[33,1659,1660,1663,1665,1667,1669,1672],{"class":35,"line":36},[33,1661,1662],{"class":59},"answer ",[33,1664,64],{"class":63},[33,1666,539],{"class":39},[33,1668,109],{"class":59},[33,1670,1671],{"class":117},"\"是否继续(y\u002Fn):\"",[33,1673,1674],{"class":59},").lower()\n",[33,1676,1677,1679,1682,1684,1686],{"class":35,"line":43},[33,1678,133],{"class":63},[33,1680,1681],{"class":59}," answer ",[33,1683,573],{"class":63},[33,1685,576],{"class":117},[33,1687,143],{"class":59},[33,1689,1690,1692,1694,1697],{"class":35,"line":130},[33,1691,149],{"class":39},[33,1693,109],{"class":59},[33,1695,1696],{"class":117},"\"继续\"",[33,1698,157],{"class":59},[14,1700,1702],{"id":1701},"_313-本章练习","3.13 本章练习",[162,1704,1705,1708,1711,1714,1725],{},[165,1706,1707],{},"输入年龄，判断是否成年。",[165,1709,1710],{},"输入年份，判断是否为闰年。",[165,1712,1713],{},"输入三个数字，输出最大值。",[165,1715,1716,1717,1720,1721,1724],{},"写登录判断：用户名是 ",[30,1718,1719],{},"admin"," 且密码是 ",[30,1722,1723],{},"123456"," 才登录成功。",[165,1726,1727],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1729,1730,1731],"style",{},"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":43,"depth":43,"links":1733},[1734,1735,1736,1737,1738,1739,1744,1745,1746,1747,1748,1749,1750],{"id":16,"depth":43,"text":17},{"id":91,"depth":43,"text":92},{"id":213,"depth":43,"text":214},{"id":306,"depth":43,"text":307},{"id":502,"depth":43,"text":503},{"id":630,"depth":43,"text":631,"children":1740},[1741,1742,1743],{"id":635,"depth":130,"text":636},{"id":695,"depth":130,"text":696},{"id":754,"depth":130,"text":755},{"id":800,"depth":43,"text":801},{"id":894,"depth":43,"text":895},{"id":1036,"depth":43,"text":1037},{"id":1169,"depth":43,"text":1170},{"id":1360,"depth":43,"text":1361},{"id":1610,"depth":43,"text":1611},{"id":1701,"depth":43,"text":1702},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":5,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",[1759,6823,7930,9350,12337,13688,15177,16266,25026,25038,25637,25663,25787,26028,26093,26111,26124,26171,26295,26464,26663,26843,27048,27184,27279,27316,27329,27639,28380,29088,29109,30128,31759,31910,31923,31935,32232,52038,52053,52070,52103,54975,78319,94462,94483,94596,94717,95487,96150,96511,96549,96655,96755,96798,96824,96885,98539,98640,98665,99156,99656,100736,101019,101761,102263,102275,104290,105954,107457,109155,111072,112990,115012,118480,118912,119375,120124,123067,123415,123437,123793,127099,127111,127513,127536,127683,127850,128055,128356,128913,129570,131501,133099,133748,135242,136673,137908,139602,141354,143764,143880,144815,145026,145911,147146,147374,147387,148539,150951,153318,156634,159100,160546,162323,164336,167388,169568,172095,174289],{"id":1760,"title":1761,"body":1762,"description":28,"extension":1752,"meta":6818,"navigation":126,"path":6819,"seo":6820,"stem":6821,"__hash__":6822},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1763,"toc":6790},[1764,1767,1771,1774,1778,1789,1793,1797,1800,1803,1806,1809,1812,1838,1842,1845,1848,1851,1854,1903,1907,1925,1927,1941,1944,1952,1955,2814,2821,2838,2842,2928,2932,2938,3024,3028,3066,3070,3134,3138,3142,3149,3160,3164,3169,3173,3178,3182,3187,3191,3195,3200,3456,3461,3599,3604,3860,3863,3871,3875,3880,3983,3986,4290,4299,4400,4403,4406,4409,4412,4671,4676,4814,4817,4996,4999,5127,5130,5282,5286,5291,5294,5305,5313,5316,5422,5426,5430,5435,5485,5490,5495,5519,5524,5577,5580,5585,5761,5766,6051,6056,6453,6457,6462,6519,6524,6532,6535,6675,6678,6787],[10,1765,1761],{"id":1766},"_1基础入门",[14,1768,1770],{"id":1769},"_11注释","1.1注释",[19,1772,1773],{},"\u002F\u002F或者\u002F* *\u002F",[14,1775,1777],{"id":1776},"_12命名","1.2命名",[162,1779,1780,1783,1786],{},[165,1781,1782],{},"字母数字下划线",[165,1784,1785],{},"开头必须是字母或_",[165,1787,1788],{},"不能使用关键词",[14,1790,1792],{"id":1791},"_13数据类型","1.3数据类型",[633,1794,1796],{"id":1795},"_131整形","1.3.1整形",[19,1798,1799],{},"short 短整形 2",[19,1801,1802],{},"int 整形 4",[19,1804,1805],{},"long 长整形 win4 linux32位4 linux64位8",[19,1807,1808],{},"long long 长长整形 8",[19,1810,1811],{},"利用sizeof可以求数据类型占用的内存空间大小",[23,1813,1817],{"className":1814,"code":1815,"language":1816,"meta":28,"style":28},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[30,1818,1819,1831],{"__ignoreMap":28},[33,1820,1821,1824,1826,1829],{"class":35,"line":36},[33,1822,1823],{"class":63},"sizeof",[33,1825,109],{"class":59},[33,1827,1828],{"class":63},"int",[33,1830,157],{"class":59},[33,1832,1833,1835],{"class":35,"line":43},[33,1834,1823],{"class":63},[33,1836,1837],{"class":59},"(num)\n",[633,1839,1841],{"id":1840},"_132浮点型","1.3.2浮点型",[19,1843,1844],{},"float 单精度 4节 7位有效数字",[19,1846,1847],{},"double 双精度 8节 15-16有效数字",[19,1849,1850],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1852,1853],{},"注意点：",[23,1855,1857],{"className":1814,"code":1856,"language":1816,"meta":28,"style":28},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[30,1858,1859,1880],{"__ignoreMap":28},[33,1860,1861,1864,1867,1869,1872,1874,1877],{"class":35,"line":36},[33,1862,1863],{"class":63},"float",[33,1865,1866],{"class":59}," f1",[33,1868,64],{"class":63},[33,1870,1871],{"class":39},"3.14",[33,1873,999],{"class":63},[33,1875,1876],{"class":59},";",[33,1878,1879],{"class":87}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[33,1881,1882,1884,1887,1889,1892,1895,1898,1900],{"class":35,"line":43},[33,1883,1863],{"class":63},[33,1885,1886],{"class":59}," f2",[33,1888,64],{"class":63},[33,1890,1891],{"class":39},"3",[33,1893,1894],{"class":63},"e",[33,1896,1897],{"class":39},"2",[33,1899,1876],{"class":59},[33,1901,1902],{"class":87}," \u002F\u002F科学记数法\n",[633,1904,1906],{"id":1905},"_133字符型","1.3.3字符型",[23,1908,1910],{"className":1814,"code":1909,"language":1816,"meta":28,"style":28},"char ch='a'\n",[30,1911,1912],{"__ignoreMap":28},[33,1913,1914,1917,1920,1922],{"class":35,"line":36},[33,1915,1916],{"class":63},"char",[33,1918,1919],{"class":59}," ch",[33,1921,64],{"class":63},[33,1923,1924],{"class":117},"'a'\n",[19,1926,1853],{},[162,1928,1929,1932,1935,1938],{},[165,1930,1931],{},"在显示字符型变量时，只能单引号，双引号x",[165,1933,1934],{},"单引号内只能一个字符，不能字符串",[165,1936,1937],{},"c和c++字符型变量只占用一个字符",[165,1939,1940],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1942,1943],{},"ASCII码大致由以下两部分组成：",[162,1945,1946,1949],{},[165,1947,1948],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[165,1950,1951],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1953,1954],{},"ASCII码表格：",[1956,1957,1958,2002],"table",{},[1959,1960,1961],"thead",{},[1962,1963,1964,1972,1977,1981,1986,1990,1994,1998],"tr",{},[1965,1966,1967,1971],"th",{},[1968,1969,1970],"strong",{},"ASCII","值",[1965,1973,1974],{},[1968,1975,1976],{},"控制字符",[1965,1978,1979,1971],{},[1968,1980,1970],{},[1965,1982,1983],{},[1968,1984,1985],{},"字符",[1965,1987,1988,1971],{},[1968,1989,1970],{},[1965,1991,1992],{},[1968,1993,1985],{},[1965,1995,1996,1971],{},[1968,1997,1970],{},[1965,1999,2000],{},[1968,2001,1985],{},[2003,2004,2005,2032,2058,2082,2107,2133,2158,2183,2209,2234,2260,2285,2311,2336,2362,2388,2414,2438,2463,2488,2513,2538,2563,2588,2613,2638,2663,2689,2713,2738,2762,2788],"tbody",{},[1962,2006,2007,2011,2014,2017,2020,2023,2026,2029],{},[2008,2009,2010],"td",{},"0",[2008,2012,2013],{},"NUT",[2008,2015,2016],{},"32",[2008,2018,2019],{},"(space)",[2008,2021,2022],{},"64",[2008,2024,2025],{},"@",[2008,2027,2028],{},"96",[2008,2030,2031],{},"、",[1962,2033,2034,2037,2040,2043,2046,2049,2052,2055],{},[2008,2035,2036],{},"1",[2008,2038,2039],{},"SOH",[2008,2041,2042],{},"33",[2008,2044,2045],{},"!",[2008,2047,2048],{},"65",[2008,2050,2051],{},"A",[2008,2053,2054],{},"97",[2008,2056,2057],{},"a",[1962,2059,2060,2062,2065,2068,2070,2073,2076,2079],{},[2008,2061,1897],{},[2008,2063,2064],{},"STX",[2008,2066,2067],{},"34",[2008,2069,1014],{},[2008,2071,2072],{},"66",[2008,2074,2075],{},"B",[2008,2077,2078],{},"98",[2008,2080,2081],{},"b",[1962,2083,2084,2086,2089,2092,2095,2098,2101,2104],{},[2008,2085,1891],{},[2008,2087,2088],{},"ETX",[2008,2090,2091],{},"35",[2008,2093,2094],{},"#",[2008,2096,2097],{},"67",[2008,2099,2100],{},"C",[2008,2102,2103],{},"99",[2008,2105,2106],{},"c",[1962,2108,2109,2112,2115,2118,2121,2124,2127,2130],{},[2008,2110,2111],{},"4",[2008,2113,2114],{},"EOT",[2008,2116,2117],{},"36",[2008,2119,2120],{},"$",[2008,2122,2123],{},"68",[2008,2125,2126],{},"D",[2008,2128,2129],{},"100",[2008,2131,2132],{},"d",[1962,2134,2135,2138,2141,2144,2147,2150,2153,2156],{},[2008,2136,2137],{},"5",[2008,2139,2140],{},"ENQ",[2008,2142,2143],{},"37",[2008,2145,2146],{},"%",[2008,2148,2149],{},"69",[2008,2151,2152],{},"E",[2008,2154,2155],{},"101",[2008,2157,1894],{},[1962,2159,2160,2163,2166,2169,2172,2175,2178,2181],{},[2008,2161,2162],{},"6",[2008,2164,2165],{},"ACK",[2008,2167,2168],{},"38",[2008,2170,2171],{},"&",[2008,2173,2174],{},"70",[2008,2176,2177],{},"F",[2008,2179,2180],{},"102",[2008,2182,999],{},[1962,2184,2185,2188,2191,2194,2197,2200,2203,2206],{},[2008,2186,2187],{},"7",[2008,2189,2190],{},"BEL",[2008,2192,2193],{},"39",[2008,2195,2196],{},",",[2008,2198,2199],{},"71",[2008,2201,2202],{},"G",[2008,2204,2205],{},"103",[2008,2207,2208],{},"g",[1962,2210,2211,2214,2217,2220,2222,2225,2228,2231],{},[2008,2212,2213],{},"8",[2008,2215,2216],{},"BS",[2008,2218,2219],{},"40",[2008,2221,109],{},[2008,2223,2224],{},"72",[2008,2226,2227],{},"H",[2008,2229,2230],{},"104",[2008,2232,2233],{},"h",[1962,2235,2236,2239,2242,2245,2248,2251,2254,2257],{},[2008,2237,2238],{},"9",[2008,2240,2241],{},"HT",[2008,2243,2244],{},"41",[2008,2246,2247],{},")",[2008,2249,2250],{},"73",[2008,2252,2253],{},"I",[2008,2255,2256],{},"105",[2008,2258,2259],{},"i",[1962,2261,2262,2265,2268,2271,2273,2276,2279,2282],{},[2008,2263,2264],{},"10",[2008,2266,2267],{},"LF",[2008,2269,2270],{},"42",[2008,2272,1540],{},[2008,2274,2275],{},"74",[2008,2277,2278],{},"J",[2008,2280,2281],{},"106",[2008,2283,2284],{},"j",[1962,2286,2287,2290,2293,2296,2299,2302,2305,2308],{},[2008,2288,2289],{},"11",[2008,2291,2292],{},"VT",[2008,2294,2295],{},"43",[2008,2297,2298],{},"+",[2008,2300,2301],{},"75",[2008,2303,2304],{},"K",[2008,2306,2307],{},"107",[2008,2309,2310],{},"k",[1962,2312,2313,2316,2319,2322,2324,2327,2330,2333],{},[2008,2314,2315],{},"12",[2008,2317,2318],{},"FF",[2008,2320,2321],{},"44",[2008,2323,2196],{},[2008,2325,2326],{},"76",[2008,2328,2329],{},"L",[2008,2331,2332],{},"108",[2008,2334,2335],{},"l",[1962,2337,2338,2341,2344,2347,2350,2353,2356,2359],{},[2008,2339,2340],{},"13",[2008,2342,2343],{},"CR",[2008,2345,2346],{},"45",[2008,2348,2349],{},"-",[2008,2351,2352],{},"77",[2008,2354,2355],{},"M",[2008,2357,2358],{},"109",[2008,2360,2361],{},"m",[1962,2363,2364,2367,2370,2373,2376,2379,2382,2385],{},[2008,2365,2366],{},"14",[2008,2368,2369],{},"SO",[2008,2371,2372],{},"46",[2008,2374,2375],{},".",[2008,2377,2378],{},"78",[2008,2380,2381],{},"N",[2008,2383,2384],{},"110",[2008,2386,2387],{},"n",[1962,2389,2390,2393,2396,2399,2402,2405,2408,2411],{},[2008,2391,2392],{},"15",[2008,2394,2395],{},"SI",[2008,2397,2398],{},"47",[2008,2400,2401],{},"\u002F",[2008,2403,2404],{},"79",[2008,2406,2407],{},"O",[2008,2409,2410],{},"111",[2008,2412,2413],{},"o",[1962,2415,2416,2419,2422,2425,2427,2430,2433,2436],{},[2008,2417,2418],{},"16",[2008,2420,2421],{},"DLE",[2008,2423,2424],{},"48",[2008,2426,2010],{},[2008,2428,2429],{},"80",[2008,2431,2432],{},"P",[2008,2434,2435],{},"112",[2008,2437,19],{},[1962,2439,2440,2443,2446,2449,2451,2454,2457,2460],{},[2008,2441,2442],{},"17",[2008,2444,2445],{},"DCI",[2008,2447,2448],{},"49",[2008,2450,2036],{},[2008,2452,2453],{},"81",[2008,2455,2456],{},"Q",[2008,2458,2459],{},"113",[2008,2461,2462],{},"q",[1962,2464,2465,2468,2471,2474,2476,2479,2482,2485],{},[2008,2466,2467],{},"18",[2008,2469,2470],{},"DC2",[2008,2472,2473],{},"50",[2008,2475,1897],{},[2008,2477,2478],{},"82",[2008,2480,2481],{},"R",[2008,2483,2484],{},"114",[2008,2486,2487],{},"r",[1962,2489,2490,2493,2496,2499,2501,2504,2507,2510],{},[2008,2491,2492],{},"19",[2008,2494,2495],{},"DC3",[2008,2497,2498],{},"51",[2008,2500,1891],{},[2008,2502,2503],{},"83",[2008,2505,2506],{},"S",[2008,2508,2509],{},"115",[2008,2511,2512],{},"s",[1962,2514,2515,2518,2521,2524,2526,2529,2532,2535],{},[2008,2516,2517],{},"20",[2008,2519,2520],{},"DC4",[2008,2522,2523],{},"52",[2008,2525,2111],{},[2008,2527,2528],{},"84",[2008,2530,2531],{},"T",[2008,2533,2534],{},"116",[2008,2536,2537],{},"t",[1962,2539,2540,2543,2546,2549,2551,2554,2557,2560],{},[2008,2541,2542],{},"21",[2008,2544,2545],{},"NAK",[2008,2547,2548],{},"53",[2008,2550,2137],{},[2008,2552,2553],{},"85",[2008,2555,2556],{},"U",[2008,2558,2559],{},"117",[2008,2561,2562],{},"u",[1962,2564,2565,2568,2571,2574,2576,2579,2582,2585],{},[2008,2566,2567],{},"22",[2008,2569,2570],{},"SYN",[2008,2572,2573],{},"54",[2008,2575,2162],{},[2008,2577,2578],{},"86",[2008,2580,2581],{},"V",[2008,2583,2584],{},"118",[2008,2586,2587],{},"v",[1962,2589,2590,2593,2596,2599,2601,2604,2607,2610],{},[2008,2591,2592],{},"23",[2008,2594,2595],{},"TB",[2008,2597,2598],{},"55",[2008,2600,2187],{},[2008,2602,2603],{},"87",[2008,2605,2606],{},"W",[2008,2608,2609],{},"119",[2008,2611,2612],{},"w",[1962,2614,2615,2618,2621,2624,2626,2629,2632,2635],{},[2008,2616,2617],{},"24",[2008,2619,2620],{},"CAN",[2008,2622,2623],{},"56",[2008,2625,2213],{},[2008,2627,2628],{},"88",[2008,2630,2631],{},"X",[2008,2633,2634],{},"120",[2008,2636,2637],{},"x",[1962,2639,2640,2643,2646,2649,2651,2654,2657,2660],{},[2008,2641,2642],{},"25",[2008,2644,2645],{},"EM",[2008,2647,2648],{},"57",[2008,2650,2238],{},[2008,2652,2653],{},"89",[2008,2655,2656],{},"Y",[2008,2658,2659],{},"121",[2008,2661,2662],{},"y",[1962,2664,2665,2668,2671,2674,2677,2680,2683,2686],{},[2008,2666,2667],{},"26",[2008,2669,2670],{},"SUB",[2008,2672,2673],{},"58",[2008,2675,2676],{},":",[2008,2678,2679],{},"90",[2008,2681,2682],{},"Z",[2008,2684,2685],{},"122",[2008,2687,2688],{},"z",[1962,2690,2691,2694,2697,2700,2702,2705,2708,2711],{},[2008,2692,2693],{},"27",[2008,2695,2696],{},"ESC",[2008,2698,2699],{},"59",[2008,2701,1876],{},[2008,2703,2704],{},"91",[2008,2706,2707],{},"[",[2008,2709,2710],{},"123",[2008,2712,1005],{},[1962,2714,2715,2718,2721,2724,2727,2730,2732,2735],{},[2008,2716,2717],{},"28",[2008,2719,2720],{},"FS",[2008,2722,2723],{},"60",[2008,2725,2726],{},"\u003C",[2008,2728,2729],{},"92",[2008,2731,2401],{},[2008,2733,2734],{},"124",[2008,2736,2737],{},"|",[1962,2739,2740,2743,2746,2749,2751,2754,2757,2760],{},[2008,2741,2742],{},"29",[2008,2744,2745],{},"GS",[2008,2747,2748],{},"61",[2008,2750,64],{},[2008,2752,2753],{},"93",[2008,2755,2756],{},"]",[2008,2758,2759],{},"125",[2008,2761,1011],{},[1962,2763,2764,2767,2770,2773,2776,2779,2782,2785],{},[2008,2765,2766],{},"30",[2008,2768,2769],{},"RS",[2008,2771,2772],{},"62",[2008,2774,2775],{},">",[2008,2777,2778],{},"94",[2008,2780,2781],{},"^",[2008,2783,2784],{},"126",[2008,2786,2787],{},"`",[1962,2789,2790,2793,2796,2799,2802,2805,2808,2811],{},[2008,2791,2792],{},"31",[2008,2794,2795],{},"US",[2008,2797,2798],{},"63",[2008,2800,2801],{},"?",[2008,2803,2804],{},"95",[2008,2806,2807],{},"_",[2008,2809,2810],{},"127",[2008,2812,2813],{},"DEL",[19,2815,2816,2817,2820],{},"ASCII 码大致由以下",[1968,2818,2819],{},"两部分组","成：",[2822,2823,2824,2831],"ul",{},[165,2825,2826,2827,2830],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[1968,2828,2829],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[165,2832,2833,2834,2837],{},"ASCII 打印字符：数字 ",[1968,2835,2836],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[633,2839,2841],{"id":2840},"_134转义字符","1.3.4转义字符",[23,2843,2845],{"className":1814,"code":2844,"language":1816,"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,2846,2847,2852,2868,2882,2887,2900,2905],{"__ignoreMap":28},[33,2848,2849],{"class":35,"line":36},[33,2850,2851],{"class":87},"\u002F\u002F换行符\n",[33,2853,2854,2857,2860,2863,2865],{"class":35,"line":43},[33,2855,2856],{"class":59},"cout ",[33,2858,2859],{"class":63},"\u003C\u003C",[33,2861,2862],{"class":117},"\"hello world\u002Fn\"",[33,2864,1876],{"class":59},[33,2866,2867],{"class":87}," \u002F\u002F就等同于如下：\n",[33,2869,2870,2872,2874,2877,2879],{"class":35,"line":130},[33,2871,2856],{"class":59},[33,2873,2859],{"class":63},[33,2875,2876],{"class":117},"\"hello world\"",[33,2878,2859],{"class":63},[33,2880,2881],{"class":59},"endl;\n",[33,2883,2884],{"class":35,"line":146},[33,2885,2886],{"class":87},"\u002F\u002F反斜杠\n",[33,2888,2889,2891,2893,2896,2898],{"class":35,"line":267},[33,2890,2856],{"class":59},[33,2892,2859],{"class":63},[33,2894,2895],{"class":117},"\"\u002F\u002F\"",[33,2897,2859],{"class":63},[33,2899,2881],{"class":59},[33,2901,2902],{"class":35,"line":275},[33,2903,2904],{"class":87},"\u002F\u002F水平制表符\n",[33,2906,2907,2909,2911,2914,2917,2920,2922,2925],{"class":35,"line":392},[33,2908,2856],{"class":59},[33,2910,2859],{"class":63},[33,2912,2913],{"class":117},"\"aaaa",[33,2915,2916],{"class":39},"\\t",[33,2918,2919],{"class":117},"helloworld\"",[33,2921,2859],{"class":63},[33,2923,2924],{"class":59},"endl;",[33,2926,2927],{"class":87}," \u002F\u002F输出窗口时有对齐效果\n",[633,2929,2931],{"id":2930},"_135字符串型","1.3.5字符串型",[19,2933,2934,2935,2937],{},"char 变量名",[33,2936],{},"=\"字符串值\"",[23,2939,2941],{"className":1814,"code":2940,"language":1816,"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,2942,2943,2948,2953,2958,2963,2977,2990,2995,3000,3011],{"__ignoreMap":28},[33,2944,2945],{"class":35,"line":36},[33,2946,2947],{"class":87},"\u002F\u002Fc风格字符串\n",[33,2949,2950],{"class":35,"line":43},[33,2951,2952],{"class":87},"\u002F\u002F注意事项：\n",[33,2954,2955],{"class":35,"line":130},[33,2956,2957],{"class":87},"\u002F\u002F1.char字符串名[]\n",[33,2959,2960],{"class":35,"line":146},[33,2961,2962],{"class":87},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[33,2964,2965,2967,2970,2972,2974],{"class":35,"line":267},[33,2966,1916],{"class":63},[33,2968,2969],{"class":59}," str[]",[33,2971,64],{"class":63},[33,2973,2876],{"class":117},[33,2975,2976],{"class":59},";\n",[33,2978,2979,2981,2983,2986,2988],{"class":35,"line":275},[33,2980,2856],{"class":59},[33,2982,2859],{"class":63},[33,2984,2985],{"class":59},"str",[33,2987,2859],{"class":63},[33,2989,2881],{"class":59},[33,2991,2992],{"class":35,"line":392},[33,2993,2994],{"class":87},"\u002F\u002Fc++风格字符串\n",[33,2996,2997],{"class":35,"line":406},[33,2998,2999],{"class":87},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[33,3001,3002,3005,3007,3009],{"class":35,"line":418},[33,3003,3004],{"class":59},"string str2",[33,3006,64],{"class":63},[33,3008,2876],{"class":117},[33,3010,2976],{"class":59},[33,3012,3013,3015,3017,3020,3022],{"class":35,"line":425},[33,3014,2856],{"class":59},[33,3016,2859],{"class":63},[33,3018,3019],{"class":59},"str2",[33,3021,2859],{"class":63},[33,3023,2881],{"class":59},[633,3025,3027],{"id":3026},"_136布尔类型bool","1.3.6布尔类型bool",[23,3029,3031],{"className":1814,"code":3030,"language":1816,"meta":28,"style":28},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[30,3032,3033,3048],{"__ignoreMap":28},[33,3034,3035,3038,3041,3043,3046],{"class":35,"line":36},[33,3036,3037],{"class":63},"bool",[33,3039,3040],{"class":59}," flag",[33,3042,64],{"class":63},[33,3044,3045],{"class":39},"true",[33,3047,2976],{"class":59},[33,3049,3050,3053,3056,3059,3061,3063],{"class":35,"line":43},[33,3051,3052],{"class":59},"cout",[33,3054,3055],{"class":63},"\u003C\u003Csizeof",[33,3057,3058],{"class":59},"(flag)",[33,3060,2859],{"class":63},[33,3062,2924],{"class":59},[33,3064,3065],{"class":87}," \u002F\u002F查看布尔占内存空间\n",[14,3067,3069],{"id":3068},"_14键盘输入cin","1.4键盘输入cin",[23,3071,3073],{"className":1814,"code":3072,"language":1816,"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,3074,3075,3088,3105,3116],{"__ignoreMap":28},[33,3076,3077,3079,3082,3084,3086],{"class":35,"line":36},[33,3078,1828],{"class":63},[33,3080,3081],{"class":59}," a",[33,3083,64],{"class":63},[33,3085,2010],{"class":39},[33,3087,2976],{"class":59},[33,3089,3090,3092,3094,3097,3099,3101,3103],{"class":35,"line":43},[33,3091,3052],{"class":59},[33,3093,2859],{"class":63},[33,3095,3096],{"class":117},"\"请给整型变量a赋值\"",[33,3098,2859],{"class":63},[33,3100,2057],{"class":59},[33,3102,2859],{"class":63},[33,3104,2881],{"class":59},[33,3106,3107,3110,3113],{"class":35,"line":130},[33,3108,3109],{"class":59},"cin ",[33,3111,3112],{"class":63},">>",[33,3114,3115],{"class":59}," a;\n",[33,3117,3118,3120,3122,3125,3128,3130,3132],{"class":35,"line":146},[33,3119,2856],{"class":59},[33,3121,2859],{"class":63},[33,3123,3124],{"class":117}," \"整型变量a=\"",[33,3126,3127],{"class":63}," \u003C\u003C",[33,3129,2057],{"class":59},[33,3131,2859],{"class":63},[33,3133,2881],{"class":59},[14,3135,3137],{"id":3136},"_15运算符","1.5运算符",[633,3139,3141],{"id":3140},"_151算术运算符","1.5.1算术运算符",[19,3143,3144,3148],{},[3145,3146],"img",{"alt":28,"src":3147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[162,3150,3151,3154,3157],{},[165,3152,3153],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[165,3155,3156],{},"两个小数不可以做取模运算",[165,3158,3159],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[633,3161,3163],{"id":3162},"_152赋值运算符","1.5.2赋值运算符",[19,3165,3166],{},[3145,3167],{"alt":28,"src":3168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[633,3170,3172],{"id":3171},"_153比较运算符","1.5.3比较运算符",[19,3174,3175],{},[3145,3176],{"alt":28,"src":3177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[633,3179,3181],{"id":3180},"_154逻辑运算符","1.5.4逻辑运算符",[19,3183,3184],{},[3145,3185],{"alt":28,"src":3186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3188,3190],{"id":3189},"_16程序流程结构","1.6程序流程结构",[633,3192,3194],{"id":3193},"_161选择结构","1.6.1选择结构",[162,3196,3197],{},[165,3198,3199],{},"if语句\n单行、多行、多条件if语句",[23,3201,3203],{"className":1814,"code":3202,"language":1816,"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,3204,3205,3210,3224,3229,3243,3248,3253,3262,3274,3278,3291,3295,3300,3304,3317,3321,3326,3346,3350,3363,3367,3394,3399,3416,3421,3426,3431,3445,3450],{"__ignoreMap":28},[33,3206,3207],{"class":35,"line":36},[33,3208,3209],{"class":87},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[33,3211,3212,3214,3217,3219,3222],{"class":35,"line":43},[33,3213,133],{"class":63},[33,3215,3216],{"class":59},"(score",[33,3218,2775],{"class":63},[33,3220,3221],{"class":39},"600",[33,3223,157],{"class":59},[33,3225,3226],{"class":35,"line":130},[33,3227,3228],{"class":59},"{\n",[33,3230,3231,3234,3236,3239,3241],{"class":35,"line":146},[33,3232,3233],{"class":59},"    cout",[33,3235,2859],{"class":63},[33,3237,3238],{"class":117},"'这是单行if语句'",[33,3240,2859],{"class":63},[33,3242,2881],{"class":59},[33,3244,3245],{"class":35,"line":267},[33,3246,3247],{"class":59},"}\n",[33,3249,3250],{"class":35,"line":275},[33,3251,3252],{"class":87},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[33,3254,3255,3257,3259],{"class":35,"line":392},[33,3256,3109],{"class":59},[33,3258,3112],{"class":63},[33,3260,3261],{"class":59}," score\n",[33,3263,3264,3266,3268,3270,3272],{"class":35,"line":406},[33,3265,133],{"class":63},[33,3267,3216],{"class":59},[33,3269,837],{"class":63},[33,3271,3221],{"class":39},[33,3273,157],{"class":59},[33,3275,3276],{"class":35,"line":418},[33,3277,3228],{"class":59},[33,3279,3280,3282,3284,3287,3289],{"class":35,"line":425},[33,3281,3233],{"class":59},[33,3283,3112],{"class":63},[33,3285,3286],{"class":117},"\"小于等于600\"",[33,3288,2859],{"class":63},[33,3290,2881],{"class":59},[33,3292,3293],{"class":35,"line":1147},[33,3294,3247],{"class":59},[33,3296,3297],{"class":35,"line":1329},[33,3298,3299],{"class":63},"else\n",[33,3301,3302],{"class":35,"line":1341},[33,3303,3228],{"class":59},[33,3305,3306,3308,3310,3313,3315],{"class":35,"line":1348},[33,3307,3233],{"class":59},[33,3309,3112],{"class":63},[33,3311,3312],{"class":117},"\"大于600\"",[33,3314,3112],{"class":63},[33,3316,2881],{"class":59},[33,3318,3319],{"class":35,"line":1529},[33,3320,3247],{"class":59},[33,3322,3323],{"class":35,"line":1546},[33,3324,3325],{"class":87},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[33,3327,3328,3330,3333,3335,3337,3340,3342,3344],{"class":35,"line":1551},[33,3329,133],{"class":63},[33,3331,3332],{"class":59}," (",[33,3334,2010],{"class":39},[33,3336,2726],{"class":63},[33,3338,3339],{"class":59},"num",[33,3341,2726],{"class":63},[33,3343,2129],{"class":39},[33,3345,157],{"class":59},[33,3347,3348],{"class":35,"line":1566},[33,3349,3228],{"class":59},[33,3351,3352,3354,3356,3359,3361],{"class":35,"line":1578},[33,3353,3233],{"class":59},[33,3355,2859],{"class":63},[33,3357,3358],{"class":117},"\"小于100\"",[33,3360,2859],{"class":63},[33,3362,2881],{"class":59},[33,3364,3365],{"class":35,"line":1583},[33,3366,3247],{"class":59},[33,3368,3370,3372,3375,3378,3380,3382,3385,3387,3389,3392],{"class":35,"line":3369},21,[33,3371,270],{"class":63},[33,3373,3374],{"class":63}," if",[33,3376,3377],{"class":59}," (nmu",[33,3379,78],{"class":63},[33,3381,2129],{"class":39},[33,3383,3384],{"class":63},"&&",[33,3386,3339],{"class":59},[33,3388,2726],{"class":63},[33,3390,3391],{"class":39},"200",[33,3393,157],{"class":59},[33,3395,3397],{"class":35,"line":3396},22,[33,3398,3228],{"class":59},[33,3400,3402,3404,3406,3409,3411,3413],{"class":35,"line":3401},23,[33,3403,3233],{"class":59},[33,3405,2859],{"class":63},[33,3407,3408],{"class":117},"\"不小于100且小于200\"",[33,3410,2859],{"class":63},[33,3412,2924],{"class":59},[33,3414,3415],{"class":87}," \u002F\u002F可以无限else if,python中是elif：\n",[33,3417,3419],{"class":35,"line":3418},24,[33,3420,3247],{"class":59},[33,3422,3424],{"class":35,"line":3423},25,[33,3425,3299],{"class":63},[33,3427,3429],{"class":35,"line":3428},26,[33,3430,3228],{"class":59},[33,3432,3434,3436,3438,3441,3443],{"class":35,"line":3433},27,[33,3435,3233],{"class":59},[33,3437,2859],{"class":63},[33,3439,3440],{"class":117},"\"不小于200\"",[33,3442,2859],{"class":63},[33,3444,2881],{"class":59},[33,3446,3448],{"class":35,"line":3447},28,[33,3449,3247],{"class":59},[33,3451,3453],{"class":35,"line":3452},29,[33,3454,3455],{"class":87},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[162,3457,3458],{"start":43},[165,3459,3460],{},"三目运算符",[23,3462,3464],{"className":1814,"code":3463,"language":1816,"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,3465,3466,3471,3476,3502,3524,3541,3546,3569,3584],{"__ignoreMap":28},[33,3467,3468],{"class":35,"line":36},[33,3469,3470],{"class":87},"\u002F\u002F创建三个变量a,b,c\n",[33,3472,3473],{"class":35,"line":43},[33,3474,3475],{"class":87},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[33,3477,3478,3480,3482,3484,3486,3489,3491,3493,3496,3498,3500],{"class":35,"line":130},[33,3479,1828],{"class":63},[33,3481,3081],{"class":59},[33,3483,64],{"class":63},[33,3485,2517],{"class":39},[33,3487,3488],{"class":59},",b",[33,3490,64],{"class":63},[33,3492,2264],{"class":39},[33,3494,3495],{"class":59},",c",[33,3497,64],{"class":63},[33,3499,2010],{"class":39},[33,3501,2976],{"class":59},[33,3503,3504,3506,3508,3511,3513,3515,3517,3519,3521],{"class":35,"line":146},[33,3505,2106],{"class":59},[33,3507,64],{"class":63},[33,3509,3510],{"class":59},"(a",[33,3512,2775],{"class":63},[33,3514,2081],{"class":59},[33,3516,2801],{"class":63},[33,3518,2057],{"class":59},[33,3520,2676],{"class":63},[33,3522,3523],{"class":59},"b)\n",[33,3525,3526,3528,3530,3533,3535,3537,3539],{"class":35,"line":267},[33,3527,3052],{"class":59},[33,3529,2859],{"class":63},[33,3531,3532],{"class":117},"\"c=\"",[33,3534,2859],{"class":63},[33,3536,2106],{"class":59},[33,3538,2859],{"class":63},[33,3540,2881],{"class":59},[33,3542,3543],{"class":35,"line":275},[33,3544,3545],{"class":87},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[33,3547,3548,3550,3552,3554,3556,3558,3560,3563,3565,3567],{"class":35,"line":392},[33,3549,3510],{"class":59},[33,3551,2775],{"class":63},[33,3553,2081],{"class":59},[33,3555,2801],{"class":63},[33,3557,2057],{"class":59},[33,3559,2676],{"class":63},[33,3561,3562],{"class":59},"b)",[33,3564,64],{"class":63},[33,3566,2129],{"class":39},[33,3568,2976],{"class":59},[33,3570,3571,3573,3575,3577,3579,3581],{"class":35,"line":406},[33,3572,3052],{"class":59},[33,3574,2859],{"class":63},[33,3576,2057],{"class":59},[33,3578,2859],{"class":63},[33,3580,2924],{"class":59},[33,3582,3583],{"class":87}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[33,3585,3586,3588,3590,3592,3594,3596],{"class":35,"line":418},[33,3587,3052],{"class":59},[33,3589,2859],{"class":63},[33,3591,2081],{"class":59},[33,3593,2859],{"class":63},[33,3595,2924],{"class":59},[33,3597,3598],{"class":87}," \u002F\u002F10   a>b,b还是原值\n",[162,3600,3601],{"start":130},[165,3602,3603],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[23,3605,3607],{"className":1814,"code":3606,"language":1816,"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,3608,3609,3614,3622,3636,3645,3649,3663,3676,3686,3694,3699,3724,3745,3767,3788,3810,3831,3851,3856],{"__ignoreMap":28},[33,3610,3611],{"class":35,"line":36},[33,3612,3613],{"class":87},"\u002F\u002F案例-电影打分\n",[33,3615,3616,3619],{"class":35,"line":43},[33,3617,3618],{"class":63},"#include",[33,3620,3621],{"class":117},"\u003Ciostream>\n",[33,3623,3624,3627,3630,3634],{"class":35,"line":130},[33,3625,3626],{"class":63},"using",[33,3628,3629],{"class":63}," namespace",[33,3631,3633],{"class":3632},"sScJk"," std",[33,3635,2976],{"class":59},[33,3637,3638,3640,3643],{"class":35,"line":146},[33,3639,1828],{"class":63},[33,3641,3642],{"class":3632}," main",[33,3644,943],{"class":59},[33,3646,3647],{"class":35,"line":267},[33,3648,3228],{"class":59},[33,3650,3651,3654,3657,3659,3661],{"class":35,"line":275},[33,3652,3653],{"class":63},"    int",[33,3655,3656],{"class":59}," score",[33,3658,64],{"class":63},[33,3660,2010],{"class":39},[33,3662,2976],{"class":59},[33,3664,3665,3667,3669,3672,3674],{"class":35,"line":392},[33,3666,3233],{"class":59},[33,3668,2859],{"class":63},[33,3670,3671],{"class":117},"\"电影打分：\"",[33,3673,2859],{"class":63},[33,3675,2881],{"class":59},[33,3677,3678,3681,3683],{"class":35,"line":406},[33,3679,3680],{"class":59},"    cin",[33,3682,3112],{"class":63},[33,3684,3685],{"class":59},"score;\n",[33,3687,3688,3691],{"class":35,"line":418},[33,3689,3690],{"class":63},"    switch",[33,3692,3693],{"class":59},"(score)\n",[33,3695,3696],{"class":35,"line":425},[33,3697,3698],{"class":59},"    {\n",[33,3700,3701,3704,3707,3710,3712,3715,3717,3719,3722],{"class":35,"line":1147},[33,3702,3703],{"class":63},"        case",[33,3705,3706],{"class":39}," 10",[33,3708,3709],{"class":59},":cout",[33,3711,2859],{"class":63},[33,3713,3714],{"class":117},"\"经典\"",[33,3716,2859],{"class":63},[33,3718,2924],{"class":59},[33,3720,3721],{"class":63},"break",[33,3723,2976],{"class":59},[33,3725,3726,3728,3731,3733,3735,3737,3739,3741,3743],{"class":35,"line":1329},[33,3727,3703],{"class":63},[33,3729,3730],{"class":39}," 9",[33,3732,3709],{"class":59},[33,3734,2859],{"class":63},[33,3736,3714],{"class":117},[33,3738,2859],{"class":63},[33,3740,2924],{"class":59},[33,3742,3721],{"class":63},[33,3744,2976],{"class":59},[33,3746,3747,3749,3752,3754,3756,3759,3761,3763,3765],{"class":35,"line":1341},[33,3748,3703],{"class":63},[33,3750,3751],{"class":39}," 8",[33,3753,3709],{"class":59},[33,3755,2859],{"class":63},[33,3757,3758],{"class":117},"\"非常好\"",[33,3760,2859],{"class":63},[33,3762,2924],{"class":59},[33,3764,3721],{"class":63},[33,3766,2976],{"class":59},[33,3768,3769,3771,3774,3776,3778,3780,3782,3784,3786],{"class":35,"line":1348},[33,3770,3703],{"class":63},[33,3772,3773],{"class":39}," 7",[33,3775,3709],{"class":59},[33,3777,2859],{"class":63},[33,3779,3758],{"class":117},[33,3781,2859],{"class":63},[33,3783,2924],{"class":59},[33,3785,3721],{"class":63},[33,3787,2976],{"class":59},[33,3789,3790,3792,3795,3797,3799,3802,3804,3806,3808],{"class":35,"line":1529},[33,3791,3703],{"class":63},[33,3793,3794],{"class":39}," 6",[33,3796,3709],{"class":59},[33,3798,2859],{"class":63},[33,3800,3801],{"class":117},"\"一般\"",[33,3803,2859],{"class":63},[33,3805,2924],{"class":59},[33,3807,3721],{"class":63},[33,3809,2976],{"class":59},[33,3811,3812,3814,3817,3819,3821,3823,3825,3827,3829],{"class":35,"line":1546},[33,3813,3703],{"class":63},[33,3815,3816],{"class":39}," 5",[33,3818,3709],{"class":59},[33,3820,2859],{"class":63},[33,3822,3801],{"class":117},[33,3824,2859],{"class":63},[33,3826,2924],{"class":59},[33,3828,3721],{"class":63},[33,3830,2976],{"class":59},[33,3832,3833,3836,3838,3840,3843,3845,3847,3849],{"class":35,"line":1551},[33,3834,3835],{"class":63},"        default",[33,3837,3709],{"class":59},[33,3839,2859],{"class":63},[33,3841,3842],{"class":117},"\"烂片\"",[33,3844,2859],{"class":63},[33,3846,2924],{"class":59},[33,3848,3721],{"class":63},[33,3850,2976],{"class":59},[33,3852,3853],{"class":35,"line":1566},[33,3854,3855],{"class":59},"    }\n",[33,3857,3858],{"class":35,"line":1578},[33,3859,3247],{"class":59},[19,3861,3862],{},"if和switch区别：",[2822,3864,3865,3868],{},[165,3866,3867],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[165,3869,3870],{},"switch优点：结构清晰，执行效率高",[633,3872,3874],{"id":3873},"_162循环结构","1.6.2循环结构",[162,3876,3877],{},[165,3878,3879],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[23,3881,3883],{"className":1814,"code":3882,"language":1816,"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,3884,3885,3890,3898,3902,3915,3929,3933,3953,3963,3967,3979],{"__ignoreMap":28},[33,3886,3887],{"class":35,"line":36},[33,3888,3889],{"class":87},"\u002F\u002F打印0-9数字\n",[33,3891,3892,3894,3896],{"class":35,"line":43},[33,3893,1828],{"class":63},[33,3895,3642],{"class":3632},[33,3897,943],{"class":59},[33,3899,3900],{"class":35,"line":130},[33,3901,3228],{"class":59},[33,3903,3904,3906,3909,3911,3913],{"class":35,"line":146},[33,3905,3653],{"class":63},[33,3907,3908],{"class":59}," num",[33,3910,64],{"class":63},[33,3912,2010],{"class":39},[33,3914,2976],{"class":59},[33,3916,3917,3920,3923,3925,3927],{"class":35,"line":267},[33,3918,3919],{"class":63},"    while",[33,3921,3922],{"class":59},"(num",[33,3924,2726],{"class":63},[33,3926,2264],{"class":39},[33,3928,157],{"class":59},[33,3930,3931],{"class":35,"line":275},[33,3932,3698],{"class":59},[33,3934,3935,3938,3941,3943,3945,3947,3950],{"class":35,"line":392},[33,3936,3937],{"class":3632},"       std",[33,3939,3940],{"class":59},"::cout",[33,3942,2859],{"class":63},[33,3944,3339],{"class":59},[33,3946,2859],{"class":63},[33,3948,3949],{"class":3632},"std",[33,3951,3952],{"class":59},"::endl;\n",[33,3954,3955,3958,3961],{"class":35,"line":406},[33,3956,3957],{"class":59},"        num",[33,3959,3960],{"class":63},"++",[33,3962,2976],{"class":59},[33,3964,3965],{"class":35,"line":418},[33,3966,3855],{"class":59},[33,3968,3969,3972,3974,3977],{"class":35,"line":425},[33,3970,3971],{"class":3632},"    system",[33,3973,109],{"class":59},[33,3975,3976],{"class":117},"\"pause\"",[33,3978,157],{"class":59},[33,3980,3981],{"class":35,"line":1147},[33,3982,3247],{"class":59},[19,3984,3985],{},"注意：写好循环条件，避免死循环情况",[23,3987,3989],{"className":1814,"code":3988,"language":1816,"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,3990,3991,3996,4003,4010,4020,4028,4032,4037,4063,4067,4072,4080,4107,4112,4117,4130,4140,4144,4154,4159,4172,4177,4191,4196,4211,4215,4228,4232,4237,4241,4255,4263,4268,4274,4280,4285],{"__ignoreMap":28},[33,3992,3993],{"class":35,"line":36},[33,3994,3995],{"class":87},"\u002F\u002F循环结构-猜数字\n",[33,3997,3998,4000],{"class":35,"line":43},[33,3999,3618],{"class":63},[33,4001,4002],{"class":117}," \u003Ciostream>\n",[33,4004,4005,4007],{"class":35,"line":130},[33,4006,3618],{"class":63},[33,4008,4009],{"class":117}," \u003Cctime>\n",[33,4011,4012,4014,4016,4018],{"class":35,"line":146},[33,4013,3626],{"class":63},[33,4015,3629],{"class":63},[33,4017,3633],{"class":3632},[33,4019,2976],{"class":59},[33,4021,4022,4024,4026],{"class":35,"line":267},[33,4023,1828],{"class":63},[33,4025,3642],{"class":3632},[33,4027,943],{"class":59},[33,4029,4030],{"class":35,"line":275},[33,4031,3228],{"class":59},[33,4033,4034],{"class":35,"line":392},[33,4035,4036],{"class":87},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[33,4038,4039,4042,4045,4048,4050,4052,4055,4057,4060],{"class":35,"line":406},[33,4040,4041],{"class":3632},"    srand",[33,4043,4044],{"class":59},"((",[33,4046,4047],{"class":63},"unsigned",[33,4049,106],{"class":63},[33,4051,2247],{"class":59},[33,4053,4054],{"class":3632},"time",[33,4056,109],{"class":59},[33,4058,4059],{"class":39},"NULL",[33,4061,4062],{"class":59},"));\n",[33,4064,4065],{"class":35,"line":418},[33,4066,127],{"emptyLinePlaceholder":126},[33,4068,4069],{"class":35,"line":425},[33,4070,4071],{"class":87},"    \u002F\u002F1.系统生成随机数\n",[33,4073,4074,4077],{"class":35,"line":1147},[33,4075,4076],{"class":87},"    \u002F\u002Frand()%100",[33,4078,4079],{"class":87}," \u002F\u002F生成0-99的随机数\n",[33,4081,4082,4084,4086,4088,4091,4094,4096,4098,4100,4102,4104],{"class":35,"line":1329},[33,4083,3653],{"class":63},[33,4085,3908],{"class":59},[33,4087,64],{"class":63},[33,4089,4090],{"class":3632},"rand",[33,4092,4093],{"class":59},"()",[33,4095,2146],{"class":63},[33,4097,2129],{"class":39},[33,4099,2298],{"class":63},[33,4101,2036],{"class":39},[33,4103,1876],{"class":59},[33,4105,4106],{"class":87}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[33,4108,4109],{"class":35,"line":1341},[33,4110,4111],{"class":87},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[33,4113,4114],{"class":35,"line":1348},[33,4115,4116],{"class":87},"    \u002F\u002F2.玩家猜测\n",[33,4118,4119,4121,4124,4126,4128],{"class":35,"line":1529},[33,4120,3653],{"class":63},[33,4122,4123],{"class":59}," val",[33,4125,64],{"class":63},[33,4127,2010],{"class":39},[33,4129,2976],{"class":59},[33,4131,4132,4134,4136,4138],{"class":35,"line":1546},[33,4133,3919],{"class":63},[33,4135,3332],{"class":59},[33,4137,2036],{"class":39},[33,4139,157],{"class":59},[33,4141,4142],{"class":35,"line":1551},[33,4143,3698],{"class":59},[33,4145,4146,4149,4151],{"class":35,"line":1566},[33,4147,4148],{"class":59},"        cin",[33,4150,3112],{"class":63},[33,4152,4153],{"class":59},"val;\n",[33,4155,4156],{"class":35,"line":1578},[33,4157,4158],{"class":87},"        \u002F\u002F3.判断玩家猜测\n",[33,4160,4161,4164,4167,4169],{"class":35,"line":1583},[33,4162,4163],{"class":63},"        if",[33,4165,4166],{"class":59},"(val",[33,4168,2726],{"class":63},[33,4170,4171],{"class":59},"num) \n",[33,4173,4174],{"class":35,"line":3369},[33,4175,4176],{"class":59},"        {\n",[33,4178,4179,4182,4184,4187,4189],{"class":35,"line":3396},[33,4180,4181],{"class":59},"            cout",[33,4183,2859],{"class":63},[33,4185,4186],{"class":117},"\"猜小了！\"",[33,4188,2859],{"class":63},[33,4190,2881],{"class":59},[33,4192,4193],{"class":35,"line":3401},[33,4194,4195],{"class":59},"        }\n",[33,4197,4198,4201,4203,4206,4208],{"class":35,"line":3418},[33,4199,4200],{"class":63},"        else",[33,4202,3374],{"class":63},[33,4204,4205],{"class":59}," (val",[33,4207,2775],{"class":63},[33,4209,4210],{"class":59},"num)\n",[33,4212,4213],{"class":35,"line":3423},[33,4214,4176],{"class":59},[33,4216,4217,4219,4221,4224,4226],{"class":35,"line":3428},[33,4218,4181],{"class":59},[33,4220,2859],{"class":63},[33,4222,4223],{"class":117},"\"猜大了！\"",[33,4225,2859],{"class":63},[33,4227,2881],{"class":59},[33,4229,4230],{"class":35,"line":3433},[33,4231,4195],{"class":59},[33,4233,4234],{"class":35,"line":3447},[33,4235,4236],{"class":63},"        else\n",[33,4238,4239],{"class":35,"line":3452},[33,4240,4176],{"class":59},[33,4242,4244,4246,4248,4251,4253],{"class":35,"line":4243},30,[33,4245,4181],{"class":59},[33,4247,2859],{"class":63},[33,4249,4250],{"class":117},"\"猜对了！\"",[33,4252,2859],{"class":63},[33,4254,2881],{"class":59},[33,4256,4258,4261],{"class":35,"line":4257},31,[33,4259,4260],{"class":63},"            break",[33,4262,2976],{"class":59},[33,4264,4266],{"class":35,"line":4265},32,[33,4267,4195],{"class":59},[33,4269,4271],{"class":35,"line":4270},33,[33,4272,4273],{"class":87},"        \u002F\u002F猜对 退出游戏\n",[33,4275,4277],{"class":35,"line":4276},34,[33,4278,4279],{"class":87},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[33,4281,4283],{"class":35,"line":4282},35,[33,4284,3855],{"class":59},[33,4286,4288],{"class":35,"line":4287},36,[33,4289,3247],{"class":59},[162,4291,4292],{"start":43},[165,4293,4294,4295,4298],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[1968,4296,4297],{},"do...while会先执行一次循环语句","，在判断循环语句",[23,4300,4302],{"className":1814,"code":4301,"language":1816,"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,4303,4304,4309,4317,4321,4333,4341,4345,4362,4369,4373,4386,4396],{"__ignoreMap":28},[33,4305,4306],{"class":35,"line":36},[33,4307,4308],{"class":87},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[33,4310,4311,4313,4315],{"class":35,"line":43},[33,4312,1828],{"class":63},[33,4314,3642],{"class":3632},[33,4316,943],{"class":59},[33,4318,4319],{"class":35,"line":130},[33,4320,3228],{"class":59},[33,4322,4323,4325,4327,4329,4331],{"class":35,"line":146},[33,4324,3653],{"class":63},[33,4326,3908],{"class":59},[33,4328,64],{"class":63},[33,4330,2010],{"class":39},[33,4332,2976],{"class":59},[33,4334,4335,4338],{"class":35,"line":267},[33,4336,4337],{"class":63},"    do",[33,4339,4340],{"class":59}," \n",[33,4342,4343],{"class":35,"line":275},[33,4344,3698],{"class":59},[33,4346,4347,4350,4352,4354,4356,4358,4360],{"class":35,"line":392},[33,4348,4349],{"class":3632},"        std",[33,4351,3940],{"class":59},[33,4353,2859],{"class":63},[33,4355,3339],{"class":59},[33,4357,2859],{"class":63},[33,4359,3949],{"class":3632},[33,4361,3952],{"class":59},[33,4363,4364,4366],{"class":35,"line":406},[33,4365,3957],{"class":59},[33,4367,4368],{"class":63},"++\n",[33,4370,4371],{"class":35,"line":418},[33,4372,3855],{"class":59},[33,4374,4375,4377,4379,4381,4383],{"class":35,"line":425},[33,4376,3919],{"class":63},[33,4378,3922],{"class":59},[33,4380,2726],{"class":63},[33,4382,2264],{"class":39},[33,4384,4385],{"class":59},");\n",[33,4387,4388,4390,4392,4394],{"class":35,"line":1147},[33,4389,3971],{"class":3632},[33,4391,109],{"class":59},[33,4393,3976],{"class":117},[33,4395,4385],{"class":59},[33,4397,4398],{"class":35,"line":1329},[33,4399,3247],{"class":59},[19,4401,4402],{},"案例-水仙花数",[19,4404,4405],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4407,4408],{},"例如：1^3+5^3+3^3=153",[19,4410,4411],{},"请用do...while语句，求出所有3位数的水仙花数",[23,4413,4415],{"className":1814,"code":4414,"language":1816,"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,4416,4417,4423,4433,4441,4445,4450,4462,4468,4472,4477,4493,4509,4525,4540,4559,4574,4621,4625,4637,4641,4649,4653,4667],{"__ignoreMap":28},[33,4418,4419,4421],{"class":35,"line":36},[33,4420,3618],{"class":63},[33,4422,4002],{"class":117},[33,4424,4425,4427,4429,4431],{"class":35,"line":43},[33,4426,3626],{"class":63},[33,4428,3629],{"class":63},[33,4430,3633],{"class":3632},[33,4432,2976],{"class":59},[33,4434,4435,4437,4439],{"class":35,"line":130},[33,4436,1828],{"class":63},[33,4438,3642],{"class":3632},[33,4440,943],{"class":59},[33,4442,4443],{"class":35,"line":146},[33,4444,3228],{"class":59},[33,4446,4447],{"class":35,"line":267},[33,4448,4449],{"class":87},"    \u002F\u002F1.先打印所有三位数字\n",[33,4451,4452,4454,4456,4458,4460],{"class":35,"line":275},[33,4453,3653],{"class":63},[33,4455,3908],{"class":59},[33,4457,64],{"class":63},[33,4459,2129],{"class":39},[33,4461,2976],{"class":59},[33,4463,4464,4466],{"class":35,"line":392},[33,4465,4337],{"class":63},[33,4467,4340],{"class":59},[33,4469,4470],{"class":35,"line":406},[33,4471,3698],{"class":59},[33,4473,4474],{"class":35,"line":418},[33,4475,4476],{"class":87},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[33,4478,4479,4482,4484,4486,4488,4490],{"class":35,"line":425},[33,4480,4481],{"class":63},"        int",[33,4483,3081],{"class":59},[33,4485,64],{"class":63},[33,4487,2010],{"class":39},[33,4489,1876],{"class":59},[33,4491,4492],{"class":87}," \u002F\u002F个位\n",[33,4494,4495,4497,4500,4502,4504,4506],{"class":35,"line":1147},[33,4496,4481],{"class":63},[33,4498,4499],{"class":59}," b",[33,4501,64],{"class":63},[33,4503,2010],{"class":39},[33,4505,1876],{"class":59},[33,4507,4508],{"class":87}," \u002F\u002F十位\n",[33,4510,4511,4513,4516,4518,4520,4522],{"class":35,"line":1329},[33,4512,4481],{"class":63},[33,4514,4515],{"class":59}," c",[33,4517,64],{"class":63},[33,4519,2010],{"class":39},[33,4521,1876],{"class":59},[33,4523,4524],{"class":87}," \u002F\u002F百位\n",[33,4526,4527,4530,4532,4534,4536,4538],{"class":35,"line":1341},[33,4528,4529],{"class":59},"        a",[33,4531,64],{"class":63},[33,4533,3339],{"class":59},[33,4535,2146],{"class":63},[33,4537,2264],{"class":39},[33,4539,2976],{"class":59},[33,4541,4542,4545,4547,4549,4551,4553,4555,4557],{"class":35,"line":1348},[33,4543,4544],{"class":59},"        b",[33,4546,64],{"class":63},[33,4548,3339],{"class":59},[33,4550,2401],{"class":63},[33,4552,2264],{"class":39},[33,4554,2146],{"class":63},[33,4556,2264],{"class":39},[33,4558,2976],{"class":59},[33,4560,4561,4564,4566,4568,4570,4572],{"class":35,"line":1529},[33,4562,4563],{"class":59},"        c",[33,4565,64],{"class":63},[33,4567,3339],{"class":59},[33,4569,2401],{"class":63},[33,4571,2129],{"class":39},[33,4573,2976],{"class":59},[33,4575,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4613,4615,4618],{"class":35,"line":1546},[33,4577,4163],{"class":63},[33,4579,3510],{"class":59},[33,4581,1540],{"class":63},[33,4583,2057],{"class":59},[33,4585,1540],{"class":63},[33,4587,2057],{"class":59},[33,4589,2298],{"class":63},[33,4591,2081],{"class":59},[33,4593,1540],{"class":63},[33,4595,2081],{"class":59},[33,4597,1540],{"class":63},[33,4599,2081],{"class":59},[33,4601,2298],{"class":63},[33,4603,2106],{"class":59},[33,4605,1540],{"class":63},[33,4607,2106],{"class":59},[33,4609,1540],{"class":63},[33,4611,4612],{"class":59},"c ",[33,4614,573],{"class":63},[33,4616,4617],{"class":59}," num)",[33,4619,4620],{"class":87}," \u002F\u002F如果是水仙花数，才打印\n",[33,4622,4623],{"class":35,"line":1551},[33,4624,4176],{"class":59},[33,4626,4627,4629,4631,4633,4635],{"class":35,"line":1566},[33,4628,4181],{"class":59},[33,4630,2859],{"class":63},[33,4632,3339],{"class":59},[33,4634,2859],{"class":63},[33,4636,2881],{"class":59},[33,4638,4639],{"class":35,"line":1578},[33,4640,4195],{"class":59},[33,4642,4643,4645,4647],{"class":35,"line":1583},[33,4644,3957],{"class":59},[33,4646,3960],{"class":63},[33,4648,2976],{"class":59},[33,4650,4651],{"class":35,"line":3369},[33,4652,3855],{"class":59},[33,4654,4655,4657,4660,4662,4665],{"class":35,"line":3396},[33,4656,3919],{"class":63},[33,4658,4659],{"class":59}," (num ",[33,4661,2726],{"class":63},[33,4663,4664],{"class":39}," 1000",[33,4666,4385],{"class":59},[33,4668,4669],{"class":35,"line":3401},[33,4670,3247],{"class":59},[162,4672,4673],{"start":130},[165,4674,4675],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[23,4677,4679],{"className":1814,"code":4678,"language":1816,"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,4680,4681,4686,4715,4719,4731,4735,4740,4750,4757,4761,4774,4778,4785,4789,4801,4810],{"__ignoreMap":28},[33,4682,4683],{"class":35,"line":36},[33,4684,4685],{"class":87},"\u002F\u002F从数字0-9打印\n",[33,4687,4688,4691,4693,4695,4698,4700,4702,4705,4707,4709,4711,4713],{"class":35,"line":43},[33,4689,4690],{"class":63},"for",[33,4692,109],{"class":59},[33,4694,1828],{"class":63},[33,4696,4697],{"class":59}," i",[33,4699,64],{"class":63},[33,4701,2010],{"class":39},[33,4703,4704],{"class":59},";i",[33,4706,2726],{"class":63},[33,4708,2264],{"class":39},[33,4710,4704],{"class":59},[33,4712,3960],{"class":63},[33,4714,157],{"class":59},[33,4716,4717],{"class":35,"line":130},[33,4718,3228],{"class":59},[33,4720,4721,4723,4725,4727,4729],{"class":35,"line":146},[33,4722,3233],{"class":59},[33,4724,2859],{"class":63},[33,4726,2259],{"class":59},[33,4728,2859],{"class":63},[33,4730,2881],{"class":59},[33,4732,4733],{"class":35,"line":267},[33,4734,3247],{"class":59},[33,4736,4737],{"class":35,"line":275},[33,4738,4739],{"class":87},"\u002F\u002F上式可以进行拆分\n",[33,4741,4742,4744,4746,4748],{"class":35,"line":392},[33,4743,1828],{"class":63},[33,4745,4697],{"class":59},[33,4747,64],{"class":63},[33,4749,923],{"class":39},[33,4751,4752,4754],{"class":35,"line":406},[33,4753,4690],{"class":63},[33,4755,4756],{"class":59},"(;;;)\n",[33,4758,4759],{"class":35,"line":418},[33,4760,3228],{"class":59},[33,4762,4763,4765,4768,4770,4772],{"class":35,"line":425},[33,4764,567],{"class":63},[33,4766,4767],{"class":59},"(i",[33,4769,78],{"class":63},[33,4771,2264],{"class":39},[33,4773,157],{"class":59},[33,4775,4776],{"class":35,"line":1147},[33,4777,3698],{"class":59},[33,4779,4780,4783],{"class":35,"line":1329},[33,4781,4782],{"class":63},"        break",[33,4784,2976],{"class":59},[33,4786,4787],{"class":35,"line":1341},[33,4788,3855],{"class":59},[33,4790,4791,4793,4795,4797,4799],{"class":35,"line":1348},[33,4792,3233],{"class":59},[33,4794,2859],{"class":63},[33,4796,2259],{"class":59},[33,4798,2859],{"class":63},[33,4800,2881],{"class":59},[33,4802,4803,4806,4808],{"class":35,"line":1529},[33,4804,4805],{"class":59},"    i",[33,4807,3960],{"class":63},[33,4809,2976],{"class":59},[33,4811,4812],{"class":35,"line":1546},[33,4813,3247],{"class":59},[19,4815,4816],{},"小练习",[23,4818,4820],{"className":1814,"code":4819,"language":1816,"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,4821,4822,4828,4838,4846,4850,4855,4860,4888,4892,4897,4902,4943,4947,4960,4964,4968,4972,4984,4988,4992],{"__ignoreMap":28},[33,4823,4824,4826],{"class":35,"line":36},[33,4825,3618],{"class":63},[33,4827,3621],{"class":117},[33,4829,4830,4832,4834,4836],{"class":35,"line":43},[33,4831,3626],{"class":63},[33,4833,3629],{"class":63},[33,4835,3633],{"class":3632},[33,4837,2976],{"class":59},[33,4839,4840,4842,4844],{"class":35,"line":130},[33,4841,1828],{"class":63},[33,4843,3642],{"class":3632},[33,4845,943],{"class":59},[33,4847,4848],{"class":35,"line":146},[33,4849,3228],{"class":59},[33,4851,4852],{"class":35,"line":267},[33,4853,4854],{"class":87},"    \u002F\u002F敲桌子案例\n",[33,4856,4857],{"class":35,"line":275},[33,4858,4859],{"class":87},"    \u002F\u002F1.先输出1-100的数字\n",[33,4861,4862,4865,4867,4869,4871,4873,4875,4878,4880,4882,4884,4886],{"class":35,"line":392},[33,4863,4864],{"class":63},"    for",[33,4866,109],{"class":59},[33,4868,1828],{"class":63},[33,4870,4697],{"class":59},[33,4872,64],{"class":63},[33,4874,2036],{"class":39},[33,4876,4877],{"class":59},"; i",[33,4879,837],{"class":63},[33,4881,2129],{"class":39},[33,4883,4877],{"class":59},[33,4885,3960],{"class":63},[33,4887,157],{"class":59},[33,4889,4890],{"class":35,"line":406},[33,4891,3698],{"class":59},[33,4893,4894],{"class":35,"line":418},[33,4895,4896],{"class":87},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[33,4898,4899],{"class":35,"line":425},[33,4900,4901],{"class":87},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[33,4903,4904,4906,4908,4910,4912,4914,4916,4919,4921,4923,4925,4927,4929,4931,4933,4935,4937,4939,4941],{"class":35,"line":1147},[33,4905,4163],{"class":63},[33,4907,4767],{"class":59},[33,4909,2146],{"class":63},[33,4911,2187],{"class":39},[33,4913,573],{"class":63},[33,4915,2010],{"class":39},[33,4917,4918],{"class":63}," ||",[33,4920,4697],{"class":59},[33,4922,2146],{"class":63},[33,4924,2264],{"class":39},[33,4926,573],{"class":63},[33,4928,2187],{"class":39},[33,4930,4918],{"class":63},[33,4932,4697],{"class":59},[33,4934,2401],{"class":63},[33,4936,2264],{"class":39},[33,4938,573],{"class":63},[33,4940,2187],{"class":39},[33,4942,157],{"class":59},[33,4944,4945],{"class":35,"line":1329},[33,4946,4176],{"class":59},[33,4948,4949,4951,4953,4956,4958],{"class":35,"line":1341},[33,4950,4181],{"class":59},[33,4952,2859],{"class":63},[33,4954,4955],{"class":117},"\"敲桌子\"",[33,4957,2859],{"class":63},[33,4959,2881],{"class":59},[33,4961,4962],{"class":35,"line":1348},[33,4963,4195],{"class":59},[33,4965,4966],{"class":35,"line":1529},[33,4967,4236],{"class":63},[33,4969,4970],{"class":35,"line":1546},[33,4971,4176],{"class":59},[33,4973,4974,4976,4978,4980,4982],{"class":35,"line":1551},[33,4975,4181],{"class":59},[33,4977,2859],{"class":63},[33,4979,2259],{"class":59},[33,4981,2859],{"class":63},[33,4983,2881],{"class":59},[33,4985,4986],{"class":35,"line":1566},[33,4987,4195],{"class":59},[33,4989,4990],{"class":35,"line":1578},[33,4991,3855],{"class":59},[33,4993,4994],{"class":35,"line":1583},[33,4995,3247],{"class":59},[19,4997,4998],{},"嵌套实现星图",[23,5000,5002],{"className":1814,"code":5001,"language":1816,"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,5003,5004,5010,5020,5028,5032,5058,5062,5091,5095,5106,5110,5119,5123],{"__ignoreMap":28},[33,5005,5006,5008],{"class":35,"line":36},[33,5007,3618],{"class":63},[33,5009,3621],{"class":117},[33,5011,5012,5014,5016,5018],{"class":35,"line":43},[33,5013,3626],{"class":63},[33,5015,3629],{"class":63},[33,5017,3633],{"class":3632},[33,5019,2976],{"class":59},[33,5021,5022,5024,5026],{"class":35,"line":130},[33,5023,1828],{"class":63},[33,5025,3642],{"class":3632},[33,5027,943],{"class":59},[33,5029,5030],{"class":35,"line":146},[33,5031,3228],{"class":59},[33,5033,5034,5036,5038,5040,5042,5044,5046,5048,5050,5052,5054,5056],{"class":35,"line":267},[33,5035,4864],{"class":63},[33,5037,3332],{"class":59},[33,5039,1828],{"class":63},[33,5041,4697],{"class":59},[33,5043,64],{"class":63},[33,5045,2010],{"class":39},[33,5047,4704],{"class":59},[33,5049,2726],{"class":63},[33,5051,2264],{"class":39},[33,5053,4704],{"class":59},[33,5055,3960],{"class":63},[33,5057,157],{"class":59},[33,5059,5060],{"class":35,"line":275},[33,5061,3698],{"class":59},[33,5063,5064,5067,5069,5071,5074,5076,5078,5081,5083,5085,5087,5089],{"class":35,"line":392},[33,5065,5066],{"class":63},"        for",[33,5068,3332],{"class":59},[33,5070,1828],{"class":63},[33,5072,5073],{"class":59}," j",[33,5075,64],{"class":63},[33,5077,2010],{"class":39},[33,5079,5080],{"class":59},";j",[33,5082,2726],{"class":63},[33,5084,2264],{"class":39},[33,5086,5080],{"class":59},[33,5088,3960],{"class":63},[33,5090,157],{"class":59},[33,5092,5093],{"class":35,"line":406},[33,5094,4176],{"class":59},[33,5096,5097,5099,5101,5104],{"class":35,"line":418},[33,5098,4181],{"class":59},[33,5100,2859],{"class":63},[33,5102,5103],{"class":117},"\"*\"",[33,5105,2976],{"class":59},[33,5107,5108],{"class":35,"line":425},[33,5109,4195],{"class":59},[33,5111,5112,5115,5117],{"class":35,"line":1147},[33,5113,5114],{"class":59},"        cout",[33,5116,2859],{"class":63},[33,5118,2881],{"class":59},[33,5120,5121],{"class":35,"line":1329},[33,5122,3855],{"class":59},[33,5124,5125],{"class":35,"line":1341},[33,5126,3247],{"class":59},[19,5128,5129],{},"乘法口诀表",[23,5131,5133],{"className":1814,"code":5132,"language":1816,"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,5134,5135,5141,5151,5159,5163,5189,5193,5218,5222,5262,5266,5274,5278],{"__ignoreMap":28},[33,5136,5137,5139],{"class":35,"line":36},[33,5138,3618],{"class":63},[33,5140,4002],{"class":117},[33,5142,5143,5145,5147,5149],{"class":35,"line":43},[33,5144,3626],{"class":63},[33,5146,3629],{"class":63},[33,5148,3633],{"class":3632},[33,5150,2976],{"class":59},[33,5152,5153,5155,5157],{"class":35,"line":130},[33,5154,1828],{"class":63},[33,5156,3642],{"class":3632},[33,5158,943],{"class":59},[33,5160,5161],{"class":35,"line":146},[33,5162,3228],{"class":59},[33,5164,5165,5167,5169,5171,5173,5175,5177,5179,5181,5183,5185,5187],{"class":35,"line":267},[33,5166,4864],{"class":63},[33,5168,109],{"class":59},[33,5170,1828],{"class":63},[33,5172,4697],{"class":59},[33,5174,64],{"class":63},[33,5176,2036],{"class":39},[33,5178,4704],{"class":59},[33,5180,2726],{"class":63},[33,5182,2264],{"class":39},[33,5184,4704],{"class":59},[33,5186,3960],{"class":63},[33,5188,157],{"class":59},[33,5190,5191],{"class":35,"line":275},[33,5192,3698],{"class":59},[33,5194,5195,5197,5199,5201,5203,5205,5207,5209,5211,5214,5216],{"class":35,"line":392},[33,5196,5066],{"class":63},[33,5198,109],{"class":59},[33,5200,1828],{"class":63},[33,5202,5073],{"class":59},[33,5204,64],{"class":63},[33,5206,2036],{"class":39},[33,5208,5080],{"class":59},[33,5210,837],{"class":63},[33,5212,5213],{"class":59},"i;j",[33,5215,3960],{"class":63},[33,5217,157],{"class":59},[33,5219,5220],{"class":35,"line":406},[33,5221,4176],{"class":59},[33,5223,5224,5226,5228,5230,5232,5234,5236,5238,5240,5243,5245,5247,5249,5251,5253,5256,5258,5260],{"class":35,"line":418},[33,5225,4181],{"class":59},[33,5227,2859],{"class":63},[33,5229,2284],{"class":59},[33,5231,2859],{"class":63},[33,5233,5103],{"class":117},[33,5235,2859],{"class":63},[33,5237,2259],{"class":59},[33,5239,2859],{"class":63},[33,5241,5242],{"class":117},"\"=\"",[33,5244,2859],{"class":63},[33,5246,2259],{"class":59},[33,5248,1540],{"class":63},[33,5250,2284],{"class":59},[33,5252,2859],{"class":63},[33,5254,5255],{"class":117},"'",[33,5257,2916],{"class":39},[33,5259,5255],{"class":117},[33,5261,2976],{"class":59},[33,5263,5264],{"class":35,"line":425},[33,5265,4195],{"class":59},[33,5267,5268,5270,5272],{"class":35,"line":1147},[33,5269,5114],{"class":59},[33,5271,2859],{"class":63},[33,5273,2881],{"class":59},[33,5275,5276],{"class":35,"line":1329},[33,5277,3855],{"class":59},[33,5279,5280],{"class":35,"line":1341},[33,5281,3247],{"class":59},[633,5283,5285],{"id":5284},"_163跳出语句","1.6.3跳出语句",[162,5287,5288],{},[165,5289,5290],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5292,5293],{},"break使用时机：",[2822,5295,5296,5299,5302],{},[165,5297,5298],{},"出现在switch条件语句中，作用是终止case并跳出switch",[165,5300,5301],{},"出现在循环结构中，作用是跳出当前的循环结构",[165,5303,5304],{},"出现在嵌套循环中，跳出最近的内层循环语句",[162,5306,5307,5310],{"start":43},[165,5308,5309],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[165,5311,5312],{},"goto语句\n语法：goto 标记;",[19,5314,5315],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[23,5317,5319],{"className":1814,"code":5318,"language":1816,"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,5320,5321,5329,5333,5346,5356,5369,5382,5395,5402,5418],{"__ignoreMap":28},[33,5322,5323,5325,5327],{"class":35,"line":36},[33,5324,1828],{"class":63},[33,5326,3642],{"class":3632},[33,5328,943],{"class":59},[33,5330,5331],{"class":35,"line":43},[33,5332,3228],{"class":59},[33,5334,5335,5337,5339,5342,5344],{"class":35,"line":130},[33,5336,3233],{"class":59},[33,5338,2859],{"class":63},[33,5340,5341],{"class":117},"\"1\"",[33,5343,2859],{"class":63},[33,5345,2881],{"class":59},[33,5347,5348,5351,5354],{"class":35,"line":146},[33,5349,5350],{"class":63},"    goto",[33,5352,5353],{"class":3632}," FLAG",[33,5355,2976],{"class":59},[33,5357,5358,5360,5362,5365,5367],{"class":35,"line":267},[33,5359,3233],{"class":59},[33,5361,2859],{"class":63},[33,5363,5364],{"class":117},"\"2\"",[33,5366,2859],{"class":63},[33,5368,2881],{"class":59},[33,5370,5371,5373,5375,5378,5380],{"class":35,"line":275},[33,5372,3233],{"class":59},[33,5374,2859],{"class":63},[33,5376,5377],{"class":117},"\"3\"",[33,5379,2859],{"class":63},[33,5381,2881],{"class":59},[33,5383,5384,5386,5388,5391,5393],{"class":35,"line":392},[33,5385,3233],{"class":59},[33,5387,2859],{"class":63},[33,5389,5390],{"class":117},"\"4\"",[33,5392,2859],{"class":63},[33,5394,2881],{"class":59},[33,5396,5397,5400],{"class":35,"line":406},[33,5398,5399],{"class":3632},"    FLAG",[33,5401,143],{"class":59},[33,5403,5404,5406,5408,5411,5413,5415],{"class":35,"line":418},[33,5405,3233],{"class":59},[33,5407,2859],{"class":63},[33,5409,5410],{"class":117},"\"5\"",[33,5412,2859],{"class":63},[33,5414,2924],{"class":59},[33,5416,5417],{"class":87},"\u002F\u002F跳过了2,3,4,直接到5\n",[33,5419,5420],{"class":35,"line":425},[33,5421,3247],{"class":59},[14,5423,5425],{"id":5424},"_17数组","1.7数组",[633,5427,5429],{"id":5428},"_171一维数组","1.7.1一维数组",[162,5431,5432],{},[165,5433,5434],{},"一维数组定义方式",[1956,5436,5437,5447],{},[1959,5438,5439],{},[1962,5440,5441,5444],{},[1965,5442,5443],{},"方式",[1965,5445,5446],{},"注意事项",[2003,5448,5449,5463,5473],{},[1962,5450,5451,5457],{},[2008,5452,5453,5454,1876],{},"数据类型 数组名",[33,5455,5456],{},"数组长度",[2008,5458,5459,5460,5462],{},"这种方式是先定义再arr",[33,5461,2259],{},"赋值",[1962,5464,5465,5470],{},[2008,5466,5453,5467,5469],{},[33,5468,5456],{},"={值1,值2....};",[2008,5471,5472],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1962,5474,5475,5479],{},[2008,5476,5453,5477,5469],{},[33,5478],{},[2008,5480,5481,5482,5484],{},"int arr",[33,5483],{},";这是不正确的，按照这样的方式定义必须有初始长度",[162,5486,5487],{"start":43},[165,5488,5489],{},"一维数组数组名\n用途：",[2822,5491,5492],{},[165,5493,5494],{},"1.可以统计整个数组在内存中的长度：",[23,5496,5498],{"className":1814,"code":5497,"language":1816,"meta":28,"style":28},"sizeof(arr);\nsizeof(arr[0]);\n",[30,5499,5500,5507],{"__ignoreMap":28},[33,5501,5502,5504],{"class":35,"line":36},[33,5503,1823],{"class":63},[33,5505,5506],{"class":59},"(arr);\n",[33,5508,5509,5511,5514,5516],{"class":35,"line":43},[33,5510,1823],{"class":63},[33,5512,5513],{"class":59},"(arr[",[33,5515,2010],{"class":39},[33,5517,5518],{"class":59},"]);\n",[2822,5520,5521],{},[165,5522,5523],{},"2.可以获取数组在内存中的首地址:",[23,5525,5527],{"className":1814,"code":5526,"language":1816,"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,5528,5529,5534,5547,5552],{"__ignoreMap":28},[33,5530,5531],{"class":35,"line":36},[33,5532,5533],{"class":87},"\u002F\u002F查看16进制的首地址\n",[33,5535,5536,5538,5540,5543,5545],{"class":35,"line":43},[33,5537,3052],{"class":59},[33,5539,2859],{"class":63},[33,5541,5542],{"class":59},"arr",[33,5544,2859],{"class":63},[33,5546,2881],{"class":59},[33,5548,5549],{"class":35,"line":130},[33,5550,5551],{"class":87},"\u002F\u002F看10进制数\n",[33,5553,5554,5556,5558,5560,5562,5564,5566,5569,5571,5573,5575],{"class":35,"line":146},[33,5555,3052],{"class":59},[33,5557,2859],{"class":63},[33,5559,109],{"class":59},[33,5561,1828],{"class":63},[33,5563,2247],{"class":59},[33,5565,2171],{"class":63},[33,5567,5568],{"class":59},"arr[",[33,5570,2010],{"class":39},[33,5572,2756],{"class":59},[33,5574,2859],{"class":63},[33,5576,2881],{"class":59},[19,5578,5579],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2822,5581,5582],{},[165,5583,5584],{},"1️⃣五只小猪称体重",[23,5586,5588],{"className":1814,"code":5587,"language":1816,"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,5589,5590,5596,5606,5614,5618,5658,5671,5697,5701,5713,5717,5727,5731,5735,5748,5757],{"__ignoreMap":28},[33,5591,5592,5594],{"class":35,"line":36},[33,5593,3618],{"class":63},[33,5595,3621],{"class":117},[33,5597,5598,5600,5602,5604],{"class":35,"line":43},[33,5599,3626],{"class":63},[33,5601,3629],{"class":63},[33,5603,3633],{"class":3632},[33,5605,2976],{"class":59},[33,5607,5608,5610,5612],{"class":35,"line":130},[33,5609,1828],{"class":63},[33,5611,3642],{"class":3632},[33,5613,943],{"class":59},[33,5615,5616],{"class":35,"line":146},[33,5617,3228],{"class":59},[33,5619,5620,5622,5625,5627,5629,5631,5633,5636,5638,5641,5643,5645,5647,5650,5652,5655],{"class":35,"line":267},[33,5621,3653],{"class":63},[33,5623,5624],{"class":59}," arr[",[33,5626,2137],{"class":39},[33,5628,2756],{"class":59},[33,5630,64],{"class":63},[33,5632,1005],{"class":59},[33,5634,5635],{"class":39},"300",[33,5637,2196],{"class":59},[33,5639,5640],{"class":39},"350",[33,5642,2196],{"class":59},[33,5644,3391],{"class":39},[33,5646,2196],{"class":59},[33,5648,5649],{"class":39},"400",[33,5651,2196],{"class":59},[33,5653,5654],{"class":39},"250",[33,5656,5657],{"class":59},"};\n",[33,5659,5660,5662,5665,5667,5669],{"class":35,"line":275},[33,5661,3653],{"class":63},[33,5663,5664],{"class":59}," tmp",[33,5666,64],{"class":63},[33,5668,2010],{"class":39},[33,5670,2976],{"class":59},[33,5672,5673,5675,5677,5679,5681,5683,5685,5687,5689,5691,5693,5695],{"class":35,"line":392},[33,5674,4864],{"class":63},[33,5676,3332],{"class":59},[33,5678,1828],{"class":63},[33,5680,4697],{"class":59},[33,5682,64],{"class":63},[33,5684,2010],{"class":39},[33,5686,4704],{"class":59},[33,5688,2726],{"class":63},[33,5690,2137],{"class":39},[33,5692,4704],{"class":59},[33,5694,3960],{"class":63},[33,5696,157],{"class":59},[33,5698,5699],{"class":35,"line":406},[33,5700,3698],{"class":59},[33,5702,5703,5705,5708,5710],{"class":35,"line":418},[33,5704,4163],{"class":63},[33,5706,5707],{"class":59},"(tmp",[33,5709,2726],{"class":63},[33,5711,5712],{"class":59},"arr[i])\n",[33,5714,5715],{"class":35,"line":425},[33,5716,4176],{"class":59},[33,5718,5719,5722,5724],{"class":35,"line":1147},[33,5720,5721],{"class":59},"            tmp",[33,5723,64],{"class":63},[33,5725,5726],{"class":59},"arr[i];\n",[33,5728,5729],{"class":35,"line":1329},[33,5730,4195],{"class":59},[33,5732,5733],{"class":35,"line":1341},[33,5734,3855],{"class":59},[33,5736,5737,5739,5741,5744,5746],{"class":35,"line":1348},[33,5738,3233],{"class":59},[33,5740,2859],{"class":63},[33,5742,5743],{"class":59},"tmp",[33,5745,2859],{"class":63},[33,5747,2881],{"class":59},[33,5749,5750,5753,5755],{"class":35,"line":1529},[33,5751,5752],{"class":63},"    return",[33,5754,829],{"class":39},[33,5756,2976],{"class":59},[33,5758,5759],{"class":35,"line":1546},[33,5760,3247],{"class":59},[2822,5762,5763],{},[165,5764,5765],{},"2️⃣数组元素逆置",[23,5767,5769],{"className":1814,"code":5768,"language":1816,"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,5770,5771,5776,5782,5792,5800,5804,5839,5855,5887,5900,5905,5910,5922,5932,5942,5947,5956,5966,5971,5976,6003,6007,6023,6027,6038,6047],{"__ignoreMap":28},[33,5772,5773],{"class":35,"line":36},[33,5774,5775],{"class":87},"\u002F\u002F元素逆置\n",[33,5777,5778,5780],{"class":35,"line":43},[33,5779,3618],{"class":63},[33,5781,3621],{"class":117},[33,5783,5784,5786,5788,5790],{"class":35,"line":130},[33,5785,3626],{"class":63},[33,5787,3629],{"class":63},[33,5789,3633],{"class":3632},[33,5791,2976],{"class":59},[33,5793,5794,5796,5798],{"class":35,"line":146},[33,5795,1828],{"class":63},[33,5797,3642],{"class":3632},[33,5799,943],{"class":59},[33,5801,5802],{"class":35,"line":267},[33,5803,3228],{"class":59},[33,5805,5806,5809,5811,5813,5815,5817,5819,5821,5823,5825,5827,5829,5831,5833,5835,5837],{"class":35,"line":275},[33,5807,5808],{"class":63},"   int",[33,5810,5624],{"class":59},[33,5812,2137],{"class":39},[33,5814,2756],{"class":59},[33,5816,64],{"class":63},[33,5818,1005],{"class":59},[33,5820,2036],{"class":39},[33,5822,2196],{"class":59},[33,5824,1897],{"class":39},[33,5826,2196],{"class":59},[33,5828,1891],{"class":39},[33,5830,2196],{"class":59},[33,5832,2111],{"class":39},[33,5834,2196],{"class":59},[33,5836,2137],{"class":39},[33,5838,5657],{"class":59},[33,5840,5841,5843,5846,5848,5850,5852],{"class":35,"line":392},[33,5842,5808],{"class":63},[33,5844,5845],{"class":59}," start",[33,5847,64],{"class":63},[33,5849,2010],{"class":39},[33,5851,1876],{"class":59},[33,5853,5854],{"class":87},"\u002F\u002F起始下标\n",[33,5856,5857,5859,5862,5865,5868,5871,5873,5875,5878,5880,5882,5884],{"class":35,"line":406},[33,5858,5808],{"class":63},[33,5860,5861],{"class":59}," end",[33,5863,5864],{"class":63},"=sizeof",[33,5866,5867],{"class":59},"(arr)",[33,5869,5870],{"class":63},"\u002Fsizeof",[33,5872,5513],{"class":59},[33,5874,2010],{"class":39},[33,5876,5877],{"class":59},"])",[33,5879,2349],{"class":63},[33,5881,2036],{"class":39},[33,5883,1876],{"class":59},[33,5885,5886],{"class":87},"\u002F\u002F结束下标\n",[33,5888,5889,5892,5895,5897],{"class":35,"line":418},[33,5890,5891],{"class":63},"   while",[33,5893,5894],{"class":59}," (start",[33,5896,2726],{"class":63},[33,5898,5899],{"class":59},"end)\n",[33,5901,5902],{"class":35,"line":425},[33,5903,5904],{"class":59},"   {\n",[33,5906,5907],{"class":35,"line":1147},[33,5908,5909],{"class":87},"    \u002F\u002F实现元素互换代码\n",[33,5911,5912,5914,5917,5919],{"class":35,"line":1329},[33,5913,3653],{"class":63},[33,5915,5916],{"class":59}," temp",[33,5918,64],{"class":63},[33,5920,5921],{"class":59},"arr[start];\n",[33,5923,5924,5927,5929],{"class":35,"line":1341},[33,5925,5926],{"class":59},"    arr[start]",[33,5928,64],{"class":63},[33,5930,5931],{"class":59},"arr[end];\n",[33,5933,5934,5937,5939],{"class":35,"line":1348},[33,5935,5936],{"class":59},"    arr[end]",[33,5938,64],{"class":63},[33,5940,5941],{"class":59},"temp;\n",[33,5943,5944],{"class":35,"line":1529},[33,5945,5946],{"class":87},"    \u002F\u002F下标更新\n",[33,5948,5949,5952,5954],{"class":35,"line":1546},[33,5950,5951],{"class":59},"    start",[33,5953,3960],{"class":63},[33,5955,2976],{"class":59},[33,5957,5958,5961,5964],{"class":35,"line":1551},[33,5959,5960],{"class":59},"    end",[33,5962,5963],{"class":63},"--",[33,5965,2976],{"class":59},[33,5967,5968],{"class":35,"line":1566},[33,5969,5970],{"class":59},"   }\n",[33,5972,5973],{"class":35,"line":1578},[33,5974,5975],{"class":87},"   \u002F\u002F输出逆置后的数组\n",[33,5977,5978,5981,5983,5985,5987,5989,5991,5993,5995,5997,5999,6001],{"class":35,"line":1583},[33,5979,5980],{"class":63},"   for",[33,5982,3332],{"class":59},[33,5984,1828],{"class":63},[33,5986,4697],{"class":59},[33,5988,64],{"class":63},[33,5990,2010],{"class":39},[33,5992,4704],{"class":59},[33,5994,2726],{"class":63},[33,5996,2137],{"class":39},[33,5998,4704],{"class":59},[33,6000,3960],{"class":63},[33,6002,157],{"class":59},[33,6004,6005],{"class":35,"line":3369},[33,6006,5904],{"class":59},[33,6008,6009,6011,6013,6016,6018,6021],{"class":35,"line":3396},[33,6010,3233],{"class":59},[33,6012,2859],{"class":63},[33,6014,6015],{"class":59},"arr[i]",[33,6017,2859],{"class":63},[33,6019,6020],{"class":117},"\" \"",[33,6022,2976],{"class":59},[33,6024,6025],{"class":35,"line":3401},[33,6026,5970],{"class":59},[33,6028,6029,6032,6034,6036],{"class":35,"line":3418},[33,6030,6031],{"class":3632},"   system",[33,6033,109],{"class":59},[33,6035,3976],{"class":117},[33,6037,4385],{"class":59},[33,6039,6040,6043,6045],{"class":35,"line":3423},[33,6041,6042],{"class":63},"   return",[33,6044,829],{"class":39},[33,6046,2976],{"class":59},[33,6048,6049],{"class":35,"line":3428},[33,6050,3247],{"class":59},[2822,6052,6053],{},[165,6054,6055],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[23,6057,6059],{"className":1814,"code":6058,"language":1816,"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,6060,6061,6066,6072,6082,6090,6094,6146,6159,6185,6189,6203,6207,6212,6217,6247,6251,6256,6290,6294,6299,6319,6324,6336,6352,6367,6372,6376,6380,6393,6419,6423,6437,6441,6449],{"__ignoreMap":28},[33,6062,6063],{"class":35,"line":36},[33,6064,6065],{"class":87},"\u002F\u002F冒泡排序,升序\n",[33,6067,6068,6070],{"class":35,"line":43},[33,6069,3618],{"class":63},[33,6071,3621],{"class":117},[33,6073,6074,6076,6078,6080],{"class":35,"line":130},[33,6075,3626],{"class":63},[33,6077,3629],{"class":63},[33,6079,3633],{"class":3632},[33,6081,2976],{"class":59},[33,6083,6084,6086,6088],{"class":35,"line":146},[33,6085,1828],{"class":63},[33,6087,3642],{"class":3632},[33,6089,943],{"class":59},[33,6091,6092],{"class":35,"line":267},[33,6093,3228],{"class":59},[33,6095,6096,6098,6100,6102,6105,6107,6110,6112,6114,6116,6118,6120,6122,6124,6126,6128,6130,6132,6134,6136,6138,6140,6142,6144],{"class":35,"line":275},[33,6097,3653],{"class":63},[33,6099,5624],{"class":59},[33,6101,2238],{"class":39},[33,6103,6104],{"class":59},"] ",[33,6106,64],{"class":63},[33,6108,6109],{"class":59}," {",[33,6111,2111],{"class":39},[33,6113,2196],{"class":59},[33,6115,1897],{"class":39},[33,6117,2196],{"class":59},[33,6119,2213],{"class":39},[33,6121,2196],{"class":59},[33,6123,2010],{"class":39},[33,6125,2196],{"class":59},[33,6127,2137],{"class":39},[33,6129,2196],{"class":59},[33,6131,2187],{"class":39},[33,6133,2196],{"class":59},[33,6135,2036],{"class":39},[33,6137,2196],{"class":59},[33,6139,1891],{"class":39},[33,6141,2196],{"class":59},[33,6143,2238],{"class":39},[33,6145,5657],{"class":59},[33,6147,6148,6150,6152,6155,6157],{"class":35,"line":392},[33,6149,3233],{"class":59},[33,6151,2859],{"class":63},[33,6153,6154],{"class":117},"\"排序前：\"",[33,6156,2859],{"class":63},[33,6158,2881],{"class":59},[33,6160,6161,6163,6165,6167,6169,6171,6173,6175,6177,6179,6181,6183],{"class":35,"line":406},[33,6162,4864],{"class":63},[33,6164,3332],{"class":59},[33,6166,1828],{"class":63},[33,6168,4697],{"class":59},[33,6170,64],{"class":63},[33,6172,2010],{"class":39},[33,6174,4704],{"class":59},[33,6176,2726],{"class":63},[33,6178,2238],{"class":39},[33,6180,4704],{"class":59},[33,6182,3960],{"class":63},[33,6184,157],{"class":59},[33,6186,6187],{"class":35,"line":418},[33,6188,3698],{"class":59},[33,6190,6191,6193,6195,6197,6199,6201],{"class":35,"line":425},[33,6192,5114],{"class":59},[33,6194,2859],{"class":63},[33,6196,6015],{"class":59},[33,6198,2859],{"class":63},[33,6200,6020],{"class":117},[33,6202,2976],{"class":59},[33,6204,6205],{"class":35,"line":1147},[33,6206,3855],{"class":59},[33,6208,6209],{"class":35,"line":1329},[33,6210,6211],{"class":87},"    \u002F\u002F开始冒泡排序\n",[33,6213,6214],{"class":35,"line":1341},[33,6215,6216],{"class":87},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[33,6218,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241,6243,6245],{"class":35,"line":1348},[33,6220,4864],{"class":63},[33,6222,3332],{"class":59},[33,6224,1828],{"class":63},[33,6226,4697],{"class":59},[33,6228,64],{"class":63},[33,6230,2010],{"class":39},[33,6232,4704],{"class":59},[33,6234,2726],{"class":63},[33,6236,2238],{"class":39},[33,6238,2349],{"class":63},[33,6240,2036],{"class":39},[33,6242,4704],{"class":59},[33,6244,3960],{"class":63},[33,6246,157],{"class":59},[33,6248,6249],{"class":35,"line":1529},[33,6250,3698],{"class":59},[33,6252,6253],{"class":35,"line":1546},[33,6254,6255],{"class":87},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[33,6257,6258,6260,6262,6264,6266,6268,6270,6272,6274,6276,6278,6280,6282,6284,6286,6288],{"class":35,"line":1551},[33,6259,5066],{"class":63},[33,6261,3332],{"class":59},[33,6263,1828],{"class":63},[33,6265,5073],{"class":59},[33,6267,64],{"class":63},[33,6269,2010],{"class":39},[33,6271,5080],{"class":59},[33,6273,2726],{"class":63},[33,6275,2238],{"class":39},[33,6277,2349],{"class":63},[33,6279,2259],{"class":59},[33,6281,2349],{"class":63},[33,6283,2036],{"class":39},[33,6285,5080],{"class":59},[33,6287,3960],{"class":63},[33,6289,157],{"class":59},[33,6291,6292],{"class":35,"line":1566},[33,6293,4176],{"class":59},[33,6295,6296],{"class":35,"line":1578},[33,6297,6298],{"class":87},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[33,6300,6301,6304,6307,6309,6312,6314,6316],{"class":35,"line":1583},[33,6302,6303],{"class":63},"            if",[33,6305,6306],{"class":59},"(arr[j]",[33,6308,2775],{"class":63},[33,6310,6311],{"class":59},"arr[j",[33,6313,2298],{"class":63},[33,6315,2036],{"class":39},[33,6317,6318],{"class":59},"])\n",[33,6320,6321],{"class":35,"line":3369},[33,6322,6323],{"class":59},"            {\n",[33,6325,6326,6329,6331,6333],{"class":35,"line":3396},[33,6327,6328],{"class":63},"                int",[33,6330,5916],{"class":59},[33,6332,64],{"class":63},[33,6334,6335],{"class":59},"arr[j];\n",[33,6337,6338,6341,6343,6345,6347,6349],{"class":35,"line":3401},[33,6339,6340],{"class":59},"                arr[j]",[33,6342,64],{"class":63},[33,6344,6311],{"class":59},[33,6346,2298],{"class":63},[33,6348,2036],{"class":39},[33,6350,6351],{"class":59},"];\n",[33,6353,6354,6357,6359,6361,6363,6365],{"class":35,"line":3418},[33,6355,6356],{"class":59},"                arr[j",[33,6358,2298],{"class":63},[33,6360,2036],{"class":39},[33,6362,2756],{"class":59},[33,6364,64],{"class":63},[33,6366,5941],{"class":59},[33,6368,6369],{"class":35,"line":3423},[33,6370,6371],{"class":59},"            }\n",[33,6373,6374],{"class":35,"line":3428},[33,6375,4195],{"class":59},[33,6377,6378],{"class":35,"line":3433},[33,6379,3855],{"class":59},[33,6381,6382,6384,6386,6389,6391],{"class":35,"line":3447},[33,6383,3233],{"class":59},[33,6385,2859],{"class":63},[33,6387,6388],{"class":117},"\"排序后：\"",[33,6390,2859],{"class":63},[33,6392,2881],{"class":59},[33,6394,6395,6397,6399,6401,6403,6405,6407,6409,6411,6413,6415,6417],{"class":35,"line":3452},[33,6396,4864],{"class":63},[33,6398,3332],{"class":59},[33,6400,1828],{"class":63},[33,6402,4697],{"class":59},[33,6404,64],{"class":63},[33,6406,2010],{"class":39},[33,6408,4704],{"class":59},[33,6410,2726],{"class":63},[33,6412,2238],{"class":39},[33,6414,4704],{"class":59},[33,6416,3960],{"class":63},[33,6418,157],{"class":59},[33,6420,6421],{"class":35,"line":4243},[33,6422,3698],{"class":59},[33,6424,6425,6427,6429,6431,6433,6435],{"class":35,"line":4257},[33,6426,5114],{"class":59},[33,6428,2859],{"class":63},[33,6430,6015],{"class":59},[33,6432,2859],{"class":63},[33,6434,6020],{"class":117},[33,6436,2976],{"class":59},[33,6438,6439],{"class":35,"line":4265},[33,6440,3855],{"class":59},[33,6442,6443,6445,6447],{"class":35,"line":4270},[33,6444,5752],{"class":63},[33,6446,829],{"class":39},[33,6448,2976],{"class":59},[33,6450,6451],{"class":35,"line":4276},[33,6452,3247],{"class":59},[633,6454,6456],{"id":6455},"_172二维数组","1.7.2二维数组",[162,6458,6459],{},[165,6460,6461],{},"二维数组的四种定义方式",[1956,6463,6464,6473],{},[1959,6465,6466],{},[1962,6467,6468,6471],{},[1965,6469,6470],{},"序号",[1965,6472,5443],{},[2003,6474,6475,6485,6494,6503,6512],{},[1962,6476,6477,6479],{},[2008,6478,2036],{},[2008,6480,6481,6482,1876],{},"数据类型 数组名[行数]",[33,6483,6484],{},"列数",[1962,6486,6487,6489],{},[2008,6488,1897],{},[2008,6490,6481,6491,6493],{},[33,6492,6484],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1962,6495,6496,6498],{},[2008,6497,1891],{},[2008,6499,6481,6500,6502],{},[33,6501,6484],{},"={数据1,数据2,数据3...}",[1962,6504,6505,6507],{},[2008,6506,2111],{},[2008,6508,6509,6510,6502],{},"数据类型 数组名[]",[33,6511,6484],{},[1962,6513,6514,6517],{},[2008,6515,6516],{},"注意：不能只省略列数",[2008,6518],{},[162,6520,6521],{"start":43},[165,6522,6523],{},"二维数组数组名",[2822,6525,6526,6529],{},[165,6527,6528],{},"1.查看二维数组所占内存空间",[165,6530,6531],{},"2.获取二维数组首地址",[19,6533,6534],{},"已知二维数组，求二维数组的行数与列数",[23,6536,6538],{"className":1814,"code":6537,"language":1816,"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,6539,6540,6548,6552,6570,6574,6592,6608,6613,6638,6671],{"__ignoreMap":28},[33,6541,6542,6544,6546],{"class":35,"line":36},[33,6543,1828],{"class":63},[33,6545,3642],{"class":3632},[33,6547,943],{"class":59},[33,6549,6550],{"class":35,"line":43},[33,6551,3228],{"class":59},[33,6553,6554,6556,6558,6560,6563,6565,6567],{"class":35,"line":130},[33,6555,3653],{"class":63},[33,6557,5624],{"class":59},[33,6559,1897],{"class":39},[33,6561,6562],{"class":59},"][",[33,6564,1891],{"class":39},[33,6566,2756],{"class":59},[33,6568,6569],{"class":63},"=\n",[33,6571,6572],{"class":35,"line":146},[33,6573,3698],{"class":59},[33,6575,6576,6579,6581,6583,6585,6587,6589],{"class":35,"line":267},[33,6577,6578],{"class":59},"        {",[33,6580,2036],{"class":39},[33,6582,2196],{"class":59},[33,6584,1897],{"class":39},[33,6586,2196],{"class":59},[33,6588,1891],{"class":39},[33,6590,6591],{"class":59},"},\n",[33,6593,6594,6596,6598,6600,6602,6604,6606],{"class":35,"line":275},[33,6595,6578],{"class":59},[33,6597,2111],{"class":39},[33,6599,2196],{"class":59},[33,6601,2137],{"class":39},[33,6603,2196],{"class":59},[33,6605,2162],{"class":39},[33,6607,3247],{"class":59},[33,6609,6610],{"class":35,"line":392},[33,6611,6612],{"class":59},"    };\n",[33,6614,6615,6617,6619,6622,6624,6626,6628,6630,6632,6634,6636],{"class":35,"line":406},[33,6616,3233],{"class":59},[33,6618,2859],{"class":63},[33,6620,6621],{"class":117},"\"二维数组的行数\"",[33,6623,3055],{"class":63},[33,6625,5867],{"class":59},[33,6627,5870],{"class":63},[33,6629,5513],{"class":59},[33,6631,2010],{"class":39},[33,6633,5877],{"class":59},[33,6635,2859],{"class":63},[33,6637,2881],{"class":59},[33,6639,6640,6642,6644,6647,6649,6651,6653,6655,6657,6659,6661,6663,6665,6667,6669],{"class":35,"line":418},[33,6641,3233],{"class":59},[33,6643,2859],{"class":63},[33,6645,6646],{"class":117},"\"二维数组的列数\"",[33,6648,3055],{"class":63},[33,6650,5513],{"class":59},[33,6652,2010],{"class":39},[33,6654,5877],{"class":59},[33,6656,5870],{"class":63},[33,6658,5513],{"class":59},[33,6660,2010],{"class":39},[33,6662,6562],{"class":59},[33,6664,2010],{"class":39},[33,6666,5877],{"class":59},[33,6668,2859],{"class":63},[33,6670,2881],{"class":59},[33,6672,6673],{"class":35,"line":425},[33,6674,3247],{"class":59},[19,6676,6677],{},"查看二维数组首地址",[23,6679,6681],{"className":1814,"code":6680,"language":1816,"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,6682,6683,6700,6726,6751],{"__ignoreMap":28},[33,6684,6685,6687,6689,6692,6694,6696,6698],{"class":35,"line":36},[33,6686,3052],{"class":59},[33,6688,2859],{"class":63},[33,6690,6691],{"class":117},"\"二维数组首地址：\"",[33,6693,2859],{"class":63},[33,6695,5542],{"class":59},[33,6697,2859],{"class":63},[33,6699,2881],{"class":59},[33,6701,6702,6704,6706,6709,6711,6713,6715,6718,6720,6722,6724],{"class":35,"line":43},[33,6703,3052],{"class":59},[33,6705,2859],{"class":63},[33,6707,6708],{"class":117},"\"二维数组第一行的首地址：\"",[33,6710,2859],{"class":63},[33,6712,109],{"class":59},[33,6714,1828],{"class":63},[33,6716,6717],{"class":59},")arr[",[33,6719,2010],{"class":39},[33,6721,2756],{"class":59},[33,6723,2859],{"class":63},[33,6725,2881],{"class":59},[33,6727,6728,6730,6732,6735,6737,6739,6741,6743,6745,6747,6749],{"class":35,"line":130},[33,6729,3052],{"class":59},[33,6731,2859],{"class":63},[33,6733,6734],{"class":117},"\"二维数组第二行的首地址：\"",[33,6736,2859],{"class":63},[33,6738,109],{"class":59},[33,6740,1828],{"class":63},[33,6742,6717],{"class":59},[33,6744,2036],{"class":39},[33,6746,2756],{"class":59},[33,6748,2859],{"class":63},[33,6750,2881],{"class":59},[33,6752,6753,6755,6757,6760,6762,6764,6766,6768,6770,6772,6774,6776,6778,6780,6782,6784],{"class":35,"line":146},[33,6754,3052],{"class":59},[33,6756,2859],{"class":63},[33,6758,6759],{"class":117},"\"二维数组第一个元素的首地址:\"",[33,6761,2859],{"class":63},[33,6763,109],{"class":59},[33,6765,1828],{"class":63},[33,6767,2247],{"class":59},[33,6769,2171],{"class":63},[33,6771,5568],{"class":59},[33,6773,2010],{"class":39},[33,6775,6562],{"class":59},[33,6777,2010],{"class":39},[33,6779,2756],{"class":59},[33,6781,2859],{"class":63},[33,6783,2924],{"class":59},[33,6785,6786],{"class":87},"\u002F\u002F对于数，要加取址符\n",[1729,6788,6789],{},"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":43,"depth":43,"links":6791},[6792,6793,6794,6802,6803,6809,6814],{"id":1769,"depth":43,"text":1770},{"id":1776,"depth":43,"text":1777},{"id":1791,"depth":43,"text":1792,"children":6795},[6796,6797,6798,6799,6800,6801],{"id":1795,"depth":130,"text":1796},{"id":1840,"depth":130,"text":1841},{"id":1905,"depth":130,"text":1906},{"id":2840,"depth":130,"text":2841},{"id":2930,"depth":130,"text":2931},{"id":3026,"depth":130,"text":3027},{"id":3068,"depth":43,"text":3069},{"id":3136,"depth":43,"text":3137,"children":6804},[6805,6806,6807,6808],{"id":3140,"depth":130,"text":3141},{"id":3162,"depth":130,"text":3163},{"id":3171,"depth":130,"text":3172},{"id":3180,"depth":130,"text":3181},{"id":3189,"depth":43,"text":3190,"children":6810},[6811,6812,6813],{"id":3193,"depth":130,"text":3194},{"id":3873,"depth":130,"text":3874},{"id":5284,"depth":130,"text":5285},{"id":5424,"depth":43,"text":5425,"children":6815},[6816,6817],{"id":5428,"depth":130,"text":5429},{"id":6455,"depth":130,"text":6456},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1761,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6824,"title":6825,"body":6826,"description":28,"extension":1752,"meta":7925,"navigation":126,"path":7926,"seo":7927,"stem":7928,"__hash__":7929},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6827,"toc":7917},[6828,6831,6835,6843,6851,6854,6920,6924,6927,7003,7007,7010,7013,7016,7229,7233,7238,7302,7307,7374,7379,7469,7472,7577,7581,7584,7590,7734,7738,7741,7755,7758,7803,7806,7914],[10,6829,6825],{"id":6830},"_2函数",[14,6832,6834],{"id":6833},"_21函数概述","2.1函数概述",[162,6836,6837,6840],{},[165,6838,6839],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[165,6841,6842],{},"语法：",[23,6844,6849],{"className":6845,"code":6847,"language":6848,"meta":28},[6846],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[30,6850,6847],{"__ignoreMap":28},[19,6852,6853],{},"小案例",[23,6855,6857],{"className":1814,"code":6856,"language":1816,"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,6858,6859,6864,6888,6892,6909,6916],{"__ignoreMap":28},[33,6860,6861],{"class":35,"line":36},[33,6862,6863],{"class":87},"\u002F\u002Fnum1,num2形参\n",[33,6865,6866,6868,6871,6873,6875,6879,6881,6883,6886],{"class":35,"line":43},[33,6867,1828],{"class":63},[33,6869,6870],{"class":3632}," add",[33,6872,109],{"class":59},[33,6874,1828],{"class":63},[33,6876,6878],{"class":6877},"s4XuR"," num1",[33,6880,2196],{"class":59},[33,6882,1828],{"class":63},[33,6884,6885],{"class":6877}," num2",[33,6887,157],{"class":59},[33,6889,6890],{"class":35,"line":130},[33,6891,3228],{"class":59},[33,6893,6894,6896,6899,6901,6904,6906],{"class":35,"line":146},[33,6895,3653],{"class":63},[33,6897,6898],{"class":59}," sum",[33,6900,64],{"class":63},[33,6902,6903],{"class":59},"num1",[33,6905,2298],{"class":63},[33,6907,6908],{"class":59},"num2;\n",[33,6910,6911,6913],{"class":35,"line":267},[33,6912,5752],{"class":63},[33,6914,6915],{"class":59}," sum;\n",[33,6917,6918],{"class":35,"line":275},[33,6919,3247],{"class":59},[14,6921,6923],{"id":6922},"_22函数调用","2.2函数调用",[19,6925,6926],{},"调用刚刚写的求和函数",[23,6928,6930],{"className":1814,"code":6929,"language":1816,"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,6931,6932,6940,6944,6949,6961,6973,6982,6987,6999],{"__ignoreMap":28},[33,6933,6934,6936,6938],{"class":35,"line":36},[33,6935,1828],{"class":63},[33,6937,3642],{"class":3632},[33,6939,943],{"class":59},[33,6941,6942],{"class":35,"line":43},[33,6943,3228],{"class":59},[33,6945,6946],{"class":35,"line":130},[33,6947,6948],{"class":87},"    \u002F\u002Fa,b实参\n",[33,6950,6951,6953,6955,6957,6959],{"class":35,"line":146},[33,6952,3653],{"class":63},[33,6954,3081],{"class":59},[33,6956,64],{"class":63},[33,6958,2010],{"class":39},[33,6960,2976],{"class":59},[33,6962,6963,6965,6967,6969,6971],{"class":35,"line":267},[33,6964,3653],{"class":63},[33,6966,4499],{"class":59},[33,6968,64],{"class":63},[33,6970,2010],{"class":39},[33,6972,2976],{"class":59},[33,6974,6975,6977,6979],{"class":35,"line":275},[33,6976,3680],{"class":59},[33,6978,3112],{"class":63},[33,6980,6981],{"class":59},"a,b;\n",[33,6983,6984],{"class":35,"line":392},[33,6985,6986],{"class":87},"    \u002F\u002F调用函数时，实参值传给了形参\n",[33,6988,6989,6991,6993,6996],{"class":35,"line":406},[33,6990,3233],{"class":59},[33,6992,2859],{"class":63},[33,6994,6995],{"class":3632},"add",[33,6997,6998],{"class":59},"(a,b);\n",[33,7000,7001],{"class":35,"line":418},[33,7002,3247],{"class":59},[14,7004,7006],{"id":7005},"_23值传递","2.3值传递",[19,7008,7009],{},"值传递就是函数调用时实参将数值传给形参",[19,7011,7012],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7014,7015],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[23,7017,7019],{"className":1814,"code":7018,"language":1816,"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,7020,7021,7043,7047,7060,7077,7095,7106,7115,7124,7137,7153,7169,7178,7182,7190,7194,7206,7218,7225],{"__ignoreMap":28},[33,7022,7023,7026,7029,7031,7033,7035,7037,7039,7041],{"class":35,"line":36},[33,7024,7025],{"class":63},"void",[33,7027,7028],{"class":3632}," swap",[33,7030,109],{"class":59},[33,7032,1828],{"class":63},[33,7034,6878],{"class":6877},[33,7036,2196],{"class":59},[33,7038,1828],{"class":63},[33,7040,6885],{"class":6877},[33,7042,157],{"class":59},[33,7044,7045],{"class":35,"line":43},[33,7046,3228],{"class":59},[33,7048,7049,7051,7053,7056,7058],{"class":35,"line":130},[33,7050,3233],{"class":59},[33,7052,2859],{"class":63},[33,7054,7055],{"class":117},"\"交换前：\"",[33,7057,2859],{"class":63},[33,7059,2881],{"class":59},[33,7061,7062,7064,7066,7069,7071,7073,7075],{"class":35,"line":146},[33,7063,3233],{"class":59},[33,7065,2859],{"class":63},[33,7067,7068],{"class":117},"\"num1=\"",[33,7070,2859],{"class":63},[33,7072,6903],{"class":59},[33,7074,2859],{"class":63},[33,7076,2881],{"class":59},[33,7078,7079,7081,7083,7086,7088,7091,7093],{"class":35,"line":267},[33,7080,3233],{"class":59},[33,7082,2859],{"class":63},[33,7084,7085],{"class":117},"\"num2=\"",[33,7087,2859],{"class":63},[33,7089,7090],{"class":59},"num2",[33,7092,2859],{"class":63},[33,7094,2881],{"class":59},[33,7096,7097,7099,7101,7103],{"class":35,"line":275},[33,7098,3653],{"class":63},[33,7100,5916],{"class":59},[33,7102,64],{"class":63},[33,7104,7105],{"class":59},"num1;\n",[33,7107,7108,7111,7113],{"class":35,"line":392},[33,7109,7110],{"class":59},"    num1",[33,7112,64],{"class":63},[33,7114,6908],{"class":59},[33,7116,7117,7120,7122],{"class":35,"line":406},[33,7118,7119],{"class":59},"    num2",[33,7121,64],{"class":63},[33,7123,5941],{"class":59},[33,7125,7126,7128,7130,7133,7135],{"class":35,"line":418},[33,7127,3233],{"class":59},[33,7129,2859],{"class":63},[33,7131,7132],{"class":117},"\"交换后：\"",[33,7134,2859],{"class":63},[33,7136,2881],{"class":59},[33,7138,7139,7141,7143,7145,7147,7149,7151],{"class":35,"line":425},[33,7140,3233],{"class":59},[33,7142,2859],{"class":63},[33,7144,7068],{"class":117},[33,7146,2859],{"class":63},[33,7148,6903],{"class":59},[33,7150,2859],{"class":63},[33,7152,2881],{"class":59},[33,7154,7155,7157,7159,7161,7163,7165,7167],{"class":35,"line":1147},[33,7156,3233],{"class":59},[33,7158,2859],{"class":63},[33,7160,7085],{"class":117},[33,7162,2859],{"class":63},[33,7164,7090],{"class":59},[33,7166,2859],{"class":63},[33,7168,2881],{"class":59},[33,7170,7171,7173,7175],{"class":35,"line":1329},[33,7172,5752],{"class":63},[33,7174,1876],{"class":59},[33,7176,7177],{"class":87},"\u002F\u002F或者不写\n",[33,7179,7180],{"class":35,"line":1341},[33,7181,3247],{"class":59},[33,7183,7184,7186,7188],{"class":35,"line":1348},[33,7185,1828],{"class":63},[33,7187,3642],{"class":3632},[33,7189,943],{"class":59},[33,7191,7192],{"class":35,"line":1529},[33,7193,3228],{"class":59},[33,7195,7196,7198,7200,7202,7204],{"class":35,"line":1546},[33,7197,3653],{"class":63},[33,7199,3081],{"class":59},[33,7201,64],{"class":63},[33,7203,2264],{"class":39},[33,7205,2976],{"class":59},[33,7207,7208,7210,7212,7214,7216],{"class":35,"line":1551},[33,7209,3653],{"class":63},[33,7211,4499],{"class":59},[33,7213,64],{"class":63},[33,7215,2517],{"class":39},[33,7217,2976],{"class":59},[33,7219,7220,7223],{"class":35,"line":1566},[33,7221,7222],{"class":3632},"    swap",[33,7224,6998],{"class":59},[33,7226,7227],{"class":35,"line":1578},[33,7228,3247],{"class":59},[14,7230,7232],{"id":7231},"_24函数的常见形式","2.4函数的常见形式",[162,7234,7235],{},[165,7236,7237],{},"无参无返",[23,7239,7241],{"className":1814,"code":7240,"language":1816,"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,7242,7243,7252,7256,7269,7273,7281,7285,7290,7298],{"__ignoreMap":28},[33,7244,7245,7247,7250],{"class":35,"line":36},[33,7246,7025],{"class":63},[33,7248,7249],{"class":3632}," test01",[33,7251,943],{"class":59},[33,7253,7254],{"class":35,"line":43},[33,7255,3228],{"class":59},[33,7257,7258,7260,7262,7265,7267],{"class":35,"line":130},[33,7259,3233],{"class":59},[33,7261,2859],{"class":63},[33,7263,7264],{"class":117},"\"你好\"",[33,7266,2859],{"class":63},[33,7268,2881],{"class":59},[33,7270,7271],{"class":35,"line":146},[33,7272,3247],{"class":59},[33,7274,7275,7277,7279],{"class":35,"line":267},[33,7276,1828],{"class":63},[33,7278,3642],{"class":3632},[33,7280,943],{"class":59},[33,7282,7283],{"class":35,"line":275},[33,7284,3228],{"class":59},[33,7286,7287],{"class":35,"line":392},[33,7288,7289],{"class":87},"    \u002F\u002F函数调用\n",[33,7291,7292,7295],{"class":35,"line":406},[33,7293,7294],{"class":3632},"    test01",[33,7296,7297],{"class":59},"();\n",[33,7299,7300],{"class":35,"line":418},[33,7301,3247],{"class":59},[162,7303,7304],{"start":43},[165,7305,7306],{},"有参无返",[23,7308,7310],{"className":1814,"code":7309,"language":1816,"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,7311,7312,7327,7331,7343,7347,7355,7359,7370],{"__ignoreMap":28},[33,7313,7314,7316,7319,7321,7323,7325],{"class":35,"line":36},[33,7315,7025],{"class":63},[33,7317,7318],{"class":3632}," test02",[33,7320,109],{"class":59},[33,7322,1828],{"class":63},[33,7324,3081],{"class":6877},[33,7326,157],{"class":59},[33,7328,7329],{"class":35,"line":43},[33,7330,3228],{"class":59},[33,7332,7333,7335,7337,7339,7341],{"class":35,"line":130},[33,7334,3233],{"class":59},[33,7336,2859],{"class":63},[33,7338,7264],{"class":117},[33,7340,2859],{"class":63},[33,7342,2881],{"class":59},[33,7344,7345],{"class":35,"line":146},[33,7346,3247],{"class":59},[33,7348,7349,7351,7353],{"class":35,"line":267},[33,7350,1828],{"class":63},[33,7352,3642],{"class":3632},[33,7354,943],{"class":59},[33,7356,7357],{"class":35,"line":275},[33,7358,3228],{"class":59},[33,7360,7361,7364,7366,7368],{"class":35,"line":392},[33,7362,7363],{"class":3632},"    test02",[33,7365,109],{"class":59},[33,7367,2129],{"class":39},[33,7369,4385],{"class":59},[33,7371,7372],{"class":35,"line":406},[33,7373,3247],{"class":59},[162,7375,7376],{"start":130},[165,7377,7378],{},"无参有返",[23,7380,7382],{"className":1814,"code":7381,"language":1816,"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,7383,7384,7393,7397,7409,7417,7421,7429,7433,7446,7465],{"__ignoreMap":28},[33,7385,7386,7388,7391],{"class":35,"line":36},[33,7387,1828],{"class":63},[33,7389,7390],{"class":3632}," test03",[33,7392,943],{"class":59},[33,7394,7395],{"class":35,"line":43},[33,7396,3228],{"class":59},[33,7398,7399,7401,7403,7405,7407],{"class":35,"line":130},[33,7400,3233],{"class":59},[33,7402,2859],{"class":63},[33,7404,7264],{"class":117},[33,7406,2859],{"class":63},[33,7408,2881],{"class":59},[33,7410,7411,7413,7415],{"class":35,"line":146},[33,7412,5752],{"class":63},[33,7414,840],{"class":39},[33,7416,2976],{"class":59},[33,7418,7419],{"class":35,"line":267},[33,7420,3247],{"class":59},[33,7422,7423,7425,7427],{"class":35,"line":275},[33,7424,1828],{"class":63},[33,7426,3642],{"class":3632},[33,7428,943],{"class":59},[33,7430,7431],{"class":35,"line":392},[33,7432,3228],{"class":59},[33,7434,7435,7437,7439,7441,7444],{"class":35,"line":406},[33,7436,3653],{"class":63},[33,7438,6878],{"class":59},[33,7440,64],{"class":63},[33,7442,7443],{"class":3632},"test03",[33,7445,7297],{"class":59},[33,7447,7448,7450,7452,7454,7456,7458,7460,7462],{"class":35,"line":418},[33,7449,3233],{"class":59},[33,7451,2859],{"class":63},[33,7453,7068],{"class":117},[33,7455,2859],{"class":63},[33,7457,6903],{"class":59},[33,7459,2859],{"class":63},[33,7461,2924],{"class":59},[33,7463,7464],{"class":87}," \u002F\u002F100\n",[33,7466,7467],{"class":35,"line":425},[33,7468,3247],{"class":59},[19,7470,7471],{},"4.有参有返",[23,7473,7475],{"className":1814,"code":7474,"language":1816,"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,7476,7477,7492,7496,7509,7515,7519,7528,7532,7544,7558,7573],{"__ignoreMap":28},[33,7478,7479,7481,7484,7486,7488,7490],{"class":35,"line":36},[33,7480,1828],{"class":63},[33,7482,7483],{"class":3632}," test04",[33,7485,109],{"class":59},[33,7487,1828],{"class":63},[33,7489,3081],{"class":6877},[33,7491,157],{"class":59},[33,7493,7494],{"class":35,"line":43},[33,7495,3228],{"class":59},[33,7497,7498,7500,7502,7505,7507],{"class":35,"line":130},[33,7499,3233],{"class":59},[33,7501,2859],{"class":63},[33,7503,7504],{"class":117},"\"hello\"",[33,7506,2859],{"class":63},[33,7508,2881],{"class":59},[33,7510,7511,7513],{"class":35,"line":146},[33,7512,5752],{"class":63},[33,7514,3115],{"class":59},[33,7516,7517],{"class":35,"line":267},[33,7518,3247],{"class":59},[33,7520,7521,7523,7526],{"class":35,"line":275},[33,7522,1828],{"class":63},[33,7524,7525],{"class":3632}," mian",[33,7527,943],{"class":59},[33,7529,7530],{"class":35,"line":392},[33,7531,3228],{"class":59},[33,7533,7534,7536,7538,7540,7542],{"class":35,"line":406},[33,7535,3653],{"class":63},[33,7537,4499],{"class":59},[33,7539,64],{"class":63},[33,7541,2036],{"class":39},[33,7543,2976],{"class":59},[33,7545,7546,7548,7550,7552,7555],{"class":35,"line":418},[33,7547,3653],{"class":63},[33,7549,4515],{"class":59},[33,7551,64],{"class":63},[33,7553,7554],{"class":3632},"test04",[33,7556,7557],{"class":59},"(b);\n",[33,7559,7560,7562,7564,7566,7568,7570],{"class":35,"line":425},[33,7561,3233],{"class":59},[33,7563,2859],{"class":63},[33,7565,2106],{"class":59},[33,7567,2859],{"class":63},[33,7569,2924],{"class":59},[33,7571,7572],{"class":87}," \u002F\u002F1\n",[33,7574,7575],{"class":35,"line":1147},[33,7576,3247],{"class":59},[14,7578,7580],{"id":7579},"_25函数的声明","2.5函数的声明",[19,7582,7583],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7585,7586,7587],{},"函数的",[1968,7588,7589],{},"声明可以多次，但是函数的定义只能有一次",[23,7591,7593],{"className":1814,"code":7592,"language":1816,"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,7594,7595,7600,7605,7630,7639,7643,7655,7667,7683,7687,7707,7711,7730],{"__ignoreMap":28},[33,7596,7597],{"class":35,"line":36},[33,7598,7599],{"class":87},"\u002F\u002F函数声明\n",[33,7601,7602],{"class":35,"line":43},[33,7603,7604],{"class":87},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[33,7606,7607,7609,7612,7614,7616,7618,7620,7622,7624,7627],{"class":35,"line":130},[33,7608,1828],{"class":63},[33,7610,7611],{"class":3632}," max",[33,7613,109],{"class":59},[33,7615,1828],{"class":63},[33,7617,3081],{"class":6877},[33,7619,2196],{"class":59},[33,7621,1828],{"class":63},[33,7623,4499],{"class":6877},[33,7625,7626],{"class":59},");",[33,7628,7629],{"class":87},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[33,7631,7632,7634,7636],{"class":35,"line":146},[33,7633,1828],{"class":63},[33,7635,3642],{"class":3632},[33,7637,7638],{"class":59},"() \n",[33,7640,7641],{"class":35,"line":267},[33,7642,3228],{"class":59},[33,7644,7645,7647,7649,7651,7653],{"class":35,"line":275},[33,7646,3653],{"class":63},[33,7648,3081],{"class":59},[33,7650,64],{"class":63},[33,7652,2264],{"class":39},[33,7654,2976],{"class":59},[33,7656,7657,7659,7661,7663,7665],{"class":35,"line":392},[33,7658,3653],{"class":63},[33,7660,4499],{"class":59},[33,7662,64],{"class":63},[33,7664,2517],{"class":39},[33,7666,2976],{"class":59},[33,7668,7669,7671,7673,7676,7679,7681],{"class":35,"line":406},[33,7670,3233],{"class":59},[33,7672,2859],{"class":63},[33,7674,7675],{"class":3632},"max",[33,7677,7678],{"class":59},"(a,b)",[33,7680,2859],{"class":63},[33,7682,2881],{"class":59},[33,7684,7685],{"class":35,"line":418},[33,7686,3247],{"class":59},[33,7688,7689,7691,7693,7695,7697,7699,7701,7703,7705],{"class":35,"line":425},[33,7690,1828],{"class":63},[33,7692,7611],{"class":3632},[33,7694,109],{"class":59},[33,7696,1828],{"class":63},[33,7698,3081],{"class":6877},[33,7700,2196],{"class":59},[33,7702,1828],{"class":63},[33,7704,4499],{"class":6877},[33,7706,157],{"class":59},[33,7708,7709],{"class":35,"line":1147},[33,7710,3228],{"class":59},[33,7712,7713,7715,7717,7719,7721,7723,7725,7727],{"class":35,"line":1329},[33,7714,5752],{"class":63},[33,7716,3081],{"class":59},[33,7718,2775],{"class":63},[33,7720,2081],{"class":59},[33,7722,2801],{"class":63},[33,7724,2057],{"class":59},[33,7726,2676],{"class":63},[33,7728,7729],{"class":59},"b;\n",[33,7731,7732],{"class":35,"line":1341},[33,7733,3247],{"class":59},[14,7735,7737],{"id":7736},"_26函数的分文件编写","2.6函数的分文件编写",[19,7739,7740],{},"4个步骤：",[2822,7742,7743,7746,7749,7752],{},[165,7744,7745],{},"1.创建后缀名为.h的头文件",[165,7747,7748],{},"2.创建后缀名为.cpp的源文件",[165,7750,7751],{},"3.在头文件中写函数的定义",[165,7753,7754],{},"4.在源文件中写函数的定义\n示例：",[19,7756,7757],{},"头文件：swap.h",[23,7759,7761],{"className":1814,"code":7760,"language":1816,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[30,7762,7763,7769,7779,7783],{"__ignoreMap":28},[33,7764,7765,7767],{"class":35,"line":36},[33,7766,3618],{"class":63},[33,7768,3621],{"class":117},[33,7770,7771,7773,7775,7777],{"class":35,"line":43},[33,7772,3626],{"class":63},[33,7774,3629],{"class":63},[33,7776,3633],{"class":3632},[33,7778,2976],{"class":59},[33,7780,7781],{"class":35,"line":130},[33,7782,7599],{"class":87},[33,7784,7785,7787,7789,7791,7793,7795,7797,7799,7801],{"class":35,"line":146},[33,7786,7025],{"class":63},[33,7788,7028],{"class":3632},[33,7790,109],{"class":59},[33,7792,1828],{"class":63},[33,7794,3081],{"class":6877},[33,7796,2196],{"class":59},[33,7798,1828],{"class":63},[33,7800,4499],{"class":6877},[33,7802,4385],{"class":59},[19,7804,7805],{},"源文件：swap.cpp",[23,7807,7809],{"className":1814,"code":7808,"language":1816,"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,7810,7811,7818,7823,7843,7847,7858,7867,7876,7893,7910],{"__ignoreMap":28},[33,7812,7813,7815],{"class":35,"line":36},[33,7814,3618],{"class":63},[33,7816,7817],{"class":117}," \"swap.h\"\n",[33,7819,7820],{"class":35,"line":43},[33,7821,7822],{"class":87},"\u002F\u002F函数的定义\n",[33,7824,7825,7827,7829,7831,7833,7835,7837,7839,7841],{"class":35,"line":130},[33,7826,7025],{"class":63},[33,7828,7028],{"class":3632},[33,7830,109],{"class":59},[33,7832,1828],{"class":63},[33,7834,3081],{"class":6877},[33,7836,2196],{"class":59},[33,7838,1828],{"class":63},[33,7840,4499],{"class":6877},[33,7842,157],{"class":59},[33,7844,7845],{"class":35,"line":146},[33,7846,3228],{"class":59},[33,7848,7849,7851,7853,7855],{"class":35,"line":267},[33,7850,3653],{"class":63},[33,7852,5916],{"class":59},[33,7854,64],{"class":63},[33,7856,7857],{"class":59},"a;\n",[33,7859,7860,7863,7865],{"class":35,"line":275},[33,7861,7862],{"class":59},"    a",[33,7864,64],{"class":63},[33,7866,7729],{"class":59},[33,7868,7869,7872,7874],{"class":35,"line":392},[33,7870,7871],{"class":59},"    b",[33,7873,64],{"class":63},[33,7875,5941],{"class":59},[33,7877,7878,7880,7882,7885,7887,7889,7891],{"class":35,"line":406},[33,7879,3233],{"class":59},[33,7881,2859],{"class":63},[33,7883,7884],{"class":117},"\"a=\"",[33,7886,2859],{"class":63},[33,7888,2057],{"class":59},[33,7890,2859],{"class":63},[33,7892,2881],{"class":59},[33,7894,7895,7897,7899,7902,7904,7906,7908],{"class":35,"line":418},[33,7896,3233],{"class":59},[33,7898,2859],{"class":63},[33,7900,7901],{"class":117},"\"b=\"",[33,7903,2859],{"class":63},[33,7905,2081],{"class":59},[33,7907,2859],{"class":63},[33,7909,2881],{"class":59},[33,7911,7912],{"class":35,"line":425},[33,7913,3247],{"class":59},[1729,7915,7916],{},"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":43,"depth":43,"links":7918},[7919,7920,7921,7922,7923,7924],{"id":6833,"depth":43,"text":6834},{"id":6922,"depth":43,"text":6923},{"id":7005,"depth":43,"text":7006},{"id":7231,"depth":43,"text":7232},{"id":7579,"depth":43,"text":7580},{"id":7736,"depth":43,"text":7737},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6825,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7931,"title":7932,"body":7933,"description":7940,"extension":1752,"meta":9345,"navigation":126,"path":9346,"seo":9347,"stem":9348,"__hash__":9349},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7934,"toc":9335},[7935,7938,7941,7945,8107,8111,8114,8117,8120,8123,8263,8267,8270,8273,8276,8341,8345,8350,8417,8420,8424,8427,8438,8443,8463,8466,8471,8490,8493,8497,8516,8519,8523,8758,8762,8765,8768,8771,8933,8936,8940,8943,8949,9332],[10,7936,7932],{"id":7937},"_3指针",[19,7939,7940],{},"通过指针保存一个地址，指针就是个地址",[14,7942,7944],{"id":7943},"_31定义指针","3.1定义指针",[23,7946,7948],{"className":1814,"code":7947,"language":1816,"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,7949,7950,7958,7962,7967,7979,7984,7992,8002,8020,8040,8044,8049,8054,8059,8073,8089,8103],{"__ignoreMap":28},[33,7951,7952,7954,7956],{"class":35,"line":36},[33,7953,1828],{"class":63},[33,7955,3642],{"class":3632},[33,7957,943],{"class":59},[33,7959,7960],{"class":35,"line":43},[33,7961,3228],{"class":59},[33,7963,7964],{"class":35,"line":130},[33,7965,7966],{"class":87},"    \u002F\u002F1.定义指针\n",[33,7968,7969,7971,7973,7975,7977],{"class":35,"line":146},[33,7970,3653],{"class":63},[33,7972,3081],{"class":59},[33,7974,64],{"class":63},[33,7976,2264],{"class":39},[33,7978,2976],{"class":59},[33,7980,7981],{"class":35,"line":267},[33,7982,7983],{"class":87},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[33,7985,7986,7989],{"class":35,"line":275},[33,7987,7988],{"class":63},"    int*",[33,7990,7991],{"class":59},"p;\n",[33,7993,7994,7997,8000],{"class":35,"line":392},[33,7995,7996],{"class":59},"    p",[33,7998,7999],{"class":63},"=&",[33,8001,7857],{"class":59},[33,8003,8004,8006,8008,8011,8014,8016,8018],{"class":35,"line":406},[33,8005,3233],{"class":59},[33,8007,2859],{"class":63},[33,8009,8010],{"class":117},"\"a的地址为：\"",[33,8012,8013],{"class":63},"\u003C\u003C&",[33,8015,2057],{"class":59},[33,8017,2859],{"class":63},[33,8019,2881],{"class":59},[33,8021,8022,8024,8026,8029,8031,8033,8035,8037],{"class":35,"line":418},[33,8023,3233],{"class":59},[33,8025,2859],{"class":63},[33,8027,8028],{"class":117},"\"指针p为：\"",[33,8030,2859],{"class":63},[33,8032,19],{"class":59},[33,8034,2859],{"class":63},[33,8036,2924],{"class":59},[33,8038,8039],{"class":87},"\u002F\u002F指针p表示的就是a的地址\n",[33,8041,8042],{"class":35,"line":425},[33,8043,127],{"emptyLinePlaceholder":126},[33,8045,8046],{"class":35,"line":1147},[33,8047,8048],{"class":87},"    \u002F\u002F2.使用指针\n",[33,8050,8051],{"class":35,"line":1329},[33,8052,8053],{"class":87},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[33,8055,8056],{"class":35,"line":1341},[33,8057,8058],{"class":87},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[33,8060,8061,8064,8066,8068,8071],{"class":35,"line":1348},[33,8062,8063],{"class":63},"    *",[33,8065,19],{"class":59},[33,8067,64],{"class":63},[33,8069,8070],{"class":39},"1000",[33,8072,2976],{"class":59},[33,8074,8075,8077,8080,8082,8084,8086],{"class":35,"line":1529},[33,8076,3233],{"class":59},[33,8078,8079],{"class":63},"\u003C\u003C*",[33,8081,19],{"class":59},[33,8083,2859],{"class":63},[33,8085,2924],{"class":59},[33,8087,8088],{"class":87},"\u002F\u002F1000\n",[33,8090,8091,8093,8095,8097,8099,8101],{"class":35,"line":1546},[33,8092,3233],{"class":59},[33,8094,2859],{"class":63},[33,8096,2057],{"class":59},[33,8098,2859],{"class":63},[33,8100,2924],{"class":59},[33,8102,8088],{"class":87},[33,8104,8105],{"class":35,"line":1551},[33,8106,3247],{"class":59},[14,8108,8110],{"id":8109},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8112,8113],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8115,8116],{},"在32位操作系统下：占用4个字节空间",[19,8118,8119],{},"在64位操作系统下：占用8个字节空间",[19,8121,8122],{},"上方是不管啥数据类型的",[23,8124,8126],{"className":1814,"code":8125,"language":1816,"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,8127,8128,8136,8140,8145,8157,8162,8167,8172,8185,8207,8233,8259],{"__ignoreMap":28},[33,8129,8130,8132,8134],{"class":35,"line":36},[33,8131,1828],{"class":63},[33,8133,3642],{"class":3632},[33,8135,943],{"class":59},[33,8137,8138],{"class":35,"line":43},[33,8139,3228],{"class":59},[33,8141,8142],{"class":35,"line":130},[33,8143,8144],{"class":87},"    \u002F\u002F指针所占内存空间\n",[33,8146,8147,8149,8151,8153,8155],{"class":35,"line":146},[33,8148,3653],{"class":63},[33,8150,3081],{"class":59},[33,8152,64],{"class":63},[33,8154,2264],{"class":39},[33,8156,2976],{"class":59},[33,8158,8159],{"class":35,"line":267},[33,8160,8161],{"class":87},"    \u002F\u002Fint *p;\n",[33,8163,8164],{"class":35,"line":275},[33,8165,8166],{"class":87},"    \u002F\u002Fp=&a;\n",[33,8168,8169],{"class":35,"line":392},[33,8170,8171],{"class":87},"    \u002F\u002F上述可以写为以下：\n",[33,8173,8174,8176,8179,8181,8183],{"class":35,"line":406},[33,8175,3653],{"class":63},[33,8177,8178],{"class":63}," *",[33,8180,19],{"class":59},[33,8182,7999],{"class":63},[33,8184,7857],{"class":59},[33,8186,8187,8190,8192,8195,8197,8200,8202,8204],{"class":35,"line":418},[33,8188,8189],{"class":59},"    cout ",[33,8191,2859],{"class":63},[33,8193,8194],{"class":117},"\"sizeof(int *)\"",[33,8196,3055],{"class":63},[33,8198,8199],{"class":59},"(p)",[33,8201,2859],{"class":63},[33,8203,2924],{"class":59},[33,8205,8206],{"class":87},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[33,8208,8209,8211,8213,8215,8217,8219,8221,8223,8225,8227,8230],{"class":35,"line":425},[33,8210,8189],{"class":59},[33,8212,2859],{"class":63},[33,8214,8194],{"class":117},[33,8216,3055],{"class":63},[33,8218,109],{"class":59},[33,8220,1828],{"class":63},[33,8222,8178],{"class":63},[33,8224,2247],{"class":59},[33,8226,2859],{"class":63},[33,8228,8229],{"class":59},"endl",[33,8231,8232],{"class":87},"  \u002F\u002F4字节(32位的话)\n",[33,8234,8235,8237,8239,8242,8244,8246,8248,8250,8252,8254,8256],{"class":35,"line":1147},[33,8236,8189],{"class":59},[33,8238,2859],{"class":63},[33,8240,8241],{"class":117},"\"sizeof(char *)\"",[33,8243,3055],{"class":63},[33,8245,109],{"class":59},[33,8247,1916],{"class":63},[33,8249,8178],{"class":63},[33,8251,2247],{"class":59},[33,8253,2859],{"class":63},[33,8255,2924],{"class":59},[33,8257,8258],{"class":87}," \u002F\u002F4字节(32位的话)\n",[33,8260,8261],{"class":35,"line":1329},[33,8262,3247],{"class":59},[14,8264,8266],{"id":8265},"_33空指针","3.3空指针",[19,8268,8269],{},"空指针：指针变量指向内存中编号为0的空间",[19,8271,8272],{},"用途：初始化指针变量",[19,8274,8275],{},"注意：空指针指向的内存是不可以访问的",[23,8277,8279],{"className":1814,"code":8278,"language":1816,"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,8280,8281,8289,8293,8298,8312,8317,8332,8337],{"__ignoreMap":28},[33,8282,8283,8285,8287],{"class":35,"line":36},[33,8284,1828],{"class":63},[33,8286,3642],{"class":3632},[33,8288,943],{"class":59},[33,8290,8291],{"class":35,"line":43},[33,8292,3228],{"class":59},[33,8294,8295],{"class":35,"line":130},[33,8296,8297],{"class":87},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[33,8299,8300,8302,8304,8306,8308,8310],{"class":35,"line":146},[33,8301,3653],{"class":63},[33,8303,8178],{"class":63},[33,8305,19],{"class":59},[33,8307,64],{"class":63},[33,8309,4059],{"class":39},[33,8311,2976],{"class":59},[33,8313,8314],{"class":35,"line":267},[33,8315,8316],{"class":87},"    \u002F\u002F2.空指针不能进行访问\n",[33,8318,8319,8321,8323,8325,8327,8329],{"class":35,"line":275},[33,8320,8063],{"class":63},[33,8322,19],{"class":59},[33,8324,64],{"class":63},[33,8326,2129],{"class":39},[33,8328,1876],{"class":59},[33,8330,8331],{"class":87},"\u002F\u002F直接报错，压根不能访问\n",[33,8333,8334],{"class":35,"line":392},[33,8335,8336],{"class":87},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[33,8338,8339],{"class":35,"line":406},[33,8340,3247],{"class":59},[14,8342,8344],{"id":8343},"_34野指针","3.4野指针",[19,8346,8347],{},[1968,8348,8349],{},"指针变量指向非法的内存空间",[23,8351,8353],{"className":1814,"code":8352,"language":1816,"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,8354,8355,8363,8367,8396,8401,8413],{"__ignoreMap":28},[33,8356,8357,8359,8361],{"class":35,"line":36},[33,8358,1828],{"class":63},[33,8360,3642],{"class":3632},[33,8362,943],{"class":59},[33,8364,8365],{"class":35,"line":43},[33,8366,3228],{"class":59},[33,8368,8369,8371,8373,8375,8377,8379,8381,8383,8385,8388,8391,8393],{"class":35,"line":130},[33,8370,3653],{"class":63},[33,8372,8178],{"class":63},[33,8374,19],{"class":59},[33,8376,64],{"class":63},[33,8378,109],{"class":59},[33,8380,1828],{"class":63},[33,8382,8178],{"class":63},[33,8384,2247],{"class":59},[33,8386,8387],{"class":63},"0x",[33,8389,8390],{"class":39},"1100",[33,8392,1876],{"class":59},[33,8394,8395],{"class":87}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[33,8397,8398],{"class":35,"line":146},[33,8399,8400],{"class":87},"    \u002F\u002F访问野指针报错\n",[33,8402,8403,8405,8407,8409,8411],{"class":35,"line":267},[33,8404,3233],{"class":59},[33,8406,8079],{"class":63},[33,8408,19],{"class":59},[33,8410,2859],{"class":63},[33,8412,2881],{"class":59},[33,8414,8415],{"class":35,"line":275},[33,8416,3247],{"class":59},[19,8418,8419],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8421,8423],{"id":8422},"_35const修饰指针","3.5const修饰指针",[19,8425,8426],{},"三种情况：",[2822,8428,8429,8432,8435],{},[165,8430,8431],{},"const修饰指针 常量指针",[165,8433,8434],{},"const修饰常量 指针常量",[165,8436,8437],{},"const即修饰指针，又修饰常量",[162,8439,8440],{},[165,8441,8442],{},"常量指针",[23,8444,8446],{"className":1814,"code":8445,"language":1816,"meta":28,"style":28},"const int *p=&a;\n",[30,8447,8448],{"__ignoreMap":28},[33,8449,8450,8453,8455,8457,8459,8461],{"class":35,"line":36},[33,8451,8452],{"class":63},"const",[33,8454,106],{"class":63},[33,8456,8178],{"class":63},[33,8458,19],{"class":59},[33,8460,7999],{"class":63},[33,8462,7857],{"class":59},[19,8464,8465],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[162,8467,8468],{"start":43},[165,8469,8470],{},"指针常量",[23,8472,8474],{"className":1814,"code":8473,"language":1816,"meta":28,"style":28},"int *const p=&a;\n",[30,8475,8476],{"__ignoreMap":28},[33,8477,8478,8480,8483,8486,8488],{"class":35,"line":36},[33,8479,1828],{"class":63},[33,8481,8482],{"class":63}," *const",[33,8484,8485],{"class":59}," p",[33,8487,7999],{"class":63},[33,8489,7857],{"class":59},[19,8491,8492],{},"指针的指向不可以改，指针指向的值可以改",[162,8494,8495],{"start":130},[165,8496,8437],{},[23,8498,8500],{"className":1814,"code":8499,"language":1816,"meta":28,"style":28},"const int *const p=&a;\n",[30,8501,8502],{"__ignoreMap":28},[33,8503,8504,8506,8508,8510,8512,8514],{"class":35,"line":36},[33,8505,8452],{"class":63},[33,8507,106],{"class":63},[33,8509,8482],{"class":63},[33,8511,8485],{"class":59},[33,8513,7999],{"class":63},[33,8515,7857],{"class":59},[19,8517,8518],{},"指针的指向和指针指向的值都不可以改变",[14,8520,8522],{"id":8521},"_36指针和数组","3.6指针和数组",[23,8524,8526],{"className":1814,"code":8525,"language":1816,"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,8527,8528,8536,8540,8545,8599,8620,8636,8652,8663,8680,8685,8699,8725,8729,8741,8750,8754],{"__ignoreMap":28},[33,8529,8530,8532,8534],{"class":35,"line":36},[33,8531,1828],{"class":63},[33,8533,3642],{"class":3632},[33,8535,943],{"class":59},[33,8537,8538],{"class":35,"line":43},[33,8539,3228],{"class":59},[33,8541,8542],{"class":35,"line":130},[33,8543,8544],{"class":87},"    \u002F\u002F利用指针访问数组中的元素\n",[33,8546,8547,8549,8551,8553,8555,8557,8559,8561,8563,8565,8567,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587,8589,8591,8593,8595,8597],{"class":35,"line":146},[33,8548,3653],{"class":63},[33,8550,5624],{"class":59},[33,8552,2264],{"class":39},[33,8554,2756],{"class":59},[33,8556,64],{"class":63},[33,8558,1005],{"class":59},[33,8560,2036],{"class":39},[33,8562,2196],{"class":59},[33,8564,1897],{"class":39},[33,8566,2196],{"class":59},[33,8568,1891],{"class":39},[33,8570,2196],{"class":59},[33,8572,2111],{"class":39},[33,8574,2196],{"class":59},[33,8576,2137],{"class":39},[33,8578,2196],{"class":59},[33,8580,2162],{"class":39},[33,8582,2196],{"class":59},[33,8584,2187],{"class":39},[33,8586,2196],{"class":59},[33,8588,2213],{"class":39},[33,8590,2196],{"class":59},[33,8592,2238],{"class":39},[33,8594,2196],{"class":59},[33,8596,2264],{"class":39},[33,8598,5657],{"class":59},[33,8600,8601,8603,8605,8608,8610,8612,8614,8616,8618],{"class":35,"line":267},[33,8602,3233],{"class":59},[33,8604,2859],{"class":63},[33,8606,8607],{"class":117},"\"数组的第一个元素为：\"",[33,8609,2859],{"class":63},[33,8611,5568],{"class":59},[33,8613,2010],{"class":39},[33,8615,2756],{"class":59},[33,8617,2859],{"class":63},[33,8619,2881],{"class":59},[33,8621,8622,8624,8626,8628,8630,8633],{"class":35,"line":275},[33,8623,3653],{"class":63},[33,8625,8178],{"class":63},[33,8627,19],{"class":59},[33,8629,64],{"class":63},[33,8631,8632],{"class":59},"arr;",[33,8634,8635],{"class":87},"\u002F\u002F注意数才要加取地址符号&\n",[33,8637,8638,8640,8642,8644,8646,8648,8650],{"class":35,"line":392},[33,8639,3233],{"class":59},[33,8641,2859],{"class":63},[33,8643,8607],{"class":117},[33,8645,8079],{"class":63},[33,8647,19],{"class":59},[33,8649,2859],{"class":63},[33,8651,2881],{"class":59},[33,8653,8654,8656,8658,8660],{"class":35,"line":406},[33,8655,7996],{"class":59},[33,8657,3960],{"class":63},[33,8659,1876],{"class":59},[33,8661,8662],{"class":87}," \u002F\u002F让指针向后偏移4个字节\n",[33,8664,8665,8667,8669,8672,8674,8676,8678],{"class":35,"line":418},[33,8666,3233],{"class":59},[33,8668,2859],{"class":63},[33,8670,8671],{"class":117},"\"数组的第二个元素为：\"",[33,8673,8079],{"class":63},[33,8675,19],{"class":59},[33,8677,2859],{"class":63},[33,8679,2881],{"class":59},[33,8681,8682],{"class":35,"line":425},[33,8683,8684],{"class":87},"    \u002F\u002F利用指针遍历数组\n",[33,8686,8687,8689,8691,8694,8696],{"class":35,"line":1147},[33,8688,3653],{"class":63},[33,8690,8178],{"class":63},[33,8692,8693],{"class":59},"p2",[33,8695,64],{"class":63},[33,8697,8698],{"class":59},"arr;\n",[33,8700,8701,8703,8705,8707,8709,8711,8713,8715,8717,8719,8721,8723],{"class":35,"line":1329},[33,8702,4864],{"class":63},[33,8704,3332],{"class":59},[33,8706,1828],{"class":63},[33,8708,4697],{"class":59},[33,8710,64],{"class":63},[33,8712,2010],{"class":39},[33,8714,4704],{"class":59},[33,8716,2726],{"class":63},[33,8718,2264],{"class":39},[33,8720,4704],{"class":59},[33,8722,3960],{"class":63},[33,8724,157],{"class":59},[33,8726,8727],{"class":35,"line":1341},[33,8728,3698],{"class":59},[33,8730,8731,8733,8735,8737,8739],{"class":35,"line":1348},[33,8732,5114],{"class":59},[33,8734,8079],{"class":63},[33,8736,8693],{"class":59},[33,8738,2859],{"class":63},[33,8740,2881],{"class":59},[33,8742,8743,8746,8748],{"class":35,"line":1529},[33,8744,8745],{"class":59},"        p2",[33,8747,3960],{"class":63},[33,8749,2976],{"class":59},[33,8751,8752],{"class":35,"line":1546},[33,8753,3855],{"class":59},[33,8755,8756],{"class":35,"line":1551},[33,8757,3247],{"class":59},[14,8759,8761],{"id":8760},"_37指针和函数","3.7指针和函数",[19,8763,8764],{},"利用指针做函数参数，可以修改实参的值",[19,8766,8767],{},"值传递：只改变形参，不改变实参",[19,8769,8770],{},"地址传递：",[23,8772,8774],{"className":1814,"code":8773,"language":1816,"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,8775,8776,8801,8805,8817,8828,8838,8842,8850,8854,8866,8878,8883,8899,8914,8929],{"__ignoreMap":28},[33,8777,8778,8780,8782,8784,8786,8788,8791,8793,8795,8797,8799],{"class":35,"line":36},[33,8779,7025],{"class":63},[33,8781,7028],{"class":3632},[33,8783,109],{"class":59},[33,8785,1828],{"class":63},[33,8787,8178],{"class":63},[33,8789,8790],{"class":6877},"p1",[33,8792,2196],{"class":59},[33,8794,1828],{"class":63},[33,8796,8178],{"class":63},[33,8798,8693],{"class":6877},[33,8800,157],{"class":59},[33,8802,8803],{"class":35,"line":43},[33,8804,3228],{"class":59},[33,8806,8807,8809,8811,8814],{"class":35,"line":130},[33,8808,3653],{"class":63},[33,8810,5916],{"class":59},[33,8812,8813],{"class":63},"=*",[33,8815,8816],{"class":59},"p1;\n",[33,8818,8819,8821,8823,8825],{"class":35,"line":146},[33,8820,8063],{"class":63},[33,8822,8790],{"class":59},[33,8824,8813],{"class":63},[33,8826,8827],{"class":59},"p2;\n",[33,8829,8830,8832,8834,8836],{"class":35,"line":267},[33,8831,8063],{"class":63},[33,8833,8693],{"class":59},[33,8835,64],{"class":63},[33,8837,5941],{"class":59},[33,8839,8840],{"class":35,"line":275},[33,8841,3247],{"class":59},[33,8843,8844,8846,8848],{"class":35,"line":392},[33,8845,1828],{"class":63},[33,8847,3642],{"class":3632},[33,8849,943],{"class":59},[33,8851,8852],{"class":35,"line":406},[33,8853,3228],{"class":59},[33,8855,8856,8858,8860,8862,8864],{"class":35,"line":418},[33,8857,3653],{"class":63},[33,8859,3081],{"class":59},[33,8861,64],{"class":63},[33,8863,2264],{"class":39},[33,8865,2976],{"class":59},[33,8867,8868,8870,8872,8874,8876],{"class":35,"line":425},[33,8869,3653],{"class":63},[33,8871,4499],{"class":59},[33,8873,64],{"class":63},[33,8875,2517],{"class":39},[33,8877,2976],{"class":59},[33,8879,8880],{"class":35,"line":1147},[33,8881,8882],{"class":87},"    \u002F\u002F地址传递\n",[33,8884,8885,8887,8889,8891,8894,8896],{"class":35,"line":1329},[33,8886,7222],{"class":3632},[33,8888,109],{"class":59},[33,8890,2171],{"class":63},[33,8892,8893],{"class":59},"a,",[33,8895,2171],{"class":63},[33,8897,8898],{"class":59},"b);\n",[33,8900,8901,8903,8905,8907,8909,8911],{"class":35,"line":1341},[33,8902,3233],{"class":59},[33,8904,2859],{"class":63},[33,8906,2057],{"class":59},[33,8908,2859],{"class":63},[33,8910,2924],{"class":59},[33,8912,8913],{"class":87},"\u002F\u002F20\n",[33,8915,8916,8918,8920,8922,8924,8926],{"class":35,"line":1348},[33,8917,3233],{"class":59},[33,8919,2859],{"class":63},[33,8921,2081],{"class":59},[33,8923,2859],{"class":63},[33,8925,2924],{"class":59},[33,8927,8928],{"class":87},"\u002F\u002F10\n",[33,8930,8931],{"class":35,"line":1529},[33,8932,3247],{"class":59},[19,8934,8935],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8937,8939],{"id":8938},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8941,8942],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8944,8945,8946,8948],{},"例如数组：int arr",[33,8947,2264],{},"={4,3,6,9,1,2,10,8,7,5}",[23,8950,8952],{"className":1814,"code":8951,"language":1816,"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,8953,8954,8960,8970,8994,8998,9029,9033,9067,9071,9089,9093,9104,9119,9134,9138,9142,9146,9150,9154,9162,9166,9171,9225,9237,9249,9254,9262,9266,9271,9296,9300,9315,9324,9328],{"__ignoreMap":28},[33,8955,8956,8958],{"class":35,"line":36},[33,8957,3618],{"class":63},[33,8959,3621],{"class":117},[33,8961,8962,8964,8966,8968],{"class":35,"line":43},[33,8963,3626],{"class":63},[33,8965,3629],{"class":63},[33,8967,3633],{"class":3632},[33,8969,2976],{"class":59},[33,8971,8972,8974,8977,8979,8981,8983,8985,8987,8989,8992],{"class":35,"line":130},[33,8973,7025],{"class":63},[33,8975,8976],{"class":3632}," bubbleSort",[33,8978,109],{"class":59},[33,8980,1828],{"class":63},[33,8982,8178],{"class":63},[33,8984,19],{"class":6877},[33,8986,2196],{"class":59},[33,8988,1828],{"class":63},[33,8990,8991],{"class":6877}," len",[33,8993,157],{"class":59},[33,8995,8996],{"class":35,"line":146},[33,8997,3228],{"class":59},[33,8999,9000,9002,9004,9006,9008,9010,9012,9014,9016,9019,9021,9023,9025,9027],{"class":35,"line":267},[33,9001,4864],{"class":63},[33,9003,109],{"class":59},[33,9005,1828],{"class":63},[33,9007,4697],{"class":59},[33,9009,64],{"class":63},[33,9011,2010],{"class":39},[33,9013,4704],{"class":59},[33,9015,2726],{"class":63},[33,9017,9018],{"class":59},"len",[33,9020,2349],{"class":63},[33,9022,2036],{"class":39},[33,9024,4704],{"class":59},[33,9026,3960],{"class":63},[33,9028,157],{"class":59},[33,9030,9031],{"class":35,"line":275},[33,9032,3698],{"class":59},[33,9034,9035,9037,9039,9041,9043,9045,9047,9049,9051,9053,9055,9057,9059,9061,9063,9065],{"class":35,"line":392},[33,9036,5066],{"class":63},[33,9038,109],{"class":59},[33,9040,1828],{"class":63},[33,9042,5073],{"class":59},[33,9044,64],{"class":63},[33,9046,2010],{"class":39},[33,9048,5080],{"class":59},[33,9050,2726],{"class":63},[33,9052,9018],{"class":59},[33,9054,2349],{"class":63},[33,9056,2259],{"class":59},[33,9058,2349],{"class":63},[33,9060,2036],{"class":39},[33,9062,5080],{"class":59},[33,9064,3960],{"class":63},[33,9066,157],{"class":59},[33,9068,9069],{"class":35,"line":406},[33,9070,4176],{"class":59},[33,9072,9073,9075,9078,9080,9083,9085,9087],{"class":35,"line":418},[33,9074,6303],{"class":63},[33,9076,9077],{"class":59},"(p[j]",[33,9079,2775],{"class":63},[33,9081,9082],{"class":59},"p[j",[33,9084,2298],{"class":63},[33,9086,2036],{"class":39},[33,9088,6318],{"class":59},[33,9090,9091],{"class":35,"line":425},[33,9092,6323],{"class":59},[33,9094,9095,9097,9099,9101],{"class":35,"line":1147},[33,9096,6328],{"class":63},[33,9098,5916],{"class":59},[33,9100,64],{"class":63},[33,9102,9103],{"class":59},"p[j];\n",[33,9105,9106,9109,9111,9113,9115,9117],{"class":35,"line":1329},[33,9107,9108],{"class":59},"                p[j]",[33,9110,64],{"class":63},[33,9112,9082],{"class":59},[33,9114,2298],{"class":63},[33,9116,2036],{"class":39},[33,9118,6351],{"class":59},[33,9120,9121,9124,9126,9128,9130,9132],{"class":35,"line":1341},[33,9122,9123],{"class":59},"                p[j",[33,9125,2298],{"class":63},[33,9127,2036],{"class":39},[33,9129,2756],{"class":59},[33,9131,64],{"class":63},[33,9133,5941],{"class":59},[33,9135,9136],{"class":35,"line":1348},[33,9137,6371],{"class":59},[33,9139,9140],{"class":35,"line":1529},[33,9141,4195],{"class":59},[33,9143,9144],{"class":35,"line":1546},[33,9145,3855],{"class":59},[33,9147,9148],{"class":35,"line":1551},[33,9149,3247],{"class":59},[33,9151,9152],{"class":35,"line":1566},[33,9153,127],{"emptyLinePlaceholder":126},[33,9155,9156,9158,9160],{"class":35,"line":1578},[33,9157,1828],{"class":63},[33,9159,3642],{"class":3632},[33,9161,943],{"class":59},[33,9163,9164],{"class":35,"line":1583},[33,9165,3228],{"class":59},[33,9167,9168],{"class":35,"line":3369},[33,9169,9170],{"class":87},"    \u002F\u002F 1.创建数组\n",[33,9172,9173,9175,9177,9179,9181,9183,9185,9187,9189,9191,9193,9195,9197,9199,9201,9203,9205,9207,9209,9211,9213,9215,9217,9219,9221,9223],{"class":35,"line":3396},[33,9174,3653],{"class":63},[33,9176,5624],{"class":59},[33,9178,2264],{"class":39},[33,9180,2756],{"class":59},[33,9182,64],{"class":63},[33,9184,1005],{"class":59},[33,9186,2111],{"class":39},[33,9188,2196],{"class":59},[33,9190,1891],{"class":39},[33,9192,2196],{"class":59},[33,9194,2162],{"class":39},[33,9196,2196],{"class":59},[33,9198,2238],{"class":39},[33,9200,2196],{"class":59},[33,9202,2036],{"class":39},[33,9204,2196],{"class":59},[33,9206,1897],{"class":39},[33,9208,2196],{"class":59},[33,9210,2264],{"class":39},[33,9212,2196],{"class":59},[33,9214,2213],{"class":39},[33,9216,2196],{"class":59},[33,9218,2187],{"class":39},[33,9220,2196],{"class":59},[33,9222,2137],{"class":39},[33,9224,5657],{"class":59},[33,9226,9227,9229,9231,9233,9235],{"class":35,"line":3401},[33,9228,3653],{"class":63},[33,9230,8991],{"class":59},[33,9232,64],{"class":63},[33,9234,2264],{"class":39},[33,9236,2976],{"class":59},[33,9238,9239,9241,9243,9245,9247],{"class":35,"line":3418},[33,9240,3653],{"class":63},[33,9242,8178],{"class":63},[33,9244,19],{"class":59},[33,9246,64],{"class":63},[33,9248,8698],{"class":59},[33,9250,9251],{"class":35,"line":3423},[33,9252,9253],{"class":87},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[33,9255,9256,9259],{"class":35,"line":3428},[33,9257,9258],{"class":3632},"    bubbleSort",[33,9260,9261],{"class":59},"(p,len);\n",[33,9263,9264],{"class":35,"line":3433},[33,9265,127],{"emptyLinePlaceholder":126},[33,9267,9268],{"class":35,"line":3447},[33,9269,9270],{"class":87},"    \u002F\u002F 3.打印排序后的数组\n",[33,9272,9273,9275,9277,9279,9281,9283,9285,9287,9289,9292,9294],{"class":35,"line":3452},[33,9274,4864],{"class":63},[33,9276,3332],{"class":59},[33,9278,1828],{"class":63},[33,9280,4697],{"class":59},[33,9282,64],{"class":63},[33,9284,2010],{"class":39},[33,9286,4877],{"class":59},[33,9288,2726],{"class":63},[33,9290,9291],{"class":59},"len; i",[33,9293,3960],{"class":63},[33,9295,157],{"class":59},[33,9297,9298],{"class":35,"line":4243},[33,9299,3698],{"class":59},[33,9301,9302,9304,9306,9308,9310,9313],{"class":35,"line":4257},[33,9303,5114],{"class":59},[33,9305,8079],{"class":63},[33,9307,19],{"class":59},[33,9309,2859],{"class":63},[33,9311,9312],{"class":117},"\"\"",[33,9314,2976],{"class":59},[33,9316,9317,9320,9322],{"class":35,"line":4265},[33,9318,9319],{"class":59},"        p",[33,9321,3960],{"class":63},[33,9323,2976],{"class":59},[33,9325,9326],{"class":35,"line":4270},[33,9327,3855],{"class":59},[33,9329,9330],{"class":35,"line":4276},[33,9331,3247],{"class":59},[1729,9333,9334],{},"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":43,"depth":43,"links":9336},[9337,9338,9339,9340,9341,9342,9343,9344],{"id":7943,"depth":43,"text":7944},{"id":8109,"depth":43,"text":8110},{"id":8265,"depth":43,"text":8266},{"id":8343,"depth":43,"text":8344},{"id":8422,"depth":43,"text":8423},{"id":8521,"depth":43,"text":8522},{"id":8760,"depth":43,"text":8761},{"id":8938,"depth":43,"text":8939},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7932,"description":7940},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9351,"title":9352,"body":9353,"description":9360,"extension":1752,"meta":12332,"navigation":126,"path":12333,"seo":12334,"stem":12335,"__hash__":12336},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9354,"toc":12323},[9355,9358,9361,9365,9368,9371,9382,9720,9723,9727,9730,9737,9992,9996,9999,10002,10157,10161,10164,10167,10373,10377,10380,10683,10685,10693,10697,10700,10851,10853,10864,10921,10925,10930,11587,11595,11598,11692,11694,12314,12320],[10,9356,9352],{"id":9357},"_4结构体",[19,9359,9360],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9362,9364],{"id":9363},"_41结构体定义与使用","4.1结构体定义与使用",[19,9366,9367],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9369,9370],{},"通过结构体创建变量的方式：",[2822,9372,9373,9376,9379],{},[165,9374,9375],{},"struct 结构体名 变量名",[165,9377,9378],{},"struct 结构体名 变量名={成员1值，成员2值...}",[165,9380,9381],{},"定义结构体时顺便创建变量",[23,9383,9385],{"className":1814,"code":9384,"language":1816,"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,9386,9387,9393,9403,9410,9415,9423,9427,9432,9436,9441,9446,9451,9458,9463,9470,9474,9481,9485,9489,9493,9497,9501,9505,9511,9515,9521,9529,9537,9541,9546,9551,9562,9567,9579,9590,9601,9606,9630,9635,9641,9668,9673,9679,9691,9703,9715],{"__ignoreMap":28},[33,9388,9389,9391],{"class":35,"line":36},[33,9390,3618],{"class":63},[33,9392,3621],{"class":117},[33,9394,9395,9397,9399,9401],{"class":35,"line":43},[33,9396,3626],{"class":63},[33,9398,3629],{"class":63},[33,9400,3633],{"class":3632},[33,9402,2976],{"class":59},[33,9404,9405,9407],{"class":35,"line":130},[33,9406,3618],{"class":63},[33,9408,9409],{"class":117},"\u003Cstring>\n",[33,9411,9412],{"class":35,"line":146},[33,9413,9414],{"class":87},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[33,9416,9417,9420],{"class":35,"line":267},[33,9418,9419],{"class":63},"struct",[33,9421,9422],{"class":3632}," Student\n",[33,9424,9425],{"class":35,"line":275},[33,9426,3228],{"class":59},[33,9428,9429],{"class":35,"line":392},[33,9430,9431],{"class":87},"    \u002F\u002F成员列表\n",[33,9433,9434],{"class":35,"line":406},[33,9435,127],{"emptyLinePlaceholder":126},[33,9437,9438],{"class":35,"line":418},[33,9439,9440],{"class":87},"    \u002F\u002F姓名\n",[33,9442,9443],{"class":35,"line":425},[33,9444,9445],{"class":59},"    string name;\n",[33,9447,9448],{"class":35,"line":1147},[33,9449,9450],{"class":87},"    \u002F\u002F年龄\n",[33,9452,9453,9455],{"class":35,"line":1329},[33,9454,3653],{"class":63},[33,9456,9457],{"class":59}," age;\n",[33,9459,9460],{"class":35,"line":1341},[33,9461,9462],{"class":87},"    \u002F\u002F分数\n",[33,9464,9465,9467],{"class":35,"line":1348},[33,9466,3653],{"class":63},[33,9468,9469],{"class":59}," score;\n",[33,9471,9472],{"class":35,"line":1529},[33,9473,5657],{"class":59},[33,9475,9476,9478],{"class":35,"line":1546},[33,9477,9419],{"class":63},[33,9479,9480],{"class":3632}," School\n",[33,9482,9483],{"class":35,"line":1551},[33,9484,3228],{"class":59},[33,9486,9487],{"class":35,"line":1566},[33,9488,9431],{"class":87},[33,9490,9491],{"class":35,"line":1578},[33,9492,127],{"emptyLinePlaceholder":126},[33,9494,9495],{"class":35,"line":1583},[33,9496,9440],{"class":87},[33,9498,9499],{"class":35,"line":3369},[33,9500,9445],{"class":59},[33,9502,9503],{"class":35,"line":3396},[33,9504,9450],{"class":87},[33,9506,9507,9509],{"class":35,"line":3401},[33,9508,3653],{"class":63},[33,9510,9457],{"class":59},[33,9512,9513],{"class":35,"line":3418},[33,9514,9462],{"class":87},[33,9516,9517,9519],{"class":35,"line":3423},[33,9518,3653],{"class":63},[33,9520,9469],{"class":59},[33,9522,9523,9526],{"class":35,"line":3428},[33,9524,9525],{"class":59},"} s3;",[33,9527,9528],{"class":87}," \u002F\u002F创建结构体时就创建了变量\n",[33,9530,9531,9533,9535],{"class":35,"line":3433},[33,9532,1828],{"class":63},[33,9534,3642],{"class":3632},[33,9536,943],{"class":59},[33,9538,9539],{"class":35,"line":3447},[33,9540,3228],{"class":59},[33,9542,9543],{"class":35,"line":3452},[33,9544,9545],{"class":87},"    \u002F\u002F2.通过学生类型创建具体学生\n",[33,9547,9548],{"class":35,"line":4243},[33,9549,9550],{"class":87},"    \u002F\u002F2.1 struct Student s1;\n",[33,9552,9553,9556,9559],{"class":35,"line":4257},[33,9554,9555],{"class":63},"    struct",[33,9557,9558],{"class":3632}," Student",[33,9560,9561],{"class":59}," s1;\n",[33,9563,9564],{"class":35,"line":4265},[33,9565,9566],{"class":87},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[33,9568,9569,9572,9574,9577],{"class":35,"line":4270},[33,9570,9571],{"class":59},"    s1.name",[33,9573,64],{"class":63},[33,9575,9576],{"class":117},"\"张三\"",[33,9578,2976],{"class":59},[33,9580,9581,9584,9586,9588],{"class":35,"line":4276},[33,9582,9583],{"class":59},"    s1.age",[33,9585,64],{"class":63},[33,9587,2467],{"class":39},[33,9589,2976],{"class":59},[33,9591,9592,9595,9597,9599],{"class":35,"line":4282},[33,9593,9594],{"class":59},"    s1.score",[33,9596,64],{"class":63},[33,9598,2072],{"class":39},[33,9600,2976],{"class":59},[33,9602,9603],{"class":35,"line":4287},[33,9604,9605],{"class":87},"    \u002F\u002F输出结果\n",[33,9607,9609,9611,9613,9616,9618,9621,9623,9626,9628],{"class":35,"line":9608},37,[33,9610,3233],{"class":59},[33,9612,2859],{"class":63},[33,9614,9615],{"class":59},"s1.name",[33,9617,2859],{"class":63},[33,9619,9620],{"class":59},"s1.age",[33,9622,2859],{"class":63},[33,9624,9625],{"class":59},"s1.score",[33,9627,2859],{"class":63},[33,9629,2881],{"class":59},[33,9631,9633],{"class":35,"line":9632},38,[33,9634,127],{"emptyLinePlaceholder":126},[33,9636,9638],{"class":35,"line":9637},39,[33,9639,9640],{"class":87},"    \u002F\u002F2.2 struct Student s2={...}\n",[33,9642,9644,9646,9648,9651,9653,9655,9658,9660,9662,9664,9666],{"class":35,"line":9643},40,[33,9645,9555],{"class":63},[33,9647,9558],{"class":3632},[33,9649,9650],{"class":59}," s2",[33,9652,64],{"class":63},[33,9654,1005],{"class":59},[33,9656,9657],{"class":117},"\"王五\"",[33,9659,2196],{"class":59},[33,9661,2467],{"class":39},[33,9663,2196],{"class":59},[33,9665,2072],{"class":39},[33,9667,5657],{"class":59},[33,9669,9671],{"class":35,"line":9670},41,[33,9672,127],{"emptyLinePlaceholder":126},[33,9674,9676],{"class":35,"line":9675},42,[33,9677,9678],{"class":87},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[33,9680,9682,9685,9687,9689],{"class":35,"line":9681},43,[33,9683,9684],{"class":59},"    s3.name",[33,9686,64],{"class":63},[33,9688,5341],{"class":117},[33,9690,2976],{"class":59},[33,9692,9694,9697,9699,9701],{"class":35,"line":9693},44,[33,9695,9696],{"class":59},"    s3.age",[33,9698,64],{"class":63},[33,9700,2467],{"class":39},[33,9702,2976],{"class":59},[33,9704,9706,9709,9711,9713],{"class":35,"line":9705},45,[33,9707,9708],{"class":59},"    s3.score",[33,9710,64],{"class":63},[33,9712,2517],{"class":39},[33,9714,2976],{"class":59},[33,9716,9718],{"class":35,"line":9717},46,[33,9719,3247],{"class":59},[19,9721,9722],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9724,9726],{"id":9725},"_42结构体数组","4.2结构体数组",[19,9728,9729],{},"将自定义的结构体放入到数组中方便维护",[19,9731,9732,9733,9736],{},"语法：struct 结构体名 数组名",[33,9734,9735],{},"元素个数","={ {}，{},...{} };",[23,9738,9740],{"className":1814,"code":9739,"language":1816,"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,9741,9742,9748,9758,9764,9769,9775,9779,9783,9789,9795,9799,9803,9811,9815,9820,9835,9839,9855,9871,9875,9880,9896,9911,9926,9931,9957,9961,9984,9988],{"__ignoreMap":28},[33,9743,9744,9746],{"class":35,"line":36},[33,9745,3618],{"class":63},[33,9747,3621],{"class":117},[33,9749,9750,9752,9754,9756],{"class":35,"line":43},[33,9751,3626],{"class":63},[33,9753,3629],{"class":63},[33,9755,3633],{"class":3632},[33,9757,2976],{"class":59},[33,9759,9760,9762],{"class":35,"line":130},[33,9761,3618],{"class":63},[33,9763,9409],{"class":117},[33,9765,9766],{"class":35,"line":146},[33,9767,9768],{"class":87},"\u002F\u002F1.定义结构体\n",[33,9770,9771,9773],{"class":35,"line":267},[33,9772,9419],{"class":63},[33,9774,9422],{"class":3632},[33,9776,9777],{"class":35,"line":275},[33,9778,3228],{"class":59},[33,9780,9781],{"class":35,"line":392},[33,9782,9445],{"class":59},[33,9784,9785,9787],{"class":35,"line":406},[33,9786,3653],{"class":63},[33,9788,9457],{"class":59},[33,9790,9791,9793],{"class":35,"line":418},[33,9792,3653],{"class":63},[33,9794,9469],{"class":59},[33,9796,9797],{"class":35,"line":425},[33,9798,127],{"emptyLinePlaceholder":126},[33,9800,9801],{"class":35,"line":1147},[33,9802,5657],{"class":59},[33,9804,9805,9807,9809],{"class":35,"line":1329},[33,9806,1828],{"class":63},[33,9808,3642],{"class":3632},[33,9810,943],{"class":59},[33,9812,9813],{"class":35,"line":1341},[33,9814,3228],{"class":59},[33,9816,9817],{"class":35,"line":1348},[33,9818,9819],{"class":87},"    \u002F\u002F2.创建结构体数组\n",[33,9821,9822,9824,9826,9829,9831,9833],{"class":35,"line":1529},[33,9823,9555],{"class":63},[33,9825,9558],{"class":3632},[33,9827,9828],{"class":59}," stuArray[",[33,9830,1897],{"class":39},[33,9832,2756],{"class":59},[33,9834,6569],{"class":63},[33,9836,9837],{"class":35,"line":1546},[33,9838,3698],{"class":59},[33,9840,9841,9843,9845,9847,9849,9851,9853],{"class":35,"line":1551},[33,9842,6578],{"class":59},[33,9844,9576],{"class":117},[33,9846,2196],{"class":59},[33,9848,2467],{"class":39},[33,9850,2196],{"class":59},[33,9852,2129],{"class":39},[33,9854,6591],{"class":59},[33,9856,9857,9859,9861,9863,9865,9867,9869],{"class":35,"line":1566},[33,9858,6578],{"class":59},[33,9860,5341],{"class":117},[33,9862,2196],{"class":59},[33,9864,2392],{"class":39},[33,9866,2196],{"class":59},[33,9868,2392],{"class":39},[33,9870,3247],{"class":59},[33,9872,9873],{"class":35,"line":1578},[33,9874,3855],{"class":59},[33,9876,9877],{"class":35,"line":1583},[33,9878,9879],{"class":87},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[33,9881,9882,9885,9887,9890,9892,9894],{"class":35,"line":3369},[33,9883,9884],{"class":59},"    stuArray[",[33,9886,2036],{"class":39},[33,9888,9889],{"class":59},"].name",[33,9891,64],{"class":63},[33,9893,5364],{"class":117},[33,9895,2976],{"class":59},[33,9897,9898,9900,9902,9905,9907,9909],{"class":35,"line":3396},[33,9899,9884],{"class":59},[33,9901,2036],{"class":39},[33,9903,9904],{"class":59},"].age",[33,9906,64],{"class":63},[33,9908,1897],{"class":39},[33,9910,2976],{"class":59},[33,9912,9913,9915,9917,9920,9922,9924],{"class":35,"line":3401},[33,9914,9884],{"class":59},[33,9916,2036],{"class":39},[33,9918,9919],{"class":59},"].score",[33,9921,64],{"class":63},[33,9923,1897],{"class":39},[33,9925,2976],{"class":59},[33,9927,9928],{"class":35,"line":3418},[33,9929,9930],{"class":87},"    \u002F\u002F4.遍历结构体数组\n",[33,9932,9933,9935,9937,9939,9941,9943,9945,9947,9949,9951,9953,9955],{"class":35,"line":3423},[33,9934,4864],{"class":63},[33,9936,3332],{"class":59},[33,9938,1828],{"class":63},[33,9940,4697],{"class":59},[33,9942,64],{"class":63},[33,9944,2010],{"class":39},[33,9946,4704],{"class":59},[33,9948,2726],{"class":63},[33,9950,1897],{"class":39},[33,9952,4704],{"class":59},[33,9954,3960],{"class":63},[33,9956,157],{"class":59},[33,9958,9959],{"class":35,"line":3428},[33,9960,3698],{"class":59},[33,9962,9963,9965,9967,9970,9972,9975,9977,9980,9982],{"class":35,"line":3433},[33,9964,5114],{"class":59},[33,9966,2859],{"class":63},[33,9968,9969],{"class":59},"stuArray[i].name",[33,9971,2859],{"class":63},[33,9973,9974],{"class":59},"stuArray[i].age",[33,9976,2859],{"class":63},[33,9978,9979],{"class":59},"stuArray[i].score",[33,9981,2859],{"class":63},[33,9983,2881],{"class":59},[33,9985,9986],{"class":35,"line":3447},[33,9987,3855],{"class":59},[33,9989,9990],{"class":35,"line":3452},[33,9991,3247],{"class":59},[14,9993,9995],{"id":9994},"_43结构体指针","4.3结构体指针",[19,9997,9998],{},"作用：通过指针访问结构体中的成员",[19,10000,10001],{},"利用操作符->可以通过结构体指针访问结构体属性",[23,10003,10005],{"className":1814,"code":10004,"language":1816,"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,10006,10007,10013,10023,10029,10033,10039,10043,10047,10053,10059,10063,10071,10075,10080,10105,10110,10125,10130,10153],{"__ignoreMap":28},[33,10008,10009,10011],{"class":35,"line":36},[33,10010,3618],{"class":63},[33,10012,3621],{"class":117},[33,10014,10015,10017,10019,10021],{"class":35,"line":43},[33,10016,3626],{"class":63},[33,10018,3629],{"class":63},[33,10020,3633],{"class":3632},[33,10022,2976],{"class":59},[33,10024,10025,10027],{"class":35,"line":130},[33,10026,3618],{"class":63},[33,10028,9409],{"class":117},[33,10030,10031],{"class":35,"line":146},[33,10032,9768],{"class":87},[33,10034,10035,10037],{"class":35,"line":267},[33,10036,9419],{"class":63},[33,10038,9422],{"class":3632},[33,10040,10041],{"class":35,"line":275},[33,10042,3228],{"class":59},[33,10044,10045],{"class":35,"line":392},[33,10046,9445],{"class":59},[33,10048,10049,10051],{"class":35,"line":406},[33,10050,3653],{"class":63},[33,10052,9457],{"class":59},[33,10054,10055,10057],{"class":35,"line":418},[33,10056,3653],{"class":63},[33,10058,9469],{"class":59},[33,10060,10061],{"class":35,"line":425},[33,10062,5657],{"class":59},[33,10064,10065,10067,10069],{"class":35,"line":1147},[33,10066,1828],{"class":63},[33,10068,3642],{"class":3632},[33,10070,943],{"class":59},[33,10072,10073],{"class":35,"line":1329},[33,10074,3228],{"class":59},[33,10076,10077],{"class":35,"line":1341},[33,10078,10079],{"class":87},"    \u002F\u002F创建学生结构体变量\n",[33,10081,10082,10084,10086,10089,10091,10093,10095,10097,10099,10101,10103],{"class":35,"line":1348},[33,10083,9555],{"class":63},[33,10085,9558],{"class":3632},[33,10087,10088],{"class":59}," s",[33,10090,64],{"class":63},[33,10092,1005],{"class":59},[33,10094,9576],{"class":117},[33,10096,2196],{"class":59},[33,10098,2467],{"class":39},[33,10100,2196],{"class":59},[33,10102,3391],{"class":39},[33,10104,5657],{"class":59},[33,10106,10107],{"class":35,"line":1529},[33,10108,10109],{"class":87},"    \u002F\u002F通过指针指向结构体变量\n",[33,10111,10112,10114,10116,10118,10120,10122],{"class":35,"line":1546},[33,10113,9555],{"class":63},[33,10115,9558],{"class":3632},[33,10117,8178],{"class":63},[33,10119,19],{"class":59},[33,10121,7999],{"class":63},[33,10123,10124],{"class":59},"s\n",[33,10126,10127],{"class":35,"line":1551},[33,10128,10129],{"class":87},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[33,10131,10132,10134,10136,10139,10141,10144,10146,10149,10151],{"class":35,"line":1566},[33,10133,3233],{"class":59},[33,10135,2859],{"class":63},[33,10137,10138],{"class":59},"p->name",[33,10140,2859],{"class":63},[33,10142,10143],{"class":59},"p->age",[33,10145,2859],{"class":63},[33,10147,10148],{"class":59},"p->score",[33,10150,2859],{"class":63},[33,10152,2881],{"class":59},[33,10154,10155],{"class":35,"line":1578},[33,10156,3247],{"class":59},[14,10158,10160],{"id":10159},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10162,10163],{},"作用：结构体中的成员可以是另一个结构体",[19,10165,10166],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[23,10168,10170],{"className":1814,"code":10169,"language":1816,"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,10171,10172,10178,10188,10194,10199,10207,10211,10215,10221,10227,10231,10236,10243,10247,10254,10258,10264,10269,10273,10281,10285,10290,10295,10300,10311,10323,10334,10347,10358,10369],{"__ignoreMap":28},[33,10173,10174,10176],{"class":35,"line":36},[33,10175,3618],{"class":63},[33,10177,3621],{"class":117},[33,10179,10180,10182,10184,10186],{"class":35,"line":43},[33,10181,3626],{"class":63},[33,10183,3629],{"class":63},[33,10185,3633],{"class":3632},[33,10187,2976],{"class":59},[33,10189,10190,10192],{"class":35,"line":130},[33,10191,3618],{"class":63},[33,10193,9409],{"class":117},[33,10195,10196],{"class":35,"line":146},[33,10197,10198],{"class":87},"\u002F\u002F定义学生结构体\n",[33,10200,10201,10203,10205],{"class":35,"line":267},[33,10202,9419],{"class":63},[33,10204,9558],{"class":3632},[33,10206,4340],{"class":59},[33,10208,10209],{"class":35,"line":275},[33,10210,3228],{"class":59},[33,10212,10213],{"class":35,"line":392},[33,10214,9445],{"class":59},[33,10216,10217,10219],{"class":35,"line":406},[33,10218,3653],{"class":63},[33,10220,9457],{"class":59},[33,10222,10223,10225],{"class":35,"line":418},[33,10224,3653],{"class":63},[33,10226,9469],{"class":59},[33,10228,10229],{"class":35,"line":425},[33,10230,3247],{"class":59},[33,10232,10233],{"class":35,"line":1147},[33,10234,10235],{"class":87},"\u002F\u002F定义老师结构体\n",[33,10237,10238,10240],{"class":35,"line":1329},[33,10239,9419],{"class":63},[33,10241,10242],{"class":3632}," Teacher\n",[33,10244,10245],{"class":35,"line":1341},[33,10246,3228],{"class":59},[33,10248,10249,10251],{"class":35,"line":1348},[33,10250,3653],{"class":63},[33,10252,10253],{"class":59}," id;\n",[33,10255,10256],{"class":35,"line":1529},[33,10257,9445],{"class":59},[33,10259,10260,10262],{"class":35,"line":1546},[33,10261,3653],{"class":63},[33,10263,9457],{"class":59},[33,10265,10266],{"class":35,"line":1551},[33,10267,10268],{"class":59},"    Student stu;\n",[33,10270,10271],{"class":35,"line":1566},[33,10272,3247],{"class":59},[33,10274,10275,10277,10279],{"class":35,"line":1578},[33,10276,1828],{"class":63},[33,10278,3642],{"class":3632},[33,10280,7638],{"class":59},[33,10282,10283],{"class":35,"line":1583},[33,10284,3228],{"class":59},[33,10286,10287],{"class":35,"line":3369},[33,10288,10289],{"class":87},"    \u002F\u002F结构体嵌套结构体\n",[33,10291,10292],{"class":35,"line":3396},[33,10293,10294],{"class":87},"    \u002F\u002F创建老师\n",[33,10296,10297],{"class":35,"line":3401},[33,10298,10299],{"class":59},"    Teacher t;\n",[33,10301,10302,10305,10307,10309],{"class":35,"line":3418},[33,10303,10304],{"class":59},"    t.id",[33,10306,64],{"class":63},[33,10308,2129],{"class":39},[33,10310,2976],{"class":59},[33,10312,10313,10316,10318,10321],{"class":35,"line":3423},[33,10314,10315],{"class":59},"    t.name",[33,10317,64],{"class":63},[33,10319,10320],{"class":117},"\"老王\"",[33,10322,2976],{"class":59},[33,10324,10325,10328,10330,10332],{"class":35,"line":3428},[33,10326,10327],{"class":59},"    t.age",[33,10329,64],{"class":63},[33,10331,2467],{"class":39},[33,10333,2976],{"class":59},[33,10335,10336,10339,10341,10344],{"class":35,"line":3433},[33,10337,10338],{"class":59},"    t.stu.name",[33,10340,64],{"class":63},[33,10342,10343],{"class":117},"\"小王\"",[33,10345,10346],{"class":59},"；\n",[33,10348,10349,10352,10354,10356],{"class":35,"line":3447},[33,10350,10351],{"class":59},"    t.stu.age",[33,10353,64],{"class":63},[33,10355,2517],{"class":39},[33,10357,2976],{"class":59},[33,10359,10360,10363,10365,10367],{"class":35,"line":3452},[33,10361,10362],{"class":59},"    t.stu.score",[33,10364,64],{"class":63},[33,10366,2162],{"class":39},[33,10368,2976],{"class":59},[33,10370,10371],{"class":35,"line":4243},[33,10372,3247],{"class":59},[14,10374,10376],{"id":10375},"_45结构体做函数参数","4.5结构体做函数参数",[19,10378,10379],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[23,10381,10383],{"className":1814,"code":10382,"language":1816,"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,10384,10385,10391,10401,10407,10413,10417,10421,10427,10433,10437,10442,10447,10464,10468,10501,10505,10510,10529,10533,10564,10568,10576,10580,10589,10601,10613,10625,10638,10646,10659,10671,10679],{"__ignoreMap":28},[33,10386,10387,10389],{"class":35,"line":36},[33,10388,3618],{"class":63},[33,10390,3621],{"class":117},[33,10392,10393,10395,10397,10399],{"class":35,"line":43},[33,10394,3626],{"class":63},[33,10396,3629],{"class":63},[33,10398,3633],{"class":3632},[33,10400,2976],{"class":59},[33,10402,10403,10405],{"class":35,"line":130},[33,10404,3618],{"class":63},[33,10406,9409],{"class":117},[33,10408,10409,10411],{"class":35,"line":146},[33,10410,9419],{"class":63},[33,10412,9422],{"class":3632},[33,10414,10415],{"class":35,"line":267},[33,10416,3228],{"class":59},[33,10418,10419],{"class":35,"line":275},[33,10420,9445],{"class":59},[33,10422,10423,10425],{"class":35,"line":392},[33,10424,3653],{"class":63},[33,10426,9457],{"class":59},[33,10428,10429,10431],{"class":35,"line":406},[33,10430,3653],{"class":63},[33,10432,9469],{"class":59},[33,10434,10435],{"class":35,"line":418},[33,10436,5657],{"class":59},[33,10438,10439],{"class":35,"line":425},[33,10440,10441],{"class":87},"\u002F\u002F打印学生信息的函数\n",[33,10443,10444],{"class":35,"line":1147},[33,10445,10446],{"class":87},"\u002F\u002F值传递\n",[33,10448,10449,10451,10454,10456,10458,10460,10462],{"class":35,"line":1329},[33,10450,7025],{"class":63},[33,10452,10453],{"class":3632}," printStudent1",[33,10455,109],{"class":59},[33,10457,9419],{"class":63},[33,10459,9558],{"class":3632},[33,10461,10088],{"class":6877},[33,10463,157],{"class":59},[33,10465,10466],{"class":35,"line":1341},[33,10467,3228],{"class":59},[33,10469,10470,10472,10474,10477,10479,10482,10484,10487,10489,10491,10493,10496,10498],{"class":35,"line":1348},[33,10471,8189],{"class":59},[33,10473,2859],{"class":63},[33,10475,10476],{"class":59}," s.name ",[33,10478,2859],{"class":63},[33,10480,10481],{"class":117}," \" \"",[33,10483,3127],{"class":63},[33,10485,10486],{"class":59}," s.age ",[33,10488,2859],{"class":63},[33,10490,10481],{"class":117},[33,10492,3127],{"class":63},[33,10494,10495],{"class":59}," s.score ",[33,10497,2859],{"class":63},[33,10499,10500],{"class":59}," endl;\n",[33,10502,10503],{"class":35,"line":1529},[33,10504,3247],{"class":59},[33,10506,10507],{"class":35,"line":1546},[33,10508,10509],{"class":87},"\u002F\u002F地址传递\n",[33,10511,10512,10514,10517,10519,10521,10523,10525,10527],{"class":35,"line":1551},[33,10513,7025],{"class":63},[33,10515,10516],{"class":3632}," printStudent2",[33,10518,109],{"class":59},[33,10520,9419],{"class":63},[33,10522,9558],{"class":3632},[33,10524,8178],{"class":63},[33,10526,2512],{"class":6877},[33,10528,157],{"class":59},[33,10530,10531],{"class":35,"line":1566},[33,10532,3228],{"class":59},[33,10534,10535,10537,10539,10542,10544,10546,10548,10551,10553,10555,10557,10560,10562],{"class":35,"line":1578},[33,10536,8189],{"class":59},[33,10538,2859],{"class":63},[33,10540,10541],{"class":59}," s->name ",[33,10543,2859],{"class":63},[33,10545,10481],{"class":117},[33,10547,3127],{"class":63},[33,10549,10550],{"class":59}," s->age ",[33,10552,2859],{"class":63},[33,10554,10481],{"class":117},[33,10556,3127],{"class":63},[33,10558,10559],{"class":59}," s->score ",[33,10561,2859],{"class":63},[33,10563,10500],{"class":59},[33,10565,10566],{"class":35,"line":1583},[33,10567,3247],{"class":59},[33,10569,10570,10572,10574],{"class":35,"line":3369},[33,10571,1828],{"class":63},[33,10573,3642],{"class":3632},[33,10575,943],{"class":59},[33,10577,10578],{"class":35,"line":3396},[33,10579,3228],{"class":59},[33,10581,10582,10584,10586],{"class":35,"line":3401},[33,10583,9555],{"class":63},[33,10585,9558],{"class":3632},[33,10587,10588],{"class":59}," s;\n",[33,10590,10591,10594,10596,10599],{"class":35,"line":3418},[33,10592,10593],{"class":59},"    s.name ",[33,10595,64],{"class":63},[33,10597,10598],{"class":117}," \"张三\"",[33,10600,2976],{"class":59},[33,10602,10603,10606,10608,10611],{"class":35,"line":3423},[33,10604,10605],{"class":59},"    s.age ",[33,10607,64],{"class":63},[33,10609,10610],{"class":39}," 20",[33,10612,2976],{"class":59},[33,10614,10615,10618,10620,10623],{"class":35,"line":3428},[33,10616,10617],{"class":59},"    s.score ",[33,10619,64],{"class":63},[33,10621,10622],{"class":39}," 85",[33,10624,2976],{"class":59},[33,10626,10627,10629,10631,10634,10636],{"class":35,"line":3433},[33,10628,3233],{"class":59},[33,10630,2859],{"class":63},[33,10632,10633],{"class":117},"\"值传递:\"",[33,10635,2859],{"class":63},[33,10637,2881],{"class":59},[33,10639,10640,10643],{"class":35,"line":3447},[33,10641,10642],{"class":3632},"    printStudent1",[33,10644,10645],{"class":59},"(s);\n",[33,10647,10648,10650,10652,10655,10657],{"class":35,"line":3452},[33,10649,3233],{"class":59},[33,10651,2859],{"class":63},[33,10653,10654],{"class":117},"\"地址传递:\"",[33,10656,2859],{"class":63},[33,10658,2881],{"class":59},[33,10660,10661,10664,10666,10668],{"class":35,"line":4243},[33,10662,10663],{"class":3632},"    printStudent2",[33,10665,109],{"class":59},[33,10667,2171],{"class":63},[33,10669,10670],{"class":59},"s); \n",[33,10672,10673,10675,10677],{"class":35,"line":4257},[33,10674,5752],{"class":63},[33,10676,829],{"class":39},[33,10678,2976],{"class":59},[33,10680,10681],{"class":35,"line":4265},[33,10682,3247],{"class":59},[19,10684,160],{},[2822,10686,10687,10690],{},[165,10688,10689],{},"1.先定义结构体，不要在函数中写结构体的定义",[165,10691,10692],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10694,10696],{"id":10695},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10698,10699],{},"用const防止误操作",[23,10701,10703],{"className":1814,"code":10702,"language":1816,"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,10704,10705,10711,10721,10727,10732,10736,10740,10746,10752,10756,10772,10776,10799,10803,10811,10815,10836,10843,10847],{"__ignoreMap":28},[33,10706,10707,10709],{"class":35,"line":36},[33,10708,3618],{"class":63},[33,10710,3621],{"class":117},[33,10712,10713,10715,10717,10719],{"class":35,"line":43},[33,10714,3626],{"class":63},[33,10716,3629],{"class":63},[33,10718,3633],{"class":3632},[33,10720,2976],{"class":59},[33,10722,10723,10725],{"class":35,"line":130},[33,10724,3618],{"class":63},[33,10726,9409],{"class":117},[33,10728,10729],{"class":35,"line":146},[33,10730,10731],{"class":59},"sctuct Student\n",[33,10733,10734],{"class":35,"line":267},[33,10735,3228],{"class":59},[33,10737,10738],{"class":35,"line":275},[33,10739,9445],{"class":59},[33,10741,10742,10744],{"class":35,"line":392},[33,10743,3653],{"class":63},[33,10745,9457],{"class":59},[33,10747,10748,10750],{"class":35,"line":406},[33,10749,3653],{"class":63},[33,10751,9469],{"class":59},[33,10753,10754],{"class":35,"line":418},[33,10755,5657],{"class":59},[33,10757,10758,10760,10763,10765,10768,10770],{"class":35,"line":425},[33,10759,7025],{"class":63},[33,10761,10762],{"class":3632}," printStudents",[33,10764,109],{"class":59},[33,10766,10767],{"class":3632},"student",[33,10769,10088],{"class":6877},[33,10771,157],{"class":59},[33,10773,10774],{"class":35,"line":1147},[33,10775,3228],{"class":59},[33,10777,10778,10780,10782,10785,10787,10790,10792,10795,10797],{"class":35,"line":1329},[33,10779,3233],{"class":59},[33,10781,2859],{"class":63},[33,10783,10784],{"class":59},"s.name",[33,10786,2859],{"class":63},[33,10788,10789],{"class":59},"s.age",[33,10791,2859],{"class":63},[33,10793,10794],{"class":59},"s.score",[33,10796,2859],{"class":63},[33,10798,2881],{"class":59},[33,10800,10801],{"class":35,"line":1341},[33,10802,3247],{"class":59},[33,10804,10805,10807,10809],{"class":35,"line":1348},[33,10806,1828],{"class":63},[33,10808,3642],{"class":3632},[33,10810,7638],{"class":59},[33,10812,10813],{"class":35,"line":1529},[33,10814,3228],{"class":59},[33,10816,10817,10820,10822,10824,10826,10828,10830,10832,10834],{"class":35,"line":1546},[33,10818,10819],{"class":59},"    Student s",[33,10821,64],{"class":63},[33,10823,1005],{"class":59},[33,10825,9576],{"class":117},[33,10827,2196],{"class":59},[33,10829,2467],{"class":39},[33,10831,2196],{"class":59},[33,10833,2467],{"class":39},[33,10835,5657],{"class":59},[33,10837,10838,10841],{"class":35,"line":1551},[33,10839,10840],{"class":3632},"    printStudent",[33,10842,10645],{"class":59},[33,10844,10845],{"class":35,"line":1566},[33,10846,127],{"emptyLinePlaceholder":126},[33,10848,10849],{"class":35,"line":1578},[33,10850,3247],{"class":59},[19,10852,160],{},[2822,10854,10855,10858,10861],{},[165,10856,10857],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[165,10859,10860],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[165,10862,10863],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[23,10865,10867],{"className":1814,"code":10866,"language":1816,"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,10868,10869,10888,10892,10897,10917],{"__ignoreMap":28},[33,10870,10871,10873,10875,10877,10879,10882,10884,10886],{"class":35,"line":36},[33,10872,7025],{"class":63},[33,10874,10762],{"class":3632},[33,10876,109],{"class":59},[33,10878,8452],{"class":63},[33,10880,10881],{"class":3632}," student",[33,10883,8178],{"class":63},[33,10885,2512],{"class":6877},[33,10887,157],{"class":59},[33,10889,10890],{"class":35,"line":43},[33,10891,3228],{"class":59},[33,10893,10894],{"class":35,"line":130},[33,10895,10896],{"class":87},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[33,10898,10899,10901,10903,10905,10907,10909,10911,10913,10915],{"class":35,"line":146},[33,10900,3233],{"class":59},[33,10902,2859],{"class":63},[33,10904,10784],{"class":59},[33,10906,2859],{"class":63},[33,10908,10789],{"class":59},[33,10910,2859],{"class":63},[33,10912,10794],{"class":59},[33,10914,2859],{"class":63},[33,10916,2881],{"class":59},[33,10918,10919],{"class":35,"line":267},[33,10920,3247],{"class":59},[14,10922,10924],{"id":10923},"_47案例","4.7案例",[162,10926,10927],{},[165,10928,10929],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[23,10931,10933],{"className":1814,"code":10932,"language":1816,"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,10934,10935,10941,10951,10957,10964,10968,10974,10978,10983,10989,10995,10999,11003,11009,11013,11018,11023,11036,11040,11045,11071,11075,11087,11114,11118,11130,11140,11144,11149,11178,11182,11194,11203,11230,11241,11251,11255,11259,11263,11268,11292,11296,11320,11324,11343,11369,11373,11398,11421,11445,11450,11455,11460,11469,11474,11480,11501,11507,11521,11527,11554,11563,11569,11577,11582],{"__ignoreMap":28},[33,10936,10937,10939],{"class":35,"line":36},[33,10938,3618],{"class":63},[33,10940,3621],{"class":117},[33,10942,10943,10945,10947,10949],{"class":35,"line":43},[33,10944,3626],{"class":63},[33,10946,3629],{"class":63},[33,10948,3633],{"class":3632},[33,10950,2976],{"class":59},[33,10952,10953,10955],{"class":35,"line":130},[33,10954,3618],{"class":63},[33,10956,9409],{"class":117},[33,10958,10959,10961],{"class":35,"line":146},[33,10960,3618],{"class":63},[33,10962,10963],{"class":117},"\u003Cctime>\n",[33,10965,10966],{"class":35,"line":267},[33,10967,10198],{"class":87},[33,10969,10970,10972],{"class":35,"line":275},[33,10971,9419],{"class":63},[33,10973,9422],{"class":3632},[33,10975,10976],{"class":35,"line":392},[33,10977,3228],{"class":59},[33,10979,10980],{"class":35,"line":406},[33,10981,10982],{"class":59},"    string sName;\n",[33,10984,10985,10987],{"class":35,"line":418},[33,10986,3653],{"class":63},[33,10988,9457],{"class":59},[33,10990,10991,10993],{"class":35,"line":425},[33,10992,3653],{"class":63},[33,10994,9469],{"class":59},[33,10996,10997],{"class":35,"line":1147},[33,10998,5657],{"class":59},[33,11000,11001],{"class":35,"line":1329},[33,11002,10235],{"class":87},[33,11004,11005,11007],{"class":35,"line":1341},[33,11006,9419],{"class":63},[33,11008,10242],{"class":3632},[33,11010,11011],{"class":35,"line":1348},[33,11012,3228],{"class":59},[33,11014,11015],{"class":35,"line":1529},[33,11016,11017],{"class":59},"    string tName;\n",[33,11019,11020],{"class":35,"line":1546},[33,11021,11022],{"class":87},"    \u002F\u002F学生数组\n",[33,11024,11025,11027,11029,11032,11034],{"class":35,"line":1551},[33,11026,9555],{"class":63},[33,11028,9558],{"class":3632},[33,11030,11031],{"class":59}," sArray[",[33,11033,2137],{"class":39},[33,11035,6351],{"class":59},[33,11037,11038],{"class":35,"line":1566},[33,11039,5657],{"class":59},[33,11041,11042],{"class":35,"line":1578},[33,11043,11044],{"class":87},"\u002F\u002F给老师和学生赋值的函数\n",[33,11046,11047,11049,11052,11054,11056,11059,11062,11065,11067,11069],{"class":35,"line":1583},[33,11048,7025],{"class":63},[33,11050,11051],{"class":3632}," allocateSpace",[33,11053,109],{"class":59},[33,11055,9419],{"class":63},[33,11057,11058],{"class":3632}," Teacher",[33,11060,11061],{"class":6877}," tArray",[33,11063,11064],{"class":59},"[],",[33,11066,1828],{"class":63},[33,11068,8991],{"class":6877},[33,11070,157],{"class":59},[33,11072,11073],{"class":35,"line":3369},[33,11074,3228],{"class":59},[33,11076,11077,11080,11082,11085],{"class":35,"line":3396},[33,11078,11079],{"class":59},"    string nameSeed",[33,11081,64],{"class":63},[33,11083,11084],{"class":117},"\"ABCDE\"",[33,11086,2976],{"class":59},[33,11088,11089,11091,11093,11095,11098,11100,11102,11105,11107,11110,11112],{"class":35,"line":3401},[33,11090,4864],{"class":63},[33,11092,3332],{"class":59},[33,11094,1828],{"class":63},[33,11096,11097],{"class":59}," i ",[33,11099,64],{"class":63},[33,11101,829],{"class":39},[33,11103,11104],{"class":59},"; i ",[33,11106,2726],{"class":63},[33,11108,11109],{"class":59}," len; i",[33,11111,3960],{"class":63},[33,11113,157],{"class":59},[33,11115,11116],{"class":35,"line":3418},[33,11117,3698],{"class":59},[33,11119,11120,11123,11125,11128],{"class":35,"line":3423},[33,11121,11122],{"class":59},"        tArray[i].tName ",[33,11124,64],{"class":63},[33,11126,11127],{"class":117}," \"Teacher_\"",[33,11129,2976],{"class":59},[33,11131,11132,11134,11137],{"class":35,"line":3428},[33,11133,11122],{"class":59},[33,11135,11136],{"class":63},"+=",[33,11138,11139],{"class":59},"nameSeed[i];\n",[33,11141,11142],{"class":35,"line":3433},[33,11143,127],{"emptyLinePlaceholder":126},[33,11145,11146],{"class":35,"line":3447},[33,11147,11148],{"class":87},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[33,11150,11151,11153,11155,11157,11160,11162,11164,11167,11169,11171,11174,11176],{"class":35,"line":3452},[33,11152,5066],{"class":63},[33,11154,3332],{"class":59},[33,11156,1828],{"class":63},[33,11158,11159],{"class":59}," j ",[33,11161,64],{"class":63},[33,11163,829],{"class":39},[33,11165,11166],{"class":59},"; j ",[33,11168,2726],{"class":63},[33,11170,3816],{"class":39},[33,11172,11173],{"class":59},"; j",[33,11175,3960],{"class":63},[33,11177,157],{"class":59},[33,11179,11180],{"class":35,"line":4243},[33,11181,4176],{"class":59},[33,11183,11184,11187,11189,11192],{"class":35,"line":4257},[33,11185,11186],{"class":59},"            tArray[i].sArray[j].sName ",[33,11188,64],{"class":63},[33,11190,11191],{"class":117}," \"Student_\"",[33,11193,2976],{"class":59},[33,11195,11196,11198,11200],{"class":35,"line":4265},[33,11197,11186],{"class":59},[33,11199,11136],{"class":63},[33,11201,11202],{"class":59}," nameSeed[j];\n",[33,11204,11205,11208,11211,11213,11215,11217,11219,11221,11223,11225,11227],{"class":35,"line":4270},[33,11206,11207],{"class":63},"            int",[33,11209,11210],{"class":59}," random",[33,11212,64],{"class":63},[33,11214,4090],{"class":3632},[33,11216,4093],{"class":59},[33,11218,2146],{"class":63},[33,11220,2723],{"class":39},[33,11222,2298],{"class":63},[33,11224,2219],{"class":39},[33,11226,1876],{"class":59},[33,11228,11229],{"class":87},"\u002F\u002F40~99\n",[33,11231,11232,11235,11237,11239],{"class":35,"line":4276},[33,11233,11234],{"class":59},"            tArray[i].sArray[j].age ",[33,11236,64],{"class":63},[33,11238,10610],{"class":39},[33,11240,2976],{"class":59},[33,11242,11243,11246,11248],{"class":35,"line":4282},[33,11244,11245],{"class":59},"            tArray[i].sArray[j].score ",[33,11247,64],{"class":63},[33,11249,11250],{"class":59}," random;\n",[33,11252,11253],{"class":35,"line":4287},[33,11254,4195],{"class":59},[33,11256,11257],{"class":35,"line":9608},[33,11258,3855],{"class":59},[33,11260,11261],{"class":35,"line":9632},[33,11262,3247],{"class":59},[33,11264,11265],{"class":35,"line":9637},[33,11266,11267],{"class":87},"\u002F\u002F打印所有信息的函数\n",[33,11269,11270,11272,11275,11277,11279,11281,11283,11286,11288,11290],{"class":35,"line":9643},[33,11271,7025],{"class":63},[33,11273,11274],{"class":3632}," printInfo",[33,11276,109],{"class":59},[33,11278,9419],{"class":63},[33,11280,11058],{"class":3632},[33,11282,11061],{"class":6877},[33,11284,11285],{"class":59},"[], ",[33,11287,1828],{"class":63},[33,11289,8991],{"class":6877},[33,11291,157],{"class":59},[33,11293,11294],{"class":35,"line":9670},[33,11295,3228],{"class":59},[33,11297,11298,11300,11302,11304,11306,11308,11310,11312,11314,11316,11318],{"class":35,"line":9675},[33,11299,4864],{"class":63},[33,11301,3332],{"class":59},[33,11303,1828],{"class":63},[33,11305,11097],{"class":59},[33,11307,64],{"class":63},[33,11309,829],{"class":39},[33,11311,11104],{"class":59},[33,11313,2726],{"class":63},[33,11315,11109],{"class":59},[33,11317,3960],{"class":63},[33,11319,157],{"class":59},[33,11321,11322],{"class":35,"line":9681},[33,11323,3698],{"class":59},[33,11325,11326,11329,11331,11334,11336,11339,11341],{"class":35,"line":9693},[33,11327,11328],{"class":59},"        cout ",[33,11330,2859],{"class":63},[33,11332,11333],{"class":117}," \"Teacher: \"",[33,11335,3127],{"class":63},[33,11337,11338],{"class":59}," tArray[i].tName ",[33,11340,2859],{"class":63},[33,11342,10500],{"class":59},[33,11344,11345,11347,11349,11351,11353,11355,11357,11359,11361,11363,11365,11367],{"class":35,"line":9705},[33,11346,5066],{"class":63},[33,11348,3332],{"class":59},[33,11350,1828],{"class":63},[33,11352,11159],{"class":59},[33,11354,64],{"class":63},[33,11356,829],{"class":39},[33,11358,11166],{"class":59},[33,11360,2726],{"class":63},[33,11362,3816],{"class":39},[33,11364,11173],{"class":59},[33,11366,3960],{"class":63},[33,11368,157],{"class":59},[33,11370,11371],{"class":35,"line":9717},[33,11372,4176],{"class":59},[33,11374,11376,11379,11381,11384,11386,11389,11391,11394,11396],{"class":35,"line":11375},47,[33,11377,11378],{"class":59},"            cout ",[33,11380,2859],{"class":63},[33,11382,11383],{"class":117}," \"",[33,11385,2916],{"class":39},[33,11387,11388],{"class":117},"Student: \"",[33,11390,3127],{"class":63},[33,11392,11393],{"class":59}," tArray[i].sArray[j].sName",[33,11395,2859],{"class":63},[33,11397,2881],{"class":59},[33,11399,11401,11403,11405,11407,11409,11412,11414,11417,11419],{"class":35,"line":11400},48,[33,11402,11378],{"class":59},[33,11404,2859],{"class":63},[33,11406,11383],{"class":117},[33,11408,2916],{"class":39},[33,11410,11411],{"class":117},"Age: \"",[33,11413,3127],{"class":63},[33,11415,11416],{"class":59}," tArray[i].sArray[j].age ",[33,11418,2859],{"class":63},[33,11420,10500],{"class":59},[33,11422,11424,11426,11428,11430,11432,11435,11437,11440,11442],{"class":35,"line":11423},49,[33,11425,11378],{"class":59},[33,11427,2859],{"class":63},[33,11429,11383],{"class":117},[33,11431,2916],{"class":39},[33,11433,11434],{"class":117},"Score: \"",[33,11436,3127],{"class":63},[33,11438,11439],{"class":59}," tArray[i].sArray[j].score ",[33,11441,2859],{"class":63},[33,11443,11444],{"class":59}," endl;   \n",[33,11446,11448],{"class":35,"line":11447},50,[33,11449,4195],{"class":59},[33,11451,11453],{"class":35,"line":11452},51,[33,11454,3855],{"class":59},[33,11456,11458],{"class":35,"line":11457},52,[33,11459,3247],{"class":59},[33,11461,11463,11465,11467],{"class":35,"line":11462},53,[33,11464,1828],{"class":63},[33,11466,3642],{"class":3632},[33,11468,943],{"class":59},[33,11470,11472],{"class":35,"line":11471},54,[33,11473,3228],{"class":59},[33,11475,11477],{"class":35,"line":11476},55,[33,11478,11479],{"class":87},"    \u002F\u002F随机数种子\n",[33,11481,11483,11485,11487,11489,11491,11493,11495,11497,11499],{"class":35,"line":11482},56,[33,11484,4041],{"class":3632},[33,11486,4044],{"class":59},[33,11488,4047],{"class":63},[33,11490,106],{"class":63},[33,11492,2247],{"class":59},[33,11494,4054],{"class":3632},[33,11496,109],{"class":59},[33,11498,4059],{"class":39},[33,11500,4062],{"class":59},[33,11502,11504],{"class":35,"line":11503},57,[33,11505,11506],{"class":87},"    \u002F\u002F1.创建3名老师的数组\n",[33,11508,11510,11512,11514,11517,11519],{"class":35,"line":11509},58,[33,11511,9555],{"class":63},[33,11513,11058],{"class":3632},[33,11515,11516],{"class":59}," tArray[",[33,11518,1891],{"class":39},[33,11520,6351],{"class":59},[33,11522,11524],{"class":35,"line":11523},59,[33,11525,11526],{"class":87},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[33,11528,11530,11532,11535,11537,11540,11543,11545,11547,11550,11552],{"class":35,"line":11529},60,[33,11531,3653],{"class":63},[33,11533,11534],{"class":59}," len ",[33,11536,64],{"class":63},[33,11538,11539],{"class":63}," sizeof",[33,11541,11542],{"class":59},"(tArray) ",[33,11544,2401],{"class":63},[33,11546,11539],{"class":63},[33,11548,11549],{"class":59},"(tArray[",[33,11551,2010],{"class":39},[33,11553,5518],{"class":59},[33,11555,11557,11560],{"class":35,"line":11556},61,[33,11558,11559],{"class":3632},"    allocateSpace",[33,11561,11562],{"class":59},"(tArray, len);\n",[33,11564,11566],{"class":35,"line":11565},62,[33,11567,11568],{"class":87},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[33,11570,11572,11575],{"class":35,"line":11571},63,[33,11573,11574],{"class":3632},"    printInfo",[33,11576,11562],{"class":59},[33,11578,11580],{"class":35,"line":11579},64,[33,11581,127],{"emptyLinePlaceholder":126},[33,11583,11585],{"class":35,"line":11584},65,[33,11586,3247],{"class":59},[162,11588,11589],{"start":43},[165,11590,11591,11594],{},[1968,11592,11593],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11596,11597],{},"五名英雄信息如下：",[23,11599,11603],{"className":11600,"code":11601,"language":11602,"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,11604,11605,11623,11640,11657,11674],{"__ignoreMap":28},[33,11606,11607,11609,11612,11614,11616,11618,11621],{"class":35,"line":36},[33,11608,6578],{"class":59},[33,11610,11611],{"class":117},"\"刘备\"",[33,11613,2196],{"class":59},[33,11615,2592],{"class":39},[33,11617,2196],{"class":59},[33,11619,11620],{"class":117},"\"男\"",[33,11622,6591],{"class":59},[33,11624,11625,11627,11630,11632,11634,11636,11638],{"class":35,"line":43},[33,11626,6578],{"class":59},[33,11628,11629],{"class":117},"\"关羽\"",[33,11631,2196],{"class":59},[33,11633,2567],{"class":39},[33,11635,2196],{"class":59},[33,11637,11620],{"class":117},[33,11639,6591],{"class":59},[33,11641,11642,11644,11647,11649,11651,11653,11655],{"class":35,"line":130},[33,11643,6578],{"class":59},[33,11645,11646],{"class":117},"\"张飞\"",[33,11648,2196],{"class":59},[33,11650,2517],{"class":39},[33,11652,2196],{"class":59},[33,11654,11620],{"class":117},[33,11656,6591],{"class":59},[33,11658,11659,11661,11664,11666,11668,11670,11672],{"class":35,"line":146},[33,11660,6578],{"class":59},[33,11662,11663],{"class":117},"\"赵云\"",[33,11665,2196],{"class":59},[33,11667,2542],{"class":39},[33,11669,2196],{"class":59},[33,11671,11620],{"class":117},[33,11673,6591],{"class":59},[33,11675,11676,11678,11681,11683,11685,11687,11690],{"class":35,"line":267},[33,11677,6578],{"class":59},[33,11679,11680],{"class":117},"\"貂蝉\"",[33,11682,2196],{"class":59},[33,11684,2492],{"class":39},[33,11686,2196],{"class":59},[33,11688,11689],{"class":117},"\"女\"",[33,11691,6591],{"class":59},[19,11693,1187],{},[23,11695,11697],{"className":1814,"code":11696,"language":1816,"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,11698,11699,11705,11715,11721,11728,11732,11736,11742,11747,11751,11756,11779,11783,11808,11812,11845,11850,11879,11884,11899,11925,11945,11950,11955,11959,11963,11968,11990,11994,12018,12022,12084,12088,12092,12100,12104,12109,12120,12124,12140,12156,12172,12188,12204,12208,12228,12250,12255,12268,12275,12280,12286,12291,12304,12310],{"__ignoreMap":28},[33,11700,11701,11703],{"class":35,"line":36},[33,11702,3618],{"class":63},[33,11704,3621],{"class":117},[33,11706,11707,11709,11711,11713],{"class":35,"line":43},[33,11708,3626],{"class":63},[33,11710,3629],{"class":63},[33,11712,3633],{"class":3632},[33,11714,2976],{"class":59},[33,11716,11717,11719],{"class":35,"line":130},[33,11718,3618],{"class":63},[33,11720,9409],{"class":117},[33,11722,11723,11725],{"class":35,"line":146},[33,11724,9419],{"class":63},[33,11726,11727],{"class":3632}," Sanguo\n",[33,11729,11730],{"class":35,"line":267},[33,11731,3228],{"class":59},[33,11733,11734],{"class":35,"line":275},[33,11735,9445],{"class":59},[33,11737,11738,11740],{"class":35,"line":392},[33,11739,3653],{"class":63},[33,11741,9457],{"class":59},[33,11743,11744],{"class":35,"line":406},[33,11745,11746],{"class":59},"    string gender;\n",[33,11748,11749],{"class":35,"line":418},[33,11750,5657],{"class":59},[33,11752,11753],{"class":35,"line":425},[33,11754,11755],{"class":87},"\u002F\u002F定义排序函数\n",[33,11757,11758,11760,11762,11764,11767,11769,11771,11773,11775,11777],{"class":35,"line":1147},[33,11759,7025],{"class":63},[33,11761,8976],{"class":3632},[33,11763,109],{"class":59},[33,11765,11766],{"class":3632},"Sanguo",[33,11768,8178],{"class":63},[33,11770,2512],{"class":6877},[33,11772,2196],{"class":59},[33,11774,1828],{"class":63},[33,11776,8991],{"class":6877},[33,11778,157],{"class":59},[33,11780,11781],{"class":35,"line":1329},[33,11782,3228],{"class":59},[33,11784,11785,11787,11789,11791,11793,11795,11797,11799,11801,11804,11806],{"class":35,"line":1341},[33,11786,4864],{"class":63},[33,11788,109],{"class":59},[33,11790,1828],{"class":63},[33,11792,4697],{"class":59},[33,11794,64],{"class":63},[33,11796,2010],{"class":39},[33,11798,4704],{"class":59},[33,11800,2726],{"class":63},[33,11802,11803],{"class":59},"len;i",[33,11805,3960],{"class":63},[33,11807,157],{"class":59},[33,11809,11810],{"class":35,"line":1348},[33,11811,3698],{"class":59},[33,11813,11814,11817,11819,11821,11823,11825,11827,11829,11831,11833,11835,11837,11839,11841,11843],{"class":35,"line":1529},[33,11815,11816],{"class":63},"     for",[33,11818,3332],{"class":59},[33,11820,1828],{"class":63},[33,11822,5073],{"class":59},[33,11824,64],{"class":63},[33,11826,2010],{"class":39},[33,11828,5080],{"class":59},[33,11830,2726],{"class":63},[33,11832,9018],{"class":59},[33,11834,2349],{"class":63},[33,11836,2036],{"class":39},[33,11838,2349],{"class":63},[33,11840,5213],{"class":59},[33,11842,3960],{"class":63},[33,11844,157],{"class":59},[33,11846,11847],{"class":35,"line":1546},[33,11848,11849],{"class":59},"     {\n",[33,11851,11852,11855,11858,11860,11863,11865,11868,11870,11872,11874,11876],{"class":35,"line":1551},[33,11853,11854],{"class":63},"         if",[33,11856,11857],{"class":59}," ((s",[33,11859,2298],{"class":63},[33,11861,11862],{"class":59},"j)->age ",[33,11864,2775],{"class":63},[33,11866,11867],{"class":59}," (s",[33,11869,2298],{"class":63},[33,11871,2284],{"class":59},[33,11873,2298],{"class":63},[33,11875,2036],{"class":39},[33,11877,11878],{"class":59},")->age)\n",[33,11880,11881],{"class":35,"line":1566},[33,11882,11883],{"class":59},"         {\n",[33,11885,11886,11889,11891,11894,11896],{"class":35,"line":1578},[33,11887,11888],{"class":59},"             Sanguo temp",[33,11890,8813],{"class":63},[33,11892,11893],{"class":59},"(s",[33,11895,2298],{"class":63},[33,11897,11898],{"class":59},"j);\n",[33,11900,11901,11904,11906,11908,11911,11913,11915,11917,11919,11921,11923],{"class":35,"line":1583},[33,11902,11903],{"class":63},"             *",[33,11905,11893],{"class":59},[33,11907,2298],{"class":63},[33,11909,11910],{"class":59},"j)",[33,11912,8813],{"class":63},[33,11914,11893],{"class":59},[33,11916,2298],{"class":63},[33,11918,2284],{"class":59},[33,11920,2298],{"class":63},[33,11922,2036],{"class":39},[33,11924,4385],{"class":59},[33,11926,11927,11929,11931,11933,11935,11937,11939,11941,11943],{"class":35,"line":3369},[33,11928,11903],{"class":63},[33,11930,11893],{"class":59},[33,11932,2298],{"class":63},[33,11934,2284],{"class":59},[33,11936,2298],{"class":63},[33,11938,2036],{"class":39},[33,11940,2247],{"class":59},[33,11942,64],{"class":63},[33,11944,5941],{"class":59},[33,11946,11947],{"class":35,"line":3396},[33,11948,11949],{"class":59},"         }\n",[33,11951,11952],{"class":35,"line":3401},[33,11953,11954],{"class":59},"     }\n",[33,11956,11957],{"class":35,"line":3418},[33,11958,3855],{"class":59},[33,11960,11961],{"class":35,"line":3423},[33,11962,3247],{"class":59},[33,11964,11965],{"class":35,"line":3428},[33,11966,11967],{"class":87},"\u002F\u002F定义打印函数\n",[33,11969,11970,11972,11974,11976,11978,11980,11982,11984,11986,11988],{"class":35,"line":3433},[33,11971,7025],{"class":63},[33,11973,11274],{"class":3632},[33,11975,109],{"class":59},[33,11977,11766],{"class":3632},[33,11979,8178],{"class":63},[33,11981,2512],{"class":6877},[33,11983,2196],{"class":59},[33,11985,1828],{"class":63},[33,11987,8991],{"class":6877},[33,11989,157],{"class":59},[33,11991,11992],{"class":35,"line":3447},[33,11993,3228],{"class":59},[33,11995,11996,11998,12000,12002,12004,12006,12008,12010,12012,12014,12016],{"class":35,"line":3452},[33,11997,4864],{"class":63},[33,11999,3332],{"class":59},[33,12001,1828],{"class":63},[33,12003,4697],{"class":59},[33,12005,64],{"class":63},[33,12007,2010],{"class":39},[33,12009,4704],{"class":59},[33,12011,2726],{"class":63},[33,12013,11803],{"class":59},[33,12015,3960],{"class":63},[33,12017,157],{"class":59},[33,12019,12020],{"class":35,"line":4243},[33,12021,3698],{"class":59},[33,12023,12024,12026,12028,12030,12032,12035,12037,12039,12041,12044,12046,12048,12050,12053,12055,12057,12059,12062,12064,12066,12068,12071,12073,12075,12077,12080,12082],{"class":35,"line":4257},[33,12025,5114],{"class":59},[33,12027,2859],{"class":63},[33,12029,1014],{"class":117},[33,12031,2916],{"class":39},[33,12033,12034],{"class":117},"姓名：\"",[33,12036,2859],{"class":63},[33,12038,11893],{"class":59},[33,12040,2298],{"class":63},[33,12042,12043],{"class":59},"i)->name",[33,12045,2859],{"class":63},[33,12047,1014],{"class":117},[33,12049,2916],{"class":39},[33,12051,12052],{"class":117},"年龄：\"",[33,12054,2859],{"class":63},[33,12056,11893],{"class":59},[33,12058,2298],{"class":63},[33,12060,12061],{"class":59},"i)->age",[33,12063,2859],{"class":63},[33,12065,1014],{"class":117},[33,12067,2916],{"class":39},[33,12069,12070],{"class":117},"性别：\"",[33,12072,2859],{"class":63},[33,12074,11893],{"class":59},[33,12076,2298],{"class":63},[33,12078,12079],{"class":59},"i)->gender",[33,12081,2859],{"class":63},[33,12083,2881],{"class":59},[33,12085,12086],{"class":35,"line":4265},[33,12087,3855],{"class":59},[33,12089,12090],{"class":35,"line":4270},[33,12091,3247],{"class":59},[33,12093,12094,12096,12098],{"class":35,"line":4276},[33,12095,1828],{"class":63},[33,12097,3642],{"class":3632},[33,12099,943],{"class":59},[33,12101,12102],{"class":35,"line":4282},[33,12103,3228],{"class":59},[33,12105,12106],{"class":35,"line":4287},[33,12107,12108],{"class":87},"    \u002F\u002F定义结构体变量\n",[33,12110,12111,12114,12116,12118],{"class":35,"line":9608},[33,12112,12113],{"class":59},"    Sanguo s1[",[33,12115,2137],{"class":39},[33,12117,2756],{"class":59},[33,12119,6569],{"class":63},[33,12121,12122],{"class":35,"line":9632},[33,12123,3698],{"class":59},[33,12125,12126,12128,12130,12132,12134,12136,12138],{"class":35,"line":9637},[33,12127,6578],{"class":59},[33,12129,11611],{"class":117},[33,12131,2196],{"class":59},[33,12133,2592],{"class":39},[33,12135,2196],{"class":59},[33,12137,11620],{"class":117},[33,12139,6591],{"class":59},[33,12141,12142,12144,12146,12148,12150,12152,12154],{"class":35,"line":9643},[33,12143,6578],{"class":59},[33,12145,11629],{"class":117},[33,12147,2196],{"class":59},[33,12149,2567],{"class":39},[33,12151,2196],{"class":59},[33,12153,11620],{"class":117},[33,12155,6591],{"class":59},[33,12157,12158,12160,12162,12164,12166,12168,12170],{"class":35,"line":9670},[33,12159,6578],{"class":59},[33,12161,11646],{"class":117},[33,12163,2196],{"class":59},[33,12165,2517],{"class":39},[33,12167,2196],{"class":59},[33,12169,11620],{"class":117},[33,12171,6591],{"class":59},[33,12173,12174,12176,12178,12180,12182,12184,12186],{"class":35,"line":9675},[33,12175,6578],{"class":59},[33,12177,11663],{"class":117},[33,12179,2196],{"class":59},[33,12181,2542],{"class":39},[33,12183,2196],{"class":59},[33,12185,11620],{"class":117},[33,12187,6591],{"class":59},[33,12189,12190,12192,12194,12196,12198,12200,12202],{"class":35,"line":9681},[33,12191,6578],{"class":59},[33,12193,11680],{"class":117},[33,12195,2196],{"class":59},[33,12197,2492],{"class":39},[33,12199,2196],{"class":59},[33,12201,11689],{"class":117},[33,12203,6591],{"class":59},[33,12205,12206],{"class":35,"line":9693},[33,12207,6612],{"class":59},[33,12209,12210,12212,12214,12216,12219,12221,12224,12226],{"class":35,"line":9705},[33,12211,3653],{"class":63},[33,12213,8991],{"class":59},[33,12215,5864],{"class":63},[33,12217,12218],{"class":59},"(s1)",[33,12220,5870],{"class":63},[33,12222,12223],{"class":59},"(s1[",[33,12225,2010],{"class":39},[33,12227,5518],{"class":59},[33,12229,12230,12233,12235,12238,12240,12243,12246,12248],{"class":35,"line":9717},[33,12231,12232],{"class":59},"    Sanguo ",[33,12234,1540],{"class":63},[33,12236,12237],{"class":59},"s ",[33,12239,64],{"class":63},[33,12241,12242],{"class":63}," &",[33,12244,12245],{"class":59},"s1[",[33,12247,2010],{"class":39},[33,12249,6351],{"class":59},[33,12251,12252],{"class":35,"line":11375},[33,12253,12254],{"class":87},"    \u002F\u002F排序前：\n",[33,12256,12257,12259,12261,12264,12266],{"class":35,"line":11400},[33,12258,8189],{"class":59},[33,12260,2859],{"class":63},[33,12262,12263],{"class":117}," \"排序前：\"",[33,12265,3127],{"class":63},[33,12267,10500],{"class":59},[33,12269,12270,12272],{"class":35,"line":11423},[33,12271,11574],{"class":3632},[33,12273,12274],{"class":59},"(s,len);\n",[33,12276,12277],{"class":35,"line":11447},[33,12278,12279],{"class":87},"    \u002F\u002F调用排序函数\n",[33,12281,12282,12284],{"class":35,"line":11452},[33,12283,9258],{"class":3632},[33,12285,12274],{"class":59},[33,12287,12288],{"class":35,"line":11457},[33,12289,12290],{"class":87},"    \u002F\u002F排序后\n",[33,12292,12293,12295,12297,12300,12302],{"class":35,"line":11462},[33,12294,8189],{"class":59},[33,12296,2859],{"class":63},[33,12298,12299],{"class":117}," \"排序后：\"",[33,12301,3127],{"class":63},[33,12303,10500],{"class":59},[33,12305,12306,12308],{"class":35,"line":11471},[33,12307,11574],{"class":3632},[33,12309,12274],{"class":59},[33,12311,12312],{"class":35,"line":11476},[33,12313,3247],{"class":59},[19,12315,12316,12317,12319],{},"注意：使用指针时直接用传首地址**&s",[33,12318,2010],{},"**",[1729,12321,12322],{},"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":43,"depth":43,"links":12324},[12325,12326,12327,12328,12329,12330,12331],{"id":9363,"depth":43,"text":9364},{"id":9725,"depth":43,"text":9726},{"id":9994,"depth":43,"text":9995},{"id":10159,"depth":43,"text":10160},{"id":10375,"depth":43,"text":10376},{"id":10695,"depth":43,"text":10696},{"id":10923,"depth":43,"text":10924},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9352,"description":9360},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12338,"title":12339,"body":12340,"description":28,"extension":1752,"meta":13683,"navigation":126,"path":13684,"seo":13685,"stem":13686,"__hash__":13687},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12341,"toc":13677},[12342,12345,12349,12355,12369,12374,12377,12381,12388,12394,12397,12404,12410,12415,12418,12421,12424,12988,12991,13005,13009,13014,13030,13170,13173,13179,13182,13187,13195,13303,13306,13311,13314,13319,13322,13328,13331,13674],[10,12343,12339],{"id":12344},"_5程序内存模型",[14,12346,12348],{"id":12347},"_51内存分区模型","5.1内存分区模型",[19,12350,12351,12352],{},"C++程序在执行时，将内存大方向划分为",[1968,12353,12354],{},"4个区域",[2822,12356,12357,12360,12363,12366],{},[165,12358,12359],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[165,12361,12362],{},"全局区：存放全局变量和静态变量以及常量",[165,12364,12365],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[165,12367,12368],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12370,12371],{},[1968,12372,12373],{},"内存四区意义：",[19,12375,12376],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[633,12378,12380],{"id":12379},"_511程序运行前","5.1.1程序运行前",[19,12382,12383,12384,12387],{},"​\t在程序编译后，生成了exe可执行程序，",[1968,12385,12386],{},"未执行该程序前","分为两个区域",[19,12389,12390,12391],{},"​\t",[1968,12392,12393],{},"代码区：",[19,12395,12396],{},"​\t\t存放 CPU 执行的机器指令",[19,12398,12399,12400,12403],{},"​\t\t代码区是",[1968,12401,12402],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12405,12399,12406,12409],{},[1968,12407,12408],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12411,12390,12412],{},[1968,12413,12414],{},"全局区：",[19,12416,12417],{},"​\t\t全局变量和静态变量存放在此.",[19,12419,12420],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12422,12423],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[23,12425,12427],{"className":1814,"code":12426,"language":1816,"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,12428,12429,12434,12447,12460,12464,12469,12484,12499,12503,12512,12516,12521,12534,12547,12551,12556,12582,12608,12612,12639,12665,12669,12674,12690,12705,12709,12735,12761,12765,12790,12815,12819,12845,12871,12875,12891,12906,12932,12958,12962,12972,12976,12984],{"__ignoreMap":28},[33,12430,12431],{"class":35,"line":36},[33,12432,12433],{"class":87},"\u002F\u002F全局变量\n",[33,12435,12436,12438,12441,12443,12445],{"class":35,"line":43},[33,12437,1828],{"class":63},[33,12439,12440],{"class":59}," g_a ",[33,12442,64],{"class":63},[33,12444,3706],{"class":39},[33,12446,2976],{"class":59},[33,12448,12449,12451,12454,12456,12458],{"class":35,"line":130},[33,12450,1828],{"class":63},[33,12452,12453],{"class":59}," g_b ",[33,12455,64],{"class":63},[33,12457,3706],{"class":39},[33,12459,2976],{"class":59},[33,12461,12462],{"class":35,"line":146},[33,12463,127],{"emptyLinePlaceholder":126},[33,12465,12466],{"class":35,"line":267},[33,12467,12468],{"class":87},"\u002F\u002F全局常量\n",[33,12470,12471,12473,12475,12478,12480,12482],{"class":35,"line":275},[33,12472,8452],{"class":63},[33,12474,106],{"class":63},[33,12476,12477],{"class":59}," c_g_a ",[33,12479,64],{"class":63},[33,12481,3706],{"class":39},[33,12483,2976],{"class":59},[33,12485,12486,12488,12490,12493,12495,12497],{"class":35,"line":392},[33,12487,8452],{"class":63},[33,12489,106],{"class":63},[33,12491,12492],{"class":59}," c_g_b ",[33,12494,64],{"class":63},[33,12496,3706],{"class":39},[33,12498,2976],{"class":59},[33,12500,12501],{"class":35,"line":406},[33,12502,127],{"emptyLinePlaceholder":126},[33,12504,12505,12507,12509],{"class":35,"line":418},[33,12506,1828],{"class":63},[33,12508,3642],{"class":3632},[33,12510,12511],{"class":59},"() {\n",[33,12513,12514],{"class":35,"line":425},[33,12515,127],{"emptyLinePlaceholder":126},[33,12517,12518],{"class":35,"line":1147},[33,12519,12520],{"class":87},"    \u002F\u002F局部变量\n",[33,12522,12523,12525,12528,12530,12532],{"class":35,"line":1329},[33,12524,3653],{"class":63},[33,12526,12527],{"class":59}," a ",[33,12529,64],{"class":63},[33,12531,3706],{"class":39},[33,12533,2976],{"class":59},[33,12535,12536,12538,12541,12543,12545],{"class":35,"line":1341},[33,12537,3653],{"class":63},[33,12539,12540],{"class":59}," b ",[33,12542,64],{"class":63},[33,12544,3706],{"class":39},[33,12546,2976],{"class":59},[33,12548,12549],{"class":35,"line":1348},[33,12550,127],{"emptyLinePlaceholder":126},[33,12552,12553],{"class":35,"line":1529},[33,12554,12555],{"class":87},"    \u002F\u002F打印地址\n",[33,12557,12558,12560,12562,12565,12567,12569,12571,12573,12575,12578,12580],{"class":35,"line":1546},[33,12559,8189],{"class":59},[33,12561,2859],{"class":63},[33,12563,12564],{"class":117}," \"局部变量a地址为： \"",[33,12566,3127],{"class":63},[33,12568,3332],{"class":59},[33,12570,1828],{"class":63},[33,12572,2247],{"class":59},[33,12574,2171],{"class":63},[33,12576,12577],{"class":59},"a ",[33,12579,2859],{"class":63},[33,12581,10500],{"class":59},[33,12583,12584,12586,12588,12591,12593,12595,12597,12599,12601,12604,12606],{"class":35,"line":1551},[33,12585,8189],{"class":59},[33,12587,2859],{"class":63},[33,12589,12590],{"class":117}," \"局部变量b地址为： \"",[33,12592,3127],{"class":63},[33,12594,3332],{"class":59},[33,12596,1828],{"class":63},[33,12598,2247],{"class":59},[33,12600,2171],{"class":63},[33,12602,12603],{"class":59},"b ",[33,12605,2859],{"class":63},[33,12607,10500],{"class":59},[33,12609,12610],{"class":35,"line":1566},[33,12611,127],{"emptyLinePlaceholder":126},[33,12613,12614,12616,12618,12621,12623,12626,12628,12630,12632,12635,12637],{"class":35,"line":1578},[33,12615,8189],{"class":59},[33,12617,2859],{"class":63},[33,12619,12620],{"class":117}," \"全局变量g_a地址为： \"",[33,12622,3127],{"class":63},[33,12624,12625],{"class":59},"  (",[33,12627,1828],{"class":63},[33,12629,2247],{"class":59},[33,12631,2171],{"class":63},[33,12633,12634],{"class":59},"g_a ",[33,12636,2859],{"class":63},[33,12638,10500],{"class":59},[33,12640,12641,12643,12645,12648,12650,12652,12654,12656,12658,12661,12663],{"class":35,"line":1583},[33,12642,8189],{"class":59},[33,12644,2859],{"class":63},[33,12646,12647],{"class":117}," \"全局变量g_b地址为： \"",[33,12649,3127],{"class":63},[33,12651,12625],{"class":59},[33,12653,1828],{"class":63},[33,12655,2247],{"class":59},[33,12657,2171],{"class":63},[33,12659,12660],{"class":59},"g_b ",[33,12662,2859],{"class":63},[33,12664,10500],{"class":59},[33,12666,12667],{"class":35,"line":3369},[33,12668,127],{"emptyLinePlaceholder":126},[33,12670,12671],{"class":35,"line":3396},[33,12672,12673],{"class":87},"    \u002F\u002F静态变量\n",[33,12675,12676,12679,12681,12684,12686,12688],{"class":35,"line":3401},[33,12677,12678],{"class":63},"    static",[33,12680,106],{"class":63},[33,12682,12683],{"class":59}," s_a ",[33,12685,64],{"class":63},[33,12687,3706],{"class":39},[33,12689,2976],{"class":59},[33,12691,12692,12694,12696,12699,12701,12703],{"class":35,"line":3418},[33,12693,12678],{"class":63},[33,12695,106],{"class":63},[33,12697,12698],{"class":59}," s_b ",[33,12700,64],{"class":63},[33,12702,3706],{"class":39},[33,12704,2976],{"class":59},[33,12706,12707],{"class":35,"line":3423},[33,12708,127],{"emptyLinePlaceholder":126},[33,12710,12711,12713,12715,12718,12720,12722,12724,12726,12728,12731,12733],{"class":35,"line":3428},[33,12712,8189],{"class":59},[33,12714,2859],{"class":63},[33,12716,12717],{"class":117}," \"静态变量s_a地址为： \"",[33,12719,3127],{"class":63},[33,12721,3332],{"class":59},[33,12723,1828],{"class":63},[33,12725,2247],{"class":59},[33,12727,2171],{"class":63},[33,12729,12730],{"class":59},"s_a ",[33,12732,2859],{"class":63},[33,12734,10500],{"class":59},[33,12736,12737,12739,12741,12744,12746,12748,12750,12752,12754,12757,12759],{"class":35,"line":3433},[33,12738,8189],{"class":59},[33,12740,2859],{"class":63},[33,12742,12743],{"class":117}," \"静态变量s_b地址为： \"",[33,12745,3127],{"class":63},[33,12747,3332],{"class":59},[33,12749,1828],{"class":63},[33,12751,2247],{"class":59},[33,12753,2171],{"class":63},[33,12755,12756],{"class":59},"s_b ",[33,12758,2859],{"class":63},[33,12760,10500],{"class":59},[33,12762,12763],{"class":35,"line":3447},[33,12764,127],{"emptyLinePlaceholder":126},[33,12766,12767,12769,12771,12774,12776,12778,12780,12782,12784,12786,12788],{"class":35,"line":3452},[33,12768,8189],{"class":59},[33,12770,2859],{"class":63},[33,12772,12773],{"class":117}," \"字符串常量地址为： \"",[33,12775,3127],{"class":63},[33,12777,3332],{"class":59},[33,12779,1828],{"class":63},[33,12781,2247],{"class":59},[33,12783,2171],{"class":63},[33,12785,2876],{"class":117},[33,12787,3127],{"class":63},[33,12789,10500],{"class":59},[33,12791,12792,12794,12796,12798,12800,12802,12804,12806,12808,12811,12813],{"class":35,"line":4243},[33,12793,8189],{"class":59},[33,12795,2859],{"class":63},[33,12797,12773],{"class":117},[33,12799,3127],{"class":63},[33,12801,3332],{"class":59},[33,12803,1828],{"class":63},[33,12805,2247],{"class":59},[33,12807,2171],{"class":63},[33,12809,12810],{"class":117},"\"hello world1\"",[33,12812,3127],{"class":63},[33,12814,10500],{"class":59},[33,12816,12817],{"class":35,"line":4257},[33,12818,127],{"emptyLinePlaceholder":126},[33,12820,12821,12823,12825,12828,12830,12832,12834,12836,12838,12841,12843],{"class":35,"line":4265},[33,12822,8189],{"class":59},[33,12824,2859],{"class":63},[33,12826,12827],{"class":117}," \"全局常量c_g_a地址为： \"",[33,12829,3127],{"class":63},[33,12831,3332],{"class":59},[33,12833,1828],{"class":63},[33,12835,2247],{"class":59},[33,12837,2171],{"class":63},[33,12839,12840],{"class":59},"c_g_a ",[33,12842,2859],{"class":63},[33,12844,10500],{"class":59},[33,12846,12847,12849,12851,12854,12856,12858,12860,12862,12864,12867,12869],{"class":35,"line":4270},[33,12848,8189],{"class":59},[33,12850,2859],{"class":63},[33,12852,12853],{"class":117}," \"全局常量c_g_b地址为： \"",[33,12855,3127],{"class":63},[33,12857,3332],{"class":59},[33,12859,1828],{"class":63},[33,12861,2247],{"class":59},[33,12863,2171],{"class":63},[33,12865,12866],{"class":59},"c_g_b ",[33,12868,2859],{"class":63},[33,12870,10500],{"class":59},[33,12872,12873],{"class":35,"line":4276},[33,12874,127],{"emptyLinePlaceholder":126},[33,12876,12877,12880,12882,12885,12887,12889],{"class":35,"line":4282},[33,12878,12879],{"class":63},"    const",[33,12881,106],{"class":63},[33,12883,12884],{"class":59}," c_l_a ",[33,12886,64],{"class":63},[33,12888,3706],{"class":39},[33,12890,2976],{"class":59},[33,12892,12893,12895,12897,12900,12902,12904],{"class":35,"line":4287},[33,12894,12879],{"class":63},[33,12896,106],{"class":63},[33,12898,12899],{"class":59}," c_l_b ",[33,12901,64],{"class":63},[33,12903,3706],{"class":39},[33,12905,2976],{"class":59},[33,12907,12908,12910,12912,12915,12917,12919,12921,12923,12925,12928,12930],{"class":35,"line":9608},[33,12909,8189],{"class":59},[33,12911,2859],{"class":63},[33,12913,12914],{"class":117}," \"局部常量c_l_a地址为： \"",[33,12916,3127],{"class":63},[33,12918,3332],{"class":59},[33,12920,1828],{"class":63},[33,12922,2247],{"class":59},[33,12924,2171],{"class":63},[33,12926,12927],{"class":59},"c_l_a ",[33,12929,2859],{"class":63},[33,12931,10500],{"class":59},[33,12933,12934,12936,12938,12941,12943,12945,12947,12949,12951,12954,12956],{"class":35,"line":9632},[33,12935,8189],{"class":59},[33,12937,2859],{"class":63},[33,12939,12940],{"class":117}," \"局部常量c_l_b地址为： \"",[33,12942,3127],{"class":63},[33,12944,3332],{"class":59},[33,12946,1828],{"class":63},[33,12948,2247],{"class":59},[33,12950,2171],{"class":63},[33,12952,12953],{"class":59},"c_l_b ",[33,12955,2859],{"class":63},[33,12957,10500],{"class":59},[33,12959,12960],{"class":35,"line":9637},[33,12961,127],{"emptyLinePlaceholder":126},[33,12963,12964,12966,12968,12970],{"class":35,"line":9643},[33,12965,3971],{"class":3632},[33,12967,109],{"class":59},[33,12969,3976],{"class":117},[33,12971,4385],{"class":59},[33,12973,12974],{"class":35,"line":9670},[33,12975,127],{"emptyLinePlaceholder":126},[33,12977,12978,12980,12982],{"class":35,"line":9675},[33,12979,5752],{"class":63},[33,12981,829],{"class":39},[33,12983,2976],{"class":59},[33,12985,12986],{"class":35,"line":9681},[33,12987,3247],{"class":59},[19,12989,12990],{},"总结：",[2822,12992,12993,12996,12999,13002],{},[165,12994,12995],{},"c++中程序运行前分为全局区和代码区",[165,12997,12998],{},"代码区特点是共享和只读",[165,13000,13001],{},"全局区中存放全局变量、静态变量、常量",[165,13003,13004],{},"常量区中存放const修饰的全局常量和字符串常量",[633,13006,13008],{"id":13007},"_512程序运行后","5.1.2程序运行后",[162,13010,13011],{},[165,13012,13013],{},"栈区：",[2822,13015,13016,13023],{},[165,13017,13018,13019,13022],{},"由编译器自动分配释放, 存放",[1968,13020,13021],{},"函数的参数值,局部变量","等",[165,13024,13025,13026,13029],{},"注意事项：",[1968,13027,13028],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[23,13031,13033],{"className":1814,"code":13032,"language":1816,"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,13034,13035,13046,13050,13065,13077,13081,13085,13093,13098,13113,13131,13148,13158,13166],{"__ignoreMap":28},[33,13036,13037,13039,13041,13044],{"class":35,"line":36},[33,13038,1828],{"class":63},[33,13040,8178],{"class":63},[33,13042,13043],{"class":3632}," func",[33,13045,943],{"class":59},[33,13047,13048],{"class":35,"line":43},[33,13049,3228],{"class":59},[33,13051,13052,13054,13056,13058,13060,13062],{"class":35,"line":130},[33,13053,3653],{"class":63},[33,13055,12527],{"class":59},[33,13057,64],{"class":63},[33,13059,3706],{"class":39},[33,13061,1876],{"class":59},[33,13063,13064],{"class":87}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[33,13066,13067,13069,13071,13074],{"class":35,"line":146},[33,13068,5752],{"class":63},[33,13070,12242],{"class":63},[33,13072,13073],{"class":59},"a;",[33,13075,13076],{"class":87}," \u002F\u002F放回局部变量的地址\n",[33,13078,13079],{"class":35,"line":267},[33,13080,3247],{"class":59},[33,13082,13083],{"class":35,"line":275},[33,13084,127],{"emptyLinePlaceholder":126},[33,13086,13087,13089,13091],{"class":35,"line":392},[33,13088,1828],{"class":63},[33,13090,3642],{"class":3632},[33,13092,12511],{"class":59},[33,13094,13095],{"class":35,"line":406},[33,13096,13097],{"class":87},"    \u002F\u002F接受func的返回值\n",[33,13099,13100,13102,13104,13107,13109,13111],{"class":35,"line":418},[33,13101,3653],{"class":63},[33,13103,8178],{"class":63},[33,13105,13106],{"class":59},"p ",[33,13108,64],{"class":63},[33,13110,13043],{"class":3632},[33,13112,7297],{"class":59},[33,13114,13115,13117,13119,13121,13123,13125,13128],{"class":35,"line":425},[33,13116,8189],{"class":59},[33,13118,2859],{"class":63},[33,13120,8178],{"class":63},[33,13122,13106],{"class":59},[33,13124,2859],{"class":63},[33,13126,13127],{"class":59}," endl;",[33,13129,13130],{"class":87}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[33,13132,13133,13135,13137,13139,13141,13143,13145],{"class":35,"line":1147},[33,13134,8189],{"class":59},[33,13136,2859],{"class":63},[33,13138,8178],{"class":63},[33,13140,13106],{"class":59},[33,13142,2859],{"class":63},[33,13144,13127],{"class":59},[33,13146,13147],{"class":87}," \u002F\u002F第二次这个数据不再保留\n",[33,13149,13150,13152,13154,13156],{"class":35,"line":1329},[33,13151,3971],{"class":3632},[33,13153,109],{"class":59},[33,13155,3976],{"class":117},[33,13157,4385],{"class":59},[33,13159,13160,13162,13164],{"class":35,"line":1341},[33,13161,5752],{"class":63},[33,13163,829],{"class":39},[33,13165,2976],{"class":59},[33,13167,13168],{"class":35,"line":1348},[33,13169,3247],{"class":59},[19,13171,13172],{},"输出结果：",[19,13174,13175],{},[3145,13176],{"alt":13177,"src":13178},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13180,13181],{},"总结：不要返回局部变量的地址",[162,13183,13184],{"start":43},[165,13185,13186],{},"堆区",[2822,13188,13189,13192],{},[165,13190,13191],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[165,13193,13194],{},"在c++中主要利用new在堆区开辟内存",[23,13196,13198],{"className":1814,"code":13197,"language":1816,"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,13199,13200,13215,13219,13224,13245,13252,13256,13264,13268,13273,13287,13299],{"__ignoreMap":28},[33,13201,13202,13204,13207,13210,13212],{"class":35,"line":36},[33,13203,1828],{"class":63},[33,13205,13206],{"class":63},"  *",[33,13208,13209],{"class":3632},"func",[33,13211,4093],{"class":59},[33,13213,13214],{"class":87},"  \u002F\u002F函数返回指针\n",[33,13216,13217],{"class":35,"line":43},[33,13218,3228],{"class":59},[33,13220,13221],{"class":35,"line":130},[33,13222,13223],{"class":87},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[33,13225,13226,13228,13230,13232,13234,13237,13239,13241,13243],{"class":35,"line":146},[33,13227,5808],{"class":63},[33,13229,8178],{"class":63},[33,13231,19],{"class":59},[33,13233,64],{"class":63},[33,13235,13236],{"class":63}," new",[33,13238,106],{"class":63},[33,13240,109],{"class":59},[33,13242,2264],{"class":39},[33,13244,4385],{"class":59},[33,13246,13247,13249],{"class":35,"line":267},[33,13248,6042],{"class":63},[33,13250,13251],{"class":59}," p;\n",[33,13253,13254],{"class":35,"line":275},[33,13255,3247],{"class":59},[33,13257,13258,13260,13262],{"class":35,"line":392},[33,13259,1828],{"class":63},[33,13261,3642],{"class":3632},[33,13263,943],{"class":59},[33,13265,13266],{"class":35,"line":406},[33,13267,3228],{"class":59},[33,13269,13270],{"class":35,"line":418},[33,13271,13272],{"class":87},"    \u002F\u002F在堆区开辟数据\n",[33,13274,13275,13277,13279,13281,13283,13285],{"class":35,"line":425},[33,13276,3653],{"class":63},[33,13278,8178],{"class":63},[33,13280,19],{"class":59},[33,13282,64],{"class":63},[33,13284,13209],{"class":3632},[33,13286,7297],{"class":59},[33,13288,13289,13291,13293,13295,13297],{"class":35,"line":1147},[33,13290,3233],{"class":59},[33,13292,8079],{"class":63},[33,13294,19],{"class":59},[33,13296,2859],{"class":63},[33,13298,2881],{"class":59},[33,13300,13301],{"class":35,"line":1329},[33,13302,3247],{"class":59},[19,13304,13305],{},"图片展示：",[19,13307,13308],{},[3145,13309],{"alt":13177,"src":13310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13312,13313],{},"堆区内存由程序员管生死！！！",[162,13315,13316],{"start":130},[165,13317,13318],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13320,13321],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13323,13324,13325],{},"​语法：",[30,13326,13327],{}," new 数据类型",[19,13329,13330],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[23,13332,13334],{"className":1814,"code":13333,"language":1816,"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,13335,13336,13341,13351,13355,13360,13365,13387,13391,13399,13403,13417,13429,13441,13453,13458,13463,13474,13478,13483,13491,13495,13500,13522,13548,13552,13570,13574,13600,13604,13616,13620,13625,13630,13638,13642,13646,13654,13658,13664,13670],{"__ignoreMap":28},[33,13337,13338],{"class":35,"line":36},[33,13339,13340],{"class":87},"\u002F\u002F1.new的基本语法\n",[33,13342,13343,13345,13347,13349],{"class":35,"line":43},[33,13344,1828],{"class":63},[33,13346,8178],{"class":63},[33,13348,13209],{"class":3632},[33,13350,943],{"class":59},[33,13352,13353],{"class":35,"line":130},[33,13354,3228],{"class":59},[33,13356,13357],{"class":35,"line":146},[33,13358,13359],{"class":87},"    \u002F\u002F在堆区创建整型数据\n",[33,13361,13362],{"class":35,"line":267},[33,13363,13364],{"class":87},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[33,13366,13367,13369,13371,13373,13376,13378,13380,13382,13384],{"class":35,"line":275},[33,13368,3653],{"class":63},[33,13370,8178],{"class":63},[33,13372,19],{"class":59},[33,13374,13375],{"class":63},"=new",[33,13377,106],{"class":63},[33,13379,109],{"class":59},[33,13381,2264],{"class":39},[33,13383,7626],{"class":59},[33,13385,13386],{"class":87},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[33,13388,13389],{"class":35,"line":392},[33,13390,3247],{"class":59},[33,13392,13393,13395,13397],{"class":35,"line":406},[33,13394,7025],{"class":63},[33,13396,7249],{"class":3632},[33,13398,943],{"class":59},[33,13400,13401],{"class":35,"line":418},[33,13402,3228],{"class":59},[33,13404,13405,13407,13409,13411,13413,13415],{"class":35,"line":425},[33,13406,3653],{"class":63},[33,13408,8178],{"class":63},[33,13410,19],{"class":59},[33,13412,64],{"class":63},[33,13414,13209],{"class":3632},[33,13416,7297],{"class":59},[33,13418,13419,13421,13423,13425,13427],{"class":35,"line":1147},[33,13420,3233],{"class":59},[33,13422,8079],{"class":63},[33,13424,19],{"class":59},[33,13426,2859],{"class":63},[33,13428,2881],{"class":59},[33,13430,13431,13433,13435,13437,13439],{"class":35,"line":1329},[33,13432,3233],{"class":59},[33,13434,8079],{"class":63},[33,13436,19],{"class":59},[33,13438,2859],{"class":63},[33,13440,2881],{"class":59},[33,13442,13443,13445,13447,13449,13451],{"class":35,"line":1341},[33,13444,3233],{"class":59},[33,13446,8079],{"class":63},[33,13448,19],{"class":59},[33,13450,2859],{"class":63},[33,13452,2881],{"class":59},[33,13454,13455],{"class":35,"line":1348},[33,13456,13457],{"class":87},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[33,13459,13460],{"class":35,"line":1529},[33,13461,13462],{"class":87},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[33,13464,13465,13468,13471],{"class":35,"line":1546},[33,13466,13467],{"class":63},"    delete",[33,13469,13470],{"class":59}," p;",[33,13472,13473],{"class":87},"\u002F\u002F删除这块地址\n",[33,13475,13476],{"class":35,"line":1551},[33,13477,3247],{"class":59},[33,13479,13480],{"class":35,"line":1566},[33,13481,13482],{"class":87},"\u002F\u002F2.在堆区利用new开辟数组\n",[33,13484,13485,13487,13489],{"class":35,"line":1578},[33,13486,7025],{"class":63},[33,13488,7318],{"class":3632},[33,13490,943],{"class":59},[33,13492,13493],{"class":35,"line":1583},[33,13494,3228],{"class":59},[33,13496,13497],{"class":35,"line":3369},[33,13498,13499],{"class":87},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[33,13501,13502,13504,13506,13508,13510,13512,13514,13516,13519],{"class":35,"line":3396},[33,13503,3653],{"class":63},[33,13505,8178],{"class":63},[33,13507,5542],{"class":59},[33,13509,13375],{"class":63},[33,13511,106],{"class":63},[33,13513,2707],{"class":59},[33,13515,2264],{"class":39},[33,13517,13518],{"class":59},"];",[33,13520,13521],{"class":87},"\u002F\u002F10代表数组有10个元素\n",[33,13523,13524,13526,13528,13530,13532,13534,13536,13538,13540,13542,13544,13546],{"class":35,"line":3401},[33,13525,4864],{"class":63},[33,13527,3332],{"class":59},[33,13529,1828],{"class":63},[33,13531,4697],{"class":59},[33,13533,64],{"class":63},[33,13535,2010],{"class":39},[33,13537,4704],{"class":59},[33,13539,2726],{"class":63},[33,13541,2264],{"class":39},[33,13543,4704],{"class":59},[33,13545,3960],{"class":63},[33,13547,157],{"class":59},[33,13549,13550],{"class":35,"line":3418},[33,13551,3698],{"class":59},[33,13553,13554,13557,13559,13561,13563,13565,13567],{"class":35,"line":3423},[33,13555,13556],{"class":59},"        arr[i]",[33,13558,64],{"class":63},[33,13560,2259],{"class":59},[33,13562,2298],{"class":63},[33,13564,2129],{"class":39},[33,13566,1876],{"class":59},[33,13568,13569],{"class":87},"\u002F\u002F给10个元素赋值100～109\n",[33,13571,13572],{"class":35,"line":3428},[33,13573,3855],{"class":59},[33,13575,13576,13578,13580,13582,13584,13586,13588,13590,13592,13594,13596,13598],{"class":35,"line":3433},[33,13577,4864],{"class":63},[33,13579,3332],{"class":59},[33,13581,1828],{"class":63},[33,13583,4697],{"class":59},[33,13585,64],{"class":63},[33,13587,2010],{"class":39},[33,13589,4704],{"class":59},[33,13591,2726],{"class":63},[33,13593,2264],{"class":39},[33,13595,4704],{"class":59},[33,13597,3960],{"class":63},[33,13599,157],{"class":59},[33,13601,13602],{"class":35,"line":3447},[33,13603,3698],{"class":59},[33,13605,13606,13608,13610,13612,13614],{"class":35,"line":3452},[33,13607,5114],{"class":59},[33,13609,2859],{"class":63},[33,13611,6015],{"class":59},[33,13613,2859],{"class":63},[33,13615,2881],{"class":59},[33,13617,13618],{"class":35,"line":4243},[33,13619,3855],{"class":59},[33,13621,13622],{"class":35,"line":4257},[33,13623,13624],{"class":87},"    \u002F\u002F释放堆区数组\n",[33,13626,13627],{"class":35,"line":4265},[33,13628,13629],{"class":87},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[33,13631,13632,13635],{"class":35,"line":4270},[33,13633,13634],{"class":63},"    delete[]",[33,13636,13637],{"class":59}," arr;\n",[33,13639,13640],{"class":35,"line":4276},[33,13641,3247],{"class":59},[33,13643,13644],{"class":35,"line":4282},[33,13645,127],{"emptyLinePlaceholder":126},[33,13647,13648,13650,13652],{"class":35,"line":4287},[33,13649,1828],{"class":63},[33,13651,3642],{"class":3632},[33,13653,943],{"class":59},[33,13655,13656],{"class":35,"line":9608},[33,13657,3228],{"class":59},[33,13659,13660,13662],{"class":35,"line":9632},[33,13661,7294],{"class":3632},[33,13663,7297],{"class":59},[33,13665,13666,13668],{"class":35,"line":9637},[33,13667,7363],{"class":3632},[33,13669,7297],{"class":59},[33,13671,13672],{"class":35,"line":9643},[33,13673,3247],{"class":59},[1729,13675,13676],{},"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":43,"depth":43,"links":13678},[13679],{"id":12347,"depth":43,"text":12348,"children":13680},[13681,13682],{"id":12379,"depth":130,"text":12380},{"id":13007,"depth":130,"text":13008},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12339,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13689,"title":13690,"body":13691,"description":28,"extension":1752,"meta":15172,"navigation":126,"path":15173,"seo":15174,"stem":15175,"__hash__":15176},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13692,"toc":15164},[13693,13696,13700,13703,13706,13875,13879,13884,13901,13906,14058,14062,14065,14068,14462,14466,14469,14474,14477,14789,14793,14799,14959,14961,14969,14973,14976,14983,15161],[10,13694,13690],{"id":13695},"_6引用",[14,13697,13699],{"id":13698},"_61引用基本用法","6.1引用基本用法",[19,13701,13702],{},"引用的本质：给变量起别名",[19,13704,13705],{},"语法：数据类型 &别名=原名",[23,13707,13709],{"className":1814,"code":13708,"language":1816,"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,13710,13711,13719,13723,13735,13747,13751,13770,13789,13793,13804,13808,13827,13845,13849,13859,13863,13871],{"__ignoreMap":28},[33,13712,13713,13715,13717],{"class":35,"line":36},[33,13714,1828],{"class":63},[33,13716,3642],{"class":3632},[33,13718,12511],{"class":59},[33,13720,13721],{"class":35,"line":43},[33,13722,127],{"emptyLinePlaceholder":126},[33,13724,13725,13727,13729,13731,13733],{"class":35,"line":130},[33,13726,3653],{"class":63},[33,13728,12527],{"class":59},[33,13730,64],{"class":63},[33,13732,3706],{"class":39},[33,13734,2976],{"class":59},[33,13736,13737,13739,13741,13743,13745],{"class":35,"line":146},[33,13738,3653],{"class":63},[33,13740,12242],{"class":63},[33,13742,12603],{"class":59},[33,13744,64],{"class":63},[33,13746,3115],{"class":59},[33,13748,13749],{"class":35,"line":267},[33,13750,127],{"emptyLinePlaceholder":126},[33,13752,13753,13755,13757,13760,13762,13764,13766,13768],{"class":35,"line":275},[33,13754,8189],{"class":59},[33,13756,2859],{"class":63},[33,13758,13759],{"class":117}," \"a = \"",[33,13761,3127],{"class":63},[33,13763,12527],{"class":59},[33,13765,2859],{"class":63},[33,13767,13127],{"class":59},[33,13769,8928],{"class":87},[33,13771,13772,13774,13776,13779,13781,13783,13785,13787],{"class":35,"line":392},[33,13773,8189],{"class":59},[33,13775,2859],{"class":63},[33,13777,13778],{"class":117}," \"b = \"",[33,13780,3127],{"class":63},[33,13782,12540],{"class":59},[33,13784,2859],{"class":63},[33,13786,13127],{"class":59},[33,13788,8928],{"class":87},[33,13790,13791],{"class":35,"line":406},[33,13792,127],{"emptyLinePlaceholder":126},[33,13794,13795,13798,13800,13802],{"class":35,"line":418},[33,13796,13797],{"class":59},"    b ",[33,13799,64],{"class":63},[33,13801,840],{"class":39},[33,13803,2976],{"class":59},[33,13805,13806],{"class":35,"line":425},[33,13807,127],{"emptyLinePlaceholder":126},[33,13809,13810,13812,13814,13816,13818,13820,13822,13824],{"class":35,"line":1147},[33,13811,8189],{"class":59},[33,13813,2859],{"class":63},[33,13815,13759],{"class":117},[33,13817,3127],{"class":63},[33,13819,12527],{"class":59},[33,13821,2859],{"class":63},[33,13823,13127],{"class":59},[33,13825,13826],{"class":87},"\u002F\u002F100\n",[33,13828,13829,13831,13833,13835,13837,13839,13841,13843],{"class":35,"line":1329},[33,13830,8189],{"class":59},[33,13832,2859],{"class":63},[33,13834,13778],{"class":117},[33,13836,3127],{"class":63},[33,13838,12540],{"class":59},[33,13840,2859],{"class":63},[33,13842,13127],{"class":59},[33,13844,13826],{"class":87},[33,13846,13847],{"class":35,"line":1341},[33,13848,127],{"emptyLinePlaceholder":126},[33,13850,13851,13853,13855,13857],{"class":35,"line":1348},[33,13852,3971],{"class":3632},[33,13854,109],{"class":59},[33,13856,3976],{"class":117},[33,13858,4385],{"class":59},[33,13860,13861],{"class":35,"line":1529},[33,13862,127],{"emptyLinePlaceholder":126},[33,13864,13865,13867,13869],{"class":35,"line":1546},[33,13866,5752],{"class":63},[33,13868,829],{"class":39},[33,13870,2976],{"class":59},[33,13872,13873],{"class":35,"line":1551},[33,13874,3247],{"class":59},[14,13876,13878],{"id":13877},"_62引用的注意事项","6.2引用的注意事项",[162,13880,13881],{},[165,13882,13883],{},"引用必须要初始化",[23,13885,13887],{"className":1814,"code":13886,"language":1816,"meta":28,"style":28},"int &b;\u002F\u002F非常错误！\n",[30,13888,13889],{"__ignoreMap":28},[33,13890,13891,13893,13895,13898],{"class":35,"line":36},[33,13892,1828],{"class":63},[33,13894,12242],{"class":63},[33,13896,13897],{"class":59},"b;",[33,13899,13900],{"class":87},"\u002F\u002F非常错误！\n",[162,13902,13903],{"start":43},[165,13904,13905],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[23,13907,13909],{"className":1814,"code":13908,"language":1816,"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,13910,13911,13919,13931,13943,13951,13967,13980,13998,14016,14036,14046,14054],{"__ignoreMap":28},[33,13912,13913,13915,13917],{"class":35,"line":36},[33,13914,1828],{"class":63},[33,13916,3642],{"class":3632},[33,13918,12511],{"class":59},[33,13920,13921,13923,13925,13927,13929],{"class":35,"line":43},[33,13922,3653],{"class":63},[33,13924,12527],{"class":59},[33,13926,64],{"class":63},[33,13928,3706],{"class":39},[33,13930,2976],{"class":59},[33,13932,13933,13935,13937,13939,13941],{"class":35,"line":130},[33,13934,3653],{"class":63},[33,13936,12540],{"class":59},[33,13938,64],{"class":63},[33,13940,10610],{"class":39},[33,13942,2976],{"class":59},[33,13944,13945,13948],{"class":35,"line":146},[33,13946,13947],{"class":87},"    \u002F\u002Fint &c;",[33,13949,13950],{"class":87}," \u002F\u002F错误，引用必须初始化\n",[33,13952,13953,13955,13957,13959,13961,13964],{"class":35,"line":267},[33,13954,3653],{"class":63},[33,13956,12242],{"class":63},[33,13958,4612],{"class":59},[33,13960,64],{"class":63},[33,13962,13963],{"class":59}," a;",[33,13965,13966],{"class":87}," \u002F\u002F一旦初始化后，就不可以更改\n",[33,13968,13969,13972,13974,13977],{"class":35,"line":275},[33,13970,13971],{"class":59},"    c ",[33,13973,64],{"class":63},[33,13975,13976],{"class":59}," b;",[33,13978,13979],{"class":87}," \u002F\u002F这是赋值操作，不是更改引用\n",[33,13981,13982,13984,13986,13988,13990,13992,13994,13996],{"class":35,"line":392},[33,13983,8189],{"class":59},[33,13985,2859],{"class":63},[33,13987,13759],{"class":117},[33,13989,3127],{"class":63},[33,13991,12527],{"class":59},[33,13993,2859],{"class":63},[33,13995,13127],{"class":59},[33,13997,8913],{"class":87},[33,13999,14000,14002,14004,14006,14008,14010,14012,14014],{"class":35,"line":406},[33,14001,8189],{"class":59},[33,14003,2859],{"class":63},[33,14005,13778],{"class":117},[33,14007,3127],{"class":63},[33,14009,12540],{"class":59},[33,14011,2859],{"class":63},[33,14013,13127],{"class":59},[33,14015,8913],{"class":87},[33,14017,14018,14020,14022,14025,14027,14030,14032,14034],{"class":35,"line":418},[33,14019,8189],{"class":59},[33,14021,2859],{"class":63},[33,14023,14024],{"class":117}," \"c = \"",[33,14026,3127],{"class":63},[33,14028,14029],{"class":59}," c ",[33,14031,2859],{"class":63},[33,14033,13127],{"class":59},[33,14035,8913],{"class":87},[33,14037,14038,14040,14042,14044],{"class":35,"line":425},[33,14039,3971],{"class":3632},[33,14041,109],{"class":59},[33,14043,3976],{"class":117},[33,14045,4385],{"class":59},[33,14047,14048,14050,14052],{"class":35,"line":1147},[33,14049,5752],{"class":63},[33,14051,829],{"class":39},[33,14053,2976],{"class":59},[33,14055,14056],{"class":35,"line":1329},[33,14057,3247],{"class":59},[14,14059,14061],{"id":14060},"_63引用做函数参数","6.3引用做函数参数",[19,14063,14064],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14066,14067],{},"优点：可以简化指针修改实参",[23,14069,14071],{"className":1814,"code":14070,"language":1816,"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,14072,14073,14078,14101,14112,14122,14131,14135,14139,14144,14166,14178,14190,14200,14204,14208,14213,14235,14245,14253,14261,14265,14269,14277,14281,14293,14305,14309,14320,14346,14350,14370,14394,14398,14408,14432,14436,14446,14450,14458],{"__ignoreMap":28},[33,14074,14075],{"class":35,"line":36},[33,14076,14077],{"class":87},"\u002F\u002F1. 值传递\n",[33,14079,14080,14082,14085,14087,14089,14091,14094,14096,14098],{"class":35,"line":43},[33,14081,7025],{"class":63},[33,14083,14084],{"class":3632}," mySwap01",[33,14086,109],{"class":59},[33,14088,1828],{"class":63},[33,14090,3081],{"class":6877},[33,14092,14093],{"class":59},", ",[33,14095,1828],{"class":63},[33,14097,4499],{"class":6877},[33,14099,14100],{"class":59},") {\n",[33,14102,14103,14105,14108,14110],{"class":35,"line":130},[33,14104,3653],{"class":63},[33,14106,14107],{"class":59}," temp ",[33,14109,64],{"class":63},[33,14111,3115],{"class":59},[33,14113,14114,14117,14119],{"class":35,"line":146},[33,14115,14116],{"class":59},"    a ",[33,14118,64],{"class":63},[33,14120,14121],{"class":59}," b;\n",[33,14123,14124,14126,14128],{"class":35,"line":267},[33,14125,13797],{"class":59},[33,14127,64],{"class":63},[33,14129,14130],{"class":59}," temp;\n",[33,14132,14133],{"class":35,"line":275},[33,14134,3247],{"class":59},[33,14136,14137],{"class":35,"line":392},[33,14138,127],{"emptyLinePlaceholder":126},[33,14140,14141],{"class":35,"line":406},[33,14142,14143],{"class":87},"\u002F\u002F2. 地址传递\n",[33,14145,14146,14148,14151,14153,14156,14158,14160,14162,14164],{"class":35,"line":418},[33,14147,7025],{"class":63},[33,14149,14150],{"class":3632}," mySwap02",[33,14152,109],{"class":59},[33,14154,14155],{"class":63},"int*",[33,14157,3081],{"class":6877},[33,14159,14093],{"class":59},[33,14161,14155],{"class":63},[33,14163,4499],{"class":6877},[33,14165,14100],{"class":59},[33,14167,14168,14170,14172,14174,14176],{"class":35,"line":425},[33,14169,3653],{"class":63},[33,14171,14107],{"class":59},[33,14173,64],{"class":63},[33,14175,8178],{"class":63},[33,14177,7857],{"class":59},[33,14179,14180,14182,14184,14186,14188],{"class":35,"line":1147},[33,14181,8063],{"class":63},[33,14183,12577],{"class":59},[33,14185,64],{"class":63},[33,14187,8178],{"class":63},[33,14189,7729],{"class":59},[33,14191,14192,14194,14196,14198],{"class":35,"line":1329},[33,14193,8063],{"class":63},[33,14195,12603],{"class":59},[33,14197,64],{"class":63},[33,14199,14130],{"class":59},[33,14201,14202],{"class":35,"line":1341},[33,14203,3247],{"class":59},[33,14205,14206],{"class":35,"line":1348},[33,14207,127],{"emptyLinePlaceholder":126},[33,14209,14210],{"class":35,"line":1529},[33,14211,14212],{"class":87},"\u002F\u002F3. 引用传递\n",[33,14214,14215,14217,14220,14222,14225,14227,14229,14231,14233],{"class":35,"line":1546},[33,14216,7025],{"class":63},[33,14218,14219],{"class":3632}," mySwap03",[33,14221,109],{"class":59},[33,14223,14224],{"class":63},"int&",[33,14226,3081],{"class":6877},[33,14228,14093],{"class":59},[33,14230,14224],{"class":63},[33,14232,4499],{"class":6877},[33,14234,14100],{"class":59},[33,14236,14237,14239,14241,14243],{"class":35,"line":1551},[33,14238,3653],{"class":63},[33,14240,14107],{"class":59},[33,14242,64],{"class":63},[33,14244,3115],{"class":59},[33,14246,14247,14249,14251],{"class":35,"line":1566},[33,14248,14116],{"class":59},[33,14250,64],{"class":63},[33,14252,14121],{"class":59},[33,14254,14255,14257,14259],{"class":35,"line":1578},[33,14256,13797],{"class":59},[33,14258,64],{"class":63},[33,14260,14130],{"class":59},[33,14262,14263],{"class":35,"line":1583},[33,14264,3247],{"class":59},[33,14266,14267],{"class":35,"line":3369},[33,14268,127],{"emptyLinePlaceholder":126},[33,14270,14271,14273,14275],{"class":35,"line":3396},[33,14272,1828],{"class":63},[33,14274,3642],{"class":3632},[33,14276,12511],{"class":59},[33,14278,14279],{"class":35,"line":3401},[33,14280,127],{"emptyLinePlaceholder":126},[33,14282,14283,14285,14287,14289,14291],{"class":35,"line":3418},[33,14284,3653],{"class":63},[33,14286,12527],{"class":59},[33,14288,64],{"class":63},[33,14290,3706],{"class":39},[33,14292,2976],{"class":59},[33,14294,14295,14297,14299,14301,14303],{"class":35,"line":3423},[33,14296,3653],{"class":63},[33,14298,12540],{"class":59},[33,14300,64],{"class":63},[33,14302,10610],{"class":39},[33,14304,2976],{"class":59},[33,14306,14307],{"class":35,"line":3428},[33,14308,127],{"emptyLinePlaceholder":126},[33,14310,14311,14314,14317],{"class":35,"line":3433},[33,14312,14313],{"class":3632},"    mySwap01",[33,14315,14316],{"class":59},"(a, b);",[33,14318,14319],{"class":87},"\u002F\u002F值传递，形参不会修饰实参\n",[33,14321,14322,14324,14326,14329,14331,14333,14335,14338,14340,14342,14344],{"class":35,"line":3447},[33,14323,8189],{"class":59},[33,14325,2859],{"class":63},[33,14327,14328],{"class":117}," \"a:\"",[33,14330,3127],{"class":63},[33,14332,12527],{"class":59},[33,14334,2859],{"class":63},[33,14336,14337],{"class":117}," \" b:\"",[33,14339,3127],{"class":63},[33,14341,12540],{"class":59},[33,14343,2859],{"class":63},[33,14345,10500],{"class":59},[33,14347,14348],{"class":35,"line":3452},[33,14349,127],{"emptyLinePlaceholder":126},[33,14351,14352,14355,14357,14359,14362,14364,14367],{"class":35,"line":4243},[33,14353,14354],{"class":3632},"    mySwap02",[33,14356,109],{"class":59},[33,14358,2171],{"class":63},[33,14360,14361],{"class":59},"a, ",[33,14363,2171],{"class":63},[33,14365,14366],{"class":59},"b);",[33,14368,14369],{"class":87},"\u002F\u002F地址传递，形参会修饰实参\n",[33,14371,14372,14374,14376,14378,14380,14382,14384,14386,14388,14390,14392],{"class":35,"line":4257},[33,14373,8189],{"class":59},[33,14375,2859],{"class":63},[33,14377,14328],{"class":117},[33,14379,3127],{"class":63},[33,14381,12527],{"class":59},[33,14383,2859],{"class":63},[33,14385,14337],{"class":117},[33,14387,3127],{"class":63},[33,14389,12540],{"class":59},[33,14391,2859],{"class":63},[33,14393,10500],{"class":59},[33,14395,14396],{"class":35,"line":4265},[33,14397,127],{"emptyLinePlaceholder":126},[33,14399,14400,14403,14405],{"class":35,"line":4270},[33,14401,14402],{"class":3632},"    mySwap03",[33,14404,14316],{"class":59},[33,14406,14407],{"class":87},"\u002F\u002F引用传递，形参会修饰实参\n",[33,14409,14410,14412,14414,14416,14418,14420,14422,14424,14426,14428,14430],{"class":35,"line":4276},[33,14411,8189],{"class":59},[33,14413,2859],{"class":63},[33,14415,14328],{"class":117},[33,14417,3127],{"class":63},[33,14419,12527],{"class":59},[33,14421,2859],{"class":63},[33,14423,14337],{"class":117},[33,14425,3127],{"class":63},[33,14427,12540],{"class":59},[33,14429,2859],{"class":63},[33,14431,10500],{"class":59},[33,14433,14434],{"class":35,"line":4282},[33,14435,127],{"emptyLinePlaceholder":126},[33,14437,14438,14440,14442,14444],{"class":35,"line":4287},[33,14439,3971],{"class":3632},[33,14441,109],{"class":59},[33,14443,3976],{"class":117},[33,14445,4385],{"class":59},[33,14447,14448],{"class":35,"line":9608},[33,14449,127],{"emptyLinePlaceholder":126},[33,14451,14452,14454,14456],{"class":35,"line":9632},[33,14453,5752],{"class":63},[33,14455,829],{"class":39},[33,14457,2976],{"class":59},[33,14459,14460],{"class":35,"line":9637},[33,14461,3247],{"class":59},[14,14463,14465],{"id":14464},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14467,14468],{},"作用：引用是可以作为函数的返回值存在的",[19,14470,160,14471],{},[1968,14472,14473],{},"不要返回局部变量引用",[19,14475,14476],{},"用法：函数调用作为左值",[23,14478,14480],{"className":11600,"code":14479,"language":11602,"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,14481,14482,14487,14495,14510,14516,14520,14524,14529,14537,14554,14560,14564,14568,14576,14580,14585,14599,14619,14638,14642,14647,14660,14680,14698,14702,14718,14722,14741,14759,14763,14773,14777,14785],{"__ignoreMap":28},[33,14483,14484],{"class":35,"line":36},[33,14485,14486],{"class":87},"\u002F\u002F返回局部变量引用\n",[33,14488,14489,14491,14493],{"class":35,"line":43},[33,14490,14224],{"class":63},[33,14492,7249],{"class":3632},[33,14494,12511],{"class":59},[33,14496,14497,14499,14501,14503,14505,14507],{"class":35,"line":130},[33,14498,3653],{"class":63},[33,14500,12527],{"class":59},[33,14502,64],{"class":63},[33,14504,3706],{"class":39},[33,14506,1876],{"class":59},[33,14508,14509],{"class":87}," \u002F\u002F局部变量\n",[33,14511,14512,14514],{"class":35,"line":146},[33,14513,5752],{"class":63},[33,14515,3115],{"class":59},[33,14517,14518],{"class":35,"line":267},[33,14519,3247],{"class":59},[33,14521,14522],{"class":35,"line":275},[33,14523,127],{"emptyLinePlaceholder":126},[33,14525,14526],{"class":35,"line":392},[33,14527,14528],{"class":87},"\u002F\u002F返回静态变量引用\n",[33,14530,14531,14533,14535],{"class":35,"line":406},[33,14532,14224],{"class":63},[33,14534,7318],{"class":3632},[33,14536,12511],{"class":59},[33,14538,14539,14541,14543,14545,14547,14549,14551],{"class":35,"line":418},[33,14540,12678],{"class":63},[33,14542,106],{"class":63},[33,14544,12527],{"class":59},[33,14546,64],{"class":63},[33,14548,10610],{"class":39},[33,14550,1876],{"class":59},[33,14552,14553],{"class":87},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[33,14555,14556,14558],{"class":35,"line":425},[33,14557,5752],{"class":63},[33,14559,3115],{"class":59},[33,14561,14562],{"class":35,"line":1147},[33,14563,3247],{"class":59},[33,14565,14566],{"class":35,"line":1329},[33,14567,127],{"emptyLinePlaceholder":126},[33,14569,14570,14572,14574],{"class":35,"line":1341},[33,14571,1828],{"class":63},[33,14573,3642],{"class":3632},[33,14575,12511],{"class":59},[33,14577,14578],{"class":35,"line":1348},[33,14579,127],{"emptyLinePlaceholder":126},[33,14581,14582],{"class":35,"line":1529},[33,14583,14584],{"class":87},"    \u002F\u002F不能返回局部变量的引用\n",[33,14586,14587,14590,14593,14595,14597],{"class":35,"line":1546},[33,14588,14589],{"class":63},"    int&",[33,14591,14592],{"class":59}," ref ",[33,14594,64],{"class":63},[33,14596,7249],{"class":3632},[33,14598,7297],{"class":59},[33,14600,14601,14603,14605,14608,14610,14612,14614,14616],{"class":35,"line":1551},[33,14602,8189],{"class":59},[33,14604,2859],{"class":63},[33,14606,14607],{"class":117}," \"ref = \"",[33,14609,3127],{"class":63},[33,14611,14592],{"class":59},[33,14613,2859],{"class":63},[33,14615,13127],{"class":59},[33,14617,14618],{"class":87},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[33,14620,14621,14623,14625,14627,14629,14631,14633,14635],{"class":35,"line":1566},[33,14622,8189],{"class":59},[33,14624,2859],{"class":63},[33,14626,14607],{"class":117},[33,14628,3127],{"class":63},[33,14630,14592],{"class":59},[33,14632,2859],{"class":63},[33,14634,13127],{"class":59},[33,14636,14637],{"class":87},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[33,14639,14640],{"class":35,"line":1578},[33,14641,127],{"emptyLinePlaceholder":126},[33,14643,14644],{"class":35,"line":1583},[33,14645,14646],{"class":87},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[33,14648,14649,14651,14654,14656,14658],{"class":35,"line":3369},[33,14650,14589],{"class":63},[33,14652,14653],{"class":59}," ref2 ",[33,14655,64],{"class":63},[33,14657,7318],{"class":3632},[33,14659,7297],{"class":59},[33,14661,14662,14664,14666,14669,14671,14673,14675,14677],{"class":35,"line":3396},[33,14663,8189],{"class":59},[33,14665,2859],{"class":63},[33,14667,14668],{"class":117}," \"ref2 = \"",[33,14670,3127],{"class":63},[33,14672,14653],{"class":59},[33,14674,2859],{"class":63},[33,14676,13127],{"class":59},[33,14678,14679],{"class":87}," \u002F\u002F20\n",[33,14681,14682,14684,14686,14688,14690,14692,14694,14696],{"class":35,"line":3401},[33,14683,8189],{"class":59},[33,14685,2859],{"class":63},[33,14687,14668],{"class":117},[33,14689,3127],{"class":63},[33,14691,14653],{"class":59},[33,14693,2859],{"class":63},[33,14695,13127],{"class":59},[33,14697,14679],{"class":87},[33,14699,14700],{"class":35,"line":3418},[33,14701,127],{"emptyLinePlaceholder":126},[33,14703,14704,14706,14709,14711,14713,14715],{"class":35,"line":3423},[33,14705,7363],{"class":3632},[33,14707,14708],{"class":59},"() ",[33,14710,64],{"class":63},[33,14712,4664],{"class":39},[33,14714,1876],{"class":59},[33,14716,14717],{"class":87},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[33,14719,14720],{"class":35,"line":3428},[33,14721,127],{"emptyLinePlaceholder":126},[33,14723,14724,14726,14728,14730,14732,14734,14736,14738],{"class":35,"line":3433},[33,14725,8189],{"class":59},[33,14727,2859],{"class":63},[33,14729,14668],{"class":117},[33,14731,3127],{"class":63},[33,14733,14653],{"class":59},[33,14735,2859],{"class":63},[33,14737,13127],{"class":59},[33,14739,14740],{"class":87}," \u002F\u002F1000\n",[33,14742,14743,14745,14747,14749,14751,14753,14755,14757],{"class":35,"line":3447},[33,14744,8189],{"class":59},[33,14746,2859],{"class":63},[33,14748,14668],{"class":117},[33,14750,3127],{"class":63},[33,14752,14653],{"class":59},[33,14754,2859],{"class":63},[33,14756,13127],{"class":59},[33,14758,14740],{"class":87},[33,14760,14761],{"class":35,"line":3452},[33,14762,127],{"emptyLinePlaceholder":126},[33,14764,14765,14767,14769,14771],{"class":35,"line":4243},[33,14766,3971],{"class":3632},[33,14768,109],{"class":59},[33,14770,3976],{"class":117},[33,14772,4385],{"class":59},[33,14774,14775],{"class":35,"line":4257},[33,14776,127],{"emptyLinePlaceholder":126},[33,14778,14779,14781,14783],{"class":35,"line":4265},[33,14780,5752],{"class":63},[33,14782,829],{"class":39},[33,14784,2976],{"class":59},[33,14786,14787],{"class":35,"line":4270},[33,14788,3247],{"class":59},[14,14790,14792],{"id":14791},"_65引用的本质","6.5引用的本质",[19,14794,14795,14796],{},"本质：",[1968,14797,14798],{},"引用的本质在c++内部实现是一个指针常量.",[23,14800,14802],{"className":1814,"code":14801,"language":1816,"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,14803,14804,14809,14825,14839,14843,14852,14864,14869,14874,14885,14898,14902,14918,14935,14939,14947,14955],{"__ignoreMap":28},[33,14805,14806],{"class":35,"line":36},[33,14807,14808],{"class":87},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[33,14810,14811,14813,14815,14817,14819,14822],{"class":35,"line":43},[33,14812,7025],{"class":63},[33,14814,13043],{"class":3632},[33,14816,109],{"class":59},[33,14818,14224],{"class":63},[33,14820,14821],{"class":6877}," ref",[33,14823,14824],{"class":59},"){\n",[33,14826,14827,14830,14832,14834,14836],{"class":35,"line":130},[33,14828,14829],{"class":59},"    ref ",[33,14831,64],{"class":63},[33,14833,840],{"class":39},[33,14835,1876],{"class":59},[33,14837,14838],{"class":87}," \u002F\u002F ref是引用，转换为*ref = 100\n",[33,14840,14841],{"class":35,"line":146},[33,14842,3247],{"class":59},[33,14844,14845,14847,14849],{"class":35,"line":267},[33,14846,1828],{"class":63},[33,14848,3642],{"class":3632},[33,14850,14851],{"class":59},"(){\n",[33,14853,14854,14856,14858,14860,14862],{"class":35,"line":275},[33,14855,3653],{"class":63},[33,14857,12527],{"class":59},[33,14859,64],{"class":63},[33,14861,3706],{"class":39},[33,14863,2976],{"class":59},[33,14865,14866],{"class":35,"line":392},[33,14867,14868],{"class":59},"    \n",[33,14870,14871],{"class":35,"line":406},[33,14872,14873],{"class":87},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[33,14875,14876,14878,14880,14882],{"class":35,"line":418},[33,14877,14589],{"class":63},[33,14879,14592],{"class":59},[33,14881,64],{"class":63},[33,14883,14884],{"class":59}," a; \n",[33,14886,14887,14889,14891,14893,14895],{"class":35,"line":425},[33,14888,14829],{"class":59},[33,14890,64],{"class":63},[33,14892,10610],{"class":39},[33,14894,1876],{"class":59},[33,14896,14897],{"class":87}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[33,14899,14900],{"class":35,"line":1147},[33,14901,14868],{"class":59},[33,14903,14904,14906,14908,14910,14912,14914,14916],{"class":35,"line":1329},[33,14905,8189],{"class":59},[33,14907,2859],{"class":63},[33,14909,14328],{"class":117},[33,14911,3127],{"class":63},[33,14913,12527],{"class":59},[33,14915,2859],{"class":63},[33,14917,10500],{"class":59},[33,14919,14920,14922,14924,14927,14929,14931,14933],{"class":35,"line":1341},[33,14921,8189],{"class":59},[33,14923,2859],{"class":63},[33,14925,14926],{"class":117}," \"ref:\"",[33,14928,3127],{"class":63},[33,14930,14592],{"class":59},[33,14932,2859],{"class":63},[33,14934,10500],{"class":59},[33,14936,14937],{"class":35,"line":1348},[33,14938,14868],{"class":59},[33,14940,14941,14944],{"class":35,"line":1529},[33,14942,14943],{"class":3632},"    func",[33,14945,14946],{"class":59},"(a);\n",[33,14948,14949,14951,14953],{"class":35,"line":1546},[33,14950,5752],{"class":63},[33,14952,829],{"class":39},[33,14954,2976],{"class":59},[33,14956,14957],{"class":35,"line":1551},[33,14958,3247],{"class":59},[19,14960,12990],{},[162,14962,14963,14966],{},[165,14964,14965],{},"引用的本质，就是一个指针常量",[165,14967,14968],{},"引用一旦初始化，就不可以发生改变",[14,14970,14972],{"id":14971},"_66常量引用","6.6常量引用",[19,14974,14975],{},"作用：常量引用主要用来修饰形参",[19,14977,14978,14979,14982],{},"在函数形参列表中，可以加",[1968,14980,14981],{},"const修饰形参","，防止形参改变实参",[23,14984,14986],{"className":1814,"code":14985,"language":1816,"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,14987,14988,14993,14998,15017,15022,15035,15039,15043,15051,15055,15060,15065,15079,15083,15091,15103,15107,15112,15124,15131,15135,15145,15149,15157],{"__ignoreMap":28},[33,14989,14990],{"class":35,"line":36},[33,14991,14992],{"class":87},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[33,14994,14995],{"class":35,"line":43},[33,14996,14997],{"class":87},"\u002F\u002F加上const就不能修改实参的\n",[33,14999,15000,15002,15005,15007,15009,15012,15015],{"class":35,"line":130},[33,15001,7025],{"class":63},[33,15003,15004],{"class":3632}," showValue",[33,15006,109],{"class":59},[33,15008,8452],{"class":63},[33,15010,15011],{"class":63}," int&",[33,15013,15014],{"class":6877}," v",[33,15016,14100],{"class":59},[33,15018,15019],{"class":35,"line":146},[33,15020,15021],{"class":87},"    \u002F\u002Fv += 100;\n",[33,15023,15024,15026,15028,15031,15033],{"class":35,"line":267},[33,15025,8189],{"class":59},[33,15027,2859],{"class":63},[33,15029,15030],{"class":59}," v ",[33,15032,2859],{"class":63},[33,15034,10500],{"class":59},[33,15036,15037],{"class":35,"line":275},[33,15038,3247],{"class":59},[33,15040,15041],{"class":35,"line":392},[33,15042,127],{"emptyLinePlaceholder":126},[33,15044,15045,15047,15049],{"class":35,"line":406},[33,15046,1828],{"class":63},[33,15048,3642],{"class":3632},[33,15050,12511],{"class":59},[33,15052,15053],{"class":35,"line":418},[33,15054,127],{"emptyLinePlaceholder":126},[33,15056,15057],{"class":35,"line":425},[33,15058,15059],{"class":87},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[33,15061,15062],{"class":35,"line":1147},[33,15063,15064],{"class":87},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[33,15066,15067,15069,15071,15073,15075,15077],{"class":35,"line":1329},[33,15068,12879],{"class":63},[33,15070,15011],{"class":63},[33,15072,14592],{"class":59},[33,15074,64],{"class":63},[33,15076,3706],{"class":39},[33,15078,2976],{"class":59},[33,15080,15081],{"class":35,"line":1341},[33,15082,127],{"emptyLinePlaceholder":126},[33,15084,15085,15088],{"class":35,"line":1348},[33,15086,15087],{"class":87},"    \u002F\u002Fref = 100;",[33,15089,15090],{"class":87},"  \u002F\u002F加入const后不可以修改变量\n",[33,15092,15093,15095,15097,15099,15101],{"class":35,"line":1529},[33,15094,8189],{"class":59},[33,15096,2859],{"class":63},[33,15098,14592],{"class":59},[33,15100,2859],{"class":63},[33,15102,10500],{"class":59},[33,15104,15105],{"class":35,"line":1546},[33,15106,127],{"emptyLinePlaceholder":126},[33,15108,15109],{"class":35,"line":1551},[33,15110,15111],{"class":87},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[33,15113,15114,15116,15118,15120,15122],{"class":35,"line":1566},[33,15115,3653],{"class":63},[33,15117,12527],{"class":59},[33,15119,64],{"class":63},[33,15121,3706],{"class":39},[33,15123,2976],{"class":59},[33,15125,15126,15129],{"class":35,"line":1578},[33,15127,15128],{"class":3632},"    showValue",[33,15130,14946],{"class":59},[33,15132,15133],{"class":35,"line":1583},[33,15134,127],{"emptyLinePlaceholder":126},[33,15136,15137,15139,15141,15143],{"class":35,"line":3369},[33,15138,3971],{"class":3632},[33,15140,109],{"class":59},[33,15142,3976],{"class":117},[33,15144,4385],{"class":59},[33,15146,15147],{"class":35,"line":3396},[33,15148,127],{"emptyLinePlaceholder":126},[33,15150,15151,15153,15155],{"class":35,"line":3401},[33,15152,5752],{"class":63},[33,15154,829],{"class":39},[33,15156,2976],{"class":59},[33,15158,15159],{"class":35,"line":3418},[33,15160,3247],{"class":59},[1729,15162,15163],{},"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":43,"depth":43,"links":15165},[15166,15167,15168,15169,15170,15171],{"id":13698,"depth":43,"text":13699},{"id":13877,"depth":43,"text":13878},{"id":14060,"depth":43,"text":14061},{"id":14464,"depth":43,"text":14465},{"id":14791,"depth":43,"text":14792},{"id":14971,"depth":43,"text":14972},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13690,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15178,"title":15179,"body":15180,"description":28,"extension":1752,"meta":16261,"navigation":126,"path":16262,"seo":16263,"stem":16264,"__hash__":16265},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15181,"toc":16253},[15182,15185,15189,15192,15197,15429,15431,15442,15446,15449,15457,15561,15564,15568,15571,15575,15578,15583,15605,15611,15938,15941,15945,15953,16250],[10,15183,15179],{"id":15184},"_7函数高级部分",[14,15186,15188],{"id":15187},"_71函数默认参数","7.1函数默认参数",[19,15190,15191],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15193,6842,15194],{},[30,15195,15196],{}," 返回值类型  函数名 （参数= 默认值）{}",[23,15198,15200],{"className":1814,"code":15199,"language":1816,"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,15201,15202,15237,15252,15256,15260,15265,15270,15299,15319,15329,15333,15337,15345,15349,15377,15399,15403,15413,15417,15425],{"__ignoreMap":28},[33,15203,15204,15206,15208,15210,15212,15214,15216,15218,15220,15223,15225,15227,15229,15231,15233,15235],{"class":35,"line":36},[33,15205,1828],{"class":63},[33,15207,13043],{"class":3632},[33,15209,109],{"class":59},[33,15211,1828],{"class":63},[33,15213,3081],{"class":6877},[33,15215,14093],{"class":59},[33,15217,1828],{"class":63},[33,15219,4499],{"class":6877},[33,15221,15222],{"class":63}," =",[33,15224,3706],{"class":39},[33,15226,14093],{"class":59},[33,15228,1828],{"class":63},[33,15230,4515],{"class":6877},[33,15232,15222],{"class":63},[33,15234,3706],{"class":39},[33,15236,14100],{"class":59},[33,15238,15239,15241,15243,15245,15247,15249],{"class":35,"line":43},[33,15240,5752],{"class":63},[33,15242,12527],{"class":59},[33,15244,2298],{"class":63},[33,15246,12540],{"class":59},[33,15248,2298],{"class":63},[33,15250,15251],{"class":59}," c;\n",[33,15253,15254],{"class":35,"line":130},[33,15255,3247],{"class":59},[33,15257,15258],{"class":35,"line":146},[33,15259,127],{"emptyLinePlaceholder":126},[33,15261,15262],{"class":35,"line":267},[33,15263,15264],{"class":87},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[33,15266,15267],{"class":35,"line":275},[33,15268,15269],{"class":87},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[33,15271,15272,15274,15277,15279,15281,15283,15285,15287,15289,15291,15293,15295,15297],{"class":35,"line":392},[33,15273,1828],{"class":63},[33,15275,15276],{"class":3632}," func2",[33,15278,109],{"class":59},[33,15280,1828],{"class":63},[33,15282,3081],{"class":6877},[33,15284,15222],{"class":63},[33,15286,3706],{"class":39},[33,15288,14093],{"class":59},[33,15290,1828],{"class":63},[33,15292,4499],{"class":6877},[33,15294,15222],{"class":63},[33,15296,3706],{"class":39},[33,15298,4385],{"class":59},[33,15300,15301,15303,15305,15307,15309,15311,15313,15315,15317],{"class":35,"line":406},[33,15302,1828],{"class":63},[33,15304,15276],{"class":3632},[33,15306,109],{"class":59},[33,15308,1828],{"class":63},[33,15310,3081],{"class":6877},[33,15312,14093],{"class":59},[33,15314,1828],{"class":63},[33,15316,4499],{"class":6877},[33,15318,14100],{"class":59},[33,15320,15321,15323,15325,15327],{"class":35,"line":418},[33,15322,5752],{"class":63},[33,15324,12527],{"class":59},[33,15326,2298],{"class":63},[33,15328,14121],{"class":59},[33,15330,15331],{"class":35,"line":425},[33,15332,3247],{"class":59},[33,15334,15335],{"class":35,"line":1147},[33,15336,127],{"emptyLinePlaceholder":126},[33,15338,15339,15341,15343],{"class":35,"line":1329},[33,15340,1828],{"class":63},[33,15342,3642],{"class":3632},[33,15344,12511],{"class":59},[33,15346,15347],{"class":35,"line":1341},[33,15348,127],{"emptyLinePlaceholder":126},[33,15350,15351,15353,15355,15358,15360,15362,15364,15366,15368,15370,15373,15375],{"class":35,"line":1348},[33,15352,8189],{"class":59},[33,15354,2859],{"class":63},[33,15356,15357],{"class":117}," \"ret = \"",[33,15359,3127],{"class":63},[33,15361,13043],{"class":3632},[33,15363,109],{"class":59},[33,15365,2517],{"class":39},[33,15367,14093],{"class":59},[33,15369,2517],{"class":39},[33,15371,15372],{"class":59},") ",[33,15374,2859],{"class":63},[33,15376,10500],{"class":59},[33,15378,15379,15381,15383,15385,15387,15389,15391,15393,15395,15397],{"class":35,"line":1529},[33,15380,8189],{"class":59},[33,15382,2859],{"class":63},[33,15384,15357],{"class":117},[33,15386,3127],{"class":63},[33,15388,13043],{"class":3632},[33,15390,109],{"class":59},[33,15392,2129],{"class":39},[33,15394,15372],{"class":59},[33,15396,2859],{"class":63},[33,15398,10500],{"class":59},[33,15400,15401],{"class":35,"line":1546},[33,15402,127],{"emptyLinePlaceholder":126},[33,15404,15405,15407,15409,15411],{"class":35,"line":1551},[33,15406,3971],{"class":3632},[33,15408,109],{"class":59},[33,15410,3976],{"class":117},[33,15412,4385],{"class":59},[33,15414,15415],{"class":35,"line":1566},[33,15416,127],{"emptyLinePlaceholder":126},[33,15418,15419,15421,15423],{"class":35,"line":1578},[33,15420,5752],{"class":63},[33,15422,829],{"class":39},[33,15424,2976],{"class":59},[33,15426,15427],{"class":35,"line":1583},[33,15428,3247],{"class":59},[19,15430,12990],{},[162,15432,15433,15436,15439],{},[165,15434,15435],{},"我传就用我；没传就用你",[165,15437,15438],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[165,15440,15441],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15443,15445],{"id":15444},"_72函数的占位参数","7.2函数的占位参数",[19,15447,15448],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15450,15451,15453,15454],{},[1968,15452,6842],{}," ",[30,15455,15456],{},"返回值类型 函数名 (数据类型){}",[23,15458,15460],{"className":1814,"code":15459,"language":1816,"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,15461,15462,15467,15485,15498,15502,15510,15514,15531,15535,15545,15549,15557],{"__ignoreMap":28},[33,15463,15464],{"class":35,"line":36},[33,15465,15466],{"class":87},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[33,15468,15469,15471,15473,15475,15477,15479,15481,15483],{"class":35,"line":43},[33,15470,7025],{"class":63},[33,15472,13043],{"class":3632},[33,15474,109],{"class":59},[33,15476,1828],{"class":63},[33,15478,3081],{"class":6877},[33,15480,14093],{"class":59},[33,15482,1828],{"class":63},[33,15484,14100],{"class":59},[33,15486,15487,15489,15491,15494,15496],{"class":35,"line":130},[33,15488,8189],{"class":59},[33,15490,2859],{"class":63},[33,15492,15493],{"class":117}," \"this is func\"",[33,15495,3127],{"class":63},[33,15497,10500],{"class":59},[33,15499,15500],{"class":35,"line":146},[33,15501,3247],{"class":59},[33,15503,15504,15506,15508],{"class":35,"line":267},[33,15505,1828],{"class":63},[33,15507,3642],{"class":3632},[33,15509,12511],{"class":59},[33,15511,15512],{"class":35,"line":275},[33,15513,127],{"emptyLinePlaceholder":126},[33,15515,15516,15518,15520,15522,15524,15526,15528],{"class":35,"line":392},[33,15517,14943],{"class":3632},[33,15519,109],{"class":59},[33,15521,2264],{"class":39},[33,15523,2196],{"class":59},[33,15525,2264],{"class":39},[33,15527,7626],{"class":59},[33,15529,15530],{"class":87}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[33,15532,15533],{"class":35,"line":406},[33,15534,127],{"emptyLinePlaceholder":126},[33,15536,15537,15539,15541,15543],{"class":35,"line":418},[33,15538,3971],{"class":3632},[33,15540,109],{"class":59},[33,15542,3976],{"class":117},[33,15544,4385],{"class":59},[33,15546,15547],{"class":35,"line":425},[33,15548,127],{"emptyLinePlaceholder":126},[33,15550,15551,15553,15555],{"class":35,"line":1147},[33,15552,5752],{"class":63},[33,15554,829],{"class":39},[33,15556,2976],{"class":59},[33,15558,15559],{"class":35,"line":1329},[33,15560,3247],{"class":59},[19,15562,15563],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15565,15567],{"id":15566},"_73函数重载","7.3函数重载",[19,15569,15570],{},"意思是函数名是可以相同的",[633,15572,15574],{"id":15573},"_731基本语法","7.3.1基本语法",[19,15576,15577],{},"作用：函数名可以相同，提高复用性",[19,15579,15580],{},[1968,15581,15582],{},"函数重载满足条件：",[2822,15584,15585,15588,15591],{},[165,15586,15587],{},"同一个作用域下",[165,15589,15590],{},"函数名称相同",[165,15592,15593,15594,15597,15598,15601,15602],{},"函数参数",[1968,15595,15596],{},"类型不同","  或者 ",[1968,15599,15600],{},"个数不同"," 或者 ",[1968,15603,15604],{},"顺序不同",[19,15606,15607,15610],{},[1968,15608,15609],{},"注意:","  函数的返回值不可以作为函数重载的条件",[23,15612,15614],{"className":11600,"code":15613,"language":11602,"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,15615,15616,15621,15629,15633,15646,15650,15664,15668,15681,15685,15700,15704,15717,15721,15742,15746,15759,15763,15783,15787,15800,15804,15808,15813,15818,15823,15828,15833,15837,15841,15849,15853,15859,15869,15879,15893,15908,15912,15922,15926,15934],{"__ignoreMap":28},[33,15617,15618],{"class":35,"line":36},[33,15619,15620],{"class":87},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[33,15622,15623,15625,15627],{"class":35,"line":43},[33,15624,7025],{"class":63},[33,15626,13043],{"class":3632},[33,15628,943],{"class":59},[33,15630,15631],{"class":35,"line":130},[33,15632,3228],{"class":59},[33,15634,15635,15637,15639,15642,15644],{"class":35,"line":146},[33,15636,8189],{"class":59},[33,15638,2859],{"class":63},[33,15640,15641],{"class":117}," \"func 的调用！\"",[33,15643,3127],{"class":63},[33,15645,10500],{"class":59},[33,15647,15648],{"class":35,"line":267},[33,15649,3247],{"class":59},[33,15651,15652,15654,15656,15658,15660,15662],{"class":35,"line":275},[33,15653,7025],{"class":63},[33,15655,13043],{"class":3632},[33,15657,109],{"class":59},[33,15659,1828],{"class":63},[33,15661,3081],{"class":6877},[33,15663,157],{"class":59},[33,15665,15666],{"class":35,"line":392},[33,15667,3228],{"class":59},[33,15669,15670,15672,15674,15677,15679],{"class":35,"line":406},[33,15671,8189],{"class":59},[33,15673,2859],{"class":63},[33,15675,15676],{"class":117}," \"func (int a) 的调用！\"",[33,15678,3127],{"class":63},[33,15680,10500],{"class":59},[33,15682,15683],{"class":35,"line":418},[33,15684,3247],{"class":59},[33,15686,15687,15689,15691,15693,15696,15698],{"class":35,"line":425},[33,15688,7025],{"class":63},[33,15690,13043],{"class":3632},[33,15692,109],{"class":59},[33,15694,15695],{"class":63},"double",[33,15697,3081],{"class":6877},[33,15699,157],{"class":59},[33,15701,15702],{"class":35,"line":1147},[33,15703,3228],{"class":59},[33,15705,15706,15708,15710,15713,15715],{"class":35,"line":1329},[33,15707,8189],{"class":59},[33,15709,2859],{"class":63},[33,15711,15712],{"class":117}," \"func (double a)的调用！\"",[33,15714,3127],{"class":63},[33,15716,10500],{"class":59},[33,15718,15719],{"class":35,"line":1341},[33,15720,3247],{"class":59},[33,15722,15723,15725,15727,15729,15731,15733,15736,15738,15740],{"class":35,"line":1348},[33,15724,7025],{"class":63},[33,15726,13043],{"class":3632},[33,15728,109],{"class":59},[33,15730,1828],{"class":63},[33,15732,3081],{"class":6877},[33,15734,15735],{"class":59}," ,",[33,15737,15695],{"class":63},[33,15739,4499],{"class":6877},[33,15741,157],{"class":59},[33,15743,15744],{"class":35,"line":1529},[33,15745,3228],{"class":59},[33,15747,15748,15750,15752,15755,15757],{"class":35,"line":1546},[33,15749,8189],{"class":59},[33,15751,2859],{"class":63},[33,15753,15754],{"class":117}," \"func (int a ,double b) 的调用！\"",[33,15756,3127],{"class":63},[33,15758,10500],{"class":59},[33,15760,15761],{"class":35,"line":1551},[33,15762,3247],{"class":59},[33,15764,15765,15767,15769,15771,15773,15775,15777,15779,15781],{"class":35,"line":1566},[33,15766,7025],{"class":63},[33,15768,13043],{"class":3632},[33,15770,109],{"class":59},[33,15772,15695],{"class":63},[33,15774,3081],{"class":6877},[33,15776,15735],{"class":59},[33,15778,1828],{"class":63},[33,15780,4499],{"class":6877},[33,15782,157],{"class":59},[33,15784,15785],{"class":35,"line":1578},[33,15786,3228],{"class":59},[33,15788,15789,15791,15793,15796,15798],{"class":35,"line":1583},[33,15790,8189],{"class":59},[33,15792,2859],{"class":63},[33,15794,15795],{"class":117}," \"func (double a ,int b)的调用！\"",[33,15797,3127],{"class":63},[33,15799,10500],{"class":59},[33,15801,15802],{"class":35,"line":3369},[33,15803,3247],{"class":59},[33,15805,15806],{"class":35,"line":3396},[33,15807,127],{"emptyLinePlaceholder":126},[33,15809,15810],{"class":35,"line":3401},[33,15811,15812],{"class":87},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[33,15814,15815],{"class":35,"line":3418},[33,15816,15817],{"class":87},"\u002F\u002Fint func(double a, int b)\n",[33,15819,15820],{"class":35,"line":3423},[33,15821,15822],{"class":87},"\u002F\u002F{\n",[33,15824,15825],{"class":35,"line":3428},[33,15826,15827],{"class":87},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[33,15829,15830],{"class":35,"line":3433},[33,15831,15832],{"class":87},"\u002F\u002F}\n",[33,15834,15835],{"class":35,"line":3447},[33,15836,127],{"emptyLinePlaceholder":126},[33,15838,15839],{"class":35,"line":3452},[33,15840,127],{"emptyLinePlaceholder":126},[33,15842,15843,15845,15847],{"class":35,"line":4243},[33,15844,1828],{"class":63},[33,15846,3642],{"class":3632},[33,15848,12511],{"class":59},[33,15850,15851],{"class":35,"line":4257},[33,15852,127],{"emptyLinePlaceholder":126},[33,15854,15855,15857],{"class":35,"line":4265},[33,15856,14943],{"class":3632},[33,15858,7297],{"class":59},[33,15860,15861,15863,15865,15867],{"class":35,"line":4270},[33,15862,14943],{"class":3632},[33,15864,109],{"class":59},[33,15866,2264],{"class":39},[33,15868,4385],{"class":59},[33,15870,15871,15873,15875,15877],{"class":35,"line":4276},[33,15872,14943],{"class":3632},[33,15874,109],{"class":59},[33,15876,1871],{"class":39},[33,15878,4385],{"class":59},[33,15880,15881,15883,15885,15887,15889,15891],{"class":35,"line":4282},[33,15882,14943],{"class":3632},[33,15884,109],{"class":59},[33,15886,2264],{"class":39},[33,15888,2196],{"class":59},[33,15890,1871],{"class":39},[33,15892,4385],{"class":59},[33,15894,15895,15897,15899,15901,15904,15906],{"class":35,"line":4287},[33,15896,14943],{"class":3632},[33,15898,109],{"class":59},[33,15900,1871],{"class":39},[33,15902,15903],{"class":59}," , ",[33,15905,2264],{"class":39},[33,15907,4385],{"class":59},[33,15909,15910],{"class":35,"line":9608},[33,15911,14868],{"class":59},[33,15913,15914,15916,15918,15920],{"class":35,"line":9632},[33,15915,3971],{"class":3632},[33,15917,109],{"class":59},[33,15919,3976],{"class":117},[33,15921,4385],{"class":59},[33,15923,15924],{"class":35,"line":9637},[33,15925,127],{"emptyLinePlaceholder":126},[33,15927,15928,15930,15932],{"class":35,"line":9643},[33,15929,5752],{"class":63},[33,15931,829],{"class":39},[33,15933,2976],{"class":59},[33,15935,15936],{"class":35,"line":9670},[33,15937,3247],{"class":59},[19,15939,15940],{},"重点：函数返回值不可以作为函数重载条件！",[633,15942,15944],{"id":15943},"_732注意事项","7.3.2注意事项",[2822,15946,15947,15950],{},[165,15948,15949],{},"引用作为重载条件!!!",[165,15951,15952],{},"函数重载碰到函数默认参数",[23,15954,15956],{"className":1814,"code":15955,"language":1816,"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,15957,15958,15963,15968,15972,15988,15992,16005,16009,16013,16031,16035,16048,16052,16056,16060,16065,16069,16093,16097,16110,16114,16118,16132,16136,16149,16153,16157,16165,16169,16181,16191,16204,16208,16212,16220,16224,16234,16238,16246],{"__ignoreMap":28},[33,15959,15960],{"class":35,"line":36},[33,15961,15962],{"class":87},"\u002F\u002F函数重载注意事项\n",[33,15964,15965],{"class":35,"line":43},[33,15966,15967],{"class":87},"\u002F\u002F1、引用作为重载条件\n",[33,15969,15970],{"class":35,"line":130},[33,15971,127],{"emptyLinePlaceholder":126},[33,15973,15974,15976,15978,15980,15982,15984,15986],{"class":35,"line":146},[33,15975,7025],{"class":63},[33,15977,13043],{"class":3632},[33,15979,109],{"class":59},[33,15981,1828],{"class":63},[33,15983,12242],{"class":63},[33,15985,2057],{"class":6877},[33,15987,157],{"class":59},[33,15989,15990],{"class":35,"line":267},[33,15991,3228],{"class":59},[33,15993,15994,15996,15998,16001,16003],{"class":35,"line":275},[33,15995,8189],{"class":59},[33,15997,2859],{"class":63},[33,15999,16000],{"class":117}," \"func (int &a) 调用 \"",[33,16002,3127],{"class":63},[33,16004,10500],{"class":59},[33,16006,16007],{"class":35,"line":392},[33,16008,3247],{"class":59},[33,16010,16011],{"class":35,"line":406},[33,16012,127],{"emptyLinePlaceholder":126},[33,16014,16015,16017,16019,16021,16023,16025,16027,16029],{"class":35,"line":418},[33,16016,7025],{"class":63},[33,16018,13043],{"class":3632},[33,16020,109],{"class":59},[33,16022,8452],{"class":63},[33,16024,106],{"class":63},[33,16026,12242],{"class":63},[33,16028,2057],{"class":6877},[33,16030,157],{"class":59},[33,16032,16033],{"class":35,"line":425},[33,16034,3228],{"class":59},[33,16036,16037,16039,16041,16044,16046],{"class":35,"line":1147},[33,16038,8189],{"class":59},[33,16040,2859],{"class":63},[33,16042,16043],{"class":117}," \"func (const int &a) 调用 \"",[33,16045,3127],{"class":63},[33,16047,10500],{"class":59},[33,16049,16050],{"class":35,"line":1329},[33,16051,3247],{"class":59},[33,16053,16054],{"class":35,"line":1341},[33,16055,127],{"emptyLinePlaceholder":126},[33,16057,16058],{"class":35,"line":1348},[33,16059,127],{"emptyLinePlaceholder":126},[33,16061,16062],{"class":35,"line":1529},[33,16063,16064],{"class":87},"\u002F\u002F2、函数重载碰到函数默认参数\n",[33,16066,16067],{"class":35,"line":1546},[33,16068,127],{"emptyLinePlaceholder":126},[33,16070,16071,16073,16075,16077,16079,16081,16083,16085,16087,16089,16091],{"class":35,"line":1551},[33,16072,7025],{"class":63},[33,16074,15276],{"class":3632},[33,16076,109],{"class":59},[33,16078,1828],{"class":63},[33,16080,3081],{"class":6877},[33,16082,14093],{"class":59},[33,16084,1828],{"class":63},[33,16086,4499],{"class":6877},[33,16088,15222],{"class":63},[33,16090,3706],{"class":39},[33,16092,157],{"class":59},[33,16094,16095],{"class":35,"line":1566},[33,16096,3228],{"class":59},[33,16098,16099,16101,16103,16106,16108],{"class":35,"line":1578},[33,16100,8189],{"class":59},[33,16102,2859],{"class":63},[33,16104,16105],{"class":117}," \"func2(int a, int b = 10) 调用\"",[33,16107,3127],{"class":63},[33,16109,10500],{"class":59},[33,16111,16112],{"class":35,"line":1583},[33,16113,3247],{"class":59},[33,16115,16116],{"class":35,"line":3369},[33,16117,127],{"emptyLinePlaceholder":126},[33,16119,16120,16122,16124,16126,16128,16130],{"class":35,"line":3396},[33,16121,7025],{"class":63},[33,16123,15276],{"class":3632},[33,16125,109],{"class":59},[33,16127,1828],{"class":63},[33,16129,3081],{"class":6877},[33,16131,157],{"class":59},[33,16133,16134],{"class":35,"line":3401},[33,16135,3228],{"class":59},[33,16137,16138,16140,16142,16145,16147],{"class":35,"line":3418},[33,16139,8189],{"class":59},[33,16141,2859],{"class":63},[33,16143,16144],{"class":117}," \"func2(int a) 调用\"",[33,16146,3127],{"class":63},[33,16148,10500],{"class":59},[33,16150,16151],{"class":35,"line":3423},[33,16152,3247],{"class":59},[33,16154,16155],{"class":35,"line":3428},[33,16156,127],{"emptyLinePlaceholder":126},[33,16158,16159,16161,16163],{"class":35,"line":3433},[33,16160,1828],{"class":63},[33,16162,3642],{"class":3632},[33,16164,12511],{"class":59},[33,16166,16167],{"class":35,"line":3447},[33,16168,14868],{"class":59},[33,16170,16171,16173,16175,16177,16179],{"class":35,"line":3452},[33,16172,3653],{"class":63},[33,16174,12527],{"class":59},[33,16176,64],{"class":63},[33,16178,3706],{"class":39},[33,16180,2976],{"class":59},[33,16182,16183,16185,16188],{"class":35,"line":4243},[33,16184,14943],{"class":3632},[33,16186,16187],{"class":59},"(a);",[33,16189,16190],{"class":87}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[33,16192,16193,16195,16197,16199,16201],{"class":35,"line":4257},[33,16194,14943],{"class":3632},[33,16196,109],{"class":59},[33,16198,2264],{"class":39},[33,16200,7626],{"class":59},[33,16202,16203],{"class":87},"\u002F\u002F调用有const   10是个常量\n",[33,16205,16206],{"class":35,"line":4265},[33,16207,127],{"emptyLinePlaceholder":126},[33,16209,16210],{"class":35,"line":4270},[33,16211,127],{"emptyLinePlaceholder":126},[33,16213,16214,16217],{"class":35,"line":4276},[33,16215,16216],{"class":87},"    \u002F\u002Ffunc2(10);",[33,16218,16219],{"class":87}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[33,16221,16222],{"class":35,"line":4282},[33,16223,127],{"emptyLinePlaceholder":126},[33,16225,16226,16228,16230,16232],{"class":35,"line":4287},[33,16227,3971],{"class":3632},[33,16229,109],{"class":59},[33,16231,3976],{"class":117},[33,16233,4385],{"class":59},[33,16235,16236],{"class":35,"line":9608},[33,16237,127],{"emptyLinePlaceholder":126},[33,16239,16240,16242,16244],{"class":35,"line":9632},[33,16241,5752],{"class":63},[33,16243,829],{"class":39},[33,16245,2976],{"class":59},[33,16247,16248],{"class":35,"line":9637},[33,16249,3247],{"class":59},[1729,16251,16252],{},"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":43,"depth":43,"links":16254},[16255,16256,16257],{"id":15187,"depth":43,"text":15188},{"id":15444,"depth":43,"text":15445},{"id":15566,"depth":43,"text":15567,"children":16258},[16259,16260],{"id":15573,"depth":130,"text":15574},{"id":15943,"depth":130,"text":15944},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15179,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16267,"title":16268,"body":16269,"description":25020,"extension":1752,"meta":25021,"navigation":126,"path":25022,"seo":25023,"stem":25024,"__hash__":25025},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16270,"toc":25001},[16271,16274,16280,16287,16292,16295,16298,16301,16305,16309,16312,16315,16323,16328,16331,16338,16343,16502,16505,16757,16760,16763,16766,16771,16774,16777,16788,16792,17028,17032,17042,17045,17053,17200,17204,17207,17210,17214,17658,17662,17670,17678,18590,18597,18602,19230,19233,19236,19239,19358,19361,19448,19451,19577,19580,19674,19677,20030,20034,20042,20046,20053,20056,20059,20070,20076,20081,20093,20101,20121,20129,20146,20332,20335,20339,20342,20345,20348,20351,20354,20357,20360,20820,20826,20830,20833,20844,21431,21434,21923,21927,21930,21933,21936,21939,21942,21950,22346,22350,22353,22356,22803,22806,22809,22814,22817,22822,22825,22829,22832,22834,22840,22843,23149,23159,23200,23204,23207,23209,23242,23245,23552,23554,23569,23572,23595,23604,23610,23613,23617,23620,23623,23628,23639,23644,23652,23657,23787,23790,23793,23968,23973,24185,24189,24192,24306,24311,24550,24554,24558,24561,24564,24569,24674,24677,24680,24683,24687,24798,24801,24804,24809,24861,24864,24867,24872,24918,24921,24926,24994,24996,24999],[10,16272,16268],{"id":16273},"_8类和对象",[19,16275,16276,16277],{},"C++面向对象的三大特性为",[1968,16278,16279],{},"封装、继承、多态",[19,16281,16282,16283,16286],{},"C++认为",[1968,16284,16285],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16288,16289],{},[1968,16290,16291],{},"例如：",[19,16293,16294],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16296,16297],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16299,16300],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16302,16304],{"id":16303},"_81封装","8.1封装",[633,16306,16308],{"id":16307},"_811封装的意义","8.1.1封装的意义",[19,16310,16311],{},"封装是C++面向对象三大特性之一",[19,16313,16314],{},"封装的意义：",[2822,16316,16317,16320],{},[165,16318,16319],{},"将属性和行为作为一个整体，表现生活中的事物",[165,16321,16322],{},"将属性和行为加以权限控制",[19,16324,16325],{},[1968,16326,16327],{},"封装意义一：",[19,16329,16330],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16332,16333,15453,16335],{},[1968,16334,6842],{},[30,16336,16337],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[162,16339,16340],{},[165,16341,16342],{},"**示例1：**设计一个圆类，求圆的周长",[23,16344,16346],{"className":1814,"code":16345,"language":1816,"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,16347,16348,16356,16360,16365,16370,16375,16380,16387,16392,16402,16406,16424,16428,16432,16440,16444,16449,16454,16459,16464,16475,16498],{"__ignoreMap":28},[33,16349,16350,16353],{"class":35,"line":36},[33,16351,16352],{"class":63},"class",[33,16354,16355],{"class":3632}," Circle\n",[33,16357,16358],{"class":35,"line":43},[33,16359,3228],{"class":59},[33,16361,16362],{"class":35,"line":130},[33,16363,16364],{"class":87},"    \u002F\u002F访问权限\n",[33,16366,16367],{"class":35,"line":146},[33,16368,16369],{"class":87},"    \u002F\u002F公共权限\n",[33,16371,16372],{"class":35,"line":267},[33,16373,16374],{"class":63},"public:\n",[33,16376,16377],{"class":35,"line":275},[33,16378,16379],{"class":87},"    \u002F\u002F属性\n",[33,16381,16382,16384],{"class":35,"line":392},[33,16383,3653],{"class":63},[33,16385,16386],{"class":59}," m_r;\n",[33,16388,16389],{"class":35,"line":406},[33,16390,16391],{"class":87},"    \u002F\u002F行为\n",[33,16393,16394,16397,16400],{"class":35,"line":418},[33,16395,16396],{"class":63},"    double",[33,16398,16399],{"class":3632}," calculateZC",[33,16401,943],{"class":59},[33,16403,16404],{"class":35,"line":425},[33,16405,3698],{"class":59},[33,16407,16408,16411,16414,16416,16419,16421],{"class":35,"line":1147},[33,16409,16410],{"class":63},"        return",[33,16412,16413],{"class":39}," 2",[33,16415,1540],{"class":63},[33,16417,16418],{"class":59},"PI",[33,16420,1540],{"class":63},[33,16422,16423],{"class":59},"m_r;\n",[33,16425,16426],{"class":35,"line":1329},[33,16427,3855],{"class":59},[33,16429,16430],{"class":35,"line":1341},[33,16431,5657],{"class":59},[33,16433,16434,16436,16438],{"class":35,"line":1348},[33,16435,1828],{"class":63},[33,16437,3642],{"class":3632},[33,16439,943],{"class":59},[33,16441,16442],{"class":35,"line":1529},[33,16443,3228],{"class":59},[33,16445,16446],{"class":35,"line":1546},[33,16447,16448],{"class":87},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[33,16450,16451],{"class":35,"line":1551},[33,16452,16453],{"class":87},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[33,16455,16456],{"class":35,"line":1566},[33,16457,16458],{"class":59},"    Circle c1;\n",[33,16460,16461],{"class":35,"line":1578},[33,16462,16463],{"class":87},"    \u002F\u002F给圆对象 的属性进行赋值\n",[33,16465,16466,16469,16471,16473],{"class":35,"line":1583},[33,16467,16468],{"class":59},"    c1.m_r",[33,16470,64],{"class":63},[33,16472,2264],{"class":39},[33,16474,2976],{"class":59},[33,16476,16477,16479,16481,16484,16486,16489,16492,16494,16496],{"class":35,"line":3369},[33,16478,3233],{"class":59},[33,16480,2859],{"class":63},[33,16482,16483],{"class":117},"\"圆的周长\"",[33,16485,2859],{"class":63},[33,16487,16488],{"class":59},"c1.",[33,16490,16491],{"class":3632},"calculateZC",[33,16493,4093],{"class":59},[33,16495,2859],{"class":63},[33,16497,2881],{"class":59},[33,16499,16500],{"class":35,"line":3396},[33,16501,3247],{"class":59},[19,16503,16504],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[23,16506,16508],{"className":1814,"code":16507,"language":1816,"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,16509,16510,16516,16526,16532,16538,16542,16546,16551,16558,16563,16581,16585,16595,16599,16604,16620,16624,16634,16638,16643,16651,16655,16687,16691,16695,16703,16707,16712,16717,16731,16744,16753],{"__ignoreMap":28},[33,16511,16512,16514],{"class":35,"line":36},[33,16513,3618],{"class":63},[33,16515,3621],{"class":117},[33,16517,16518,16520,16522,16524],{"class":35,"line":43},[33,16519,3626],{"class":63},[33,16521,3629],{"class":63},[33,16523,3633],{"class":3632},[33,16525,2976],{"class":59},[33,16527,16528,16530],{"class":35,"line":130},[33,16529,3618],{"class":63},[33,16531,9409],{"class":117},[33,16533,16534,16536],{"class":35,"line":146},[33,16535,16352],{"class":63},[33,16537,9422],{"class":3632},[33,16539,16540],{"class":35,"line":267},[33,16541,3228],{"class":59},[33,16543,16544],{"class":35,"line":275},[33,16545,16374],{"class":63},[33,16547,16548],{"class":35,"line":392},[33,16549,16550],{"class":59},"    string m_name;\n",[33,16552,16553,16555],{"class":35,"line":406},[33,16554,3653],{"class":63},[33,16556,16557],{"class":59}," m_id;\n",[33,16559,16560],{"class":35,"line":418},[33,16561,16562],{"class":87},"    \u002F\u002F赋值姓名\n",[33,16564,16565,16568,16571,16573,16576,16579],{"class":35,"line":425},[33,16566,16567],{"class":63},"    void",[33,16569,16570],{"class":3632}," setName",[33,16572,109],{"class":59},[33,16574,16575],{"class":3632},"string",[33,16577,16578],{"class":6877}," name",[33,16580,157],{"class":59},[33,16582,16583],{"class":35,"line":1147},[33,16584,3698],{"class":59},[33,16586,16587,16590,16592],{"class":35,"line":1329},[33,16588,16589],{"class":59},"        m_name",[33,16591,64],{"class":63},[33,16593,16594],{"class":59},"name;\n",[33,16596,16597],{"class":35,"line":1341},[33,16598,3855],{"class":59},[33,16600,16601],{"class":35,"line":1348},[33,16602,16603],{"class":87},"    \u002F\u002F赋值学号\n",[33,16605,16606,16608,16611,16613,16615,16618],{"class":35,"line":1529},[33,16607,16567],{"class":63},[33,16609,16610],{"class":3632}," setId",[33,16612,109],{"class":59},[33,16614,1828],{"class":63},[33,16616,16617],{"class":6877}," id",[33,16619,157],{"class":59},[33,16621,16622],{"class":35,"line":1546},[33,16623,3698],{"class":59},[33,16625,16626,16629,16631],{"class":35,"line":1551},[33,16627,16628],{"class":59},"        m_id",[33,16630,64],{"class":63},[33,16632,16633],{"class":59},"id;\n",[33,16635,16636],{"class":35,"line":1566},[33,16637,3855],{"class":59},[33,16639,16640],{"class":35,"line":1578},[33,16641,16642],{"class":87},"    \u002F\u002F打印学生信息\n",[33,16644,16645,16647,16649],{"class":35,"line":1583},[33,16646,16567],{"class":63},[33,16648,11274],{"class":3632},[33,16650,943],{"class":59},[33,16652,16653],{"class":35,"line":3369},[33,16654,3698],{"class":59},[33,16656,16657,16659,16661,16664,16666,16669,16671,16673,16675,16678,16680,16683,16685],{"class":35,"line":3396},[33,16658,5114],{"class":59},[33,16660,2859],{"class":63},[33,16662,16663],{"class":117},"\"姓名：\"",[33,16665,2859],{"class":63},[33,16667,16668],{"class":59},"m_name",[33,16670,2859],{"class":63},[33,16672,6020],{"class":117},[33,16674,2859],{"class":63},[33,16676,16677],{"class":117},"\"学号：\"",[33,16679,2859],{"class":63},[33,16681,16682],{"class":59},"m_id",[33,16684,2859],{"class":63},[33,16686,2881],{"class":59},[33,16688,16689],{"class":35,"line":3401},[33,16690,3855],{"class":59},[33,16692,16693],{"class":35,"line":3418},[33,16694,5657],{"class":59},[33,16696,16697,16699,16701],{"class":35,"line":3423},[33,16698,1828],{"class":63},[33,16700,3642],{"class":3632},[33,16702,943],{"class":59},[33,16704,16705],{"class":35,"line":3428},[33,16706,3228],{"class":59},[33,16708,16709],{"class":35,"line":3433},[33,16710,16711],{"class":87},"    \u002F\u002F实例化\n",[33,16713,16714],{"class":35,"line":3447},[33,16715,16716],{"class":59},"    Student s1;\n",[33,16718,16719,16722,16725,16727,16729],{"class":35,"line":3452},[33,16720,16721],{"class":59},"    s1.",[33,16723,16724],{"class":3632},"setName",[33,16726,109],{"class":59},[33,16728,9576],{"class":117},[33,16730,4385],{"class":59},[33,16732,16733,16735,16738,16740,16742],{"class":35,"line":4243},[33,16734,16721],{"class":59},[33,16736,16737],{"class":3632},"setId",[33,16739,109],{"class":59},[33,16741,1723],{"class":39},[33,16743,4385],{"class":59},[33,16745,16746,16748,16751],{"class":35,"line":4257},[33,16747,16721],{"class":59},[33,16749,16750],{"class":3632},"printInfo",[33,16752,7297],{"class":59},[33,16754,16755],{"class":35,"line":4265},[33,16756,3247],{"class":59},[19,16758,16759],{},"类中的属性和行为统称为成员",[19,16761,16762],{},"属性：成员属性(成员变量)",[19,16764,16765],{},"方法：成员函数(成员方法)",[19,16767,16768],{},[1968,16769,16770],{},"封装意义二：",[19,16772,16773],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16775,16776],{},"访问权限有三种：",[162,16778,16779,16782,16785],{},[165,16780,16781],{},"public        公共权限",[165,16783,16784],{},"protected 保护权限",[165,16786,16787],{},"private      私有权限",[19,16789,16790],{},[1968,16791,958],{},[23,16793,16795],{"className":11600,"code":16794,"language":11602,"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,16796,16797,16802,16807,16812,16817,16821,16828,16832,16837,16841,16846,16850,16855,16860,16865,16869,16874,16879,16886,16890,16894,16902,16906,16917,16929,16941,16945,16949,16953,16961,16965,16970,16982,16990,16998,17002,17012,17016,17024],{"__ignoreMap":28},[33,16798,16799],{"class":35,"line":36},[33,16800,16801],{"class":87},"\u002F\u002F三种权限\n",[33,16803,16804],{"class":35,"line":43},[33,16805,16806],{"class":87},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[33,16808,16809],{"class":35,"line":130},[33,16810,16811],{"class":87},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[33,16813,16814],{"class":35,"line":146},[33,16815,16816],{"class":87},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[33,16818,16819],{"class":35,"line":267},[33,16820,127],{"emptyLinePlaceholder":126},[33,16822,16823,16825],{"class":35,"line":275},[33,16824,16352],{"class":63},[33,16826,16827],{"class":3632}," Person\n",[33,16829,16830],{"class":35,"line":392},[33,16831,3228],{"class":59},[33,16833,16834],{"class":35,"line":406},[33,16835,16836],{"class":87},"    \u002F\u002F姓名  公共权限\n",[33,16838,16839],{"class":35,"line":418},[33,16840,16374],{"class":63},[33,16842,16843],{"class":35,"line":425},[33,16844,16845],{"class":59},"    string m_Name;\n",[33,16847,16848],{"class":35,"line":1147},[33,16849,127],{"emptyLinePlaceholder":126},[33,16851,16852],{"class":35,"line":1329},[33,16853,16854],{"class":87},"    \u002F\u002F汽车  保护权限\n",[33,16856,16857],{"class":35,"line":1341},[33,16858,16859],{"class":63},"protected:\n",[33,16861,16862],{"class":35,"line":1348},[33,16863,16864],{"class":59},"    string m_Car;\n",[33,16866,16867],{"class":35,"line":1529},[33,16868,127],{"emptyLinePlaceholder":126},[33,16870,16871],{"class":35,"line":1546},[33,16872,16873],{"class":87},"    \u002F\u002F银行卡密码  私有权限\n",[33,16875,16876],{"class":35,"line":1551},[33,16877,16878],{"class":63},"private:\n",[33,16880,16881,16883],{"class":35,"line":1566},[33,16882,3653],{"class":63},[33,16884,16885],{"class":59}," m_Password;\n",[33,16887,16888],{"class":35,"line":1578},[33,16889,127],{"emptyLinePlaceholder":126},[33,16891,16892],{"class":35,"line":1583},[33,16893,16374],{"class":63},[33,16895,16896,16898,16900],{"class":35,"line":3369},[33,16897,16567],{"class":63},[33,16899,13043],{"class":3632},[33,16901,943],{"class":59},[33,16903,16904],{"class":35,"line":3396},[33,16905,3698],{"class":59},[33,16907,16908,16911,16913,16915],{"class":35,"line":3401},[33,16909,16910],{"class":59},"        m_Name ",[33,16912,64],{"class":63},[33,16914,10598],{"class":117},[33,16916,2976],{"class":59},[33,16918,16919,16922,16924,16927],{"class":35,"line":3418},[33,16920,16921],{"class":59},"        m_Car ",[33,16923,64],{"class":63},[33,16925,16926],{"class":117}," \"拖拉机\"",[33,16928,2976],{"class":59},[33,16930,16931,16934,16936,16939],{"class":35,"line":3423},[33,16932,16933],{"class":59},"        m_Password ",[33,16935,64],{"class":63},[33,16937,16938],{"class":39}," 123456",[33,16940,2976],{"class":59},[33,16942,16943],{"class":35,"line":3428},[33,16944,3855],{"class":59},[33,16946,16947],{"class":35,"line":3433},[33,16948,5657],{"class":59},[33,16950,16951],{"class":35,"line":3447},[33,16952,127],{"emptyLinePlaceholder":126},[33,16954,16955,16957,16959],{"class":35,"line":3452},[33,16956,1828],{"class":63},[33,16958,3642],{"class":3632},[33,16960,12511],{"class":59},[33,16962,16963],{"class":35,"line":4243},[33,16964,127],{"emptyLinePlaceholder":126},[33,16966,16967],{"class":35,"line":4257},[33,16968,16969],{"class":59},"    Person p;\n",[33,16971,16972,16975,16977,16980],{"class":35,"line":4265},[33,16973,16974],{"class":59},"    p.m_Name ",[33,16976,64],{"class":63},[33,16978,16979],{"class":117}," \"李四\"",[33,16981,2976],{"class":59},[33,16983,16984,16987],{"class":35,"line":4270},[33,16985,16986],{"class":87},"    \u002F\u002Fp.m_Car = \"奔驰\";",[33,16988,16989],{"class":87},"  \u002F\u002F保护权限类外访问不到\n",[33,16991,16992,16995],{"class":35,"line":4276},[33,16993,16994],{"class":87},"    \u002F\u002Fp.m_Password = 123;",[33,16996,16997],{"class":87}," \u002F\u002F私有权限类外访问不到\n",[33,16999,17000],{"class":35,"line":4282},[33,17001,127],{"emptyLinePlaceholder":126},[33,17003,17004,17006,17008,17010],{"class":35,"line":4287},[33,17005,3971],{"class":3632},[33,17007,109],{"class":59},[33,17009,3976],{"class":117},[33,17011,4385],{"class":59},[33,17013,17014],{"class":35,"line":9608},[33,17015,127],{"emptyLinePlaceholder":126},[33,17017,17018,17020,17022],{"class":35,"line":9632},[33,17019,5752],{"class":63},[33,17021,829],{"class":39},[33,17023,2976],{"class":59},[33,17025,17026],{"class":35,"line":9637},[33,17027,3247],{"class":59},[633,17029,17031],{"id":17030},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17033,17034,17035,17038,17039],{},"在C++中 struct和class唯一的",[1968,17036,17037],{},"区别","就在于 ",[1968,17040,17041],{},"默认的访问权限不同",[19,17043,17044],{},"区别：",[2822,17046,17047,17050],{},[165,17048,17049],{},"struct 默认权限为公共",[165,17051,17052],{},"class   默认权限为私有",[23,17054,17056],{"className":11600,"code":17055,"language":11602,"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,17057,17058,17065,17069,17079,17083,17087,17094,17098,17108,17112,17116,17124,17128,17133,17147,17151,17156,17170,17174,17184,17188,17196],{"__ignoreMap":28},[33,17059,17060,17062],{"class":35,"line":36},[33,17061,16352],{"class":63},[33,17063,17064],{"class":3632}," C1\n",[33,17066,17067],{"class":35,"line":43},[33,17068,3228],{"class":59},[33,17070,17071,17073,17076],{"class":35,"line":130},[33,17072,3653],{"class":63},[33,17074,17075],{"class":59},"  m_A;",[33,17077,17078],{"class":87}," \u002F\u002F默认是私有权限\n",[33,17080,17081],{"class":35,"line":146},[33,17082,5657],{"class":59},[33,17084,17085],{"class":35,"line":267},[33,17086,127],{"emptyLinePlaceholder":126},[33,17088,17089,17091],{"class":35,"line":275},[33,17090,9419],{"class":63},[33,17092,17093],{"class":3632}," C2\n",[33,17095,17096],{"class":35,"line":392},[33,17097,3228],{"class":59},[33,17099,17100,17102,17105],{"class":35,"line":406},[33,17101,3653],{"class":63},[33,17103,17104],{"class":59}," m_A;",[33,17106,17107],{"class":87},"  \u002F\u002F默认是公共权限\n",[33,17109,17110],{"class":35,"line":418},[33,17111,5657],{"class":59},[33,17113,17114],{"class":35,"line":425},[33,17115,127],{"emptyLinePlaceholder":126},[33,17117,17118,17120,17122],{"class":35,"line":1147},[33,17119,1828],{"class":63},[33,17121,3642],{"class":3632},[33,17123,12511],{"class":59},[33,17125,17126],{"class":35,"line":1329},[33,17127,127],{"emptyLinePlaceholder":126},[33,17129,17130],{"class":35,"line":1341},[33,17131,17132],{"class":59},"    C1 c1;\n",[33,17134,17135,17138,17140,17142,17144],{"class":35,"line":1348},[33,17136,17137],{"class":59},"    c1.m_A ",[33,17139,64],{"class":63},[33,17141,3706],{"class":39},[33,17143,1876],{"class":59},[33,17145,17146],{"class":87}," \u002F\u002F错误，访问权限是私有\n",[33,17148,17149],{"class":35,"line":1529},[33,17150,127],{"emptyLinePlaceholder":126},[33,17152,17153],{"class":35,"line":1546},[33,17154,17155],{"class":59},"    C2 c2;\n",[33,17157,17158,17161,17163,17165,17167],{"class":35,"line":1551},[33,17159,17160],{"class":59},"    c2.m_A ",[33,17162,64],{"class":63},[33,17164,3706],{"class":39},[33,17166,1876],{"class":59},[33,17168,17169],{"class":87}," \u002F\u002F正确，访问权限是公共\n",[33,17171,17172],{"class":35,"line":1566},[33,17173,127],{"emptyLinePlaceholder":126},[33,17175,17176,17178,17180,17182],{"class":35,"line":1578},[33,17177,3971],{"class":3632},[33,17179,109],{"class":59},[33,17181,3976],{"class":117},[33,17183,4385],{"class":59},[33,17185,17186],{"class":35,"line":1583},[33,17187,127],{"emptyLinePlaceholder":126},[33,17189,17190,17192,17194],{"class":35,"line":3369},[33,17191,5752],{"class":63},[33,17193,829],{"class":39},[33,17195,2976],{"class":59},[33,17197,17198],{"class":35,"line":3396},[33,17199,3247],{"class":59},[633,17201,17203],{"id":17202},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17205,17206],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17208,17209],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17211,17212],{},[1968,17213,958],{},[23,17215,17217],{"className":11600,"code":17216,"language":11602,"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,17218,17219,17229,17233,17237,17242,17256,17265,17269,17279,17283,17290,17294,17298,17302,17307,17316,17323,17327,17332,17348,17370,17383,17390,17394,17403,17407,17411,17416,17432,17442,17446,17450,17454,17462,17466,17476,17480,17488,17492,17496,17504,17508,17512,17517,17530,17553,17557,17562,17575,17597,17601,17606,17620,17628,17632,17642,17646,17654],{"__ignoreMap":28},[33,17220,17221,17223,17226],{"class":35,"line":36},[33,17222,16352],{"class":63},[33,17224,17225],{"class":3632}," Person",[33,17227,17228],{"class":59}," {\n",[33,17230,17231],{"class":35,"line":43},[33,17232,16374],{"class":63},[33,17234,17235],{"class":35,"line":130},[33,17236,127],{"emptyLinePlaceholder":126},[33,17238,17239],{"class":35,"line":146},[33,17240,17241],{"class":87},"    \u002F\u002F姓名设置可读可写\n",[33,17243,17244,17246,17248,17250,17252,17254],{"class":35,"line":267},[33,17245,16567],{"class":63},[33,17247,16570],{"class":3632},[33,17249,109],{"class":59},[33,17251,16575],{"class":3632},[33,17253,16578],{"class":6877},[33,17255,14100],{"class":59},[33,17257,17258,17260,17262],{"class":35,"line":275},[33,17259,16910],{"class":59},[33,17261,64],{"class":63},[33,17263,17264],{"class":59}," name;\n",[33,17266,17267],{"class":35,"line":392},[33,17268,3855],{"class":59},[33,17270,17271,17274,17277],{"class":35,"line":406},[33,17272,17273],{"class":3632},"    string",[33,17275,17276],{"class":3632}," getName",[33,17278,943],{"class":59},[33,17280,17281],{"class":35,"line":418},[33,17282,3698],{"class":59},[33,17284,17285,17287],{"class":35,"line":425},[33,17286,16410],{"class":63},[33,17288,17289],{"class":59}," m_Name;\n",[33,17291,17292],{"class":35,"line":1147},[33,17293,3855],{"class":59},[33,17295,17296],{"class":35,"line":1329},[33,17297,127],{"emptyLinePlaceholder":126},[33,17299,17300],{"class":35,"line":1341},[33,17301,127],{"emptyLinePlaceholder":126},[33,17303,17304],{"class":35,"line":1348},[33,17305,17306],{"class":87},"    \u002F\u002F获取年龄 \n",[33,17308,17309,17311,17314],{"class":35,"line":1529},[33,17310,3653],{"class":63},[33,17312,17313],{"class":3632}," getAge",[33,17315,12511],{"class":59},[33,17317,17318,17320],{"class":35,"line":1546},[33,17319,16410],{"class":63},[33,17321,17322],{"class":59}," m_Age;\n",[33,17324,17325],{"class":35,"line":1551},[33,17326,3855],{"class":59},[33,17328,17329],{"class":35,"line":1566},[33,17330,17331],{"class":87},"    \u002F\u002F设置年龄\n",[33,17333,17334,17336,17339,17341,17343,17346],{"class":35,"line":1578},[33,17335,16567],{"class":63},[33,17337,17338],{"class":3632}," setAge",[33,17340,109],{"class":59},[33,17342,1828],{"class":63},[33,17344,17345],{"class":6877}," age",[33,17347,14100],{"class":59},[33,17349,17350,17352,17355,17357,17359,17361,17363,17365,17368],{"class":35,"line":1583},[33,17351,4163],{"class":63},[33,17353,17354],{"class":59}," (age ",[33,17356,2726],{"class":63},[33,17358,829],{"class":39},[33,17360,4918],{"class":63},[33,17362,136],{"class":59},[33,17364,2775],{"class":63},[33,17366,17367],{"class":39}," 150",[33,17369,14100],{"class":59},[33,17371,17372,17374,17376,17379,17381],{"class":35,"line":3369},[33,17373,11378],{"class":59},[33,17375,2859],{"class":63},[33,17377,17378],{"class":117}," \"你个老妖精!\"",[33,17380,3127],{"class":63},[33,17382,10500],{"class":59},[33,17384,17385,17388],{"class":35,"line":3396},[33,17386,17387],{"class":63},"            return",[33,17389,2976],{"class":59},[33,17391,17392],{"class":35,"line":3401},[33,17393,4195],{"class":59},[33,17395,17396,17399,17401],{"class":35,"line":3418},[33,17397,17398],{"class":59},"        m_Age ",[33,17400,64],{"class":63},[33,17402,9457],{"class":59},[33,17404,17405],{"class":35,"line":3423},[33,17406,3855],{"class":59},[33,17408,17409],{"class":35,"line":3428},[33,17410,127],{"emptyLinePlaceholder":126},[33,17412,17413],{"class":35,"line":3433},[33,17414,17415],{"class":87},"    \u002F\u002F情人设置为只写\n",[33,17417,17418,17420,17423,17425,17427,17430],{"class":35,"line":3447},[33,17419,16567],{"class":63},[33,17421,17422],{"class":3632}," setLover",[33,17424,109],{"class":59},[33,17426,16575],{"class":3632},[33,17428,17429],{"class":6877}," lover",[33,17431,14100],{"class":59},[33,17433,17434,17437,17439],{"class":35,"line":3452},[33,17435,17436],{"class":59},"        m_Lover ",[33,17438,64],{"class":63},[33,17440,17441],{"class":59}," lover;\n",[33,17443,17444],{"class":35,"line":4243},[33,17445,3855],{"class":59},[33,17447,17448],{"class":35,"line":4257},[33,17449,127],{"emptyLinePlaceholder":126},[33,17451,17452],{"class":35,"line":4265},[33,17453,16878],{"class":63},[33,17455,17456,17459],{"class":35,"line":4270},[33,17457,17458],{"class":59},"    string m_Name;",[33,17460,17461],{"class":87}," \u002F\u002F可读可写  姓名\n",[33,17463,17464],{"class":35,"line":4276},[33,17465,14868],{"class":59},[33,17467,17468,17470,17473],{"class":35,"line":4282},[33,17469,3653],{"class":63},[33,17471,17472],{"class":59}," m_Age;",[33,17474,17475],{"class":87}," \u002F\u002F只读  年龄\n",[33,17477,17478],{"class":35,"line":4287},[33,17479,127],{"emptyLinePlaceholder":126},[33,17481,17482,17485],{"class":35,"line":9608},[33,17483,17484],{"class":59},"    string m_Lover;",[33,17486,17487],{"class":87}," \u002F\u002F只写  情人\n",[33,17489,17490],{"class":35,"line":9632},[33,17491,5657],{"class":59},[33,17493,17494],{"class":35,"line":9637},[33,17495,127],{"emptyLinePlaceholder":126},[33,17497,17498,17500,17502],{"class":35,"line":9643},[33,17499,1828],{"class":63},[33,17501,3642],{"class":3632},[33,17503,12511],{"class":59},[33,17505,17506],{"class":35,"line":9670},[33,17507,127],{"emptyLinePlaceholder":126},[33,17509,17510],{"class":35,"line":9675},[33,17511,16969],{"class":59},[33,17513,17514],{"class":35,"line":9681},[33,17515,17516],{"class":87},"    \u002F\u002F姓名设置\n",[33,17518,17519,17522,17524,17526,17528],{"class":35,"line":9693},[33,17520,17521],{"class":59},"    p.",[33,17523,16724],{"class":3632},[33,17525,109],{"class":59},[33,17527,9576],{"class":117},[33,17529,4385],{"class":59},[33,17531,17532,17534,17536,17539,17541,17544,17547,17549,17551],{"class":35,"line":9705},[33,17533,8189],{"class":59},[33,17535,2859],{"class":63},[33,17537,17538],{"class":117}," \"姓名： \"",[33,17540,3127],{"class":63},[33,17542,17543],{"class":59}," p.",[33,17545,17546],{"class":3632},"getName",[33,17548,14708],{"class":59},[33,17550,2859],{"class":63},[33,17552,10500],{"class":59},[33,17554,17555],{"class":35,"line":9717},[33,17556,127],{"emptyLinePlaceholder":126},[33,17558,17559],{"class":35,"line":11375},[33,17560,17561],{"class":87},"    \u002F\u002F年龄设置\n",[33,17563,17564,17566,17569,17571,17573],{"class":35,"line":11400},[33,17565,17521],{"class":59},[33,17567,17568],{"class":3632},"setAge",[33,17570,109],{"class":59},[33,17572,2473],{"class":39},[33,17574,4385],{"class":59},[33,17576,17577,17579,17581,17584,17586,17588,17591,17593,17595],{"class":35,"line":11423},[33,17578,8189],{"class":59},[33,17580,2859],{"class":63},[33,17582,17583],{"class":117}," \"年龄： \"",[33,17585,3127],{"class":63},[33,17587,17543],{"class":59},[33,17589,17590],{"class":3632},"getAge",[33,17592,14708],{"class":59},[33,17594,2859],{"class":63},[33,17596,10500],{"class":59},[33,17598,17599],{"class":35,"line":11447},[33,17600,127],{"emptyLinePlaceholder":126},[33,17602,17603],{"class":35,"line":11452},[33,17604,17605],{"class":87},"    \u002F\u002F情人设置\n",[33,17607,17608,17610,17613,17615,17618],{"class":35,"line":11457},[33,17609,17521],{"class":59},[33,17611,17612],{"class":3632},"setLover",[33,17614,109],{"class":59},[33,17616,17617],{"class":117},"\"苍井\"",[33,17619,4385],{"class":59},[33,17621,17622,17625],{"class":35,"line":11462},[33,17623,17624],{"class":87},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[33,17626,17627],{"class":87},"  \u002F\u002F只写属性，不可以读取\n",[33,17629,17630],{"class":35,"line":11471},[33,17631,127],{"emptyLinePlaceholder":126},[33,17633,17634,17636,17638,17640],{"class":35,"line":11476},[33,17635,3971],{"class":3632},[33,17637,109],{"class":59},[33,17639,3976],{"class":117},[33,17641,4385],{"class":59},[33,17643,17644],{"class":35,"line":11482},[33,17645,127],{"emptyLinePlaceholder":126},[33,17647,17648,17650,17652],{"class":35,"line":11503},[33,17649,5752],{"class":63},[33,17651,829],{"class":39},[33,17653,2976],{"class":59},[33,17655,17656],{"class":35,"line":11509},[33,17657,3247],{"class":59},[633,17659,17661],{"id":17660},"_814封装案例","8.1.4封装案例",[162,17663,17664],{},[165,17665,17666,17669],{},[1968,17667,17668],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2822,17671,17672,17675],{},[165,17673,17674],{},"求出立方体的面积和体积",[165,17676,17677],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[23,17679,17681],{"className":1814,"code":17680,"language":1816,"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,17682,17683,17689,17699,17706,17710,17714,17719,17749,17753,17763,17773,17783,17787,17796,17800,17836,17840,17849,17853,17869,17873,17878,17887,17891,17898,17902,17911,17915,17922,17926,17935,17939,17946,17950,17955,17972,17976,18022,18026,18035,18039,18043,18047,18056,18060,18064,18069,18073,18079,18085,18091,18095,18099,18104,18126,18130,18184,18188,18196,18200,18205,18210,18223,18230,18246,18257,18263,18286,18292,18315,18329,18349,18355,18366,18389,18411,18416,18422,18436,18449,18454,18468,18473,18479,18484,18498,18503,18508,18522,18534,18539,18552,18557,18562,18567,18580,18585],{"__ignoreMap":28},[33,17684,17685,17687],{"class":35,"line":36},[33,17686,3618],{"class":63},[33,17688,3621],{"class":117},[33,17690,17691,17693,17695,17697],{"class":35,"line":43},[33,17692,3626],{"class":63},[33,17694,3629],{"class":63},[33,17696,3633],{"class":3632},[33,17698,2976],{"class":59},[33,17700,17701,17703],{"class":35,"line":130},[33,17702,16352],{"class":63},[33,17704,17705],{"class":3632}," Cube\n",[33,17707,17708],{"class":35,"line":146},[33,17709,3228],{"class":59},[33,17711,17712],{"class":35,"line":267},[33,17713,16374],{"class":63},[33,17715,17716],{"class":35,"line":275},[33,17717,17718],{"class":87},"    \u002F\u002F输入长宽高\n",[33,17720,17721,17723,17726,17728,17730,17733,17735,17737,17740,17742,17744,17747],{"class":35,"line":392},[33,17722,16567],{"class":63},[33,17724,17725],{"class":3632}," setLwh",[33,17727,109],{"class":59},[33,17729,1828],{"class":63},[33,17731,17732],{"class":6877}," l",[33,17734,2196],{"class":59},[33,17736,1828],{"class":63},[33,17738,17739],{"class":6877}," w",[33,17741,2196],{"class":59},[33,17743,1828],{"class":63},[33,17745,17746],{"class":6877}," h",[33,17748,157],{"class":59},[33,17750,17751],{"class":35,"line":406},[33,17752,3698],{"class":59},[33,17754,17755,17758,17760],{"class":35,"line":418},[33,17756,17757],{"class":59},"        m_L",[33,17759,64],{"class":63},[33,17761,17762],{"class":59},"l;\n",[33,17764,17765,17768,17770],{"class":35,"line":425},[33,17766,17767],{"class":59},"        m_W",[33,17769,64],{"class":63},[33,17771,17772],{"class":59},"w;\n",[33,17774,17775,17778,17780],{"class":35,"line":1147},[33,17776,17777],{"class":59},"        m_H",[33,17779,64],{"class":63},[33,17781,17782],{"class":59},"h;\n",[33,17784,17785],{"class":35,"line":1329},[33,17786,3855],{"class":59},[33,17788,17789,17791,17794],{"class":35,"line":1341},[33,17790,3653],{"class":63},[33,17792,17793],{"class":3632}," mianji",[33,17795,943],{"class":59},[33,17797,17798],{"class":35,"line":1348},[33,17799,3698],{"class":59},[33,17801,17802,17804,17806,17808,17811,17813,17816,17818,17821,17823,17826,17828,17831,17833],{"class":35,"line":1529},[33,17803,16410],{"class":63},[33,17805,16413],{"class":39},[33,17807,1540],{"class":63},[33,17809,17810],{"class":59},"(m_L",[33,17812,1540],{"class":63},[33,17814,17815],{"class":59},"m_W ",[33,17817,2298],{"class":63},[33,17819,17820],{"class":59}," m_L",[33,17822,1540],{"class":63},[33,17824,17825],{"class":59},"m_H ",[33,17827,2298],{"class":63},[33,17829,17830],{"class":59}," m_W",[33,17832,1540],{"class":63},[33,17834,17835],{"class":59},"m_H);\n",[33,17837,17838],{"class":35,"line":1546},[33,17839,3855],{"class":59},[33,17841,17842,17844,17847],{"class":35,"line":1551},[33,17843,3653],{"class":63},[33,17845,17846],{"class":3632}," tiji",[33,17848,943],{"class":59},[33,17850,17851],{"class":35,"line":1566},[33,17852,3698],{"class":59},[33,17854,17855,17857,17859,17861,17864,17866],{"class":35,"line":1578},[33,17856,16410],{"class":63},[33,17858,17820],{"class":59},[33,17860,1540],{"class":63},[33,17862,17863],{"class":59},"m_W",[33,17865,1540],{"class":63},[33,17867,17868],{"class":59},"m_H;\n",[33,17870,17871],{"class":35,"line":1583},[33,17872,3855],{"class":59},[33,17874,17875],{"class":35,"line":3369},[33,17876,17877],{"class":87},"    \u002F\u002F获取长宽高\n",[33,17879,17880,17882,17885],{"class":35,"line":3396},[33,17881,3653],{"class":63},[33,17883,17884],{"class":3632}," getLength",[33,17886,943],{"class":59},[33,17888,17889],{"class":35,"line":3401},[33,17890,3698],{"class":59},[33,17892,17893,17895],{"class":35,"line":3418},[33,17894,16410],{"class":63},[33,17896,17897],{"class":59}," m_L;\n",[33,17899,17900],{"class":35,"line":3423},[33,17901,3855],{"class":59},[33,17903,17904,17906,17909],{"class":35,"line":3428},[33,17905,3653],{"class":63},[33,17907,17908],{"class":3632}," getWidth",[33,17910,943],{"class":59},[33,17912,17913],{"class":35,"line":3433},[33,17914,3698],{"class":59},[33,17916,17917,17919],{"class":35,"line":3447},[33,17918,16410],{"class":63},[33,17920,17921],{"class":59}," m_W;\n",[33,17923,17924],{"class":35,"line":3452},[33,17925,3855],{"class":59},[33,17927,17928,17930,17933],{"class":35,"line":4243},[33,17929,3653],{"class":63},[33,17931,17932],{"class":3632}," getHeight",[33,17934,943],{"class":59},[33,17936,17937],{"class":35,"line":4257},[33,17938,3698],{"class":59},[33,17940,17941,17943],{"class":35,"line":4265},[33,17942,16410],{"class":63},[33,17944,17945],{"class":59}," m_H;\n",[33,17947,17948],{"class":35,"line":4270},[33,17949,3855],{"class":59},[33,17951,17952],{"class":35,"line":4276},[33,17953,17954],{"class":87},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[33,17956,17957,17960,17963,17965,17968,17970],{"class":35,"line":4282},[33,17958,17959],{"class":63},"    bool",[33,17961,17962],{"class":3632}," isEqual",[33,17964,109],{"class":59},[33,17966,17967],{"class":3632},"Cube",[33,17969,4515],{"class":6877},[33,17971,157],{"class":59},[33,17973,17974],{"class":35,"line":4287},[33,17975,3698],{"class":59},[33,17977,17978,17980,17983,17986,17988,17990,17993,17995,17998,18001,18003,18005,18008,18010,18012,18015,18017,18019],{"class":35,"line":9608},[33,17979,4163],{"class":63},[33,17981,17982],{"class":59}," (c.",[33,17984,17985],{"class":3632},"getLength",[33,17987,14708],{"class":59},[33,17989,573],{"class":63},[33,17991,17992],{"class":59}," m_L ",[33,17994,3384],{"class":63},[33,17996,17997],{"class":59}," c.",[33,17999,18000],{"class":3632},"getWidth",[33,18002,14708],{"class":59},[33,18004,573],{"class":63},[33,18006,18007],{"class":59}," m_W ",[33,18009,3384],{"class":63},[33,18011,17997],{"class":59},[33,18013,18014],{"class":3632},"getHeight",[33,18016,14708],{"class":59},[33,18018,573],{"class":63},[33,18020,18021],{"class":59}," m_H)\n",[33,18023,18024],{"class":35,"line":9632},[33,18025,4176],{"class":59},[33,18027,18028,18030,18033],{"class":35,"line":9637},[33,18029,17387],{"class":63},[33,18031,18032],{"class":39}," true",[33,18034,2976],{"class":59},[33,18036,18037],{"class":35,"line":9643},[33,18038,4195],{"class":59},[33,18040,18041],{"class":35,"line":9670},[33,18042,4236],{"class":63},[33,18044,18045],{"class":35,"line":9675},[33,18046,4176],{"class":59},[33,18048,18049,18051,18054],{"class":35,"line":9681},[33,18050,17387],{"class":63},[33,18052,18053],{"class":39}," false",[33,18055,2976],{"class":59},[33,18057,18058],{"class":35,"line":9693},[33,18059,4195],{"class":59},[33,18061,18062],{"class":35,"line":9705},[33,18063,3855],{"class":59},[33,18065,18066],{"class":35,"line":9717},[33,18067,18068],{"class":87},"    \u002F\u002F私有属性\n",[33,18070,18071],{"class":35,"line":11375},[33,18072,16878],{"class":63},[33,18074,18075,18077],{"class":35,"line":11400},[33,18076,3653],{"class":63},[33,18078,17897],{"class":59},[33,18080,18081,18083],{"class":35,"line":11423},[33,18082,3653],{"class":63},[33,18084,17921],{"class":59},[33,18086,18087,18089],{"class":35,"line":11447},[33,18088,3653],{"class":63},[33,18090,17945],{"class":59},[33,18092,18093],{"class":35,"line":11452},[33,18094,127],{"emptyLinePlaceholder":126},[33,18096,18097],{"class":35,"line":11457},[33,18098,5657],{"class":59},[33,18100,18101],{"class":35,"line":11462},[33,18102,18103],{"class":87},"\u002F\u002F全局函数判断两个立方体是否相等\n",[33,18105,18106,18108,18110,18112,18114,18117,18119,18121,18124],{"class":35,"line":11471},[33,18107,3037],{"class":63},[33,18109,17962],{"class":3632},[33,18111,109],{"class":59},[33,18113,17967],{"class":3632},[33,18115,18116],{"class":6877}," c1",[33,18118,2196],{"class":59},[33,18120,17967],{"class":3632},[33,18122,18123],{"class":6877}," c2",[33,18125,157],{"class":59},[33,18127,18128],{"class":35,"line":11476},[33,18129,3228],{"class":59},[33,18131,18132,18134,18137,18139,18141,18143,18146,18148,18151,18153,18155,18157,18159,18161,18163,18165,18167,18169,18171,18173,18175,18177,18179,18181],{"class":35,"line":11482},[33,18133,5752],{"class":63},[33,18135,18136],{"class":59}," (c1.",[33,18138,17985],{"class":3632},[33,18140,14708],{"class":59},[33,18142,573],{"class":63},[33,18144,18145],{"class":59}," c2.",[33,18147,17985],{"class":3632},[33,18149,18150],{"class":59},"()) ",[33,18152,3384],{"class":63},[33,18154,18136],{"class":59},[33,18156,18000],{"class":3632},[33,18158,14708],{"class":59},[33,18160,573],{"class":63},[33,18162,18145],{"class":59},[33,18164,18000],{"class":3632},[33,18166,18150],{"class":59},[33,18168,3384],{"class":63},[33,18170,18136],{"class":59},[33,18172,18014],{"class":3632},[33,18174,14708],{"class":59},[33,18176,573],{"class":63},[33,18178,18145],{"class":59},[33,18180,18014],{"class":3632},[33,18182,18183],{"class":59},"());\n",[33,18185,18186],{"class":35,"line":11503},[33,18187,3247],{"class":59},[33,18189,18190,18192,18194],{"class":35,"line":11509},[33,18191,1828],{"class":63},[33,18193,3642],{"class":3632},[33,18195,943],{"class":59},[33,18197,18198],{"class":35,"line":11523},[33,18199,3228],{"class":59},[33,18201,18202],{"class":35,"line":11529},[33,18203,18204],{"class":59},"    Cube c1;\n",[33,18206,18207],{"class":35,"line":11556},[33,18208,18209],{"class":87},"    \u002F\u002F输入立方体的长宽高\n",[33,18211,18212,18214,18216,18219,18221],{"class":35,"line":11565},[33,18213,3233],{"class":59},[33,18215,2859],{"class":63},[33,18217,18218],{"class":117},"\"请输入第一个立方体的长、宽、高：\"",[33,18220,2859],{"class":63},[33,18222,2881],{"class":59},[33,18224,18225,18227],{"class":35,"line":11571},[33,18226,3653],{"class":63},[33,18228,18229],{"class":59}," l,w,h,l1,w1,h1;\n",[33,18231,18232,18234,18236,18238,18240,18242,18244],{"class":35,"line":11579},[33,18233,3680],{"class":59},[33,18235,3112],{"class":63},[33,18237,2335],{"class":59},[33,18239,3112],{"class":63},[33,18241,2612],{"class":59},[33,18243,3112],{"class":63},[33,18245,17782],{"class":59},[33,18247,18248,18251,18254],{"class":35,"line":11584},[33,18249,18250],{"class":59},"    c1.",[33,18252,18253],{"class":3632},"setLwh",[33,18255,18256],{"class":59},"(l,w,h);\n",[33,18258,18260],{"class":35,"line":18259},66,[33,18261,18262],{"class":87},"    \u002F\u002F面积\n",[33,18264,18266,18268,18270,18273,18275,18277,18280,18282,18284],{"class":35,"line":18265},67,[33,18267,3233],{"class":59},[33,18269,2859],{"class":63},[33,18271,18272],{"class":117},"\"立方体的表面积为：\"",[33,18274,2859],{"class":63},[33,18276,16488],{"class":59},[33,18278,18279],{"class":3632},"mianji",[33,18281,4093],{"class":59},[33,18283,2859],{"class":63},[33,18285,2881],{"class":59},[33,18287,18289],{"class":35,"line":18288},68,[33,18290,18291],{"class":87},"    \u002F\u002F体积\n",[33,18293,18295,18297,18299,18302,18304,18306,18309,18311,18313],{"class":35,"line":18294},69,[33,18296,3233],{"class":59},[33,18298,2859],{"class":63},[33,18300,18301],{"class":117},"\"立方体的体积为：\"",[33,18303,2859],{"class":63},[33,18305,16488],{"class":59},[33,18307,18308],{"class":3632},"tiji",[33,18310,4093],{"class":59},[33,18312,2859],{"class":63},[33,18314,2881],{"class":59},[33,18316,18318,18320,18322,18325,18327],{"class":35,"line":18317},70,[33,18319,3233],{"class":59},[33,18321,2859],{"class":63},[33,18323,18324],{"class":117},"\"请输入第二个立方体的长、宽、高：\"",[33,18326,2859],{"class":63},[33,18328,2881],{"class":59},[33,18330,18332,18334,18336,18339,18341,18344,18346],{"class":35,"line":18331},71,[33,18333,3680],{"class":59},[33,18335,3112],{"class":63},[33,18337,18338],{"class":59},"l1",[33,18340,3112],{"class":63},[33,18342,18343],{"class":59},"w1",[33,18345,3112],{"class":63},[33,18347,18348],{"class":59},"h1;\n",[33,18350,18352],{"class":35,"line":18351},72,[33,18353,18354],{"class":59},"    Cube c2;\n",[33,18356,18358,18361,18363],{"class":35,"line":18357},73,[33,18359,18360],{"class":59},"    c2.",[33,18362,18253],{"class":3632},[33,18364,18365],{"class":59},"(l1,w1,h1);\n",[33,18367,18369,18371,18373,18376,18378,18381,18383,18385,18387],{"class":35,"line":18368},74,[33,18370,3233],{"class":59},[33,18372,2859],{"class":63},[33,18374,18375],{"class":117},"\"第二个立方体的表面积为：\"",[33,18377,2859],{"class":63},[33,18379,18380],{"class":59},"c2.",[33,18382,18279],{"class":3632},[33,18384,4093],{"class":59},[33,18386,2859],{"class":63},[33,18388,2881],{"class":59},[33,18390,18392,18394,18396,18399,18401,18403,18405,18407,18409],{"class":35,"line":18391},75,[33,18393,3233],{"class":59},[33,18395,2859],{"class":63},[33,18397,18398],{"class":117},"\"第二个立方体的体积为：\"",[33,18400,2859],{"class":63},[33,18402,18380],{"class":59},[33,18404,18308],{"class":3632},[33,18406,4093],{"class":59},[33,18408,2859],{"class":63},[33,18410,2881],{"class":59},[33,18412,18414],{"class":35,"line":18413},76,[33,18415,127],{"emptyLinePlaceholder":126},[33,18417,18419],{"class":35,"line":18418},77,[33,18420,18421],{"class":87},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[33,18423,18425,18427,18429,18432,18434],{"class":35,"line":18424},78,[33,18426,3233],{"class":59},[33,18428,2859],{"class":63},[33,18430,18431],{"class":117},"\"内部函数判断结果：\"",[33,18433,2859],{"class":63},[33,18435,2881],{"class":59},[33,18437,18439,18441,18443,18446],{"class":35,"line":18438},79,[33,18440,567],{"class":63},[33,18442,18136],{"class":59},[33,18444,18445],{"class":3632},"isEqual",[33,18447,18448],{"class":59},"(c2))\n",[33,18450,18452],{"class":35,"line":18451},80,[33,18453,3698],{"class":59},[33,18455,18457,18459,18461,18464,18466],{"class":35,"line":18456},81,[33,18458,5114],{"class":59},[33,18460,2859],{"class":63},[33,18462,18463],{"class":117},"\"两个立方体相等\"",[33,18465,2859],{"class":63},[33,18467,2881],{"class":59},[33,18469,18471],{"class":35,"line":18470},82,[33,18472,3855],{"class":59},[33,18474,18476],{"class":35,"line":18475},83,[33,18477,18478],{"class":63},"    else\n",[33,18480,18482],{"class":35,"line":18481},84,[33,18483,3698],{"class":59},[33,18485,18487,18489,18491,18494,18496],{"class":35,"line":18486},85,[33,18488,5114],{"class":59},[33,18490,2859],{"class":63},[33,18492,18493],{"class":117},"\"两个立方体不相等\"",[33,18495,2859],{"class":63},[33,18497,2881],{"class":59},[33,18499,18501],{"class":35,"line":18500},86,[33,18502,3855],{"class":59},[33,18504,18506],{"class":35,"line":18505},87,[33,18507,127],{"emptyLinePlaceholder":126},[33,18509,18511,18513,18515,18518,18520],{"class":35,"line":18510},88,[33,18512,3233],{"class":59},[33,18514,2859],{"class":63},[33,18516,18517],{"class":117},"\"全局函数判断结果：\"",[33,18519,2859],{"class":63},[33,18521,2881],{"class":59},[33,18523,18525,18527,18529,18531],{"class":35,"line":18524},89,[33,18526,567],{"class":63},[33,18528,3332],{"class":59},[33,18530,18445],{"class":3632},[33,18532,18533],{"class":59},"(c1, c2))\n",[33,18535,18537],{"class":35,"line":18536},90,[33,18538,3698],{"class":59},[33,18540,18542,18544,18546,18548,18550],{"class":35,"line":18541},91,[33,18543,5114],{"class":59},[33,18545,2859],{"class":63},[33,18547,18463],{"class":117},[33,18549,2859],{"class":63},[33,18551,2881],{"class":59},[33,18553,18555],{"class":35,"line":18554},92,[33,18556,3855],{"class":59},[33,18558,18560],{"class":35,"line":18559},93,[33,18561,18478],{"class":63},[33,18563,18565],{"class":35,"line":18564},94,[33,18566,3698],{"class":59},[33,18568,18570,18572,18574,18576,18578],{"class":35,"line":18569},95,[33,18571,5114],{"class":59},[33,18573,2859],{"class":63},[33,18575,18493],{"class":117},[33,18577,2859],{"class":63},[33,18579,2881],{"class":59},[33,18581,18583],{"class":35,"line":18582},96,[33,18584,3855],{"class":59},[33,18586,18588],{"class":35,"line":18587},97,[33,18589,3247],{"class":59},[162,18591,18592],{"start":43},[165,18593,18594],{},[1968,18595,18596],{},"练习案例2：点和圆的关系",[2822,18598,18599],{},[165,18600,18601],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[23,18603,18605],{"className":1814,"code":18604,"language":1816,"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,18606,18607,18613,18623,18630,18637,18641,18645,18650,18684,18689,18705,18719,18723,18727,18734,18741,18745,18751,18755,18759,18763,18785,18808,18813,18827,18842,18846,18850,18856,18861,18866,18870,18896,18900,18930,18958,18986,19003,19007,19020,19024,19028,19032,19045,19049,19053,19061,19065,19069,19073,19078,19082,19093,19100,19109,19119,19130,19137,19150,19161,19171,19182,19189,19203,19208,19218,19226],{"__ignoreMap":28},[33,18608,18609,18611],{"class":35,"line":36},[33,18610,3618],{"class":63},[33,18612,3621],{"class":117},[33,18614,18615,18617,18619,18621],{"class":35,"line":43},[33,18616,3626],{"class":63},[33,18618,3629],{"class":63},[33,18620,3633],{"class":3632},[33,18622,2976],{"class":59},[33,18624,18625,18627],{"class":35,"line":130},[33,18626,3618],{"class":63},[33,18628,18629],{"class":117},"\u003Ccmath>\n",[33,18631,18632,18634],{"class":35,"line":146},[33,18633,16352],{"class":63},[33,18635,18636],{"class":3632}," Point\n",[33,18638,18639],{"class":35,"line":267},[33,18640,3228],{"class":59},[33,18642,18643],{"class":35,"line":275},[33,18644,16374],{"class":63},[33,18646,18647],{"class":35,"line":392},[33,18648,18649],{"class":87},"    \u002F\u002F赋值\n",[33,18651,18652,18654,18657,18659,18661,18664,18666,18668,18671,18674,18676,18679,18681],{"class":35,"line":406},[33,18653,16567],{"class":63},[33,18655,18656],{"class":3632}," setPoint",[33,18658,109],{"class":59},[33,18660,15695],{"class":63},[33,18662,18663],{"class":6877}," x",[33,18665,14093],{"class":59},[33,18667,15695],{"class":63},[33,18669,18670],{"class":6877}," y",[33,18672,18673],{"class":59},") { m_x ",[33,18675,64],{"class":63},[33,18677,18678],{"class":59}," x; m_y ",[33,18680,64],{"class":63},[33,18682,18683],{"class":59}," y; }\n",[33,18685,18686],{"class":35,"line":418},[33,18687,18688],{"class":87},"    \u002F\u002F获取坐标\n",[33,18690,18691,18693,18696,18699,18702],{"class":35,"line":425},[33,18692,16396],{"class":63},[33,18694,18695],{"class":3632}," getX",[33,18697,18698],{"class":59},"() { ",[33,18700,18701],{"class":63},"return",[33,18703,18704],{"class":59}," m_x; }\n",[33,18706,18707,18709,18712,18714,18716],{"class":35,"line":1147},[33,18708,16396],{"class":63},[33,18710,18711],{"class":3632}," getY",[33,18713,18698],{"class":59},[33,18715,18701],{"class":63},[33,18717,18718],{"class":59}," m_y; }\n",[33,18720,18721],{"class":35,"line":1329},[33,18722,127],{"emptyLinePlaceholder":126},[33,18724,18725],{"class":35,"line":1341},[33,18726,16878],{"class":63},[33,18728,18729,18731],{"class":35,"line":1348},[33,18730,16396],{"class":63},[33,18732,18733],{"class":59}," m_x;\n",[33,18735,18736,18738],{"class":35,"line":1529},[33,18737,16396],{"class":63},[33,18739,18740],{"class":59}," m_y;\n",[33,18742,18743],{"class":35,"line":1546},[33,18744,5657],{"class":59},[33,18746,18747,18749],{"class":35,"line":1551},[33,18748,16352],{"class":63},[33,18750,16355],{"class":3632},[33,18752,18753],{"class":35,"line":1566},[33,18754,3228],{"class":59},[33,18756,18757],{"class":35,"line":1578},[33,18758,16374],{"class":63},[33,18760,18761],{"class":35,"line":1583},[33,18762,18649],{"class":87},[33,18764,18765,18767,18770,18772,18774,18777,18780,18782],{"class":35,"line":3369},[33,18766,16567],{"class":63},[33,18768,18769],{"class":3632}," setRadius",[33,18771,109],{"class":59},[33,18773,15695],{"class":63},[33,18775,18776],{"class":6877}," r",[33,18778,18779],{"class":59},") { m_r ",[33,18781,64],{"class":63},[33,18783,18784],{"class":59}," r; }\n",[33,18786,18787,18789,18792,18794,18797,18800,18803,18805],{"class":35,"line":3396},[33,18788,16567],{"class":63},[33,18790,18791],{"class":3632}," setCenter",[33,18793,109],{"class":59},[33,18795,18796],{"class":3632},"Point",[33,18798,18799],{"class":6877}," center",[33,18801,18802],{"class":59},") { m_center ",[33,18804,64],{"class":63},[33,18806,18807],{"class":59}," center; }\n",[33,18809,18810],{"class":35,"line":3401},[33,18811,18812],{"class":87},"    \u002F\u002F获取属性\n",[33,18814,18815,18817,18820,18822,18824],{"class":35,"line":3418},[33,18816,16396],{"class":63},[33,18818,18819],{"class":3632}," getRadius",[33,18821,18698],{"class":59},[33,18823,18701],{"class":63},[33,18825,18826],{"class":59}," m_r; }\n",[33,18828,18829,18832,18835,18837,18839],{"class":35,"line":3423},[33,18830,18831],{"class":3632},"    Point",[33,18833,18834],{"class":3632}," getCenter",[33,18836,18698],{"class":59},[33,18838,18701],{"class":63},[33,18840,18841],{"class":59}," m_center; }\n",[33,18843,18844],{"class":35,"line":3428},[33,18845,127],{"emptyLinePlaceholder":126},[33,18847,18848],{"class":35,"line":3433},[33,18849,16878],{"class":63},[33,18851,18852,18854],{"class":35,"line":3447},[33,18853,16396],{"class":63},[33,18855,16386],{"class":59},[33,18857,18858],{"class":35,"line":3452},[33,18859,18860],{"class":87},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[33,18862,18863],{"class":35,"line":4243},[33,18864,18865],{"class":59},"    Point m_center;\n",[33,18867,18868],{"class":35,"line":4257},[33,18869,5657],{"class":59},[33,18871,18872,18874,18877,18879,18882,18884,18886,18888,18890,18892,18894],{"class":35,"line":4265},[33,18873,7025],{"class":63},[33,18875,18876],{"class":3632}," isInCircle",[33,18878,109],{"class":59},[33,18880,18881],{"class":3632},"Circle",[33,18883,12242],{"class":63},[33,18885,2106],{"class":6877},[33,18887,2196],{"class":59},[33,18889,18796],{"class":3632},[33,18891,12242],{"class":63},[33,18893,19],{"class":6877},[33,18895,157],{"class":59},[33,18897,18898],{"class":35,"line":4270},[33,18899,3228],{"class":59},[33,18901,18902,18904,18907,18909,18911,18914,18917,18920,18922,18924,18926,18928],{"class":35,"line":4276},[33,18903,16396],{"class":63},[33,18905,18906],{"class":59}," dx ",[33,18908,64],{"class":63},[33,18910,17997],{"class":59},[33,18912,18913],{"class":3632},"getCenter",[33,18915,18916],{"class":59},"().",[33,18918,18919],{"class":3632},"getX",[33,18921,14708],{"class":59},[33,18923,2349],{"class":63},[33,18925,17543],{"class":59},[33,18927,18919],{"class":3632},[33,18929,7297],{"class":59},[33,18931,18932,18934,18937,18939,18941,18943,18945,18948,18950,18952,18954,18956],{"class":35,"line":4282},[33,18933,16396],{"class":63},[33,18935,18936],{"class":59}," dy ",[33,18938,64],{"class":63},[33,18940,17997],{"class":59},[33,18942,18913],{"class":3632},[33,18944,18916],{"class":59},[33,18946,18947],{"class":3632},"getY",[33,18949,14708],{"class":59},[33,18951,2349],{"class":63},[33,18953,17543],{"class":59},[33,18955,18947],{"class":3632},[33,18957,7297],{"class":59},[33,18959,18960,18962,18965,18967,18970,18973,18975,18977,18979,18981,18983],{"class":35,"line":4287},[33,18961,16396],{"class":63},[33,18963,18964],{"class":59}," distance ",[33,18966,64],{"class":63},[33,18968,18969],{"class":3632}," sqrt",[33,18971,18972],{"class":59},"(dx ",[33,18974,1540],{"class":63},[33,18976,18906],{"class":59},[33,18978,2298],{"class":63},[33,18980,18936],{"class":59},[33,18982,1540],{"class":63},[33,18984,18985],{"class":59}," dy);\n",[33,18987,18988,18990,18993,18995,18997,19000],{"class":35,"line":9608},[33,18989,567],{"class":63},[33,18991,18992],{"class":59}," (distance ",[33,18994,2726],{"class":63},[33,18996,17997],{"class":59},[33,18998,18999],{"class":3632},"getRadius",[33,19001,19002],{"class":59},"())\n",[33,19004,19005],{"class":35,"line":9632},[33,19006,3698],{"class":59},[33,19008,19009,19011,19013,19016,19018],{"class":35,"line":9637},[33,19010,11328],{"class":59},[33,19012,2859],{"class":63},[33,19014,19015],{"class":117}," \"点在圆内\"",[33,19017,3127],{"class":63},[33,19019,10500],{"class":59},[33,19021,19022],{"class":35,"line":9643},[33,19023,3855],{"class":59},[33,19025,19026],{"class":35,"line":9670},[33,19027,18478],{"class":63},[33,19029,19030],{"class":35,"line":9675},[33,19031,3698],{"class":59},[33,19033,19034,19036,19038,19041,19043],{"class":35,"line":9681},[33,19035,11328],{"class":59},[33,19037,2859],{"class":63},[33,19039,19040],{"class":117}," \"点在圆外\"",[33,19042,3127],{"class":63},[33,19044,10500],{"class":59},[33,19046,19047],{"class":35,"line":9693},[33,19048,3855],{"class":59},[33,19050,19051],{"class":35,"line":9705},[33,19052,3247],{"class":59},[33,19054,19055,19057,19059],{"class":35,"line":9717},[33,19056,1828],{"class":63},[33,19058,3642],{"class":3632},[33,19060,943],{"class":59},[33,19062,19063],{"class":35,"line":11375},[33,19064,3228],{"class":59},[33,19066,19067],{"class":35,"line":11400},[33,19068,16711],{"class":87},[33,19070,19071],{"class":35,"line":11423},[33,19072,16458],{"class":59},[33,19074,19075],{"class":35,"line":11447},[33,19076,19077],{"class":59},"    Point p1;\n",[33,19079,19080],{"class":35,"line":11452},[33,19081,18649],{"class":87},[33,19083,19084,19086,19088,19091],{"class":35,"line":11457},[33,19085,3233],{"class":59},[33,19087,2859],{"class":63},[33,19089,19090],{"class":117},"\"请输入圆的半径：\"",[33,19092,2976],{"class":59},[33,19094,19095,19097],{"class":35,"line":11462},[33,19096,16396],{"class":63},[33,19098,19099],{"class":59}," r;\n",[33,19101,19102,19104,19106],{"class":35,"line":11471},[33,19103,3680],{"class":59},[33,19105,3112],{"class":63},[33,19107,19108],{"class":59},"r;\n",[33,19110,19111,19113,19116],{"class":35,"line":11476},[33,19112,18250],{"class":59},[33,19114,19115],{"class":3632},"setRadius",[33,19117,19118],{"class":59},"(r);\n",[33,19120,19121,19123,19125,19128],{"class":35,"line":11482},[33,19122,3233],{"class":59},[33,19124,2859],{"class":63},[33,19126,19127],{"class":117},"\"请输入圆心坐标：\"",[33,19129,2976],{"class":59},[33,19131,19132,19134],{"class":35,"line":11503},[33,19133,16396],{"class":63},[33,19135,19136],{"class":59}," x, y;\n",[33,19138,19139,19141,19143,19145,19147],{"class":35,"line":11509},[33,19140,3680],{"class":59},[33,19142,3112],{"class":63},[33,19144,2637],{"class":59},[33,19146,3112],{"class":63},[33,19148,19149],{"class":59},"y;\n",[33,19151,19152,19155,19158],{"class":35,"line":11523},[33,19153,19154],{"class":59},"    p1.",[33,19156,19157],{"class":3632},"setPoint",[33,19159,19160],{"class":59},"(x, y);\n",[33,19162,19163,19165,19168],{"class":35,"line":11529},[33,19164,18250],{"class":59},[33,19166,19167],{"class":3632},"setCenter",[33,19169,19170],{"class":59},"(p1);\n",[33,19172,19173,19175,19177,19180],{"class":35,"line":11556},[33,19174,3233],{"class":59},[33,19176,2859],{"class":63},[33,19178,19179],{"class":117},"\"请输入测试点坐标：\"",[33,19181,2976],{"class":59},[33,19183,19184,19186],{"class":35,"line":11565},[33,19185,16396],{"class":63},[33,19187,19188],{"class":59}," x1, y1;\n",[33,19190,19191,19193,19195,19198,19200],{"class":35,"line":11571},[33,19192,3680],{"class":59},[33,19194,3112],{"class":63},[33,19196,19197],{"class":59},"x1",[33,19199,3112],{"class":63},[33,19201,19202],{"class":59},"y1;\n",[33,19204,19205],{"class":35,"line":11579},[33,19206,19207],{"class":59},"    Point p2;\n",[33,19209,19210,19213,19215],{"class":35,"line":11584},[33,19211,19212],{"class":59},"    p2.",[33,19214,19157],{"class":3632},[33,19216,19217],{"class":59},"(x1, y1);\n",[33,19219,19220,19223],{"class":35,"line":18259},[33,19221,19222],{"class":3632},"    isInCircle",[33,19224,19225],{"class":59},"(c1, p2);\n",[33,19227,19228],{"class":35,"line":18265},[33,19229,3247],{"class":59},[19,19231,19232],{},"在类中可以让另一个类作为本来的成员",[19,19234,19235],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19237,19238],{},"创建point.h",[23,19240,19242],{"className":1814,"code":19241,"language":1816,"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,19243,19244,19255,19261,19271,19277,19281,19286,19290,19294,19314,19318,19326,19334,19338,19342,19348,19354],{"__ignoreMap":28},[33,19245,19246,19249,19252],{"class":35,"line":36},[33,19247,19248],{"class":63},"#pragma",[33,19250,19251],{"class":3632}," once",[33,19253,19254],{"class":87}," \u002F\u002F防止头文件重复包含\n",[33,19256,19257,19259],{"class":35,"line":43},[33,19258,3618],{"class":63},[33,19260,3621],{"class":117},[33,19262,19263,19265,19267,19269],{"class":35,"line":130},[33,19264,3626],{"class":63},[33,19266,3629],{"class":63},[33,19268,3633],{"class":3632},[33,19270,2976],{"class":59},[33,19272,19273,19275],{"class":35,"line":146},[33,19274,16352],{"class":63},[33,19276,18636],{"class":3632},[33,19278,19279],{"class":35,"line":267},[33,19280,3228],{"class":59},[33,19282,19283],{"class":35,"line":275},[33,19284,19285],{"class":87},"\u002F\u002F做好声明与变量定义就可以\n",[33,19287,19288],{"class":35,"line":392},[33,19289,16374],{"class":63},[33,19291,19292],{"class":35,"line":406},[33,19293,18649],{"class":87},[33,19295,19296,19298,19300,19302,19304,19306,19308,19310,19312],{"class":35,"line":418},[33,19297,16567],{"class":63},[33,19299,18656],{"class":3632},[33,19301,109],{"class":59},[33,19303,15695],{"class":63},[33,19305,18663],{"class":6877},[33,19307,14093],{"class":59},[33,19309,15695],{"class":63},[33,19311,18670],{"class":6877},[33,19313,4385],{"class":59},[33,19315,19316],{"class":35,"line":425},[33,19317,18688],{"class":87},[33,19319,19320,19322,19324],{"class":35,"line":1147},[33,19321,16396],{"class":63},[33,19323,18695],{"class":3632},[33,19325,7297],{"class":59},[33,19327,19328,19330,19332],{"class":35,"line":1329},[33,19329,16396],{"class":63},[33,19331,18711],{"class":3632},[33,19333,7297],{"class":59},[33,19335,19336],{"class":35,"line":1341},[33,19337,127],{"emptyLinePlaceholder":126},[33,19339,19340],{"class":35,"line":1348},[33,19341,16878],{"class":63},[33,19343,19344,19346],{"class":35,"line":1529},[33,19345,16396],{"class":63},[33,19347,18733],{"class":59},[33,19349,19350,19352],{"class":35,"line":1546},[33,19351,16396],{"class":63},[33,19353,18740],{"class":59},[33,19355,19356],{"class":35,"line":1551},[33,19357,5657],{"class":59},[19,19359,19360],{},"创建point.cpp",[23,19362,19364],{"className":1814,"code":19363,"language":1816,"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,19365,19366,19373,19378,19412,19416,19432],{"__ignoreMap":28},[33,19367,19368,19370],{"class":35,"line":36},[33,19369,3618],{"class":63},[33,19371,19372],{"class":117},"\u003Cpoint.h>\n",[33,19374,19375],{"class":35,"line":43},[33,19376,19377],{"class":87},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[33,19379,19380,19382,19385,19388,19390,19392,19394,19396,19398,19400,19402,19404,19406,19408,19410],{"class":35,"line":130},[33,19381,16567],{"class":63},[33,19383,19384],{"class":3632}," Point",[33,19386,19387],{"class":59},"::",[33,19389,19157],{"class":3632},[33,19391,109],{"class":59},[33,19393,15695],{"class":63},[33,19395,18663],{"class":6877},[33,19397,14093],{"class":59},[33,19399,15695],{"class":63},[33,19401,18670],{"class":6877},[33,19403,18673],{"class":59},[33,19405,64],{"class":63},[33,19407,18678],{"class":59},[33,19409,64],{"class":63},[33,19411,18683],{"class":59},[33,19413,19414],{"class":35,"line":146},[33,19415,18688],{"class":87},[33,19417,19418,19420,19422,19424,19426,19428,19430],{"class":35,"line":267},[33,19419,16396],{"class":63},[33,19421,19384],{"class":3632},[33,19423,19387],{"class":59},[33,19425,18919],{"class":3632},[33,19427,18698],{"class":59},[33,19429,18701],{"class":63},[33,19431,18704],{"class":59},[33,19433,19434,19436,19438,19440,19442,19444,19446],{"class":35,"line":275},[33,19435,16396],{"class":63},[33,19437,19384],{"class":3632},[33,19439,19387],{"class":59},[33,19441,18947],{"class":3632},[33,19443,18698],{"class":59},[33,19445,18701],{"class":63},[33,19447,18718],{"class":59},[19,19449,19450],{},"创建circle.h",[23,19452,19454],{"className":1814,"code":19453,"language":1816,"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,19455,19456,19463,19469,19479,19485,19491,19495,19499,19503,19517,19531,19535,19543,19551,19555,19559,19565,19569,19573],{"__ignoreMap":28},[33,19457,19458,19460],{"class":35,"line":36},[33,19459,19248],{"class":63},[33,19461,19462],{"class":3632}," once\n",[33,19464,19465,19467],{"class":35,"line":43},[33,19466,3618],{"class":63},[33,19468,3621],{"class":117},[33,19470,19471,19473,19475,19477],{"class":35,"line":130},[33,19472,3626],{"class":63},[33,19474,3629],{"class":63},[33,19476,3633],{"class":3632},[33,19478,2976],{"class":59},[33,19480,19481,19483],{"class":35,"line":146},[33,19482,3618],{"class":63},[33,19484,19372],{"class":117},[33,19486,19487,19489],{"class":35,"line":267},[33,19488,16352],{"class":63},[33,19490,16355],{"class":3632},[33,19492,19493],{"class":35,"line":275},[33,19494,3228],{"class":59},[33,19496,19497],{"class":35,"line":392},[33,19498,16374],{"class":63},[33,19500,19501],{"class":35,"line":406},[33,19502,18649],{"class":87},[33,19504,19505,19507,19509,19511,19513,19515],{"class":35,"line":418},[33,19506,16567],{"class":63},[33,19508,18769],{"class":3632},[33,19510,109],{"class":59},[33,19512,15695],{"class":63},[33,19514,18776],{"class":6877},[33,19516,4385],{"class":59},[33,19518,19519,19521,19523,19525,19527,19529],{"class":35,"line":425},[33,19520,16567],{"class":63},[33,19522,18791],{"class":3632},[33,19524,109],{"class":59},[33,19526,18796],{"class":3632},[33,19528,18799],{"class":6877},[33,19530,4385],{"class":59},[33,19532,19533],{"class":35,"line":1147},[33,19534,18812],{"class":87},[33,19536,19537,19539,19541],{"class":35,"line":1329},[33,19538,16396],{"class":63},[33,19540,18819],{"class":3632},[33,19542,7297],{"class":59},[33,19544,19545,19547,19549],{"class":35,"line":1341},[33,19546,18831],{"class":3632},[33,19548,18834],{"class":3632},[33,19550,7297],{"class":59},[33,19552,19553],{"class":35,"line":1348},[33,19554,127],{"emptyLinePlaceholder":126},[33,19556,19557],{"class":35,"line":1529},[33,19558,16878],{"class":63},[33,19560,19561,19563],{"class":35,"line":1546},[33,19562,16396],{"class":63},[33,19564,16386],{"class":59},[33,19566,19567],{"class":35,"line":1551},[33,19568,18860],{"class":87},[33,19570,19571],{"class":35,"line":1566},[33,19572,18865],{"class":59},[33,19574,19575],{"class":35,"line":1578},[33,19576,5657],{"class":59},[19,19578,19579],{},"创建circle.cpp",[23,19581,19583],{"className":1814,"code":19582,"language":1816,"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,19584,19585,19592,19615,19637,19642,19658],{"__ignoreMap":28},[33,19586,19587,19589],{"class":35,"line":36},[33,19588,3618],{"class":63},[33,19590,19591],{"class":117},"\u003Ccircle.h>\n",[33,19593,19594,19596,19599,19601,19603,19605,19607,19609,19611,19613],{"class":35,"line":43},[33,19595,7025],{"class":63},[33,19597,19598],{"class":3632}," Circle",[33,19600,19387],{"class":59},[33,19602,19115],{"class":3632},[33,19604,109],{"class":59},[33,19606,15695],{"class":63},[33,19608,18776],{"class":6877},[33,19610,18779],{"class":59},[33,19612,64],{"class":63},[33,19614,18784],{"class":59},[33,19616,19617,19619,19621,19623,19625,19627,19629,19631,19633,19635],{"class":35,"line":130},[33,19618,7025],{"class":63},[33,19620,19598],{"class":3632},[33,19622,19387],{"class":59},[33,19624,19167],{"class":3632},[33,19626,109],{"class":59},[33,19628,18796],{"class":3632},[33,19630,18799],{"class":6877},[33,19632,18802],{"class":59},[33,19634,64],{"class":63},[33,19636,18807],{"class":59},[33,19638,19639],{"class":35,"line":146},[33,19640,19641],{"class":87},"\u002F\u002F获取属性\n",[33,19643,19644,19646,19648,19650,19652,19654,19656],{"class":35,"line":267},[33,19645,15695],{"class":63},[33,19647,19598],{"class":3632},[33,19649,19387],{"class":59},[33,19651,18999],{"class":3632},[33,19653,18698],{"class":59},[33,19655,18701],{"class":63},[33,19657,18826],{"class":59},[33,19659,19660,19662,19664,19666,19668,19670,19672],{"class":35,"line":275},[33,19661,18796],{"class":3632},[33,19663,19598],{"class":3632},[33,19665,19387],{"class":59},[33,19667,18913],{"class":3632},[33,19669,18698],{"class":59},[33,19671,18701],{"class":63},[33,19673,18841],{"class":59},[19,19675,19676],{},"使用封装的类",[23,19678,19680],{"className":1814,"code":19679,"language":1816,"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,19681,19682,19688,19698,19704,19710,19734,19738,19764,19790,19814,19828,19832,19844,19848,19852,19856,19868,19872,19876,19884,19888,19892,19896,19900,19904,19914,19920,19928,19936,19946,19952,19964,19972,19980,19990,19996,20008,20012,20020,20026],{"__ignoreMap":28},[33,19683,19684,19686],{"class":35,"line":36},[33,19685,3618],{"class":63},[33,19687,3621],{"class":117},[33,19689,19690,19692,19694,19696],{"class":35,"line":43},[33,19691,3626],{"class":63},[33,19693,3629],{"class":63},[33,19695,3633],{"class":3632},[33,19697,2976],{"class":59},[33,19699,19700,19702],{"class":35,"line":130},[33,19701,3618],{"class":63},[33,19703,19591],{"class":117},[33,19705,19706,19708],{"class":35,"line":146},[33,19707,3618],{"class":63},[33,19709,19372],{"class":117},[33,19711,19712,19714,19716,19718,19720,19722,19724,19726,19728,19730,19732],{"class":35,"line":267},[33,19713,7025],{"class":63},[33,19715,18876],{"class":3632},[33,19717,109],{"class":59},[33,19719,18881],{"class":3632},[33,19721,12242],{"class":63},[33,19723,2106],{"class":6877},[33,19725,2196],{"class":59},[33,19727,18796],{"class":3632},[33,19729,12242],{"class":63},[33,19731,19],{"class":6877},[33,19733,157],{"class":59},[33,19735,19736],{"class":35,"line":275},[33,19737,3228],{"class":59},[33,19739,19740,19742,19744,19746,19748,19750,19752,19754,19756,19758,19760,19762],{"class":35,"line":392},[33,19741,16396],{"class":63},[33,19743,18906],{"class":59},[33,19745,64],{"class":63},[33,19747,17997],{"class":59},[33,19749,18913],{"class":3632},[33,19751,18916],{"class":59},[33,19753,18919],{"class":3632},[33,19755,14708],{"class":59},[33,19757,2349],{"class":63},[33,19759,17543],{"class":59},[33,19761,18919],{"class":3632},[33,19763,7297],{"class":59},[33,19765,19766,19768,19770,19772,19774,19776,19778,19780,19782,19784,19786,19788],{"class":35,"line":406},[33,19767,16396],{"class":63},[33,19769,18936],{"class":59},[33,19771,64],{"class":63},[33,19773,17997],{"class":59},[33,19775,18913],{"class":3632},[33,19777,18916],{"class":59},[33,19779,18947],{"class":3632},[33,19781,14708],{"class":59},[33,19783,2349],{"class":63},[33,19785,17543],{"class":59},[33,19787,18947],{"class":3632},[33,19789,7297],{"class":59},[33,19791,19792,19794,19796,19798,19800,19802,19804,19806,19808,19810,19812],{"class":35,"line":418},[33,19793,16396],{"class":63},[33,19795,18964],{"class":59},[33,19797,64],{"class":63},[33,19799,18969],{"class":3632},[33,19801,18972],{"class":59},[33,19803,1540],{"class":63},[33,19805,18906],{"class":59},[33,19807,2298],{"class":63},[33,19809,18936],{"class":59},[33,19811,1540],{"class":63},[33,19813,18985],{"class":59},[33,19815,19816,19818,19820,19822,19824,19826],{"class":35,"line":425},[33,19817,567],{"class":63},[33,19819,18992],{"class":59},[33,19821,2726],{"class":63},[33,19823,17997],{"class":59},[33,19825,18999],{"class":3632},[33,19827,19002],{"class":59},[33,19829,19830],{"class":35,"line":1147},[33,19831,3698],{"class":59},[33,19833,19834,19836,19838,19840,19842],{"class":35,"line":1329},[33,19835,11328],{"class":59},[33,19837,2859],{"class":63},[33,19839,19015],{"class":117},[33,19841,3127],{"class":63},[33,19843,10500],{"class":59},[33,19845,19846],{"class":35,"line":1341},[33,19847,3855],{"class":59},[33,19849,19850],{"class":35,"line":1348},[33,19851,18478],{"class":63},[33,19853,19854],{"class":35,"line":1529},[33,19855,3698],{"class":59},[33,19857,19858,19860,19862,19864,19866],{"class":35,"line":1546},[33,19859,11328],{"class":59},[33,19861,2859],{"class":63},[33,19863,19040],{"class":117},[33,19865,3127],{"class":63},[33,19867,10500],{"class":59},[33,19869,19870],{"class":35,"line":1551},[33,19871,3855],{"class":59},[33,19873,19874],{"class":35,"line":1566},[33,19875,3247],{"class":59},[33,19877,19878,19880,19882],{"class":35,"line":1578},[33,19879,1828],{"class":63},[33,19881,3642],{"class":3632},[33,19883,943],{"class":59},[33,19885,19886],{"class":35,"line":1583},[33,19887,3228],{"class":59},[33,19889,19890],{"class":35,"line":3369},[33,19891,16711],{"class":87},[33,19893,19894],{"class":35,"line":3396},[33,19895,16458],{"class":59},[33,19897,19898],{"class":35,"line":3401},[33,19899,19077],{"class":59},[33,19901,19902],{"class":35,"line":3418},[33,19903,18649],{"class":87},[33,19905,19906,19908,19910,19912],{"class":35,"line":3423},[33,19907,3233],{"class":59},[33,19909,2859],{"class":63},[33,19911,19090],{"class":117},[33,19913,2976],{"class":59},[33,19915,19916,19918],{"class":35,"line":3428},[33,19917,16396],{"class":63},[33,19919,19099],{"class":59},[33,19921,19922,19924,19926],{"class":35,"line":3433},[33,19923,3680],{"class":59},[33,19925,3112],{"class":63},[33,19927,19108],{"class":59},[33,19929,19930,19932,19934],{"class":35,"line":3447},[33,19931,18250],{"class":59},[33,19933,19115],{"class":3632},[33,19935,19118],{"class":59},[33,19937,19938,19940,19942,19944],{"class":35,"line":3452},[33,19939,3233],{"class":59},[33,19941,2859],{"class":63},[33,19943,19127],{"class":117},[33,19945,2976],{"class":59},[33,19947,19948,19950],{"class":35,"line":4243},[33,19949,16396],{"class":63},[33,19951,19136],{"class":59},[33,19953,19954,19956,19958,19960,19962],{"class":35,"line":4257},[33,19955,3680],{"class":59},[33,19957,3112],{"class":63},[33,19959,2637],{"class":59},[33,19961,3112],{"class":63},[33,19963,19149],{"class":59},[33,19965,19966,19968,19970],{"class":35,"line":4265},[33,19967,19154],{"class":59},[33,19969,19157],{"class":3632},[33,19971,19160],{"class":59},[33,19973,19974,19976,19978],{"class":35,"line":4270},[33,19975,18250],{"class":59},[33,19977,19167],{"class":3632},[33,19979,19170],{"class":59},[33,19981,19982,19984,19986,19988],{"class":35,"line":4276},[33,19983,3233],{"class":59},[33,19985,2859],{"class":63},[33,19987,19179],{"class":117},[33,19989,2976],{"class":59},[33,19991,19992,19994],{"class":35,"line":4282},[33,19993,16396],{"class":63},[33,19995,19188],{"class":59},[33,19997,19998,20000,20002,20004,20006],{"class":35,"line":4287},[33,19999,3680],{"class":59},[33,20001,3112],{"class":63},[33,20003,19197],{"class":59},[33,20005,3112],{"class":63},[33,20007,19202],{"class":59},[33,20009,20010],{"class":35,"line":9608},[33,20011,19207],{"class":59},[33,20013,20014,20016,20018],{"class":35,"line":9632},[33,20015,19212],{"class":59},[33,20017,19157],{"class":3632},[33,20019,19217],{"class":59},[33,20021,20022,20024],{"class":35,"line":9637},[33,20023,19222],{"class":3632},[33,20025,19225],{"class":59},[33,20027,20028],{"class":35,"line":9643},[33,20029,3247],{"class":59},[14,20031,20033],{"id":20032},"_82对象的初始化清理","8.2对象的初始化清理",[2822,20035,20036,20039],{},[165,20037,20038],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[165,20040,20041],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[633,20043,20045],{"id":20044},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20047,20048,20049,20052],{},"对象的",[1968,20050,20051],{},"初始化和清理","也是两个非常重要的安全问题",[19,20054,20055],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20057,20058],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20060,20061,20062,20065,20066,20069],{},"c++利用了",[1968,20063,20064],{},"构造函数","和",[1968,20067,20068],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20071,20072,20073],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[1968,20074,20075],{},"我们不提供构造和析构，编译器会提供",[19,20077,20078],{},[1968,20079,20080],{},"编译器提供的构造函数和析构函数是空实现。",[2822,20082,20083,20086],{},[165,20084,20085],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[165,20087,20088,20089,20092],{},"析构函数：主要作用在于对象",[1968,20090,20091],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20094,20095,20098],{},[1968,20096,20097],{},"构造函数语法：",[30,20099,20100],{},"类名(){}",[162,20102,20103,20106,20109,20112,20115],{},[165,20104,20105],{},"构造函数，没有返回值也不写void",[165,20107,20108],{},"函数名称与类名相同",[165,20110,20111],{},"构造函数可以有参数，因此可以发生重载",[165,20113,20114],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[165,20116,20117,20118,2247],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[30,20119,20120],{},"Person(){}",[19,20122,20123,15453,20126],{},[1968,20124,20125],{},"析构函数语法：",[30,20127,20128],{},"~类名(){}",[162,20130,20131,20134,20137,20143],{},[165,20132,20133],{},"析构函数，没有返回值也不写void",[165,20135,20136],{},"函数名称与类名相同,在名称前加上符号  ~",[165,20138,20139,20140],{},"析构函数不可以有参数，因此",[1968,20141,20142],{},"不可以发生重载",[165,20144,20145],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[23,20147,20149],{"className":1814,"code":20148,"language":1816,"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,20150,20151,20157,20161,20165,20170,20177,20181,20194,20198,20203,20210,20214,20227,20231,20235,20239,20243,20251,20255,20263,20267,20271,20279,20283,20288,20292,20299,20303,20316,20320,20328],{"__ignoreMap":28},[33,20152,20153,20155],{"class":35,"line":36},[33,20154,16352],{"class":63},[33,20156,16827],{"class":3632},[33,20158,20159],{"class":35,"line":43},[33,20160,3228],{"class":59},[33,20162,20163],{"class":35,"line":130},[33,20164,16374],{"class":63},[33,20166,20167],{"class":35,"line":146},[33,20168,20169],{"class":87},"    \u002F\u002F构造函数\n",[33,20171,20172,20175],{"class":35,"line":267},[33,20173,20174],{"class":3632},"    Person",[33,20176,943],{"class":59},[33,20178,20179],{"class":35,"line":275},[33,20180,3698],{"class":59},[33,20182,20183,20185,20187,20190,20192],{"class":35,"line":392},[33,20184,11328],{"class":59},[33,20186,2859],{"class":63},[33,20188,20189],{"class":117}," \"Person的构造函数调用\"",[33,20191,3127],{"class":63},[33,20193,10500],{"class":59},[33,20195,20196],{"class":35,"line":406},[33,20197,3855],{"class":59},[33,20199,20200],{"class":35,"line":418},[33,20201,20202],{"class":87},"    \u002F\u002F析构函数\n",[33,20204,20205,20208],{"class":35,"line":425},[33,20206,20207],{"class":3632},"    ~Person",[33,20209,943],{"class":59},[33,20211,20212],{"class":35,"line":1147},[33,20213,3698],{"class":59},[33,20215,20216,20218,20220,20223,20225],{"class":35,"line":1329},[33,20217,11328],{"class":59},[33,20219,2859],{"class":63},[33,20221,20222],{"class":117}," \"Person的析构函数调用\"",[33,20224,3127],{"class":63},[33,20226,10500],{"class":59},[33,20228,20229],{"class":35,"line":1341},[33,20230,3855],{"class":59},[33,20232,20233],{"class":35,"line":1348},[33,20234,127],{"emptyLinePlaceholder":126},[33,20236,20237],{"class":35,"line":1529},[33,20238,5657],{"class":59},[33,20240,20241],{"class":35,"line":1546},[33,20242,127],{"emptyLinePlaceholder":126},[33,20244,20245,20247,20249],{"class":35,"line":1551},[33,20246,7025],{"class":63},[33,20248,7249],{"class":3632},[33,20250,943],{"class":59},[33,20252,20253],{"class":35,"line":1566},[33,20254,3228],{"class":59},[33,20256,20257,20260],{"class":35,"line":1578},[33,20258,20259],{"class":59},"    Person p;",[33,20261,20262],{"class":87},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[33,20264,20265],{"class":35,"line":1583},[33,20266,3247],{"class":59},[33,20268,20269],{"class":35,"line":3369},[33,20270,127],{"emptyLinePlaceholder":126},[33,20272,20273,20275,20277],{"class":35,"line":3396},[33,20274,1828],{"class":63},[33,20276,3642],{"class":3632},[33,20278,12511],{"class":59},[33,20280,20281],{"class":35,"line":3401},[33,20282,14868],{"class":59},[33,20284,20285],{"class":35,"line":3418},[33,20286,20287],{"class":87},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[33,20289,20290],{"class":35,"line":3423},[33,20291,127],{"emptyLinePlaceholder":126},[33,20293,20294,20296],{"class":35,"line":3428},[33,20295,20259],{"class":59},[33,20297,20298],{"class":87},"\u002F\u002F只有构造函数\n",[33,20300,20301],{"class":35,"line":3433},[33,20302,127],{"emptyLinePlaceholder":126},[33,20304,20305,20307,20309,20311,20313],{"class":35,"line":3447},[33,20306,3971],{"class":3632},[33,20308,109],{"class":59},[33,20310,3976],{"class":117},[33,20312,7626],{"class":59},[33,20314,20315],{"class":87},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[33,20317,20318],{"class":35,"line":3452},[33,20319,127],{"emptyLinePlaceholder":126},[33,20321,20322,20324,20326],{"class":35,"line":4243},[33,20323,5752],{"class":63},[33,20325,829],{"class":39},[33,20327,2976],{"class":59},[33,20329,20330],{"class":35,"line":4257},[33,20331,3247],{"class":59},[19,20333,20334],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[633,20336,20338],{"id":20337},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20340,20341],{},"两种分类方式：",[19,20343,20344],{},"​\t按参数分为： 有参构造和无参构造",[19,20346,20347],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20349,20350],{},"三种调用方式：",[19,20352,20353],{},"​\t括号法",[19,20355,20356],{},"​\t显示法",[19,20358,20359],{},"​\t隐式转换法",[23,20361,20363],{"className":1814,"code":20362,"language":1816,"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,20364,20365,20371,20381,20386,20391,20396,20401,20405,20413,20417,20421,20425,20431,20435,20448,20452,20464,20468,20477,20490,20494,20498,20504,20508,20521,20525,20530,20546,20550,20555,20564,20577,20581,20587,20591,20596,20604,20608,20613,20617,20625,20629,20634,20639,20644,20649,20654,20658,20663,20668,20673,20678,20682,20687,20692,20708,20720,20725,20729,20734,20739,20744,20748,20753,20767,20780,20784,20792,20796,20802,20808,20816],{"__ignoreMap":28},[33,20366,20367,20369],{"class":35,"line":36},[33,20368,3618],{"class":63},[33,20370,3621],{"class":117},[33,20372,20373,20375,20377,20379],{"class":35,"line":43},[33,20374,3626],{"class":63},[33,20376,3629],{"class":63},[33,20378,3633],{"class":3632},[33,20380,2976],{"class":59},[33,20382,20383],{"class":35,"line":130},[33,20384,20385],{"class":87},"\u002F\u002F1.构造函数的分类及调用\n",[33,20387,20388],{"class":35,"line":146},[33,20389,20390],{"class":87},"\u002F\u002F分类\n",[33,20392,20393],{"class":35,"line":267},[33,20394,20395],{"class":87},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[33,20397,20398],{"class":35,"line":275},[33,20399,20400],{"class":87},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[33,20402,20403],{"class":35,"line":392},[33,20404,127],{"emptyLinePlaceholder":126},[33,20406,20407,20409,20411],{"class":35,"line":406},[33,20408,16352],{"class":63},[33,20410,17225],{"class":3632},[33,20412,4340],{"class":59},[33,20414,20415],{"class":35,"line":418},[33,20416,3228],{"class":59},[33,20418,20419],{"class":35,"line":425},[33,20420,16374],{"class":63},[33,20422,20423],{"class":35,"line":1147},[33,20424,20169],{"class":87},[33,20426,20427,20429],{"class":35,"line":1329},[33,20428,20174],{"class":3632},[33,20430,943],{"class":59},[33,20432,20433],{"class":35,"line":1341},[33,20434,3698],{"class":59},[33,20436,20437,20439,20441,20444,20446],{"class":35,"line":1348},[33,20438,5114],{"class":59},[33,20440,2859],{"class":63},[33,20442,20443],{"class":117},"\"Person构造函数无参构造\"",[33,20445,2859],{"class":63},[33,20447,2881],{"class":59},[33,20449,20450],{"class":35,"line":1529},[33,20451,3855],{"class":59},[33,20453,20454,20456,20458,20460,20462],{"class":35,"line":1546},[33,20455,20174],{"class":3632},[33,20457,109],{"class":59},[33,20459,1828],{"class":63},[33,20461,3081],{"class":6877},[33,20463,157],{"class":59},[33,20465,20466],{"class":35,"line":1551},[33,20467,3698],{"class":59},[33,20469,20470,20473,20475],{"class":35,"line":1566},[33,20471,20472],{"class":59},"        age",[33,20474,64],{"class":63},[33,20476,7857],{"class":59},[33,20478,20479,20481,20483,20486,20488],{"class":35,"line":1578},[33,20480,5114],{"class":59},[33,20482,2859],{"class":63},[33,20484,20485],{"class":117},"\"Person构造函数有参构造\"",[33,20487,2859],{"class":63},[33,20489,2881],{"class":59},[33,20491,20492],{"class":35,"line":1583},[33,20493,3855],{"class":59},[33,20495,20496],{"class":35,"line":3369},[33,20497,20202],{"class":87},[33,20499,20500,20502],{"class":35,"line":3396},[33,20501,20207],{"class":3632},[33,20503,943],{"class":59},[33,20505,20506],{"class":35,"line":3401},[33,20507,3698],{"class":59},[33,20509,20510,20512,20514,20517,20519],{"class":35,"line":3418},[33,20511,5114],{"class":59},[33,20513,2859],{"class":63},[33,20515,20516],{"class":117},"\"Person析构函数被调用\"",[33,20518,2859],{"class":63},[33,20520,2881],{"class":59},[33,20522,20523],{"class":35,"line":3423},[33,20524,3855],{"class":59},[33,20526,20527],{"class":35,"line":3428},[33,20528,20529],{"class":87},"    \u002F\u002F拷贝构造函数\n",[33,20531,20532,20534,20536,20538,20540,20542,20544],{"class":35,"line":3433},[33,20533,20174],{"class":3632},[33,20535,109],{"class":59},[33,20537,8452],{"class":63},[33,20539,17225],{"class":3632},[33,20541,12242],{"class":63},[33,20543,19],{"class":6877},[33,20545,157],{"class":59},[33,20547,20548],{"class":35,"line":3447},[33,20549,3698],{"class":59},[33,20551,20552],{"class":35,"line":3452},[33,20553,20554],{"class":87},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[33,20556,20557,20559,20561],{"class":35,"line":4243},[33,20558,20472],{"class":59},[33,20560,64],{"class":63},[33,20562,20563],{"class":59},"p.age;\n",[33,20565,20566,20568,20570,20573,20575],{"class":35,"line":4257},[33,20567,5114],{"class":59},[33,20569,2859],{"class":63},[33,20571,20572],{"class":117},"\"Person拷贝构造函数被调用\"",[33,20574,2859],{"class":63},[33,20576,2881],{"class":59},[33,20578,20579],{"class":35,"line":4265},[33,20580,3855],{"class":59},[33,20582,20583,20585],{"class":35,"line":4270},[33,20584,3653],{"class":63},[33,20586,9457],{"class":59},[33,20588,20589],{"class":35,"line":4276},[33,20590,5657],{"class":59},[33,20592,20593],{"class":35,"line":4282},[33,20594,20595],{"class":87},"\u002F\u002F调用\n",[33,20597,20598,20600,20602],{"class":35,"line":4287},[33,20599,7025],{"class":63},[33,20601,7249],{"class":3632},[33,20603,943],{"class":59},[33,20605,20606],{"class":35,"line":9608},[33,20607,3228],{"class":59},[33,20609,20610],{"class":35,"line":9632},[33,20611,20612],{"class":87},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[33,20614,20615],{"class":35,"line":9637},[33,20616,3247],{"class":59},[33,20618,20619,20621,20623],{"class":35,"line":9643},[33,20620,7025],{"class":63},[33,20622,7318],{"class":3632},[33,20624,943],{"class":59},[33,20626,20627],{"class":35,"line":9670},[33,20628,3228],{"class":59},[33,20630,20631],{"class":35,"line":9675},[33,20632,20633],{"class":87},"    \u002F\u002F1.括号法\n",[33,20635,20636],{"class":35,"line":9681},[33,20637,20638],{"class":87},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[33,20640,20641],{"class":35,"line":9693},[33,20642,20643],{"class":87},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[33,20645,20646],{"class":35,"line":9705},[33,20647,20648],{"class":87},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[33,20650,20651],{"class":35,"line":9717},[33,20652,20653],{"class":87},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[33,20655,20656],{"class":35,"line":11375},[33,20657,127],{"emptyLinePlaceholder":126},[33,20659,20660],{"class":35,"line":11400},[33,20661,20662],{"class":87},"    \u002F\u002F注意事项\n",[33,20664,20665],{"class":35,"line":11423},[33,20666,20667],{"class":87},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[33,20669,20670],{"class":35,"line":11447},[33,20671,20672],{"class":87},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[33,20674,20675],{"class":35,"line":11452},[33,20676,20677],{"class":87},"    \u002F\u002F Person p4();\n",[33,20679,20680],{"class":35,"line":11457},[33,20681,127],{"emptyLinePlaceholder":126},[33,20683,20684],{"class":35,"line":11462},[33,20685,20686],{"class":87},"    \u002F\u002F2.显示法\n",[33,20688,20689],{"class":35,"line":11471},[33,20690,20691],{"class":59},"    Person p1;\n",[33,20693,20694,20697,20699,20702,20704,20706],{"class":35,"line":11476},[33,20695,20696],{"class":59},"    Person p2",[33,20698,64],{"class":63},[33,20700,20701],{"class":3632},"Person",[33,20703,109],{"class":59},[33,20705,2264],{"class":39},[33,20707,4385],{"class":59},[33,20709,20710,20713,20715,20717],{"class":35,"line":11482},[33,20711,20712],{"class":59},"    Person p3",[33,20714,64],{"class":63},[33,20716,20701],{"class":3632},[33,20718,20719],{"class":59},"(p2);\n",[33,20721,20722],{"class":35,"line":11503},[33,20723,20724],{"class":87},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[33,20726,20727],{"class":35,"line":11509},[33,20728,127],{"emptyLinePlaceholder":126},[33,20730,20731],{"class":35,"line":11523},[33,20732,20733],{"class":87},"    \u002F\u002F 注意事项2\n",[33,20735,20736],{"class":35,"line":11529},[33,20737,20738],{"class":87},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[33,20740,20741],{"class":35,"line":11556},[33,20742,20743],{"class":87},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[33,20745,20746],{"class":35,"line":11565},[33,20747,127],{"emptyLinePlaceholder":126},[33,20749,20750],{"class":35,"line":11571},[33,20751,20752],{"class":87},"    \u002F\u002F3.隐士转换法\n",[33,20754,20755,20758,20760,20762,20764],{"class":35,"line":11579},[33,20756,20757],{"class":59},"    Person p4",[33,20759,64],{"class":63},[33,20761,2264],{"class":39},[33,20763,1876],{"class":59},[33,20765,20766],{"class":87},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[33,20768,20769,20772,20774,20777],{"class":35,"line":11584},[33,20770,20771],{"class":59},"    Person p5",[33,20773,64],{"class":63},[33,20775,20776],{"class":59},"p4;",[33,20778,20779],{"class":87}," \u002F\u002F 这里会调用拷贝构造函数\n",[33,20781,20782],{"class":35,"line":18259},[33,20783,3247],{"class":59},[33,20785,20786,20788,20790],{"class":35,"line":18265},[33,20787,1828],{"class":63},[33,20789,3642],{"class":3632},[33,20791,943],{"class":59},[33,20793,20794],{"class":35,"line":18288},[33,20795,3228],{"class":59},[33,20797,20798,20800],{"class":35,"line":18294},[33,20799,7294],{"class":3632},[33,20801,7297],{"class":59},[33,20803,20804,20806],{"class":35,"line":18317},[33,20805,7363],{"class":3632},[33,20807,7297],{"class":59},[33,20809,20810,20812,20814],{"class":35,"line":18331},[33,20811,5752],{"class":63},[33,20813,829],{"class":39},[33,20815,2976],{"class":59},[33,20817,20818],{"class":35,"line":18351},[33,20819,3247],{"class":59},[19,20821,20822,20825],{},[1968,20823,20824],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[633,20827,20829],{"id":20828},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20831,20832],{},"C++中拷贝构造函数调用时机通常有三种情况",[2822,20834,20835,20838,20841],{},[165,20836,20837],{},"使用一个已经创建完毕的对象来初始化一个新对象",[165,20839,20840],{},"值传递的方式给函数参数传值",[165,20842,20843],{},"以值方式返回局部对象",[23,20845,20847],{"className":1814,"code":20846,"language":1816,"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,20848,20849,20855,20865,20869,20874,20878,20883,20888,20893,20899,20903,20907,20913,20917,20930,20934,20939,20951,20955,20963,20976,20980,20984,21000,21004,21013,21026,21030,21036,21040,21052,21056,21062,21066,21070,21078,21082,21095,21103,21121,21125,21130,21135,21150,21154,21167,21171,21179,21183,21187,21195,21199,21204,21213,21217,21221,21246,21256,21260,21268,21272,21283,21308,21312,21316,21320,21328,21332,21337,21342,21349,21354,21359,21364,21369,21373,21378,21382,21387,21391,21396,21401,21405,21409,21414,21419,21427],{"__ignoreMap":28},[33,20850,20851,20853],{"class":35,"line":36},[33,20852,3618],{"class":63},[33,20854,3621],{"class":117},[33,20856,20857,20859,20861,20863],{"class":35,"line":43},[33,20858,3626],{"class":63},[33,20860,3629],{"class":63},[33,20862,3633],{"class":3632},[33,20864,2976],{"class":59},[33,20866,20867],{"class":35,"line":130},[33,20868,127],{"emptyLinePlaceholder":126},[33,20870,20871],{"class":35,"line":146},[33,20872,20873],{"class":87},"\u002F\u002F拷贝构造函数调用时机\n",[33,20875,20876],{"class":35,"line":267},[33,20877,127],{"emptyLinePlaceholder":126},[33,20879,20880],{"class":35,"line":275},[33,20881,20882],{"class":87},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[33,20884,20885],{"class":35,"line":392},[33,20886,20887],{"class":87},"\u002F\u002F2.值传递的方式给函数参数传值\n",[33,20889,20890],{"class":35,"line":406},[33,20891,20892],{"class":87},"\u002F\u002F3.以值方式返回局部对象\n",[33,20894,20895,20897],{"class":35,"line":418},[33,20896,16352],{"class":63},[33,20898,16827],{"class":3632},[33,20900,20901],{"class":35,"line":425},[33,20902,3228],{"class":59},[33,20904,20905],{"class":35,"line":1147},[33,20906,16374],{"class":63},[33,20908,20909,20911],{"class":35,"line":1329},[33,20910,20174],{"class":3632},[33,20912,943],{"class":59},[33,20914,20915],{"class":35,"line":1341},[33,20916,3698],{"class":59},[33,20918,20919,20921,20923,20926,20928],{"class":35,"line":1348},[33,20920,11328],{"class":59},[33,20922,2859],{"class":63},[33,20924,20925],{"class":117}," \"Person的默认构造函数调用\"",[33,20927,3127],{"class":63},[33,20929,10500],{"class":59},[33,20931,20932],{"class":35,"line":1529},[33,20933,3855],{"class":59},[33,20935,20936],{"class":35,"line":1546},[33,20937,20938],{"class":87},"    \u002F\u002F有参构造\n",[33,20940,20941,20943,20945,20947,20949],{"class":35,"line":1551},[33,20942,20174],{"class":3632},[33,20944,109],{"class":59},[33,20946,1828],{"class":63},[33,20948,17345],{"class":6877},[33,20950,157],{"class":59},[33,20952,20953],{"class":35,"line":1566},[33,20954,3698],{"class":59},[33,20956,20957,20959,20961],{"class":35,"line":1578},[33,20958,17398],{"class":59},[33,20960,64],{"class":63},[33,20962,9457],{"class":59},[33,20964,20965,20967,20969,20972,20974],{"class":35,"line":1583},[33,20966,11328],{"class":59},[33,20968,2859],{"class":63},[33,20970,20971],{"class":117}," \"Person的有参构造函数调用\"",[33,20973,3127],{"class":63},[33,20975,10500],{"class":59},[33,20977,20978],{"class":35,"line":3369},[33,20979,3855],{"class":59},[33,20981,20982],{"class":35,"line":3396},[33,20983,20529],{"class":87},[33,20985,20986,20988,20990,20992,20994,20996,20998],{"class":35,"line":3401},[33,20987,20174],{"class":3632},[33,20989,109],{"class":59},[33,20991,8452],{"class":63},[33,20993,17225],{"class":3632},[33,20995,12242],{"class":63},[33,20997,19],{"class":6877},[33,20999,157],{"class":59},[33,21001,21002],{"class":35,"line":3418},[33,21003,3698],{"class":59},[33,21005,21006,21008,21010],{"class":35,"line":3423},[33,21007,17398],{"class":59},[33,21009,64],{"class":63},[33,21011,21012],{"class":59}," p.m_Age;\n",[33,21014,21015,21017,21019,21022,21024],{"class":35,"line":3428},[33,21016,11328],{"class":59},[33,21018,2859],{"class":63},[33,21020,21021],{"class":117}," \"Person的拷贝构造函数调用\"",[33,21023,3127],{"class":63},[33,21025,10500],{"class":59},[33,21027,21028],{"class":35,"line":3433},[33,21029,3855],{"class":59},[33,21031,21032,21034],{"class":35,"line":3447},[33,21033,20207],{"class":3632},[33,21035,943],{"class":59},[33,21037,21038],{"class":35,"line":3452},[33,21039,3698],{"class":59},[33,21041,21042,21044,21046,21048,21050],{"class":35,"line":4243},[33,21043,11328],{"class":59},[33,21045,2859],{"class":63},[33,21047,20222],{"class":117},[33,21049,3127],{"class":63},[33,21051,10500],{"class":59},[33,21053,21054],{"class":35,"line":4257},[33,21055,3855],{"class":59},[33,21057,21058,21060],{"class":35,"line":4265},[33,21059,3653],{"class":63},[33,21061,17322],{"class":59},[33,21063,21064],{"class":35,"line":4270},[33,21065,5657],{"class":59},[33,21067,21068],{"class":35,"line":4276},[33,21069,20882],{"class":87},[33,21071,21072,21074,21076],{"class":35,"line":4282},[33,21073,7025],{"class":63},[33,21075,7249],{"class":3632},[33,21077,943],{"class":59},[33,21079,21080],{"class":35,"line":4287},[33,21081,3228],{"class":59},[33,21083,21084,21087,21089,21091,21093],{"class":35,"line":9608},[33,21085,21086],{"class":59},"    Person ",[33,21088,8790],{"class":3632},[33,21090,109],{"class":59},[33,21092,2517],{"class":39},[33,21094,4385],{"class":59},[33,21096,21097,21099,21101],{"class":35,"line":9632},[33,21098,21086],{"class":59},[33,21100,8693],{"class":3632},[33,21102,19170],{"class":59},[33,21104,21105,21107,21109,21112,21114,21117,21119],{"class":35,"line":9637},[33,21106,3233],{"class":59},[33,21108,2859],{"class":63},[33,21110,21111],{"class":117},"\"P2的年龄为：\"",[33,21113,2859],{"class":63},[33,21115,21116],{"class":59},"p2.m_Age",[33,21118,2859],{"class":63},[33,21120,2881],{"class":59},[33,21122,21123],{"class":35,"line":9643},[33,21124,3247],{"class":59},[33,21126,21127],{"class":35,"line":9670},[33,21128,21129],{"class":87},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[33,21131,21132],{"class":35,"line":9675},[33,21133,21134],{"class":87},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[33,21136,21137,21139,21142,21144,21146,21148],{"class":35,"line":9681},[33,21138,7025],{"class":63},[33,21140,21141],{"class":3632}," doWork",[33,21143,109],{"class":59},[33,21145,20701],{"class":3632},[33,21147,8485],{"class":6877},[33,21149,157],{"class":59},[33,21151,21152],{"class":35,"line":9693},[33,21153,3228],{"class":59},[33,21155,21156,21158,21160,21163,21165],{"class":35,"line":9705},[33,21157,8189],{"class":59},[33,21159,2859],{"class":63},[33,21161,21162],{"class":117}," \"doWork函数调用\"",[33,21164,3127],{"class":63},[33,21166,10500],{"class":59},[33,21168,21169],{"class":35,"line":9717},[33,21170,3247],{"class":59},[33,21172,21173,21175,21177],{"class":35,"line":11375},[33,21174,7025],{"class":63},[33,21176,7318],{"class":3632},[33,21178,943],{"class":59},[33,21180,21181],{"class":35,"line":11400},[33,21182,3228],{"class":59},[33,21184,21185],{"class":35,"line":11423},[33,21186,16969],{"class":59},[33,21188,21189,21192],{"class":35,"line":11447},[33,21190,21191],{"class":3632},"    doWork",[33,21193,21194],{"class":59},"(p);\n",[33,21196,21197],{"class":35,"line":11452},[33,21198,3247],{"class":59},[33,21200,21201],{"class":35,"line":11457},[33,21202,21203],{"class":87},"\u002F\u002F 3.以值方式返回局部对象\n",[33,21205,21206,21208,21211],{"class":35,"line":11462},[33,21207,20701],{"class":3632},[33,21209,21210],{"class":3632}," doWork2",[33,21212,943],{"class":59},[33,21214,21215],{"class":35,"line":11471},[33,21216,3228],{"class":59},[33,21218,21219],{"class":35,"line":11476},[33,21220,20691],{"class":59},[33,21222,21223,21225,21227,21229,21231,21233,21235,21237,21239,21241,21243],{"class":35,"line":11482},[33,21224,3233],{"class":59},[33,21226,2859],{"class":63},[33,21228,109],{"class":59},[33,21230,1828],{"class":63},[33,21232,8178],{"class":63},[33,21234,2247],{"class":59},[33,21236,2171],{"class":63},[33,21238,8790],{"class":59},[33,21240,2859],{"class":63},[33,21242,2924],{"class":59},[33,21244,21245],{"class":87},"\u002F\u002F打印p1的地址\n",[33,21247,21248,21250,21253],{"class":35,"line":11503},[33,21249,5752],{"class":63},[33,21251,21252],{"class":59}," p1;",[33,21254,21255],{"class":87},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[33,21257,21258],{"class":35,"line":11509},[33,21259,3247],{"class":59},[33,21261,21262,21264,21266],{"class":35,"line":11523},[33,21263,7025],{"class":63},[33,21265,7390],{"class":3632},[33,21267,943],{"class":59},[33,21269,21270],{"class":35,"line":11529},[33,21271,3228],{"class":59},[33,21273,21274,21277,21279,21281],{"class":35,"line":11556},[33,21275,21276],{"class":59},"    Person p ",[33,21278,64],{"class":63},[33,21280,21210],{"class":3632},[33,21282,7297],{"class":59},[33,21284,21285,21287,21289,21291,21293,21295,21297,21299,21301,21303,21305],{"class":35,"line":11565},[33,21286,3233],{"class":59},[33,21288,2859],{"class":63},[33,21290,109],{"class":59},[33,21292,1828],{"class":63},[33,21294,8178],{"class":63},[33,21296,2247],{"class":59},[33,21298,2171],{"class":63},[33,21300,19],{"class":59},[33,21302,2859],{"class":63},[33,21304,2924],{"class":59},[33,21306,21307],{"class":87},"\u002F\u002F打印p的地址\n",[33,21309,21310],{"class":35,"line":11571},[33,21311,3247],{"class":59},[33,21313,21314],{"class":35,"line":11579},[33,21315,127],{"emptyLinePlaceholder":126},[33,21317,21318],{"class":35,"line":11584},[33,21319,127],{"emptyLinePlaceholder":126},[33,21321,21322,21324,21326],{"class":35,"line":18259},[33,21323,1828],{"class":63},[33,21325,3642],{"class":3632},[33,21327,943],{"class":59},[33,21329,21330],{"class":35,"line":18265},[33,21331,3228],{"class":59},[33,21333,21334],{"class":35,"line":18288},[33,21335,21336],{"class":87},"    \u002F\u002F test01();\n",[33,21338,21339],{"class":35,"line":18294},[33,21340,21341],{"class":87},"    \u002F\u002F test02();\n",[33,21343,21344,21347],{"class":35,"line":18317},[33,21345,21346],{"class":3632},"    test03",[33,21348,7297],{"class":59},[33,21350,21351],{"class":35,"line":18331},[33,21352,21353],{"class":87},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[33,21355,21356],{"class":35,"line":18351},[33,21357,21358],{"class":87},"\u002F\u002F 输出结果如下：\n",[33,21360,21361],{"class":35,"line":18357},[33,21362,21363],{"class":87},"\u002F\u002F Person的默认构造函数调用\n",[33,21365,21366],{"class":35,"line":18368},[33,21367,21368],{"class":87},"\u002F\u002F 0x7fffffffceec\n",[33,21370,21371],{"class":35,"line":18391},[33,21372,21368],{"class":87},[33,21374,21375],{"class":35,"line":18413},[33,21376,21377],{"class":87},"\u002F\u002F Person的析构函数调用\n",[33,21379,21380],{"class":35,"line":18418},[33,21381,127],{"emptyLinePlaceholder":126},[33,21383,21384],{"class":35,"line":18424},[33,21385,21386],{"class":87},"\u002F\u002F 之前的输出结果如下：\n",[33,21388,21389],{"class":35,"line":18438},[33,21390,21363],{"class":87},[33,21392,21393],{"class":35,"line":18451},[33,21394,21395],{"class":87},"\u002F\u002F 地址\n",[33,21397,21398],{"class":35,"line":18456},[33,21399,21400],{"class":87},"\u002F\u002F Person的拷贝构造函数调用\n",[33,21402,21403],{"class":35,"line":18470},[33,21404,21377],{"class":87},[33,21406,21407],{"class":35,"line":18475},[33,21408,21395],{"class":87},[33,21410,21411],{"class":35,"line":18481},[33,21412,21413],{"class":87},"\u002F\u002F (这两次输出的地址也是不同的) \n",[33,21415,21416],{"class":35,"line":18486},[33,21417,21418],{"class":87},"\u002F\u002F Person的析构函数调用     \n",[33,21420,21421,21423,21425],{"class":35,"line":18500},[33,21422,5752],{"class":63},[33,21424,829],{"class":39},[33,21426,2976],{"class":59},[33,21428,21429],{"class":35,"line":18505},[33,21430,3247],{"class":59},[19,21432,21433],{},"简化版理解",[23,21435,21437],{"className":1814,"code":21436,"language":1816,"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,21438,21439,21447,21451,21457,21470,21481,21485,21497,21510,21518,21522,21538,21551,21560,21564,21569,21575,21588,21592,21596,21603,21607,21611,21616,21624,21628,21644,21657,21670,21674,21679,21687,21691,21695,21700,21705,21721,21729,21736,21742,21746,21750,21755,21763,21767,21771,21794,21801,21805,21809,21817,21821,21831,21853,21857,21861,21865,21873,21877,21882,21887,21893,21897,21907,21911,21919],{"__ignoreMap":28},[33,21440,21441,21443,21445],{"class":35,"line":36},[33,21442,16352],{"class":63},[33,21444,17225],{"class":3632},[33,21446,17228],{"class":59},[33,21448,21449],{"class":35,"line":43},[33,21450,16374],{"class":63},[33,21452,21453,21455],{"class":35,"line":130},[33,21454,20174],{"class":3632},[33,21456,12511],{"class":59},[33,21458,21459,21461,21463,21466,21468],{"class":35,"line":146},[33,21460,11328],{"class":59},[33,21462,2859],{"class":63},[33,21464,21465],{"class":117}," \"无参构造函数!\"",[33,21467,3127],{"class":63},[33,21469,10500],{"class":59},[33,21471,21472,21475,21477,21479],{"class":35,"line":267},[33,21473,21474],{"class":59},"        mAge ",[33,21476,64],{"class":63},[33,21478,829],{"class":39},[33,21480,2976],{"class":59},[33,21482,21483],{"class":35,"line":275},[33,21484,3855],{"class":59},[33,21486,21487,21489,21491,21493,21495],{"class":35,"line":392},[33,21488,20174],{"class":3632},[33,21490,109],{"class":59},[33,21492,1828],{"class":63},[33,21494,17345],{"class":6877},[33,21496,14100],{"class":59},[33,21498,21499,21501,21503,21506,21508],{"class":35,"line":406},[33,21500,11328],{"class":59},[33,21502,2859],{"class":63},[33,21504,21505],{"class":117}," \"有参构造函数!\"",[33,21507,3127],{"class":63},[33,21509,10500],{"class":59},[33,21511,21512,21514,21516],{"class":35,"line":418},[33,21513,21474],{"class":59},[33,21515,64],{"class":63},[33,21517,9457],{"class":59},[33,21519,21520],{"class":35,"line":425},[33,21521,3855],{"class":59},[33,21523,21524,21526,21528,21530,21532,21534,21536],{"class":35,"line":1147},[33,21525,20174],{"class":3632},[33,21527,109],{"class":59},[33,21529,8452],{"class":63},[33,21531,17225],{"class":3632},[33,21533,2171],{"class":63},[33,21535,8485],{"class":6877},[33,21537,14100],{"class":59},[33,21539,21540,21542,21544,21547,21549],{"class":35,"line":1329},[33,21541,11328],{"class":59},[33,21543,2859],{"class":63},[33,21545,21546],{"class":117}," \"拷贝构造函数!\"",[33,21548,3127],{"class":63},[33,21550,10500],{"class":59},[33,21552,21553,21555,21557],{"class":35,"line":1341},[33,21554,21474],{"class":59},[33,21556,64],{"class":63},[33,21558,21559],{"class":59}," p.mAge;\n",[33,21561,21562],{"class":35,"line":1348},[33,21563,3855],{"class":59},[33,21565,21566],{"class":35,"line":1529},[33,21567,21568],{"class":87},"    \u002F\u002F析构函数在释放内存之前调用\n",[33,21570,21571,21573],{"class":35,"line":1546},[33,21572,20207],{"class":3632},[33,21574,12511],{"class":59},[33,21576,21577,21579,21581,21584,21586],{"class":35,"line":1551},[33,21578,11328],{"class":59},[33,21580,2859],{"class":63},[33,21582,21583],{"class":117}," \"析构函数!\"",[33,21585,3127],{"class":63},[33,21587,10500],{"class":59},[33,21589,21590],{"class":35,"line":1566},[33,21591,3855],{"class":59},[33,21593,21594],{"class":35,"line":1578},[33,21595,16374],{"class":63},[33,21597,21598,21600],{"class":35,"line":1583},[33,21599,3653],{"class":63},[33,21601,21602],{"class":59}," mAge;\n",[33,21604,21605],{"class":35,"line":3369},[33,21606,5657],{"class":59},[33,21608,21609],{"class":35,"line":3396},[33,21610,127],{"emptyLinePlaceholder":126},[33,21612,21613],{"class":35,"line":3401},[33,21614,21615],{"class":87},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[33,21617,21618,21620,21622],{"class":35,"line":3418},[33,21619,7025],{"class":63},[33,21621,7249],{"class":3632},[33,21623,12511],{"class":59},[33,21625,21626],{"class":35,"line":3423},[33,21627,127],{"emptyLinePlaceholder":126},[33,21629,21630,21632,21635,21637,21639,21641],{"class":35,"line":3428},[33,21631,21086],{"class":59},[33,21633,21634],{"class":3632},"man",[33,21636,109],{"class":59},[33,21638,2129],{"class":39},[33,21640,7626],{"class":59},[33,21642,21643],{"class":87}," \u002F\u002Fp对象已经创建完毕\n",[33,21645,21646,21648,21651,21654],{"class":35,"line":3433},[33,21647,21086],{"class":59},[33,21649,21650],{"class":3632},"newman",[33,21652,21653],{"class":59},"(man);",[33,21655,21656],{"class":87}," \u002F\u002F调用拷贝构造函数\n",[33,21658,21659,21662,21664,21667],{"class":35,"line":3447},[33,21660,21661],{"class":59},"    Person newman2 ",[33,21663,64],{"class":63},[33,21665,21666],{"class":59}," man;",[33,21668,21669],{"class":87}," \u002F\u002F拷贝构造\n",[33,21671,21672],{"class":35,"line":3452},[33,21673,127],{"emptyLinePlaceholder":126},[33,21675,21676],{"class":35,"line":4243},[33,21677,21678],{"class":87},"    \u002F\u002FPerson newman3;\n",[33,21680,21681,21684],{"class":35,"line":4257},[33,21682,21683],{"class":87},"    \u002F\u002Fnewman3 = man;",[33,21685,21686],{"class":87}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[33,21688,21689],{"class":35,"line":4265},[33,21690,3247],{"class":59},[33,21692,21693],{"class":35,"line":4270},[33,21694,127],{"emptyLinePlaceholder":126},[33,21696,21697],{"class":35,"line":4276},[33,21698,21699],{"class":87},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[33,21701,21702],{"class":35,"line":4282},[33,21703,21704],{"class":87},"\u002F\u002F相当于Person p1 = p;\n",[33,21706,21707,21709,21711,21713,21715,21718],{"class":35,"line":4287},[33,21708,7025],{"class":63},[33,21710,21141],{"class":3632},[33,21712,109],{"class":59},[33,21714,20701],{"class":3632},[33,21716,21717],{"class":6877}," p1",[33,21719,21720],{"class":59},") {}\n",[33,21722,21723,21725,21727],{"class":35,"line":9608},[33,21724,7025],{"class":63},[33,21726,7318],{"class":3632},[33,21728,12511],{"class":59},[33,21730,21731,21733],{"class":35,"line":9632},[33,21732,20259],{"class":59},[33,21734,21735],{"class":87}," \u002F\u002F无参构造函数\n",[33,21737,21738,21740],{"class":35,"line":9637},[33,21739,21191],{"class":3632},[33,21741,21194],{"class":59},[33,21743,21744],{"class":35,"line":9643},[33,21745,3247],{"class":59},[33,21747,21748],{"class":35,"line":9670},[33,21749,127],{"emptyLinePlaceholder":126},[33,21751,21752],{"class":35,"line":9675},[33,21753,21754],{"class":87},"\u002F\u002F3. 以值方式返回局部对象\n",[33,21756,21757,21759,21761],{"class":35,"line":9681},[33,21758,20701],{"class":3632},[33,21760,21210],{"class":3632},[33,21762,943],{"class":59},[33,21764,21765],{"class":35,"line":9693},[33,21766,3228],{"class":59},[33,21768,21769],{"class":35,"line":9705},[33,21770,20691],{"class":59},[33,21772,21773,21775,21777,21779,21781,21783,21785,21787,21790,21792],{"class":35,"line":9717},[33,21774,8189],{"class":59},[33,21776,2859],{"class":63},[33,21778,3332],{"class":59},[33,21780,1828],{"class":63},[33,21782,8178],{"class":63},[33,21784,2247],{"class":59},[33,21786,2171],{"class":63},[33,21788,21789],{"class":59},"p1 ",[33,21791,2859],{"class":63},[33,21793,10500],{"class":59},[33,21795,21796,21798],{"class":35,"line":11375},[33,21797,5752],{"class":63},[33,21799,21800],{"class":59}," p1;\n",[33,21802,21803],{"class":35,"line":11400},[33,21804,3247],{"class":59},[33,21806,21807],{"class":35,"line":11423},[33,21808,127],{"emptyLinePlaceholder":126},[33,21810,21811,21813,21815],{"class":35,"line":11447},[33,21812,7025],{"class":63},[33,21814,7390],{"class":3632},[33,21816,943],{"class":59},[33,21818,21819],{"class":35,"line":11452},[33,21820,3228],{"class":59},[33,21822,21823,21825,21827,21829],{"class":35,"line":11457},[33,21824,21276],{"class":59},[33,21826,64],{"class":63},[33,21828,21210],{"class":3632},[33,21830,7297],{"class":59},[33,21832,21833,21835,21837,21839,21841,21843,21845,21847,21849,21851],{"class":35,"line":11462},[33,21834,8189],{"class":59},[33,21836,2859],{"class":63},[33,21838,3332],{"class":59},[33,21840,1828],{"class":63},[33,21842,8178],{"class":63},[33,21844,2247],{"class":59},[33,21846,2171],{"class":63},[33,21848,13106],{"class":59},[33,21850,2859],{"class":63},[33,21852,10500],{"class":59},[33,21854,21855],{"class":35,"line":11471},[33,21856,3247],{"class":59},[33,21858,21859],{"class":35,"line":11476},[33,21860,127],{"emptyLinePlaceholder":126},[33,21862,21863],{"class":35,"line":11482},[33,21864,127],{"emptyLinePlaceholder":126},[33,21866,21867,21869,21871],{"class":35,"line":11503},[33,21868,1828],{"class":63},[33,21870,3642],{"class":3632},[33,21872,12511],{"class":59},[33,21874,21875],{"class":35,"line":11509},[33,21876,127],{"emptyLinePlaceholder":126},[33,21878,21879],{"class":35,"line":11523},[33,21880,21881],{"class":87},"    \u002F\u002Ftest01();\n",[33,21883,21884],{"class":35,"line":11529},[33,21885,21886],{"class":87},"    \u002F\u002Ftest02();\n",[33,21888,21889,21891],{"class":35,"line":11556},[33,21890,21346],{"class":3632},[33,21892,7297],{"class":59},[33,21894,21895],{"class":35,"line":11565},[33,21896,127],{"emptyLinePlaceholder":126},[33,21898,21899,21901,21903,21905],{"class":35,"line":11571},[33,21900,3971],{"class":3632},[33,21902,109],{"class":59},[33,21904,3976],{"class":117},[33,21906,4385],{"class":59},[33,21908,21909],{"class":35,"line":11579},[33,21910,127],{"emptyLinePlaceholder":126},[33,21912,21913,21915,21917],{"class":35,"line":11584},[33,21914,5752],{"class":63},[33,21916,829],{"class":39},[33,21918,2976],{"class":59},[33,21920,21921],{"class":35,"line":18259},[33,21922,3247],{"class":59},[633,21924,21926],{"id":21925},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21928,21929],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21931,21932],{},"1．默认构造函数(无参，函数体为空)",[19,21934,21935],{},"2．默认析构函数(无参，函数体为空)",[19,21937,21938],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21940,21941],{},"构造函数调用规则如下：",[2822,21943,21944,21947],{},[165,21945,21946],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[165,21948,21949],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[23,21951,21953],{"className":1814,"code":21952,"language":1816,"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,21954,21955,21963,21967,21972,21978,21990,21994,21999,22011,22020,22032,22036,22040,22056,22065,22077,22081,22085,22091,22103,22107,22111,22117,22121,22125,22133,22137,22149,22154,22162,22166,22184,22188,22192,22200,22204,22209,22217,22232,22245,22249,22254,22261,22277,22290,22294,22298,22306,22310,22316,22320,22330,22334,22342],{"__ignoreMap":28},[33,21956,21957,21959,21961],{"class":35,"line":36},[33,21958,16352],{"class":63},[33,21960,17225],{"class":3632},[33,21962,17228],{"class":59},[33,21964,21965],{"class":35,"line":43},[33,21966,16374],{"class":63},[33,21968,21969],{"class":35,"line":130},[33,21970,21971],{"class":87},"    \u002F\u002F无参（默认）构造函数\n",[33,21973,21974,21976],{"class":35,"line":146},[33,21975,20174],{"class":3632},[33,21977,12511],{"class":59},[33,21979,21980,21982,21984,21986,21988],{"class":35,"line":267},[33,21981,11328],{"class":59},[33,21983,2859],{"class":63},[33,21985,21465],{"class":117},[33,21987,3127],{"class":63},[33,21989,10500],{"class":59},[33,21991,21992],{"class":35,"line":275},[33,21993,3855],{"class":59},[33,21995,21996],{"class":35,"line":392},[33,21997,21998],{"class":87},"    \u002F\u002F有参构造函数\n",[33,22000,22001,22003,22005,22007,22009],{"class":35,"line":406},[33,22002,20174],{"class":3632},[33,22004,109],{"class":59},[33,22006,1828],{"class":63},[33,22008,3081],{"class":6877},[33,22010,14100],{"class":59},[33,22012,22013,22016,22018],{"class":35,"line":418},[33,22014,22015],{"class":59},"        age ",[33,22017,64],{"class":63},[33,22019,3115],{"class":59},[33,22021,22022,22024,22026,22028,22030],{"class":35,"line":425},[33,22023,11328],{"class":59},[33,22025,2859],{"class":63},[33,22027,21505],{"class":117},[33,22029,3127],{"class":63},[33,22031,10500],{"class":59},[33,22033,22034],{"class":35,"line":1147},[33,22035,3855],{"class":59},[33,22037,22038],{"class":35,"line":1329},[33,22039,20529],{"class":87},[33,22041,22042,22044,22046,22048,22050,22052,22054],{"class":35,"line":1341},[33,22043,20174],{"class":3632},[33,22045,109],{"class":59},[33,22047,8452],{"class":63},[33,22049,17225],{"class":3632},[33,22051,2171],{"class":63},[33,22053,8485],{"class":6877},[33,22055,14100],{"class":59},[33,22057,22058,22060,22062],{"class":35,"line":1348},[33,22059,22015],{"class":59},[33,22061,64],{"class":63},[33,22063,22064],{"class":59}," p.age;\n",[33,22066,22067,22069,22071,22073,22075],{"class":35,"line":1529},[33,22068,11328],{"class":59},[33,22070,2859],{"class":63},[33,22072,21546],{"class":117},[33,22074,3127],{"class":63},[33,22076,10500],{"class":59},[33,22078,22079],{"class":35,"line":1546},[33,22080,3855],{"class":59},[33,22082,22083],{"class":35,"line":1551},[33,22084,20202],{"class":87},[33,22086,22087,22089],{"class":35,"line":1566},[33,22088,20207],{"class":3632},[33,22090,12511],{"class":59},[33,22092,22093,22095,22097,22099,22101],{"class":35,"line":1578},[33,22094,11328],{"class":59},[33,22096,2859],{"class":63},[33,22098,21583],{"class":117},[33,22100,3127],{"class":63},[33,22102,10500],{"class":59},[33,22104,22105],{"class":35,"line":1583},[33,22106,3855],{"class":59},[33,22108,22109],{"class":35,"line":3369},[33,22110,16374],{"class":63},[33,22112,22113,22115],{"class":35,"line":3396},[33,22114,3653],{"class":63},[33,22116,9457],{"class":59},[33,22118,22119],{"class":35,"line":3401},[33,22120,5657],{"class":59},[33,22122,22123],{"class":35,"line":3418},[33,22124,127],{"emptyLinePlaceholder":126},[33,22126,22127,22129,22131],{"class":35,"line":3423},[33,22128,7025],{"class":63},[33,22130,7249],{"class":3632},[33,22132,943],{"class":59},[33,22134,22135],{"class":35,"line":3428},[33,22136,3228],{"class":59},[33,22138,22139,22141,22143,22145,22147],{"class":35,"line":3433},[33,22140,21086],{"class":59},[33,22142,8790],{"class":3632},[33,22144,109],{"class":59},[33,22146,2467],{"class":39},[33,22148,4385],{"class":59},[33,22150,22151],{"class":35,"line":3447},[33,22152,22153],{"class":87},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[33,22155,22156,22158,22160],{"class":35,"line":3452},[33,22157,21086],{"class":59},[33,22159,8693],{"class":3632},[33,22161,19170],{"class":59},[33,22163,22164],{"class":35,"line":4243},[33,22165,127],{"emptyLinePlaceholder":126},[33,22167,22168,22170,22172,22175,22177,22180,22182],{"class":35,"line":4257},[33,22169,8189],{"class":59},[33,22171,2859],{"class":63},[33,22173,22174],{"class":117}," \"p2的年龄为： \"",[33,22176,3127],{"class":63},[33,22178,22179],{"class":59}," p2.age ",[33,22181,2859],{"class":63},[33,22183,10500],{"class":59},[33,22185,22186],{"class":35,"line":4265},[33,22187,3247],{"class":59},[33,22189,22190],{"class":35,"line":4270},[33,22191,127],{"emptyLinePlaceholder":126},[33,22193,22194,22196,22198],{"class":35,"line":4276},[33,22195,7025],{"class":63},[33,22197,7318],{"class":3632},[33,22199,943],{"class":59},[33,22201,22202],{"class":35,"line":4282},[33,22203,3228],{"class":59},[33,22205,22206],{"class":35,"line":4287},[33,22207,22208],{"class":87},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[33,22210,22211,22214],{"class":35,"line":9608},[33,22212,22213],{"class":59},"    Person p1;",[33,22215,22216],{"class":87}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[33,22218,22219,22221,22223,22225,22227,22229],{"class":35,"line":9632},[33,22220,21086],{"class":59},[33,22222,8693],{"class":3632},[33,22224,109],{"class":59},[33,22226,2264],{"class":39},[33,22228,7626],{"class":59},[33,22230,22231],{"class":87}," \u002F\u002F用户提供的有参\n",[33,22233,22234,22236,22239,22242],{"class":35,"line":9637},[33,22235,21086],{"class":59},[33,22237,22238],{"class":3632},"p3",[33,22240,22241],{"class":59},"(p2);",[33,22243,22244],{"class":87}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[33,22246,22247],{"class":35,"line":9643},[33,22248,127],{"emptyLinePlaceholder":126},[33,22250,22251],{"class":35,"line":9670},[33,22252,22253],{"class":87},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[33,22255,22256,22259],{"class":35,"line":9675},[33,22257,22258],{"class":59},"    Person p4;",[33,22260,22216],{"class":87},[33,22262,22263,22265,22268,22270,22272,22274],{"class":35,"line":9681},[33,22264,21086],{"class":59},[33,22266,22267],{"class":3632},"p5",[33,22269,109],{"class":59},[33,22271,2264],{"class":39},[33,22273,7626],{"class":59},[33,22275,22276],{"class":87}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[33,22278,22279,22281,22284,22287],{"class":35,"line":9693},[33,22280,21086],{"class":59},[33,22282,22283],{"class":3632},"p6",[33,22285,22286],{"class":59},"(p5);",[33,22288,22289],{"class":87}," \u002F\u002F用户自己提供拷贝构造\n",[33,22291,22292],{"class":35,"line":9705},[33,22293,3247],{"class":59},[33,22295,22296],{"class":35,"line":9717},[33,22297,127],{"emptyLinePlaceholder":126},[33,22299,22300,22302,22304],{"class":35,"line":11375},[33,22301,1828],{"class":63},[33,22303,3642],{"class":3632},[33,22305,12511],{"class":59},[33,22307,22308],{"class":35,"line":11400},[33,22309,127],{"emptyLinePlaceholder":126},[33,22311,22312,22314],{"class":35,"line":11423},[33,22313,7294],{"class":3632},[33,22315,7297],{"class":59},[33,22317,22318],{"class":35,"line":11447},[33,22319,127],{"emptyLinePlaceholder":126},[33,22321,22322,22324,22326,22328],{"class":35,"line":11452},[33,22323,3971],{"class":3632},[33,22325,109],{"class":59},[33,22327,3976],{"class":117},[33,22329,4385],{"class":59},[33,22331,22332],{"class":35,"line":11457},[33,22333,127],{"emptyLinePlaceholder":126},[33,22335,22336,22338,22340],{"class":35,"line":11462},[33,22337,5752],{"class":63},[33,22339,829],{"class":39},[33,22341,2976],{"class":59},[33,22343,22344],{"class":35,"line":11471},[33,22345,3247],{"class":59},[633,22347,22349],{"id":22348},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22351,22352],{},"浅拷贝：简单的赋值拷贝操作",[19,22354,22355],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[23,22357,22359],{"className":1814,"code":22358,"language":1816,"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,22360,22361,22367,22377,22383,22387,22391,22396,22402,22406,22419,22423,22427,22434,22438,22448,22463,22476,22480,22485,22490,22506,22510,22523,22528,22533,22538,22547,22552,22567,22571,22575,22579,22585,22589,22594,22609,22613,22624,22638,22642,22651,22655,22661,22673,22677,22685,22689,22706,22737,22745,22773,22777,22781,22789,22793,22799],{"__ignoreMap":28},[33,22362,22363,22365],{"class":35,"line":36},[33,22364,3618],{"class":63},[33,22366,3621],{"class":117},[33,22368,22369,22371,22373,22375],{"class":35,"line":43},[33,22370,3626],{"class":63},[33,22372,3629],{"class":63},[33,22374,3633],{"class":3632},[33,22376,2976],{"class":59},[33,22378,22379,22381],{"class":35,"line":130},[33,22380,16352],{"class":63},[33,22382,16827],{"class":3632},[33,22384,22385],{"class":35,"line":146},[33,22386,3228],{"class":59},[33,22388,22389],{"class":35,"line":267},[33,22390,16374],{"class":63},[33,22392,22393],{"class":35,"line":275},[33,22394,22395],{"class":87},"    \u002F\u002F默认构造函数\n",[33,22397,22398,22400],{"class":35,"line":392},[33,22399,20174],{"class":3632},[33,22401,943],{"class":59},[33,22403,22404],{"class":35,"line":406},[33,22405,3698],{"class":59},[33,22407,22408,22410,22412,22415,22417],{"class":35,"line":418},[33,22409,5114],{"class":59},[33,22411,2859],{"class":63},[33,22413,22414],{"class":117},"\"默认构造函数\"",[33,22416,2859],{"class":63},[33,22418,2881],{"class":59},[33,22420,22421],{"class":35,"line":425},[33,22422,3855],{"class":59},[33,22424,22425],{"class":35,"line":1147},[33,22426,21998],{"class":87},[33,22428,22429,22431],{"class":35,"line":1329},[33,22430,20207],{"class":3632},[33,22432,22433],{"class":59},"(int age,int height)\n",[33,22435,22436],{"class":35,"line":1341},[33,22437,3698],{"class":59},[33,22439,22440,22443,22445],{"class":35,"line":1348},[33,22441,22442],{"class":59},"        m_Age",[33,22444,64],{"class":63},[33,22446,22447],{"class":59},"age;\n",[33,22449,22450,22453,22455,22457,22460],{"class":35,"line":1529},[33,22451,22452],{"class":59},"        m_Height",[33,22454,13375],{"class":63},[33,22456,106],{"class":63},[33,22458,22459],{"class":59},"(height);",[33,22461,22462],{"class":87},"\u002F\u002F放到堆区\n",[33,22464,22465,22467,22469,22472,22474],{"class":35,"line":1546},[33,22466,5114],{"class":59},[33,22468,2859],{"class":63},[33,22470,22471],{"class":117},"\"有参构造函数\"",[33,22473,2859],{"class":63},[33,22475,2881],{"class":59},[33,22477,22478],{"class":35,"line":1551},[33,22479,3855],{"class":59},[33,22481,22482],{"class":35,"line":1566},[33,22483,22484],{"class":87},"    \u002F\u002F深拷贝解决上述问题\n",[33,22486,22487],{"class":35,"line":1578},[33,22488,22489],{"class":87},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[33,22491,22492,22494,22496,22498,22500,22502,22504],{"class":35,"line":1583},[33,22493,20174],{"class":3632},[33,22495,109],{"class":59},[33,22497,8452],{"class":63},[33,22499,17225],{"class":3632},[33,22501,12242],{"class":63},[33,22503,19],{"class":6877},[33,22505,157],{"class":59},[33,22507,22508],{"class":35,"line":3369},[33,22509,3698],{"class":59},[33,22511,22512,22514,22516,22519,22521],{"class":35,"line":3396},[33,22513,5114],{"class":59},[33,22515,2859],{"class":63},[33,22517,22518],{"class":117},"\"拷贝构造函数\"",[33,22520,2859],{"class":63},[33,22522,2881],{"class":59},[33,22524,22525],{"class":35,"line":3401},[33,22526,22527],{"class":87},"        \u002F\u002F编译器默认的写如下注释部分\n",[33,22529,22530],{"class":35,"line":3418},[33,22531,22532],{"class":87},"        \u002F\u002Fm_Age=p.m_Age;\n",[33,22534,22535],{"class":35,"line":3423},[33,22536,22537],{"class":87},"        \u002F\u002Fm_Height=p.m_Height;\n",[33,22539,22540,22542,22544],{"class":35,"line":3428},[33,22541,22442],{"class":59},[33,22543,64],{"class":63},[33,22545,22546],{"class":59},"p.m_Age;\n",[33,22548,22549],{"class":35,"line":3433},[33,22550,22551],{"class":87},"        \u002F\u002F深拷贝操作\n",[33,22553,22554,22556,22558,22560,22562,22564],{"class":35,"line":3447},[33,22555,22452],{"class":59},[33,22557,13375],{"class":63},[33,22559,106],{"class":63},[33,22561,109],{"class":59},[33,22563,1540],{"class":63},[33,22565,22566],{"class":59},"p.m_Height);\n",[33,22568,22569],{"class":35,"line":3452},[33,22570,3855],{"class":59},[33,22572,22573],{"class":35,"line":4243},[33,22574,127],{"emptyLinePlaceholder":126},[33,22576,22577],{"class":35,"line":4257},[33,22578,20202],{"class":87},[33,22580,22581,22583],{"class":35,"line":4265},[33,22582,20207],{"class":3632},[33,22584,943],{"class":59},[33,22586,22587],{"class":35,"line":4270},[33,22588,3698],{"class":59},[33,22590,22591],{"class":35,"line":4276},[33,22592,22593],{"class":87},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[33,22595,22596,22598,22601,22604,22607],{"class":35,"line":4282},[33,22597,4163],{"class":63},[33,22599,22600],{"class":59},"(m_Height ",[33,22602,22603],{"class":63},"!=",[33,22605,22606],{"class":39}," NULL",[33,22608,157],{"class":59},[33,22610,22611],{"class":35,"line":4287},[33,22612,4176],{"class":59},[33,22614,22615,22618,22621],{"class":35,"line":9608},[33,22616,22617],{"class":63},"            delete",[33,22619,22620],{"class":59}," m_Height;",[33,22622,22623],{"class":87}," \u002F\u002F释放堆区内存\n",[33,22625,22626,22629,22631,22633,22635],{"class":35,"line":9632},[33,22627,22628],{"class":59},"            m_Height",[33,22630,64],{"class":63},[33,22632,4059],{"class":39},[33,22634,1876],{"class":59},[33,22636,22637],{"class":87}," \u002F\u002F防止野指针\n",[33,22639,22640],{"class":35,"line":9637},[33,22641,4195],{"class":59},[33,22643,22644,22646,22648],{"class":35,"line":9643},[33,22645,5114],{"class":59},[33,22647,2859],{"class":63},[33,22649,22650],{"class":117},"\"Person的析构函数调用\"\n",[33,22652,22653],{"class":35,"line":9670},[33,22654,3855],{"class":59},[33,22656,22657,22659],{"class":35,"line":9675},[33,22658,3653],{"class":63},[33,22660,17322],{"class":59},[33,22662,22663,22665,22667,22670],{"class":35,"line":9681},[33,22664,3653],{"class":63},[33,22666,8178],{"class":63},[33,22668,22669],{"class":59},"m_Height;",[33,22671,22672],{"class":87}," \u002F\u002F定义一个指针，指向身高\n",[33,22674,22675],{"class":35,"line":9693},[33,22676,5657],{"class":59},[33,22678,22679,22681,22683],{"class":35,"line":9705},[33,22680,7025],{"class":63},[33,22682,7249],{"class":3632},[33,22684,943],{"class":59},[33,22686,22687],{"class":35,"line":9717},[33,22688,3228],{"class":59},[33,22690,22691,22693,22695,22697,22699,22701,22704],{"class":35,"line":11375},[33,22692,21086],{"class":59},[33,22694,8790],{"class":3632},[33,22696,109],{"class":59},[33,22698,2467],{"class":39},[33,22700,2196],{"class":59},[33,22702,22703],{"class":39},"160",[33,22705,4385],{"class":59},[33,22707,22708,22710,22712,22715,22717,22720,22722,22725,22727,22730,22732,22734],{"class":35,"line":11400},[33,22709,3233],{"class":59},[33,22711,2859],{"class":63},[33,22713,22714],{"class":117},"\"p1的年龄为:\"",[33,22716,2859],{"class":63},[33,22718,22719],{"class":59},"p1.m_Age",[33,22721,2859],{"class":63},[33,22723,22724],{"class":117},"\"身高为：\"",[33,22726,8079],{"class":63},[33,22728,22729],{"class":59},"p1.m_Height",[33,22731,2859],{"class":63},[33,22733,2924],{"class":59},[33,22735,22736],{"class":87},"  \u002F\u002F18\n",[33,22738,22739,22741,22743],{"class":35,"line":11423},[33,22740,21086],{"class":59},[33,22742,8693],{"class":3632},[33,22744,19170],{"class":59},[33,22746,22747,22749,22751,22754,22756,22758,22760,22762,22764,22767,22769,22771],{"class":35,"line":11447},[33,22748,3233],{"class":59},[33,22750,2859],{"class":63},[33,22752,22753],{"class":117},"\"p2的年龄为：\"",[33,22755,2859],{"class":63},[33,22757,21116],{"class":59},[33,22759,2859],{"class":63},[33,22761,22724],{"class":117},[33,22763,8079],{"class":63},[33,22765,22766],{"class":59},"p2.m_Height",[33,22768,2859],{"class":63},[33,22770,2924],{"class":59},[33,22772,22736],{"class":87},[33,22774,22775],{"class":35,"line":11452},[33,22776,14868],{"class":59},[33,22778,22779],{"class":35,"line":11457},[33,22780,3247],{"class":59},[33,22782,22783,22785,22787],{"class":35,"line":11462},[33,22784,1828],{"class":63},[33,22786,3642],{"class":3632},[33,22788,943],{"class":59},[33,22790,22791],{"class":35,"line":11471},[33,22792,3228],{"class":59},[33,22794,22795,22797],{"class":35,"line":11476},[33,22796,7294],{"class":3632},[33,22798,7297],{"class":59},[33,22800,22801],{"class":35,"line":11482},[33,22802,3247],{"class":59},[19,22804,22805],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22807,22808],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22810,22811],{},[3145,22812],{"alt":28,"src":22813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22815,22816],{},"浅拷贝问题要使用深拷贝来解决",[19,22818,22819],{},[3145,22820],{"alt":28,"src":22821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22823,22824],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[633,22826,22828],{"id":22827},"_826初始化列表","8.2.6初始化列表",[19,22830,22831],{},"作用：初始化属性",[19,22833,6842],{},[23,22835,22838],{"className":22836,"code":22837,"language":6848},[6846],"构造函数():属性1(值1),属性2(值2).....{}\n",[30,22839,22837],{"__ignoreMap":28},[19,22841,22842],{},"例子",[23,22844,22846],{"className":1814,"code":22845,"language":1816,"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,22847,22848,22854,22864,22870,22874,22879,22883,22888,22893,22898,22903,22908,22913,22917,22922,22927,22970,22979,22997,23015,23033,23037,23041,23048,23055,23062,23066,23070,23078,23082,23086,23106,23115,23119,23123,23133,23137,23145],{"__ignoreMap":28},[33,22849,22850,22852],{"class":35,"line":36},[33,22851,3618],{"class":63},[33,22853,3621],{"class":117},[33,22855,22856,22858,22860,22862],{"class":35,"line":43},[33,22857,3626],{"class":63},[33,22859,3629],{"class":63},[33,22861,3633],{"class":3632},[33,22863,2976],{"class":59},[33,22865,22866,22868],{"class":35,"line":130},[33,22867,16352],{"class":63},[33,22869,16827],{"class":3632},[33,22871,22872],{"class":35,"line":146},[33,22873,3228],{"class":59},[33,22875,22876],{"class":35,"line":267},[33,22877,22878],{"class":63},"    public:\n",[33,22880,22881],{"class":35,"line":275},[33,22882,127],{"emptyLinePlaceholder":126},[33,22884,22885],{"class":35,"line":392},[33,22886,22887],{"class":87},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[33,22889,22890],{"class":35,"line":406},[33,22891,22892],{"class":87},"    \u002F\u002FPerson(int a, int b, int c) {\n",[33,22894,22895],{"class":35,"line":418},[33,22896,22897],{"class":87},"    \u002F\u002F  m_A = a;\n",[33,22899,22900],{"class":35,"line":425},[33,22901,22902],{"class":87},"    \u002F\u002F  m_B = b;\n",[33,22904,22905],{"class":35,"line":1147},[33,22906,22907],{"class":87},"    \u002F\u002F  m_C = c;\n",[33,22909,22910],{"class":35,"line":1329},[33,22911,22912],{"class":87},"    \u002F\u002F}\n",[33,22914,22915],{"class":35,"line":1341},[33,22916,127],{"emptyLinePlaceholder":126},[33,22918,22919],{"class":35,"line":1348},[33,22920,22921],{"class":87},"    \u002F\u002F初始化列表方式初始化\n",[33,22923,22924],{"class":35,"line":1529},[33,22925,22926],{"class":87},"    \u002F\u002F使用有参构造函数\n",[33,22928,22929,22931,22933,22935,22937,22939,22941,22943,22945,22947,22949,22952,22955,22958,22961,22964,22967],{"class":35,"line":1546},[33,22930,20174],{"class":3632},[33,22932,109],{"class":59},[33,22934,1828],{"class":63},[33,22936,3081],{"class":6877},[33,22938,14093],{"class":59},[33,22940,1828],{"class":63},[33,22942,4499],{"class":6877},[33,22944,14093],{"class":59},[33,22946,1828],{"class":63},[33,22948,4515],{"class":6877},[33,22950,22951],{"class":59},") :",[33,22953,22954],{"class":3632},"m_A",[33,22956,22957],{"class":59},"(a), ",[33,22959,22960],{"class":3632},"m_B",[33,22962,22963],{"class":59},"(b), ",[33,22965,22966],{"class":3632},"m_C",[33,22968,22969],{"class":59},"(c) {}\n",[33,22971,22972,22974,22977],{"class":35,"line":1551},[33,22973,16567],{"class":63},[33,22975,22976],{"class":3632}," PrintPerson",[33,22978,12511],{"class":59},[33,22980,22981,22983,22985,22988,22990,22993,22995],{"class":35,"line":1566},[33,22982,11328],{"class":59},[33,22984,2859],{"class":63},[33,22986,22987],{"class":117}," \"mA:\"",[33,22989,3127],{"class":63},[33,22991,22992],{"class":59}," m_A ",[33,22994,2859],{"class":63},[33,22996,10500],{"class":59},[33,22998,22999,23001,23003,23006,23008,23011,23013],{"class":35,"line":1578},[33,23000,11328],{"class":59},[33,23002,2859],{"class":63},[33,23004,23005],{"class":117}," \"mB:\"",[33,23007,3127],{"class":63},[33,23009,23010],{"class":59}," m_B ",[33,23012,2859],{"class":63},[33,23014,10500],{"class":59},[33,23016,23017,23019,23021,23024,23026,23029,23031],{"class":35,"line":1583},[33,23018,11328],{"class":59},[33,23020,2859],{"class":63},[33,23022,23023],{"class":117}," \"mC:\"",[33,23025,3127],{"class":63},[33,23027,23028],{"class":59}," m_C ",[33,23030,2859],{"class":63},[33,23032,10500],{"class":59},[33,23034,23035],{"class":35,"line":3369},[33,23036,3855],{"class":59},[33,23038,23039],{"class":35,"line":3396},[33,23040,16878],{"class":63},[33,23042,23043,23045],{"class":35,"line":3401},[33,23044,3653],{"class":63},[33,23046,23047],{"class":59}," m_A;\n",[33,23049,23050,23052],{"class":35,"line":3418},[33,23051,3653],{"class":63},[33,23053,23054],{"class":59}," m_B;\n",[33,23056,23057,23059],{"class":35,"line":3423},[33,23058,3653],{"class":63},[33,23060,23061],{"class":59}," m_C;\n",[33,23063,23064],{"class":35,"line":3428},[33,23065,5657],{"class":59},[33,23067,23068],{"class":35,"line":3433},[33,23069,127],{"emptyLinePlaceholder":126},[33,23071,23072,23074,23076],{"class":35,"line":3447},[33,23073,1828],{"class":63},[33,23075,3642],{"class":3632},[33,23077,7638],{"class":59},[33,23079,23080],{"class":35,"line":3452},[33,23081,3228],{"class":59},[33,23083,23084],{"class":35,"line":4243},[33,23085,127],{"emptyLinePlaceholder":126},[33,23087,23088,23090,23092,23094,23096,23098,23100,23102,23104],{"class":35,"line":4257},[33,23089,21086],{"class":59},[33,23091,19],{"class":3632},[33,23093,109],{"class":59},[33,23095,2036],{"class":39},[33,23097,14093],{"class":59},[33,23099,1897],{"class":39},[33,23101,14093],{"class":59},[33,23103,1891],{"class":39},[33,23105,4385],{"class":59},[33,23107,23108,23110,23113],{"class":35,"line":4265},[33,23109,17521],{"class":59},[33,23111,23112],{"class":3632},"PrintPerson",[33,23114,7297],{"class":59},[33,23116,23117],{"class":35,"line":4270},[33,23118,127],{"emptyLinePlaceholder":126},[33,23120,23121],{"class":35,"line":4276},[33,23122,127],{"emptyLinePlaceholder":126},[33,23124,23125,23127,23129,23131],{"class":35,"line":4282},[33,23126,3971],{"class":3632},[33,23128,109],{"class":59},[33,23130,3976],{"class":117},[33,23132,4385],{"class":59},[33,23134,23135],{"class":35,"line":4287},[33,23136,127],{"emptyLinePlaceholder":126},[33,23138,23139,23141,23143],{"class":35,"line":9608},[33,23140,5752],{"class":63},[33,23142,829],{"class":39},[33,23144,2976],{"class":59},[33,23146,23147],{"class":35,"line":9632},[33,23148,3247],{"class":59},[19,23150,23151,23152,23155,23156],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[1968,23153,23154],{},"参数名就是定义的对象属性","，",[1968,23157,23158],{},"属性后面的值为有参构造函数的形参",[23,23160,23162],{"className":1814,"code":23161,"language":1816,"meta":28,"style":28},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[30,23163,23164],{"__ignoreMap":28},[33,23165,23166,23168,23170,23172,23175,23177,23180,23182,23185,23187,23190,23192,23195,23197],{"class":35,"line":36},[33,23167,20701],{"class":3632},[33,23169,109],{"class":59},[33,23171,1828],{"class":63},[33,23173,23174],{"class":59}," a.",[33,23176,1828],{"class":63},[33,23178,23179],{"class":59}," b,",[33,23181,1828],{"class":63},[33,23183,23184],{"class":59}," b):",[33,23186,22954],{"class":3632},[33,23188,23189],{"class":59},"(a),",[33,23191,22960],{"class":3632},[33,23193,23194],{"class":59},"(c),",[33,23196,22966],{"class":3632},[33,23198,23199],{"class":59},"(b) {}\n",[633,23201,23203],{"id":23202},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23205,23206],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23208,16291],{},[23,23210,23212],{"className":1814,"code":23211,"language":1816,"meta":28,"style":28},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[30,23213,23214,23219,23224,23228,23233,23237],{"__ignoreMap":28},[33,23215,23216],{"class":35,"line":36},[33,23217,23218],{"class":59},"A{};\n",[33,23220,23221],{"class":35,"line":43},[33,23222,23223],{"class":59},"B\n",[33,23225,23226],{"class":35,"line":130},[33,23227,3228],{"class":59},[33,23229,23230],{"class":35,"line":146},[33,23231,23232],{"class":59},"    A a;\n",[33,23234,23235],{"class":35,"line":267},[33,23236,3247],{"class":59},[33,23238,23239],{"class":35,"line":275},[33,23240,23241],{"class":87},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23243,23244],{},"案例",[23,23246,23248],{"className":1814,"code":23247,"language":1816,"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,23249,23250,23255,23262,23266,23271,23276,23290,23294,23304,23315,23319,23326,23330,23343,23347,23352,23357,23361,23367,23371,23375,23379,23410,23414,23425,23429,23435,23439,23452,23456,23460,23464,23469,23474,23478,23486,23490,23507,23526,23530,23538,23542,23548],{"__ignoreMap":28},[33,23251,23252],{"class":35,"line":36},[33,23253,23254],{"class":87},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[33,23256,23257,23259],{"class":35,"line":43},[33,23258,16352],{"class":63},[33,23260,23261],{"class":3632}," Phone\n",[33,23263,23264],{"class":35,"line":130},[33,23265,3228],{"class":59},[33,23267,23268],{"class":35,"line":146},[33,23269,23270],{"class":59},"public：\n",[33,23272,23273],{"class":35,"line":267},[33,23274,23275],{"class":87},"    \u002F\u002F 赋值(构造函数)\n",[33,23277,23278,23281,23283,23285,23288],{"class":35,"line":275},[33,23279,23280],{"class":3632},"    Phone",[33,23282,109],{"class":59},[33,23284,16575],{"class":3632},[33,23286,23287],{"class":6877}," pName",[33,23289,157],{"class":59},[33,23291,23292],{"class":35,"line":392},[33,23293,3698],{"class":59},[33,23295,23296,23299,23301],{"class":35,"line":406},[33,23297,23298],{"class":59},"        m_pName",[33,23300,64],{"class":63},[33,23302,23303],{"class":59},"pName;\n",[33,23305,23306,23308,23310,23313],{"class":35,"line":418},[33,23307,5114],{"class":59},[33,23309,2859],{"class":63},[33,23311,23312],{"class":117},"\"Phone的构造函数调用\"",[33,23314,2976],{"class":59},[33,23316,23317],{"class":35,"line":425},[33,23318,3855],{"class":59},[33,23320,23321,23324],{"class":35,"line":1147},[33,23322,23323],{"class":3632},"    ~Phone",[33,23325,943],{"class":59},[33,23327,23328],{"class":35,"line":1329},[33,23329,3698],{"class":59},[33,23331,23332,23334,23336,23339,23341],{"class":35,"line":1341},[33,23333,5114],{"class":59},[33,23335,2859],{"class":63},[33,23337,23338],{"class":117},"\"Phone析构函数调用\"",[33,23340,2859],{"class":63},[33,23342,2881],{"class":59},[33,23344,23345],{"class":35,"line":1348},[33,23346,3855],{"class":59},[33,23348,23349],{"class":35,"line":1529},[33,23350,23351],{"class":87},"    \u002F\u002F\n",[33,23353,23354],{"class":35,"line":1546},[33,23355,23356],{"class":59},"    string m_PName;\n",[33,23358,23359],{"class":35,"line":1551},[33,23360,5657],{"class":59},[33,23362,23363,23365],{"class":35,"line":1566},[33,23364,16352],{"class":63},[33,23366,16827],{"class":3632},[33,23368,23369],{"class":35,"line":1578},[33,23370,3228],{"class":59},[33,23372,23373],{"class":35,"line":1583},[33,23374,16374],{"class":63},[33,23376,23377],{"class":35,"line":3369},[33,23378,18649],{"class":87},[33,23380,23381,23383,23385,23387,23389,23391,23393,23396,23399,23401,23404,23407],{"class":35,"line":3396},[33,23382,20174],{"class":3632},[33,23384,109],{"class":59},[33,23386,16575],{"class":3632},[33,23388,16578],{"class":6877},[33,23390,2196],{"class":59},[33,23392,16575],{"class":3632},[33,23394,23395],{"class":6877}," pname",[33,23397,23398],{"class":59},"):",[33,23400,16668],{"class":3632},[33,23402,23403],{"class":59},"(name),m_phone.",[33,23405,23406],{"class":3632},"m_PName",[33,23408,23409],{"class":59},"(pname) \n",[33,23411,23412],{"class":35,"line":3401},[33,23413,3698],{"class":59},[33,23415,23416,23418,23420,23423],{"class":35,"line":3418},[33,23417,5114],{"class":59},[33,23419,2859],{"class":63},[33,23421,23422],{"class":117},"\"Person的构造函数调用\"",[33,23424,2976],{"class":59},[33,23426,23427],{"class":35,"line":3423},[33,23428,3855],{"class":59},[33,23430,23431,23433],{"class":35,"line":3428},[33,23432,20207],{"class":3632},[33,23434,943],{"class":59},[33,23436,23437],{"class":35,"line":3433},[33,23438,3698],{"class":59},[33,23440,23441,23443,23445,23448,23450],{"class":35,"line":3447},[33,23442,5114],{"class":59},[33,23444,2859],{"class":63},[33,23446,23447],{"class":117},"\"Person析构函数调用\"",[33,23449,2859],{"class":63},[33,23451,2881],{"class":59},[33,23453,23454],{"class":35,"line":3452},[33,23455,3855],{"class":59},[33,23457,23458],{"class":35,"line":4243},[33,23459,9440],{"class":87},[33,23461,23462],{"class":35,"line":4257},[33,23463,16550],{"class":59},[33,23465,23466],{"class":35,"line":4265},[33,23467,23468],{"class":87},"    \u002F\u002F手机\n",[33,23470,23471],{"class":35,"line":4270},[33,23472,23473],{"class":59},"    Phone m_Phone;\n",[33,23475,23476],{"class":35,"line":4276},[33,23477,5657],{"class":59},[33,23479,23480,23482,23484],{"class":35,"line":4282},[33,23481,7025],{"class":63},[33,23483,7249],{"class":3632},[33,23485,943],{"class":59},[33,23487,23488],{"class":35,"line":4287},[33,23489,3228],{"class":59},[33,23491,23492,23494,23496,23498,23500,23502,23505],{"class":35,"line":9608},[33,23493,21086],{"class":59},[33,23495,19],{"class":3632},[33,23497,109],{"class":59},[33,23499,9576],{"class":117},[33,23501,2196],{"class":59},[33,23503,23504],{"class":117},"\"安卓\"",[33,23506,4385],{"class":59},[33,23508,23509,23511,23513,23516,23518,23521,23523],{"class":35,"line":9632},[33,23510,3233],{"class":59},[33,23512,2859],{"class":63},[33,23514,23515],{"class":59},"p.Name",[33,23517,2859],{"class":63},[33,23519,23520],{"class":117},"\"拿着：\"",[33,23522,2859],{"class":63},[33,23524,23525],{"class":59},"p.m_phone.m_PName;\n",[33,23527,23528],{"class":35,"line":9637},[33,23529,3247],{"class":59},[33,23531,23532,23534,23536],{"class":35,"line":9643},[33,23533,1828],{"class":63},[33,23535,3642],{"class":3632},[33,23537,943],{"class":59},[33,23539,23540],{"class":35,"line":9670},[33,23541,3228],{"class":59},[33,23543,23544,23546],{"class":35,"line":9675},[33,23545,7294],{"class":3632},[33,23547,7297],{"class":59},[33,23549,23550],{"class":35,"line":9681},[33,23551,3247],{"class":59},[19,23553,160],{},[23,23555,23557],{"className":1814,"code":23556,"language":1816,"meta":28,"style":28},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[30,23558,23559,23564],{"__ignoreMap":28},[33,23560,23561],{"class":35,"line":36},[33,23562,23563],{"class":87},"    \u002F\u002F不需要写这个：\n",[33,23565,23566],{"class":35,"line":43},[33,23567,23568],{"class":87},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23570,23571],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[23,23573,23575],{"className":1814,"code":23574,"language":1816,"meta":28,"style":28},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[30,23576,23577],{"__ignoreMap":28},[33,23578,23579,23581,23584,23586,23589,23592],{"class":35,"line":36},[33,23580,20701],{"class":3632},[33,23582,23583],{"class":59},"(string name.string pname):",[33,23585,16668],{"class":3632},[33,23587,23588],{"class":59},"(name),",[33,23590,23591],{"class":3632},"m_phone",[33,23593,23594],{"class":59},"(pname) {}\n",[19,23596,23597,23598,64,23601],{},"采用的是隐式转换法，实际为如下：\n",[30,23599,23600],{},"m_phone(pname)",[30,23602,23603],{},"Phone m_phone=pname",[19,23605,23606,23609],{},[1968,23607,23608],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23611,23612],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[633,23614,23616],{"id":23615},"_828静态对象","8.2.8静态对象",[19,23618,23619],{},"静态对象在成员对象前static，称为静态对象",[19,23621,23622],{},"静态对象分为两类：",[162,23624,23625],{},[165,23626,23627],{},"静态成员变量",[2822,23629,23630,23633,23636],{},[165,23631,23632],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[165,23634,23635],{},"②在编译阶段分配内存",[165,23637,23638],{},"③类内声明，类外初始化",[162,23640,23641],{"start":43},[165,23642,23643],{},"静态成员函数",[2822,23645,23646,23649],{},[165,23647,23648],{},"①所有对象共享同一个函数",[165,23650,23651],{},"②静态成员函数只能访问静态成员变量",[23653,23654,23656],"h4",{"id":23655},"_8281静态成员变量","8.2.8.1静态成员变量",[23,23658,23660],{"className":1814,"code":23659,"language":1816,"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,23661,23662,23668,23678,23684,23688,23692,23697,23702,23707,23715,23719,23723,23727,23735,23739,23743,23748,23761,23765,23773,23777,23783],{"__ignoreMap":28},[33,23663,23664,23666],{"class":35,"line":36},[33,23665,3618],{"class":63},[33,23667,3621],{"class":117},[33,23669,23670,23672,23674,23676],{"class":35,"line":43},[33,23671,3626],{"class":63},[33,23673,3629],{"class":63},[33,23675,3633],{"class":3632},[33,23677,2976],{"class":59},[33,23679,23680,23682],{"class":35,"line":130},[33,23681,16352],{"class":63},[33,23683,16827],{"class":3632},[33,23685,23686],{"class":35,"line":146},[33,23687,3228],{"class":59},[33,23689,23690],{"class":35,"line":267},[33,23691,16374],{"class":63},[33,23693,23694],{"class":35,"line":275},[33,23695,23696],{"class":87},"    \u002F\u002F非静态成员变量\n",[33,23698,23699],{"class":35,"line":392},[33,23700,23701],{"class":87},"    \u002F\u002F int m_A;\n",[33,23703,23704],{"class":35,"line":406},[33,23705,23706],{"class":87},"    \u002F\u002F定义静态成员变量\n",[33,23708,23709,23711,23713],{"class":35,"line":418},[33,23710,12678],{"class":63},[33,23712,106],{"class":63},[33,23714,23047],{"class":59},[33,23716,23717],{"class":35,"line":425},[33,23718,127],{"emptyLinePlaceholder":126},[33,23720,23721],{"class":35,"line":1147},[33,23722,127],{"emptyLinePlaceholder":126},[33,23724,23725],{"class":35,"line":1329},[33,23726,5657],{"class":59},[33,23728,23729,23731,23733],{"class":35,"line":1341},[33,23730,7025],{"class":63},[33,23732,7249],{"class":3632},[33,23734,943],{"class":59},[33,23736,23737],{"class":35,"line":1348},[33,23738,3228],{"class":59},[33,23740,23741],{"class":35,"line":1529},[33,23742,16969],{"class":59},[33,23744,23745],{"class":35,"line":1546},[33,23746,23747],{"class":87},"    \u002F\u002F输出类成员变量这块内存\n",[33,23749,23750,23752,23754,23757,23759],{"class":35,"line":1551},[33,23751,3233],{"class":59},[33,23753,2859],{"class":63},[33,23755,23756],{"class":59},"p.m_A",[33,23758,2859],{"class":63},[33,23760,2881],{"class":59},[33,23762,23763],{"class":35,"line":1566},[33,23764,3247],{"class":59},[33,23766,23767,23769,23771],{"class":35,"line":1578},[33,23768,1828],{"class":63},[33,23770,3642],{"class":3632},[33,23772,943],{"class":59},[33,23774,23775],{"class":35,"line":1583},[33,23776,3228],{"class":59},[33,23778,23779,23781],{"class":35,"line":3369},[33,23780,7294],{"class":3632},[33,23782,943],{"class":59},[33,23784,23785],{"class":35,"line":3396},[33,23786,3247],{"class":59},[19,23788,23789],{},"此时输出是报错的：无法解析外部命令",[19,23791,23792],{},"解决这一问题：必须用到类内声明，类外初始化操作",[23,23794,23796],{"className":1814,"code":23795,"language":1816,"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,23797,23798,23804,23814,23820,23824,23828,23833,23841,23845,23850,23865,23873,23877,23881,23886,23891,23903,23908,23919,23924,23929,23942,23946,23954,23958,23964],{"__ignoreMap":28},[33,23799,23800,23802],{"class":35,"line":36},[33,23801,3618],{"class":63},[33,23803,3621],{"class":117},[33,23805,23806,23808,23810,23812],{"class":35,"line":43},[33,23807,3626],{"class":63},[33,23809,3629],{"class":63},[33,23811,3633],{"class":3632},[33,23813,2976],{"class":59},[33,23815,23816,23818],{"class":35,"line":130},[33,23817,16352],{"class":63},[33,23819,16827],{"class":3632},[33,23821,23822],{"class":35,"line":146},[33,23823,3228],{"class":59},[33,23825,23826],{"class":35,"line":267},[33,23827,16374],{"class":63},[33,23829,23830],{"class":35,"line":275},[33,23831,23832],{"class":87},"    \u002F\u002F类内声明\n",[33,23834,23835,23837,23839],{"class":35,"line":392},[33,23836,12678],{"class":63},[33,23838,106],{"class":63},[33,23840,23047],{"class":59},[33,23842,23843],{"class":35,"line":406},[33,23844,5657],{"class":59},[33,23846,23847],{"class":35,"line":418},[33,23848,23849],{"class":87},"\u002F\u002F类外初始化\n",[33,23851,23852,23854,23856,23859,23861,23863],{"class":35,"line":425},[33,23853,1828],{"class":63},[33,23855,17225],{"class":3632},[33,23857,23858],{"class":59},"::m_A",[33,23860,64],{"class":63},[33,23862,2264],{"class":39},[33,23864,2976],{"class":59},[33,23866,23867,23869,23871],{"class":35,"line":1147},[33,23868,7025],{"class":63},[33,23870,7249],{"class":3632},[33,23872,943],{"class":59},[33,23874,23875],{"class":35,"line":1329},[33,23876,3228],{"class":59},[33,23878,23879],{"class":35,"line":1341},[33,23880,16969],{"class":59},[33,23882,23883],{"class":35,"line":1348},[33,23884,23885],{"class":87},"    \u002F\u002F访问变量的原内存空间\n",[33,23887,23888],{"class":35,"line":1529},[33,23889,23890],{"class":87},"    \u002F\u002F100\n",[33,23892,23893,23895,23897,23899,23901],{"class":35,"line":1546},[33,23894,3233],{"class":59},[33,23896,2859],{"class":63},[33,23898,23756],{"class":59},[33,23900,2859],{"class":63},[33,23902,2881],{"class":59},[33,23904,23905],{"class":35,"line":1551},[33,23906,23907],{"class":59},"    Person p2;\n",[33,23909,23910,23913,23915,23917],{"class":35,"line":1566},[33,23911,23912],{"class":59},"    p2.m_A",[33,23914,64],{"class":63},[33,23916,3391],{"class":39},[33,23918,2976],{"class":59},[33,23920,23921],{"class":35,"line":1578},[33,23922,23923],{"class":87},"    \u002F\u002F继续访问这片空间\n",[33,23925,23926],{"class":35,"line":1583},[33,23927,23928],{"class":87},"    \u002F\u002F200\n",[33,23930,23931,23933,23935,23938,23940],{"class":35,"line":3369},[33,23932,3233],{"class":59},[33,23934,2859],{"class":63},[33,23936,23937],{"class":59},"p2.m_A",[33,23939,2859],{"class":63},[33,23941,2881],{"class":59},[33,23943,23944],{"class":35,"line":3396},[33,23945,3247],{"class":59},[33,23947,23948,23950,23952],{"class":35,"line":3401},[33,23949,1828],{"class":63},[33,23951,3642],{"class":3632},[33,23953,943],{"class":59},[33,23955,23956],{"class":35,"line":3418},[33,23957,3228],{"class":59},[33,23959,23960,23962],{"class":35,"line":3423},[33,23961,7294],{"class":3632},[33,23963,7297],{"class":59},[33,23965,23966],{"class":35,"line":3428},[33,23967,3247],{"class":59},[19,23969,23970],{},[1968,23971,23972],{},"静态变量的访问",[23,23974,23976],{"className":1814,"code":23975,"language":1816,"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,23977,23978,23984,23994,24000,24004,24008,24012,24020,24024,24029,24037,24041,24045,24059,24074,24082,24086,24091,24096,24101,24106,24118,24123,24128,24142,24159,24163,24171,24175,24181],{"__ignoreMap":28},[33,23979,23980,23982],{"class":35,"line":36},[33,23981,3618],{"class":63},[33,23983,3621],{"class":117},[33,23985,23986,23988,23990,23992],{"class":35,"line":43},[33,23987,3626],{"class":63},[33,23989,3629],{"class":63},[33,23991,3633],{"class":3632},[33,23993,2976],{"class":59},[33,23995,23996,23998],{"class":35,"line":130},[33,23997,16352],{"class":63},[33,23999,16827],{"class":3632},[33,24001,24002],{"class":35,"line":146},[33,24003,3228],{"class":59},[33,24005,24006],{"class":35,"line":267},[33,24007,16374],{"class":63},[33,24009,24010],{"class":35,"line":275},[33,24011,23832],{"class":87},[33,24013,24014,24016,24018],{"class":35,"line":392},[33,24015,12678],{"class":63},[33,24017,106],{"class":63},[33,24019,23047],{"class":59},[33,24021,24022],{"class":35,"line":406},[33,24023,16878],{"class":63},[33,24025,24026],{"class":35,"line":418},[33,24027,24028],{"class":87},"    \u002F\u002F静态成员变量也是有访问权限的\n",[33,24030,24031,24033,24035],{"class":35,"line":425},[33,24032,12678],{"class":63},[33,24034,106],{"class":63},[33,24036,23054],{"class":59},[33,24038,24039],{"class":35,"line":1147},[33,24040,5657],{"class":59},[33,24042,24043],{"class":35,"line":1329},[33,24044,23849],{"class":87},[33,24046,24047,24049,24051,24053,24055,24057],{"class":35,"line":1341},[33,24048,1828],{"class":63},[33,24050,17225],{"class":3632},[33,24052,23858],{"class":59},[33,24054,64],{"class":63},[33,24056,2264],{"class":39},[33,24058,2976],{"class":59},[33,24060,24061,24063,24065,24068,24070,24072],{"class":35,"line":1348},[33,24062,1828],{"class":63},[33,24064,17225],{"class":3632},[33,24066,24067],{"class":59},"::m_B",[33,24069,64],{"class":63},[33,24071,2517],{"class":39},[33,24073,2976],{"class":59},[33,24075,24076,24078,24080],{"class":35,"line":1529},[33,24077,7025],{"class":63},[33,24079,7318],{"class":3632},[33,24081,943],{"class":59},[33,24083,24084],{"class":35,"line":1546},[33,24085,3228],{"class":59},[33,24087,24088],{"class":35,"line":1551},[33,24089,24090],{"class":87},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[33,24092,24093],{"class":35,"line":1566},[33,24094,24095],{"class":87},"    \u002F\u002F静态成员变量有两种访问方式：\n",[33,24097,24098],{"class":35,"line":1578},[33,24099,24100],{"class":87},"    \u002F\u002F1.通过对象进行访问\n",[33,24102,24103],{"class":35,"line":1583},[33,24104,24105],{"class":59},"    Person p;  \n",[33,24107,24108,24110,24112,24114,24116],{"class":35,"line":3369},[33,24109,3233],{"class":59},[33,24111,2859],{"class":63},[33,24113,23756],{"class":59},[33,24115,2859],{"class":63},[33,24117,2881],{"class":59},[33,24119,24120],{"class":35,"line":3396},[33,24121,24122],{"class":87},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[33,24124,24125],{"class":35,"line":3401},[33,24126,24127],{"class":87},"    \u002F\u002F2.通过类名进行访问\n",[33,24129,24130,24132,24134,24136,24138,24140],{"class":35,"line":3418},[33,24131,3233],{"class":59},[33,24133,2859],{"class":63},[33,24135,20701],{"class":3632},[33,24137,23858],{"class":59},[33,24139,2859],{"class":63},[33,24141,2881],{"class":59},[33,24143,24144,24146,24148,24150,24152,24154,24156],{"class":35,"line":3423},[33,24145,3233],{"class":59},[33,24147,2859],{"class":63},[33,24149,20701],{"class":3632},[33,24151,24067],{"class":59},[33,24153,2859],{"class":63},[33,24155,2924],{"class":59},[33,24157,24158],{"class":87}," \u002F\u002F没有访问权限，报错\n",[33,24160,24161],{"class":35,"line":3428},[33,24162,3247],{"class":59},[33,24164,24165,24167,24169],{"class":35,"line":3433},[33,24166,1828],{"class":63},[33,24168,3642],{"class":3632},[33,24170,943],{"class":59},[33,24172,24173],{"class":35,"line":3447},[33,24174,3228],{"class":59},[33,24176,24177,24179],{"class":35,"line":3452},[33,24178,7363],{"class":3632},[33,24180,7297],{"class":59},[33,24182,24183],{"class":35,"line":4243},[33,24184,3247],{"class":59},[23653,24186,24188],{"id":24187},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24190,24191],{},"1.静态成员函数定义与访问",[23,24193,24195],{"className":1814,"code":24194,"language":1816,"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,24196,24197,24203,24207,24211,24216,24227,24231,24245,24249,24253,24261,24265,24270,24275,24279,24287,24292,24302],{"__ignoreMap":28},[33,24198,24199,24201],{"class":35,"line":36},[33,24200,16352],{"class":63},[33,24202,16827],{"class":3632},[33,24204,24205],{"class":35,"line":43},[33,24206,3228],{"class":59},[33,24208,24209],{"class":35,"line":130},[33,24210,16374],{"class":63},[33,24212,24213],{"class":35,"line":146},[33,24214,24215],{"class":87},"    \u002F\u002F在公共权限下定义静态成员函数\n",[33,24217,24218,24220,24223,24225],{"class":35,"line":267},[33,24219,12678],{"class":63},[33,24221,24222],{"class":63}," void",[33,24224,13043],{"class":3632},[33,24226,943],{"class":59},[33,24228,24229],{"class":35,"line":275},[33,24230,3698],{"class":59},[33,24232,24233,24236,24238,24241,24243],{"class":35,"line":392},[33,24234,24235],{"class":59},"        coout",[33,24237,2859],{"class":63},[33,24239,24240],{"class":117},"\"静态成员函数的调用\"",[33,24242,2859],{"class":63},[33,24244,2881],{"class":59},[33,24246,24247],{"class":35,"line":406},[33,24248,3855],{"class":59},[33,24250,24251],{"class":35,"line":418},[33,24252,5657],{"class":59},[33,24254,24255,24257,24259],{"class":35,"line":425},[33,24256,7025],{"class":63},[33,24258,7249],{"class":3632},[33,24260,943],{"class":59},[33,24262,24263],{"class":35,"line":1147},[33,24264,3228],{"class":59},[33,24266,24267],{"class":35,"line":1329},[33,24268,24269],{"class":87},"    \u002F\u002F静态成员函数的调用方式:\n",[33,24271,24272],{"class":35,"line":1341},[33,24273,24274],{"class":87},"    \u002F\u002F1.通过对象访问\n",[33,24276,24277],{"class":35,"line":1348},[33,24278,16969],{"class":59},[33,24280,24281,24283,24285],{"class":35,"line":1529},[33,24282,17521],{"class":59},[33,24284,13209],{"class":3632},[33,24286,7297],{"class":59},[33,24288,24289],{"class":35,"line":1546},[33,24290,24291],{"class":87},"    \u002F\u002F2.通过类名访问\n",[33,24293,24294,24296,24298,24300],{"class":35,"line":1551},[33,24295,20174],{"class":3632},[33,24297,19387],{"class":59},[33,24299,13209],{"class":3632},[33,24301,7297],{"class":59},[33,24303,24304],{"class":35,"line":1566},[33,24305,3247],{"class":59},[162,24307,24308],{"start":43},[165,24309,24310],{},"静态成员函数只能访问静态成员变量",[23,24312,24314],{"className":1814,"code":24313,"language":1816,"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,24315,24316,24322,24326,24330,24334,24344,24348,24362,24367,24379,24383,24394,24404,24408,24412,24416,24426,24430,24443,24447,24451,24455,24459,24473,24481,24485,24489,24493,24497,24505,24509,24519,24524,24528,24536,24540,24546],{"__ignoreMap":28},[33,24317,24318,24320],{"class":35,"line":36},[33,24319,16352],{"class":63},[33,24321,16827],{"class":3632},[33,24323,24324],{"class":35,"line":43},[33,24325,3228],{"class":59},[33,24327,24328],{"class":35,"line":130},[33,24329,16374],{"class":63},[33,24331,24332],{"class":35,"line":146},[33,24333,24215],{"class":87},[33,24335,24336,24338,24340,24342],{"class":35,"line":267},[33,24337,12678],{"class":63},[33,24339,24222],{"class":63},[33,24341,13043],{"class":3632},[33,24343,943],{"class":59},[33,24345,24346],{"class":35,"line":275},[33,24347,3698],{"class":59},[33,24349,24350,24353,24355,24357,24359],{"class":35,"line":392},[33,24351,24352],{"class":59},"        m_A",[33,24354,64],{"class":63},[33,24356,2129],{"class":39},[33,24358,1876],{"class":59},[33,24360,24361],{"class":87}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[33,24363,24364],{"class":35,"line":406},[33,24365,24366],{"class":87},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[33,24368,24369,24371,24373,24375,24377],{"class":35,"line":418},[33,24370,24235],{"class":59},[33,24372,2859],{"class":63},[33,24374,24240],{"class":117},[33,24376,2859],{"class":63},[33,24378,2881],{"class":59},[33,24380,24381],{"class":35,"line":425},[33,24382,3855],{"class":59},[33,24384,24385,24387,24389,24391],{"class":35,"line":1147},[33,24386,12678],{"class":63},[33,24388,106],{"class":63},[33,24390,17104],{"class":59},[33,24392,24393],{"class":87}," \u002F\u002F静态成员变量\n",[33,24395,24396,24398,24401],{"class":35,"line":1329},[33,24397,3653],{"class":63},[33,24399,24400],{"class":59}," m_B;",[33,24402,24403],{"class":87}," \u002F\u002F非静态成员变量\n",[33,24405,24406],{"class":35,"line":1341},[33,24407,127],{"emptyLinePlaceholder":126},[33,24409,24410],{"class":35,"line":1348},[33,24411,16878],{"class":63},[33,24413,24414],{"class":35,"line":1529},[33,24415,24028],{"class":87},[33,24417,24418,24420,24422,24424],{"class":35,"line":1546},[33,24419,12678],{"class":63},[33,24421,24222],{"class":63},[33,24423,15276],{"class":3632},[33,24425,943],{"class":59},[33,24427,24428],{"class":35,"line":1551},[33,24429,3698],{"class":59},[33,24431,24432,24434,24436,24439,24441],{"class":35,"line":1566},[33,24433,5114],{"class":59},[33,24435,2859],{"class":63},[33,24437,24438],{"class":117},"\"这是私有权限下的静态函数调用\"",[33,24440,2859],{"class":63},[33,24442,2881],{"class":59},[33,24444,24445],{"class":35,"line":1578},[33,24446,3855],{"class":59},[33,24448,24449],{"class":35,"line":1583},[33,24450,127],{"emptyLinePlaceholder":126},[33,24452,24453],{"class":35,"line":3369},[33,24454,127],{"emptyLinePlaceholder":126},[33,24456,24457],{"class":35,"line":3396},[33,24458,5657],{"class":59},[33,24460,24461,24463,24465,24467,24469,24471],{"class":35,"line":3401},[33,24462,1828],{"class":63},[33,24464,17225],{"class":3632},[33,24466,23858],{"class":59},[33,24468,64],{"class":63},[33,24470,2010],{"class":39},[33,24472,2976],{"class":59},[33,24474,24475,24477,24479],{"class":35,"line":3418},[33,24476,7025],{"class":63},[33,24478,7249],{"class":3632},[33,24480,943],{"class":59},[33,24482,24483],{"class":35,"line":3423},[33,24484,3228],{"class":59},[33,24486,24487],{"class":35,"line":3428},[33,24488,24269],{"class":87},[33,24490,24491],{"class":35,"line":3433},[33,24492,24274],{"class":87},[33,24494,24495],{"class":35,"line":3447},[33,24496,16969],{"class":59},[33,24498,24499,24501,24503],{"class":35,"line":3452},[33,24500,17521],{"class":59},[33,24502,13209],{"class":3632},[33,24504,7297],{"class":59},[33,24506,24507],{"class":35,"line":4243},[33,24508,24291],{"class":87},[33,24510,24511,24513,24515,24517],{"class":35,"line":4257},[33,24512,20174],{"class":3632},[33,24514,19387],{"class":59},[33,24516,13209],{"class":3632},[33,24518,7297],{"class":59},[33,24520,24521],{"class":35,"line":4265},[33,24522,24523],{"class":87},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[33,24525,24526],{"class":35,"line":4270},[33,24527,3247],{"class":59},[33,24529,24530,24532,24534],{"class":35,"line":4276},[33,24531,1828],{"class":63},[33,24533,3642],{"class":3632},[33,24535,943],{"class":59},[33,24537,24538],{"class":35,"line":4282},[33,24539,3228],{"class":59},[33,24541,24542,24544],{"class":35,"line":4287},[33,24543,7294],{"class":3632},[33,24545,7297],{"class":59},[33,24547,24548],{"class":35,"line":9608},[33,24549,3247],{"class":59},[633,24551,24553],{"id":24552},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23653,24555,24557],{"id":24556},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24559,24560],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24562,24563],{},"只有非静态成员变量才属于类的对象上",[24565,24566,24568],"h5",{"id":24567},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[23,24570,24572],{"className":1814,"code":24571,"language":1816,"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,24573,24574,24581,24591,24597,24601,24605,24609,24617,24621,24625,24648,24652,24660,24664,24670],{"__ignoreMap":28},[33,24575,24576,24578],{"class":35,"line":36},[33,24577,3618],{"class":63},[33,24579,24580],{"class":117},"\u003Ciostraem>\n",[33,24582,24583,24585,24587,24589],{"class":35,"line":43},[33,24584,3626],{"class":63},[33,24586,3629],{"class":63},[33,24588,3633],{"class":3632},[33,24590,2976],{"class":59},[33,24592,24593,24595],{"class":35,"line":130},[33,24594,16352],{"class":63},[33,24596,16827],{"class":3632},[33,24598,24599],{"class":35,"line":146},[33,24600,3228],{"class":59},[33,24602,24603],{"class":35,"line":267},[33,24604,127],{"emptyLinePlaceholder":126},[33,24606,24607],{"class":35,"line":275},[33,24608,5657],{"class":59},[33,24610,24611,24613,24615],{"class":35,"line":392},[33,24612,7025],{"class":63},[33,24614,7249],{"class":3632},[33,24616,943],{"class":59},[33,24618,24619],{"class":35,"line":406},[33,24620,3228],{"class":59},[33,24622,24623],{"class":35,"line":418},[33,24624,16969],{"class":59},[33,24626,24627,24629,24631,24634,24636,24639,24641,24643,24645],{"class":35,"line":425},[33,24628,3233],{"class":59},[33,24630,2859],{"class":63},[33,24632,24633],{"class":117},"\"size of p=\"",[33,24635,2859],{"class":63},[33,24637,24638],{"class":3632},"sizeoif",[33,24640,8199],{"class":59},[33,24642,2859],{"class":63},[33,24644,2924],{"class":59},[33,24646,24647],{"class":87}," \u002F\u002F查看这个空类的占用的内存空间\n",[33,24649,24650],{"class":35,"line":1147},[33,24651,3247],{"class":59},[33,24653,24654,24656,24658],{"class":35,"line":1329},[33,24655,1828],{"class":63},[33,24657,3642],{"class":3632},[33,24659,943],{"class":59},[33,24661,24662],{"class":35,"line":1341},[33,24663,3228],{"class":59},[33,24665,24666,24668],{"class":35,"line":1348},[33,24667,7294],{"class":3632},[33,24669,7297],{"class":59},[33,24671,24672],{"class":35,"line":1529},[33,24673,3247],{"class":59},[19,24675,24676],{},"输出结果为：size of p=1",[19,24678,24679],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24681,24682],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24565,24684,24686],{"id":24685},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[23,24688,24690],{"className":1814,"code":24689,"language":1816,"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,24691,24692,24698,24708,24716,24720,24729,24733,24741,24745,24749,24768,24772,24776,24784,24788,24794],{"__ignoreMap":28},[33,24693,24694,24696],{"class":35,"line":36},[33,24695,3618],{"class":63},[33,24697,3621],{"class":117},[33,24699,24700,24702,24704,24706],{"class":35,"line":43},[33,24701,3626],{"class":63},[33,24703,3629],{"class":63},[33,24705,3633],{"class":3632},[33,24707,2976],{"class":59},[33,24709,24710,24712,24714],{"class":35,"line":130},[33,24711,16352],{"class":63},[33,24713,17225],{"class":3632},[33,24715,4340],{"class":59},[33,24717,24718],{"class":35,"line":146},[33,24719,3228],{"class":59},[33,24721,24722,24724,24726],{"class":35,"line":267},[33,24723,3653],{"class":63},[33,24725,17104],{"class":59},[33,24727,24728],{"class":87},"\u002F\u002F非静态成员变量\n",[33,24730,24731],{"class":35,"line":275},[33,24732,5657],{"class":59},[33,24734,24735,24737,24739],{"class":35,"line":392},[33,24736,7025],{"class":63},[33,24738,7249],{"class":3632},[33,24740,943],{"class":59},[33,24742,24743],{"class":35,"line":406},[33,24744,3228],{"class":59},[33,24746,24747],{"class":35,"line":418},[33,24748,16969],{"class":59},[33,24750,24751,24753,24755,24757,24759,24761,24763,24765],{"class":35,"line":425},[33,24752,3233],{"class":59},[33,24754,2859],{"class":63},[33,24756,24633],{"class":117},[33,24758,3055],{"class":63},[33,24760,8199],{"class":59},[33,24762,2859],{"class":63},[33,24764,2924],{"class":59},[33,24766,24767],{"class":87}," \u002F\u002F查看不是空对象时占用多少内存\n",[33,24769,24770],{"class":35,"line":1147},[33,24771,127],{"emptyLinePlaceholder":126},[33,24773,24774],{"class":35,"line":1329},[33,24775,3247],{"class":59},[33,24777,24778,24780,24782],{"class":35,"line":1341},[33,24779,1828],{"class":63},[33,24781,3642],{"class":3632},[33,24783,943],{"class":59},[33,24785,24786],{"class":35,"line":1348},[33,24787,3228],{"class":59},[33,24789,24790,24792],{"class":35,"line":1529},[33,24791,7294],{"class":3632},[33,24793,7297],{"class":59},[33,24795,24796],{"class":35,"line":1546},[33,24797,3247],{"class":59},[19,24799,24800],{},"输出结果：size of p=4",[19,24802,24803],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[162,24805,24806],{},[165,24807,24808],{},"如果加上非静态成员变量，Person类修改如下",[23,24810,24812],{"className":1814,"code":24811,"language":1816,"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,24813,24814,24820,24824,24830,24838,24842,24847],{"__ignoreMap":28},[33,24815,24816,24818],{"class":35,"line":36},[33,24817,16352],{"class":63},[33,24819,16827],{"class":3632},[33,24821,24822],{"class":35,"line":43},[33,24823,3228],{"class":59},[33,24825,24826,24828],{"class":35,"line":130},[33,24827,3653],{"class":63},[33,24829,23047],{"class":59},[33,24831,24832,24834,24836],{"class":35,"line":146},[33,24833,12678],{"class":63},[33,24835,106],{"class":63},[33,24837,23054],{"class":59},[33,24839,24840],{"class":35,"line":267},[33,24841,5657],{"class":59},[33,24843,24844],{"class":35,"line":275},[33,24845,24846],{"class":87},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[33,24848,24849,24851,24853,24855,24857,24859],{"class":35,"line":392},[33,24850,1828],{"class":63},[33,24852,17225],{"class":3632},[33,24854,24067],{"class":59},[33,24856,64],{"class":63},[33,24858,2010],{"class":39},[33,24860,2976],{"class":59},[19,24862,24863],{},"输出结果：4",[19,24865,24866],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[162,24868,24869],{"start":43},[165,24870,24871],{},"加上非静态成员函数",[23,24873,24875],{"className":1814,"code":24874,"language":1816,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[30,24876,24877,24884,24888,24894,24902,24906,24910,24914],{"__ignoreMap":28},[33,24878,24879,24881],{"class":35,"line":36},[33,24880,16352],{"class":63},[33,24882,24883],{"class":3632},"  Person\n",[33,24885,24886],{"class":35,"line":43},[33,24887,3228],{"class":59},[33,24889,24890,24892],{"class":35,"line":130},[33,24891,3653],{"class":63},[33,24893,23047],{"class":59},[33,24895,24896,24898,24900],{"class":35,"line":146},[33,24897,16567],{"class":63},[33,24899,13043],{"class":3632},[33,24901,943],{"class":59},[33,24903,24904],{"class":35,"line":267},[33,24905,3698],{"class":59},[33,24907,24908],{"class":35,"line":275},[33,24909,127],{"emptyLinePlaceholder":126},[33,24911,24912],{"class":35,"line":392},[33,24913,3855],{"class":59},[33,24915,24916],{"class":35,"line":406},[33,24917,5657],{"class":59},[19,24919,24920],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[162,24922,24923],{"start":130},[165,24924,24925],{},"加上静态成员函数",[23,24927,24929],{"className":1814,"code":24928,"language":1816,"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,24930,24931,24937,24941,24947,24955,24959,24963,24967,24978,24982,24986,24990],{"__ignoreMap":28},[33,24932,24933,24935],{"class":35,"line":36},[33,24934,16352],{"class":63},[33,24936,24883],{"class":3632},[33,24938,24939],{"class":35,"line":43},[33,24940,3228],{"class":59},[33,24942,24943,24945],{"class":35,"line":130},[33,24944,3653],{"class":63},[33,24946,23047],{"class":59},[33,24948,24949,24951,24953],{"class":35,"line":146},[33,24950,16567],{"class":63},[33,24952,13043],{"class":3632},[33,24954,943],{"class":59},[33,24956,24957],{"class":35,"line":267},[33,24958,3698],{"class":59},[33,24960,24961],{"class":35,"line":275},[33,24962,127],{"emptyLinePlaceholder":126},[33,24964,24965],{"class":35,"line":392},[33,24966,3855],{"class":59},[33,24968,24969,24971,24973,24976],{"class":35,"line":406},[33,24970,12678],{"class":63},[33,24972,24222],{"class":63},[33,24974,24975],{"class":3632}," func1",[33,24977,943],{"class":59},[33,24979,24980],{"class":35,"line":418},[33,24981,3698],{"class":59},[33,24983,24984],{"class":35,"line":425},[33,24985,127],{"emptyLinePlaceholder":126},[33,24987,24988],{"class":35,"line":1147},[33,24989,3855],{"class":59},[33,24991,24992],{"class":35,"line":1329},[33,24993,5657],{"class":59},[19,24995,24863],{},[19,24997,24998],{},"解释：静态成员函数也不属于类上",[1729,25000,9334],{},{"title":28,"searchDepth":43,"depth":43,"links":25002},[25003,25009],{"id":16303,"depth":43,"text":16304,"children":25004},[25005,25006,25007,25008],{"id":16307,"depth":130,"text":16308},{"id":17030,"depth":130,"text":17031},{"id":17202,"depth":130,"text":17203},{"id":17660,"depth":130,"text":17661},{"id":20032,"depth":43,"text":20033,"children":25010},[25011,25012,25013,25014,25015,25016,25017,25018,25019],{"id":20044,"depth":130,"text":20045},{"id":20337,"depth":130,"text":20338},{"id":20828,"depth":130,"text":20829},{"id":21925,"depth":130,"text":21926},{"id":22348,"depth":130,"text":22349},{"id":22827,"depth":130,"text":22828},{"id":23202,"depth":130,"text":23203},{"id":23615,"depth":130,"text":23616},{"id":24552,"depth":130,"text":24553},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16268,"description":25020},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25027,"title":1816,"body":25028,"description":1751,"extension":1752,"meta":25032,"navigation":126,"path":25034,"seo":25035,"stem":25036,"__hash__":25037},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25029,"toc":25030},[],{"title":28,"searchDepth":43,"depth":43,"links":25031},[],{"category":25033},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1816,"description":1751},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25039,"title":25040,"body":25041,"description":28,"extension":1752,"meta":25632,"navigation":126,"path":25633,"seo":25634,"stem":25635,"__hash__":25636},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25042,"toc":25614},[25043,25046,25050,25053,25056,25059,25077,25082,25085,25088,25091,25094,25099,25102,25107,25110,25113,25117,25120,25123,25129,25132,25150,25154,25158,25161,25166,25169,25173,25176,25189,25192,25196,25199,25202,25205,25230,25233,25242,25253,25268,25300,25304,25311,25319,25323,25326,25329,25334,25338,25341,25344,25349,25352,25356,25359,25362,25367,25370,25374,25379,25383,25450,25454,25457,25460,25463,25466,25469,25475,25496,25499,25513,25522,25526,25529,25532,25537,25540,25545,25550,25553,25556,25561,25566,25569,25574,25579,25582,25587,25592,25595,25598,25603,25606,25611],[10,25044,25040],{"id":25045},"_1强化学习基本认识",[14,25047,25049],{"id":25048},"_11什么是强化学习","1.1.什么是强化学习",[19,25051,25052],{},"强化学习有两部分组成：智能体和环境；",[19,25054,25055],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25057,25058],{},"强化学习与监督学习的区别:",[162,25060,25061,25064,25067,25070],{},[165,25062,25063],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[165,25065,25066],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[165,25068,25069],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[165,25071,25072,25073,25076],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[1968,25074,25075],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25078,25079],{},[3145,25080],{"alt":28,"src":25081},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25083,25084],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25086,25087],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25089,25090],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25092,25093],{},"获取奖励",[19,25095,25096],{},[3145,25097],{"alt":28,"src":25098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25100,25101],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25103,25104],{},[3145,25105],{"alt":28,"src":25106},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25108,25109],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25111,25112],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25114,25116],{"id":25115},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25118,25119],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25121,25122],{},"具身智能中的应用",[19,25124,25125,25128],{},[1968,25126,25127],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25130,25131],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25133,25134,25135,25138,25139,25142,25143,25146,25147],{},"机器人是",[1968,25136,25137],{},"躯体","，深度学习是",[1968,25140,25141],{},"神经元****网络","，VLA是",[1968,25144,25145],{},"通用的行为逻辑","，而强化学习是",[1968,25148,25149],{},"教练",[14,25151,25153],{"id":25152},"_13序列决策","1.3.序列决策",[633,25155,25157],{"id":25156},"_131智能体与环境","1.3.1.智能体与环境",[19,25159,25160],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25162,25163],{},[3145,25164],{"alt":28,"src":25165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25167,25168],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[633,25170,25172],{"id":25171},"_132奖励","1.3.2.奖励",[19,25174,25175],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25177,25178,25179,25188],{},"取某个策略的表现如何。强化学习的目的就是",[1968,25180,25181,25182,25187],{},"最大化",[1968,25183,25184],{},[1968,25185,25186],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25190,25191],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[633,25193,25195],{"id":25194},"_133序列决策","1.3.3.序列决策",[19,25197,25198],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25200,25201],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25203,25204],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25206,25207,25211,25212,25214,25215,25217,25218,25220,25221,15453,25224,15453,25227],{},[25208,25209,25210],"em",{},"Ht"," = ",[25208,25213,2413],{},"1*, a",[25208,25216,2036],{},", r",[25208,25219,2036],{},", . . . ,* ",[25208,25222,25223],{},"ot",[25208,25225,25226],{},", at ,",[25208,25228,25229],{},"rt",[19,25231,25232],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25234,25235,25211,25238,3332,25240,2247],{},[25208,25236,25237],{},"st",[25208,25239,999],{},[25208,25241,25210],{},[19,25243,25244,25245,25248,25249,25252],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[1968,25246,25247],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[1968,25250,25251],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25254,25255,25256,25259,25260,25263,25264,25267],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[1968,25257,25258],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[1968,25261,25262],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25208,25265,25266],{},"S, A, T, R, Ω, O, γ",")。",[19,25269,25270,25271,25273,25274,25276,25277,109,25279,25282,25283,25285,25286,109,25289,25292,25293,25295,25296,25299],{},"其中 ",[25208,25272,2506],{}," 表示状态空间，为隐变量，",[25208,25275,2051],{}," 为动作空间，",[25208,25278,2531],{},[25208,25280,25281],{},"s ′ |s, a",") 为状态转移概率，",[25208,25284,2481],{}," 为奖励函数，",[25208,25287,25288],{},"Ω",[25208,25290,25291],{},"o|s, a",") 为观测概率，",[25208,25294,2407],{}," 为观测空间，",[25208,25297,25298],{},"γ"," 为折扣因子。",[14,25301,25303],{"id":25302},"_14动作空间","1.4.动作空间",[19,25305,25306,25307,25310],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[1968,25308,25309],{},"动作空间"," ，动作空间分为:",[162,25312,25313,25316],{},[165,25314,25315],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[165,25317,25318],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25320,25322],{"id":25321},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25324,25325],{},"由策略、价值函数、模型三部分组成",[19,25327,25328],{},"这三者组成马尔可夫决策过程",[19,25330,25331],{},[3145,25332],{"alt":28,"src":25333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[633,25335,25337],{"id":25336},"_151策略","1.5.1.策略",[19,25339,25340],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25342,25343],{},"策略可分为两种：",[19,25345,25346],{},[3145,25347],{"alt":28,"src":25348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25350,25351],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[633,25353,25355],{"id":25354},"_152价值函数","1.5.2.价值函数",[19,25357,25358],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25360,25361],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25363,25364],{},[3145,25365],{"alt":28,"src":25366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25368,25369],{},"进入某个状态采取的最优动作可以通过Q函数得到",[633,25371,25373],{"id":25372},"_153模型","1.5.3.模型",[19,25375,25376],{},[3145,25377],{"alt":28,"src":25378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25380,25382],{"id":25381},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1956,25384,25385,25396],{},[1959,25386,25387],{},[1962,25388,25389,25393],{},[1965,25390,25392],{"align":25391},"left","类型",[1965,25394,25395],{"align":25391},"特点",[2003,25397,25398,25408,25418,25428,25440],{},[1962,25399,25400,25405],{},[2008,25401,25402],{"align":25391},[1968,25403,25404],{},"基于价值的智能体",[2008,25406,25407],{"align":25391},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1962,25409,25410,25415],{},[2008,25411,25412],{"align":25391},[1968,25413,25414],{},"基于策略的智能体",[2008,25416,25417],{"align":25391},"直接学习策略，没有学习价值函数",[1962,25419,25420,25425],{},[2008,25421,25422],{"align":25391},[1968,25423,25424],{},"演员-评论员智能体",[2008,25426,25427],{"align":25391},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1962,25429,25430,25435],{},[2008,25431,25432],{"align":25391},[1968,25433,25434],{},"有模型强化学习智能体",[2008,25436,25437],{"align":25391},[3145,25438],{"alt":28,"src":25439},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1962,25441,25442,25447],{},[2008,25443,25444],{"align":25391},[1968,25445,25446],{},"免模型强化学习智能体",[2008,25448,25449],{"align":25391},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25451,25453],{"id":25452},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25455,25456],{},"学习和规划是序列决策的两个基本问题",[19,25458,25459],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25461,25462],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25464,25465],{},"强化学习用到的库：Gym",[19,25467,25468],{},"Gym可以检验强化学习算法的优劣",[19,25470,25471,25474],{},[1968,25472,25473],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[23,25476,25480],{"className":25477,"code":25478,"language":25479,"meta":28,"style":28},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[30,25481,25482],{"__ignoreMap":28},[33,25483,25484,25487,25490,25493],{"class":35,"line":36},[33,25485,25486],{"class":3632},"pip",[33,25488,25489],{"class":117}," install",[33,25491,25492],{"class":117}," gym==",[33,25494,25495],{"class":39},"0.25.2\n",[19,25497,25498],{},"显示图形界面需要",[23,25500,25502],{"className":25477,"code":25501,"language":25479,"meta":28,"style":28},"pip install pygame\n",[30,25503,25504],{"__ignoreMap":28},[33,25505,25506,25508,25510],{"class":35,"line":36},[33,25507,25486],{"class":3632},[33,25509,25489],{"class":117},[33,25511,25512],{"class":117}," pygame\n",[19,25514,25515,25516],{},"有关Gym库的相关文档介绍：",[2057,25517,25521],{"href":25518,"rel":25519},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25520],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25523,25525],{"id":25524},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25527,25528],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25530,25531],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25533,25534],{},[3145,25535],{"alt":28,"src":25536},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25538,25539],{},"折扣率需要自己来设定",[19,25541,25542],{},[3145,25543],{"alt":28,"src":25544},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[162,25546,25547],{},[165,25548,25549],{},"状态转移函数：",[19,25551,25552],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25554,25555],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25557,25558],{},[3145,25559],{"alt":28,"src":25560},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[162,25562,25563],{"start":43},[165,25564,25565],{},"动作价值函数：",[19,25567,25568],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25570,25571],{},[3145,25572],{"alt":28,"src":25573},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[162,25575,25576],{"start":130},[165,25577,25578],{},"最优动作价值函数：",[19,25580,25581],{},"这个函数是对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,25583,25584],{},[3145,25585],{"alt":28,"src":25586},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[162,25588,25589],{"start":146},[165,25590,25591],{},"状态价值函数:",[19,25593,25594],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25596,25597],{},"它衡量的是“一个具体动作”的长期价值",[19,25599,25600],{},[3145,25601],{"alt":28,"src":25602},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25604,25605],{},"几个价值函数之间的比较：",[19,25607,25608],{},[3145,25609],{"alt":28,"src":25610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1729,25612,25613],{},"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":43,"depth":43,"links":25615},[25616,25617,25618,25623,25624,25629,25630,25631],{"id":25048,"depth":43,"text":25049},{"id":25115,"depth":43,"text":25116},{"id":25152,"depth":43,"text":25153,"children":25619},[25620,25621,25622],{"id":25156,"depth":130,"text":25157},{"id":25171,"depth":130,"text":25172},{"id":25194,"depth":130,"text":25195},{"id":25302,"depth":43,"text":25303},{"id":25321,"depth":43,"text":25322,"children":25625},[25626,25627,25628],{"id":25336,"depth":130,"text":25337},{"id":25354,"depth":130,"text":25355},{"id":25372,"depth":130,"text":25373},{"id":25381,"depth":43,"text":25382},{"id":25452,"depth":43,"text":25453},{"id":25524,"depth":43,"text":25525},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25040,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25638,"title":25639,"body":25640,"description":25647,"extension":1752,"meta":25658,"navigation":126,"path":25659,"seo":25660,"stem":25661,"__hash__":25662},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25641,"toc":25656},[25642,25645,25648,25653],[10,25643,25639],{"id":25644},"_2马尔可夫决策过程",[19,25646,25647],{},"这是强化学习的基本框架",[19,25649,25650],{},[3145,25651],{"alt":28,"src":25652},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25654,25655],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":28,"searchDepth":43,"depth":43,"links":25657},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25639,"description":25647},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25664,"title":25665,"body":25666,"description":28,"extension":1752,"meta":25782,"navigation":126,"path":25783,"seo":25784,"stem":25785,"__hash__":25786},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25667,"toc":25777},[25668,25671,25675,25678,25683,25688,25691,25696,25699,25704,25707,25711,25716,25719,25724,25729,25734,25737,25741,25746,25749,25754,25759,25764,25769,25772],[10,25669,25665],{"id":25670},"_3动作价值函数",[14,25672,25674],{"id":25673},"_31dqn","3.1.DQN",[19,25676,25677],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25679,25680],{},[3145,25681],{"alt":28,"src":25682},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25684,25685],{},[3145,25686],{"alt":28,"src":25687},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25689,25690],{},"DQN算法的描述：",[19,25692,25693],{},[3145,25694],{"alt":28,"src":25695},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25697,25698],{},"这里的Dense指的是全连接层",[19,25700,25701],{},[3145,25702],{"alt":28,"src":25703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25705,25706],{},"当前观测的状态为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,25708,25710],{"id":25709},"_32dqn的举例","3.2.DQN的举例",[19,25712,25713],{},[3145,25714],{"alt":28,"src":25715},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25717,25718],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25720,25721],{},[3145,25722],{"alt":28,"src":25723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25725,25726],{},[3145,25727],{"alt":28,"src":25728},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25730,25731],{},[3145,25732],{"alt":28,"src":25733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25735,25736],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25738,25740],{"id":25739},"_33td算法","3.3.TD算法",[19,25742,25743],{},[3145,25744],{"alt":28,"src":25745},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25747,25748],{},"强化学习TD算法公式的粗略解释：",[19,25750,25751],{},[3145,25752],{"alt":28,"src":25753},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25755,25756],{},[3145,25757],{"alt":28,"src":25758},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25760,25761],{},[3145,25762],{"alt":28,"src":25763},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25765,25766],{},[3145,25767],{"alt":28,"src":25768},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25770,25771],{},"TD算法总结：",[19,25773,25774],{},[3145,25775],{"alt":28,"src":25776},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":28,"searchDepth":43,"depth":43,"links":25778},[25779,25780,25781],{"id":25673,"depth":43,"text":25674},{"id":25709,"depth":43,"text":25710},{"id":25739,"depth":43,"text":25740},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25665,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25788,"title":25789,"body":25790,"description":28,"extension":1752,"meta":26023,"navigation":126,"path":26024,"seo":26025,"stem":26026,"__hash__":26027},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25791,"toc":26019},[25792,25795,25799,25802,25805,25810,25815,25818,25823,25828,25831,25836,25839,25844,25847,25852,25855,25860,25863,25868,25873,25876,25881,25884,25887,25892,25895,25900,25905,25909,25912,25915,25920,25925,25928,25933,25938,25941,25946,25949,25952,25957,25960,25965,25968,25973,25978,25981,25986,25991,25994,25999,26002,26007,26010],[10,25793,25789],{"id":25794},"_4策略学习",[14,25796,25798],{"id":25797},"_41概念描述","4.1.概念描述",[19,25800,25801],{},"用神经网络（策略网络）近似策略函数",[19,25803,25804],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25806,25807],{},[3145,25808],{"alt":28,"src":25809},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25811,25812],{},[3145,25813],{"alt":28,"src":25814},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25816,25817],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25819,25820],{},[3145,25821],{"alt":28,"src":25822},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25824,25825],{},[3145,25826],{"alt":28,"src":25827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25829,25830],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25832,25833],{},[3145,25834],{"alt":28,"src":25835},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25837,25838],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25840,25841],{},[3145,25842],{"alt":28,"src":25843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25845,25846],{},"改进theta要用到策略梯度算法",[19,25848,25849],{},[3145,25850],{"alt":28,"src":25851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25853,25854],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25856,25857],{},[3145,25858],{"alt":28,"src":25859},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25861,25862],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25864,25865],{},[3145,25866],{"alt":28,"src":25867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25869,25870],{},[3145,25871],{"alt":28,"src":25872},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25874,25875],{},"梯度公式总结：",[19,25877,25878],{},[3145,25879],{"alt":28,"src":25880},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25882,25883],{},"两个公式的分别应用场景：",[19,25885,25886],{},"对于离散的动作：",[19,25888,25889],{},[3145,25890],{"alt":28,"src":25891},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25893,25894],{},"对于连续的动作：",[19,25896,25897],{},[3145,25898],{"alt":28,"src":25899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25901,25902],{},[3145,25903],{"alt":28,"src":25904},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25906,25908],{"id":25907},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25910,25911],{},"使用蒙特卡洛来近似计算策略梯度",[19,25913,25914],{},"蒙特卡洛法的解释如下：",[19,25916,25917],{},[3145,25918],{"alt":28,"src":25919},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25921,25922],{},[3145,25923],{"alt":28,"src":25924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25926,25927],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[162,25929,25930],{},[165,25931,25932],{},"方法一：reinforce算法",[19,25934,25935],{},[3145,25936],{"alt":28,"src":25937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25939,25940],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[162,25942,25943],{"start":43},[165,25944,25945],{},"方法二：actor-critic算法",[19,25947,25948],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25950,25951],{},"两个网络的构建：",[19,25953,25954],{},[3145,25955],{"alt":28,"src":25956},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25958,25959],{},"actor网路：",[19,25961,25962],{},[3145,25963],{"alt":28,"src":25964},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25966,25967],{},"critic网络",[19,25969,25970],{},[3145,25971],{"alt":28,"src":25972},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[162,25974,25975],{"start":130},[165,25976,25977],{},"网络的训练",[19,25979,25980],{},"网络描述",[19,25982,25983],{},[3145,25984],{"alt":28,"src":25985},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25987,25988],{},[3145,25989],{"alt":28,"src":25990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25992,25993],{},"TD算法更新梯度：",[19,25995,25996],{},[3145,25997],{"alt":28,"src":25998},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26000,26001],{},"策略网络更新梯度：",[19,26003,26004],{},[3145,26005],{"alt":28,"src":26006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26008,26009],{},"训练整个流程的具体描述：",[19,26011,26012,26015,26016],{},[3145,26013],{"alt":28,"src":26014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3145,26017],{"alt":28,"src":26018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":28,"searchDepth":43,"depth":43,"links":26020},[26021,26022],{"id":25797,"depth":43,"text":25798},{"id":25907,"depth":43,"text":25908},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25789,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26029,"title":26030,"body":26031,"description":26038,"extension":1752,"meta":26088,"navigation":126,"path":26089,"seo":26090,"stem":26091,"__hash__":26092},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26032,"toc":26084},[26033,26036,26039,26043,26046,26051,26055,26058,26063,26066,26071,26076,26079],[10,26034,26030],{"id":26035},"_5alphago算法",[19,26037,26038],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26040,26042],{"id":26041},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26044,26045],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26047,26048],{},[3145,26049],{"alt":28,"src":26050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26052,26054],{"id":26053},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26056,26057],{},"采用强化学习的方式训练策略网络",[19,26059,26060],{},[3145,26061],{"alt":28,"src":26062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26064,26065],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26067,26068],{},[3145,26069],{"alt":28,"src":26070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26072,26073],{},[3145,26074],{"alt":28,"src":26075},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26077,26078],{},"强化学习训练策略网络的总结：",[19,26080,26081],{},[3145,26082],{"alt":28,"src":26083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":28,"searchDepth":43,"depth":43,"links":26085},[26086,26087],{"id":26041,"depth":43,"text":26042},{"id":26053,"depth":43,"text":26054},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26030,"description":26038},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26094,"title":26095,"body":26096,"description":26103,"extension":1752,"meta":26106,"navigation":126,"path":26107,"seo":26108,"stem":26109,"__hash__":26110},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26097,"toc":26104},[26098,26101],[10,26099,26095],{"id":26100},"_6价值网络",[19,26102,26103],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":28,"searchDepth":43,"depth":43,"links":26105},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26095,"description":26103},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26112,"title":26113,"body":26114,"description":26118,"extension":1752,"meta":26119,"navigation":126,"path":26120,"seo":26121,"stem":26122,"__hash__":26123},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26115,"toc":26116},[],{"title":28,"searchDepth":43,"depth":43,"links":26117},[],"记录自己的强化学习笔记。",{"category":25033},"\u002Fwiki\u002F2025-12-04",{"title":26113,"description":26118},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26125,"title":26126,"body":26127,"description":1751,"extension":1752,"meta":26166,"navigation":126,"path":26167,"seo":26168,"stem":26169,"__hash__":26170},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26128,"toc":26164},[26129,26132,26135,26141,26144,26150,26153,26158,26161],[10,26130,26126],{"id":26131},"_1-项目概览与官方资源",[19,26133,26134],{},"官方文档：",[19,26136,26137],{},[2057,26138,26139],{"href":26139,"rel":26140},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25520],[19,26142,26143],{},"官方代码仓库：",[19,26145,26146],{},[2057,26147,26148],{"href":26148,"rel":26149},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25520],[19,26151,26152],{},"复现大体流程：",[19,26154,26155],{},[3145,26156],{"alt":28,"src":26157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26159,26160],{},"本教程的目标是打通这条链路：",[19,26162,26163],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":28,"searchDepth":43,"depth":43,"links":26165},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26126,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26172,"title":26173,"body":26174,"description":1751,"extension":1752,"meta":26290,"navigation":126,"path":26291,"seo":26292,"stem":26293,"__hash__":26294},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26175,"toc":26285},[26176,26179,26183,26186,26193,26197,26200,26209,26219,26223,26253,26256,26282],[10,26177,26173],{"id":26178},"_2-环境准备与设备连接",[14,26180,26182],{"id":26181},"_21-系统与环境","2.1 系统与环境",[19,26184,26185],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26187,26188,26189,26192],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[30,26190,26191],{},"lerobot"," 依赖。",[14,26194,26196],{"id":26195},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26198,26199],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[23,26201,26203],{"className":25477,"code":26202,"language":25479,"meta":28,"style":28},"lerobot-find-out\n",[30,26204,26205],{"__ignoreMap":28},[33,26206,26207],{"class":35,"line":36},[33,26208,26202],{"class":3632},[19,26210,26211,26212,2031,26215,26218],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[30,26213,26214],{},"\u002Fdev\u002FttyACM0",[30,26216,26217],{},"\u002Fdev\u002FttyACM1","）。",[14,26220,26222],{"id":26221},"_23-串口授权","2.3 串口授权",[23,26224,26226],{"className":25477,"code":26225,"language":25479,"meta":28,"style":28},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[30,26227,26228,26242],{"__ignoreMap":28},[33,26229,26230,26233,26236,26239],{"class":35,"line":36},[33,26231,26232],{"class":3632},"sudo",[33,26234,26235],{"class":117}," chmod",[33,26237,26238],{"class":39}," 666",[33,26240,26241],{"class":117}," \u002Fdev\u002FttyACM0\n",[33,26243,26244,26246,26248,26250],{"class":35,"line":43},[33,26245,26232],{"class":3632},[33,26247,26235],{"class":117},[33,26249,26238],{"class":39},[33,26251,26252],{"class":117}," \u002Fdev\u002FttyACM1\n",[19,26254,26255],{},"说明：",[2822,26257,26258,26263,26269,26279],{},[165,26259,26260,26262],{},[30,26261,26232],{},"：以 root 权限执行命令。",[165,26264,26265,26268],{},[30,26266,26267],{},"chmod","：修改设备节点权限。",[165,26270,26271,26274,26275,26278],{},[30,26272,26273],{},"666","：",[30,26276,26277],{},"rw-rw-rw-","，所有用户可读写。",[165,26280,26281],{},"串口号必须替换为你机器上的真实端口。",[1729,26283,26284],{},"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":43,"depth":43,"links":26286},[26287,26288,26289],{"id":26181,"depth":43,"text":26182},{"id":26195,"depth":43,"text":26196},{"id":26221,"depth":43,"text":26222},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26173,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26296,"title":26297,"body":26298,"description":1751,"extension":1752,"meta":26459,"navigation":126,"path":26460,"seo":26461,"stem":26462,"__hash__":26463},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26299,"toc":26455},[26300,26304,26308,26314,26317,26374,26377,26381,26384,26452],[10,26301,26303],{"id":26302},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26305,26307],{"id":26306},"_31-配置电机-id","3.1 配置电机 ID",[19,26309,26310,26311,26313],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[30,26312,2036],{},"，需要改成机械臂链路里不冲突的编号。",[19,26315,26316],{},"方式一：用 LeRobot 命令逐步写入。",[23,26318,26320],{"className":25477,"code":26319,"language":25479,"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,26321,26322,26327,26335,26342,26347,26351,26356,26362,26369],{"__ignoreMap":28},[33,26323,26324],{"class":35,"line":36},[33,26325,26326],{"class":87},"# 主臂舵机配置 ID\n",[33,26328,26329,26332],{"class":35,"line":43},[33,26330,26331],{"class":3632},"lerobot-setup-motors",[33,26333,26334],{"class":39}," \\\n",[33,26336,26337,26340],{"class":35,"line":130},[33,26338,26339],{"class":39},"  --teleop.type=so101_leader",[33,26341,26334],{"class":39},[33,26343,26344],{"class":35,"line":146},[33,26345,26346],{"class":39},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[33,26348,26349],{"class":35,"line":267},[33,26350,127],{"emptyLinePlaceholder":126},[33,26352,26353],{"class":35,"line":275},[33,26354,26355],{"class":87},"# 从臂舵机配置 ID\n",[33,26357,26358,26360],{"class":35,"line":392},[33,26359,26331],{"class":3632},[33,26361,26334],{"class":39},[33,26363,26364,26367],{"class":35,"line":406},[33,26365,26366],{"class":39},"  --robot.type=so101_follower",[33,26368,26334],{"class":39},[33,26370,26371],{"class":35,"line":418},[33,26372,26373],{"class":39},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26375,26376],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26378,26380],{"id":26379},"_32-机械臂校准","3.2 机械臂校准",[19,26382,26383],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[23,26385,26387],{"className":25477,"code":26386,"language":25479,"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,26388,26389,26394,26401,26407,26414,26419,26423,26428,26434,26440,26447],{"__ignoreMap":28},[33,26390,26391],{"class":35,"line":36},[33,26392,26393],{"class":87},"# 主臂校准\n",[33,26395,26396,26399],{"class":35,"line":43},[33,26397,26398],{"class":3632},"lerobot-calibrate",[33,26400,26334],{"class":39},[33,26402,26403,26405],{"class":35,"line":130},[33,26404,26339],{"class":39},[33,26406,26334],{"class":39},[33,26408,26409,26412],{"class":35,"line":146},[33,26410,26411],{"class":39},"  --teleop.port=\u002Fdev\u002FttyACM0",[33,26413,26334],{"class":39},[33,26415,26416],{"class":35,"line":267},[33,26417,26418],{"class":39},"  --teleop.id=my_awesome_leader_arm\n",[33,26420,26421],{"class":35,"line":275},[33,26422,127],{"emptyLinePlaceholder":126},[33,26424,26425],{"class":35,"line":392},[33,26426,26427],{"class":87},"# 从臂校准\n",[33,26429,26430,26432],{"class":35,"line":406},[33,26431,26398],{"class":3632},[33,26433,26334],{"class":39},[33,26435,26436,26438],{"class":35,"line":418},[33,26437,26366],{"class":39},[33,26439,26334],{"class":39},[33,26441,26442,26445],{"class":35,"line":425},[33,26443,26444],{"class":39},"  --robot.port=\u002Fdev\u002FttyACM1",[33,26446,26334],{"class":39},[33,26448,26449],{"class":35,"line":1147},[33,26450,26451],{"class":39},"  --robot.id=my_awesome_follower_arm\n",[1729,26453,26454],{},"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":43,"depth":43,"links":26456},[26457,26458],{"id":26306,"depth":43,"text":26307},{"id":26379,"depth":43,"text":26380},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26297,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26465,"title":26466,"body":26467,"description":1751,"extension":1752,"meta":26658,"navigation":126,"path":26659,"seo":26660,"stem":26661,"__hash__":26662},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26468,"toc":26654},[26469,26472,26476,26523,26527,26540,26603,26606,26651],[10,26470,26466],{"id":26471},"_4-遥操与相机接入",[14,26473,26475],{"id":26474},"_41-不带相机遥操","4.1 不带相机遥操",[23,26477,26479],{"className":25477,"code":26478,"language":25479,"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,26480,26481,26488,26494,26500,26507,26513,26519],{"__ignoreMap":28},[33,26482,26483,26486],{"class":35,"line":36},[33,26484,26485],{"class":3632},"lerobot-teleoperate",[33,26487,26334],{"class":39},[33,26489,26490,26492],{"class":35,"line":43},[33,26491,26366],{"class":39},[33,26493,26334],{"class":39},[33,26495,26496,26498],{"class":35,"line":130},[33,26497,26444],{"class":39},[33,26499,26334],{"class":39},[33,26501,26502,26505],{"class":35,"line":146},[33,26503,26504],{"class":39},"  --robot.id=my_awesome_follower_arm",[33,26506,26334],{"class":39},[33,26508,26509,26511],{"class":35,"line":267},[33,26510,26339],{"class":39},[33,26512,26334],{"class":39},[33,26514,26515,26517],{"class":35,"line":275},[33,26516,26411],{"class":39},[33,26518,26334],{"class":39},[33,26520,26521],{"class":35,"line":392},[33,26522,26418],{"class":39},[14,26524,26526],{"id":26525},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[23,26528,26530],{"className":25477,"code":26529,"language":25479,"meta":28,"style":28},"lerobot-find-cameras opencv\n",[30,26531,26532],{"__ignoreMap":28},[33,26533,26534,26537],{"class":35,"line":36},[33,26535,26536],{"class":3632},"lerobot-find-cameras",[33,26538,26539],{"class":117}," opencv\n",[23,26541,26543],{"className":25477,"code":26542,"language":25479,"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,26544,26545,26551,26557,26563,26569,26579,26585,26591,26598],{"__ignoreMap":28},[33,26546,26547,26549],{"class":35,"line":36},[33,26548,26485],{"class":3632},[33,26550,26334],{"class":39},[33,26552,26553,26555],{"class":35,"line":43},[33,26554,26366],{"class":39},[33,26556,26334],{"class":39},[33,26558,26559,26561],{"class":35,"line":130},[33,26560,26444],{"class":39},[33,26562,26334],{"class":39},[33,26564,26565,26567],{"class":35,"line":146},[33,26566,26504],{"class":39},[33,26568,26334],{"class":39},[33,26570,26571,26574,26577],{"class":35,"line":267},[33,26572,26573],{"class":39},"  --robot.cameras=",[33,26575,26576],{"class":117},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[33,26578,26334],{"class":39},[33,26580,26581,26583],{"class":35,"line":275},[33,26582,26339],{"class":39},[33,26584,26334],{"class":39},[33,26586,26587,26589],{"class":35,"line":392},[33,26588,26411],{"class":39},[33,26590,26334],{"class":39},[33,26592,26593,26596],{"class":35,"line":406},[33,26594,26595],{"class":39},"  --teleop.id=my_awesome_leader_arm",[33,26597,26334],{"class":39},[33,26599,26600],{"class":35,"line":418},[33,26601,26602],{"class":39},"  --display_data=true\n",[19,26604,26605],{},"相机参数说明：",[2822,26607,26608,26614,26620,26629,26639,26645],{},[165,26609,26610,26613],{},[30,26611,26612],{},"front","：相机名称。",[165,26615,26616,26619],{},[30,26617,26618],{},"type: opencv","：相机驱动类型。",[165,26621,26622,26625,26626,26218],{},[30,26623,26624],{},"index_or_path","：设备编号或设备路径（如 ",[30,26627,26628],{},"\u002Fdev\u002Fvideo4",[165,26630,26631,26634,26635,26638],{},[30,26632,26633],{},"width"," \u002F ",[30,26636,26637],{},"height","：图像分辨率。",[165,26640,26641,26644],{},[30,26642,26643],{},"fps","：采样帧率。",[165,26646,26647,26650],{},[30,26648,26649],{},"--display_data=true","：启用实时可视化。",[1729,26652,26653],{},"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":43,"depth":43,"links":26655},[26656,26657],{"id":26474,"depth":43,"text":26475},{"id":26525,"depth":43,"text":26526},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26466,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26664,"title":26665,"body":26666,"description":1751,"extension":1752,"meta":26838,"navigation":126,"path":26839,"seo":26840,"stem":26841,"__hash__":26842},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26667,"toc":26833},[26668,26672,26676,26681,26686,26689,26731,26737,26741,26790,26795,26799,26802,26810,26815,26820,26825,26830],[10,26669,26671],{"id":26670},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26673,26675],{"id":26674},"_51-生成访问令牌","5.1 生成访问令牌",[19,26677,26678],{},[3145,26679],{"alt":28,"src":26680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26682,26683],{},[3145,26684],{"alt":28,"src":26685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26687,26688],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[23,26690,26692],{"className":25477,"code":26691,"language":25479,"meta":28,"style":28},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[30,26693,26694,26707],{"__ignoreMap":28},[33,26695,26696,26699,26702,26704],{"class":35,"line":36},[33,26697,26698],{"class":63},"export",[33,26700,26701],{"class":59}," HF_TOKEN",[33,26703,64],{"class":63},[33,26705,26706],{"class":117},"\"your_huggingface_token\"\n",[33,26708,26709,26712,26715,26718,26721,26723,26726,26728],{"class":35,"line":43},[33,26710,26711],{"class":3632},"hf",[33,26713,26714],{"class":117}," auth",[33,26716,26717],{"class":117}," login",[33,26719,26720],{"class":39}," --token",[33,26722,11383],{"class":117},[33,26724,26725],{"class":59},"$HF_TOKEN",[33,26727,1014],{"class":117},[33,26729,26730],{"class":39}," --add-to-git-credential\n",[19,26732,26733,26736],{},[30,26734,26735],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26738,26740],{"id":26739},"_52-验证登录","5.2 验证登录",[23,26742,26744],{"className":25477,"code":26743,"language":25479,"meta":28,"style":28},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[30,26745,26746,26777],{"__ignoreMap":28},[33,26747,26748,26751,26753,26756,26758,26760,26763,26766,26769,26772,26775],{"class":35,"line":36},[33,26749,26750],{"class":59},"HF_USER",[33,26752,64],{"class":63},[33,26754,26755],{"class":59},"$(",[33,26757,26711],{"class":3632},[33,26759,26714],{"class":117},[33,26761,26762],{"class":117}," whoami",[33,26764,26765],{"class":63}," |",[33,26767,26768],{"class":3632}," head",[33,26770,26771],{"class":39}," -n",[33,26773,26774],{"class":39}," 1",[33,26776,157],{"class":59},[33,26778,26779,26782,26784,26787],{"class":35,"line":43},[33,26780,26781],{"class":39},"echo",[33,26783,11383],{"class":117},[33,26785,26786],{"class":59},"$HF_USER",[33,26788,26789],{"class":117},"\"\n",[19,26791,26792],{},[3145,26793],{"alt":28,"src":26794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26796,26798],{"id":26797},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26800,26801],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2822,26803,26804,26807],{},[165,26805,26806],{},"Dataset Repo（用于上传演示数据）",[165,26808,26809],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26811,26812],{},[3145,26813],{"alt":28,"src":26814},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26816,26817],{},[3145,26818],{"alt":28,"src":26819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26821,26822],{},[3145,26823],{"alt":28,"src":26824},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26826,26827],{},[3145,26828],{"alt":28,"src":26829},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1729,26831,26832],{},"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":43,"depth":43,"links":26834},[26835,26836,26837],{"id":26674,"depth":43,"text":26675},{"id":26739,"depth":43,"text":26740},{"id":26797,"depth":43,"text":26798},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26665,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26844,"title":26845,"body":26846,"description":1751,"extension":1752,"meta":27043,"navigation":126,"path":27044,"seo":27045,"stem":27046,"__hash__":27047},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26847,"toc":27038},[26848,26852,26856,26952,26960,26965,26969,26985,26988,26992,27035],[10,26849,26851],{"id":26850},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26853,26855],{"id":26854},"_61-录制示教数据","6.1 录制示教数据",[23,26857,26859],{"className":25477,"code":26858,"language":25479,"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,26860,26861,26868,26874,26880,26886,26895,26901,26907,26913,26920,26930,26937,26947],{"__ignoreMap":28},[33,26862,26863,26866],{"class":35,"line":36},[33,26864,26865],{"class":3632},"lerobot-record",[33,26867,26334],{"class":39},[33,26869,26870,26872],{"class":35,"line":43},[33,26871,26366],{"class":39},[33,26873,26334],{"class":39},[33,26875,26876,26878],{"class":35,"line":130},[33,26877,26444],{"class":39},[33,26879,26334],{"class":39},[33,26881,26882,26884],{"class":35,"line":146},[33,26883,26504],{"class":39},[33,26885,26334],{"class":39},[33,26887,26888,26890,26893],{"class":35,"line":267},[33,26889,26573],{"class":39},[33,26891,26892],{"class":117},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[33,26894,26334],{"class":39},[33,26896,26897,26899],{"class":35,"line":275},[33,26898,26339],{"class":39},[33,26900,26334],{"class":39},[33,26902,26903,26905],{"class":35,"line":392},[33,26904,26411],{"class":39},[33,26906,26334],{"class":39},[33,26908,26909,26911],{"class":35,"line":406},[33,26910,26595],{"class":39},[33,26912,26334],{"class":39},[33,26914,26915,26918],{"class":35,"line":418},[33,26916,26917],{"class":39},"  --display_data=true",[33,26919,26334],{"class":39},[33,26921,26922,26925,26928],{"class":35,"line":425},[33,26923,26924],{"class":39},"  --dataset.repo_id=",[33,26926,26927],{"class":117},"\"Embodied-AI-6\u002Fso101_test\"",[33,26929,26334],{"class":39},[33,26931,26932,26935],{"class":35,"line":1147},[33,26933,26934],{"class":39},"  --dataset.num_episodes=10",[33,26936,26334],{"class":39},[33,26938,26939,26942,26945],{"class":35,"line":1329},[33,26940,26941],{"class":39},"  --dataset.single_task=",[33,26943,26944],{"class":117},"\"Grab the green cube\"",[33,26946,26334],{"class":39},[33,26948,26949],{"class":35,"line":1341},[33,26950,26951],{"class":39},"  --resume=true\n",[2822,26953,26954],{},[165,26955,26956,26959],{},[30,26957,26958],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26961,26962],{},[3145,26963],{"alt":28,"src":26964},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26966,26968],{"id":26967},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[23,26970,26972],{"className":25477,"code":26971,"language":25479,"meta":28,"style":28},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[30,26973,26974],{"__ignoreMap":28},[33,26975,26976,26979,26982],{"class":35,"line":36},[33,26977,26978],{"class":3632},"rm",[33,26980,26981],{"class":39}," -rf",[33,26983,26984],{"class":117}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26986,26987],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26989,26991],{"id":26990},"_63-回放指定-episode","6.3 回放指定 episode",[23,26993,26995],{"className":25477,"code":26994,"language":25479,"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,26996,26997,27004,27010,27016,27022,27030],{"__ignoreMap":28},[33,26998,26999,27002],{"class":35,"line":36},[33,27000,27001],{"class":3632},"lerobot-replay",[33,27003,26334],{"class":39},[33,27005,27006,27008],{"class":35,"line":43},[33,27007,26366],{"class":39},[33,27009,26334],{"class":39},[33,27011,27012,27014],{"class":35,"line":130},[33,27013,26444],{"class":39},[33,27015,26334],{"class":39},[33,27017,27018,27020],{"class":35,"line":146},[33,27019,26504],{"class":39},[33,27021,26334],{"class":39},[33,27023,27024,27026,27028],{"class":35,"line":267},[33,27025,26924],{"class":39},[33,27027,26927],{"class":117},[33,27029,26334],{"class":39},[33,27031,27032],{"class":35,"line":275},[33,27033,27034],{"class":39},"  --dataset.episode=0\n",[1729,27036,27037],{},"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":43,"depth":43,"links":27039},[27040,27041,27042],{"id":26854,"depth":43,"text":26855},{"id":26967,"depth":43,"text":26968},{"id":26990,"depth":43,"text":26991},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26845,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27049,"title":27050,"body":27051,"description":1751,"extension":1752,"meta":27179,"navigation":126,"path":27180,"seo":27181,"stem":27182,"__hash__":27183},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27052,"toc":27177},[27053,27057,27120,27123,27170,27175],[10,27054,27056],{"id":27055},"_7-act-模型训练","7. ACT 模型训练",[23,27058,27060],{"className":25477,"code":27059,"language":25479,"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,27061,27062,27069,27077,27084,27091,27098,27105,27112],{"__ignoreMap":28},[33,27063,27064,27067],{"class":35,"line":36},[33,27065,27066],{"class":3632},"lerobot-train",[33,27068,26334],{"class":39},[33,27070,27071,27073,27075],{"class":35,"line":43},[33,27072,26924],{"class":39},[33,27074,26927],{"class":117},[33,27076,26334],{"class":39},[33,27078,27079,27082],{"class":35,"line":130},[33,27080,27081],{"class":39},"  --policy.type=act",[33,27083,26334],{"class":39},[33,27085,27086,27089],{"class":35,"line":146},[33,27087,27088],{"class":39},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[33,27090,26334],{"class":39},[33,27092,27093,27096],{"class":35,"line":267},[33,27094,27095],{"class":39},"  --job_name=act_so101_test",[33,27097,26334],{"class":39},[33,27099,27100,27103],{"class":35,"line":275},[33,27101,27102],{"class":39},"  --policy.device=cuda",[33,27104,26334],{"class":39},[33,27106,27107,27110],{"class":35,"line":392},[33,27108,27109],{"class":39},"  --wandb.enable=false",[33,27111,26334],{"class":39},[33,27113,27114,27117],{"class":35,"line":406},[33,27115,27116],{"class":39},"  --policy.repo_id=",[33,27118,27119],{"class":117},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27121,27122],{},"参数说明：",[2822,27124,27125,27131,27137,27143,27149,27158,27164],{},[165,27126,27127,27130],{},[30,27128,27129],{},"--dataset.repo_id","：训练数据集仓库。",[165,27132,27133,27136],{},[30,27134,27135],{},"--policy.type=act","：策略模型类型为 ACT。",[165,27138,27139,27142],{},[30,27140,27141],{},"--output_dir","：本地训练输出目录。",[165,27144,27145,27148],{},[30,27146,27147],{},"--job_name","：训练任务名称。",[165,27150,27151,27154,27155,26218],{},[30,27152,27153],{},"--policy.device","：训练设备（如 ",[30,27156,27157],{},"cuda",[165,27159,27160,27163],{},[30,27161,27162],{},"--wandb.enable","：是否启用 WandB 可视化。",[165,27165,27166,27169],{},[30,27167,27168],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27171,27172],{},[3145,27173],{"alt":28,"src":27174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1729,27176,27037],{},{"title":28,"searchDepth":43,"depth":43,"links":27178},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27050,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27185,"title":27186,"body":27187,"description":1751,"extension":1752,"meta":27274,"navigation":126,"path":27275,"seo":27276,"stem":27277,"__hash__":27278},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27188,"toc":27272},[27189,27192,27195,27262,27270],[10,27190,27186],{"id":27191},"_8-策略部署与自动采集",[19,27193,27194],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[23,27196,27198],{"className":25477,"code":27197,"language":25479,"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,27199,27200,27206,27212,27218,27226,27232,27239,27247,27255],{"__ignoreMap":28},[33,27201,27202,27204],{"class":35,"line":36},[33,27203,26865],{"class":3632},[33,27205,26334],{"class":39},[33,27207,27208,27210],{"class":35,"line":43},[33,27209,26366],{"class":39},[33,27211,26334],{"class":39},[33,27213,27214,27216],{"class":35,"line":130},[33,27215,26444],{"class":39},[33,27217,26334],{"class":39},[33,27219,27220,27222,27224],{"class":35,"line":146},[33,27221,26573],{"class":39},[33,27223,26892],{"class":117},[33,27225,26334],{"class":39},[33,27227,27228,27230],{"class":35,"line":267},[33,27229,26504],{"class":39},[33,27231,26334],{"class":39},[33,27233,27234,27237],{"class":35,"line":275},[33,27235,27236],{"class":39},"  --display_data=false",[33,27238,26334],{"class":39},[33,27240,27241,27243,27245],{"class":35,"line":392},[33,27242,26924],{"class":39},[33,27244,26927],{"class":117},[33,27246,26334],{"class":39},[33,27248,27249,27251,27253],{"class":35,"line":406},[33,27250,26941],{"class":39},[33,27252,26944],{"class":117},[33,27254,26334],{"class":39},[33,27256,27257,27260],{"class":35,"line":418},[33,27258,27259],{"class":39},"  --policy.path=",[33,27261,27119],{"class":117},[2822,27263,27264],{},[165,27265,27266,27269],{},[30,27267,27268],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1729,27271,27037],{},{"title":28,"searchDepth":43,"depth":43,"links":27273},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27186,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27280,"title":27281,"body":27282,"description":1751,"extension":1752,"meta":27311,"navigation":126,"path":27312,"seo":27313,"stem":27314,"__hash__":27315},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27283,"toc":27309},[27284,27288,27291,27297,27300,27306],[10,27285,27287],{"id":27286},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27289,27290],{},"项目地址：",[19,27292,27293],{},[2057,27294,27295],{"href":27295,"rel":27296},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25520],[19,27298,27299],{},"参考教程：",[19,27301,27302],{},[2057,27303,27304],{"href":27304,"rel":27305},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25520],[19,27307,27308],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":28,"searchDepth":43,"depth":43,"links":27310},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27281,"description":1751},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27317,"title":27318,"body":27319,"description":27323,"extension":1752,"meta":27324,"navigation":126,"path":27325,"seo":27326,"stem":27327,"__hash__":27328},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27320,"toc":27321},[],{"title":28,"searchDepth":43,"depth":43,"links":27322},[],"act复现",{"category":25033},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27318,"description":27323},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27330,"title":27331,"body":27332,"description":28,"extension":1752,"meta":27634,"navigation":126,"path":27635,"seo":27636,"stem":27637,"__hash__":27638},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27333,"toc":27626},[27334,27337,27341,27351,27358,27365,27368,27375,27378,27381,27385,27397,27401,27447,27450,27453,27456,27459,27462,27466,27504,27510,27514,27568,27573,27576,27579,27584,27587,27592,27595,27598,27602,27605,27608,27612],[10,27335,27331],{"id":27336},"_1简介",[633,27338,27340],{"id":27339},"_11什么是-docker","1.1什么是 Docker？",[19,27342,27343,27344,27347,27348],{},"Docker 是一个开源的 ",[1968,27345,27346],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[1968,27349,27350],{},"一次构建，到处运行。",[19,27352,27353,27354,27357],{},"“ ",[1968,27355,27356],{},"一次构建，到处运行"," ”也就是说：",[162,27359,27360],{},[165,27361,27362],{},[1968,27363,27364],{},"之前：",[19,27366,27367],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[162,27369,27370],{},[165,27371,27372],{},[1968,27373,27374],{},"使用docker后：",[19,27376,27377],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27379,27380],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[633,27382,27384],{"id":27383},"_12它是怎么工作的","1.2.它是怎么工作的？",[2822,27386,27387,27390],{},[165,27388,27389],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[165,27391,27392,27393,27396],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[1968,27394,27395],{},"无论在哪运行都一样稳定"," 。",[633,27398,27400],{"id":27399},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1956,27402,27403,27413],{},[1959,27404,27405],{},[1962,27406,27407,27410],{},[1965,27408,27409],{"align":25391},"概念",[1965,27411,27412],{"align":25391},"解释",[2003,27414,27415,27423,27431,27439],{},[1962,27416,27417,27420],{},[2008,27418,27419],{"align":25391},"镜像",[2008,27421,27422],{"align":25391},"Image，运行容器的模板，像是一个应用快照",[1962,27424,27425,27428],{},[2008,27426,27427],{"align":25391},"容器",[2008,27429,27430],{"align":25391},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1962,27432,27433,27436],{},[2008,27434,27435],{"align":25391},"Dockerfile",[2008,27437,27438],{"align":25391},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1962,27440,27441,27444],{},[2008,27442,27443],{"align":25391},"仓库",[2008,27445,27446],{"align":25391},"Registry，存放镜像的地方，比如 Docker Hub",[19,27448,27449],{},"抽象化理解:",[19,27451,27452],{},"Docker镜像≈C++类",[19,27454,27455],{},"Docker容器≈C++类实例(即对象)",[19,27457,27458],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27460,27461],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[633,27463,27465],{"id":27464},"_14类比理解","1.4.类比理解",[1956,27467,27468,27478],{},[1959,27469,27470],{},[1962,27471,27472,27475],{},[1965,27473,27474],{"align":25391},"传统部署",[1965,27476,27477],{"align":25391},"Docker部署",[2003,27479,27480,27488,27496],{},[1962,27481,27482,27485],{},[2008,27483,27484],{"align":25391},"手动安装依赖、调试版本不一致问题",[2008,27486,27487],{"align":25391},"一次打包环境和代码",[1962,27489,27490,27493],{},[2008,27491,27492],{"align":25391},"程序“裸奔”跑在系统上",[2008,27494,27495],{"align":25391},"程序“穿着容器”隔离运行",[1962,27497,27498,27501],{},[2008,27499,27500],{"align":25391},"容易“在我电脑上能跑”",[2008,27502,27503],{"align":25391},"保证“无论在哪都能跑”",[19,27505,27506,27507],{},"就像快递包裹： ",[1968,27508,27509],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[633,27511,27513],{"id":27512},"_15docker-的核心优势","1.5.Docker 的核心优势",[1956,27515,27516,27526],{},[1959,27517,27518],{},[1962,27519,27520,27523],{},[1965,27521,27522],{"align":25391},"优势",[1965,27524,27525],{"align":25391},"说明",[2003,27527,27528,27536,27544,27552,27560],{},[1962,27529,27530,27533],{},[2008,27531,27532],{"align":25391},"轻量级",[2008,27534,27535],{"align":25391},"基于系统内核共享，启动速度快，占资源少",[1962,27537,27538,27541],{},[2008,27539,27540],{"align":25391},"跨平台",[2008,27542,27543],{"align":25391},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1962,27545,27546,27549],{},[2008,27547,27548],{"align":25391},"易于迁移部署",[2008,27550,27551],{"align":25391},"应用和环境一起封装，不怕依赖不一致",[1962,27553,27554,27557],{},[2008,27555,27556],{"align":25391},"易于版本控制",[2008,27558,27559],{"align":25391},"镜像版本可控，支持回滚",[1962,27561,27562,27565],{},[2008,27563,27564],{"align":25391},"生态丰富",[2008,27566,27567],{"align":25391},"Docker Hub 上有成千上万的现成镜像可用",[162,27569,27570],{},[165,27571,27572],{},"在Linux上可以几乎实现无性能损失。",[19,27574,27575],{},"docker里的发行版和本机共用Linux内核。",[19,27577,27578],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[162,27580,27581],{},[165,27582,27583],{},"可以快速部署在绝大多数Linux发行版",[19,27585,27586],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[162,27588,27589],{},[165,27590,27591],{},"配置环境简单",[19,27593,27594],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27596,27597],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[162,27599,27600],{},[165,27601,27564],{},[19,27603,27604],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27606,27607],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[633,27609,27611],{"id":27610},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2822,27613,27614,27617,27620,27623],{},[165,27615,27616],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[165,27618,27619],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[165,27621,27622],{},"微服务架构：每个服务一个容器，灵活组合",[165,27624,27625],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":28,"searchDepth":43,"depth":43,"links":27627},[27628,27629,27630,27631,27632,27633],{"id":27339,"depth":130,"text":27340},{"id":27383,"depth":130,"text":27384},{"id":27399,"depth":130,"text":27400},{"id":27464,"depth":130,"text":27465},{"id":27512,"depth":130,"text":27513},{"id":27610,"depth":130,"text":27611},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27331,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27640,"title":27641,"body":27642,"description":28,"extension":1752,"meta":28375,"navigation":126,"path":28376,"seo":28377,"stem":28378,"__hash__":28379},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27643,"toc":28370},[27644,27647,27651,27654,27657,27663,27669,27673,27682,27685,27742,27745,27796,27799,27882,27885,27922,27926,27937,27950,27957,27960,28040,28043,28093,28096,28119,28123,28130,28133,28149,28155,28158,28174,28180,28183,28199,28213,28219,28239,28245,28248,28260,28266,28269,28283,28289,28292,28312,28317,28320,28323,28327,28330,28333,28336,28343,28346,28349,28352,28357,28362,28367],[10,27645,27641],{"id":27646},"_2安装docker",[633,27648,27650],{"id":27649},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27652,27653],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27655,27656],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27658,27659],{},[2057,27660,27661],{"href":27661,"rel":27662},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25520],[19,27664,27665],{},[2057,27666,27667],{"href":27667,"rel":27668},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25520],[23653,27670,27672],{"id":27671},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27674,27675,27676,27681],{},"以下内容根据 ",[2057,27677,27680],{"href":27678,"rel":27679},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25520],"官方文档"," 修改而来。",[19,27683,27684],{},"如果你过去安装过 docker，先删掉：",[23,27686,27688],{"className":25477,"code":27687,"language":25479,"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,27689,27690],{"__ignoreMap":28},[33,27691,27692,27694,27697,27700,27703,27706,27709,27712,27715,27718,27721,27724,27727,27730,27733,27736,27739],{"class":35,"line":36},[33,27693,4690],{"class":63},[33,27695,27696],{"class":59}," pkg ",[33,27698,27699],{"class":63},"in",[33,27701,27702],{"class":117}," docker.io",[33,27704,27705],{"class":117}," docker-doc",[33,27707,27708],{"class":117}," docker-compose",[33,27710,27711],{"class":117}," docker-compose-v2",[33,27713,27714],{"class":117}," podman-docker",[33,27716,27717],{"class":117}," containerd",[33,27719,27720],{"class":117}," runc",[33,27722,27723],{"class":59},"; ",[33,27725,27726],{"class":63},"do",[33,27728,27729],{"class":3632}," sudo",[33,27731,27732],{"class":117}," apt-get",[33,27734,27735],{"class":117}," remove",[33,27737,27738],{"class":59}," $pkg; ",[33,27740,27741],{"class":63},"done\n",[19,27743,27744],{},"首先安装依赖和GPG：",[23,27746,27750],{"className":27747,"code":27748,"language":27749,"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,27751,27752,27757,27762,27767,27772,27777,27782,27786,27791],{"__ignoreMap":28},[33,27753,27754],{"class":35,"line":36},[33,27755,27756],{},"# Add Docker's official GPG key:\n",[33,27758,27759],{"class":35,"line":43},[33,27760,27761],{},"sudo apt-get update\n",[33,27763,27764],{"class":35,"line":130},[33,27765,27766],{},"sudo apt-get install ca-certificates curl\n",[33,27768,27769],{"class":35,"line":146},[33,27770,27771],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[33,27773,27774],{"class":35,"line":267},[33,27775,27776],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[33,27778,27779],{"class":35,"line":275},[33,27780,27781],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[33,27783,27784],{"class":35,"line":392},[33,27785,127],{"emptyLinePlaceholder":126},[33,27787,27788],{"class":35,"line":406},[33,27789,27790],{},"# 如果上面这行报错就弄下面这行\n",[33,27792,27793],{"class":35,"line":418},[33,27794,27795],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27797,27798],{},"信任 Docker 的 GPG 公钥并添加仓库：",[23,27800,27802],{"className":25477,"code":27801,"language":25479,"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,27803,27804,27809,27815,27832,27865],{"__ignoreMap":28},[33,27805,27806],{"class":35,"line":36},[33,27807,27808],{"class":87},"# Add the repository to Apt sources:\n",[33,27810,27811,27813],{"class":35,"line":43},[33,27812,26781],{"class":39},[33,27814,26334],{"class":39},[33,27816,27817,27820,27823,27826,27829],{"class":35,"line":130},[33,27818,27819],{"class":117},"  \"deb [arch=$(",[33,27821,27822],{"class":3632},"dpkg",[33,27824,27825],{"class":39}," --print-architecture",[33,27827,27828],{"class":117},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[33,27830,27831],{"class":39},"\\\n",[33,27833,27834,27837,27839,27841,27844,27847,27849,27851,27854,27856,27858,27861,27863],{"class":35,"line":146},[33,27835,27836],{"class":117},"  \"",[33,27838,26755],{"class":59},[33,27840,2375],{"class":39},[33,27842,27843],{"class":117}," \u002Fetc\u002Fos-release",[33,27845,27846],{"class":59}," && ",[33,27848,26781],{"class":39},[33,27850,11383],{"class":117},[33,27852,27853],{"class":59},"$VERSION_CODENAME",[33,27855,1014],{"class":117},[33,27857,2247],{"class":59},[33,27859,27860],{"class":117},"\" stable\"",[33,27862,26765],{"class":63},[33,27864,26334],{"class":39},[33,27866,27867,27870,27873,27876,27879],{"class":35,"line":267},[33,27868,27869],{"class":3632},"  sudo",[33,27871,27872],{"class":117}," tee",[33,27874,27875],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[33,27877,27878],{"class":63}," >",[33,27880,27881],{"class":117}," \u002Fdev\u002Fnull\n",[19,27883,27884],{},"最后安装",[23,27886,27888],{"className":25477,"code":27887,"language":25479,"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,27889,27890,27899],{"__ignoreMap":28},[33,27891,27892,27894,27896],{"class":35,"line":36},[33,27893,26232],{"class":3632},[33,27895,27732],{"class":117},[33,27897,27898],{"class":117}," update\n",[33,27900,27901,27903,27905,27907,27910,27913,27916,27919],{"class":35,"line":43},[33,27902,26232],{"class":3632},[33,27904,27732],{"class":117},[33,27906,25489],{"class":117},[33,27908,27909],{"class":117}," docker-ce",[33,27911,27912],{"class":117}," docker-ce-cli",[33,27914,27915],{"class":117}," containerd.io",[33,27917,27918],{"class":117}," docker-buildx-plugin",[33,27920,27921],{"class":117}," docker-compose-plugin\n",[23653,27923,27925],{"id":27924},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27927,27928,27929,27932,27933,27936],{},"查看自己自己包管理工具版本（dnf是 ",[1968,27930,27931],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[1968,27934,27935],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[23,27938,27940],{"className":25477,"code":27939,"language":25479,"meta":28,"style":28},"dnf --version\n",[30,27941,27942],{"__ignoreMap":28},[33,27943,27944,27947],{"class":35,"line":36},[33,27945,27946],{"class":3632},"dnf",[33,27948,27949],{"class":39}," --version\n",[19,27951,27675,27952,27956],{},[2057,27953,27680],{"href":27954,"rel":27955},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25520]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27958,27959],{},"如果你之前安装过 docker，请先删掉",[23,27961,27963],{"className":25477,"code":27962,"language":25479,"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,27964,27965,27979,27986,27993,28000,28007,28014,28021,28028,28035],{"__ignoreMap":28},[33,27966,27967,27969,27972,27974,27977],{"class":35,"line":36},[33,27968,26232],{"class":3632},[33,27970,27971],{"class":117}," dnf",[33,27973,27735],{"class":117},[33,27975,27976],{"class":117}," docker",[33,27978,26334],{"class":39},[33,27980,27981,27984],{"class":35,"line":43},[33,27982,27983],{"class":117},"                  docker-client",[33,27985,26334],{"class":39},[33,27987,27988,27991],{"class":35,"line":130},[33,27989,27990],{"class":117},"                  docker-client-latest",[33,27992,26334],{"class":39},[33,27994,27995,27998],{"class":35,"line":146},[33,27996,27997],{"class":117},"                  docker-common",[33,27999,26334],{"class":39},[33,28001,28002,28005],{"class":35,"line":267},[33,28003,28004],{"class":117},"                  docker-latest",[33,28006,26334],{"class":39},[33,28008,28009,28012],{"class":35,"line":275},[33,28010,28011],{"class":117},"                  docker-latest-logrotate",[33,28013,26334],{"class":39},[33,28015,28016,28019],{"class":35,"line":392},[33,28017,28018],{"class":117},"                  docker-logrotate",[33,28020,26334],{"class":39},[33,28022,28023,28026],{"class":35,"line":406},[33,28024,28025],{"class":117},"                  docker-selinux",[33,28027,26334],{"class":39},[33,28029,28030,28033],{"class":35,"line":418},[33,28031,28032],{"class":117},"                  docker-engine-selinux",[33,28034,26334],{"class":39},[33,28036,28037],{"class":35,"line":425},[33,28038,28039],{"class":117},"                  docker-engine\n",[19,28041,28042],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[23,28044,28046],{"className":25477,"code":28045,"language":25479,"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,28047,28048,28062,28077],{"__ignoreMap":28},[33,28049,28050,28052,28054,28057,28059],{"class":35,"line":36},[33,28051,26232],{"class":3632},[33,28053,27971],{"class":117},[33,28055,28056],{"class":39}," -y",[33,28058,25489],{"class":117},[33,28060,28061],{"class":117}," dnf-plugins-core\n",[33,28063,28064,28066,28068,28071,28074],{"class":35,"line":43},[33,28065,26232],{"class":3632},[33,28067,27971],{"class":117},[33,28069,28070],{"class":117}," config-manager",[33,28072,28073],{"class":117}," addrepo",[33,28075,28076],{"class":39}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[33,28078,28079,28081,28084,28087,28090],{"class":35,"line":130},[33,28080,26232],{"class":3632},[33,28082,28083],{"class":117}," sed",[33,28085,28086],{"class":39}," -i",[33,28088,28089],{"class":117}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[33,28091,28092],{"class":117}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28094,28095],{},"最后安装：",[23,28097,28099],{"className":25477,"code":28098,"language":25479,"meta":28,"style":28},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,28100,28101],{"__ignoreMap":28},[33,28102,28103,28105,28107,28109,28111,28113,28115,28117],{"class":35,"line":36},[33,28104,26232],{"class":3632},[33,28106,27971],{"class":117},[33,28108,25489],{"class":117},[33,28110,27909],{"class":117},[33,28112,27912],{"class":117},[33,28114,27915],{"class":117},[33,28116,27918],{"class":117},[33,28118,27921],{"class":117},[633,28120,28122],{"id":28121},"_22配置环境","2.2.配置环境",[23653,28124,28126,28129],{"id":28125},"_221检查-docker-服务状态",[1968,28127,28128],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28131,28132],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[23,28134,28136],{"className":25477,"code":28135,"language":25479,"meta":28,"style":28},"systemctl status docker\n",[30,28137,28138],{"__ignoreMap":28},[33,28139,28140,28143,28146],{"class":35,"line":36},[33,28141,28142],{"class":3632},"systemctl",[33,28144,28145],{"class":117}," status",[33,28147,28148],{"class":117}," docker\n",[23653,28150,28152,28129],{"id":28151},"_222启动-docker-服务",[1968,28153,28154],{},"2.2.2.启动 Docker 服务",[19,28156,28157],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[23,28159,28161],{"className":25477,"code":28160,"language":25479,"meta":28,"style":28},"sudo systemctl start docker\n",[30,28162,28163],{"__ignoreMap":28},[33,28164,28165,28167,28170,28172],{"class":35,"line":36},[33,28166,26232],{"class":3632},[33,28168,28169],{"class":117}," systemctl",[33,28171,5845],{"class":117},[33,28173,28148],{"class":117},[23653,28175,28177,28129],{"id":28176},"_223设置-docker-开机自启",[1968,28178,28179],{},"2.2.3.设置 Docker 开机自启",[19,28181,28182],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[23,28184,28186],{"className":25477,"code":28185,"language":25479,"meta":28,"style":28},"sudo systemctl enable docker\n",[30,28187,28188],{"__ignoreMap":28},[33,28189,28190,28192,28194,28197],{"class":35,"line":36},[33,28191,26232],{"class":3632},[33,28193,28169],{"class":117},[33,28195,28196],{"class":117}," enable",[33,28198,28148],{"class":117},[23653,28200,28202,15453,28205,15453,28210,28129],{"id":28201},"_224将用户添加到-docker-组",[1968,28203,28204],{},"2.2.4.将用户添加到",[1968,28206,28207],{},[30,28208,28209],{},"docker",[1968,28211,28212],{},"组",[19,28214,28215,28216,28218],{},"使用以下命令将当前用户添加到 ",[30,28217,28209],{}," 组：",[23,28220,28222],{"className":25477,"code":28221,"language":25479,"meta":28,"style":28},"sudo usermod -aG docker $USER\n",[30,28223,28224],{"__ignoreMap":28},[33,28225,28226,28228,28231,28234,28236],{"class":35,"line":36},[33,28227,26232],{"class":3632},[33,28229,28230],{"class":117}," usermod",[33,28232,28233],{"class":39}," -aG",[33,28235,27976],{"class":117},[33,28237,28238],{"class":59}," $USER\n",[23653,28240,28242,28129],{"id":28241},"_225退出并重新登录",[1968,28243,28244],{},"2.2.5.退出并重新登录",[19,28246,28247],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[23,28249,28251],{"className":25477,"code":28250,"language":25479,"meta":28,"style":28},"newgrp docker\n",[30,28252,28253],{"__ignoreMap":28},[33,28254,28255,28258],{"class":35,"line":36},[33,28256,28257],{"class":3632},"newgrp",[33,28259,28148],{"class":117},[23653,28261,28263,28129],{"id":28262},"_226重新启动-docker-服务如果需要",[1968,28264,28265],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28267,28268],{},"确保 Docker 服务正在运行，可以使用以下命令：",[23,28270,28271],{"className":25477,"code":28160,"language":25479,"meta":28,"style":28},[30,28272,28273],{"__ignoreMap":28},[33,28274,28275,28277,28279,28281],{"class":35,"line":36},[33,28276,26232],{"class":3632},[33,28278,28169],{"class":117},[33,28280,5845],{"class":117},[33,28282,28148],{"class":117},[23653,28284,28286,28129],{"id":28285},"_227重启电脑后检查-docker-服务状态",[1968,28287,28288],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28290,28291],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[23,28293,28295],{"className":25477,"code":28294,"language":25479,"meta":28,"style":28},"sudo reboot\nsystemctl status docker\n",[30,28296,28297,28304],{"__ignoreMap":28},[33,28298,28299,28301],{"class":35,"line":36},[33,28300,26232],{"class":3632},[33,28302,28303],{"class":117}," reboot\n",[33,28305,28306,28308,28310],{"class":35,"line":43},[33,28307,28142],{"class":3632},[33,28309,28145],{"class":117},[33,28311,28148],{"class":117},[19,28313,28314],{},[3145,28315],{"alt":28,"src":28316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28318,28319],{},"第三行显示enabled说明开机自启动成功",[19,28321,28322],{},"按q退出",[633,28324,28326],{"id":28325},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28328,28329],{},"优先使用linux来使用docker是比较好的",[19,28331,28332],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28334,28335],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28337,28338,28339],{},"官方下载安装:",[2057,28340,28341],{"href":28341,"rel":28342},"https:\u002F\u002Fwww.docker.com\u002F",[25520],[19,28344,28345],{},"Windows的Docker显卡直通与USB直通:",[19,28347,28348],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28350,28351],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28353,28354],{},[3145,28355],{"alt":28,"src":28356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28358,28359],{},[3145,28360],{"alt":28,"src":28361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28363,28364],{},[3145,28365],{"alt":28,"src":28366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1729,28368,28369],{},"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":43,"depth":43,"links":28371},[28372,28373,28374],{"id":27649,"depth":130,"text":27650},{"id":28121,"depth":130,"text":28122},{"id":28325,"depth":130,"text":28326},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27641,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28381,"title":28382,"body":28383,"description":28390,"extension":1752,"meta":29083,"navigation":126,"path":29084,"seo":29085,"stem":29086,"__hash__":29087},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28384,"toc":29077},[28385,28388,28391,28395,28400,28405,28408,28436,28441,28450,28453,28458,28462,28469,28474,28480,28484,28487,28491,28496,28588,28593,28611,28616,28637,28642,28658,28662,28667,28696,28701,28747,28752,28796,28804,28821,28826,28842,28847,28861,28864,28867,28870,28873,28902,28905,28910,28914,28917,28920,28926,28929,28932,28935,28997,29004,29009,29012,29030,29034,29037,29054,29057,29060,29074],[10,28386,28382],{"id":28387},"_3docker直通",[19,28389,28390],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[633,28392,28394],{"id":28393},"_31usb直通","3.1.USB直通",[19,28396,28397],{},[3145,28398],{"alt":28,"src":28399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[162,28401,28402],{},[165,28403,28404],{},"方法一(不是很推荐新手)：",[19,28406,28407],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[23,28409,28411],{"className":25477,"code":28410,"language":25479,"meta":28,"style":28},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[30,28412,28413,28421,28426],{"__ignoreMap":28},[33,28414,28415,28418],{"class":35,"line":36},[33,28416,28417],{"class":3632},"ls",[33,28419,28420],{"class":117}," \u002Fdev\n",[33,28422,28423],{"class":35,"line":43},[33,28424,28425],{"class":87},"#例如\n",[33,28427,28428,28431,28433],{"class":35,"line":130},[33,28429,28430],{"class":59},"--device",[33,28432,64],{"class":63},[33,28434,28435],{"class":117},"\u002Fdev\u002Ftty_USB0\n",[162,28437,28438],{"start":43},[165,28439,28440],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[23,28442,28444],{"className":25477,"code":28443,"language":25479,"meta":28,"style":28},"--privileged\n",[30,28445,28446],{"__ignoreMap":28},[33,28447,28448],{"class":35,"line":36},[33,28449,28443],{"class":3632},[19,28451,28452],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28454,28455],{},[3145,28456],{"alt":28,"src":28457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[633,28459,28461],{"id":28460},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28463,28464,28465,28468],{},"NVIDIA Container Toolkit使用户 ",[1968,28466,28467],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28470,28471],{},[3145,28472],{"alt":28,"src":28473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28475,28476],{},[2057,28477,28478],{"href":28478,"rel":28479},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25520],[23653,28481,28483],{"id":28482},"_321安装","3.2.1.安装",[19,28485,28486],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24565,28488,28490],{"id":28489},"_3211ubuntu","3.2.1.1.Ubuntu",[162,28492,28493],{},[165,28494,28495],{},"配置存储库 并更新",[23,28497,28499],{"className":25477,"code":28498,"language":25479,"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,28500,28501,28530,28550,28562,28574,28580],{"__ignoreMap":28},[33,28502,28503,28506,28509,28512,28514,28516,28519,28522,28525,28528],{"class":35,"line":36},[33,28504,28505],{"class":3632},"curl",[33,28507,28508],{"class":39}," -fsSL",[33,28510,28511],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[33,28513,26765],{"class":63},[33,28515,27729],{"class":3632},[33,28517,28518],{"class":117}," gpg",[33,28520,28521],{"class":39}," --dearmor",[33,28523,28524],{"class":39}," -o",[33,28526,28527],{"class":117}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[33,28529,26334],{"class":39},[33,28531,28532,28535,28537,28540,28543,28546,28548],{"class":35,"line":43},[33,28533,28534],{"class":59},"  && ",[33,28536,28505],{"class":3632},[33,28538,28539],{"class":39}," -s",[33,28541,28542],{"class":39}," -L",[33,28544,28545],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[33,28547,26765],{"class":63},[33,28549,26334],{"class":39},[33,28551,28552,28555,28558,28560],{"class":35,"line":130},[33,28553,28554],{"class":3632},"    sed",[33,28556,28557],{"class":117}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[33,28559,26765],{"class":63},[33,28561,26334],{"class":39},[33,28563,28564,28567,28569,28572],{"class":35,"line":146},[33,28565,28566],{"class":3632},"    sudo",[33,28568,27872],{"class":117},[33,28570,28571],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[33,28573,26334],{"class":39},[33,28575,28576,28578],{"class":35,"line":267},[33,28577,28534],{"class":59},[33,28579,27831],{"class":39},[33,28581,28582,28584,28586],{"class":35,"line":275},[33,28583,28566],{"class":3632},[33,28585,27732],{"class":117},[33,28587,27898],{"class":117},[162,28589,28590],{"start":43},[165,28591,28592],{},"安装nvidia-docker2",[23,28594,28596],{"className":25477,"code":28595,"language":25479,"meta":28,"style":28},"sudo apt-get install -y nvidia-docker2\n",[30,28597,28598],{"__ignoreMap":28},[33,28599,28600,28602,28604,28606,28608],{"class":35,"line":36},[33,28601,26232],{"class":3632},[33,28603,27732],{"class":117},[33,28605,25489],{"class":117},[33,28607,28056],{"class":39},[33,28609,28610],{"class":117}," nvidia-docker2\n",[162,28612,28613],{"start":130},[165,28614,28615],{},"使用nvidia-ctk命令配置container runtime",[23,28617,28619],{"className":25477,"code":28618,"language":25479,"meta":28,"style":28},"sudo nvidia-ctk runtime configure --runtime=docker\n",[30,28620,28621],{"__ignoreMap":28},[33,28622,28623,28625,28628,28631,28634],{"class":35,"line":36},[33,28624,26232],{"class":3632},[33,28626,28627],{"class":117}," nvidia-ctk",[33,28629,28630],{"class":117}," runtime",[33,28632,28633],{"class":117}," configure",[33,28635,28636],{"class":39}," --runtime=docker\n",[162,28638,28639],{"start":146},[165,28640,28641],{},"重启docker服务:",[23,28643,28645],{"className":25477,"code":28644,"language":25479,"meta":28,"style":28},"sudo systemctl restart docker\n",[30,28646,28647],{"__ignoreMap":28},[33,28648,28649,28651,28653,28656],{"class":35,"line":36},[33,28650,26232],{"class":3632},[33,28652,28169],{"class":117},[33,28654,28655],{"class":117}," restart",[33,28657,28148],{"class":117},[24565,28659,28661],{"id":28660},"_3212fedora","3.2.1.2.Fedora",[162,28663,28664],{},[165,28665,28666],{},"配置存储库",[23,28668,28670],{"className":25477,"code":28669,"language":25479,"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,28671,28672,28687],{"__ignoreMap":28},[33,28673,28674,28676,28678,28680,28683,28685],{"class":35,"line":36},[33,28675,28505],{"class":3632},[33,28677,28539],{"class":39},[33,28679,28542],{"class":39},[33,28681,28682],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[33,28684,26765],{"class":63},[33,28686,26334],{"class":39},[33,28688,28689,28691,28693],{"class":35,"line":43},[33,28690,26232],{"class":3632},[33,28692,27872],{"class":117},[33,28694,28695],{"class":117}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[162,28697,28698],{"start":43},[165,28699,28700],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[23,28702,28704],{"className":25477,"code":28703,"language":25479,"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,28705,28706,28711,28725,28729,28734],{"__ignoreMap":28},[33,28707,28708],{"class":35,"line":36},[33,28709,28710],{"class":87},"# 如果是RHEL或者Rocky（DNF4）\n",[33,28712,28713,28715,28717,28719,28722],{"class":35,"line":43},[33,28714,26232],{"class":3632},[33,28716,27971],{"class":117},[33,28718,28070],{"class":117},[33,28720,28721],{"class":39}," --add-repo",[33,28723,28724],{"class":117}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[33,28726,28727],{"class":35,"line":130},[33,28728,127],{"emptyLinePlaceholder":126},[33,28730,28731],{"class":35,"line":146},[33,28732,28733],{"class":87},"# 如果是Feodra41+（DNF5）\n",[33,28735,28736,28738,28740,28742,28744],{"class":35,"line":267},[33,28737,26232],{"class":3632},[33,28739,27971],{"class":117},[33,28741,28070],{"class":117},[33,28743,28073],{"class":117},[33,28745,28746],{"class":39}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[162,28748,28749],{"start":130},[165,28750,28751],{},"安装NVIDIA Container Toolki包",[23,28753,28755],{"className":25477,"code":28754,"language":25479,"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,28756,28757,28762,28775,28779,28784],{"__ignoreMap":28},[33,28758,28759],{"class":35,"line":36},[33,28760,28761],{"class":87},"# 如果是RHEL或者Rocky\n",[33,28763,28764,28766,28768,28770,28772],{"class":35,"line":43},[33,28765,26232],{"class":3632},[33,28767,27971],{"class":117},[33,28769,25489],{"class":117},[33,28771,28056],{"class":39},[33,28773,28774],{"class":117}," nvidia-container-toolkit\n",[33,28776,28777],{"class":35,"line":130},[33,28778,127],{"emptyLinePlaceholder":126},[33,28780,28781],{"class":35,"line":146},[33,28782,28783],{"class":87},"# 如果是Fedora\n",[33,28785,28786,28788,28790,28792,28794],{"class":35,"line":267},[33,28787,26232],{"class":3632},[33,28789,27971],{"class":117},[33,28791,25489],{"class":117},[33,28793,28056],{"class":39},[33,28795,28774],{"class":117},[162,28797,28798],{"start":146},[165,28799,28800,28801,28803],{},"安装nvidia-docker2 ： 在Fedora上使用",[30,28802,27946],{},"进行安装",[23,28805,28807],{"className":25477,"code":28806,"language":25479,"meta":28,"style":28},"sudo dnf install -y nvidia-docker2\n",[30,28808,28809],{"__ignoreMap":28},[33,28810,28811,28813,28815,28817,28819],{"class":35,"line":36},[33,28812,26232],{"class":3632},[33,28814,27971],{"class":117},[33,28816,25489],{"class":117},[33,28818,28056],{"class":39},[33,28820,28610],{"class":117},[162,28822,28823],{"start":267},[165,28824,28825],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[23,28827,28828],{"className":25477,"code":28618,"language":25479,"meta":28,"style":28},[30,28829,28830],{"__ignoreMap":28},[33,28831,28832,28834,28836,28838,28840],{"class":35,"line":36},[33,28833,26232],{"class":3632},[33,28835,28627],{"class":117},[33,28837,28630],{"class":117},[33,28839,28633],{"class":117},[33,28841,28636],{"class":39},[162,28843,28844],{"start":275},[165,28845,28846],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[23,28848,28849],{"className":25477,"code":28644,"language":25479,"meta":28,"style":28},[30,28850,28851],{"__ignoreMap":28},[33,28852,28853,28855,28857,28859],{"class":35,"line":36},[33,28854,26232],{"class":3632},[33,28856,28169],{"class":117},[33,28858,28655],{"class":117},[33,28860,28148],{"class":117},[19,28862,28863],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28865,28866],{},"方法：",[19,28868,28869],{},"1️⃣nvidia-smi",[19,28871,28872],{},"2️⃣运行nvidia cuda 容器进行测试",[23,28874,28876],{"className":25477,"code":28875,"language":25479,"meta":28,"style":28},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[30,28877,28878],{"__ignoreMap":28},[33,28879,28880,28882,28884,28887,28890,28893,28896,28899],{"class":35,"line":36},[33,28881,26232],{"class":3632},[33,28883,27976],{"class":117},[33,28885,28886],{"class":117}," run",[33,28888,28889],{"class":39}," --rm",[33,28891,28892],{"class":39}," --gpus",[33,28894,28895],{"class":117}," all",[33,28897,28898],{"class":117}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[33,28900,28901],{"class":117}," nvidia-smi\n",[19,28903,28904],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28906,28907],{},[3145,28908],{"alt":28,"src":28909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[633,28911,28913],{"id":28912},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28915,28916],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28918,28919],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28921,28922],{},[2057,28923,28924],{"href":28924,"rel":28925},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25520],[19,28927,28928],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28930,28931],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28933,28934],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1956,28936,28937,28953],{},[1959,28938,28939],{},[1962,28940,28941,28944,28947,28950],{},[1965,28942,28943],{"align":25391},"镜像类型",[1965,28945,28946],{"align":25391},"适用场景",[1965,28948,28949],{"align":25391},"示例标签",[1965,28951,28952],{"align":25391},"大小",[2003,28954,28955,28969,28983],{},[1962,28956,28957,28960,28963,28966],{},[2008,28958,28959],{"align":25391},"base",[2008,28961,28962],{"align":25391},"仅需 CUDA 运行时库",[2008,28964,28965],{"align":25391},"12.4.0-base-ubuntu22.04",[2008,28967,28968],{"align":25391},"~240MB",[1962,28970,28971,28974,28977,28980],{},[2008,28972,28973],{"align":25391},"runtime",[2008,28975,28976],{"align":25391},"部署编译后的应用（含数学库）",[2008,28978,28979],{"align":25391},"12.4.0-runtime-ubuntu22.04",[2008,28981,28982],{"align":25391},"~2GB",[1962,28984,28985,28988,28991,28994],{},[2008,28986,28987],{"align":25391},"devel",[2008,28989,28990],{"align":25391},"开发环境（含编译工具）",[2008,28992,28993],{"align":25391},"12.4.0-devel-ubuntu22.04",[2008,28995,28996],{"align":25391},"~3GB",[19,28998,28999,29000,29003],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[30,29001,29002],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29005,29006],{},[3145,29007],{"alt":28,"src":29008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29010,29011],{},"在dockerfile里就可以开头这么写：",[23,29013,29015],{"className":25477,"code":29014,"language":25479,"meta":28,"style":28},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[30,29016,29017,29022],{"__ignoreMap":28},[33,29018,29019],{"class":35,"line":36},[33,29020,29021],{"class":87},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[33,29023,29024,29027],{"class":35,"line":43},[33,29025,29026],{"class":3632},"FROM",[33,29028,29029],{"class":117}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[633,29031,29033],{"id":29032},"_34配置以太网","3.4.配置以太网",[19,29035,29036],{},"指定网络模式",[23,29038,29040],{"className":25477,"code":29039,"language":25479,"meta":28,"style":28},"--net=host \\\n",[30,29041,29042],{"__ignoreMap":28},[33,29043,29044,29047,29049,29052],{"class":35,"line":36},[33,29045,29046],{"class":59},"--net",[33,29048,64],{"class":63},[33,29050,29051],{"class":117},"host",[33,29053,26334],{"class":3632},[19,29055,29056],{},"启动参数里加上这行即可。具体在下方",[19,29058,29059],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2822,29061,29062,29065,29068,29071],{},[165,29063,29064],{},"--net=bridge:默认选项，表示连接到默认的网桥",[165,29066,29067],{},"--net=host:容器使用宿主机的网络",[165,29069,29070],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[165,29072,29073],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1729,29075,29076],{},"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":43,"depth":43,"links":29078},[29079,29080,29081,29082],{"id":28393,"depth":130,"text":28394},{"id":28460,"depth":130,"text":28461},{"id":28912,"depth":130,"text":28913},{"id":29032,"depth":130,"text":29033},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28382,"description":28390},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29089,"title":29090,"body":29091,"description":29098,"extension":1752,"meta":29104,"navigation":126,"path":29105,"seo":29106,"stem":29107,"__hash__":29108},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29092,"toc":29102},[29093,29096,29099],[10,29094,29090],{"id":29095},"_4dockerhub换源",[19,29097,29098],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29100,29101],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":28,"searchDepth":43,"depth":43,"links":29103},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29090,"description":29098},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29110,"title":29111,"body":29112,"description":28,"extension":1752,"meta":30123,"navigation":126,"path":30124,"seo":30125,"stem":30126,"__hash__":30127},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29113,"toc":30118},[29114,29117,29121,29127,29131,29134,29474,29477,29480,29483,29488,29493,29496,29499,29502,29505,29524,29527,29538,29544,29726,29736,29752,30015,30017,30041,30056,30065,30115],[10,29115,29111],{"id":29116},"_5docker命令学习",[633,29118,29120],{"id":29119},"_51参考文档","5.1.参考文档",[19,29122,29123],{},[2057,29124,29125],{"href":29125,"rel":29126},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25520],[633,29128,29130],{"id":29129},"_52常用命令","5.2.常用命令",[19,29132,29133],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1956,29135,29136,29149],{},[1959,29137,29138],{},[1962,29139,29140,29143,29146],{},[1965,29141,29142],{"align":25391},"命令",[1965,29144,29145],{"align":25391},"描述",[1965,29147,29148],{"align":25391},"示例",[2003,29150,29151,29162,29173,29184,29195,29206,29217,29228,29238,29249,29260,29271,29281,29292,29303,29314,29324,29334,29344,29354,29365,29376,29387,29398,29409,29420,29430,29441,29452,29463],{},[1962,29152,29153,29156,29159],{},[2008,29154,29155],{"align":25391},"docker run",[2008,29157,29158],{"align":25391},"创建并启动一个新的容器。",[2008,29160,29161],{"align":25391},"docker run -it ubuntu bash",[1962,29163,29164,29167,29170],{},[2008,29165,29166],{"align":25391},"docker build",[2008,29168,29169],{"align":25391},"通过指定的 Dockerfile 创建一个新的镜像。",[2008,29171,29172],{"align":25391},"docker build -t myimage .",[1962,29174,29175,29178,29181],{},[2008,29176,29177],{"align":25391},"docker pull",[2008,29179,29180],{"align":25391},"从 Docker 仓库拉取镜像。",[2008,29182,29183],{"align":25391},"docker pull ubuntu",[1962,29185,29186,29189,29192],{},[2008,29187,29188],{"align":25391},"docker push",[2008,29190,29191],{"align":25391},"将本地镜像推送到 Docker 仓库。",[2008,29193,29194],{"align":25391},"docker push myimage",[1962,29196,29197,29200,29203],{},[2008,29198,29199],{"align":25391},"docker stop",[2008,29201,29202],{"align":25391},"停止一个正在运行的容器。",[2008,29204,29205],{"align":25391},"docker stop container_id",[1962,29207,29208,29211,29214],{},[2008,29209,29210],{"align":25391},"docker start",[2008,29212,29213],{"align":25391},"启动一个已经存在的容器。",[2008,29215,29216],{"align":25391},"docker start container_id",[1962,29218,29219,29222,29225],{},[2008,29220,29221],{"align":25391},"docker restart",[2008,29223,29224],{"align":25391},"重新启动容器。",[2008,29226,29227],{"align":25391},"docker restart container_id",[1962,29229,29230,29233,29236],{},[2008,29231,29232],{"align":25391},"docker ps",[2008,29234,29235],{"align":25391},"列出当前正在运行的容器。",[2008,29237,29232],{"align":25391},[1962,29239,29240,29243,29246],{},[2008,29241,29242],{"align":25391},"docker rm",[2008,29244,29245],{"align":25391},"删除一个或多个停止的容器。",[2008,29247,29248],{"align":25391},"docker rm container_id",[1962,29250,29251,29254,29257],{},[2008,29252,29253],{"align":25391},"docker exec",[2008,29255,29256],{"align":25391},"在一个正在运行的容器中执行命令。",[2008,29258,29259],{"align":25391},"docker exec -it container_id bash",[1962,29261,29262,29265,29268],{},[2008,29263,29264],{"align":25391},"docker logs",[2008,29266,29267],{"align":25391},"查看容器的日志输出。",[2008,29269,29270],{"align":25391},"docker logs container_id",[1962,29272,29273,29276,29279],{},[2008,29274,29275],{"align":25391},"docker images",[2008,29277,29278],{"align":25391},"列出本地所有镜像。",[2008,29280,29275],{"align":25391},[1962,29282,29283,29286,29289],{},[2008,29284,29285],{"align":25391},"docker rmi",[2008,29287,29288],{"align":25391},"删除一个或多个镜像。",[2008,29290,29291],{"align":25391},"docker rmi myimage",[1962,29293,29294,29297,29300],{},[2008,29295,29296],{"align":25391},"docker network",[2008,29298,29299],{"align":25391},"管理 Docker 网络。",[2008,29301,29302],{"align":25391},"docker network ls",[1962,29304,29305,29308,29311],{},[2008,29306,29307],{"align":25391},"docker volume",[2008,29309,29310],{"align":25391},"管理 Docker 数据卷。",[2008,29312,29313],{"align":25391},"docker volume ls",[1962,29315,29316,29319,29322],{},[2008,29317,29318],{"align":25391},"docker-compose up",[2008,29320,29321],{"align":25391},"启动 docker-compose.yml 中定义的所有服务。",[2008,29323,29318],{"align":25391},[1962,29325,29326,29329,29332],{},[2008,29327,29328],{"align":25391},"docker-compose down",[2008,29330,29331],{"align":25391},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2008,29333,29328],{"align":25391},[1962,29335,29336,29339,29342],{},[2008,29337,29338],{"align":25391},"docker info",[2008,29340,29341],{"align":25391},"显示 Docker 系统的详细信息。",[2008,29343,29338],{"align":25391},[1962,29345,29346,29349,29352],{},[2008,29347,29348],{"align":25391},"docker stats",[2008,29350,29351],{"align":25391},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2008,29353,29348],{"align":25391},[1962,29355,29356,29359,29362],{},[2008,29357,29358],{"align":25391},"docker inspect",[2008,29360,29361],{"align":25391},"查看容器或镜像的详细信息（JSON 格式）。",[2008,29363,29364],{"align":25391},"docker inspect container_id",[1962,29366,29367,29370,29373],{},[2008,29368,29369],{"align":25391},"docker save",[2008,29371,29372],{"align":25391},"将一个镜像保存为 tar 文件。",[2008,29374,29375],{"align":25391},"docker save -o myimage.tar myimage",[1962,29377,29378,29381,29384],{},[2008,29379,29380],{"align":25391},"docker load",[2008,29382,29383],{"align":25391},"从 tar 文件中加载镜像。",[2008,29385,29386],{"align":25391},"docker load -i myimage.tar",[1962,29388,29389,29392,29395],{},[2008,29390,29391],{"align":25391},"docker tag",[2008,29393,29394],{"align":25391},"为镜像添加标签（tag）。",[2008,29396,29397],{"align":25391},"docker tag myimage myimage:v1",[1962,29399,29400,29403,29406],{},[2008,29401,29402],{"align":25391},"docker buildx build",[2008,29404,29405],{"align":25391},"使用 Buildx 构建多架构镜像。",[2008,29407,29408],{"align":25391},"docker buildx build -t myimage .",[1962,29410,29411,29414,29417],{},[2008,29412,29413],{"align":25391},"docker buildx create",[2008,29415,29416],{"align":25391},"创建一个新的 Buildx 构建实例。",[2008,29418,29419],{"align":25391},"docker buildx create –use",[1962,29421,29422,29425,29428],{},[2008,29423,29424],{"align":25391},"docker buildx ls",[2008,29426,29427],{"align":25391},"列出所有可用的 Buildx 构建实例。",[2008,29429,29424],{"align":25391},[1962,29431,29432,29435,29438],{},[2008,29433,29434],{"align":25391},"docker buildx use",[2008,29436,29437],{"align":25391},"设置当前的 Buildx 构建实例。",[2008,29439,29440],{"align":25391},"docker buildx use mybuilder",[1962,29442,29443,29446,29449],{},[2008,29444,29445],{"align":25391},"docker buildx bake",[2008,29447,29448],{"align":25391},"使用 Bake 文件批量构建镜像。",[2008,29450,29451],{"align":25391},"docker buildx bake -f bake.hcl",[1962,29453,29454,29457,29460],{},[2008,29455,29456],{"align":25391},"docker buildx build –push",[2008,29458,29459],{"align":25391},"构建镜像并推送到镜像仓库。",[2008,29461,29462],{"align":25391},"docker buildx build –push -t myimage .",[1962,29464,29465,29468,29471],{},[2008,29466,29467],{"align":25391},"docker buildx build –platform",[2008,29469,29470],{"align":25391},"构建镜像并为多个平台生成支持。",[2008,29472,29473],{"align":25391},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29475,29476],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29478,29479],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29481,29482],{},"docker images 可以查看已经下载的镜像",[19,29484,29485],{},[3145,29486],{"alt":28,"src":29487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29489,29490],{},[1968,29491,29492],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29494,29495],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29497,29498],{},"docker container logs 查看容器日志",[19,29500,29501],{},"docker top 查看容器里的进程",[19,29503,29504],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[23,29506,29508],{"className":25477,"code":29507,"language":25479,"meta":28,"style":28},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[30,29509,29510],{"__ignoreMap":28},[33,29511,29512,29515,29518,29521],{"class":35,"line":36},[33,29513,29514],{"class":3632},"如：docker",[33,29516,29517],{"class":117}," cp",[33,29519,29520],{"class":117}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[33,29522,29523],{"class":117}," \u002Fmydata\u002Fnginx\n",[19,29525,29526],{},"docker run时在启动容器的时候会有几个常用的选项：",[2822,29528,29529,29532,29535],{},[165,29530,29531],{},"-d选项：表示后台运行",[165,29533,29534],{},"-P选项：随机端口映射",[165,29536,29537],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[633,29539,29541],{"id":29540},"_53run命令的参数非常重要",[1968,29542,29543],{},"5.3.run命令的参数（非常重要）",[1956,29545,29546,29559],{},[1959,29547,29548],{},[1962,29549,29550,29553,29556],{},[1965,29551,29552],{"align":25391},"参数\u002F配置",[1965,29554,29555],{"align":25391},"功能说明",[1965,29557,29558],{"align":25391},"重要性与参考依据",[2003,29560,29561,29572,29583,29594,29605,29616,29627,29638,29649,29660,29671,29682,29693,29704,29715],{},[1962,29562,29563,29566,29569],{},[2008,29564,29565],{"align":25391},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2008,29567,29568],{"align":25391},"指定容器名称，便于后续管理",[2008,29570,29571],{"align":25391},"替代随机生成的容器名。",[1962,29573,29574,29577,29580],{},[2008,29575,29576],{"align":25391},"–gpus all",[2008,29578,29579],{"align":25391},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2008,29581,29582],{"align":25391},"用于CUDA加速等GPU依赖任务。",[1962,29584,29585,29588,29591],{},[2008,29586,29587],{"align":25391},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2008,29589,29590],{"align":25391},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2008,29592,29593],{"align":25391},"确保容器内GPU功能完整67。",[1962,29595,29596,29599,29602],{},[2008,29597,29598],{"align":25391},"-dit",[2008,29600,29601],{"align":25391},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2008,29603,29604],{"align":25391},"允许容器在后台运行并支持交互操作。",[1962,29606,29607,29610,29613],{},[2008,29608,29609],{"align":25391},"–privileged",[2008,29611,29612],{"align":25391},"赋予容器完全主机权限（可访问设备、内核模块等）",[2008,29614,29615],{"align":25391},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1962,29617,29618,29621,29624],{},[2008,29619,29620],{"align":25391},"–net=host",[2008,29622,29623],{"align":25391},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2008,29625,29626],{"align":25391},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1962,29628,29629,29632,29635],{},[2008,29630,29631],{"align":25391},"–group-add audio–group-add video–group-add dialout",[2008,29633,29634],{"align":25391},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2008,29636,29637],{"align":25391},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1962,29639,29640,29643,29646],{},[2008,29641,29642],{"align":25391},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2008,29644,29645],{"align":25391},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2008,29647,29648],{"align":25391},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1962,29650,29651,29654,29657],{},[2008,29652,29653],{"align":25391},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2008,29655,29656],{"align":25391},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2008,29658,29659],{"align":25391},"实现容器内图形显示。",[1962,29661,29662,29665,29668],{},[2008,29663,29664],{"align":25391},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2008,29666,29667],{"align":25391},"挂载X11认证文件（只读）",[2008,29669,29670],{"align":25391},"确保容器有权连接宿主机显示服务。",[1962,29672,29673,29676,29679],{},[2008,29674,29675],{"align":25391},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2008,29677,29678],{"align":25391},"挂载Wayland显示协议相关目录",[2008,29680,29681],{"align":25391},"支持Wayland协议的图形显示。",[1962,29683,29684,29687,29690],{},[2008,29685,29686],{"align":25391},"–ulimit nofile=1024:524288",[2008,29688,29689],{"align":25391},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2008,29691,29692],{"align":25391},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1962,29694,29695,29698,29701],{},[2008,29696,29697],{"align":25391},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2008,29699,29700],{"align":25391},"挂载宿主机用户目录到容器内同名路径",[2008,29702,29703],{"align":25391},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1962,29705,29706,29709,29712],{},[2008,29707,29708],{"align":25391},"-w \u002Fhome\u002Ftungchiahui",[2008,29710,29711],{"align":25391},"设置容器启动后的默认工作目录",[2008,29713,29714],{"align":25391},"直接进入项目路径，方便执行命令2324。",[1962,29716,29717,29720,29723],{},[2008,29718,29719],{"align":25391},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2008,29721,29722],{"align":25391},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2008,29724,29725],{"align":25391},"提供预配置的深度学习与机器人开发环境。",[19,29727,29728,29729,29731,29732,29735],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[30,29730,26232],{},"加不加",[30,29733,29734],{},"sudo -E","都无所谓。",[19,29737,29738,29739,29741,29742,29744,29745,29748,29749,29751],{},"用户已经被加到docker组了，不用",[30,29740,26232],{},"也行跑，其次，",[30,29743,26232],{},"运行的话，你的",[30,29746,29747],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[30,29750,29747],{},"更不可能变了。",[23,29753,29755],{"className":25477,"code":29754,"language":25479,"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,29756,29757,29770,29780,29790,29802,29809,29816,29823,29833,29842,29851,29865,29877,29889,29898,29908,29917,29932,29965,29992,30003,30010],{"__ignoreMap":28},[33,29758,29759,29761,29763,29765,29768],{"class":35,"line":36},[33,29760,26232],{"class":3632},[33,29762,27976],{"class":117},[33,29764,28886],{"class":117},[33,29766,29767],{"class":39}," --name=ros_opencv_cuda",[33,29769,26334],{"class":39},[33,29771,29772,29775,29778],{"class":35,"line":43},[33,29773,29774],{"class":59},"--gpus ",[33,29776,29777],{"class":117},"all",[33,29779,26334],{"class":39},[33,29781,29782,29785,29788],{"class":35,"line":130},[33,29783,29784],{"class":59},"-e ",[33,29786,29787],{"class":117},"NVIDIA_DRIVER_CAPABILITIES=all",[33,29789,26334],{"class":39},[33,29791,29792,29794,29797,29800],{"class":35,"line":146},[33,29793,29784],{"class":59},[33,29795,29796],{"class":117},"DISPLAY=",[33,29798,29799],{"class":59},"$DISPLAY ",[33,29801,27831],{"class":39},[33,29803,29804,29807],{"class":35,"line":267},[33,29805,29806],{"class":59},"-dit ",[33,29808,27831],{"class":39},[33,29810,29811,29814],{"class":35,"line":275},[33,29812,29813],{"class":59},"--privileged ",[33,29815,27831],{"class":39},[33,29817,29818,29821],{"class":35,"line":392},[33,29819,29820],{"class":59},"--net=host ",[33,29822,27831],{"class":39},[33,29824,29825,29828,29831],{"class":35,"line":406},[33,29826,29827],{"class":59},"--group-add ",[33,29829,29830],{"class":117},"audio",[33,29832,26334],{"class":39},[33,29834,29835,29837,29840],{"class":35,"line":418},[33,29836,29827],{"class":59},[33,29838,29839],{"class":117},"video",[33,29841,26334],{"class":39},[33,29843,29844,29846,29849],{"class":35,"line":425},[33,29845,29827],{"class":59},[33,29847,29848],{"class":117},"dialout",[33,29850,26334],{"class":39},[33,29852,29853,29855,29858,29860,29863],{"class":35,"line":1147},[33,29854,29784],{"class":59},[33,29856,29857],{"class":117},"XAUTHORITY=",[33,29859,29747],{"class":59},[33,29861,29862],{"class":117},"\u002F.Xauthority",[33,29864,26334],{"class":39},[33,29866,29867,29869,29872,29875],{"class":35,"line":1329},[33,29868,29784],{"class":59},[33,29870,29871],{"class":117},"WAYLAND_DISPLAY=",[33,29873,29874],{"class":59},"$WAYLAND_DISPLAY ",[33,29876,27831],{"class":39},[33,29878,29879,29881,29884,29887],{"class":35,"line":1341},[33,29880,29784],{"class":59},[33,29882,29883],{"class":117},"XDG_RUNTIME_DIR=",[33,29885,29886],{"class":59},"$XDG_RUNTIME_DIR ",[33,29888,27831],{"class":39},[33,29890,29891,29893,29896],{"class":35,"line":1348},[33,29892,29784],{"class":59},[33,29894,29895],{"class":117},"QT_QPA_PLATFORM=xcb",[33,29897,26334],{"class":39},[33,29899,29900,29903,29906],{"class":35,"line":1529},[33,29901,29902],{"class":59},"-v ",[33,29904,29905],{"class":117},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[33,29907,26334],{"class":39},[33,29909,29910,29912,29915],{"class":35,"line":1546},[33,29911,29902],{"class":59},[33,29913,29914],{"class":117},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[33,29916,26334],{"class":39},[33,29918,29919,29922,29925,29927,29930],{"class":35,"line":1551},[33,29920,29921],{"class":59},"-v $HOME",[33,29923,29924],{"class":117},"\u002F.Xauthority:",[33,29926,29747],{"class":59},[33,29928,29929],{"class":117},"\u002F.Xauthority:ro",[33,29931,26334],{"class":39},[33,29933,29934,29936,29939,29941,29944,29947,29949,29952,29954,29956,29958,29960,29963],{"class":35,"line":1566},[33,29935,29902],{"class":59},[33,29937,29938],{"class":117},"\u002Frun\u002Fuser\u002F",[33,29940,26755],{"class":59},[33,29942,29943],{"class":3632},"id",[33,29945,29946],{"class":39}," -u",[33,29948,2247],{"class":59},[33,29950,29951],{"class":117},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[33,29953,26755],{"class":59},[33,29955,29943],{"class":3632},[33,29957,29946],{"class":39},[33,29959,2247],{"class":59},[33,29961,29962],{"class":117},"\u002Fwayland-0",[33,29964,26334],{"class":39},[33,29966,29967,29969,29971,29973,29975,29977,29979,29982,29984,29986,29988,29990],{"class":35,"line":1578},[33,29968,29902],{"class":59},[33,29970,29938],{"class":117},[33,29972,26755],{"class":59},[33,29974,29943],{"class":3632},[33,29976,29946],{"class":39},[33,29978,2247],{"class":59},[33,29980,29981],{"class":117},":\u002Frun\u002Fuser\u002F",[33,29983,26755],{"class":59},[33,29985,29943],{"class":3632},[33,29987,29946],{"class":39},[33,29989,15372],{"class":59},[33,29991,27831],{"class":39},[33,29993,29994,29996,29998,30001],{"class":35,"line":1583},[33,29995,29921],{"class":59},[33,29997,2676],{"class":117},[33,29999,30000],{"class":59},"$HOME ",[33,30002,27831],{"class":39},[33,30004,30005,30008],{"class":35,"line":3369},[33,30006,30007],{"class":59},"-w $HOME ",[33,30009,27831],{"class":39},[33,30011,30012],{"class":35,"line":3396},[33,30013,30014],{"class":59},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30016,160],{},[162,30018,30019,30027,30030,30033],{},[165,30020,30021,15453,30023,30026],{},[30,30022,29787],{},[30,30024,30025],{},"--gpus all","没有英伟达显卡请注释。",[165,30028,30029],{},"--name后面请自己为容器起名。",[165,30031,30032],{},"最后一行仓库名称请你自己找对应的镜像填上。",[165,30034,30035,30036,1628],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25208,30037,30038],{},[1968,30039,30040],{},"请不要加",[23,30042,30044],{"className":25477,"code":30043,"language":25479,"meta":28,"style":28},"--ulimit nofile=1024:524288 \\\n",[30,30045,30046],{"__ignoreMap":28},[33,30047,30048,30051,30054],{"class":35,"line":36},[33,30049,30050],{"class":3632},"--ulimit",[33,30052,30053],{"class":117}," nofile=1024:524288",[33,30055,26334],{"class":39},[19,30057,30058,30059,30064],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25208,30060,30061],{},[1968,30062,30063],{},"不建议","**.**",[23,30066,30068],{"className":25477,"code":30067,"language":25479,"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,30069,30070,30097,30106],{"__ignoreMap":28},[33,30071,30072,30075,30078,30080,30082,30084,30086,30088,30090,30093,30095],{"class":35,"line":36},[33,30073,30074],{"class":3632},"--user",[33,30076,30077],{"class":59}," $(",[33,30079,29943],{"class":3632},[33,30081,29946],{"class":39},[33,30083,2247],{"class":59},[33,30085,2676],{"class":117},[33,30087,26755],{"class":59},[33,30089,29943],{"class":3632},[33,30091,30092],{"class":39}," -g",[33,30094,15372],{"class":59},[33,30096,27831],{"class":39},[33,30098,30099,30101,30104],{"class":35,"line":43},[33,30100,29902],{"class":59},[33,30102,30103],{"class":117},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[33,30105,26334],{"class":39},[33,30107,30108,30110,30113],{"class":35,"line":130},[33,30109,29902],{"class":59},[33,30111,30112],{"class":117},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[33,30114,26334],{"class":39},[1729,30116,30117],{},"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":43,"depth":43,"links":30119},[30120,30121,30122],{"id":29119,"depth":130,"text":29120},{"id":29129,"depth":130,"text":29130},{"id":29540,"depth":130,"text":29543},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29111,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30129,"title":30130,"body":30131,"description":28,"extension":1752,"meta":31754,"navigation":126,"path":31755,"seo":31756,"stem":31757,"__hash__":31758},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30132,"toc":31749},[30133,30136,30140,30143,30365,30369,30373,30376,30482,30487,30490,30495,30498,30503,30506,30511,30514,30526,30529,30534,30541,30569,30576,30652,30657,30660,30683,30685,30760,30765,30768,30772,30780,30785,30790,30794,30805,30811,30814,30817,30841,30844,30847,30875,30878,30881,31346,31349,31354,31359,31363,31386,31391,31395,31399,31402,31405,31408,31435,31438,31441,31459,31462,31465,31487,31495,31500,31505,31509,31512,31515,31518,31521,31566,31569,31587,31590,31595,31598,31619,31622,31678,31681,31686,31690,31693,31700,31703,31706,31711,31714,31730,31733,31746],[10,30134,30130],{"id":30135},"_6手动创建docker镜像",[633,30137,30139],{"id":30138},"_61dockerfile","6.1.DockerFile",[19,30141,30142],{},"常用命令：",[1956,30144,30145,30156],{},[1959,30146,30147],{},[1962,30148,30149,30152,30154],{},[1965,30150,30151],{"align":25391},"指令",[1965,30153,27525],{"align":25391},[1965,30155,29148],{"align":25391},[2003,30157,30158,30168,30184,30195,30206,30217,30228,30239,30250,30264,30278,30289,30303,30314,30325,30339,30354],{},[1962,30159,30160,30162,30165],{},[2008,30161,29026],{"align":25391},[2008,30163,30164],{"align":25391},"指定基础镜像，是 Dockerfile 的起点",[2008,30166,30167],{"align":25391},"FROM ubuntu:22.04",[1962,30169,30170,30173,30176],{},[2008,30171,30172],{"align":25391},"LABEL",[2008,30174,30175],{"align":25391},"添加元数据（如作者、版本等）",[2008,30177,30178,30179,30183],{"align":25391},"LABEL maintainer=”",[2057,30180,30182],{"href":30181},"mailto:you@example.com","you@example.com","”",[1962,30185,30186,30189,30192],{},[2008,30187,30188],{"align":25391},"ENV",[2008,30190,30191],{"align":25391},"设置环境变量",[2008,30193,30194],{"align":25391},"ENV PORT=8080",[1962,30196,30197,30200,30203],{},[2008,30198,30199],{"align":25391},"ARG",[2008,30201,30202],{"align":25391},"构建参数，只在构建期间可用",[2008,30204,30205],{"align":25391},"ARG VERSION=1.0",[1962,30207,30208,30211,30214],{},[2008,30209,30210],{"align":25391},"RUN",[2008,30212,30213],{"align":25391},"构建镜像时运行命令",[2008,30215,30216],{"align":25391},"RUN apt-get update && apt-get install -y curl",[1962,30218,30219,30222,30225],{},[2008,30220,30221],{"align":25391},"COPY",[2008,30223,30224],{"align":25391},"复制文件到镜像中",[2008,30226,30227],{"align":25391},"COPY . \u002Fapp",[1962,30229,30230,30233,30236],{},[2008,30231,30232],{"align":25391},"ADD",[2008,30234,30235],{"align":25391},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2008,30237,30238],{"align":25391},"ADD archive.tar.gz \u002Fdata\u002F",[1962,30240,30241,30244,30247],{},[2008,30242,30243],{"align":25391},"WORKDIR",[2008,30245,30246],{"align":25391},"设置工作目录",[2008,30248,30249],{"align":25391},"WORKDIR \u002Fopt",[1962,30251,30252,30255,30258],{},[2008,30253,30254],{"align":25391},"CMD",[2008,30256,30257],{"align":25391},"设置容器启动时默认命令（可被 docker run 覆盖）",[2008,30259,30260,30261],{"align":25391},"CMD ",[33,30262,30263],{},"“node”, “index.js”",[1962,30265,30266,30269,30272],{},[2008,30267,30268],{"align":25391},"ENTRYPOINT",[2008,30270,30271],{"align":25391},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2008,30273,30274,30275],{"align":25391},"ENTRYPOINT ",[33,30276,30277],{},"“python3”",[1962,30279,30280,30283,30286],{},[2008,30281,30282],{"align":25391},"EXPOSE",[2008,30284,30285],{"align":25391},"声明镜像内服务监听的端口（不会自动映射）",[2008,30287,30288],{"align":25391},"EXPOSE 80",[1962,30290,30291,30294,30297],{},[2008,30292,30293],{"align":25391},"VOLUME",[2008,30295,30296],{"align":25391},"声明数据卷挂载点",[2008,30298,30299,30300],{"align":25391},"VOLUME ",[33,30301,30302],{},"“\u002Fdata”",[1962,30304,30305,30308,30311],{},[2008,30306,30307],{"align":25391},"USER",[2008,30309,30310],{"align":25391},"设置后续命令执行的用户",[2008,30312,30313],{"align":25391},"USER appuser",[1962,30315,30316,30319,30322],{},[2008,30317,30318],{"align":25391},"ONBUILD",[2008,30320,30321],{"align":25391},"当镜像作为其他镜像基础镜像时触发的构建指令",[2008,30323,30324],{"align":25391},"ONBUILD COPY . \u002Fsrc",[1962,30326,30327,30330,30333],{},[2008,30328,30329],{"align":25391},"SHELL",[2008,30331,30332],{"align":25391},"更改默认 shell，比如将 sh -c 改为 bash -c",[2008,30334,30335,30336],{"align":25391},"SHELL ",[33,30337,30338],{},"“\u002Fbin\u002Fbash”, “-c”",[1962,30340,30341,30344,30347],{},[2008,30342,30343],{"align":25391},"HEALTHCHECK",[2008,30345,30346],{"align":25391},"定义容器运行时的健康检查命令",[2008,30348,30349,30350],{"align":25391},"`HEALTHCHECK CMD curl –fail ",[2057,30351,30352],{"href":30352,"rel":30353},"http:\u002F\u002Flocalhost:8080",[25520],[1962,30355,30356,30359,30362],{},[2008,30357,30358],{"align":25391},"STOPSIGNAL",[2008,30360,30361],{"align":25391},"容器停止时发送的信号",[2008,30363,30364],{"align":25391},"STOPSIGNAL SIGKILL",[633,30366,30368],{"id":30367},"_62自己创建容器","6.2.自己创建容器",[23653,30370,30372],{"id":30371},"_621手动创建","6.2.1.手动创建",[19,30374,30375],{},"在x86电脑上编译x86的：",[23,30377,30379],{"className":25477,"code":30378,"language":25479,"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,30380,30381,30397,30401,30414,30418,30431,30435,30448,30452,30465,30469],{"__ignoreMap":28},[33,30382,30383,30385,30388,30391,30394],{"class":35,"line":36},[33,30384,28209],{"class":3632},[33,30386,30387],{"class":117}," build",[33,30389,30390],{"class":39}," -t",[33,30392,30393],{"class":117}," ros-melodic-cuda118-cudnn8-bionic:latest",[33,30395,30396],{"class":117}," .\n",[33,30398,30399],{"class":35,"line":43},[33,30400,127],{"emptyLinePlaceholder":126},[33,30402,30403,30405,30407,30409,30412],{"class":35,"line":130},[33,30404,28209],{"class":3632},[33,30406,30387],{"class":117},[33,30408,30390],{"class":39},[33,30410,30411],{"class":117}," ros-noetic-focal:latest",[33,30413,30396],{"class":117},[33,30415,30416],{"class":35,"line":146},[33,30417,127],{"emptyLinePlaceholder":126},[33,30419,30420,30422,30424,30426,30429],{"class":35,"line":267},[33,30421,28209],{"class":3632},[33,30423,30387],{"class":117},[33,30425,30390],{"class":39},[33,30427,30428],{"class":117}," ros-humble-jammy:latest",[33,30430,30396],{"class":117},[33,30432,30433],{"class":35,"line":275},[33,30434,127],{"emptyLinePlaceholder":126},[33,30436,30437,30439,30441,30443,30446],{"class":35,"line":392},[33,30438,28209],{"class":3632},[33,30440,30387],{"class":117},[33,30442,30390],{"class":39},[33,30444,30445],{"class":117}," ros-jazzy-noble:latest",[33,30447,30396],{"class":117},[33,30449,30450],{"class":35,"line":406},[33,30451,127],{"emptyLinePlaceholder":126},[33,30453,30454,30456,30458,30460,30463],{"class":35,"line":418},[33,30455,28209],{"class":3632},[33,30457,30387],{"class":117},[33,30459,30390],{"class":39},[33,30461,30462],{"class":117}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[33,30464,30396],{"class":117},[33,30466,30467],{"class":35,"line":425},[33,30468,127],{"emptyLinePlaceholder":126},[33,30470,30471,30473,30475,30477,30480],{"class":35,"line":1147},[33,30472,28209],{"class":3632},[33,30474,30387],{"class":117},[33,30476,30390],{"class":39},[33,30478,30479],{"class":117}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[33,30481,30396],{"class":117},[19,30483,30484],{},[3145,30485],{"alt":28,"src":30486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30488,30489],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30491,30492],{},[3145,30493],{"alt":28,"src":30494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30496,30497],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[162,30499,30500],{},[165,30501,30502],{},"创建 Docker Hub 账户",[19,30504,30505],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[162,30507,30508],{"start":43},[165,30509,30510],{},"登录 Docker Hub",[19,30512,30513],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[23,30515,30517],{"className":25477,"code":30516,"language":25479,"meta":28,"style":28},"docker login\n",[30,30518,30519],{"__ignoreMap":28},[33,30520,30521,30523],{"class":35,"line":36},[33,30522,28209],{"class":3632},[33,30524,30525],{"class":117}," login\n",[19,30527,30528],{},"输入你的 Docker Hub 用户名和密码进行验证。",[162,30530,30531],{},[165,30532,30533],{},"为你的镜像打标签",[19,30535,30536,30537,30540],{},"Docker Hub 使用 ",[30,30538,30539],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[23,30542,30544],{"className":25477,"code":30543,"language":25479,"meta":28,"style":28},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[30,30545,30546],{"__ignoreMap":28},[33,30547,30548,30550,30553,30555,30558,30561,30564,30566],{"class":35,"line":36},[33,30549,28209],{"class":3632},[33,30551,30552],{"class":117}," tag",[33,30554,30445],{"class":117},[33,30556,30557],{"class":63}," \u003C",[33,30559,30560],{"class":117},"你的用户",[33,30562,30563],{"class":59},"名",[33,30565,2775],{"class":63},[33,30567,30568],{"class":117},"\u002Fros-jazzy-noble:latest\n",[19,30570,30571,30572,30575],{},"例如，如果你的 Docker Hub 用户名是 ",[30,30573,30574],{},"tungchiahui","，你应该执行：",[23,30577,30579],{"className":25477,"code":30578,"language":25479,"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,30580,30581,30592,30596,30607,30611,30622,30626,30637,30641],{"__ignoreMap":28},[33,30582,30583,30585,30587,30589],{"class":35,"line":36},[33,30584,28209],{"class":3632},[33,30586,30552],{"class":117},[33,30588,30411],{"class":117},[33,30590,30591],{"class":117}," tungchiahui\u002Fros-noetic-focal:latest\n",[33,30593,30594],{"class":35,"line":43},[33,30595,127],{"emptyLinePlaceholder":126},[33,30597,30598,30600,30602,30604],{"class":35,"line":130},[33,30599,28209],{"class":3632},[33,30601,30552],{"class":117},[33,30603,30428],{"class":117},[33,30605,30606],{"class":117}," tungchiahui\u002Fros-humble-jammy:latest\n",[33,30608,30609],{"class":35,"line":146},[33,30610,127],{"emptyLinePlaceholder":126},[33,30612,30613,30615,30617,30619],{"class":35,"line":267},[33,30614,28209],{"class":3632},[33,30616,30552],{"class":117},[33,30618,30445],{"class":117},[33,30620,30621],{"class":117}," tungchiahui\u002Fros-jazzy-noble:latest\n",[33,30623,30624],{"class":35,"line":275},[33,30625,127],{"emptyLinePlaceholder":126},[33,30627,30628,30630,30632,30634],{"class":35,"line":392},[33,30629,28209],{"class":3632},[33,30631,30552],{"class":117},[33,30633,30462],{"class":117},[33,30635,30636],{"class":117}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,30638,30639],{"class":35,"line":406},[33,30640,127],{"emptyLinePlaceholder":126},[33,30642,30643,30645,30647,30649],{"class":35,"line":418},[33,30644,28209],{"class":3632},[33,30646,30552],{"class":117},[33,30648,30479],{"class":117},[33,30650,30651],{"class":117}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[162,30653,30654],{"start":43},[165,30655,30656],{},"推送镜像到 Docker Hub",[19,30658,30659],{},"使用以下命令将镜像推送到 Docker Hub：",[23,30661,30663],{"className":25477,"code":30662,"language":25479,"meta":28,"style":28},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[30,30664,30665],{"__ignoreMap":28},[33,30666,30667,30669,30672,30674,30676,30678,30680],{"class":35,"line":36},[33,30668,28209],{"class":3632},[33,30670,30671],{"class":117}," push",[33,30673,30557],{"class":63},[33,30675,30560],{"class":117},[33,30677,30563],{"class":59},[33,30679,2775],{"class":63},[33,30681,30682],{"class":117},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30684,16291],{},[23,30686,30688],{"className":25477,"code":30687,"language":25479,"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,30689,30690,30698,30702,30710,30714,30722,30726,30735,30739,30747,30751],{"__ignoreMap":28},[33,30691,30692,30694,30696],{"class":35,"line":36},[33,30693,28209],{"class":3632},[33,30695,30671],{"class":117},[33,30697,30591],{"class":117},[33,30699,30700],{"class":35,"line":43},[33,30701,127],{"emptyLinePlaceholder":126},[33,30703,30704,30706,30708],{"class":35,"line":130},[33,30705,28209],{"class":3632},[33,30707,30671],{"class":117},[33,30709,30606],{"class":117},[33,30711,30712],{"class":35,"line":146},[33,30713,127],{"emptyLinePlaceholder":126},[33,30715,30716,30718,30720],{"class":35,"line":267},[33,30717,28209],{"class":3632},[33,30719,30671],{"class":117},[33,30721,30621],{"class":117},[33,30723,30724],{"class":35,"line":275},[33,30725,127],{"emptyLinePlaceholder":126},[33,30727,30728,30730,30732],{"class":35,"line":392},[33,30729,28209],{"class":3632},[33,30731,30671],{"class":117},[33,30733,30734],{"class":117}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,30736,30737],{"class":35,"line":406},[33,30738,127],{"emptyLinePlaceholder":126},[33,30740,30741,30743,30745],{"class":35,"line":418},[33,30742,28209],{"class":3632},[33,30744,30671],{"class":117},[33,30746,30651],{"class":117},[33,30748,30749],{"class":35,"line":425},[33,30750,127],{"emptyLinePlaceholder":126},[33,30752,30753,30755,30757],{"class":35,"line":1147},[33,30754,28209],{"class":3632},[33,30756,30671],{"class":117},[33,30758,30759],{"class":117}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[162,30761,30762],{"start":130},[165,30763,30764],{},"验证推送成功",[19,30766,30767],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30769,30770],{},[1968,30771,5446],{},[2822,30773,30774,30777],{},[165,30775,30776],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[165,30778,30779],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30781,30782],{},[3145,30783],{"alt":28,"src":30784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30786,30787],{},[3145,30788],{"alt":28,"src":30789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23653,30791,30793],{"id":30792},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30795,30796,30797,30800,30801,30804],{},"如果您想在 ",[1968,30798,30799],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[1968,30802,30803],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30806,30807,30808],{},"1. ",[1968,30809,30810],{},"启用 Docker 跨平台构建",[19,30812,30813],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30815,30816],{},"第一步：启用 buildx（只需执行一次）",[23,30818,30820],{"className":25477,"code":30819,"language":25479,"meta":28,"style":28},"docker buildx create --name multiarch_builder --use\n",[30,30821,30822],{"__ignoreMap":28},[33,30823,30824,30826,30829,30832,30835,30838],{"class":35,"line":36},[33,30825,28209],{"class":3632},[33,30827,30828],{"class":117}," buildx",[33,30830,30831],{"class":117}," create",[33,30833,30834],{"class":39}," --name",[33,30836,30837],{"class":117}," multiarch_builder",[33,30839,30840],{"class":39}," --use\n",[19,30842,30843],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30845,30846],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[23,30848,30850],{"className":25477,"code":30849,"language":25479,"meta":28,"style":28},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[30,30851,30852],{"__ignoreMap":28},[33,30853,30854,30856,30858,30860,30863,30866,30869,30872],{"class":35,"line":36},[33,30855,28209],{"class":3632},[33,30857,28886],{"class":117},[33,30859,28889],{"class":39},[33,30861,30862],{"class":39}," --privileged",[33,30864,30865],{"class":117}," multiarch\u002Fqemu-user-static",[33,30867,30868],{"class":39}," --reset",[33,30870,30871],{"class":39}," -p",[33,30873,30874],{"class":117}," yes\n",[19,30876,30877],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30879,30880],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[23,30882,30884],{"className":25477,"code":30883,"language":25479,"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,30885,30886,30928,30932,30937,30947,30957,30966,30972,30976,30980,30990,30998,31007,31013,31017,31021,31031,31039,31048,31054,31058,31062,31072,31080,31089,31095,31099,31103,31113,31121,31130,31136,31140,31144,31154,31162,31171,31177,31181,31185,31195,31203,31212,31218,31222,31226,31236,31244,31253,31259,31263,31267,31277,31285,31294,31300,31304,31308,31319,31327,31336,31342],{"__ignoreMap":28},[33,30887,30888,30890,30892,30894,30897,30900,30902,30904,30907,30909,30911,30913,30915,30918,30921,30923,30926],{"class":35,"line":36},[33,30889,28209],{"class":3632},[33,30891,30828],{"class":117},[33,30893,30387],{"class":117},[33,30895,30896],{"class":39}," --platform",[33,30898,30899],{"class":117}," linux\u002Famd64,linux\u002Farm64",[33,30901,30390],{"class":39},[33,30903,30557],{"class":63},[33,30905,30906],{"class":117},"你的镜像",[33,30908,30563],{"class":59},[33,30910,2775],{"class":63},[33,30912,2676],{"class":117},[33,30914,2726],{"class":63},[33,30916,30917],{"class":117},"标",[33,30919,30920],{"class":59},"签",[33,30922,2775],{"class":63},[33,30924,30925],{"class":39}," --push",[33,30927,30396],{"class":117},[33,30929,30930],{"class":35,"line":43},[33,30931,127],{"emptyLinePlaceholder":126},[33,30933,30934],{"class":35,"line":130},[33,30935,30936],{"class":87},"# 例子：\n",[33,30938,30939,30941,30943,30945],{"class":35,"line":146},[33,30940,28209],{"class":3632},[33,30942,30828],{"class":117},[33,30944,30387],{"class":117},[33,30946,26334],{"class":39},[33,30948,30949,30952,30955],{"class":35,"line":267},[33,30950,30951],{"class":59},"--platform ",[33,30953,30954],{"class":117},"linux\u002Famd64,linux\u002Farm64",[33,30956,26334],{"class":39},[33,30958,30959,30961,30964],{"class":35,"line":275},[33,30960,30390],{"class":39},[33,30962,30963],{"class":117}," tungchiahui\u002Fros:noetic-focal",[33,30965,26334],{"class":39},[33,30967,30968,30970],{"class":35,"line":392},[33,30969,30925],{"class":39},[33,30971,26334],{"class":39},[33,30973,30974],{"class":35,"line":406},[33,30975,30396],{"class":117},[33,30977,30978],{"class":35,"line":418},[33,30979,127],{"emptyLinePlaceholder":126},[33,30981,30982,30984,30986,30988],{"class":35,"line":425},[33,30983,28209],{"class":3632},[33,30985,30828],{"class":117},[33,30987,30387],{"class":117},[33,30989,26334],{"class":39},[33,30991,30992,30994,30996],{"class":35,"line":1147},[33,30993,30951],{"class":59},[33,30995,30954],{"class":117},[33,30997,26334],{"class":39},[33,30999,31000,31002,31005],{"class":35,"line":1329},[33,31001,30390],{"class":39},[33,31003,31004],{"class":117}," tungchiahui\u002Fros:humble-jammy",[33,31006,26334],{"class":39},[33,31008,31009,31011],{"class":35,"line":1341},[33,31010,30925],{"class":39},[33,31012,26334],{"class":39},[33,31014,31015],{"class":35,"line":1348},[33,31016,30396],{"class":117},[33,31018,31019],{"class":35,"line":1529},[33,31020,127],{"emptyLinePlaceholder":126},[33,31022,31023,31025,31027,31029],{"class":35,"line":1546},[33,31024,28209],{"class":3632},[33,31026,30828],{"class":117},[33,31028,30387],{"class":117},[33,31030,26334],{"class":39},[33,31032,31033,31035,31037],{"class":35,"line":1551},[33,31034,30951],{"class":59},[33,31036,30954],{"class":117},[33,31038,26334],{"class":39},[33,31040,31041,31043,31046],{"class":35,"line":1566},[33,31042,30390],{"class":39},[33,31044,31045],{"class":117}," tungchiahui\u002Fros:jazzy-noble",[33,31047,26334],{"class":39},[33,31049,31050,31052],{"class":35,"line":1578},[33,31051,30925],{"class":39},[33,31053,26334],{"class":39},[33,31055,31056],{"class":35,"line":1583},[33,31057,30396],{"class":117},[33,31059,31060],{"class":35,"line":3369},[33,31061,127],{"emptyLinePlaceholder":126},[33,31063,31064,31066,31068,31070],{"class":35,"line":3396},[33,31065,27976],{"class":3632},[33,31067,30828],{"class":117},[33,31069,30387],{"class":117},[33,31071,26334],{"class":39},[33,31073,31074,31076,31078],{"class":35,"line":3401},[33,31075,30951],{"class":59},[33,31077,30954],{"class":117},[33,31079,26334],{"class":39},[33,31081,31082,31084,31087],{"class":35,"line":3418},[33,31083,30390],{"class":39},[33,31085,31086],{"class":117}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[33,31088,26334],{"class":39},[33,31090,31091,31093],{"class":35,"line":3423},[33,31092,30925],{"class":39},[33,31094,26334],{"class":39},[33,31096,31097],{"class":35,"line":3428},[33,31098,30396],{"class":117},[33,31100,31101],{"class":35,"line":3433},[33,31102,127],{"emptyLinePlaceholder":126},[33,31104,31105,31107,31109,31111],{"class":35,"line":3447},[33,31106,28209],{"class":3632},[33,31108,30828],{"class":117},[33,31110,30387],{"class":117},[33,31112,26334],{"class":39},[33,31114,31115,31117,31119],{"class":35,"line":3452},[33,31116,30951],{"class":59},[33,31118,30954],{"class":117},[33,31120,26334],{"class":39},[33,31122,31123,31125,31128],{"class":35,"line":4243},[33,31124,30390],{"class":39},[33,31126,31127],{"class":117}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[33,31129,26334],{"class":39},[33,31131,31132,31134],{"class":35,"line":4257},[33,31133,30925],{"class":39},[33,31135,26334],{"class":39},[33,31137,31138],{"class":35,"line":4265},[33,31139,30396],{"class":117},[33,31141,31142],{"class":35,"line":4270},[33,31143,127],{"emptyLinePlaceholder":126},[33,31145,31146,31148,31150,31152],{"class":35,"line":4276},[33,31147,27976],{"class":3632},[33,31149,30828],{"class":117},[33,31151,30387],{"class":117},[33,31153,26334],{"class":39},[33,31155,31156,31158,31160],{"class":35,"line":4282},[33,31157,30951],{"class":59},[33,31159,30954],{"class":117},[33,31161,26334],{"class":39},[33,31163,31164,31166,31169],{"class":35,"line":4287},[33,31165,30390],{"class":39},[33,31167,31168],{"class":117}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[33,31170,26334],{"class":39},[33,31172,31173,31175],{"class":35,"line":9608},[33,31174,30925],{"class":39},[33,31176,26334],{"class":39},[33,31178,31179],{"class":35,"line":9632},[33,31180,30396],{"class":117},[33,31182,31183],{"class":35,"line":9637},[33,31184,127],{"emptyLinePlaceholder":126},[33,31186,31187,31189,31191,31193],{"class":35,"line":9643},[33,31188,28209],{"class":3632},[33,31190,30828],{"class":117},[33,31192,30387],{"class":117},[33,31194,26334],{"class":39},[33,31196,31197,31199,31201],{"class":35,"line":9670},[33,31198,30951],{"class":59},[33,31200,30954],{"class":117},[33,31202,26334],{"class":39},[33,31204,31205,31207,31210],{"class":35,"line":9675},[33,31206,30390],{"class":39},[33,31208,31209],{"class":117}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[33,31211,26334],{"class":39},[33,31213,31214,31216],{"class":35,"line":9681},[33,31215,30925],{"class":39},[33,31217,26334],{"class":39},[33,31219,31220],{"class":35,"line":9693},[33,31221,30396],{"class":117},[33,31223,31224],{"class":35,"line":9705},[33,31225,127],{"emptyLinePlaceholder":126},[33,31227,31228,31230,31232,31234],{"class":35,"line":9717},[33,31229,28209],{"class":3632},[33,31231,30828],{"class":117},[33,31233,30387],{"class":117},[33,31235,26334],{"class":39},[33,31237,31238,31240,31242],{"class":35,"line":11375},[33,31239,30951],{"class":59},[33,31241,30954],{"class":117},[33,31243,26334],{"class":39},[33,31245,31246,31248,31251],{"class":35,"line":11400},[33,31247,30390],{"class":39},[33,31249,31250],{"class":117}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,31252,26334],{"class":39},[33,31254,31255,31257],{"class":35,"line":11423},[33,31256,30925],{"class":39},[33,31258,26334],{"class":39},[33,31260,31261],{"class":35,"line":11447},[33,31262,30396],{"class":117},[33,31264,31265],{"class":35,"line":11452},[33,31266,127],{"emptyLinePlaceholder":126},[33,31268,31269,31271,31273,31275],{"class":35,"line":11457},[33,31270,27976],{"class":3632},[33,31272,30828],{"class":117},[33,31274,30387],{"class":117},[33,31276,26334],{"class":39},[33,31278,31279,31281,31283],{"class":35,"line":11462},[33,31280,30951],{"class":59},[33,31282,30954],{"class":117},[33,31284,26334],{"class":39},[33,31286,31287,31289,31292],{"class":35,"line":11471},[33,31288,30390],{"class":39},[33,31290,31291],{"class":117}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[33,31293,26334],{"class":39},[33,31295,31296,31298],{"class":35,"line":11476},[33,31297,30925],{"class":39},[33,31299,26334],{"class":39},[33,31301,31302],{"class":35,"line":11482},[33,31303,30396],{"class":117},[33,31305,31306],{"class":35,"line":11503},[33,31307,127],{"emptyLinePlaceholder":126},[33,31309,31310,31313,31315,31317],{"class":35,"line":11509},[33,31311,31312],{"class":3632},"  docker",[33,31314,30828],{"class":117},[33,31316,30387],{"class":117},[33,31318,26334],{"class":39},[33,31320,31321,31323,31325],{"class":35,"line":11523},[33,31322,30951],{"class":59},[33,31324,30954],{"class":117},[33,31326,26334],{"class":39},[33,31328,31329,31331,31334],{"class":35,"line":11529},[33,31330,30390],{"class":39},[33,31332,31333],{"class":117}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,31335,26334],{"class":39},[33,31337,31338,31340],{"class":35,"line":11556},[33,31339,30925],{"class":39},[33,31341,26334],{"class":39},[33,31343,31344],{"class":35,"line":11565},[33,31345,30396],{"class":117},[19,31347,31348],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31350,31351],{},[3145,31352],{"alt":28,"src":31353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31355,31356],{},[3145,31357],{"alt":28,"src":31358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23653,31360,31362],{"id":31361},"_623清除构建缓存","6.2.3.清除构建缓存",[23,31364,31366],{"className":25477,"code":31365,"language":25479,"meta":28,"style":28},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[30,31367,31368,31373],{"__ignoreMap":28},[33,31369,31370],{"class":35,"line":36},[33,31371,31372],{"class":87},"# 清理BuildKit构建缓存\n",[33,31374,31375,31377,31380,31383],{"class":35,"line":43},[33,31376,28209],{"class":3632},[33,31378,31379],{"class":117}," builder",[33,31381,31382],{"class":117}," prune",[33,31384,31385],{"class":39}," -f\n",[19,31387,31388],{},[3145,31389],{"alt":28,"src":31390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[633,31392,31394],{"id":31393},"_63补充","6.3.补充",[23653,31396,31398],{"id":31397},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31400,31401],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31403,31404],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31406,31407],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[23,31409,31411],{"className":25477,"code":31410,"language":25479,"meta":28,"style":28},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[30,31412,31413,31420],{"__ignoreMap":28},[33,31414,31415,31417],{"class":35,"line":36},[33,31416,29026],{"class":3632},[33,31418,31419],{"class":117}," nginx\n",[33,31421,31422,31424,31427,31430,31432],{"class":35,"line":43},[33,31423,30210],{"class":3632},[33,31425,31426],{"class":117}," echo",[33,31428,31429],{"class":117}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[33,31431,27878],{"class":63},[33,31433,31434],{"class":117}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31436,31437],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31439,31440],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[23,31442,31444],{"className":25477,"code":31443,"language":25479,"meta":28,"style":28},"docker build -t nginx:tuling .\n",[30,31445,31446],{"__ignoreMap":28},[33,31447,31448,31450,31452,31454,31457],{"class":35,"line":36},[33,31449,28209],{"class":3632},[33,31451,30387],{"class":117},[33,31453,30390],{"class":39},[33,31455,31456],{"class":117}," nginx:tuling",[33,31458,30396],{"class":117},[19,31460,31461],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31463,31464],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[23,31466,31468],{"className":25477,"code":31467,"language":25479,"meta":28,"style":28},"docker run -d -p 92:80 nginx:tuling\n",[30,31469,31470],{"__ignoreMap":28},[33,31471,31472,31474,31476,31479,31481,31484],{"class":35,"line":36},[33,31473,28209],{"class":3632},[33,31475,28886],{"class":117},[33,31477,31478],{"class":39}," -d",[33,31480,30871],{"class":39},[33,31482,31483],{"class":117}," 92:80",[33,31485,31486],{"class":117}," nginx:tuling\n",[19,31488,31489,31490],{},"4、访问 ",[2057,31491,31494],{"href":31492,"rel":31493},"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",[25520],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31496,31497],{},[3145,31498],{"alt":28,"src":31499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31501,31502],{},[3145,31503],{"alt":28,"src":31504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23653,31506,31508],{"id":31507},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31510,31511],{},"只需要知道大体流程即可",[19,31513,31514],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31516,31517],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31519,31520],{},"2、在Dockerfile中添加以下内容",[23,31522,31524],{"className":27747,"code":31523,"language":27749,"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,31525,31526,31531,31536,31541,31546,31551,31556,31561],{"__ignoreMap":28},[33,31527,31528],{"class":35,"line":36},[33,31529,31530],{},"# 基于哪个镜像\n",[33,31532,31533],{"class":35,"line":43},[33,31534,31535],{},"From java:8\n",[33,31537,31538],{"class":35,"line":130},[33,31539,31540],{},"# 复制文件到容器\n",[33,31542,31543],{"class":35,"line":146},[33,31544,31545],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[33,31547,31548],{"class":35,"line":267},[33,31549,31550],{},"# 声明需要暴露的端口\n",[33,31552,31553],{"class":35,"line":275},[33,31554,31555],{},"EXPOSE 8877\n",[33,31557,31558],{"class":35,"line":392},[33,31559,31560],{},"# 配置容器启动后执行的命令\n",[33,31562,31563],{"class":35,"line":406},[33,31564,31565],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31567,31568],{},"3、使用docker build命令构建镜像",[23,31570,31572],{"className":25477,"code":31571,"language":25479,"meta":28,"style":28},"docker build -t tulingmall-member:0.0.5 .\n",[30,31573,31574],{"__ignoreMap":28},[33,31575,31576,31578,31580,31582,31585],{"class":35,"line":36},[33,31577,28209],{"class":3632},[33,31579,30387],{"class":117},[33,31581,30390],{"class":39},[33,31583,31584],{"class":117}," tulingmall-member:0.0.5",[33,31586,30396],{"class":117},[19,31588,31589],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31591,31592],{},[3145,31593],{"alt":28,"src":31594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31596,31597],{},"4、启动镜像，加-d可在后台启动",[23,31599,31601],{"className":25477,"code":31600,"language":25479,"meta":28,"style":28},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[30,31602,31603],{"__ignoreMap":28},[33,31604,31605,31607,31609,31611,31613,31616],{"class":35,"line":36},[33,31606,28209],{"class":3632},[33,31608,28886],{"class":117},[33,31610,31478],{"class":39},[33,31612,30871],{"class":39},[33,31614,31615],{"class":117}," 8877:8877",[33,31617,31618],{"class":117}," tulingmall-member:0.0.5\n",[19,31620,31621],{},"加上JVM参数：",[23,31623,31625],{"className":25477,"code":31624,"language":25479,"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,31626,31627,31632,31647,31657,31666,31673],{"__ignoreMap":28},[33,31628,31629],{"class":35,"line":36},[33,31630,31631],{"class":87},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[33,31633,31634,31636,31638,31641,31643,31645],{"class":35,"line":43},[33,31635,28209],{"class":3632},[33,31637,28886],{"class":117},[33,31639,31640],{"class":39},"  -d",[33,31642,30871],{"class":39},[33,31644,31615],{"class":117},[33,31646,26334],{"class":39},[33,31648,31649,31651,31654],{"class":35,"line":130},[33,31650,29784],{"class":59},[33,31652,31653],{"class":117},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[33,31655,31656],{"class":39},"  \\\n",[33,31658,31659,31661,31664],{"class":35,"line":146},[33,31660,29784],{"class":59},[33,31662,31663],{"class":117},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[33,31665,31656],{"class":39},[33,31667,31668,31671],{"class":35,"line":267},[33,31669,31670],{"class":59},"--cap-add=SYS_PTRACE  ",[33,31672,27831],{"class":39},[33,31674,31675],{"class":35,"line":275},[33,31676,31677],{"class":59},"tulingmall-member:0.0.5\n",[19,31679,31680],{},"5、访问会员服务接口",[19,31682,31683],{},[3145,31684],{"alt":28,"src":31685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23653,31687,31689],{"id":31688},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31691,31692],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31694,31695,31696],{},"阿里云docker镜像仓库：",[2057,31697,31698],{"href":31698,"rel":31699},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25520],[19,31701,31702],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31704,31705],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31707,31708],{},[3145,31709],{"alt":28,"src":31710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31712,31713],{},"要把镜像推送到镜像仓库",[23,31715,31717],{"className":25477,"code":31716,"language":25479,"meta":28,"style":28},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,31718,31719],{"__ignoreMap":28},[33,31720,31721,31723,31725,31727],{"class":35,"line":36},[33,31722,28209],{"class":3632},[33,31724,30552],{"class":117},[33,31726,31584],{"class":117},[33,31728,31729],{"class":117}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31731,31732],{},"最后将镜像推送到远程仓库",[23,31734,31736],{"className":25477,"code":31735,"language":25479,"meta":28,"style":28},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,31737,31738],{"__ignoreMap":28},[33,31739,31740,31742,31744],{"class":35,"line":36},[33,31741,28209],{"class":3632},[33,31743,30671],{"class":117},[33,31745,31729],{"class":117},[1729,31747,31748],{},"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":43,"depth":43,"links":31750},[31751,31752,31753],{"id":30138,"depth":130,"text":30139},{"id":30367,"depth":130,"text":30368},{"id":31393,"depth":130,"text":31394},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30130,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31760,"title":31761,"body":31762,"description":28,"extension":1752,"meta":31905,"navigation":126,"path":31906,"seo":31907,"stem":31908,"__hash__":31909},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31763,"toc":31903},[31764,31767,31772,31777,31780,31785,31790,31793,31798,31803,31806,31811,31814,31817,31820,31823,31826,31829,31849,31871,31874,31877,31897,31900],[10,31765,31761],{"id":31766},"_7vscode远程开发",[162,31768,31769],{},[165,31770,31771],{},"插件1：微软Docker工具",[19,31773,31774],{},[3145,31775],{"alt":28,"src":31776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31778,31779],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31781,31782],{},[3145,31783],{"alt":28,"src":31784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[162,31786,31787],{"start":43},[165,31788,31789],{},"插件2：微软Docker远程开发工具",[19,31791,31792],{},"下面这是远程开发的插件。",[19,31794,31795],{},[3145,31796],{"alt":28,"src":31797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31799,31800],{},[3145,31801],{"alt":28,"src":31802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31804,31805],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31807,31808],{},[3145,31809],{"alt":28,"src":31810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31812,31813],{},"安装完拓展之后，vscode进行链接：",[19,31815,31816],{},"1.按ctrl+shift+p",[19,31818,31819],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31821,31822],{},"3.选择目前运行的容器",[19,31824,31825],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31827,31828],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[23,31830,31832],{"className":25477,"code":31831,"language":25479,"meta":28,"style":28},"docker run -v 主机目录:容器目录 image-name\n",[30,31833,31834],{"__ignoreMap":28},[33,31835,31836,31838,31840,31843,31846],{"class":35,"line":36},[33,31837,28209],{"class":3632},[33,31839,28886],{"class":117},[33,31841,31842],{"class":39}," -v",[33,31844,31845],{"class":117}," 主机目录:容器目录",[33,31847,31848],{"class":117}," image-name\n",[23,31850,31852],{"className":25477,"code":31851,"language":25479,"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,31853,31854],{"__ignoreMap":28},[33,31855,31856,31858,31860,31863,31865,31868],{"class":35,"line":36},[33,31857,28209],{"class":3632},[33,31859,28886],{"class":117},[33,31861,31862],{"class":39}," -it",[33,31864,31842],{"class":39},[33,31866,31867],{"class":117}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[33,31869,31870],{"class":117}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31872,31873],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31875,31876],{},"查看挂载情况：",[23,31878,31880],{"className":25477,"code":31879,"language":25479,"meta":28,"style":28},"mount | grep -i project\n",[30,31881,31882],{"__ignoreMap":28},[33,31883,31884,31887,31889,31892,31894],{"class":35,"line":36},[33,31885,31886],{"class":3632},"mount",[33,31888,26765],{"class":63},[33,31890,31891],{"class":3632}," grep",[33,31893,28086],{"class":39},[33,31895,31896],{"class":117}," project\n",[19,31898,31899],{},"也可以通过ls来进行查看",[1729,31901,31902],{},"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":43,"depth":43,"links":31904},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31761,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31911,"title":31912,"body":31913,"description":1751,"extension":1752,"meta":31917,"navigation":126,"path":31919,"seo":31920,"stem":31921,"__hash__":31922},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31914,"toc":31915},[],{"title":28,"searchDepth":43,"depth":43,"links":31916},[],{"category":31918},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31912,"description":1751},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31924,"title":31925,"body":31926,"description":1751,"extension":1752,"meta":31930,"navigation":126,"path":31931,"seo":31932,"stem":31933,"__hash__":31934},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31927,"toc":31928},[],{"title":28,"searchDepth":43,"depth":43,"links":31929},[],{"category":31918},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31925,"description":1751},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31936,"title":31937,"body":31938,"description":1751,"extension":1752,"meta":32227,"navigation":126,"path":32228,"seo":32229,"stem":32230,"__hash__":32231},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31939,"toc":32225},[31940,31943,31951,31966,31971,32022,32025,32031,32214,32219,32222],[10,31941,31937],{"id":31942},"_1验证深度学习环境",[19,31944,31945,31946],{},"关于环境的安装，看",[2057,31947,31950],{"href":31948,"rel":31949},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25520],"Pytorch-->深度学习",[19,31952,31953,31954,31957,31958,31961,31962,31965],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[30,31955,31956],{},"pytorch-cuda=12.4"," 是一个“ ",[1968,31959,31960],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[1968,31963,31964],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31967,31968],{},[3145,31969],{"alt":28,"src":31970},"\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,31972,31974],{"className":25477,"code":31973,"language":25479,"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,31975,31976,31981],{"__ignoreMap":28},[33,31977,31978],{"class":35,"line":36},[33,31979,31980],{"class":87},"# CUDA 12.4\n",[33,31982,31983,31986,31988,31991,31994,31997,32000,32003,32005,32008,32011,32014,32017,32019],{"class":35,"line":43},[33,31984,31985],{"class":3632},"conda",[33,31987,25489],{"class":117},[33,31989,31990],{"class":117}," pytorch==",[33,31992,31993],{"class":39},"2.5.1",[33,31995,31996],{"class":117}," torchvision==",[33,31998,31999],{"class":39},"0.20.1",[33,32001,32002],{"class":117}," torchaudio==",[33,32004,31993],{"class":39},[33,32006,32007],{"class":117}," pytorch-cuda=",[33,32009,32010],{"class":39},"12.4",[33,32012,32013],{"class":39}," -c",[33,32015,32016],{"class":117}," pytorch",[33,32018,32013],{"class":39},[33,32020,32021],{"class":117}," nvidia\n",[19,32023,32024],{},"）：",[19,32026,32027],{},[2057,32028,32029],{"href":32029,"rel":32030},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25520],[23,32032,32034],{"className":25,"code":32033,"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,32035,32036,32041,32049,32054,32064,32079,32084,32094,32131,32138,32149,32165,32170,32180,32192,32202],{"__ignoreMap":28},[33,32037,32038],{"class":35,"line":36},[33,32039,32040],{"class":87},"# 对深度学习环境进行测试\n",[33,32042,32043,32046],{"class":35,"line":43},[33,32044,32045],{"class":63},"import",[33,32047,32048],{"class":59}," torch\n",[33,32050,32051],{"class":35,"line":130},[33,32052,32053],{"class":87},"# 查看cuda是否被激活\n",[33,32055,32056,32059,32061],{"class":35,"line":146},[33,32057,32058],{"class":59},"flag",[33,32060,64],{"class":63},[33,32062,32063],{"class":59},"torch.cuda.is_available()\n",[33,32065,32066,32068,32070,32073,32076],{"class":35,"line":267},[33,32067,72],{"class":39},[33,32069,109],{"class":59},[33,32071,32072],{"class":117},"\"cuda:\"",[33,32074,32075],{"class":59},", flag)   ",[33,32077,32078],{"class":87},"#返回true的话说明被激活\n",[33,32080,32081],{"class":35,"line":275},[33,32082,32083],{"class":87},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[33,32085,32086,32089,32091],{"class":35,"line":392},[33,32087,32088],{"class":59},"ngpu",[33,32090,64],{"class":63},[33,32092,32093],{"class":39},"1\n",[33,32095,32096,32099,32101,32104,32107,32109,32112,32115,32118,32120,32122,32124,32126,32129],{"class":35,"line":406},[33,32097,32098],{"class":59},"device",[33,32100,64],{"class":63},[33,32102,32103],{"class":59},"torch.device(",[33,32105,32106],{"class":117},"\"cuda:0\"",[33,32108,3374],{"class":63},[33,32110,32111],{"class":59},"(torch.cuda.is_available() ",[33,32113,32114],{"class":63},"and",[33,32116,32117],{"class":59}," ngpu",[33,32119,2775],{"class":63},[33,32121,2010],{"class":39},[33,32123,15372],{"class":59},[33,32125,270],{"class":63},[33,32127,32128],{"class":117}," \"cpu\"",[33,32130,157],{"class":59},[33,32132,32133,32135],{"class":35,"line":418},[33,32134,72],{"class":39},[33,32136,32137],{"class":59},"(device)\n",[33,32139,32140,32142,32145,32147],{"class":35,"line":425},[33,32141,72],{"class":39},[33,32143,32144],{"class":59},"(torch.cuda.get_device_name(",[33,32146,2010],{"class":39},[33,32148,121],{"class":59},[33,32150,32151,32153,32156,32158,32160,32162],{"class":35,"line":1147},[33,32152,72],{"class":39},[33,32154,32155],{"class":59},"(torch.rand(",[33,32157,1891],{"class":39},[33,32159,2196],{"class":59},[33,32161,1891],{"class":39},[33,32163,32164],{"class":59},").cuda())\n",[33,32166,32167],{"class":35,"line":1329},[33,32168,32169],{"class":87},"# 查看cuda和cudnn的版本\n",[33,32171,32172,32175,32177],{"class":35,"line":1341},[33,32173,32174],{"class":59},"cuda_version",[33,32176,64],{"class":63},[33,32178,32179],{"class":59},"torch.version.cuda\n",[33,32181,32182,32184,32186,32189],{"class":35,"line":1348},[33,32183,72],{"class":39},[33,32185,109],{"class":59},[33,32187,32188],{"class":117},"\"cuda version\"",[33,32190,32191],{"class":59},",cuda_version)\n",[33,32193,32194,32197,32199],{"class":35,"line":1529},[33,32195,32196],{"class":59},"cudnn_version",[33,32198,64],{"class":63},[33,32200,32201],{"class":59},"torch.backends.cudnn.version()\n",[33,32203,32204,32206,32208,32211],{"class":35,"line":1546},[33,32205,72],{"class":39},[33,32207,109],{"class":59},[33,32209,32210],{"class":117},"\"cudnn version\"",[33,32212,32213],{"class":59},",cudnn_version)\n",[19,32215,32216],{},[3145,32217],{"alt":28,"src":32218},"\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,32220,32221],{},"cuda:0 指的是一块显卡",[1729,32223,32224],{},"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":43,"depth":43,"links":32226},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31937,"description":1751},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32233,"title":32234,"body":32235,"description":1751,"extension":1752,"meta":52033,"navigation":126,"path":52034,"seo":52035,"stem":52036,"__hash__":52037},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32236,"toc":52027},[32237,32240,32244,32248,32251,32256,32261,32264,32269,32274,32279,32282,32286,32291,32295,32300,32303,32308,32311,32314,32317,32320,32325,32328,32333,32338,32343,32348,32351,32355,32358,32363,32966,32971,32974,32979,32982,32985,33449,33452,33455,33458,33461,35509,35512,35517,35522,36317,36320,36325,37103,37107,38766,38770,39484,39488,39492,39497,39502,39507,39510,39515,39520,39525,39530,39535,39539,39544,40825,40830,40833,40836,40839,40994,40997,41000,42216,42221,42916,42920,42924,42929,42934,42937,42942,42947,42952,42957,42962,42967,42972,42977,42982,42987,42992,42997,43002,43007,43012,43017,43022,43027,43032,43037,43042,43047,43052,43057,43062,43067,43072,43077,43082,43087,43091,43095,43098,44576,44580,46227,46231,46925,46929,46932,46935,47478,47481,47485,47488,48885,48889,48892,49470,51257,51261,51264,52024],[10,32238,32234],{"id":32239},"_2经典神经网络",[633,32241,32243],{"id":32242},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23653,32245,32247],{"id":32246},"_211原理介绍","2.1.1.原理介绍",[19,32249,32250],{},"LeNet-5",[162,32252,32253],{},[165,32254,32255],{},"原理",[19,32257,32258],{},[3145,32259],{"alt":28,"src":32260},"\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,32262,32263],{},"B是batch批次；C是channel通道",[162,32265,32266],{"start":43},[165,32267,32268],{},"网络参数详细",[19,32270,32271],{},[3145,32272],{"alt":28,"src":32273},"\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,32275,32276],{},[3145,32277],{"alt":28,"src":32278},"\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,32280,32281],{},"AlexNet",[162,32283,32284],{},[165,32285,32255],{},[19,32287,32288],{},[3145,32289],{"alt":28,"src":32290},"\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",[162,32292,32293],{"start":43},[165,32294,32268],{},[19,32296,32297],{},[3145,32298],{"alt":28,"src":32299},"\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,32301,32302],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32304,32305],{},[3145,32306],{"alt":28,"src":32307},"\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,32309,32310],{},"数据处理中的图像增强操作:",[19,32312,32313],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32315,32316],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32318,32319],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32321,32322],{},[3145,32323],{"alt":28,"src":32324},"\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,32326,32327],{},"提升网络精确度的方法：LRN正则化",[19,32329,32330],{},[3145,32331],{"alt":28,"src":32332},"\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,32334,32335],{},[3145,32336],{"alt":28,"src":32337},"\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",[162,32339,32340],{"start":130},[165,32341,32342],{},"AlexNet的总结",[19,32344,32345],{},[3145,32346],{"alt":28,"src":32347},"\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,32349,32350],{},"比LeNet模型要深一丢丢",[23653,32352,32354],{"id":32353},"_212代码实现","2.1.2.代码实现",[19,32356,32357],{},"（1）LeNet",[162,32359,32360],{},[165,32361,32362],{},"模型搭建",[23,32364,32366],{"className":25,"code":32365,"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,32367,32368,32373,32379,32384,32397,32402,32414,32418,32438,32443,32448,32459,32464,32483,32487,32492,32541,32553,32558,32587,32622,32649,32654,32666,32671,32691,32710,32729,32733,32738,32748,32765,32776,32791,32802,32813,32828,32843,32854,32861,32865,32879,32884,32907,32912,32917,32922,32926,32931,32936,32946],{"__ignoreMap":28},[33,32369,32370],{"class":35,"line":36},[33,32371,32372],{"class":87},"# 导入库\n",[33,32374,32375,32377],{"class":35,"line":43},[33,32376,32045],{"class":63},[33,32378,32048],{"class":59},[33,32380,32381],{"class":35,"line":130},[33,32382,32383],{"class":87},"# 导入神经网络层\n",[33,32385,32386,32389,32392,32394],{"class":35,"line":146},[33,32387,32388],{"class":63},"from",[33,32390,32391],{"class":59}," torch ",[33,32393,32045],{"class":63},[33,32395,32396],{"class":59}," nn\n",[33,32398,32399],{"class":35,"line":267},[33,32400,32401],{"class":87},"# 导入展示神经网络参数的包\n",[33,32403,32404,32406,32409,32411],{"class":35,"line":275},[33,32405,32388],{"class":63},[33,32407,32408],{"class":59}," torchsummary ",[33,32410,32045],{"class":63},[33,32412,32413],{"class":59}," summary\n",[33,32415,32416],{"class":35,"line":392},[33,32417,127],{"emptyLinePlaceholder":126},[33,32419,32420,32422,32425,32427,32430,32432,32435],{"class":35,"line":406},[33,32421,16352],{"class":63},[33,32423,32424],{"class":3632}," LeNet",[33,32426,109],{"class":59},[33,32428,32429],{"class":3632},"nn",[33,32431,2375],{"class":59},[33,32433,32434],{"class":3632},"Module",[33,32436,32437],{"class":59},"):\n",[33,32439,32440],{"class":35,"line":418},[33,32441,32442],{"class":87},"    # 模型初始化:\n",[33,32444,32445],{"class":35,"line":425},[33,32446,32447],{"class":87},"    # 定义一些网络层和激活函数\n",[33,32449,32450,32453,32456],{"class":35,"line":1147},[33,32451,32452],{"class":63},"    def",[33,32454,32455],{"class":39}," __init__",[33,32457,32458],{"class":59},"(self):\n",[33,32460,32461],{"class":35,"line":1329},[33,32462,32463],{"class":87},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[33,32465,32466,32469,32472,32475,32478,32481],{"class":35,"line":1341},[33,32467,32468],{"class":39},"        super",[33,32470,32471],{"class":59},"(LeNet,",[33,32473,32474],{"class":39},"self",[33,32476,32477],{"class":59},").",[33,32479,32480],{"class":39},"__init__",[33,32482,943],{"class":59},[33,32484,32485],{"class":35,"line":1348},[33,32486,127],{"emptyLinePlaceholder":126},[33,32488,32489],{"class":35,"line":1529},[33,32490,32491],{"class":87},"        # 定义网络层\n",[33,32493,32494,32497,32500,32502,32505,32508,32510,32512,32514,32517,32519,32521,32523,32526,32528,32530,32532,32535,32537,32539],{"class":35,"line":1546},[33,32495,32496],{"class":39},"        self",[33,32498,32499],{"class":59},".c1",[33,32501,64],{"class":63},[33,32503,32504],{"class":59},"nn.Conv2d(",[33,32506,32507],{"class":6877},"in_channels",[33,32509,64],{"class":63},[33,32511,2036],{"class":39},[33,32513,2196],{"class":59},[33,32515,32516],{"class":6877},"out_channels",[33,32518,64],{"class":63},[33,32520,2162],{"class":39},[33,32522,2196],{"class":59},[33,32524,32525],{"class":6877},"kernel_size",[33,32527,64],{"class":63},[33,32529,2137],{"class":39},[33,32531,2196],{"class":59},[33,32533,32534],{"class":6877},"padding",[33,32536,64],{"class":63},[33,32538,1897],{"class":39},[33,32540,157],{"class":59},[33,32542,32543,32545,32548,32550],{"class":35,"line":1551},[33,32544,32496],{"class":39},[33,32546,32547],{"class":59},".sig",[33,32549,64],{"class":63},[33,32551,32552],{"class":59},"nn.Sigmoid()\n",[33,32554,32555],{"class":35,"line":1566},[33,32556,32557],{"class":87},"        # 定义池化\n",[33,32559,32560,32562,32565,32567,32570,32572,32574,32576,32578,32581,32583,32585],{"class":35,"line":1578},[33,32561,32496],{"class":39},[33,32563,32564],{"class":59},".s2",[33,32566,64],{"class":63},[33,32568,32569],{"class":59},"nn.AvgPool2d(",[33,32571,32525],{"class":6877},[33,32573,64],{"class":63},[33,32575,1897],{"class":39},[33,32577,2196],{"class":59},[33,32579,32580],{"class":6877},"stride",[33,32582,64],{"class":63},[33,32584,1897],{"class":39},[33,32586,157],{"class":59},[33,32588,32589,32591,32594,32596,32598,32600,32602,32604,32606,32608,32610,32612,32614,32616,32618,32620],{"class":35,"line":1583},[33,32590,32496],{"class":39},[33,32592,32593],{"class":59},".c3",[33,32595,64],{"class":63},[33,32597,32504],{"class":59},[33,32599,32507],{"class":6877},[33,32601,64],{"class":63},[33,32603,2162],{"class":39},[33,32605,2196],{"class":59},[33,32607,32516],{"class":6877},[33,32609,64],{"class":63},[33,32611,2418],{"class":39},[33,32613,2196],{"class":59},[33,32615,32525],{"class":6877},[33,32617,64],{"class":63},[33,32619,2137],{"class":39},[33,32621,157],{"class":59},[33,32623,32624,32626,32629,32631,32633,32635,32637,32639,32641,32643,32645,32647],{"class":35,"line":3369},[33,32625,32496],{"class":39},[33,32627,32628],{"class":59},".s4",[33,32630,64],{"class":63},[33,32632,32569],{"class":59},[33,32634,32525],{"class":6877},[33,32636,64],{"class":63},[33,32638,1897],{"class":39},[33,32640,2196],{"class":59},[33,32642,32580],{"class":6877},[33,32644,64],{"class":63},[33,32646,1897],{"class":39},[33,32648,157],{"class":59},[33,32650,32651],{"class":35,"line":3396},[33,32652,32653],{"class":87},"        # 定义平展层\n",[33,32655,32656,32658,32661,32663],{"class":35,"line":3401},[33,32657,32496],{"class":39},[33,32659,32660],{"class":59},".flatten",[33,32662,64],{"class":63},[33,32664,32665],{"class":59},"nn.Flatten()\n",[33,32667,32668],{"class":35,"line":3418},[33,32669,32670],{"class":87},"        # 定义全连接层\n",[33,32672,32673,32675,32678,32680,32683,32685,32687,32689],{"class":35,"line":3423},[33,32674,32496],{"class":39},[33,32676,32677],{"class":59},".f5",[33,32679,64],{"class":63},[33,32681,32682],{"class":59},"nn.Linear(",[33,32684,5649],{"class":39},[33,32686,2196],{"class":59},[33,32688,2634],{"class":39},[33,32690,157],{"class":59},[33,32692,32693,32695,32698,32700,32702,32704,32706,32708],{"class":35,"line":3428},[33,32694,32496],{"class":39},[33,32696,32697],{"class":59},".f6",[33,32699,64],{"class":63},[33,32701,32682],{"class":59},[33,32703,2634],{"class":39},[33,32705,2196],{"class":59},[33,32707,2528],{"class":39},[33,32709,157],{"class":59},[33,32711,32712,32714,32717,32719,32721,32723,32725,32727],{"class":35,"line":3433},[33,32713,32496],{"class":39},[33,32715,32716],{"class":59},".f7",[33,32718,64],{"class":63},[33,32720,32682],{"class":59},[33,32722,2528],{"class":39},[33,32724,2196],{"class":59},[33,32726,2264],{"class":39},[33,32728,157],{"class":59},[33,32730,32731],{"class":35,"line":3447},[33,32732,127],{"emptyLinePlaceholder":126},[33,32734,32735],{"class":35,"line":3452},[33,32736,32737],{"class":87},"    # 写工具->写前向传播\n",[33,32739,32740,32742,32745],{"class":35,"line":4243},[33,32741,32452],{"class":63},[33,32743,32744],{"class":3632}," forward",[33,32746,32747],{"class":59},"(self,x):\n",[33,32749,32750,32753,32755,32757,32760,32762],{"class":35,"line":4257},[33,32751,32752],{"class":59},"        x",[33,32754,64],{"class":63},[33,32756,32474],{"class":39},[33,32758,32759],{"class":59},".sig(",[33,32761,32474],{"class":39},[33,32763,32764],{"class":59},".c1(x))\n",[33,32766,32767,32769,32771,32773],{"class":35,"line":4265},[33,32768,32752],{"class":59},[33,32770,64],{"class":63},[33,32772,32474],{"class":39},[33,32774,32775],{"class":59},".s2(x)\n",[33,32777,32778,32780,32782,32784,32786,32788],{"class":35,"line":4270},[33,32779,32752],{"class":59},[33,32781,64],{"class":63},[33,32783,32474],{"class":39},[33,32785,32759],{"class":59},[33,32787,32474],{"class":39},[33,32789,32790],{"class":59},".c3(x))\n",[33,32792,32793,32795,32797,32799],{"class":35,"line":4276},[33,32794,32752],{"class":59},[33,32796,64],{"class":63},[33,32798,32474],{"class":39},[33,32800,32801],{"class":59},".s4(x)\n",[33,32803,32804,32806,32808,32810],{"class":35,"line":4282},[33,32805,32752],{"class":59},[33,32807,64],{"class":63},[33,32809,32474],{"class":39},[33,32811,32812],{"class":59},".flatten(x)\n",[33,32814,32815,32817,32819,32821,32823,32825],{"class":35,"line":4287},[33,32816,32752],{"class":59},[33,32818,64],{"class":63},[33,32820,32474],{"class":39},[33,32822,32759],{"class":59},[33,32824,32474],{"class":39},[33,32826,32827],{"class":59},".f5(x))\n",[33,32829,32830,32832,32834,32836,32838,32840],{"class":35,"line":9608},[33,32831,32752],{"class":59},[33,32833,64],{"class":63},[33,32835,32474],{"class":39},[33,32837,32759],{"class":59},[33,32839,32474],{"class":39},[33,32841,32842],{"class":59},".f6(x))\n",[33,32844,32845,32847,32849,32851],{"class":35,"line":9632},[33,32846,32752],{"class":59},[33,32848,64],{"class":63},[33,32850,32474],{"class":39},[33,32852,32853],{"class":59},".f7(x)\n",[33,32855,32856,32858],{"class":35,"line":9637},[33,32857,16410],{"class":63},[33,32859,32860],{"class":59}," x\n",[33,32862,32863],{"class":35,"line":9643},[33,32864,127],{"emptyLinePlaceholder":126},[33,32866,32867,32869,32872,32874,32877],{"class":35,"line":9670},[33,32868,133],{"class":63},[33,32870,32871],{"class":39}," __name__",[33,32873,573],{"class":63},[33,32875,32876],{"class":117},"\"__main__\"",[33,32878,143],{"class":59},[33,32880,32881],{"class":35,"line":9675},[33,32882,32883],{"class":87},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[33,32885,32886,32889,32891,32893,32896,32898,32901,32903,32905],{"class":35,"line":9681},[33,32887,32888],{"class":59},"    device",[33,32890,64],{"class":63},[33,32892,32103],{"class":59},[33,32894,32895],{"class":117},"\"cuda\"",[33,32897,3374],{"class":63},[33,32899,32900],{"class":59}," torch.cuda.is_available() ",[33,32902,270],{"class":63},[33,32904,32128],{"class":117},[33,32906,157],{"class":59},[33,32908,32909],{"class":35,"line":9693},[33,32910,32911],{"class":87},"    # 如果就是想指定用cpu用下方代码:\n",[33,32913,32914],{"class":35,"line":9705},[33,32915,32916],{"class":87},"    # device=\"cpu\"\n",[33,32918,32919],{"class":35,"line":9717},[33,32920,32921],{"class":87},"    # print(device)\n",[33,32923,32924],{"class":35,"line":11375},[33,32925,127],{"emptyLinePlaceholder":126},[33,32927,32928],{"class":35,"line":11400},[33,32929,32930],{"class":87},"    # 实例化模型\n",[33,32932,32933],{"class":35,"line":11423},[33,32934,32935],{"class":87},"    # 将模型放到设备中去运行\n",[33,32937,32938,32941,32943],{"class":35,"line":11447},[33,32939,32940],{"class":59},"    model",[33,32942,64],{"class":63},[33,32944,32945],{"class":59},"LeNet().to(device)\n",[33,32947,32948,32950,32953,32955,32957,32959,32961,32963],{"class":35,"line":11452},[33,32949,149],{"class":39},[33,32951,32952],{"class":59},"(summary(model,(",[33,32954,2036],{"class":39},[33,32956,2196],{"class":59},[33,32958,2717],{"class":39},[33,32960,2196],{"class":59},[33,32962,2717],{"class":39},[33,32964,32965],{"class":59},")))\n",[19,32967,32968],{},[3145,32969],{"alt":28,"src":32970},"\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,32972,32973],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[162,32975,32976],{"start":43},[165,32977,32978],{},"训练",[19,32980,32981],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32983,32984],{},"在训练之前可以将数据展示看一下",[23,32986,32988],{"className":25,"code":32987,"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,32989,32990,32995,33000,33012,33024,33037,33042,33054,33059,33071,33076,33088,33092,33096,33117,33129,33134,33155,33166,33170,33175,33193,33204,33209,33220,33225,33236,33240,33245,33260,33273,33278,33283,33296,33309,33322,33327,33331,33336,33356,33373,33393,33406,33419,33429,33444],{"__ignoreMap":28},[33,32991,32992],{"class":35,"line":36},[33,32993,32994],{"class":87},"# 建立画图的函数，用于展示数据\n",[33,32996,32997],{"class":35,"line":43},[33,32998,32999],{"class":87},"# torchvision中包含很多内置的数据集\n",[33,33001,33002,33004,33007,33009],{"class":35,"line":130},[33,33003,32388],{"class":63},[33,33005,33006],{"class":59}," sklearn.externals.array_api_compat.torch ",[33,33008,32045],{"class":63},[33,33010,33011],{"class":59}," squeeze\n",[33,33013,33014,33016,33019,33021],{"class":35,"line":146},[33,33015,32388],{"class":63},[33,33017,33018],{"class":59}," torchvision.datasets ",[33,33020,32045],{"class":63},[33,33022,33023],{"class":59}," FashionMNIST\n",[33,33025,33026,33028,33031,33034],{"class":35,"line":267},[33,33027,32045],{"class":63},[33,33029,33030],{"class":59}," numpy ",[33,33032,33033],{"class":63},"as",[33,33035,33036],{"class":59}," np\n",[33,33038,33039],{"class":35,"line":275},[33,33040,33041],{"class":87},"# 引入处理数据集的包\n",[33,33043,33044,33046,33049,33051],{"class":35,"line":392},[33,33045,32388],{"class":63},[33,33047,33048],{"class":59}," torchvision ",[33,33050,32045],{"class":63},[33,33052,33053],{"class":59}," transforms\n",[33,33055,33056],{"class":35,"line":406},[33,33057,33058],{"class":87},"# 从torch库中引入数据处理的包\n",[33,33060,33061,33063,33066,33068],{"class":35,"line":418},[33,33062,32045],{"class":63},[33,33064,33065],{"class":59}," torch.utils.data ",[33,33067,33033],{"class":63},[33,33069,33070],{"class":59}," Data\n",[33,33072,33073],{"class":35,"line":425},[33,33074,33075],{"class":87},"# 导入画图的库\n",[33,33077,33078,33080,33083,33085],{"class":35,"line":1147},[33,33079,32045],{"class":63},[33,33081,33082],{"class":59}," matplotlib.pyplot ",[33,33084,33033],{"class":63},[33,33086,33087],{"class":59}," plt\n",[33,33089,33090],{"class":35,"line":1329},[33,33091,127],{"emptyLinePlaceholder":126},[33,33093,33094],{"class":35,"line":1341},[33,33095,127],{"emptyLinePlaceholder":126},[33,33097,33098,33101,33103,33106,33109,33111,33114],{"class":35,"line":1348},[33,33099,33100],{"class":59},"train_data",[33,33102,64],{"class":63},[33,33104,33105],{"class":59},"FashionMNIST(",[33,33107,33108],{"class":6877},"root",[33,33110,64],{"class":63},[33,33112,33113],{"class":117},"'.\u002Fdata'",[33,33115,33116],{"class":59},",\n",[33,33118,33119,33122,33124,33127],{"class":35,"line":1529},[33,33120,33121],{"class":6877},"                        train",[33,33123,64],{"class":63},[33,33125,33126],{"class":39},"True",[33,33128,33116],{"class":59},[33,33130,33131],{"class":35,"line":1546},[33,33132,33133],{"class":87},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[33,33135,33136,33139,33141,33144,33147,33149,33152],{"class":35,"line":1551},[33,33137,33138],{"class":6877},"                        transform",[33,33140,64],{"class":63},[33,33142,33143],{"class":59},"transforms.Compose([transforms.Resize(",[33,33145,33146],{"class":6877},"size",[33,33148,64],{"class":63},[33,33150,33151],{"class":39},"224",[33,33153,33154],{"class":59},"),transforms.ToTensor()]),\n",[33,33156,33157,33160,33162,33164],{"class":35,"line":1566},[33,33158,33159],{"class":6877},"                        download",[33,33161,64],{"class":63},[33,33163,33126],{"class":39},[33,33165,157],{"class":59},[33,33167,33168],{"class":35,"line":1578},[33,33169,127],{"emptyLinePlaceholder":126},[33,33171,33172],{"class":35,"line":1583},[33,33173,33174],{"class":87},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[33,33176,33177,33180,33182,33185,33188,33190],{"class":35,"line":3369},[33,33178,33179],{"class":59},"train_loader",[33,33181,64],{"class":63},[33,33183,33184],{"class":59},"Data.DataLoader(",[33,33186,33187],{"class":6877},"dataset",[33,33189,64],{"class":63},[33,33191,33192],{"class":59},"train_data,\n",[33,33194,33195,33198,33200,33202],{"class":35,"line":3396},[33,33196,33197],{"class":6877},"                             batch_size",[33,33199,64],{"class":63},[33,33201,2022],{"class":39},[33,33203,33116],{"class":59},[33,33205,33206],{"class":35,"line":3401},[33,33207,33208],{"class":87},"                             # 数据是否打乱\n",[33,33210,33211,33214,33216,33218],{"class":35,"line":3418},[33,33212,33213],{"class":6877},"                             shuffle",[33,33215,64],{"class":63},[33,33217,33126],{"class":39},[33,33219,33116],{"class":59},[33,33221,33222],{"class":35,"line":3423},[33,33223,33224],{"class":87},"                             # 规定加载数据的进程\n",[33,33226,33227,33230,33232,33234],{"class":35,"line":3428},[33,33228,33229],{"class":6877},"                             num_workers",[33,33231,64],{"class":63},[33,33233,2010],{"class":39},[33,33235,157],{"class":59},[33,33237,33238],{"class":35,"line":3433},[33,33239,127],{"emptyLinePlaceholder":126},[33,33241,33242],{"class":35,"line":3447},[33,33243,33244],{"class":87},"# 获得一个batch的数据\n",[33,33246,33247,33249,33252,33254,33257],{"class":35,"line":3452},[33,33248,4690],{"class":63},[33,33250,33251],{"class":59}," step,(b_x,b_y) ",[33,33253,27699],{"class":63},[33,33255,33256],{"class":39}," enumerate",[33,33258,33259],{"class":59},"(train_loader):\n",[33,33261,33262,33264,33267,33269,33271],{"class":35,"line":4243},[33,33263,567],{"class":63},[33,33265,33266],{"class":59}," step ",[33,33268,2775],{"class":63},[33,33270,829],{"class":39},[33,33272,143],{"class":59},[33,33274,33275],{"class":35,"line":4257},[33,33276,33277],{"class":63},"        break\n",[33,33279,33280],{"class":35,"line":4265},[33,33281,33282],{"class":87},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[33,33284,33285,33288,33290,33293],{"class":35,"line":4270},[33,33286,33287],{"class":59},"batch_x",[33,33289,64],{"class":63},[33,33291,33292],{"class":59},"b_x.squeeze().numpy()  ",[33,33294,33295],{"class":87},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[33,33297,33298,33301,33303,33306],{"class":35,"line":4276},[33,33299,33300],{"class":59},"batch_y",[33,33302,64],{"class":63},[33,33304,33305],{"class":59},"b_y.numpy()   ",[33,33307,33308],{"class":87},"#将张量转换成功numpy数组\n",[33,33310,33311,33314,33316,33319],{"class":35,"line":4282},[33,33312,33313],{"class":59},"class_label",[33,33315,64],{"class":63},[33,33317,33318],{"class":59},"train_data.classes  ",[33,33320,33321],{"class":87},"#训练集标签\n",[33,33323,33324],{"class":35,"line":4287},[33,33325,33326],{"class":87},"# print(class_label)\n",[33,33328,33329],{"class":35,"line":9608},[33,33330,127],{"emptyLinePlaceholder":126},[33,33332,33333],{"class":35,"line":9632},[33,33334,33335],{"class":87},"# 可视化一个batch的图像\n",[33,33337,33338,33341,33344,33346,33348,33350,33352,33354],{"class":35,"line":9637},[33,33339,33340],{"class":59},"plt.figure(",[33,33342,33343],{"class":6877},"figsize",[33,33345,64],{"class":63},[33,33347,109],{"class":59},[33,33349,2315],{"class":39},[33,33351,2196],{"class":59},[33,33353,2137],{"class":39},[33,33355,121],{"class":59},[33,33357,33358,33360,33363,33365,33368,33370],{"class":35,"line":9643},[33,33359,4690],{"class":63},[33,33361,33362],{"class":59}," ii ",[33,33364,27699],{"class":63},[33,33366,33367],{"class":59}," np.arange(",[33,33369,9018],{"class":39},[33,33371,33372],{"class":59},"(batch_y)):\n",[33,33374,33375,33378,33380,33382,33384,33387,33389,33391],{"class":35,"line":9670},[33,33376,33377],{"class":59},"    plt.subplot(",[33,33379,2111],{"class":39},[33,33381,2196],{"class":59},[33,33383,2418],{"class":39},[33,33385,33386],{"class":59},",ii ",[33,33388,2298],{"class":63},[33,33390,26774],{"class":39},[33,33392,157],{"class":59},[33,33394,33395,33398,33401,33403],{"class":35,"line":9675},[33,33396,33397],{"class":59},"    plt.imshow(batch_x[ii,:,:],",[33,33399,33400],{"class":6877},"cmap",[33,33402,64],{"class":63},[33,33404,33405],{"class":59},"plt.cm.gray)\n",[33,33407,33408,33411,33413,33415,33417],{"class":35,"line":9681},[33,33409,33410],{"class":59},"    plt.title(class_label[batch_y[ii]],",[33,33412,33146],{"class":6877},[33,33414,64],{"class":63},[33,33416,2264],{"class":39},[33,33418,157],{"class":59},[33,33420,33421,33424,33427],{"class":35,"line":9693},[33,33422,33423],{"class":59},"    plt.axis(",[33,33425,33426],{"class":117},"\"off\"",[33,33428,157],{"class":59},[33,33430,33431,33434,33437,33439,33442],{"class":35,"line":9705},[33,33432,33433],{"class":59},"    plt.subplots_adjust(",[33,33435,33436],{"class":6877},"wspace",[33,33438,64],{"class":63},[33,33440,33441],{"class":39},"0.05",[33,33443,157],{"class":59},[33,33445,33446],{"class":35,"line":9717},[33,33447,33448],{"class":59},"plt.show()\n",[19,33450,33451],{},"用matplotlib进行展示的过程可以后续再补",[19,33453,33454],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33456,33457],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33459,33460],{},"模型训练：",[23,33462,33464],{"className":25,"code":33463,"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,33465,33466,33473,33480,33484,33496,33502,33513,33523,33533,33543,33553,33558,33570,33580,33584,33588,33593,33604,33617,33628,33645,33656,33695,33711,33723,33734,33739,33750,33766,33777,33788,33799,33806,33810,33815,33820,33824,33829,33839,33860,33864,33868,33873,33878,33883,33903,33907,33912,33922,33926,33931,33940,33945,33950,33955,33965,33969,33973,33978,33983,33992,33997,34006,34011,34020,34025,34034,34039,34048,34052,34057,34067,34071,34075,34080,34095,34122,34137,34141,34146,34151,34160,34165,34174,34179,34188,34193,34202,34207,34216,34221,34230,34235,34248,34253,34263,34268,34278,34284,34290,34296,34302,34313,34319,34339,34345,34356,34362,34368,34374,34380,34386,34392,34398,34418,34424,34440,34446,34460,34466,34481,34487,34496,34502,34511,34517,34523,34532,34538,34549,34555,34574,34580,34591,34597,34617,34633,34639,34653,34659,34665,34676,34682,34688,34698,34704,34715,34721,34731,34736,34742,34791,34838,34843,34849,34868,34874,34894,34900,34906,34916,34921,34927,34943,34988,34994,35000,35006,35017,35023,35029,35035,35053,35067,35076,35085,35094,35103,35109,35115,35123,35128,35134,35145,35151,35171,35177,35183,35189,35206,35212,35218,35224,35230,35236,35263,35287,35293,35299,35305,35316,35327,35333,35350,35373,35396,35402,35407,35416,35426,35432,35437,35443,35456,35462,35473,35484,35503],{"__ignoreMap":28},[33,33467,33468,33470],{"class":35,"line":36},[33,33469,32045],{"class":63},[33,33471,33472],{"class":59}," copy\n",[33,33474,33475,33477],{"class":35,"line":43},[33,33476,32045],{"class":63},[33,33478,33479],{"class":59}," time\n",[33,33481,33482],{"class":35,"line":130},[33,33483,127],{"emptyLinePlaceholder":126},[33,33485,33486,33488,33491,33493],{"class":35,"line":146},[33,33487,32045],{"class":63},[33,33489,33490],{"class":59}," pandas ",[33,33492,33033],{"class":63},[33,33494,33495],{"class":59}," pd\n",[33,33497,33498,33500],{"class":35,"line":267},[33,33499,32045],{"class":63},[33,33501,32048],{"class":59},[33,33503,33504,33506,33508,33510],{"class":35,"line":275},[33,33505,32388],{"class":63},[33,33507,33065],{"class":59},[33,33509,32045],{"class":63},[33,33511,33512],{"class":59}," Dataset\n",[33,33514,33515,33517,33519,33521],{"class":35,"line":392},[33,33516,32388],{"class":63},[33,33518,33018],{"class":59},[33,33520,32045],{"class":63},[33,33522,33023],{"class":59},[33,33524,33525,33527,33529,33531],{"class":35,"line":406},[33,33526,32388],{"class":63},[33,33528,33048],{"class":59},[33,33530,32045],{"class":63},[33,33532,33053],{"class":59},[33,33534,33535,33537,33539,33541],{"class":35,"line":418},[33,33536,32045],{"class":63},[33,33538,33065],{"class":59},[33,33540,33033],{"class":63},[33,33542,33070],{"class":59},[33,33544,33545,33547,33549,33551],{"class":35,"line":425},[33,33546,32045],{"class":63},[33,33548,33082],{"class":59},[33,33550,33033],{"class":63},[33,33552,33087],{"class":59},[33,33554,33555],{"class":35,"line":1147},[33,33556,33557],{"class":87},"# 导入模型\n",[33,33559,33560,33562,33565,33567],{"class":35,"line":1329},[33,33561,32388],{"class":63},[33,33563,33564],{"class":59}," model ",[33,33566,32045],{"class":63},[33,33568,33569],{"class":59}," LeNet\n",[33,33571,33572,33574,33576,33578],{"class":35,"line":1341},[33,33573,32388],{"class":63},[33,33575,32391],{"class":59},[33,33577,32045],{"class":63},[33,33579,32396],{"class":59},[33,33581,33582],{"class":35,"line":1348},[33,33583,127],{"emptyLinePlaceholder":126},[33,33585,33586],{"class":35,"line":1529},[33,33587,127],{"emptyLinePlaceholder":126},[33,33589,33590],{"class":35,"line":1546},[33,33591,33592],{"class":87},"# 处理训练集与验证集函数--->划分数据集\n",[33,33594,33595,33598,33601],{"class":35,"line":1551},[33,33596,33597],{"class":63},"def",[33,33599,33600],{"class":3632}," train_val_data_process",[33,33602,33603],{"class":59},"():\n",[33,33605,33606,33609,33611,33613,33615],{"class":35,"line":1566},[33,33607,33608],{"class":59},"    train_data",[33,33610,64],{"class":63},[33,33612,33105],{"class":59},[33,33614,33113],{"class":117},[33,33616,33116],{"class":59},[33,33618,33619,33622,33624,33626],{"class":35,"line":1578},[33,33620,33621],{"class":6877},"                            train",[33,33623,64],{"class":63},[33,33625,33126],{"class":39},[33,33627,33116],{"class":59},[33,33629,33630,33633,33635,33637,33639,33641,33643],{"class":35,"line":1583},[33,33631,33632],{"class":6877},"                            transform",[33,33634,64],{"class":63},[33,33636,33143],{"class":59},[33,33638,33146],{"class":6877},[33,33640,64],{"class":63},[33,33642,2717],{"class":39},[33,33644,33154],{"class":59},[33,33646,33647,33650,33652,33654],{"class":35,"line":3369},[33,33648,33649],{"class":6877},"                            download",[33,33651,64],{"class":63},[33,33653,33126],{"class":39},[33,33655,157],{"class":59},[33,33657,33658,33661,33663,33666,33669,33671,33674,33676,33678,33681,33683,33685,33688,33690,33692],{"class":35,"line":3396},[33,33659,33660],{"class":59},"    train_data,val_data",[33,33662,64],{"class":63},[33,33664,33665],{"class":59},"Data.random_split(train_data,[",[33,33667,33668],{"class":39},"round",[33,33670,109],{"class":59},[33,33672,33673],{"class":39},"0.8",[33,33675,1540],{"class":63},[33,33677,9018],{"class":39},[33,33679,33680],{"class":59},"(train_data)),",[33,33682,33668],{"class":39},[33,33684,109],{"class":59},[33,33686,33687],{"class":39},"0.2",[33,33689,1540],{"class":63},[33,33691,9018],{"class":39},[33,33693,33694],{"class":59},"(train_data))])\n",[33,33696,33697,33700,33702,33705,33707,33709],{"class":35,"line":3401},[33,33698,33699],{"class":59},"    train_dataloader ",[33,33701,64],{"class":63},[33,33703,33704],{"class":59}," Data.DataLoader(",[33,33706,33187],{"class":6877},[33,33708,64],{"class":63},[33,33710,33192],{"class":59},[33,33712,33713,33716,33718,33721],{"class":35,"line":3418},[33,33714,33715],{"class":6877},"                                       batch_size",[33,33717,64],{"class":63},[33,33719,33720],{"class":39},"128",[33,33722,33116],{"class":59},[33,33724,33725,33728,33730,33732],{"class":35,"line":3423},[33,33726,33727],{"class":6877},"                                       shuffle",[33,33729,64],{"class":63},[33,33731,33126],{"class":39},[33,33733,33116],{"class":59},[33,33735,33736],{"class":35,"line":3428},[33,33737,33738],{"class":87},"                                       # 规定8个进程\n",[33,33740,33741,33744,33746,33748],{"class":35,"line":3433},[33,33742,33743],{"class":6877},"                                       num_workers",[33,33745,64],{"class":63},[33,33747,2213],{"class":39},[33,33749,157],{"class":59},[33,33751,33752,33755,33757,33759,33761,33763],{"class":35,"line":3447},[33,33753,33754],{"class":59},"    val_dataloader",[33,33756,64],{"class":63},[33,33758,33184],{"class":59},[33,33760,33187],{"class":6877},[33,33762,64],{"class":63},[33,33764,33765],{"class":59},"val_data,\n",[33,33767,33768,33771,33773,33775],{"class":35,"line":3452},[33,33769,33770],{"class":6877},"                                   batch_size",[33,33772,64],{"class":63},[33,33774,33720],{"class":39},[33,33776,33116],{"class":59},[33,33778,33779,33782,33784,33786],{"class":35,"line":4243},[33,33780,33781],{"class":6877},"                                   shuffle",[33,33783,64],{"class":63},[33,33785,33126],{"class":39},[33,33787,33116],{"class":59},[33,33789,33790,33793,33795,33797],{"class":35,"line":4257},[33,33791,33792],{"class":6877},"                                   num_workers",[33,33794,64],{"class":63},[33,33796,2213],{"class":39},[33,33798,157],{"class":59},[33,33800,33801,33803],{"class":35,"line":4265},[33,33802,5752],{"class":63},[33,33804,33805],{"class":59}," train_dataloader,val_dataloader\n",[33,33807,33808],{"class":35,"line":4270},[33,33809,127],{"emptyLinePlaceholder":126},[33,33811,33812],{"class":35,"line":4276},[33,33813,33814],{"class":87},"# 验证是否出错\n",[33,33816,33817],{"class":35,"line":4282},[33,33818,33819],{"class":87},"# train_val_data_process()\n",[33,33821,33822],{"class":35,"line":4287},[33,33823,127],{"emptyLinePlaceholder":126},[33,33825,33826],{"class":35,"line":9608},[33,33827,33828],{"class":87},"# 定义模型训练函数\n",[33,33830,33831,33833,33836],{"class":35,"line":9632},[33,33832,33597],{"class":63},[33,33834,33835],{"class":3632}," train_model_process",[33,33837,33838],{"class":59},"(model,train_dataloader,val_dataloader,num_epochs):\n",[33,33840,33841,33843,33845,33847,33849,33851,33853,33855,33858],{"class":35,"line":9637},[33,33842,32888],{"class":59},[33,33844,64],{"class":63},[33,33846,32103],{"class":59},[33,33848,32895],{"class":117},[33,33850,3374],{"class":63},[33,33852,32900],{"class":59},[33,33854,270],{"class":63},[33,33856,33857],{"class":117}," 'cpu'",[33,33859,157],{"class":59},[33,33861,33862],{"class":35,"line":9643},[33,33863,127],{"emptyLinePlaceholder":126},[33,33865,33866],{"class":35,"line":9670},[33,33867,127],{"emptyLinePlaceholder":126},[33,33869,33870],{"class":35,"line":9675},[33,33871,33872],{"class":87},"    # 定义优化器\n",[33,33874,33875],{"class":35,"line":9681},[33,33876,33877],{"class":87},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[33,33879,33880],{"class":35,"line":9693},[33,33881,33882],{"class":87},"    # lr为学习率\n",[33,33884,33885,33888,33890,33893,33896,33898,33901],{"class":35,"line":9705},[33,33886,33887],{"class":59},"    optimizer",[33,33889,64],{"class":63},[33,33891,33892],{"class":59},"torch.optim.Adam(model.parameters(),",[33,33894,33895],{"class":6877},"lr",[33,33897,64],{"class":63},[33,33899,33900],{"class":39},"0.001",[33,33902,157],{"class":59},[33,33904,33905],{"class":35,"line":9717},[33,33906,127],{"emptyLinePlaceholder":126},[33,33908,33909],{"class":35,"line":11375},[33,33910,33911],{"class":87},"    # 定义损失函数使用交叉熵损失函数\n",[33,33913,33914,33917,33919],{"class":35,"line":11400},[33,33915,33916],{"class":59},"    criterion",[33,33918,64],{"class":63},[33,33920,33921],{"class":59},"nn.CrossEntropyLoss()\n",[33,33923,33924],{"class":35,"line":11423},[33,33925,127],{"emptyLinePlaceholder":126},[33,33927,33928],{"class":35,"line":11447},[33,33929,33930],{"class":87},"    # 将模型放到GPU中进行训练\n",[33,33932,33933,33935,33937],{"class":35,"line":11452},[33,33934,32940],{"class":59},[33,33936,64],{"class":63},[33,33938,33939],{"class":59},"model.to(device)\n",[33,33941,33942],{"class":35,"line":11457},[33,33943,33944],{"class":87},"    # 复制当前模型的参数\n",[33,33946,33947],{"class":35,"line":11462},[33,33948,33949],{"class":87},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[33,33951,33952],{"class":35,"line":11471},[33,33953,33954],{"class":87},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[33,33956,33957,33960,33962],{"class":35,"line":11476},[33,33958,33959],{"class":59},"    best_model_wts",[33,33961,64],{"class":63},[33,33963,33964],{"class":59},"copy.deepcopy(model.state_dict())\n",[33,33966,33967],{"class":35,"line":11482},[33,33968,127],{"emptyLinePlaceholder":126},[33,33970,33971],{"class":35,"line":11503},[33,33972,127],{"emptyLinePlaceholder":126},[33,33974,33975],{"class":35,"line":11509},[33,33976,33977],{"class":87},"    # 初始化参数\n",[33,33979,33980],{"class":35,"line":11523},[33,33981,33982],{"class":87},"    # 最高准确度\n",[33,33984,33985,33988,33990],{"class":35,"line":11529},[33,33986,33987],{"class":59},"    best_acc",[33,33989,64],{"class":63},[33,33991,928],{"class":39},[33,33993,33994],{"class":35,"line":11556},[33,33995,33996],{"class":87},"    # 训练集损失列表\n",[33,33998,33999,34002,34004],{"class":35,"line":11565},[33,34000,34001],{"class":59},"    train_loss_all",[33,34003,64],{"class":63},[33,34005,938],{"class":59},[33,34007,34008],{"class":35,"line":11571},[33,34009,34010],{"class":87},"    # 验证集函数列表\n",[33,34012,34013,34016,34018],{"class":35,"line":11579},[33,34014,34015],{"class":59},"    val_loss_all",[33,34017,64],{"class":63},[33,34019,938],{"class":59},[33,34021,34022],{"class":35,"line":11584},[33,34023,34024],{"class":87},"    # 训练集准确度列表\n",[33,34026,34027,34030,34032],{"class":35,"line":18259},[33,34028,34029],{"class":59},"    train_acc_all",[33,34031,64],{"class":63},[33,34033,938],{"class":59},[33,34035,34036],{"class":35,"line":18265},[33,34037,34038],{"class":87},"    # 验证集准确度列表\n",[33,34040,34041,34044,34046],{"class":35,"line":18288},[33,34042,34043],{"class":59},"    val_acc_all",[33,34045,64],{"class":63},[33,34047,938],{"class":59},[33,34049,34050],{"class":35,"line":18294},[33,34051,127],{"emptyLinePlaceholder":126},[33,34053,34054],{"class":35,"line":18317},[33,34055,34056],{"class":87},"    # 保存当前时间--->方便看每轮训练的时间\n",[33,34058,34059,34062,34064],{"class":35,"line":18331},[33,34060,34061],{"class":59},"    since",[33,34063,64],{"class":63},[33,34065,34066],{"class":59},"time.time()\n",[33,34068,34069],{"class":35,"line":18351},[33,34070,127],{"emptyLinePlaceholder":126},[33,34072,34073],{"class":35,"line":18357},[33,34074,127],{"emptyLinePlaceholder":126},[33,34076,34077],{"class":35,"line":18368},[33,34078,34079],{"class":87},"    # 准备工作完成--->开始训练模型\n",[33,34081,34082,34084,34087,34089,34092],{"class":35,"line":18391},[33,34083,4864],{"class":63},[33,34085,34086],{"class":59}," epoch ",[33,34088,27699],{"class":63},[33,34090,34091],{"class":39}," range",[33,34093,34094],{"class":59},"(num_epochs):\n",[33,34096,34097,34099,34101,34104,34107,34109,34111,34113,34116,34118,34120],{"class":35,"line":18413},[33,34098,583],{"class":39},[33,34100,109],{"class":59},[33,34102,34103],{"class":117},"\"Epoch ",[33,34105,34106],{"class":39},"{}",[33,34108,2401],{"class":117},[33,34110,34106],{"class":39},[33,34112,1014],{"class":117},[33,34114,34115],{"class":59},".format(epoch,num_epochs",[33,34117,2349],{"class":63},[33,34119,2036],{"class":39},[33,34121,121],{"class":59},[33,34123,34124,34126,34128,34131,34133,34135],{"class":35,"line":18418},[33,34125,583],{"class":39},[33,34127,109],{"class":59},[33,34129,34130],{"class":117},"\"-\"",[33,34132,1540],{"class":63},[33,34134,2264],{"class":39},[33,34136,157],{"class":59},[33,34138,34139],{"class":35,"line":18424},[33,34140,127],{"emptyLinePlaceholder":126},[33,34142,34143],{"class":35,"line":18438},[33,34144,34145],{"class":87},"        # 初始化参数\n",[33,34147,34148],{"class":35,"line":18451},[33,34149,34150],{"class":87},"        # 训练集损失函数\n",[33,34152,34153,34156,34158],{"class":35,"line":18456},[33,34154,34155],{"class":59},"        train_loss",[33,34157,64],{"class":63},[33,34159,928],{"class":39},[33,34161,34162],{"class":35,"line":18470},[33,34163,34164],{"class":87},"        # 训练集准确度\n",[33,34166,34167,34170,34172],{"class":35,"line":18475},[33,34168,34169],{"class":59},"        train_corrects",[33,34171,64],{"class":63},[33,34173,923],{"class":39},[33,34175,34176],{"class":35,"line":18481},[33,34177,34178],{"class":87},"        # 验证集损失函数\n",[33,34180,34181,34184,34186],{"class":35,"line":18486},[33,34182,34183],{"class":59},"        val_loss",[33,34185,64],{"class":63},[33,34187,928],{"class":39},[33,34189,34190],{"class":35,"line":18500},[33,34191,34192],{"class":87},"        # 验证集准确度\n",[33,34194,34195,34198,34200],{"class":35,"line":18505},[33,34196,34197],{"class":59},"        val_corrects",[33,34199,64],{"class":63},[33,34201,923],{"class":39},[33,34203,34204],{"class":35,"line":18510},[33,34205,34206],{"class":87},"        # 训练集样本数量\n",[33,34208,34209,34212,34214],{"class":35,"line":18524},[33,34210,34211],{"class":59},"        train_num",[33,34213,64],{"class":63},[33,34215,923],{"class":39},[33,34217,34218],{"class":35,"line":18536},[33,34219,34220],{"class":87},"        # 验证集样本数量\n",[33,34222,34223,34226,34228],{"class":35,"line":18541},[33,34224,34225],{"class":59},"        val_num",[33,34227,64],{"class":63},[33,34229,923],{"class":39},[33,34231,34232],{"class":35,"line":18554},[33,34233,34234],{"class":87},"        # 将数据放到设备,并开始训练\n",[33,34236,34237,34239,34241,34243,34245],{"class":35,"line":18559},[33,34238,5066],{"class":63},[33,34240,33251],{"class":59},[33,34242,27699],{"class":63},[33,34244,33256],{"class":39},[33,34246,34247],{"class":59},"(train_dataloader):\n",[33,34249,34250],{"class":35,"line":18564},[33,34251,34252],{"class":87},"            # 将特征放入到训练设备\n",[33,34254,34255,34258,34260],{"class":35,"line":18569},[33,34256,34257],{"class":59},"            b_x",[33,34259,64],{"class":63},[33,34261,34262],{"class":59},"b_x.to(device)\n",[33,34264,34265],{"class":35,"line":18582},[33,34266,34267],{"class":87},"            # 将标签放入到训练设备当中\n",[33,34269,34270,34273,34275],{"class":35,"line":18587},[33,34271,34272],{"class":59},"            b_y",[33,34274,64],{"class":63},[33,34276,34277],{"class":59},"b_y.to(device)\n",[33,34279,34281],{"class":35,"line":34280},98,[33,34282,34283],{"class":87},"            # 设置模型为训练模式\n",[33,34285,34287],{"class":35,"line":34286},99,[33,34288,34289],{"class":59},"            model.train()\n",[33,34291,34293],{"class":35,"line":34292},100,[33,34294,34295],{"class":87},"            # 将数据放到模型当中,开始前向传播\n",[33,34297,34299],{"class":35,"line":34298},101,[33,34300,34301],{"class":87},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[33,34303,34305,34308,34310],{"class":35,"line":34304},102,[33,34306,34307],{"class":59},"            output",[33,34309,64],{"class":63},[33,34311,34312],{"class":59},"model(b_x)\n",[33,34314,34316],{"class":35,"line":34315},103,[33,34317,34318],{"class":87},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[33,34320,34322,34325,34327,34330,34333,34335,34337],{"class":35,"line":34321},104,[33,34323,34324],{"class":59},"            pre_lab",[33,34326,64],{"class":63},[33,34328,34329],{"class":59},"torch.argmax(output,",[33,34331,34332],{"class":6877},"dim",[33,34334,64],{"class":63},[33,34336,2036],{"class":39},[33,34338,157],{"class":59},[33,34340,34342],{"class":35,"line":34341},105,[33,34343,34344],{"class":87},"            # 计算每一个batch的损失函数\n",[33,34346,34348,34351,34353],{"class":35,"line":34347},106,[33,34349,34350],{"class":59},"            loss",[33,34352,64],{"class":63},[33,34354,34355],{"class":59},"criterion(output,b_y)\n",[33,34357,34359],{"class":35,"line":34358},107,[33,34360,34361],{"class":87},"            # 将梯度初始化为0\n",[33,34363,34365],{"class":35,"line":34364},108,[33,34366,34367],{"class":59},"            optimizer.zero_grad()\n",[33,34369,34371],{"class":35,"line":34370},109,[33,34372,34373],{"class":87},"            # 梯度置为0后再进行反向传播\n",[33,34375,34377],{"class":35,"line":34376},110,[33,34378,34379],{"class":59},"            loss.backward()\n",[33,34381,34383],{"class":35,"line":34382},111,[33,34384,34385],{"class":87},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[33,34387,34389],{"class":35,"line":34388},112,[33,34390,34391],{"class":59},"            optimizer.step()\n",[33,34393,34395],{"class":35,"line":34394},113,[33,34396,34397],{"class":87},"            # loss.item()指的是batch的平均损失\n",[33,34399,34401,34404,34406,34409,34411,34414,34416],{"class":35,"line":34400},114,[33,34402,34403],{"class":59},"            train_loss",[33,34405,11136],{"class":63},[33,34407,34408],{"class":59},"loss.item()",[33,34410,1540],{"class":63},[33,34412,34413],{"class":59},"b_x.size(",[33,34415,2010],{"class":39},[33,34417,157],{"class":59},[33,34419,34421],{"class":35,"line":34420},115,[33,34422,34423],{"class":87},"            # 计算每个批次中正确预测的数量\n",[33,34425,34427,34430,34432,34435,34437],{"class":35,"line":34426},116,[33,34428,34429],{"class":59},"            train_corrects",[33,34431,11136],{"class":63},[33,34433,34434],{"class":59},"torch.sum(pre_lab",[33,34436,573],{"class":63},[33,34438,34439],{"class":59},"b_y.data)\n",[33,34441,34443],{"class":35,"line":34442},117,[33,34444,34445],{"class":87},"            # 计算目前为止一共处理了多少样本\n",[33,34447,34449,34452,34454,34456,34458],{"class":35,"line":34448},118,[33,34450,34451],{"class":59},"            train_num",[33,34453,11136],{"class":63},[33,34455,34413],{"class":59},[33,34457,2010],{"class":39},[33,34459,157],{"class":59},[33,34461,34463],{"class":35,"line":34462},119,[33,34464,34465],{"class":87},"        # 验证数据\n",[33,34467,34469,34471,34474,34476,34478],{"class":35,"line":34468},120,[33,34470,5066],{"class":63},[33,34472,34473],{"class":59}," step ,(b_x,b_y) ",[33,34475,27699],{"class":63},[33,34477,33256],{"class":39},[33,34479,34480],{"class":59},"(val_dataloader):\n",[33,34482,34484],{"class":35,"line":34483},121,[33,34485,34486],{"class":87},"            # 将特征放到验证设备当中\n",[33,34488,34490,34492,34494],{"class":35,"line":34489},122,[33,34491,34257],{"class":59},[33,34493,64],{"class":63},[33,34495,34262],{"class":59},[33,34497,34499],{"class":35,"line":34498},123,[33,34500,34501],{"class":87},"            # 将标签放到放到训练设备当中\n",[33,34503,34505,34507,34509],{"class":35,"line":34504},124,[33,34506,34272],{"class":59},[33,34508,64],{"class":63},[33,34510,34277],{"class":59},[33,34512,34514],{"class":35,"line":34513},125,[33,34515,34516],{"class":87},"            # 开启验证模式，设置模型为评估模式\n",[33,34518,34520],{"class":35,"line":34519},126,[33,34521,34522],{"class":59},"            model.eval()\n",[33,34524,34526,34529],{"class":35,"line":34525},127,[33,34527,34528],{"class":63},"            with",[33,34530,34531],{"class":59}," torch.no_grad():\n",[33,34533,34535],{"class":35,"line":34534},128,[33,34536,34537],{"class":87},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[33,34539,34541,34544,34546],{"class":35,"line":34540},129,[33,34542,34543],{"class":59},"                output ",[33,34545,64],{"class":63},[33,34547,34548],{"class":59}," model(b_x)\n",[33,34550,34552],{"class":35,"line":34551},130,[33,34553,34554],{"class":87},"                # 查找每一行中最大值对应的下标\n",[33,34556,34558,34561,34563,34566,34568,34570,34572],{"class":35,"line":34557},131,[33,34559,34560],{"class":59},"                pre_lab ",[33,34562,64],{"class":63},[33,34564,34565],{"class":59}," torch.argmax(output, ",[33,34567,34332],{"class":6877},[33,34569,64],{"class":63},[33,34571,2036],{"class":39},[33,34573,157],{"class":59},[33,34575,34577],{"class":35,"line":34576},132,[33,34578,34579],{"class":87},"                # 计算验证集上的当前 batch 损失\n",[33,34581,34583,34586,34588],{"class":35,"line":34582},133,[33,34584,34585],{"class":59},"                val_batch_loss ",[33,34587,64],{"class":63},[33,34589,34590],{"class":59}," criterion(output, b_y)\n",[33,34592,34594],{"class":35,"line":34593},134,[33,34595,34596],{"class":87},"                # 对损失函数进行累加（按样本数加权）\n",[33,34598,34600,34603,34605,34608,34610,34613,34615],{"class":35,"line":34599},135,[33,34601,34602],{"class":59},"                val_loss ",[33,34604,11136],{"class":63},[33,34606,34607],{"class":59}," val_batch_loss.item() ",[33,34609,1540],{"class":63},[33,34611,34612],{"class":59}," b_x.size(",[33,34614,2010],{"class":39},[33,34616,157],{"class":59},[33,34618,34620,34623,34625,34628,34630],{"class":35,"line":34619},136,[33,34621,34622],{"class":59},"                val_corrects ",[33,34624,11136],{"class":63},[33,34626,34627],{"class":59}," torch.sum(pre_lab ",[33,34629,573],{"class":63},[33,34631,34632],{"class":59}," b_y.data)\n",[33,34634,34636],{"class":35,"line":34635},137,[33,34637,34638],{"class":87},"                # 当前用于验证的样本数量\n",[33,34640,34642,34645,34647,34649,34651],{"class":35,"line":34641},138,[33,34643,34644],{"class":59},"            val_num ",[33,34646,11136],{"class":63},[33,34648,34612],{"class":59},[33,34650,2010],{"class":39},[33,34652,157],{"class":59},[33,34654,34656],{"class":35,"line":34655},139,[33,34657,34658],{"class":87},"        # 计算并保存每一次迭代的loss值和准确率\n",[33,34660,34662],{"class":35,"line":34661},140,[33,34663,34664],{"class":87},"        # 计算并保存训练集的loss值\n",[33,34666,34668,34671,34673],{"class":35,"line":34667},141,[33,34669,34670],{"class":59},"        train_loss_all.append(train_loss",[33,34672,2401],{"class":63},[33,34674,34675],{"class":59},"train_num)\n",[33,34677,34679],{"class":35,"line":34678},142,[33,34680,34681],{"class":87},"        # 取双精度\n",[33,34683,34685],{"class":35,"line":34684},143,[33,34686,34687],{"class":87},"        # 计算并保存训练集的准确率\n",[33,34689,34691,34694,34696],{"class":35,"line":34690},144,[33,34692,34693],{"class":59},"        train_acc_all.append(train_corrects.double().item()",[33,34695,2401],{"class":63},[33,34697,34675],{"class":59},[33,34699,34701],{"class":35,"line":34700},145,[33,34702,34703],{"class":87},"        # 计算并保存验证集的loss值\n",[33,34705,34707,34710,34712],{"class":35,"line":34706},146,[33,34708,34709],{"class":59},"        val_loss_all.append(val_loss",[33,34711,2401],{"class":63},[33,34713,34714],{"class":59},"val_num)\n",[33,34716,34718],{"class":35,"line":34717},147,[33,34719,34720],{"class":87},"        # 计算并保存验证集的准确率\n",[33,34722,34724,34727,34729],{"class":35,"line":34723},148,[33,34725,34726],{"class":59},"        val_acc_all.append(val_corrects.double().item()",[33,34728,2401],{"class":63},[33,34730,34714],{"class":59},[33,34732,34734],{"class":35,"line":34733},149,[33,34735,127],{"emptyLinePlaceholder":126},[33,34737,34739],{"class":35,"line":34738},150,[33,34740,34741],{"class":87},"        # 打印训练一轮的loss值和准确率\n",[33,34743,34745,34747,34749,34751,34753,34756,34758,34761,34763,34766,34768,34770,34772,34774,34777,34779,34781,34784,34786,34788],{"class":35,"line":34744},151,[33,34746,583],{"class":39},[33,34748,109],{"class":59},[33,34750,5255],{"class":117},[33,34752,34106],{"class":39},[33,34754,34755],{"class":117},"train loss:",[33,34757,1005],{"class":39},[33,34759,34760],{"class":63},":.4f",[33,34762,1011],{"class":39},[33,34764,34765],{"class":117}," train acc:",[33,34767,1005],{"class":39},[33,34769,34760],{"class":63},[33,34771,1011],{"class":39},[33,34773,5255],{"class":117},[33,34775,34776],{"class":59},".format(epoch,train_loss_all[",[33,34778,2349],{"class":63},[33,34780,2036],{"class":39},[33,34782,34783],{"class":59},"],train_acc_all[",[33,34785,2349],{"class":63},[33,34787,2036],{"class":39},[33,34789,34790],{"class":59},"]))\n",[33,34792,34794,34796,34798,34800,34802,34805,34807,34809,34811,34814,34816,34818,34820,34822,34825,34827,34829,34832,34834,34836],{"class":35,"line":34793},152,[33,34795,583],{"class":39},[33,34797,109],{"class":59},[33,34799,5255],{"class":117},[33,34801,34106],{"class":39},[33,34803,34804],{"class":117},"val loss:",[33,34806,1005],{"class":39},[33,34808,34760],{"class":63},[33,34810,1011],{"class":39},[33,34812,34813],{"class":117}," val acc:",[33,34815,1005],{"class":39},[33,34817,34760],{"class":63},[33,34819,1011],{"class":39},[33,34821,5255],{"class":117},[33,34823,34824],{"class":59},".format(epoch,val_loss_all[",[33,34826,2349],{"class":63},[33,34828,2036],{"class":39},[33,34830,34831],{"class":59},"],val_acc_all[",[33,34833,2349],{"class":63},[33,34835,2036],{"class":39},[33,34837,34790],{"class":59},[33,34839,34841],{"class":35,"line":34840},153,[33,34842,127],{"emptyLinePlaceholder":126},[33,34844,34846],{"class":35,"line":34845},154,[33,34847,34848],{"class":87},"        # 判断准确度--->保存最优模型\n",[33,34850,34852,34854,34857,34859,34861,34863,34865],{"class":35,"line":34851},155,[33,34853,4163],{"class":63},[33,34855,34856],{"class":59}," val_acc_all[",[33,34858,2349],{"class":63},[33,34860,2036],{"class":39},[33,34862,2756],{"class":59},[33,34864,2775],{"class":63},[33,34866,34867],{"class":59},"best_acc:\n",[33,34869,34871],{"class":35,"line":34870},156,[33,34872,34873],{"class":87},"            # 保存当前模型准确度\n",[33,34875,34877,34880,34882,34884,34887,34889,34891],{"class":35,"line":34876},157,[33,34878,34879],{"class":59},"            best_acc:",[33,34881,1863],{"class":39},[33,34883,64],{"class":63},[33,34885,34886],{"class":59},"val_acc_all[",[33,34888,2349],{"class":63},[33,34890,2036],{"class":39},[33,34892,34893],{"class":59},"]\n",[33,34895,34897],{"class":35,"line":34896},158,[33,34898,34899],{"class":87},"            # 保存当前的准确度\n",[33,34901,34903],{"class":35,"line":34902},159,[33,34904,34905],{"class":87},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[33,34907,34909,34912,34914],{"class":35,"line":34908},160,[33,34910,34911],{"class":59},"            best_model_wts",[33,34913,64],{"class":63},[33,34915,33964],{"class":59},[33,34917,34919],{"class":35,"line":34918},161,[33,34920,127],{"emptyLinePlaceholder":126},[33,34922,34924],{"class":35,"line":34923},162,[33,34925,34926],{"class":87},"        # 计算耗时\n",[33,34928,34930,34933,34935,34938,34940],{"class":35,"line":34929},163,[33,34931,34932],{"class":59},"        time_use",[33,34934,64],{"class":63},[33,34936,34937],{"class":59},"time.time()",[33,34939,2349],{"class":63},[33,34941,34942],{"class":59},"since\n",[33,34944,34946,34948,34950,34953,34955,34958,34960,34962,34964,34966,34968,34971,34974,34977,34979,34982,34984,34986],{"class":35,"line":34945},164,[33,34947,583],{"class":39},[33,34949,109],{"class":59},[33,34951,34952],{"class":117},"'训练和验证耗费的时间",[33,34954,1005],{"class":39},[33,34956,34957],{"class":63},":.0f",[33,34959,1011],{"class":39},[33,34961,2361],{"class":117},[33,34963,1005],{"class":39},[33,34965,34957],{"class":63},[33,34967,1011],{"class":39},[33,34969,34970],{"class":117},"s'",[33,34972,34973],{"class":59},".format(time_use",[33,34975,34976],{"class":63},"\u002F\u002F",[33,34978,2723],{"class":39},[33,34980,34981],{"class":59},",time_use",[33,34983,2146],{"class":63},[33,34985,2723],{"class":39},[33,34987,121],{"class":59},[33,34989,34991],{"class":35,"line":34990},165,[33,34992,34993],{"class":87},"    # 选择最优参数\n",[33,34995,34997],{"class":35,"line":34996},166,[33,34998,34999],{"class":87},"    # 加载最高准确率下的模型参数\n",[33,35001,35003],{"class":35,"line":35002},167,[33,35004,35005],{"class":87},"    # model.load_state_dict(best_model_wts)\n",[33,35007,35009,35012,35015],{"class":35,"line":35008},168,[33,35010,35011],{"class":59},"    torch.save(model.state_dict(best_model_wts), ",[33,35013,35014],{"class":117},"'.\u002Fbest_model.pth'",[33,35016,157],{"class":59},[33,35018,35020],{"class":35,"line":35019},169,[33,35021,35022],{"class":87},"    # 或者写成\n",[33,35024,35026],{"class":35,"line":35025},170,[33,35027,35028],{"class":87},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[33,35030,35032],{"class":35,"line":35031},171,[33,35033,35034],{"class":87},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[33,35036,35038,35041,35043,35046,35049,35051],{"class":35,"line":35037},172,[33,35039,35040],{"class":59},"    train_process",[33,35042,64],{"class":63},[33,35044,35045],{"class":59},"pd.DataFrame(",[33,35047,35048],{"class":6877},"data",[33,35050,64],{"class":63},[33,35052,3228],{"class":59},[33,35054,35056,35059,35061,35064],{"class":35,"line":35055},173,[33,35057,35058],{"class":117},"        \"epoch\"",[33,35060,2676],{"class":59},[33,35062,35063],{"class":39},"range",[33,35065,35066],{"class":59},"(num_epochs),\n",[33,35068,35070,35073],{"class":35,"line":35069},174,[33,35071,35072],{"class":117},"        \"train_loss_all\"",[33,35074,35075],{"class":59},":train_loss_all,\n",[33,35077,35079,35082],{"class":35,"line":35078},175,[33,35080,35081],{"class":117},"        \"val_loss_all\"",[33,35083,35084],{"class":59},":val_loss_all,\n",[33,35086,35088,35091],{"class":35,"line":35087},176,[33,35089,35090],{"class":117},"        \"train_acc_all\"",[33,35092,35093],{"class":59},":train_acc_all,\n",[33,35095,35097,35100],{"class":35,"line":35096},177,[33,35098,35099],{"class":117},"        \"val_acc_all\"",[33,35101,35102],{"class":59},":val_acc_all\n",[33,35104,35106],{"class":35,"line":35105},178,[33,35107,35108],{"class":59},"    })\n",[33,35110,35112],{"class":35,"line":35111},179,[33,35113,35114],{"class":87},"    # 返回训练保存的过程\n",[33,35116,35118,35120],{"class":35,"line":35117},180,[33,35119,5752],{"class":63},[33,35121,35122],{"class":59}," train_process\n",[33,35124,35126],{"class":35,"line":35125},181,[33,35127,127],{"emptyLinePlaceholder":126},[33,35129,35131],{"class":35,"line":35130},182,[33,35132,35133],{"class":87},"# 将loss值和精度按照图片的形式展示出来\n",[33,35135,35137,35139,35142],{"class":35,"line":35136},183,[33,35138,33597],{"class":63},[33,35140,35141],{"class":3632}," matplot_acc_loss",[33,35143,35144],{"class":59},"(train_process):\n",[33,35146,35148],{"class":35,"line":35147},184,[33,35149,35150],{"class":87},"    # 设置图的大小\n",[33,35152,35154,35157,35159,35161,35163,35165,35167,35169],{"class":35,"line":35153},185,[33,35155,35156],{"class":59},"    plt.figure(",[33,35158,33343],{"class":6877},[33,35160,64],{"class":63},[33,35162,109],{"class":59},[33,35164,2315],{"class":39},[33,35166,2196],{"class":59},[33,35168,2111],{"class":39},[33,35170,121],{"class":59},[33,35172,35174],{"class":35,"line":35173},186,[33,35175,35176],{"class":87},"    # 设置图中有几张图\n",[33,35178,35180],{"class":35,"line":35179},187,[33,35181,35182],{"class":87},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[33,35184,35186],{"class":35,"line":35185},188,[33,35187,35188],{"class":87},"    # ①loss图\n",[33,35190,35192,35194,35196,35198,35200,35202,35204],{"class":35,"line":35191},189,[33,35193,33377],{"class":59},[33,35195,2036],{"class":39},[33,35197,2196],{"class":59},[33,35199,1897],{"class":39},[33,35201,2196],{"class":59},[33,35203,2036],{"class":39},[33,35205,157],{"class":59},[33,35207,35209],{"class":35,"line":35208},190,[33,35210,35211],{"class":87},"    # 补充:\n",[33,35213,35215],{"class":35,"line":35214},191,[33,35216,35217],{"class":87},"    # plt.subplot(nrows, ncols, index)\n",[33,35219,35221],{"class":35,"line":35220},192,[33,35222,35223],{"class":87},"    # nrows：行数\n",[33,35225,35227],{"class":35,"line":35226},193,[33,35228,35229],{"class":87},"    # ncols：列数\n",[33,35231,35233],{"class":35,"line":35232},194,[33,35234,35235],{"class":87},"    # index：目前选中第几个子图（从1开始）\n",[33,35237,35239,35242,35245,35248,35251,35253,35256,35258,35261],{"class":35,"line":35238},195,[33,35240,35241],{"class":59},"    plt.plot(train_process[",[33,35243,35244],{"class":117},"\"epoch\"",[33,35246,35247],{"class":59},"],train_process.train_loss_all,",[33,35249,35250],{"class":117},"'ro-'",[33,35252,2196],{"class":59},[33,35254,35255],{"class":6877},"label",[33,35257,64],{"class":63},[33,35259,35260],{"class":117},"'train loss'",[33,35262,157],{"class":59},[33,35264,35266,35268,35270,35273,35276,35278,35280,35282,35285],{"class":35,"line":35265},196,[33,35267,35241],{"class":59},[33,35269,35244],{"class":117},[33,35271,35272],{"class":59},"],train_process.val_loss_all,",[33,35274,35275],{"class":117},"'bs--'",[33,35277,2196],{"class":59},[33,35279,35255],{"class":6877},[33,35281,64],{"class":63},[33,35283,35284],{"class":117},"'val loss'",[33,35286,157],{"class":59},[33,35288,35290],{"class":35,"line":35289},197,[33,35291,35292],{"class":87},"    # 添加一个图例\n",[33,35294,35296],{"class":35,"line":35295},198,[33,35297,35298],{"class":59},"    plt.legend()\n",[33,35300,35302],{"class":35,"line":35301},199,[33,35303,35304],{"class":87},"    # 给轴添加标签\n",[33,35306,35308,35311,35314],{"class":35,"line":35307},200,[33,35309,35310],{"class":59},"    plt.xlabel(",[33,35312,35313],{"class":117},"'epoch'",[33,35315,157],{"class":59},[33,35317,35319,35322,35325],{"class":35,"line":35318},201,[33,35320,35321],{"class":59},"    plt.ylabel(",[33,35323,35324],{"class":117},"'loss'",[33,35326,157],{"class":59},[33,35328,35330],{"class":35,"line":35329},202,[33,35331,35332],{"class":87},"    # ②准确度图\n",[33,35334,35336,35338,35340,35342,35344,35346,35348],{"class":35,"line":35335},203,[33,35337,33377],{"class":59},[33,35339,2036],{"class":39},[33,35341,2196],{"class":59},[33,35343,1897],{"class":39},[33,35345,2196],{"class":59},[33,35347,1897],{"class":39},[33,35349,157],{"class":59},[33,35351,35353,35355,35357,35360,35362,35364,35366,35368,35371],{"class":35,"line":35352},204,[33,35354,35241],{"class":59},[33,35356,35244],{"class":117},[33,35358,35359],{"class":59},"],train_process.train_acc_all,",[33,35361,35250],{"class":117},[33,35363,2196],{"class":59},[33,35365,35255],{"class":6877},[33,35367,64],{"class":63},[33,35369,35370],{"class":117},"'train acc'",[33,35372,157],{"class":59},[33,35374,35376,35378,35380,35383,35385,35387,35389,35391,35394],{"class":35,"line":35375},205,[33,35377,35241],{"class":59},[33,35379,35244],{"class":117},[33,35381,35382],{"class":59},"],train_process.val_acc_all,",[33,35384,35275],{"class":117},[33,35386,2196],{"class":59},[33,35388,35255],{"class":6877},[33,35390,64],{"class":63},[33,35392,35393],{"class":117},"'val acc'",[33,35395,157],{"class":59},[33,35397,35399],{"class":35,"line":35398},206,[33,35400,35401],{"class":87},"    # 添加图例\n",[33,35403,35405],{"class":35,"line":35404},207,[33,35406,35298],{"class":59},[33,35408,35410,35412,35414],{"class":35,"line":35409},208,[33,35411,35310],{"class":59},[33,35413,35244],{"class":117},[33,35415,157],{"class":59},[33,35417,35419,35421,35424],{"class":35,"line":35418},209,[33,35420,35321],{"class":59},[33,35422,35423],{"class":117},"\"acc\"",[33,35425,157],{"class":59},[33,35427,35429],{"class":35,"line":35428},210,[33,35430,35431],{"class":59},"    plt.show()\n",[33,35433,35435],{"class":35,"line":35434},211,[33,35436,127],{"emptyLinePlaceholder":126},[33,35438,35440],{"class":35,"line":35439},212,[33,35441,35442],{"class":87},"# 正式开始训练:\n",[33,35444,35446,35448,35450,35452,35454],{"class":35,"line":35445},213,[33,35447,133],{"class":63},[33,35449,32871],{"class":39},[33,35451,573],{"class":63},[33,35453,32876],{"class":117},[33,35455,143],{"class":59},[33,35457,35459],{"class":35,"line":35458},214,[33,35460,35461],{"class":87},"    # 将模型实例化\n",[33,35463,35465,35468,35470],{"class":35,"line":35464},215,[33,35466,35467],{"class":59},"    LeNet",[33,35469,64],{"class":63},[33,35471,35472],{"class":59},"LeNet()\n",[33,35474,35476,35479,35481],{"class":35,"line":35475},216,[33,35477,35478],{"class":59},"    train_dataloader,val_dataloader",[33,35480,64],{"class":63},[33,35482,35483],{"class":59},"train_val_data_process()\n",[33,35485,35487,35489,35491,35494,35497,35499,35501],{"class":35,"line":35486},217,[33,35488,35040],{"class":59},[33,35490,64],{"class":63},[33,35492,35493],{"class":59},"train_model_process(LeNet,train_dataloader,val_dataloader,",[33,35495,35496],{"class":6877},"num_epochs",[33,35498,64],{"class":63},[33,35500,2517],{"class":39},[33,35502,157],{"class":59},[33,35504,35506],{"class":35,"line":35505},218,[33,35507,35508],{"class":59},"    matplot_acc_loss(train_process)\n",[19,35510,35511],{},"画图的补充点学习：",[19,35513,35514],{},[3145,35515],{"alt":28,"src":35516},"\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",[162,35518,35519],{"start":130},[165,35520,35521],{},"测试",[23,35523,35525],{"className":25,"code":35524,"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,35526,35527,35533,35543,35555,35565,35570,35580,35590,35594,35599,35608,35625,35637,35654,35665,35681,35686,35697,35708,35719,35726,35730,35735,35745,35750,35767,35775,35779,35784,35793,35802,35806,35811,35816,35821,35828,35833,35845,35855,35865,35870,35874,35879,35888,35893,35909,35914,35919,35924,35938,35943,35957,35961,35966,35981,35986,35998,36002,36007,36019,36024,36032,36037,36042,36052,36057,36066,36071,36076,36080,36085,36090,36106,36114,36119,36124,36183,36189,36194,36205,36213,36221,36225,36230,36234,36239,36247,36252,36268,36273,36283,36293],{"__ignoreMap":28},[33,35528,35529,35531],{"class":35,"line":36},[33,35530,32045],{"class":63},[33,35532,32048],{"class":59},[33,35534,35535,35537,35539,35541],{"class":35,"line":43},[33,35536,32045],{"class":63},[33,35538,33065],{"class":59},[33,35540,33033],{"class":63},[33,35542,33070],{"class":59},[33,35544,35545,35547,35550,35552],{"class":35,"line":130},[33,35546,32388],{"class":63},[33,35548,35549],{"class":59}," jupyter_client.consoleapp ",[33,35551,32045],{"class":63},[33,35553,35554],{"class":59}," classes\n",[33,35556,35557,35559,35561,35563],{"class":35,"line":146},[33,35558,32388],{"class":63},[33,35560,33048],{"class":59},[33,35562,32045],{"class":63},[33,35564,33053],{"class":59},[33,35566,35567],{"class":35,"line":267},[33,35568,35569],{"class":87},"# 导入数据集\n",[33,35571,35572,35574,35576,35578],{"class":35,"line":275},[33,35573,32388],{"class":63},[33,35575,33018],{"class":59},[33,35577,32045],{"class":63},[33,35579,33023],{"class":59},[33,35581,35582,35584,35586,35588],{"class":35,"line":392},[33,35583,32388],{"class":63},[33,35585,33564],{"class":59},[33,35587,32045],{"class":63},[33,35589,33569],{"class":59},[33,35591,35592],{"class":35,"line":406},[33,35593,127],{"emptyLinePlaceholder":126},[33,35595,35596],{"class":35,"line":418},[33,35597,35598],{"class":87},"# 测试数据处理\n",[33,35600,35601,35603,35606],{"class":35,"line":425},[33,35602,33597],{"class":63},[33,35604,35605],{"class":3632}," test_data_process",[33,35607,33603],{"class":59},[33,35609,35610,35613,35615,35617,35619,35621,35623],{"class":35,"line":1147},[33,35611,35612],{"class":59},"    test_data",[33,35614,64],{"class":63},[33,35616,33105],{"class":59},[33,35618,33108],{"class":6877},[33,35620,64],{"class":63},[33,35622,33113],{"class":117},[33,35624,33116],{"class":59},[33,35626,35627,35630,35632,35635],{"class":35,"line":1329},[33,35628,35629],{"class":6877},"                           train",[33,35631,64],{"class":63},[33,35633,35634],{"class":39},"False",[33,35636,33116],{"class":59},[33,35638,35639,35642,35644,35646,35648,35650,35652],{"class":35,"line":1341},[33,35640,35641],{"class":6877},"                           transform",[33,35643,64],{"class":63},[33,35645,33143],{"class":59},[33,35647,33146],{"class":6877},[33,35649,64],{"class":63},[33,35651,2717],{"class":39},[33,35653,33154],{"class":59},[33,35655,35656,35659,35661,35663],{"class":35,"line":1348},[33,35657,35658],{"class":6877},"                           download",[33,35660,64],{"class":63},[33,35662,33126],{"class":39},[33,35664,157],{"class":59},[33,35666,35667,35670,35672,35674,35676,35678],{"class":35,"line":1529},[33,35668,35669],{"class":59},"    test_dataloader",[33,35671,64],{"class":63},[33,35673,33184],{"class":59},[33,35675,33187],{"class":6877},[33,35677,64],{"class":63},[33,35679,35680],{"class":59},"test_data,\n",[33,35682,35683],{"class":35,"line":1546},[33,35684,35685],{"class":87},"                                    # 这里是一张一张进行测试\n",[33,35687,35688,35691,35693,35695],{"class":35,"line":1551},[33,35689,35690],{"class":6877},"                                    batch_size",[33,35692,64],{"class":63},[33,35694,2036],{"class":39},[33,35696,33116],{"class":59},[33,35698,35699,35702,35704,35706],{"class":35,"line":1566},[33,35700,35701],{"class":6877},"                                    shuffle",[33,35703,64],{"class":63},[33,35705,33126],{"class":39},[33,35707,33116],{"class":59},[33,35709,35710,35713,35715,35717],{"class":35,"line":1578},[33,35711,35712],{"class":6877},"                                    num_workers",[33,35714,64],{"class":63},[33,35716,2010],{"class":39},[33,35718,157],{"class":59},[33,35720,35721,35723],{"class":35,"line":1583},[33,35722,5752],{"class":63},[33,35724,35725],{"class":59}," test_dataloader\n",[33,35727,35728],{"class":35,"line":3369},[33,35729,127],{"emptyLinePlaceholder":126},[33,35731,35732],{"class":35,"line":3396},[33,35733,35734],{"class":87},"# 定义模型测试函数\n",[33,35736,35737,35739,35742],{"class":35,"line":3401},[33,35738,33597],{"class":63},[33,35740,35741],{"class":3632}," test_model_process",[33,35743,35744],{"class":59},"(model,test_dataloader):\n",[33,35746,35747],{"class":35,"line":3418},[33,35748,35749],{"class":87},"    # 将模型放到设备当中，先进行判断\n",[33,35751,35752,35754,35756,35758,35760,35762,35764],{"class":35,"line":3423},[33,35753,32888],{"class":59},[33,35755,64],{"class":63},[33,35757,32895],{"class":117},[33,35759,3374],{"class":63},[33,35761,32900],{"class":59},[33,35763,270],{"class":63},[33,35765,35766],{"class":117}," \"cpu\"\n",[33,35768,35769,35771,35773],{"class":35,"line":3428},[33,35770,32940],{"class":59},[33,35772,64],{"class":63},[33,35774,33939],{"class":59},[33,35776,35777],{"class":35,"line":3433},[33,35778,127],{"emptyLinePlaceholder":126},[33,35780,35781],{"class":35,"line":3447},[33,35782,35783],{"class":87},"    # 设置初始化参数\n",[33,35785,35786,35789,35791],{"class":35,"line":3452},[33,35787,35788],{"class":59},"    test_corrects",[33,35790,64],{"class":63},[33,35792,928],{"class":39},[33,35794,35795,35798,35800],{"class":35,"line":4243},[33,35796,35797],{"class":59},"    test_num",[33,35799,64],{"class":63},[33,35801,923],{"class":39},[33,35803,35804],{"class":35,"line":4257},[33,35805,127],{"emptyLinePlaceholder":126},[33,35807,35808],{"class":35,"line":4265},[33,35809,35810],{"class":87},"    # 进行模型测试\n",[33,35812,35813],{"class":35,"line":4270},[33,35814,35815],{"class":87},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[33,35817,35818],{"class":35,"line":4276},[33,35819,35820],{"class":87},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[33,35822,35823,35826],{"class":35,"line":4282},[33,35824,35825],{"class":63},"    with",[33,35827,34531],{"class":59},[33,35829,35830],{"class":35,"line":4287},[33,35831,35832],{"class":87},"        # 从数据中进行\n",[33,35834,35835,35837,35840,35842],{"class":35,"line":9608},[33,35836,5066],{"class":63},[33,35838,35839],{"class":59}," test_data_x,test_data_y ",[33,35841,27699],{"class":63},[33,35843,35844],{"class":59}," test_dataloader:\n",[33,35846,35847,35850,35852],{"class":35,"line":9632},[33,35848,35849],{"class":59},"            test_data_x",[33,35851,64],{"class":63},[33,35853,35854],{"class":59},"test_data_x.to(device)\n",[33,35856,35857,35860,35862],{"class":35,"line":9637},[33,35858,35859],{"class":59},"            test_data_y",[33,35861,64],{"class":63},[33,35863,35864],{"class":59},"test_data_y.to(device)\n",[33,35866,35867],{"class":35,"line":9643},[33,35868,35869],{"class":87},"            # 设置为验证模式\n",[33,35871,35872],{"class":35,"line":9670},[33,35873,34522],{"class":59},[33,35875,35876],{"class":35,"line":9675},[33,35877,35878],{"class":87},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[33,35880,35881,35883,35885],{"class":35,"line":9681},[33,35882,34307],{"class":59},[33,35884,64],{"class":63},[33,35886,35887],{"class":59},"model(test_data_x)\n",[33,35889,35890],{"class":35,"line":9693},[33,35891,35892],{"class":87},"            # 查找每一行中最大值对应的下标\n",[33,35894,35895,35897,35899,35901,35903,35905,35907],{"class":35,"line":9705},[33,35896,34324],{"class":59},[33,35898,64],{"class":63},[33,35900,34329],{"class":59},[33,35902,34332],{"class":6877},[33,35904,64],{"class":63},[33,35906,2036],{"class":39},[33,35908,157],{"class":59},[33,35910,35911],{"class":35,"line":9717},[33,35912,35913],{"class":87},"            # 计算正确率\n",[33,35915,35916],{"class":35,"line":11375},[33,35917,35918],{"class":87},"            # .data表示是一个不带梯度信息的tensor\n",[33,35920,35921],{"class":35,"line":11400},[33,35922,35923],{"class":87},"            # 如果预测正确，则准确度test_corrects加1\n",[33,35925,35926,35929,35931,35933,35935],{"class":35,"line":11423},[33,35927,35928],{"class":59},"            test_corrects",[33,35930,11136],{"class":63},[33,35932,34434],{"class":59},[33,35934,573],{"class":63},[33,35936,35937],{"class":59},"test_data_y.data)\n",[33,35939,35940],{"class":35,"line":11447},[33,35941,35942],{"class":87},"            # 将所有的测试样本进行累计\n",[33,35944,35945,35948,35950,35953,35955],{"class":35,"line":11452},[33,35946,35947],{"class":59},"            test_num",[33,35949,11136],{"class":63},[33,35951,35952],{"class":59},"test_data_x.size(",[33,35954,2010],{"class":39},[33,35956,157],{"class":59},[33,35958,35959],{"class":35,"line":11457},[33,35960,127],{"emptyLinePlaceholder":126},[33,35962,35963],{"class":35,"line":11462},[33,35964,35965],{"class":87},"        # 计算准确度\n",[33,35967,35968,35971,35973,35976,35978],{"class":35,"line":11471},[33,35969,35970],{"class":59},"        test_acc",[33,35972,64],{"class":63},[33,35974,35975],{"class":59},"test_corrects.double().item()",[33,35977,2401],{"class":63},[33,35979,35980],{"class":59},"test_num\n",[33,35982,35983],{"class":35,"line":11476},[33,35984,35985],{"class":87},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[33,35987,35988,35990,35992,35995],{"class":35,"line":11482},[33,35989,583],{"class":39},[33,35991,109],{"class":59},[33,35993,35994],{"class":117},"\"测试的准确率：\"",[33,35996,35997],{"class":59},",test_acc)\n",[33,35999,36000],{"class":35,"line":11503},[33,36001,127],{"emptyLinePlaceholder":126},[33,36003,36004],{"class":35,"line":11509},[33,36005,36006],{"class":87},"# 实现模型的测试功能\n",[33,36008,36009,36011,36013,36015,36017],{"class":35,"line":11523},[33,36010,133],{"class":63},[33,36012,32871],{"class":39},[33,36014,573],{"class":63},[33,36016,32876],{"class":117},[33,36018,143],{"class":59},[33,36020,36021],{"class":35,"line":11529},[33,36022,36023],{"class":87},"    # 加载模型\n",[33,36025,36026,36028,36030],{"class":35,"line":11556},[33,36027,32940],{"class":59},[33,36029,64],{"class":63},[33,36031,35472],{"class":59},[33,36033,36034],{"class":35,"line":11565},[33,36035,36036],{"class":87},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[33,36038,36039],{"class":35,"line":11571},[33,36040,36041],{"class":87},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[33,36043,36044,36047,36050],{"class":35,"line":11579},[33,36045,36046],{"class":59},"    model.load_state_dict(torch.load(",[33,36048,36049],{"class":117},"'best_model.pth'",[33,36051,121],{"class":59},[33,36053,36054],{"class":35,"line":11584},[33,36055,36056],{"class":87},"    # 数据加载\n",[33,36058,36059,36061,36063],{"class":35,"line":18259},[33,36060,35669],{"class":59},[33,36062,64],{"class":63},[33,36064,36065],{"class":59},"test_data_process()\n",[33,36067,36068],{"class":35,"line":18265},[33,36069,36070],{"class":87},"    # 加载模型测试的函数\n",[33,36072,36073],{"class":35,"line":18288},[33,36074,36075],{"class":59},"    test_model_process(model,test_dataloader)\n",[33,36077,36078],{"class":35,"line":18294},[33,36079,127],{"emptyLinePlaceholder":126},[33,36081,36082],{"class":35,"line":18317},[33,36083,36084],{"class":87},"    # 验证集推理实现：\n",[33,36086,36087],{"class":35,"line":18331},[33,36088,36089],{"class":87},"    # 加载数据加载的更详细一些\n",[33,36091,36092,36094,36096,36098,36100,36102,36104],{"class":35,"line":18351},[33,36093,32888],{"class":59},[33,36095,64],{"class":63},[33,36097,32895],{"class":117},[33,36099,3374],{"class":63},[33,36101,32900],{"class":59},[33,36103,270],{"class":63},[33,36105,35766],{"class":117},[33,36107,36108,36110,36112],{"class":35,"line":18357},[33,36109,32940],{"class":59},[33,36111,64],{"class":63},[33,36113,33939],{"class":59},[33,36115,36116],{"class":35,"line":18368},[33,36117,36118],{"class":87},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[33,36120,36121],{"class":35,"line":18391},[33,36122,36123],{"class":87},"    # 顺序不可改变\n",[33,36125,36126,36129,36131,36133,36136,36138,36141,36143,36146,36148,36151,36153,36156,36158,36161,36163,36166,36168,36171,36173,36176,36178,36181],{"class":35,"line":18413},[33,36127,36128],{"class":59},"    classes",[33,36130,64],{"class":63},[33,36132,2707],{"class":59},[33,36134,36135],{"class":117},"'T-shirt\u002Ftop'",[33,36137,2196],{"class":59},[33,36139,36140],{"class":117},"'Trouser'",[33,36142,2196],{"class":59},[33,36144,36145],{"class":117},"'Pullover'",[33,36147,2196],{"class":59},[33,36149,36150],{"class":117},"'Dress'",[33,36152,2196],{"class":59},[33,36154,36155],{"class":117},"'Coat'",[33,36157,2196],{"class":59},[33,36159,36160],{"class":117},"'Sandal'",[33,36162,2196],{"class":59},[33,36164,36165],{"class":117},"'Shirt'",[33,36167,2196],{"class":59},[33,36169,36170],{"class":117},"'Sneaker'",[33,36172,2196],{"class":59},[33,36174,36175],{"class":117},"'Bag'",[33,36177,2196],{"class":59},[33,36179,36180],{"class":117},"'Ankle boot'",[33,36182,34893],{"class":59},[33,36184,36185,36187],{"class":35,"line":18418},[33,36186,35825],{"class":63},[33,36188,34531],{"class":59},[33,36190,36191],{"class":35,"line":18424},[33,36192,36193],{"class":87},"        # 将数据和标签都放到设备当中\n",[33,36195,36196,36198,36201,36203],{"class":35,"line":18438},[33,36197,5066],{"class":63},[33,36199,36200],{"class":59}," b_x,b_y ",[33,36202,27699],{"class":63},[33,36204,35844],{"class":59},[33,36206,36207,36209,36211],{"class":35,"line":18451},[33,36208,34257],{"class":59},[33,36210,64],{"class":63},[33,36212,34262],{"class":59},[33,36214,36215,36217,36219],{"class":35,"line":18456},[33,36216,34272],{"class":59},[33,36218,64],{"class":63},[33,36220,34277],{"class":59},[33,36222,36223],{"class":35,"line":18470},[33,36224,127],{"emptyLinePlaceholder":126},[33,36226,36227],{"class":35,"line":18475},[33,36228,36229],{"class":87},"            # 设置模型为验证模式\n",[33,36231,36232],{"class":35,"line":18481},[33,36233,34522],{"class":59},[33,36235,36236],{"class":35,"line":18486},[33,36237,36238],{"class":87},"            # 模型推理结果\n",[33,36240,36241,36243,36245],{"class":35,"line":18500},[33,36242,34307],{"class":59},[33,36244,64],{"class":63},[33,36246,34312],{"class":59},[33,36248,36249],{"class":35,"line":18505},[33,36250,36251],{"class":87},"            # 获取最大下标，最大下标就是类别号\n",[33,36253,36254,36256,36258,36260,36262,36264,36266],{"class":35,"line":18510},[33,36255,34324],{"class":59},[33,36257,64],{"class":63},[33,36259,34329],{"class":59},[33,36261,34332],{"class":6877},[33,36263,64],{"class":63},[33,36265,2036],{"class":39},[33,36267,157],{"class":59},[33,36269,36270],{"class":35,"line":18524},[33,36271,36272],{"class":87},"            # 取出张量中的数值\n",[33,36274,36275,36278,36280],{"class":35,"line":18536},[33,36276,36277],{"class":59},"            result",[33,36279,64],{"class":63},[33,36281,36282],{"class":59},"pre_lab.item()\n",[33,36284,36285,36288,36290],{"class":35,"line":18541},[33,36286,36287],{"class":59},"            label",[33,36289,64],{"class":63},[33,36291,36292],{"class":59},"b_y.item()\n",[33,36294,36295,36298,36300,36303,36306,36309,36311,36314],{"class":35,"line":18554},[33,36296,36297],{"class":39},"            print",[33,36299,109],{"class":59},[33,36301,36302],{"class":117},"\"预测值：\"",[33,36304,36305],{"class":59},",classes[result],",[33,36307,36308],{"class":117},"\"------\"",[33,36310,2196],{"class":59},[33,36312,36313],{"class":117},"\"真实值：\"",[33,36315,36316],{"class":59},",classes[label])\n",[19,36318,36319],{},"（2）AlexNet",[162,36321,36322],{},[165,36323,36324],{},"神经网络构建",[23,36326,36328],{"className":25,"code":36327,"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,36329,36330,36336,36346,36356,36368,36372,36389,36397,36412,36424,36466,36493,36536,36562,36606,36649,36692,36719,36723,36733,36738,36766,36785,36804,36808,36813,36821,36836,36846,36860,36870,36885,36900,36915,36926,36930,36935,36945,36960,36965,36979,36994,37006,37011,37022,37027,37033,37038,37050,37070,37075,37084],{"__ignoreMap":28},[33,36331,36332,36334],{"class":35,"line":36},[33,36333,32045],{"class":63},[33,36335,32048],{"class":59},[33,36337,36338,36340,36342,36344],{"class":35,"line":43},[33,36339,32388],{"class":63},[33,36341,32391],{"class":59},[33,36343,32045],{"class":63},[33,36345,32396],{"class":59},[33,36347,36348,36350,36352,36354],{"class":35,"line":130},[33,36349,32388],{"class":63},[33,36351,32408],{"class":59},[33,36353,32045],{"class":63},[33,36355,32413],{"class":59},[33,36357,36358,36360,36363,36365],{"class":35,"line":146},[33,36359,32045],{"class":63},[33,36361,36362],{"class":59}," torch.nn.functional ",[33,36364,33033],{"class":63},[33,36366,36367],{"class":59}," F\n",[33,36369,36370],{"class":35,"line":267},[33,36371,127],{"emptyLinePlaceholder":126},[33,36373,36374,36376,36379,36381,36383,36385,36387],{"class":35,"line":275},[33,36375,16352],{"class":63},[33,36377,36378],{"class":3632}," AlexNet",[33,36380,109],{"class":59},[33,36382,32429],{"class":3632},[33,36384,2375],{"class":59},[33,36386,32434],{"class":3632},[33,36388,32437],{"class":59},[33,36390,36391,36393,36395],{"class":35,"line":392},[33,36392,32452],{"class":63},[33,36394,32455],{"class":39},[33,36396,32458],{"class":59},[33,36398,36399,36401,36404,36406,36408,36410],{"class":35,"line":406},[33,36400,32468],{"class":39},[33,36402,36403],{"class":59},"(AlexNet,",[33,36405,32474],{"class":39},[33,36407,32477],{"class":59},[33,36409,32480],{"class":39},[33,36411,943],{"class":59},[33,36413,36414,36416,36419,36421],{"class":35,"line":418},[33,36415,32496],{"class":39},[33,36417,36418],{"class":59},".ReLu",[33,36420,64],{"class":63},[33,36422,36423],{"class":59},"nn.ReLU()\n",[33,36425,36426,36428,36430,36432,36434,36436,36438,36440,36442,36444,36446,36448,36450,36452,36454,36456,36458,36460,36462,36464],{"class":35,"line":425},[33,36427,32496],{"class":39},[33,36429,32499],{"class":59},[33,36431,64],{"class":63},[33,36433,32504],{"class":59},[33,36435,32507],{"class":6877},[33,36437,64],{"class":63},[33,36439,2036],{"class":39},[33,36441,2196],{"class":59},[33,36443,32516],{"class":6877},[33,36445,64],{"class":63},[33,36447,2028],{"class":39},[33,36449,2196],{"class":59},[33,36451,32525],{"class":6877},[33,36453,64],{"class":63},[33,36455,2289],{"class":39},[33,36457,2196],{"class":59},[33,36459,32580],{"class":6877},[33,36461,64],{"class":63},[33,36463,2111],{"class":39},[33,36465,157],{"class":59},[33,36467,36468,36470,36472,36474,36477,36479,36481,36483,36485,36487,36489,36491],{"class":35,"line":1147},[33,36469,32496],{"class":39},[33,36471,32564],{"class":59},[33,36473,64],{"class":63},[33,36475,36476],{"class":59},"nn.MaxPool2d(",[33,36478,32525],{"class":6877},[33,36480,64],{"class":63},[33,36482,1891],{"class":39},[33,36484,2196],{"class":59},[33,36486,32580],{"class":6877},[33,36488,64],{"class":63},[33,36490,1897],{"class":39},[33,36492,157],{"class":59},[33,36494,36495,36497,36499,36501,36503,36505,36507,36509,36511,36513,36515,36518,36520,36522,36524,36526,36528,36530,36532,36534],{"class":35,"line":1329},[33,36496,32496],{"class":39},[33,36498,32593],{"class":59},[33,36500,64],{"class":63},[33,36502,32504],{"class":59},[33,36504,32507],{"class":6877},[33,36506,64],{"class":63},[33,36508,2028],{"class":39},[33,36510,2196],{"class":59},[33,36512,32516],{"class":6877},[33,36514,64],{"class":63},[33,36516,36517],{"class":39},"256",[33,36519,2196],{"class":59},[33,36521,32525],{"class":6877},[33,36523,64],{"class":63},[33,36525,2137],{"class":39},[33,36527,2196],{"class":59},[33,36529,32534],{"class":6877},[33,36531,64],{"class":63},[33,36533,1897],{"class":39},[33,36535,157],{"class":59},[33,36537,36538,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560],{"class":35,"line":1341},[33,36539,32496],{"class":39},[33,36541,32628],{"class":59},[33,36543,64],{"class":63},[33,36545,36476],{"class":59},[33,36547,32525],{"class":6877},[33,36549,64],{"class":63},[33,36551,1891],{"class":39},[33,36553,2196],{"class":59},[33,36555,32580],{"class":6877},[33,36557,64],{"class":63},[33,36559,1897],{"class":39},[33,36561,157],{"class":59},[33,36563,36564,36566,36569,36571,36573,36575,36577,36579,36581,36583,36585,36588,36590,36592,36594,36596,36598,36600,36602,36604],{"class":35,"line":1348},[33,36565,32496],{"class":39},[33,36567,36568],{"class":59},".c5",[33,36570,64],{"class":63},[33,36572,32504],{"class":59},[33,36574,32507],{"class":6877},[33,36576,64],{"class":63},[33,36578,36517],{"class":39},[33,36580,2196],{"class":59},[33,36582,32516],{"class":6877},[33,36584,64],{"class":63},[33,36586,36587],{"class":39},"384",[33,36589,2196],{"class":59},[33,36591,32525],{"class":6877},[33,36593,64],{"class":63},[33,36595,1891],{"class":39},[33,36597,2196],{"class":59},[33,36599,32534],{"class":6877},[33,36601,64],{"class":63},[33,36603,2036],{"class":39},[33,36605,157],{"class":59},[33,36607,36608,36610,36613,36615,36617,36619,36621,36623,36625,36627,36629,36631,36633,36635,36637,36639,36641,36643,36645,36647],{"class":35,"line":1529},[33,36609,32496],{"class":39},[33,36611,36612],{"class":59},".c6",[33,36614,64],{"class":63},[33,36616,32504],{"class":59},[33,36618,32507],{"class":6877},[33,36620,64],{"class":63},[33,36622,36587],{"class":39},[33,36624,2196],{"class":59},[33,36626,32516],{"class":6877},[33,36628,64],{"class":63},[33,36630,36587],{"class":39},[33,36632,2196],{"class":59},[33,36634,32525],{"class":6877},[33,36636,64],{"class":63},[33,36638,1891],{"class":39},[33,36640,2196],{"class":59},[33,36642,32534],{"class":6877},[33,36644,64],{"class":63},[33,36646,2036],{"class":39},[33,36648,157],{"class":59},[33,36650,36651,36653,36656,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690],{"class":35,"line":1546},[33,36652,32496],{"class":39},[33,36654,36655],{"class":59},".c7",[33,36657,64],{"class":63},[33,36659,32504],{"class":59},[33,36661,32507],{"class":6877},[33,36663,64],{"class":63},[33,36665,36587],{"class":39},[33,36667,2196],{"class":59},[33,36669,32516],{"class":6877},[33,36671,64],{"class":63},[33,36673,36517],{"class":39},[33,36675,2196],{"class":59},[33,36677,32525],{"class":6877},[33,36679,64],{"class":63},[33,36681,1891],{"class":39},[33,36683,2196],{"class":59},[33,36685,32534],{"class":6877},[33,36687,64],{"class":63},[33,36689,2036],{"class":39},[33,36691,157],{"class":59},[33,36693,36694,36696,36699,36701,36703,36705,36707,36709,36711,36713,36715,36717],{"class":35,"line":1551},[33,36695,32496],{"class":39},[33,36697,36698],{"class":59},".s8",[33,36700,64],{"class":63},[33,36702,36476],{"class":59},[33,36704,32525],{"class":6877},[33,36706,64],{"class":63},[33,36708,1891],{"class":39},[33,36710,2196],{"class":59},[33,36712,32580],{"class":6877},[33,36714,64],{"class":63},[33,36716,1897],{"class":39},[33,36718,157],{"class":59},[33,36720,36721],{"class":35,"line":1566},[33,36722,32653],{"class":87},[33,36724,36725,36727,36729,36731],{"class":35,"line":1578},[33,36726,32496],{"class":39},[33,36728,32660],{"class":59},[33,36730,64],{"class":63},[33,36732,32665],{"class":59},[33,36734,36735],{"class":35,"line":1583},[33,36736,36737],{"class":87},"       # 定义全连接层\n",[33,36739,36740,36742,36745,36747,36749,36751,36753,36755,36757,36759,36761,36764],{"class":35,"line":3369},[33,36741,32496],{"class":39},[33,36743,36744],{"class":59},".f1",[33,36746,64],{"class":63},[33,36748,32682],{"class":59},[33,36750,2162],{"class":39},[33,36752,1540],{"class":63},[33,36754,2162],{"class":39},[33,36756,1540],{"class":63},[33,36758,36517],{"class":39},[33,36760,2196],{"class":59},[33,36762,36763],{"class":39},"4096",[33,36765,157],{"class":59},[33,36767,36768,36770,36773,36775,36777,36779,36781,36783],{"class":35,"line":3396},[33,36769,32496],{"class":39},[33,36771,36772],{"class":59},".f2",[33,36774,64],{"class":63},[33,36776,32682],{"class":59},[33,36778,36763],{"class":39},[33,36780,2196],{"class":59},[33,36782,36763],{"class":39},[33,36784,157],{"class":59},[33,36786,36787,36789,36792,36794,36796,36798,36800,36802],{"class":35,"line":3401},[33,36788,32496],{"class":39},[33,36790,36791],{"class":59},".f3",[33,36793,64],{"class":63},[33,36795,32682],{"class":59},[33,36797,36763],{"class":39},[33,36799,2196],{"class":59},[33,36801,2264],{"class":39},[33,36803,157],{"class":59},[33,36805,36806],{"class":35,"line":3418},[33,36807,127],{"emptyLinePlaceholder":126},[33,36809,36810],{"class":35,"line":3423},[33,36811,36812],{"class":87},"    # 定义前向传播\n",[33,36814,36815,36817,36819],{"class":35,"line":3428},[33,36816,32452],{"class":63},[33,36818,32744],{"class":3632},[33,36820,32747],{"class":59},[33,36822,36823,36825,36827,36829,36832,36834],{"class":35,"line":3433},[33,36824,32752],{"class":59},[33,36826,64],{"class":63},[33,36828,32474],{"class":39},[33,36830,36831],{"class":59},".ReLu(",[33,36833,32474],{"class":39},[33,36835,32764],{"class":59},[33,36837,36838,36840,36842,36844],{"class":35,"line":3447},[33,36839,32752],{"class":59},[33,36841,64],{"class":63},[33,36843,32474],{"class":39},[33,36845,32775],{"class":59},[33,36847,36848,36850,36852,36854,36856,36858],{"class":35,"line":3452},[33,36849,32752],{"class":59},[33,36851,64],{"class":63},[33,36853,32474],{"class":39},[33,36855,36831],{"class":59},[33,36857,32474],{"class":39},[33,36859,32790],{"class":59},[33,36861,36862,36864,36866,36868],{"class":35,"line":4243},[33,36863,32752],{"class":59},[33,36865,64],{"class":63},[33,36867,32474],{"class":39},[33,36869,32801],{"class":59},[33,36871,36872,36874,36876,36878,36880,36882],{"class":35,"line":4257},[33,36873,32752],{"class":59},[33,36875,64],{"class":63},[33,36877,32474],{"class":39},[33,36879,36831],{"class":59},[33,36881,32474],{"class":39},[33,36883,36884],{"class":59},".c5(x))\n",[33,36886,36887,36889,36891,36893,36895,36897],{"class":35,"line":4265},[33,36888,32752],{"class":59},[33,36890,64],{"class":63},[33,36892,32474],{"class":39},[33,36894,36831],{"class":59},[33,36896,32474],{"class":39},[33,36898,36899],{"class":59},".c6(x))\n",[33,36901,36902,36904,36906,36908,36910,36912],{"class":35,"line":4270},[33,36903,32752],{"class":59},[33,36905,64],{"class":63},[33,36907,32474],{"class":39},[33,36909,36831],{"class":59},[33,36911,32474],{"class":39},[33,36913,36914],{"class":59},".c7(x))\n",[33,36916,36917,36919,36921,36923],{"class":35,"line":4276},[33,36918,32752],{"class":59},[33,36920,64],{"class":63},[33,36922,32474],{"class":39},[33,36924,36925],{"class":59},".s8(x)\n",[33,36927,36928],{"class":35,"line":4282},[33,36929,127],{"emptyLinePlaceholder":126},[33,36931,36932],{"class":35,"line":4287},[33,36933,36934],{"class":87},"        # 展平加线性全连接层\n",[33,36936,36937,36939,36941,36943],{"class":35,"line":9608},[33,36938,32752],{"class":59},[33,36940,64],{"class":63},[33,36942,32474],{"class":39},[33,36944,32812],{"class":59},[33,36946,36947,36949,36951,36953,36955,36957],{"class":35,"line":9632},[33,36948,32752],{"class":59},[33,36950,64],{"class":63},[33,36952,32474],{"class":39},[33,36954,36831],{"class":59},[33,36956,32474],{"class":39},[33,36958,36959],{"class":59},".f1(x))\n",[33,36961,36962],{"class":35,"line":9637},[33,36963,36964],{"class":87},"        # 还需要dropout对神经元随机进行失活\n",[33,36966,36967,36969,36971,36974,36977],{"class":35,"line":9643},[33,36968,32752],{"class":59},[33,36970,64],{"class":63},[33,36972,36973],{"class":59},"F.dropout(x,",[33,36975,36976],{"class":39},"0.5",[33,36978,157],{"class":59},[33,36980,36981,36983,36985,36987,36989,36991],{"class":35,"line":9670},[33,36982,32752],{"class":59},[33,36984,64],{"class":63},[33,36986,32474],{"class":39},[33,36988,36831],{"class":59},[33,36990,32474],{"class":39},[33,36992,36993],{"class":59},".f2(x))\n",[33,36995,36996,36998,37000,37002,37004],{"class":35,"line":9675},[33,36997,32752],{"class":59},[33,36999,64],{"class":63},[33,37001,36973],{"class":59},[33,37003,36976],{"class":39},[33,37005,157],{"class":59},[33,37007,37008],{"class":35,"line":9681},[33,37009,37010],{"class":87},"        # 直接输出\n",[33,37012,37013,37015,37017,37019],{"class":35,"line":9693},[33,37014,32752],{"class":59},[33,37016,64],{"class":63},[33,37018,32474],{"class":39},[33,37020,37021],{"class":59},".f3(x)\n",[33,37023,37024],{"class":35,"line":9705},[33,37025,37026],{"class":87},"        # 前向传播输出\n",[33,37028,37029,37031],{"class":35,"line":9717},[33,37030,16410],{"class":63},[33,37032,32860],{"class":59},[33,37034,37035],{"class":35,"line":11375},[33,37036,37037],{"class":87},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[33,37039,37040,37042,37044,37046,37048],{"class":35,"line":11400},[33,37041,133],{"class":63},[33,37043,32871],{"class":39},[33,37045,573],{"class":63},[33,37047,32876],{"class":117},[33,37049,143],{"class":59},[33,37051,37052,37054,37056,37058,37060,37062,37064,37066,37068],{"class":35,"line":11423},[33,37053,32888],{"class":59},[33,37055,64],{"class":63},[33,37057,32103],{"class":59},[33,37059,32895],{"class":117},[33,37061,3374],{"class":63},[33,37063,32900],{"class":59},[33,37065,270],{"class":63},[33,37067,32128],{"class":117},[33,37069,157],{"class":59},[33,37071,37072],{"class":35,"line":11447},[33,37073,37074],{"class":87},"    # 模型实例化，然后将实例化的模型放到设备中\n",[33,37076,37077,37079,37081],{"class":35,"line":11452},[33,37078,32940],{"class":59},[33,37080,64],{"class":63},[33,37082,37083],{"class":59},"AlexNet().to(device)\n",[33,37085,37086,37088,37090,37092,37094,37097,37099,37101],{"class":35,"line":11457},[33,37087,149],{"class":39},[33,37089,32952],{"class":59},[33,37091,2036],{"class":39},[33,37093,2196],{"class":59},[33,37095,37096],{"class":39},"227",[33,37098,2196],{"class":59},[33,37100,37096],{"class":39},[33,37102,32965],{"class":59},[162,37104,37105],{"start":43},[165,37106,32978],{},[23,37108,37110],{"className":25,"code":37109,"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,37111,37112,37118,37124,37134,37140,37150,37160,37170,37180,37190,37194,37205,37215,37219,37223,37227,37235,37247,37257,37273,37283,37315,37329,37339,37349,37353,37363,37377,37387,37397,37407,37413,37417,37421,37425,37429,37433,37441,37461,37465,37469,37473,37477,37481,37497,37501,37505,37513,37517,37521,37529,37533,37537,37541,37549,37553,37557,37561,37565,37573,37577,37585,37589,37597,37601,37609,37613,37621,37625,37629,37637,37641,37645,37649,37661,37685,37699,37703,37707,37711,37719,37723,37731,37735,37743,37747,37755,37759,37767,37771,37779,37783,37795,37799,37807,37811,37819,37823,37827,37831,37835,37843,37847,37863,37867,37875,37879,37883,37887,37891,37895,37899,37903,37919,37923,37935,37939,37951,37955,37967,37971,37979,37983,37991,37995,37999,38004,38010,38014,38023,38027,38044,38048,38057,38061,38079,38092,38097,38110,38114,38118,38126,38130,38134,38142,38146,38154,38158,38166,38170,38174,38216,38258,38262,38266,38282,38286,38302,38306,38310,38318,38322,38326,38338,38376,38381,38386,38395,38399,38413,38423,38429,38435,38441,38447,38451,38455,38461,38465,38469,38477,38481,38499,38503,38507,38511,38527,38531,38535,38539,38543,38547,38567,38587,38591,38595,38599,38607,38615,38619,38635,38655,38675,38679,38683,38691,38699,38703,38707,38711,38723,38727,38737,38745,38762],{"__ignoreMap":28},[33,37113,37114,37116],{"class":35,"line":36},[33,37115,32045],{"class":63},[33,37117,33472],{"class":59},[33,37119,37120,37122],{"class":35,"line":43},[33,37121,32045],{"class":63},[33,37123,33479],{"class":59},[33,37125,37126,37128,37130,37132],{"class":35,"line":130},[33,37127,32045],{"class":63},[33,37129,33490],{"class":59},[33,37131,33033],{"class":63},[33,37133,33495],{"class":59},[33,37135,37136,37138],{"class":35,"line":146},[33,37137,32045],{"class":63},[33,37139,32048],{"class":59},[33,37141,37142,37144,37146,37148],{"class":35,"line":267},[33,37143,32388],{"class":63},[33,37145,33065],{"class":59},[33,37147,32045],{"class":63},[33,37149,33512],{"class":59},[33,37151,37152,37154,37156,37158],{"class":35,"line":275},[33,37153,32388],{"class":63},[33,37155,33018],{"class":59},[33,37157,32045],{"class":63},[33,37159,33023],{"class":59},[33,37161,37162,37164,37166,37168],{"class":35,"line":392},[33,37163,32388],{"class":63},[33,37165,33048],{"class":59},[33,37167,32045],{"class":63},[33,37169,33053],{"class":59},[33,37171,37172,37174,37176,37178],{"class":35,"line":406},[33,37173,32045],{"class":63},[33,37175,33065],{"class":59},[33,37177,33033],{"class":63},[33,37179,33070],{"class":59},[33,37181,37182,37184,37186,37188],{"class":35,"line":418},[33,37183,32045],{"class":63},[33,37185,33082],{"class":59},[33,37187,33033],{"class":63},[33,37189,33087],{"class":59},[33,37191,37192],{"class":35,"line":425},[33,37193,33557],{"class":87},[33,37195,37196,37198,37200,37202],{"class":35,"line":1147},[33,37197,32388],{"class":63},[33,37199,33564],{"class":59},[33,37201,32045],{"class":63},[33,37203,37204],{"class":59}," AlexNet\n",[33,37206,37207,37209,37211,37213],{"class":35,"line":1329},[33,37208,32388],{"class":63},[33,37210,32391],{"class":59},[33,37212,32045],{"class":63},[33,37214,32396],{"class":59},[33,37216,37217],{"class":35,"line":1341},[33,37218,127],{"emptyLinePlaceholder":126},[33,37220,37221],{"class":35,"line":1348},[33,37222,127],{"emptyLinePlaceholder":126},[33,37224,37225],{"class":35,"line":1529},[33,37226,33592],{"class":87},[33,37228,37229,37231,37233],{"class":35,"line":1546},[33,37230,33597],{"class":63},[33,37232,33600],{"class":3632},[33,37234,33603],{"class":59},[33,37236,37237,37239,37241,37243,37245],{"class":35,"line":1551},[33,37238,33608],{"class":59},[33,37240,64],{"class":63},[33,37242,33105],{"class":59},[33,37244,33113],{"class":117},[33,37246,33116],{"class":59},[33,37248,37249,37251,37253,37255],{"class":35,"line":1566},[33,37250,33621],{"class":6877},[33,37252,64],{"class":63},[33,37254,33126],{"class":39},[33,37256,33116],{"class":59},[33,37258,37259,37261,37263,37265,37267,37269,37271],{"class":35,"line":1578},[33,37260,33632],{"class":6877},[33,37262,64],{"class":63},[33,37264,33143],{"class":59},[33,37266,33146],{"class":6877},[33,37268,64],{"class":63},[33,37270,37096],{"class":39},[33,37272,33154],{"class":59},[33,37274,37275,37277,37279,37281],{"class":35,"line":1583},[33,37276,33649],{"class":6877},[33,37278,64],{"class":63},[33,37280,33126],{"class":39},[33,37282,157],{"class":59},[33,37284,37285,37287,37289,37291,37293,37295,37297,37299,37301,37303,37305,37307,37309,37311,37313],{"class":35,"line":3369},[33,37286,33660],{"class":59},[33,37288,64],{"class":63},[33,37290,33665],{"class":59},[33,37292,33668],{"class":39},[33,37294,109],{"class":59},[33,37296,33673],{"class":39},[33,37298,1540],{"class":63},[33,37300,9018],{"class":39},[33,37302,33680],{"class":59},[33,37304,33668],{"class":39},[33,37306,109],{"class":59},[33,37308,33687],{"class":39},[33,37310,1540],{"class":63},[33,37312,9018],{"class":39},[33,37314,33694],{"class":59},[33,37316,37317,37319,37321,37323,37325,37327],{"class":35,"line":3396},[33,37318,33699],{"class":59},[33,37320,64],{"class":63},[33,37322,33704],{"class":59},[33,37324,33187],{"class":6877},[33,37326,64],{"class":63},[33,37328,33192],{"class":59},[33,37330,37331,37333,37335,37337],{"class":35,"line":3401},[33,37332,33715],{"class":6877},[33,37334,64],{"class":63},[33,37336,33720],{"class":39},[33,37338,33116],{"class":59},[33,37340,37341,37343,37345,37347],{"class":35,"line":3418},[33,37342,33727],{"class":6877},[33,37344,64],{"class":63},[33,37346,33126],{"class":39},[33,37348,33116],{"class":59},[33,37350,37351],{"class":35,"line":3423},[33,37352,33738],{"class":87},[33,37354,37355,37357,37359,37361],{"class":35,"line":3428},[33,37356,33743],{"class":6877},[33,37358,64],{"class":63},[33,37360,2213],{"class":39},[33,37362,157],{"class":59},[33,37364,37365,37367,37369,37371,37373,37375],{"class":35,"line":3433},[33,37366,33754],{"class":59},[33,37368,64],{"class":63},[33,37370,33184],{"class":59},[33,37372,33187],{"class":6877},[33,37374,64],{"class":63},[33,37376,33765],{"class":59},[33,37378,37379,37381,37383,37385],{"class":35,"line":3447},[33,37380,33770],{"class":6877},[33,37382,64],{"class":63},[33,37384,33720],{"class":39},[33,37386,33116],{"class":59},[33,37388,37389,37391,37393,37395],{"class":35,"line":3452},[33,37390,33781],{"class":6877},[33,37392,64],{"class":63},[33,37394,33126],{"class":39},[33,37396,33116],{"class":59},[33,37398,37399,37401,37403,37405],{"class":35,"line":4243},[33,37400,33792],{"class":6877},[33,37402,64],{"class":63},[33,37404,2213],{"class":39},[33,37406,157],{"class":59},[33,37408,37409,37411],{"class":35,"line":4257},[33,37410,5752],{"class":63},[33,37412,33805],{"class":59},[33,37414,37415],{"class":35,"line":4265},[33,37416,127],{"emptyLinePlaceholder":126},[33,37418,37419],{"class":35,"line":4270},[33,37420,33814],{"class":87},[33,37422,37423],{"class":35,"line":4276},[33,37424,33819],{"class":87},[33,37426,37427],{"class":35,"line":4282},[33,37428,127],{"emptyLinePlaceholder":126},[33,37430,37431],{"class":35,"line":4287},[33,37432,33828],{"class":87},[33,37434,37435,37437,37439],{"class":35,"line":9608},[33,37436,33597],{"class":63},[33,37438,33835],{"class":3632},[33,37440,33838],{"class":59},[33,37442,37443,37445,37447,37449,37451,37453,37455,37457,37459],{"class":35,"line":9632},[33,37444,32888],{"class":59},[33,37446,64],{"class":63},[33,37448,32103],{"class":59},[33,37450,32895],{"class":117},[33,37452,3374],{"class":63},[33,37454,32900],{"class":59},[33,37456,270],{"class":63},[33,37458,33857],{"class":117},[33,37460,157],{"class":59},[33,37462,37463],{"class":35,"line":9637},[33,37464,127],{"emptyLinePlaceholder":126},[33,37466,37467],{"class":35,"line":9643},[33,37468,127],{"emptyLinePlaceholder":126},[33,37470,37471],{"class":35,"line":9670},[33,37472,33872],{"class":87},[33,37474,37475],{"class":35,"line":9675},[33,37476,33877],{"class":87},[33,37478,37479],{"class":35,"line":9681},[33,37480,33882],{"class":87},[33,37482,37483,37485,37487,37489,37491,37493,37495],{"class":35,"line":9693},[33,37484,33887],{"class":59},[33,37486,64],{"class":63},[33,37488,33892],{"class":59},[33,37490,33895],{"class":6877},[33,37492,64],{"class":63},[33,37494,33900],{"class":39},[33,37496,157],{"class":59},[33,37498,37499],{"class":35,"line":9705},[33,37500,127],{"emptyLinePlaceholder":126},[33,37502,37503],{"class":35,"line":9717},[33,37504,33911],{"class":87},[33,37506,37507,37509,37511],{"class":35,"line":11375},[33,37508,33916],{"class":59},[33,37510,64],{"class":63},[33,37512,33921],{"class":59},[33,37514,37515],{"class":35,"line":11400},[33,37516,127],{"emptyLinePlaceholder":126},[33,37518,37519],{"class":35,"line":11423},[33,37520,33930],{"class":87},[33,37522,37523,37525,37527],{"class":35,"line":11447},[33,37524,32940],{"class":59},[33,37526,64],{"class":63},[33,37528,33939],{"class":59},[33,37530,37531],{"class":35,"line":11452},[33,37532,33944],{"class":87},[33,37534,37535],{"class":35,"line":11457},[33,37536,33949],{"class":87},[33,37538,37539],{"class":35,"line":11462},[33,37540,33954],{"class":87},[33,37542,37543,37545,37547],{"class":35,"line":11471},[33,37544,33959],{"class":59},[33,37546,64],{"class":63},[33,37548,33964],{"class":59},[33,37550,37551],{"class":35,"line":11476},[33,37552,127],{"emptyLinePlaceholder":126},[33,37554,37555],{"class":35,"line":11482},[33,37556,127],{"emptyLinePlaceholder":126},[33,37558,37559],{"class":35,"line":11503},[33,37560,33977],{"class":87},[33,37562,37563],{"class":35,"line":11509},[33,37564,33982],{"class":87},[33,37566,37567,37569,37571],{"class":35,"line":11523},[33,37568,33987],{"class":59},[33,37570,64],{"class":63},[33,37572,928],{"class":39},[33,37574,37575],{"class":35,"line":11529},[33,37576,33996],{"class":87},[33,37578,37579,37581,37583],{"class":35,"line":11556},[33,37580,34001],{"class":59},[33,37582,64],{"class":63},[33,37584,938],{"class":59},[33,37586,37587],{"class":35,"line":11565},[33,37588,34010],{"class":87},[33,37590,37591,37593,37595],{"class":35,"line":11571},[33,37592,34015],{"class":59},[33,37594,64],{"class":63},[33,37596,938],{"class":59},[33,37598,37599],{"class":35,"line":11579},[33,37600,34024],{"class":87},[33,37602,37603,37605,37607],{"class":35,"line":11584},[33,37604,34029],{"class":59},[33,37606,64],{"class":63},[33,37608,938],{"class":59},[33,37610,37611],{"class":35,"line":18259},[33,37612,34038],{"class":87},[33,37614,37615,37617,37619],{"class":35,"line":18265},[33,37616,34043],{"class":59},[33,37618,64],{"class":63},[33,37620,938],{"class":59},[33,37622,37623],{"class":35,"line":18288},[33,37624,127],{"emptyLinePlaceholder":126},[33,37626,37627],{"class":35,"line":18294},[33,37628,34056],{"class":87},[33,37630,37631,37633,37635],{"class":35,"line":18317},[33,37632,34061],{"class":59},[33,37634,64],{"class":63},[33,37636,34066],{"class":59},[33,37638,37639],{"class":35,"line":18331},[33,37640,127],{"emptyLinePlaceholder":126},[33,37642,37643],{"class":35,"line":18351},[33,37644,127],{"emptyLinePlaceholder":126},[33,37646,37647],{"class":35,"line":18357},[33,37648,34079],{"class":87},[33,37650,37651,37653,37655,37657,37659],{"class":35,"line":18368},[33,37652,4864],{"class":63},[33,37654,34086],{"class":59},[33,37656,27699],{"class":63},[33,37658,34091],{"class":39},[33,37660,34094],{"class":59},[33,37662,37663,37665,37667,37669,37671,37673,37675,37677,37679,37681,37683],{"class":35,"line":18391},[33,37664,583],{"class":39},[33,37666,109],{"class":59},[33,37668,34103],{"class":117},[33,37670,34106],{"class":39},[33,37672,2401],{"class":117},[33,37674,34106],{"class":39},[33,37676,1014],{"class":117},[33,37678,34115],{"class":59},[33,37680,2349],{"class":63},[33,37682,2036],{"class":39},[33,37684,121],{"class":59},[33,37686,37687,37689,37691,37693,37695,37697],{"class":35,"line":18413},[33,37688,583],{"class":39},[33,37690,109],{"class":59},[33,37692,34130],{"class":117},[33,37694,1540],{"class":63},[33,37696,2264],{"class":39},[33,37698,157],{"class":59},[33,37700,37701],{"class":35,"line":18418},[33,37702,127],{"emptyLinePlaceholder":126},[33,37704,37705],{"class":35,"line":18424},[33,37706,34145],{"class":87},[33,37708,37709],{"class":35,"line":18438},[33,37710,34150],{"class":87},[33,37712,37713,37715,37717],{"class":35,"line":18451},[33,37714,34155],{"class":59},[33,37716,64],{"class":63},[33,37718,928],{"class":39},[33,37720,37721],{"class":35,"line":18456},[33,37722,34164],{"class":87},[33,37724,37725,37727,37729],{"class":35,"line":18470},[33,37726,34169],{"class":59},[33,37728,64],{"class":63},[33,37730,923],{"class":39},[33,37732,37733],{"class":35,"line":18475},[33,37734,34178],{"class":87},[33,37736,37737,37739,37741],{"class":35,"line":18481},[33,37738,34183],{"class":59},[33,37740,64],{"class":63},[33,37742,928],{"class":39},[33,37744,37745],{"class":35,"line":18486},[33,37746,34192],{"class":87},[33,37748,37749,37751,37753],{"class":35,"line":18500},[33,37750,34197],{"class":59},[33,37752,64],{"class":63},[33,37754,923],{"class":39},[33,37756,37757],{"class":35,"line":18505},[33,37758,34206],{"class":87},[33,37760,37761,37763,37765],{"class":35,"line":18510},[33,37762,34211],{"class":59},[33,37764,64],{"class":63},[33,37766,923],{"class":39},[33,37768,37769],{"class":35,"line":18524},[33,37770,34220],{"class":87},[33,37772,37773,37775,37777],{"class":35,"line":18536},[33,37774,34225],{"class":59},[33,37776,64],{"class":63},[33,37778,923],{"class":39},[33,37780,37781],{"class":35,"line":18541},[33,37782,34234],{"class":87},[33,37784,37785,37787,37789,37791,37793],{"class":35,"line":18554},[33,37786,5066],{"class":63},[33,37788,33251],{"class":59},[33,37790,27699],{"class":63},[33,37792,33256],{"class":39},[33,37794,34247],{"class":59},[33,37796,37797],{"class":35,"line":18559},[33,37798,34252],{"class":87},[33,37800,37801,37803,37805],{"class":35,"line":18564},[33,37802,34257],{"class":59},[33,37804,64],{"class":63},[33,37806,34262],{"class":59},[33,37808,37809],{"class":35,"line":18569},[33,37810,34267],{"class":87},[33,37812,37813,37815,37817],{"class":35,"line":18582},[33,37814,34272],{"class":59},[33,37816,64],{"class":63},[33,37818,34277],{"class":59},[33,37820,37821],{"class":35,"line":18587},[33,37822,34283],{"class":87},[33,37824,37825],{"class":35,"line":34280},[33,37826,34289],{"class":59},[33,37828,37829],{"class":35,"line":34286},[33,37830,34295],{"class":87},[33,37832,37833],{"class":35,"line":34292},[33,37834,34301],{"class":87},[33,37836,37837,37839,37841],{"class":35,"line":34298},[33,37838,34307],{"class":59},[33,37840,64],{"class":63},[33,37842,34312],{"class":59},[33,37844,37845],{"class":35,"line":34304},[33,37846,34318],{"class":87},[33,37848,37849,37851,37853,37855,37857,37859,37861],{"class":35,"line":34315},[33,37850,34324],{"class":59},[33,37852,64],{"class":63},[33,37854,34329],{"class":59},[33,37856,34332],{"class":6877},[33,37858,64],{"class":63},[33,37860,2036],{"class":39},[33,37862,157],{"class":59},[33,37864,37865],{"class":35,"line":34321},[33,37866,34344],{"class":87},[33,37868,37869,37871,37873],{"class":35,"line":34341},[33,37870,34350],{"class":59},[33,37872,64],{"class":63},[33,37874,34355],{"class":59},[33,37876,37877],{"class":35,"line":34347},[33,37878,34361],{"class":87},[33,37880,37881],{"class":35,"line":34358},[33,37882,34367],{"class":59},[33,37884,37885],{"class":35,"line":34364},[33,37886,34373],{"class":87},[33,37888,37889],{"class":35,"line":34370},[33,37890,34379],{"class":59},[33,37892,37893],{"class":35,"line":34376},[33,37894,34385],{"class":87},[33,37896,37897],{"class":35,"line":34382},[33,37898,34391],{"class":59},[33,37900,37901],{"class":35,"line":34388},[33,37902,34397],{"class":87},[33,37904,37905,37907,37909,37911,37913,37915,37917],{"class":35,"line":34394},[33,37906,34403],{"class":59},[33,37908,11136],{"class":63},[33,37910,34408],{"class":59},[33,37912,1540],{"class":63},[33,37914,34413],{"class":59},[33,37916,2010],{"class":39},[33,37918,157],{"class":59},[33,37920,37921],{"class":35,"line":34400},[33,37922,34423],{"class":87},[33,37924,37925,37927,37929,37931,37933],{"class":35,"line":34420},[33,37926,34429],{"class":59},[33,37928,11136],{"class":63},[33,37930,34434],{"class":59},[33,37932,573],{"class":63},[33,37934,34439],{"class":59},[33,37936,37937],{"class":35,"line":34426},[33,37938,34445],{"class":87},[33,37940,37941,37943,37945,37947,37949],{"class":35,"line":34442},[33,37942,34451],{"class":59},[33,37944,11136],{"class":63},[33,37946,34413],{"class":59},[33,37948,2010],{"class":39},[33,37950,157],{"class":59},[33,37952,37953],{"class":35,"line":34448},[33,37954,34465],{"class":87},[33,37956,37957,37959,37961,37963,37965],{"class":35,"line":34462},[33,37958,5066],{"class":63},[33,37960,34473],{"class":59},[33,37962,27699],{"class":63},[33,37964,33256],{"class":39},[33,37966,34480],{"class":59},[33,37968,37969],{"class":35,"line":34468},[33,37970,34486],{"class":87},[33,37972,37973,37975,37977],{"class":35,"line":34483},[33,37974,34257],{"class":59},[33,37976,64],{"class":63},[33,37978,34262],{"class":59},[33,37980,37981],{"class":35,"line":34489},[33,37982,34501],{"class":87},[33,37984,37985,37987,37989],{"class":35,"line":34498},[33,37986,34272],{"class":59},[33,37988,64],{"class":63},[33,37990,34277],{"class":59},[33,37992,37993],{"class":35,"line":34504},[33,37994,34516],{"class":87},[33,37996,37997],{"class":35,"line":34513},[33,37998,34522],{"class":59},[33,38000,38001],{"class":35,"line":34519},[33,38002,38003],{"class":87},"            # 验证时不计算梯度以节省内存\u002F计算\n",[33,38005,38006,38008],{"class":35,"line":34525},[33,38007,34528],{"class":63},[33,38009,34531],{"class":59},[33,38011,38012],{"class":35,"line":34534},[33,38013,34537],{"class":87},[33,38015,38016,38019,38021],{"class":35,"line":34540},[33,38017,38018],{"class":59},"                output",[33,38020,64],{"class":63},[33,38022,34312],{"class":59},[33,38024,38025],{"class":35,"line":34551},[33,38026,34554],{"class":87},[33,38028,38029,38032,38034,38036,38038,38040,38042],{"class":35,"line":34557},[33,38030,38031],{"class":59},"                pre_lab",[33,38033,64],{"class":63},[33,38035,34329],{"class":59},[33,38037,34332],{"class":6877},[33,38039,64],{"class":63},[33,38041,2036],{"class":39},[33,38043,157],{"class":59},[33,38045,38046],{"class":35,"line":34576},[33,38047,34579],{"class":87},[33,38049,38050,38053,38055],{"class":35,"line":34582},[33,38051,38052],{"class":59},"                val_batch_loss",[33,38054,64],{"class":63},[33,38056,34355],{"class":59},[33,38058,38059],{"class":35,"line":34593},[33,38060,34596],{"class":87},[33,38062,38063,38066,38068,38071,38073,38075,38077],{"class":35,"line":34599},[33,38064,38065],{"class":59},"                val_loss",[33,38067,11136],{"class":63},[33,38069,38070],{"class":59},"val_batch_loss.item()",[33,38072,1540],{"class":63},[33,38074,34413],{"class":59},[33,38076,2010],{"class":39},[33,38078,157],{"class":59},[33,38080,38081,38084,38086,38088,38090],{"class":35,"line":34619},[33,38082,38083],{"class":59},"                val_corrects",[33,38085,11136],{"class":63},[33,38087,34434],{"class":59},[33,38089,573],{"class":63},[33,38091,34439],{"class":59},[33,38093,38094],{"class":35,"line":34635},[33,38095,38096],{"class":87},"            # 当前用于验证的样本数量\n",[33,38098,38099,38102,38104,38106,38108],{"class":35,"line":34641},[33,38100,38101],{"class":59},"            val_num",[33,38103,11136],{"class":63},[33,38105,34413],{"class":59},[33,38107,2010],{"class":39},[33,38109,157],{"class":59},[33,38111,38112],{"class":35,"line":34655},[33,38113,34658],{"class":87},[33,38115,38116],{"class":35,"line":34661},[33,38117,34664],{"class":87},[33,38119,38120,38122,38124],{"class":35,"line":34667},[33,38121,34670],{"class":59},[33,38123,2401],{"class":63},[33,38125,34675],{"class":59},[33,38127,38128],{"class":35,"line":34678},[33,38129,34681],{"class":87},[33,38131,38132],{"class":35,"line":34684},[33,38133,34687],{"class":87},[33,38135,38136,38138,38140],{"class":35,"line":34690},[33,38137,34693],{"class":59},[33,38139,2401],{"class":63},[33,38141,34675],{"class":59},[33,38143,38144],{"class":35,"line":34700},[33,38145,34703],{"class":87},[33,38147,38148,38150,38152],{"class":35,"line":34706},[33,38149,34709],{"class":59},[33,38151,2401],{"class":63},[33,38153,34714],{"class":59},[33,38155,38156],{"class":35,"line":34717},[33,38157,34720],{"class":87},[33,38159,38160,38162,38164],{"class":35,"line":34723},[33,38161,34726],{"class":59},[33,38163,2401],{"class":63},[33,38165,34714],{"class":59},[33,38167,38168],{"class":35,"line":34733},[33,38169,127],{"emptyLinePlaceholder":126},[33,38171,38172],{"class":35,"line":34738},[33,38173,34741],{"class":87},[33,38175,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214],{"class":35,"line":34744},[33,38177,583],{"class":39},[33,38179,109],{"class":59},[33,38181,5255],{"class":117},[33,38183,34106],{"class":39},[33,38185,34755],{"class":117},[33,38187,1005],{"class":39},[33,38189,34760],{"class":63},[33,38191,1011],{"class":39},[33,38193,34765],{"class":117},[33,38195,1005],{"class":39},[33,38197,34760],{"class":63},[33,38199,1011],{"class":39},[33,38201,5255],{"class":117},[33,38203,34776],{"class":59},[33,38205,2349],{"class":63},[33,38207,2036],{"class":39},[33,38209,34783],{"class":59},[33,38211,2349],{"class":63},[33,38213,2036],{"class":39},[33,38215,34790],{"class":59},[33,38217,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256],{"class":35,"line":34793},[33,38219,583],{"class":39},[33,38221,109],{"class":59},[33,38223,5255],{"class":117},[33,38225,34106],{"class":39},[33,38227,34804],{"class":117},[33,38229,1005],{"class":39},[33,38231,34760],{"class":63},[33,38233,1011],{"class":39},[33,38235,34813],{"class":117},[33,38237,1005],{"class":39},[33,38239,34760],{"class":63},[33,38241,1011],{"class":39},[33,38243,5255],{"class":117},[33,38245,34824],{"class":59},[33,38247,2349],{"class":63},[33,38249,2036],{"class":39},[33,38251,34831],{"class":59},[33,38253,2349],{"class":63},[33,38255,2036],{"class":39},[33,38257,34790],{"class":59},[33,38259,38260],{"class":35,"line":34840},[33,38261,127],{"emptyLinePlaceholder":126},[33,38263,38264],{"class":35,"line":34845},[33,38265,34848],{"class":87},[33,38267,38268,38270,38272,38274,38276,38278,38280],{"class":35,"line":34851},[33,38269,4163],{"class":63},[33,38271,34856],{"class":59},[33,38273,2349],{"class":63},[33,38275,2036],{"class":39},[33,38277,2756],{"class":59},[33,38279,2775],{"class":63},[33,38281,34867],{"class":59},[33,38283,38284],{"class":35,"line":34870},[33,38285,34873],{"class":87},[33,38287,38288,38290,38292,38294,38296,38298,38300],{"class":35,"line":34876},[33,38289,34879],{"class":59},[33,38291,1863],{"class":39},[33,38293,64],{"class":63},[33,38295,34886],{"class":59},[33,38297,2349],{"class":63},[33,38299,2036],{"class":39},[33,38301,34893],{"class":59},[33,38303,38304],{"class":35,"line":34896},[33,38305,34899],{"class":87},[33,38307,38308],{"class":35,"line":34902},[33,38309,34905],{"class":87},[33,38311,38312,38314,38316],{"class":35,"line":34908},[33,38313,34911],{"class":59},[33,38315,64],{"class":63},[33,38317,33964],{"class":59},[33,38319,38320],{"class":35,"line":34918},[33,38321,127],{"emptyLinePlaceholder":126},[33,38323,38324],{"class":35,"line":34923},[33,38325,34926],{"class":87},[33,38327,38328,38330,38332,38334,38336],{"class":35,"line":34929},[33,38329,34932],{"class":59},[33,38331,64],{"class":63},[33,38333,34937],{"class":59},[33,38335,2349],{"class":63},[33,38337,34942],{"class":59},[33,38339,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374],{"class":35,"line":34945},[33,38341,583],{"class":39},[33,38343,109],{"class":59},[33,38345,34952],{"class":117},[33,38347,1005],{"class":39},[33,38349,34957],{"class":63},[33,38351,1011],{"class":39},[33,38353,2361],{"class":117},[33,38355,1005],{"class":39},[33,38357,34957],{"class":63},[33,38359,1011],{"class":39},[33,38361,34970],{"class":117},[33,38363,34973],{"class":59},[33,38365,34976],{"class":63},[33,38367,2723],{"class":39},[33,38369,34981],{"class":59},[33,38371,2146],{"class":63},[33,38373,2723],{"class":39},[33,38375,121],{"class":59},[33,38377,38378],{"class":35,"line":34990},[33,38379,38380],{"class":87},"    # 选择最优参数并保存\n",[33,38382,38383],{"class":35,"line":34996},[33,38384,38385],{"class":87},"    # 保存最佳模型权重字典\n",[33,38387,38388,38391,38393],{"class":35,"line":35002},[33,38389,38390],{"class":59},"    torch.save(best_model_wts,",[33,38392,35014],{"class":117},[33,38394,157],{"class":59},[33,38396,38397],{"class":35,"line":35008},[33,38398,35034],{"class":87},[33,38400,38401,38403,38405,38407,38409,38411],{"class":35,"line":35019},[33,38402,35040],{"class":59},[33,38404,64],{"class":63},[33,38406,35045],{"class":59},[33,38408,35048],{"class":6877},[33,38410,64],{"class":63},[33,38412,3228],{"class":59},[33,38414,38415,38417,38419,38421],{"class":35,"line":35025},[33,38416,35058],{"class":117},[33,38418,2676],{"class":59},[33,38420,35063],{"class":39},[33,38422,35066],{"class":59},[33,38424,38425,38427],{"class":35,"line":35031},[33,38426,35072],{"class":117},[33,38428,35075],{"class":59},[33,38430,38431,38433],{"class":35,"line":35037},[33,38432,35081],{"class":117},[33,38434,35084],{"class":59},[33,38436,38437,38439],{"class":35,"line":35055},[33,38438,35090],{"class":117},[33,38440,35093],{"class":59},[33,38442,38443,38445],{"class":35,"line":35069},[33,38444,35099],{"class":117},[33,38446,35102],{"class":59},[33,38448,38449],{"class":35,"line":35078},[33,38450,35108],{"class":59},[33,38452,38453],{"class":35,"line":35087},[33,38454,35114],{"class":87},[33,38456,38457,38459],{"class":35,"line":35096},[33,38458,5752],{"class":63},[33,38460,35122],{"class":59},[33,38462,38463],{"class":35,"line":35105},[33,38464,127],{"emptyLinePlaceholder":126},[33,38466,38467],{"class":35,"line":35111},[33,38468,35133],{"class":87},[33,38470,38471,38473,38475],{"class":35,"line":35117},[33,38472,33597],{"class":63},[33,38474,35141],{"class":3632},[33,38476,35144],{"class":59},[33,38478,38479],{"class":35,"line":35125},[33,38480,35150],{"class":87},[33,38482,38483,38485,38487,38489,38491,38493,38495,38497],{"class":35,"line":35130},[33,38484,35156],{"class":59},[33,38486,33343],{"class":6877},[33,38488,64],{"class":63},[33,38490,109],{"class":59},[33,38492,2315],{"class":39},[33,38494,2196],{"class":59},[33,38496,2111],{"class":39},[33,38498,121],{"class":59},[33,38500,38501],{"class":35,"line":35136},[33,38502,35176],{"class":87},[33,38504,38505],{"class":35,"line":35147},[33,38506,35182],{"class":87},[33,38508,38509],{"class":35,"line":35153},[33,38510,35188],{"class":87},[33,38512,38513,38515,38517,38519,38521,38523,38525],{"class":35,"line":35173},[33,38514,33377],{"class":59},[33,38516,2036],{"class":39},[33,38518,2196],{"class":59},[33,38520,1897],{"class":39},[33,38522,2196],{"class":59},[33,38524,2036],{"class":39},[33,38526,157],{"class":59},[33,38528,38529],{"class":35,"line":35179},[33,38530,35211],{"class":87},[33,38532,38533],{"class":35,"line":35185},[33,38534,35217],{"class":87},[33,38536,38537],{"class":35,"line":35191},[33,38538,35223],{"class":87},[33,38540,38541],{"class":35,"line":35208},[33,38542,35229],{"class":87},[33,38544,38545],{"class":35,"line":35214},[33,38546,35235],{"class":87},[33,38548,38549,38551,38553,38555,38557,38559,38561,38563,38565],{"class":35,"line":35220},[33,38550,35241],{"class":59},[33,38552,35244],{"class":117},[33,38554,35247],{"class":59},[33,38556,35250],{"class":117},[33,38558,2196],{"class":59},[33,38560,35255],{"class":6877},[33,38562,64],{"class":63},[33,38564,35260],{"class":117},[33,38566,157],{"class":59},[33,38568,38569,38571,38573,38575,38577,38579,38581,38583,38585],{"class":35,"line":35226},[33,38570,35241],{"class":59},[33,38572,35244],{"class":117},[33,38574,35272],{"class":59},[33,38576,35275],{"class":117},[33,38578,2196],{"class":59},[33,38580,35255],{"class":6877},[33,38582,64],{"class":63},[33,38584,35284],{"class":117},[33,38586,157],{"class":59},[33,38588,38589],{"class":35,"line":35232},[33,38590,35292],{"class":87},[33,38592,38593],{"class":35,"line":35238},[33,38594,35298],{"class":59},[33,38596,38597],{"class":35,"line":35265},[33,38598,35304],{"class":87},[33,38600,38601,38603,38605],{"class":35,"line":35289},[33,38602,35310],{"class":59},[33,38604,35313],{"class":117},[33,38606,157],{"class":59},[33,38608,38609,38611,38613],{"class":35,"line":35295},[33,38610,35321],{"class":59},[33,38612,35324],{"class":117},[33,38614,157],{"class":59},[33,38616,38617],{"class":35,"line":35301},[33,38618,35332],{"class":87},[33,38620,38621,38623,38625,38627,38629,38631,38633],{"class":35,"line":35307},[33,38622,33377],{"class":59},[33,38624,2036],{"class":39},[33,38626,2196],{"class":59},[33,38628,1897],{"class":39},[33,38630,2196],{"class":59},[33,38632,1897],{"class":39},[33,38634,157],{"class":59},[33,38636,38637,38639,38641,38643,38645,38647,38649,38651,38653],{"class":35,"line":35318},[33,38638,35241],{"class":59},[33,38640,35244],{"class":117},[33,38642,35359],{"class":59},[33,38644,35250],{"class":117},[33,38646,2196],{"class":59},[33,38648,35255],{"class":6877},[33,38650,64],{"class":63},[33,38652,35370],{"class":117},[33,38654,157],{"class":59},[33,38656,38657,38659,38661,38663,38665,38667,38669,38671,38673],{"class":35,"line":35329},[33,38658,35241],{"class":59},[33,38660,35244],{"class":117},[33,38662,35382],{"class":59},[33,38664,35275],{"class":117},[33,38666,2196],{"class":59},[33,38668,35255],{"class":6877},[33,38670,64],{"class":63},[33,38672,35393],{"class":117},[33,38674,157],{"class":59},[33,38676,38677],{"class":35,"line":35335},[33,38678,35401],{"class":87},[33,38680,38681],{"class":35,"line":35352},[33,38682,35298],{"class":59},[33,38684,38685,38687,38689],{"class":35,"line":35375},[33,38686,35310],{"class":59},[33,38688,35244],{"class":117},[33,38690,157],{"class":59},[33,38692,38693,38695,38697],{"class":35,"line":35398},[33,38694,35321],{"class":59},[33,38696,35423],{"class":117},[33,38698,157],{"class":59},[33,38700,38701],{"class":35,"line":35404},[33,38702,35431],{"class":59},[33,38704,38705],{"class":35,"line":35409},[33,38706,127],{"emptyLinePlaceholder":126},[33,38708,38709],{"class":35,"line":35418},[33,38710,35442],{"class":87},[33,38712,38713,38715,38717,38719,38721],{"class":35,"line":35428},[33,38714,133],{"class":63},[33,38716,32871],{"class":39},[33,38718,573],{"class":63},[33,38720,32876],{"class":117},[33,38722,143],{"class":59},[33,38724,38725],{"class":35,"line":35434},[33,38726,35461],{"class":87},[33,38728,38729,38732,38734],{"class":35,"line":35439},[33,38730,38731],{"class":59},"    AlexNet",[33,38733,64],{"class":63},[33,38735,38736],{"class":59},"AlexNet()\n",[33,38738,38739,38741,38743],{"class":35,"line":35445},[33,38740,35478],{"class":59},[33,38742,64],{"class":63},[33,38744,35483],{"class":59},[33,38746,38747,38749,38751,38754,38756,38758,38760],{"class":35,"line":35458},[33,38748,35040],{"class":59},[33,38750,64],{"class":63},[33,38752,38753],{"class":59},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[33,38755,35496],{"class":6877},[33,38757,64],{"class":63},[33,38759,2517],{"class":39},[33,38761,157],{"class":59},[33,38763,38764],{"class":35,"line":35464},[33,38765,35508],{"class":59},[162,38767,38768],{"start":130},[165,38769,35521],{},[23,38771,38773],{"className":25,"code":38772,"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,38774,38775,38781,38791,38801,38811,38815,38825,38835,38846,38850,38854,38858,38866,38882,38892,38908,38918,38932,38936,38946,38956,38966,38972,38976,38980,38988,38992,39008,39016,39020,39024,39032,39040,39044,39048,39052,39056,39062,39066,39076,39084,39092,39096,39100,39104,39112,39116,39132,39136,39140,39144,39156,39160,39172,39176,39180,39192,39196,39206,39210,39214,39226,39230,39238,39242,39246,39254,39258,39266,39270,39274,39278,39282,39286,39302,39310,39314,39318,39366,39372,39376,39386,39394,39402,39406,39410,39414,39418,39426,39430,39446,39450,39458,39466],{"__ignoreMap":28},[33,38776,38777,38779],{"class":35,"line":36},[33,38778,32045],{"class":63},[33,38780,32048],{"class":59},[33,38782,38783,38785,38787,38789],{"class":35,"line":43},[33,38784,32045],{"class":63},[33,38786,33065],{"class":59},[33,38788,33033],{"class":63},[33,38790,33070],{"class":59},[33,38792,38793,38795,38797,38799],{"class":35,"line":130},[33,38794,32388],{"class":63},[33,38796,35549],{"class":59},[33,38798,32045],{"class":63},[33,38800,35554],{"class":59},[33,38802,38803,38805,38807,38809],{"class":35,"line":146},[33,38804,32388],{"class":63},[33,38806,33048],{"class":59},[33,38808,32045],{"class":63},[33,38810,33053],{"class":59},[33,38812,38813],{"class":35,"line":267},[33,38814,35569],{"class":87},[33,38816,38817,38819,38821,38823],{"class":35,"line":275},[33,38818,32388],{"class":63},[33,38820,33018],{"class":59},[33,38822,32045],{"class":63},[33,38824,33023],{"class":59},[33,38826,38827,38829,38831,38833],{"class":35,"line":392},[33,38828,32388],{"class":63},[33,38830,33564],{"class":59},[33,38832,32045],{"class":63},[33,38834,37204],{"class":59},[33,38836,38837,38839,38842,38844],{"class":35,"line":406},[33,38838,32388],{"class":63},[33,38840,38841],{"class":59}," 练习.AlexNet.model ",[33,38843,32045],{"class":63},[33,38845,37204],{"class":59},[33,38847,38848],{"class":35,"line":418},[33,38849,127],{"emptyLinePlaceholder":126},[33,38851,38852],{"class":35,"line":425},[33,38853,127],{"emptyLinePlaceholder":126},[33,38855,38856],{"class":35,"line":1147},[33,38857,35598],{"class":87},[33,38859,38860,38862,38864],{"class":35,"line":1329},[33,38861,33597],{"class":63},[33,38863,35605],{"class":3632},[33,38865,33603],{"class":59},[33,38867,38868,38870,38872,38874,38876,38878,38880],{"class":35,"line":1341},[33,38869,35612],{"class":59},[33,38871,64],{"class":63},[33,38873,33105],{"class":59},[33,38875,33108],{"class":6877},[33,38877,64],{"class":63},[33,38879,33113],{"class":117},[33,38881,33116],{"class":59},[33,38883,38884,38886,38888,38890],{"class":35,"line":1348},[33,38885,35629],{"class":6877},[33,38887,64],{"class":63},[33,38889,35634],{"class":39},[33,38891,33116],{"class":59},[33,38893,38894,38896,38898,38900,38902,38904,38906],{"class":35,"line":1529},[33,38895,35641],{"class":6877},[33,38897,64],{"class":63},[33,38899,33143],{"class":59},[33,38901,33146],{"class":6877},[33,38903,64],{"class":63},[33,38905,37096],{"class":39},[33,38907,33154],{"class":59},[33,38909,38910,38912,38914,38916],{"class":35,"line":1546},[33,38911,35658],{"class":6877},[33,38913,64],{"class":63},[33,38915,33126],{"class":39},[33,38917,157],{"class":59},[33,38919,38920,38922,38924,38926,38928,38930],{"class":35,"line":1551},[33,38921,35669],{"class":59},[33,38923,64],{"class":63},[33,38925,33184],{"class":59},[33,38927,33187],{"class":6877},[33,38929,64],{"class":63},[33,38931,35680],{"class":59},[33,38933,38934],{"class":35,"line":1566},[33,38935,35685],{"class":87},[33,38937,38938,38940,38942,38944],{"class":35,"line":1578},[33,38939,35690],{"class":6877},[33,38941,64],{"class":63},[33,38943,2036],{"class":39},[33,38945,33116],{"class":59},[33,38947,38948,38950,38952,38954],{"class":35,"line":1583},[33,38949,35701],{"class":6877},[33,38951,64],{"class":63},[33,38953,33126],{"class":39},[33,38955,33116],{"class":59},[33,38957,38958,38960,38962,38964],{"class":35,"line":3369},[33,38959,35712],{"class":6877},[33,38961,64],{"class":63},[33,38963,2010],{"class":39},[33,38965,157],{"class":59},[33,38967,38968,38970],{"class":35,"line":3396},[33,38969,5752],{"class":63},[33,38971,35725],{"class":59},[33,38973,38974],{"class":35,"line":3401},[33,38975,127],{"emptyLinePlaceholder":126},[33,38977,38978],{"class":35,"line":3418},[33,38979,35734],{"class":87},[33,38981,38982,38984,38986],{"class":35,"line":3423},[33,38983,33597],{"class":63},[33,38985,35741],{"class":3632},[33,38987,35744],{"class":59},[33,38989,38990],{"class":35,"line":3428},[33,38991,35749],{"class":87},[33,38993,38994,38996,38998,39000,39002,39004,39006],{"class":35,"line":3433},[33,38995,32888],{"class":59},[33,38997,64],{"class":63},[33,38999,32895],{"class":117},[33,39001,3374],{"class":63},[33,39003,32900],{"class":59},[33,39005,270],{"class":63},[33,39007,35766],{"class":117},[33,39009,39010,39012,39014],{"class":35,"line":3447},[33,39011,32940],{"class":59},[33,39013,64],{"class":63},[33,39015,33939],{"class":59},[33,39017,39018],{"class":35,"line":3452},[33,39019,127],{"emptyLinePlaceholder":126},[33,39021,39022],{"class":35,"line":4243},[33,39023,35783],{"class":87},[33,39025,39026,39028,39030],{"class":35,"line":4257},[33,39027,35788],{"class":59},[33,39029,64],{"class":63},[33,39031,928],{"class":39},[33,39033,39034,39036,39038],{"class":35,"line":4265},[33,39035,35797],{"class":59},[33,39037,64],{"class":63},[33,39039,923],{"class":39},[33,39041,39042],{"class":35,"line":4270},[33,39043,127],{"emptyLinePlaceholder":126},[33,39045,39046],{"class":35,"line":4276},[33,39047,35810],{"class":87},[33,39049,39050],{"class":35,"line":4282},[33,39051,35815],{"class":87},[33,39053,39054],{"class":35,"line":4287},[33,39055,35820],{"class":87},[33,39057,39058,39060],{"class":35,"line":9608},[33,39059,35825],{"class":63},[33,39061,34531],{"class":59},[33,39063,39064],{"class":35,"line":9632},[33,39065,35832],{"class":87},[33,39067,39068,39070,39072,39074],{"class":35,"line":9637},[33,39069,5066],{"class":63},[33,39071,35839],{"class":59},[33,39073,27699],{"class":63},[33,39075,35844],{"class":59},[33,39077,39078,39080,39082],{"class":35,"line":9643},[33,39079,35849],{"class":59},[33,39081,64],{"class":63},[33,39083,35854],{"class":59},[33,39085,39086,39088,39090],{"class":35,"line":9670},[33,39087,35859],{"class":59},[33,39089,64],{"class":63},[33,39091,35864],{"class":59},[33,39093,39094],{"class":35,"line":9675},[33,39095,35869],{"class":87},[33,39097,39098],{"class":35,"line":9681},[33,39099,34522],{"class":59},[33,39101,39102],{"class":35,"line":9693},[33,39103,35878],{"class":87},[33,39105,39106,39108,39110],{"class":35,"line":9705},[33,39107,34307],{"class":59},[33,39109,64],{"class":63},[33,39111,35887],{"class":59},[33,39113,39114],{"class":35,"line":9717},[33,39115,35892],{"class":87},[33,39117,39118,39120,39122,39124,39126,39128,39130],{"class":35,"line":11375},[33,39119,34324],{"class":59},[33,39121,64],{"class":63},[33,39123,34329],{"class":59},[33,39125,34332],{"class":6877},[33,39127,64],{"class":63},[33,39129,2036],{"class":39},[33,39131,157],{"class":59},[33,39133,39134],{"class":35,"line":11400},[33,39135,35913],{"class":87},[33,39137,39138],{"class":35,"line":11423},[33,39139,35918],{"class":87},[33,39141,39142],{"class":35,"line":11447},[33,39143,35923],{"class":87},[33,39145,39146,39148,39150,39152,39154],{"class":35,"line":11452},[33,39147,35928],{"class":59},[33,39149,11136],{"class":63},[33,39151,34434],{"class":59},[33,39153,573],{"class":63},[33,39155,35937],{"class":59},[33,39157,39158],{"class":35,"line":11457},[33,39159,35942],{"class":87},[33,39161,39162,39164,39166,39168,39170],{"class":35,"line":11462},[33,39163,35947],{"class":59},[33,39165,11136],{"class":63},[33,39167,35952],{"class":59},[33,39169,2010],{"class":39},[33,39171,157],{"class":59},[33,39173,39174],{"class":35,"line":11471},[33,39175,127],{"emptyLinePlaceholder":126},[33,39177,39178],{"class":35,"line":11476},[33,39179,35965],{"class":87},[33,39181,39182,39184,39186,39188,39190],{"class":35,"line":11482},[33,39183,35970],{"class":59},[33,39185,64],{"class":63},[33,39187,35975],{"class":59},[33,39189,2401],{"class":63},[33,39191,35980],{"class":59},[33,39193,39194],{"class":35,"line":11503},[33,39195,35985],{"class":87},[33,39197,39198,39200,39202,39204],{"class":35,"line":11509},[33,39199,583],{"class":39},[33,39201,109],{"class":59},[33,39203,35994],{"class":117},[33,39205,35997],{"class":59},[33,39207,39208],{"class":35,"line":11523},[33,39209,127],{"emptyLinePlaceholder":126},[33,39211,39212],{"class":35,"line":11529},[33,39213,36006],{"class":87},[33,39215,39216,39218,39220,39222,39224],{"class":35,"line":11556},[33,39217,133],{"class":63},[33,39219,32871],{"class":39},[33,39221,573],{"class":63},[33,39223,32876],{"class":117},[33,39225,143],{"class":59},[33,39227,39228],{"class":35,"line":11565},[33,39229,36023],{"class":87},[33,39231,39232,39234,39236],{"class":35,"line":11571},[33,39233,32940],{"class":59},[33,39235,64],{"class":63},[33,39237,38736],{"class":59},[33,39239,39240],{"class":35,"line":11579},[33,39241,36036],{"class":87},[33,39243,39244],{"class":35,"line":11584},[33,39245,36041],{"class":87},[33,39247,39248,39250,39252],{"class":35,"line":18259},[33,39249,36046],{"class":59},[33,39251,36049],{"class":117},[33,39253,121],{"class":59},[33,39255,39256],{"class":35,"line":18265},[33,39257,36056],{"class":87},[33,39259,39260,39262,39264],{"class":35,"line":18288},[33,39261,35669],{"class":59},[33,39263,64],{"class":63},[33,39265,36065],{"class":59},[33,39267,39268],{"class":35,"line":18294},[33,39269,36070],{"class":87},[33,39271,39272],{"class":35,"line":18317},[33,39273,36075],{"class":59},[33,39275,39276],{"class":35,"line":18331},[33,39277,127],{"emptyLinePlaceholder":126},[33,39279,39280],{"class":35,"line":18351},[33,39281,36084],{"class":87},[33,39283,39284],{"class":35,"line":18357},[33,39285,36089],{"class":87},[33,39287,39288,39290,39292,39294,39296,39298,39300],{"class":35,"line":18368},[33,39289,32888],{"class":59},[33,39291,64],{"class":63},[33,39293,32895],{"class":117},[33,39295,3374],{"class":63},[33,39297,32900],{"class":59},[33,39299,270],{"class":63},[33,39301,35766],{"class":117},[33,39303,39304,39306,39308],{"class":35,"line":18391},[33,39305,32940],{"class":59},[33,39307,64],{"class":63},[33,39309,33939],{"class":59},[33,39311,39312],{"class":35,"line":18413},[33,39313,36118],{"class":87},[33,39315,39316],{"class":35,"line":18418},[33,39317,36123],{"class":87},[33,39319,39320,39322,39324,39326,39328,39330,39332,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358,39360,39362,39364],{"class":35,"line":18424},[33,39321,36128],{"class":59},[33,39323,64],{"class":63},[33,39325,2707],{"class":59},[33,39327,36135],{"class":117},[33,39329,2196],{"class":59},[33,39331,36140],{"class":117},[33,39333,2196],{"class":59},[33,39335,36145],{"class":117},[33,39337,2196],{"class":59},[33,39339,36150],{"class":117},[33,39341,2196],{"class":59},[33,39343,36155],{"class":117},[33,39345,2196],{"class":59},[33,39347,36160],{"class":117},[33,39349,2196],{"class":59},[33,39351,36165],{"class":117},[33,39353,2196],{"class":59},[33,39355,36170],{"class":117},[33,39357,2196],{"class":59},[33,39359,36175],{"class":117},[33,39361,2196],{"class":59},[33,39363,36180],{"class":117},[33,39365,34893],{"class":59},[33,39367,39368,39370],{"class":35,"line":18438},[33,39369,35825],{"class":63},[33,39371,34531],{"class":59},[33,39373,39374],{"class":35,"line":18451},[33,39375,36193],{"class":87},[33,39377,39378,39380,39382,39384],{"class":35,"line":18456},[33,39379,5066],{"class":63},[33,39381,36200],{"class":59},[33,39383,27699],{"class":63},[33,39385,35844],{"class":59},[33,39387,39388,39390,39392],{"class":35,"line":18470},[33,39389,34257],{"class":59},[33,39391,64],{"class":63},[33,39393,34262],{"class":59},[33,39395,39396,39398,39400],{"class":35,"line":18475},[33,39397,34272],{"class":59},[33,39399,64],{"class":63},[33,39401,34277],{"class":59},[33,39403,39404],{"class":35,"line":18481},[33,39405,127],{"emptyLinePlaceholder":126},[33,39407,39408],{"class":35,"line":18486},[33,39409,36229],{"class":87},[33,39411,39412],{"class":35,"line":18500},[33,39413,34522],{"class":59},[33,39415,39416],{"class":35,"line":18505},[33,39417,36238],{"class":87},[33,39419,39420,39422,39424],{"class":35,"line":18510},[33,39421,34307],{"class":59},[33,39423,64],{"class":63},[33,39425,34312],{"class":59},[33,39427,39428],{"class":35,"line":18524},[33,39429,36251],{"class":87},[33,39431,39432,39434,39436,39438,39440,39442,39444],{"class":35,"line":18536},[33,39433,34324],{"class":59},[33,39435,64],{"class":63},[33,39437,34329],{"class":59},[33,39439,34332],{"class":6877},[33,39441,64],{"class":63},[33,39443,2036],{"class":39},[33,39445,157],{"class":59},[33,39447,39448],{"class":35,"line":18541},[33,39449,36272],{"class":87},[33,39451,39452,39454,39456],{"class":35,"line":18554},[33,39453,36277],{"class":59},[33,39455,64],{"class":63},[33,39457,36282],{"class":59},[33,39459,39460,39462,39464],{"class":35,"line":18559},[33,39461,36287],{"class":59},[33,39463,64],{"class":63},[33,39465,36292],{"class":59},[33,39467,39468,39470,39472,39474,39476,39478,39480,39482],{"class":35,"line":18564},[33,39469,36297],{"class":39},[33,39471,109],{"class":59},[33,39473,36302],{"class":117},[33,39475,36305],{"class":59},[33,39477,36308],{"class":117},[33,39479,2196],{"class":59},[33,39481,36313],{"class":117},[33,39483,36316],{"class":59},[633,39485,39487],{"id":39486},"_22vgg","2.2.VGG",[23653,39489,39491],{"id":39490},"_221原理","2.2.1.原理",[19,39493,39494],{},[3145,39495],{"alt":28,"src":39496},"\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,39498,39499],{},[3145,39500],{"alt":28,"src":39501},"\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,39503,39504],{},[3145,39505],{"alt":28,"src":39506},"\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,39508,39509],{},"参数详细描述：",[19,39511,39512],{},[3145,39513],{"alt":28,"src":39514},"\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,39516,39517],{},[3145,39518],{"alt":28,"src":39519},"\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,39521,39522],{},[3145,39523],{"alt":28,"src":39524},"\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,39526,39527],{},[3145,39528],{"alt":28,"src":39529},"\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,39531,39532],{},[3145,39533],{"alt":28,"src":39534},"\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",[23653,39536,39538],{"id":39537},"_222代码实现","2.2.2.代码实现",[162,39540,39541],{},[165,39542,39543],{},"网络搭建",[23,39545,39547],{"className":25,"code":39546,"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,39548,39549,39555,39567,39577,39587,39591,39608,39616,39635,39640,39645,39657,39695,39700,39736,39740,39769,39774,39779,39790,39826,39830,39866,39870,39898,39902,39907,39918,39954,39958,39994,39998,40034,40038,40066,40070,40075,40086,40123,40127,40163,40167,40203,40207,40235,40239,40244,40255,40291,40295,40331,40335,40371,40375,40403,40407,40412,40423,40428,40433,40438,40459,40463,40475,40479,40491,40495,40499,40504,40509,40524,40529,40539,40544,40559,40564,40582,40587,40596,40601,40611,40616,40621,40635,40640,40654,40662,40666,40670,40678,40689,40700,40711,40722,40733,40744,40750,40754,40759,40772,40792,40798,40807],{"__ignoreMap":28},[33,39550,39551,39553],{"class":35,"line":36},[33,39552,32045],{"class":63},[33,39554,32048],{"class":59},[33,39556,39557,39559,39562,39564],{"class":35,"line":43},[33,39558,32388],{"class":63},[33,39560,39561],{"class":59}," sympy.core.sympify ",[33,39563,32045],{"class":63},[33,39565,39566],{"class":59}," kernS\n",[33,39568,39569,39571,39573,39575],{"class":35,"line":130},[33,39570,32388],{"class":63},[33,39572,32391],{"class":59},[33,39574,32045],{"class":63},[33,39576,32396],{"class":59},[33,39578,39579,39581,39583,39585],{"class":35,"line":146},[33,39580,32388],{"class":63},[33,39582,32408],{"class":59},[33,39584,32045],{"class":63},[33,39586,32413],{"class":59},[33,39588,39589],{"class":35,"line":267},[33,39590,127],{"emptyLinePlaceholder":126},[33,39592,39593,39595,39598,39600,39602,39604,39606],{"class":35,"line":275},[33,39594,16352],{"class":63},[33,39596,39597],{"class":3632}," VGG16",[33,39599,109],{"class":59},[33,39601,32429],{"class":3632},[33,39603,2375],{"class":59},[33,39605,32434],{"class":3632},[33,39607,32437],{"class":59},[33,39609,39610,39612,39614],{"class":35,"line":392},[33,39611,32452],{"class":63},[33,39613,32455],{"class":39},[33,39615,32458],{"class":59},[33,39617,39618,39620,39622,39625,39627,39629,39631,39633],{"class":35,"line":406},[33,39619,32468],{"class":39},[33,39621,109],{"class":59},[33,39623,39624],{"class":39},"VGG16",[33,39626,14093],{"class":59},[33,39628,32474],{"class":39},[33,39630,32477],{"class":59},[33,39632,32480],{"class":39},[33,39634,943],{"class":59},[33,39636,39637],{"class":35,"line":418},[33,39638,39639],{"class":87},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[33,39641,39642],{"class":35,"line":425},[33,39643,39644],{"class":87},"        # 这里用的是灰度图\n",[33,39646,39647,39649,39652,39654],{"class":35,"line":1147},[33,39648,32496],{"class":39},[33,39650,39651],{"class":59},".block1",[33,39653,64],{"class":63},[33,39655,39656],{"class":59},"nn.Sequential(\n",[33,39658,39659,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682,39684,39686,39688,39690,39692],{"class":35,"line":1329},[33,39660,39661],{"class":59},"            nn.Conv2d(",[33,39663,32507],{"class":6877},[33,39665,64],{"class":63},[33,39667,2036],{"class":39},[33,39669,2196],{"class":59},[33,39671,32516],{"class":6877},[33,39673,64],{"class":63},[33,39675,2022],{"class":39},[33,39677,2196],{"class":59},[33,39679,32525],{"class":6877},[33,39681,64],{"class":63},[33,39683,1891],{"class":39},[33,39685,2196],{"class":59},[33,39687,32534],{"class":6877},[33,39689,64],{"class":63},[33,39691,2036],{"class":39},[33,39693,39694],{"class":59},"),\n",[33,39696,39697],{"class":35,"line":1341},[33,39698,39699],{"class":59},"            nn.ReLU(),\n",[33,39701,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722,39724,39726,39728,39730,39732,39734],{"class":35,"line":1348},[33,39703,39661],{"class":59},[33,39705,32507],{"class":6877},[33,39707,64],{"class":63},[33,39709,2022],{"class":39},[33,39711,2196],{"class":59},[33,39713,32516],{"class":6877},[33,39715,64],{"class":63},[33,39717,2022],{"class":39},[33,39719,2196],{"class":59},[33,39721,32525],{"class":6877},[33,39723,64],{"class":63},[33,39725,1891],{"class":39},[33,39727,2196],{"class":59},[33,39729,32534],{"class":6877},[33,39731,64],{"class":63},[33,39733,2036],{"class":39},[33,39735,39694],{"class":59},[33,39737,39738],{"class":35,"line":1529},[33,39739,39699],{"class":59},[33,39741,39742,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767],{"class":35,"line":1546},[33,39743,39744],{"class":59},"            nn.MaxPool2d(",[33,39746,32525],{"class":6877},[33,39748,64],{"class":63},[33,39750,1897],{"class":39},[33,39752,2196],{"class":59},[33,39754,32580],{"class":6877},[33,39756,64],{"class":63},[33,39758,1897],{"class":39},[33,39760,2196],{"class":59},[33,39762,32534],{"class":6877},[33,39764,64],{"class":63},[33,39766,2010],{"class":39},[33,39768,157],{"class":59},[33,39770,39771],{"class":35,"line":1551},[33,39772,39773],{"class":59},"        )\n",[33,39775,39776],{"class":35,"line":1566},[33,39777,39778],{"class":87},"        # 第二层\n",[33,39780,39781,39783,39786,39788],{"class":35,"line":1578},[33,39782,32496],{"class":39},[33,39784,39785],{"class":59},".block2",[33,39787,64],{"class":63},[33,39789,39656],{"class":59},[33,39791,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818,39820,39822,39824],{"class":35,"line":1583},[33,39793,39661],{"class":59},[33,39795,32507],{"class":6877},[33,39797,64],{"class":63},[33,39799,2022],{"class":39},[33,39801,2196],{"class":59},[33,39803,32516],{"class":6877},[33,39805,64],{"class":63},[33,39807,33720],{"class":39},[33,39809,2196],{"class":59},[33,39811,32525],{"class":6877},[33,39813,64],{"class":63},[33,39815,1891],{"class":39},[33,39817,2196],{"class":59},[33,39819,32534],{"class":6877},[33,39821,64],{"class":63},[33,39823,2036],{"class":39},[33,39825,39694],{"class":59},[33,39827,39828],{"class":35,"line":3369},[33,39829,39699],{"class":59},[33,39831,39832,39834,39836,39838,39840,39842,39844,39846,39848,39850,39852,39854,39856,39858,39860,39862,39864],{"class":35,"line":3396},[33,39833,39661],{"class":59},[33,39835,32507],{"class":6877},[33,39837,64],{"class":63},[33,39839,33720],{"class":39},[33,39841,2196],{"class":59},[33,39843,32516],{"class":6877},[33,39845,64],{"class":63},[33,39847,33720],{"class":39},[33,39849,2196],{"class":59},[33,39851,32525],{"class":6877},[33,39853,64],{"class":63},[33,39855,1891],{"class":39},[33,39857,2196],{"class":59},[33,39859,32534],{"class":6877},[33,39861,64],{"class":63},[33,39863,2036],{"class":39},[33,39865,39694],{"class":59},[33,39867,39868],{"class":35,"line":3401},[33,39869,39699],{"class":59},[33,39871,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896],{"class":35,"line":3418},[33,39873,39744],{"class":59},[33,39875,32525],{"class":6877},[33,39877,64],{"class":63},[33,39879,1897],{"class":39},[33,39881,2196],{"class":59},[33,39883,32580],{"class":6877},[33,39885,64],{"class":63},[33,39887,1897],{"class":39},[33,39889,2196],{"class":59},[33,39891,32534],{"class":6877},[33,39893,64],{"class":63},[33,39895,2010],{"class":39},[33,39897,157],{"class":59},[33,39899,39900],{"class":35,"line":3423},[33,39901,39773],{"class":59},[33,39903,39904],{"class":35,"line":3428},[33,39905,39906],{"class":87},"        # 第三层\n",[33,39908,39909,39911,39914,39916],{"class":35,"line":3433},[33,39910,32496],{"class":39},[33,39912,39913],{"class":59},".block3",[33,39915,64],{"class":63},[33,39917,39656],{"class":59},[33,39919,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944,39946,39948,39950,39952],{"class":35,"line":3447},[33,39921,39661],{"class":59},[33,39923,32507],{"class":6877},[33,39925,64],{"class":63},[33,39927,33720],{"class":39},[33,39929,2196],{"class":59},[33,39931,32516],{"class":6877},[33,39933,64],{"class":63},[33,39935,36517],{"class":39},[33,39937,2196],{"class":59},[33,39939,32525],{"class":6877},[33,39941,64],{"class":63},[33,39943,1891],{"class":39},[33,39945,2196],{"class":59},[33,39947,32534],{"class":6877},[33,39949,64],{"class":63},[33,39951,2036],{"class":39},[33,39953,39694],{"class":59},[33,39955,39956],{"class":35,"line":3452},[33,39957,39699],{"class":59},[33,39959,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984,39986,39988,39990,39992],{"class":35,"line":4243},[33,39961,39661],{"class":59},[33,39963,32507],{"class":6877},[33,39965,64],{"class":63},[33,39967,36517],{"class":39},[33,39969,2196],{"class":59},[33,39971,32516],{"class":6877},[33,39973,64],{"class":63},[33,39975,36517],{"class":39},[33,39977,2196],{"class":59},[33,39979,32525],{"class":6877},[33,39981,64],{"class":63},[33,39983,1891],{"class":39},[33,39985,2196],{"class":59},[33,39987,32534],{"class":6877},[33,39989,64],{"class":63},[33,39991,2036],{"class":39},[33,39993,39694],{"class":59},[33,39995,39996],{"class":35,"line":4257},[33,39997,39699],{"class":59},[33,39999,40000,40002,40004,40006,40008,40010,40012,40014,40016,40018,40020,40022,40024,40026,40028,40030,40032],{"class":35,"line":4265},[33,40001,39661],{"class":59},[33,40003,32507],{"class":6877},[33,40005,64],{"class":63},[33,40007,36517],{"class":39},[33,40009,2196],{"class":59},[33,40011,32516],{"class":6877},[33,40013,64],{"class":63},[33,40015,36517],{"class":39},[33,40017,2196],{"class":59},[33,40019,32525],{"class":6877},[33,40021,64],{"class":63},[33,40023,1891],{"class":39},[33,40025,2196],{"class":59},[33,40027,32534],{"class":6877},[33,40029,64],{"class":63},[33,40031,2036],{"class":39},[33,40033,39694],{"class":59},[33,40035,40036],{"class":35,"line":4270},[33,40037,39699],{"class":59},[33,40039,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064],{"class":35,"line":4276},[33,40041,39744],{"class":59},[33,40043,32525],{"class":6877},[33,40045,64],{"class":63},[33,40047,1897],{"class":39},[33,40049,2196],{"class":59},[33,40051,32580],{"class":6877},[33,40053,64],{"class":63},[33,40055,1897],{"class":39},[33,40057,2196],{"class":59},[33,40059,32534],{"class":6877},[33,40061,64],{"class":63},[33,40063,2010],{"class":39},[33,40065,157],{"class":59},[33,40067,40068],{"class":35,"line":4282},[33,40069,39773],{"class":59},[33,40071,40072],{"class":35,"line":4287},[33,40073,40074],{"class":87},"        # 第四层\n",[33,40076,40077,40079,40082,40084],{"class":35,"line":9608},[33,40078,32496],{"class":39},[33,40080,40081],{"class":59},".block4",[33,40083,64],{"class":63},[33,40085,39656],{"class":59},[33,40087,40088,40090,40092,40094,40096,40098,40100,40102,40105,40107,40109,40111,40113,40115,40117,40119,40121],{"class":35,"line":9632},[33,40089,39661],{"class":59},[33,40091,32507],{"class":6877},[33,40093,64],{"class":63},[33,40095,36517],{"class":39},[33,40097,2196],{"class":59},[33,40099,32516],{"class":6877},[33,40101,64],{"class":63},[33,40103,40104],{"class":39},"512",[33,40106,2196],{"class":59},[33,40108,32525],{"class":6877},[33,40110,64],{"class":63},[33,40112,1891],{"class":39},[33,40114,2196],{"class":59},[33,40116,32534],{"class":6877},[33,40118,64],{"class":63},[33,40120,2036],{"class":39},[33,40122,39694],{"class":59},[33,40124,40125],{"class":35,"line":9637},[33,40126,39699],{"class":59},[33,40128,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161],{"class":35,"line":9643},[33,40130,39661],{"class":59},[33,40132,32507],{"class":6877},[33,40134,64],{"class":63},[33,40136,40104],{"class":39},[33,40138,2196],{"class":59},[33,40140,32516],{"class":6877},[33,40142,64],{"class":63},[33,40144,40104],{"class":39},[33,40146,2196],{"class":59},[33,40148,32525],{"class":6877},[33,40150,64],{"class":63},[33,40152,1891],{"class":39},[33,40154,2196],{"class":59},[33,40156,32534],{"class":6877},[33,40158,64],{"class":63},[33,40160,2036],{"class":39},[33,40162,39694],{"class":59},[33,40164,40165],{"class":35,"line":9670},[33,40166,39699],{"class":59},[33,40168,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201],{"class":35,"line":9675},[33,40170,39661],{"class":59},[33,40172,32507],{"class":6877},[33,40174,64],{"class":63},[33,40176,40104],{"class":39},[33,40178,2196],{"class":59},[33,40180,32516],{"class":6877},[33,40182,64],{"class":63},[33,40184,40104],{"class":39},[33,40186,2196],{"class":59},[33,40188,32525],{"class":6877},[33,40190,64],{"class":63},[33,40192,1891],{"class":39},[33,40194,2196],{"class":59},[33,40196,32534],{"class":6877},[33,40198,64],{"class":63},[33,40200,2036],{"class":39},[33,40202,39694],{"class":59},[33,40204,40205],{"class":35,"line":9681},[33,40206,39699],{"class":59},[33,40208,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233],{"class":35,"line":9693},[33,40210,39744],{"class":59},[33,40212,32525],{"class":6877},[33,40214,64],{"class":63},[33,40216,1897],{"class":39},[33,40218,2196],{"class":59},[33,40220,32580],{"class":6877},[33,40222,64],{"class":63},[33,40224,1897],{"class":39},[33,40226,2196],{"class":59},[33,40228,32534],{"class":6877},[33,40230,64],{"class":63},[33,40232,2010],{"class":39},[33,40234,157],{"class":59},[33,40236,40237],{"class":35,"line":9705},[33,40238,39773],{"class":59},[33,40240,40241],{"class":35,"line":9717},[33,40242,40243],{"class":87},"        # 第五层\n",[33,40245,40246,40248,40251,40253],{"class":35,"line":11375},[33,40247,32496],{"class":39},[33,40249,40250],{"class":59},".block5",[33,40252,64],{"class":63},[33,40254,39656],{"class":59},[33,40256,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289],{"class":35,"line":11400},[33,40258,39661],{"class":59},[33,40260,32507],{"class":6877},[33,40262,64],{"class":63},[33,40264,40104],{"class":39},[33,40266,2196],{"class":59},[33,40268,32516],{"class":6877},[33,40270,64],{"class":63},[33,40272,40104],{"class":39},[33,40274,2196],{"class":59},[33,40276,32525],{"class":6877},[33,40278,64],{"class":63},[33,40280,1891],{"class":39},[33,40282,2196],{"class":59},[33,40284,32534],{"class":6877},[33,40286,64],{"class":63},[33,40288,2036],{"class":39},[33,40290,39694],{"class":59},[33,40292,40293],{"class":35,"line":11423},[33,40294,39699],{"class":59},[33,40296,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329],{"class":35,"line":11447},[33,40298,39661],{"class":59},[33,40300,32507],{"class":6877},[33,40302,64],{"class":63},[33,40304,40104],{"class":39},[33,40306,2196],{"class":59},[33,40308,32516],{"class":6877},[33,40310,64],{"class":63},[33,40312,40104],{"class":39},[33,40314,2196],{"class":59},[33,40316,32525],{"class":6877},[33,40318,64],{"class":63},[33,40320,1891],{"class":39},[33,40322,2196],{"class":59},[33,40324,32534],{"class":6877},[33,40326,64],{"class":63},[33,40328,2036],{"class":39},[33,40330,39694],{"class":59},[33,40332,40333],{"class":35,"line":11452},[33,40334,39699],{"class":59},[33,40336,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361,40363,40365,40367,40369],{"class":35,"line":11457},[33,40338,39661],{"class":59},[33,40340,32507],{"class":6877},[33,40342,64],{"class":63},[33,40344,40104],{"class":39},[33,40346,2196],{"class":59},[33,40348,32516],{"class":6877},[33,40350,64],{"class":63},[33,40352,40104],{"class":39},[33,40354,2196],{"class":59},[33,40356,32525],{"class":6877},[33,40358,64],{"class":63},[33,40360,1891],{"class":39},[33,40362,2196],{"class":59},[33,40364,32534],{"class":6877},[33,40366,64],{"class":63},[33,40368,2036],{"class":39},[33,40370,39694],{"class":59},[33,40372,40373],{"class":35,"line":11462},[33,40374,39699],{"class":59},[33,40376,40377,40379,40381,40383,40385,40387,40389,40391,40393,40395,40397,40399,40401],{"class":35,"line":11471},[33,40378,39744],{"class":59},[33,40380,32525],{"class":6877},[33,40382,64],{"class":63},[33,40384,1897],{"class":39},[33,40386,2196],{"class":59},[33,40388,32580],{"class":6877},[33,40390,64],{"class":63},[33,40392,1897],{"class":39},[33,40394,2196],{"class":59},[33,40396,32534],{"class":6877},[33,40398,64],{"class":63},[33,40400,2010],{"class":39},[33,40402,157],{"class":59},[33,40404,40405],{"class":35,"line":11476},[33,40406,39773],{"class":59},[33,40408,40409],{"class":35,"line":11482},[33,40410,40411],{"class":87},"        # 全连接层\n",[33,40413,40414,40416,40419,40421],{"class":35,"line":11503},[33,40415,32496],{"class":39},[33,40417,40418],{"class":59},".block6",[33,40420,64],{"class":63},[33,40422,39656],{"class":59},[33,40424,40425],{"class":35,"line":11509},[33,40426,40427],{"class":87},"            # 平展操作\n",[33,40429,40430],{"class":35,"line":11523},[33,40431,40432],{"class":87},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[33,40434,40435],{"class":35,"line":11529},[33,40436,40437],{"class":59},"            nn.Flatten(),\n",[33,40439,40440,40443,40445,40447,40449,40451,40453,40455,40457],{"class":35,"line":11556},[33,40441,40442],{"class":59},"            nn.Linear(",[33,40444,2187],{"class":39},[33,40446,1540],{"class":63},[33,40448,2187],{"class":39},[33,40450,1540],{"class":63},[33,40452,40104],{"class":39},[33,40454,2196],{"class":59},[33,40456,36517],{"class":39},[33,40458,39694],{"class":59},[33,40460,40461],{"class":35,"line":11565},[33,40462,39699],{"class":59},[33,40464,40465,40467,40469,40471,40473],{"class":35,"line":11571},[33,40466,40442],{"class":59},[33,40468,36517],{"class":39},[33,40470,2196],{"class":59},[33,40472,33720],{"class":39},[33,40474,39694],{"class":59},[33,40476,40477],{"class":35,"line":11579},[33,40478,39699],{"class":59},[33,40480,40481,40483,40485,40487,40489],{"class":35,"line":11584},[33,40482,40442],{"class":59},[33,40484,33720],{"class":39},[33,40486,2196],{"class":59},[33,40488,2264],{"class":39},[33,40490,157],{"class":59},[33,40492,40493],{"class":35,"line":18259},[33,40494,39773],{"class":59},[33,40496,40497],{"class":35,"line":18265},[33,40498,127],{"emptyLinePlaceholder":126},[33,40500,40501],{"class":35,"line":18288},[33,40502,40503],{"class":87},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,40505,40506],{"class":35,"line":18294},[33,40507,40508],{"class":87},"        # 循环遍历模型\n",[33,40510,40511,40513,40516,40518,40521],{"class":35,"line":18317},[33,40512,5066],{"class":63},[33,40514,40515],{"class":59}," m ",[33,40517,27699],{"class":63},[33,40519,40520],{"class":39}," self",[33,40522,40523],{"class":59},".modules():\n",[33,40525,40526],{"class":35,"line":18331},[33,40527,40528],{"class":87},"            # print(m)\n",[33,40530,40531,40533,40536],{"class":35,"line":18351},[33,40532,6303],{"class":63},[33,40534,40535],{"class":39}," isinstance",[33,40537,40538],{"class":59},"(m,nn.Conv2d):\n",[33,40540,40541],{"class":35,"line":18357},[33,40542,40543],{"class":87},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,40545,40546,40549,40552,40554,40557],{"class":35,"line":18368},[33,40547,40548],{"class":59},"                nn.init.kaiming_normal_(m.weight,",[33,40550,40551],{"class":6877},"nonlinearity",[33,40553,64],{"class":63},[33,40555,40556],{"class":117},"'relu'",[33,40558,157],{"class":59},[33,40560,40561],{"class":35,"line":18391},[33,40562,40563],{"class":87},"                # 判断b参数是否存在\n",[33,40565,40566,40569,40572,40575,40577,40580],{"class":35,"line":18413},[33,40567,40568],{"class":63},"                if",[33,40570,40571],{"class":59}," m.bias ",[33,40573,40574],{"class":63},"is",[33,40576,783],{"class":63},[33,40578,40579],{"class":39}," None",[33,40581,143],{"class":59},[33,40583,40584],{"class":35,"line":18418},[33,40585,40586],{"class":87},"                    # 如果参数不存在的化初始化b=0\n",[33,40588,40589,40592,40594],{"class":35,"line":18424},[33,40590,40591],{"class":59},"                    nn.init.constant_(m.bias,",[33,40593,2010],{"class":39},[33,40595,157],{"class":59},[33,40597,40598],{"class":35,"line":18438},[33,40599,40600],{"class":87},"            # 全连接层初始化\n",[33,40602,40603,40606,40608],{"class":35,"line":18451},[33,40604,40605],{"class":63},"            elif",[33,40607,40535],{"class":39},[33,40609,40610],{"class":59},"(m,nn.Linear):\n",[33,40612,40613],{"class":35,"line":18456},[33,40614,40615],{"class":87},"                # 这个初始化方法是利用的是正太分布的方式\n",[33,40617,40618],{"class":35,"line":18470},[33,40619,40620],{"class":87},"                # 均值为0，方差为0.01\n",[33,40622,40623,40626,40628,40630,40633],{"class":35,"line":18475},[33,40624,40625],{"class":59},"                nn.init.normal_(m.weight,",[33,40627,2010],{"class":39},[33,40629,2196],{"class":59},[33,40631,40632],{"class":39},"0.01",[33,40634,157],{"class":59},[33,40636,40637],{"class":35,"line":18481},[33,40638,40639],{"class":87},"                # 初始化b参数\n",[33,40641,40642,40644,40646,40648,40650,40652],{"class":35,"line":18486},[33,40643,40568],{"class":63},[33,40645,40571],{"class":59},[33,40647,40574],{"class":63},[33,40649,783],{"class":63},[33,40651,40579],{"class":39},[33,40653,143],{"class":59},[33,40655,40656,40658,40660],{"class":35,"line":18500},[33,40657,40591],{"class":59},[33,40659,2010],{"class":39},[33,40661,157],{"class":59},[33,40663,40664],{"class":35,"line":18505},[33,40665,127],{"emptyLinePlaceholder":126},[33,40667,40668],{"class":35,"line":18510},[33,40669,36812],{"class":87},[33,40671,40672,40674,40676],{"class":35,"line":18524},[33,40673,32452],{"class":63},[33,40675,32744],{"class":3632},[33,40677,32747],{"class":59},[33,40679,40680,40682,40684,40686],{"class":35,"line":18536},[33,40681,32752],{"class":59},[33,40683,64],{"class":63},[33,40685,32474],{"class":39},[33,40687,40688],{"class":59},".block1(x)\n",[33,40690,40691,40693,40695,40697],{"class":35,"line":18541},[33,40692,32752],{"class":59},[33,40694,64],{"class":63},[33,40696,32474],{"class":39},[33,40698,40699],{"class":59},".block2(x)\n",[33,40701,40702,40704,40706,40708],{"class":35,"line":18554},[33,40703,32752],{"class":59},[33,40705,64],{"class":63},[33,40707,32474],{"class":39},[33,40709,40710],{"class":59},".block3(x)\n",[33,40712,40713,40715,40717,40719],{"class":35,"line":18559},[33,40714,32752],{"class":59},[33,40716,64],{"class":63},[33,40718,32474],{"class":39},[33,40720,40721],{"class":59},".block4(x)\n",[33,40723,40724,40726,40728,40730],{"class":35,"line":18564},[33,40725,32752],{"class":59},[33,40727,64],{"class":63},[33,40729,32474],{"class":39},[33,40731,40732],{"class":59},".block5(x)\n",[33,40734,40735,40737,40739,40741],{"class":35,"line":18569},[33,40736,32752],{"class":59},[33,40738,64],{"class":63},[33,40740,32474],{"class":39},[33,40742,40743],{"class":59},".block6(x)\n",[33,40745,40746,40748],{"class":35,"line":18582},[33,40747,16410],{"class":63},[33,40749,32860],{"class":59},[33,40751,40752],{"class":35,"line":18587},[33,40753,127],{"emptyLinePlaceholder":126},[33,40755,40756],{"class":35,"line":34280},[33,40757,40758],{"class":87},"# 验证模型\n",[33,40760,40761,40763,40765,40767,40770],{"class":35,"line":34286},[33,40762,133],{"class":63},[33,40764,32871],{"class":39},[33,40766,573],{"class":63},[33,40768,40769],{"class":117},"'__main__'",[33,40771,143],{"class":59},[33,40773,40774,40776,40778,40780,40782,40784,40786,40788,40790],{"class":35,"line":34292},[33,40775,32888],{"class":59},[33,40777,64],{"class":63},[33,40779,32103],{"class":59},[33,40781,32895],{"class":117},[33,40783,3374],{"class":63},[33,40785,32900],{"class":59},[33,40787,270],{"class":63},[33,40789,32128],{"class":117},[33,40791,157],{"class":59},[33,40793,40794,40796],{"class":35,"line":34298},[33,40795,149],{"class":39},[33,40797,32137],{"class":59},[33,40799,40800,40802,40804],{"class":35,"line":34304},[33,40801,32940],{"class":59},[33,40803,64],{"class":63},[33,40805,40806],{"class":59},"VGG16().to(device)\n",[33,40808,40809,40811,40813,40815,40817,40819,40821,40823],{"class":35,"line":34315},[33,40810,149],{"class":39},[33,40812,32952],{"class":59},[33,40814,2036],{"class":39},[33,40816,2196],{"class":59},[33,40818,33151],{"class":39},[33,40820,2196],{"class":59},[33,40822,33151],{"class":39},[33,40824,32965],{"class":59},[162,40826,40827],{"start":43},[165,40828,40829],{},"训练代码",[19,40831,40832],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40834,40835],{},"解决方式:",[19,40837,40838],{},"①权重初始化",[23,40840,40842],{"className":25,"code":40841,"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,40843,40844,40849,40854,40866,40871,40879,40884,40897,40902,40916,40921,40930,40935,40944,40949,40954,40967,40972,40986],{"__ignoreMap":28},[33,40845,40846],{"class":35,"line":36},[33,40847,40848],{"class":87},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,40850,40851],{"class":35,"line":43},[33,40852,40853],{"class":87},"# 循环遍历模型\n",[33,40855,40856,40858,40860,40862,40864],{"class":35,"line":130},[33,40857,4690],{"class":63},[33,40859,40515],{"class":59},[33,40861,27699],{"class":63},[33,40863,40520],{"class":39},[33,40865,40523],{"class":59},[33,40867,40868],{"class":35,"line":146},[33,40869,40870],{"class":87},"    # print(m)\n",[33,40872,40873,40875,40877],{"class":35,"line":267},[33,40874,567],{"class":63},[33,40876,40535],{"class":39},[33,40878,40538],{"class":59},[33,40880,40881],{"class":35,"line":275},[33,40882,40883],{"class":87},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,40885,40886,40889,40891,40893,40895],{"class":35,"line":392},[33,40887,40888],{"class":59},"        nn.init.kaiming_normal_(m.weight,",[33,40890,40551],{"class":6877},[33,40892,64],{"class":63},[33,40894,40556],{"class":117},[33,40896,157],{"class":59},[33,40898,40899],{"class":35,"line":406},[33,40900,40901],{"class":87},"        # 判断b参数是否存在\n",[33,40903,40904,40906,40908,40910,40912,40914],{"class":35,"line":418},[33,40905,4163],{"class":63},[33,40907,40571],{"class":59},[33,40909,40574],{"class":63},[33,40911,783],{"class":63},[33,40913,40579],{"class":39},[33,40915,143],{"class":59},[33,40917,40918],{"class":35,"line":425},[33,40919,40920],{"class":87},"            # 如果参数不存在的化初始化b=0\n",[33,40922,40923,40926,40928],{"class":35,"line":1147},[33,40924,40925],{"class":59},"            nn.init.constant_(m.bias,",[33,40927,2010],{"class":39},[33,40929,157],{"class":59},[33,40931,40932],{"class":35,"line":1329},[33,40933,40934],{"class":87},"    # 全连接层初始化\n",[33,40936,40937,40940,40942],{"class":35,"line":1341},[33,40938,40939],{"class":63},"    elif",[33,40941,40535],{"class":39},[33,40943,40610],{"class":59},[33,40945,40946],{"class":35,"line":1348},[33,40947,40948],{"class":87},"        # 这个初始化方法是利用的是正太分布的方式\n",[33,40950,40951],{"class":35,"line":1529},[33,40952,40953],{"class":87},"        # 均值为0，方差为0.01\n",[33,40955,40956,40959,40961,40963,40965],{"class":35,"line":1546},[33,40957,40958],{"class":59},"        nn.init.normal_(m.weight,",[33,40960,2010],{"class":39},[33,40962,2196],{"class":59},[33,40964,40632],{"class":39},[33,40966,157],{"class":59},[33,40968,40969],{"class":35,"line":1551},[33,40970,40971],{"class":87},"        # 初始化b参数\n",[33,40973,40974,40976,40978,40980,40982,40984],{"class":35,"line":1566},[33,40975,4163],{"class":63},[33,40977,40571],{"class":59},[33,40979,40574],{"class":63},[33,40981,783],{"class":63},[33,40983,40579],{"class":39},[33,40985,143],{"class":59},[33,40987,40988,40990,40992],{"class":35,"line":1578},[33,40989,40925],{"class":59},[33,40991,2010],{"class":39},[33,40993,157],{"class":59},[19,40995,40996],{},"②尽可能地增加批次",[19,40998,40999],{},"训练完整代码：",[23,41001,41002],{"className":25,"code":39546,"language":27,"meta":28,"style":28},[30,41003,41004,41010,41020,41030,41040,41044,41060,41068,41086,41090,41094,41104,41140,41144,41180,41184,41212,41216,41220,41230,41266,41270,41306,41310,41338,41342,41346,41356,41392,41396,41432,41436,41472,41476,41504,41508,41512,41522,41558,41562,41598,41602,41638,41642,41670,41674,41678,41688,41724,41728,41764,41768,41804,41808,41836,41840,41844,41854,41858,41862,41866,41886,41890,41902,41906,41918,41922,41926,41930,41934,41946,41950,41958,41962,41974,41978,41992,41996,42004,42008,42016,42020,42024,42036,42040,42054,42062,42066,42070,42078,42088,42098,42108,42118,42128,42138,42144,42148,42152,42164,42184,42190,42198],{"__ignoreMap":28},[33,41005,41006,41008],{"class":35,"line":36},[33,41007,32045],{"class":63},[33,41009,32048],{"class":59},[33,41011,41012,41014,41016,41018],{"class":35,"line":43},[33,41013,32388],{"class":63},[33,41015,39561],{"class":59},[33,41017,32045],{"class":63},[33,41019,39566],{"class":59},[33,41021,41022,41024,41026,41028],{"class":35,"line":130},[33,41023,32388],{"class":63},[33,41025,32391],{"class":59},[33,41027,32045],{"class":63},[33,41029,32396],{"class":59},[33,41031,41032,41034,41036,41038],{"class":35,"line":146},[33,41033,32388],{"class":63},[33,41035,32408],{"class":59},[33,41037,32045],{"class":63},[33,41039,32413],{"class":59},[33,41041,41042],{"class":35,"line":267},[33,41043,127],{"emptyLinePlaceholder":126},[33,41045,41046,41048,41050,41052,41054,41056,41058],{"class":35,"line":275},[33,41047,16352],{"class":63},[33,41049,39597],{"class":3632},[33,41051,109],{"class":59},[33,41053,32429],{"class":3632},[33,41055,2375],{"class":59},[33,41057,32434],{"class":3632},[33,41059,32437],{"class":59},[33,41061,41062,41064,41066],{"class":35,"line":392},[33,41063,32452],{"class":63},[33,41065,32455],{"class":39},[33,41067,32458],{"class":59},[33,41069,41070,41072,41074,41076,41078,41080,41082,41084],{"class":35,"line":406},[33,41071,32468],{"class":39},[33,41073,109],{"class":59},[33,41075,39624],{"class":39},[33,41077,14093],{"class":59},[33,41079,32474],{"class":39},[33,41081,32477],{"class":59},[33,41083,32480],{"class":39},[33,41085,943],{"class":59},[33,41087,41088],{"class":35,"line":418},[33,41089,39639],{"class":87},[33,41091,41092],{"class":35,"line":425},[33,41093,39644],{"class":87},[33,41095,41096,41098,41100,41102],{"class":35,"line":1147},[33,41097,32496],{"class":39},[33,41099,39651],{"class":59},[33,41101,64],{"class":63},[33,41103,39656],{"class":59},[33,41105,41106,41108,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138],{"class":35,"line":1329},[33,41107,39661],{"class":59},[33,41109,32507],{"class":6877},[33,41111,64],{"class":63},[33,41113,2036],{"class":39},[33,41115,2196],{"class":59},[33,41117,32516],{"class":6877},[33,41119,64],{"class":63},[33,41121,2022],{"class":39},[33,41123,2196],{"class":59},[33,41125,32525],{"class":6877},[33,41127,64],{"class":63},[33,41129,1891],{"class":39},[33,41131,2196],{"class":59},[33,41133,32534],{"class":6877},[33,41135,64],{"class":63},[33,41137,2036],{"class":39},[33,41139,39694],{"class":59},[33,41141,41142],{"class":35,"line":1341},[33,41143,39699],{"class":59},[33,41145,41146,41148,41150,41152,41154,41156,41158,41160,41162,41164,41166,41168,41170,41172,41174,41176,41178],{"class":35,"line":1348},[33,41147,39661],{"class":59},[33,41149,32507],{"class":6877},[33,41151,64],{"class":63},[33,41153,2022],{"class":39},[33,41155,2196],{"class":59},[33,41157,32516],{"class":6877},[33,41159,64],{"class":63},[33,41161,2022],{"class":39},[33,41163,2196],{"class":59},[33,41165,32525],{"class":6877},[33,41167,64],{"class":63},[33,41169,1891],{"class":39},[33,41171,2196],{"class":59},[33,41173,32534],{"class":6877},[33,41175,64],{"class":63},[33,41177,2036],{"class":39},[33,41179,39694],{"class":59},[33,41181,41182],{"class":35,"line":1529},[33,41183,39699],{"class":59},[33,41185,41186,41188,41190,41192,41194,41196,41198,41200,41202,41204,41206,41208,41210],{"class":35,"line":1546},[33,41187,39744],{"class":59},[33,41189,32525],{"class":6877},[33,41191,64],{"class":63},[33,41193,1897],{"class":39},[33,41195,2196],{"class":59},[33,41197,32580],{"class":6877},[33,41199,64],{"class":63},[33,41201,1897],{"class":39},[33,41203,2196],{"class":59},[33,41205,32534],{"class":6877},[33,41207,64],{"class":63},[33,41209,2010],{"class":39},[33,41211,157],{"class":59},[33,41213,41214],{"class":35,"line":1551},[33,41215,39773],{"class":59},[33,41217,41218],{"class":35,"line":1566},[33,41219,39778],{"class":87},[33,41221,41222,41224,41226,41228],{"class":35,"line":1578},[33,41223,32496],{"class":39},[33,41225,39785],{"class":59},[33,41227,64],{"class":63},[33,41229,39656],{"class":59},[33,41231,41232,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264],{"class":35,"line":1583},[33,41233,39661],{"class":59},[33,41235,32507],{"class":6877},[33,41237,64],{"class":63},[33,41239,2022],{"class":39},[33,41241,2196],{"class":59},[33,41243,32516],{"class":6877},[33,41245,64],{"class":63},[33,41247,33720],{"class":39},[33,41249,2196],{"class":59},[33,41251,32525],{"class":6877},[33,41253,64],{"class":63},[33,41255,1891],{"class":39},[33,41257,2196],{"class":59},[33,41259,32534],{"class":6877},[33,41261,64],{"class":63},[33,41263,2036],{"class":39},[33,41265,39694],{"class":59},[33,41267,41268],{"class":35,"line":3369},[33,41269,39699],{"class":59},[33,41271,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290,41292,41294,41296,41298,41300,41302,41304],{"class":35,"line":3396},[33,41273,39661],{"class":59},[33,41275,32507],{"class":6877},[33,41277,64],{"class":63},[33,41279,33720],{"class":39},[33,41281,2196],{"class":59},[33,41283,32516],{"class":6877},[33,41285,64],{"class":63},[33,41287,33720],{"class":39},[33,41289,2196],{"class":59},[33,41291,32525],{"class":6877},[33,41293,64],{"class":63},[33,41295,1891],{"class":39},[33,41297,2196],{"class":59},[33,41299,32534],{"class":6877},[33,41301,64],{"class":63},[33,41303,2036],{"class":39},[33,41305,39694],{"class":59},[33,41307,41308],{"class":35,"line":3401},[33,41309,39699],{"class":59},[33,41311,41312,41314,41316,41318,41320,41322,41324,41326,41328,41330,41332,41334,41336],{"class":35,"line":3418},[33,41313,39744],{"class":59},[33,41315,32525],{"class":6877},[33,41317,64],{"class":63},[33,41319,1897],{"class":39},[33,41321,2196],{"class":59},[33,41323,32580],{"class":6877},[33,41325,64],{"class":63},[33,41327,1897],{"class":39},[33,41329,2196],{"class":59},[33,41331,32534],{"class":6877},[33,41333,64],{"class":63},[33,41335,2010],{"class":39},[33,41337,157],{"class":59},[33,41339,41340],{"class":35,"line":3423},[33,41341,39773],{"class":59},[33,41343,41344],{"class":35,"line":3428},[33,41345,39906],{"class":87},[33,41347,41348,41350,41352,41354],{"class":35,"line":3433},[33,41349,32496],{"class":39},[33,41351,39913],{"class":59},[33,41353,64],{"class":63},[33,41355,39656],{"class":59},[33,41357,41358,41360,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390],{"class":35,"line":3447},[33,41359,39661],{"class":59},[33,41361,32507],{"class":6877},[33,41363,64],{"class":63},[33,41365,33720],{"class":39},[33,41367,2196],{"class":59},[33,41369,32516],{"class":6877},[33,41371,64],{"class":63},[33,41373,36517],{"class":39},[33,41375,2196],{"class":59},[33,41377,32525],{"class":6877},[33,41379,64],{"class":63},[33,41381,1891],{"class":39},[33,41383,2196],{"class":59},[33,41385,32534],{"class":6877},[33,41387,64],{"class":63},[33,41389,2036],{"class":39},[33,41391,39694],{"class":59},[33,41393,41394],{"class":35,"line":3452},[33,41395,39699],{"class":59},[33,41397,41398,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420,41422,41424,41426,41428,41430],{"class":35,"line":4243},[33,41399,39661],{"class":59},[33,41401,32507],{"class":6877},[33,41403,64],{"class":63},[33,41405,36517],{"class":39},[33,41407,2196],{"class":59},[33,41409,32516],{"class":6877},[33,41411,64],{"class":63},[33,41413,36517],{"class":39},[33,41415,2196],{"class":59},[33,41417,32525],{"class":6877},[33,41419,64],{"class":63},[33,41421,1891],{"class":39},[33,41423,2196],{"class":59},[33,41425,32534],{"class":6877},[33,41427,64],{"class":63},[33,41429,2036],{"class":39},[33,41431,39694],{"class":59},[33,41433,41434],{"class":35,"line":4257},[33,41435,39699],{"class":59},[33,41437,41438,41440,41442,41444,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464,41466,41468,41470],{"class":35,"line":4265},[33,41439,39661],{"class":59},[33,41441,32507],{"class":6877},[33,41443,64],{"class":63},[33,41445,36517],{"class":39},[33,41447,2196],{"class":59},[33,41449,32516],{"class":6877},[33,41451,64],{"class":63},[33,41453,36517],{"class":39},[33,41455,2196],{"class":59},[33,41457,32525],{"class":6877},[33,41459,64],{"class":63},[33,41461,1891],{"class":39},[33,41463,2196],{"class":59},[33,41465,32534],{"class":6877},[33,41467,64],{"class":63},[33,41469,2036],{"class":39},[33,41471,39694],{"class":59},[33,41473,41474],{"class":35,"line":4270},[33,41475,39699],{"class":59},[33,41477,41478,41480,41482,41484,41486,41488,41490,41492,41494,41496,41498,41500,41502],{"class":35,"line":4276},[33,41479,39744],{"class":59},[33,41481,32525],{"class":6877},[33,41483,64],{"class":63},[33,41485,1897],{"class":39},[33,41487,2196],{"class":59},[33,41489,32580],{"class":6877},[33,41491,64],{"class":63},[33,41493,1897],{"class":39},[33,41495,2196],{"class":59},[33,41497,32534],{"class":6877},[33,41499,64],{"class":63},[33,41501,2010],{"class":39},[33,41503,157],{"class":59},[33,41505,41506],{"class":35,"line":4282},[33,41507,39773],{"class":59},[33,41509,41510],{"class":35,"line":4287},[33,41511,40074],{"class":87},[33,41513,41514,41516,41518,41520],{"class":35,"line":9608},[33,41515,32496],{"class":39},[33,41517,40081],{"class":59},[33,41519,64],{"class":63},[33,41521,39656],{"class":59},[33,41523,41524,41526,41528,41530,41532,41534,41536,41538,41540,41542,41544,41546,41548,41550,41552,41554,41556],{"class":35,"line":9632},[33,41525,39661],{"class":59},[33,41527,32507],{"class":6877},[33,41529,64],{"class":63},[33,41531,36517],{"class":39},[33,41533,2196],{"class":59},[33,41535,32516],{"class":6877},[33,41537,64],{"class":63},[33,41539,40104],{"class":39},[33,41541,2196],{"class":59},[33,41543,32525],{"class":6877},[33,41545,64],{"class":63},[33,41547,1891],{"class":39},[33,41549,2196],{"class":59},[33,41551,32534],{"class":6877},[33,41553,64],{"class":63},[33,41555,2036],{"class":39},[33,41557,39694],{"class":59},[33,41559,41560],{"class":35,"line":9637},[33,41561,39699],{"class":59},[33,41563,41564,41566,41568,41570,41572,41574,41576,41578,41580,41582,41584,41586,41588,41590,41592,41594,41596],{"class":35,"line":9643},[33,41565,39661],{"class":59},[33,41567,32507],{"class":6877},[33,41569,64],{"class":63},[33,41571,40104],{"class":39},[33,41573,2196],{"class":59},[33,41575,32516],{"class":6877},[33,41577,64],{"class":63},[33,41579,40104],{"class":39},[33,41581,2196],{"class":59},[33,41583,32525],{"class":6877},[33,41585,64],{"class":63},[33,41587,1891],{"class":39},[33,41589,2196],{"class":59},[33,41591,32534],{"class":6877},[33,41593,64],{"class":63},[33,41595,2036],{"class":39},[33,41597,39694],{"class":59},[33,41599,41600],{"class":35,"line":9670},[33,41601,39699],{"class":59},[33,41603,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636],{"class":35,"line":9675},[33,41605,39661],{"class":59},[33,41607,32507],{"class":6877},[33,41609,64],{"class":63},[33,41611,40104],{"class":39},[33,41613,2196],{"class":59},[33,41615,32516],{"class":6877},[33,41617,64],{"class":63},[33,41619,40104],{"class":39},[33,41621,2196],{"class":59},[33,41623,32525],{"class":6877},[33,41625,64],{"class":63},[33,41627,1891],{"class":39},[33,41629,2196],{"class":59},[33,41631,32534],{"class":6877},[33,41633,64],{"class":63},[33,41635,2036],{"class":39},[33,41637,39694],{"class":59},[33,41639,41640],{"class":35,"line":9681},[33,41641,39699],{"class":59},[33,41643,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668],{"class":35,"line":9693},[33,41645,39744],{"class":59},[33,41647,32525],{"class":6877},[33,41649,64],{"class":63},[33,41651,1897],{"class":39},[33,41653,2196],{"class":59},[33,41655,32580],{"class":6877},[33,41657,64],{"class":63},[33,41659,1897],{"class":39},[33,41661,2196],{"class":59},[33,41663,32534],{"class":6877},[33,41665,64],{"class":63},[33,41667,2010],{"class":39},[33,41669,157],{"class":59},[33,41671,41672],{"class":35,"line":9705},[33,41673,39773],{"class":59},[33,41675,41676],{"class":35,"line":9717},[33,41677,40243],{"class":87},[33,41679,41680,41682,41684,41686],{"class":35,"line":11375},[33,41681,32496],{"class":39},[33,41683,40250],{"class":59},[33,41685,64],{"class":63},[33,41687,39656],{"class":59},[33,41689,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722],{"class":35,"line":11400},[33,41691,39661],{"class":59},[33,41693,32507],{"class":6877},[33,41695,64],{"class":63},[33,41697,40104],{"class":39},[33,41699,2196],{"class":59},[33,41701,32516],{"class":6877},[33,41703,64],{"class":63},[33,41705,40104],{"class":39},[33,41707,2196],{"class":59},[33,41709,32525],{"class":6877},[33,41711,64],{"class":63},[33,41713,1891],{"class":39},[33,41715,2196],{"class":59},[33,41717,32534],{"class":6877},[33,41719,64],{"class":63},[33,41721,2036],{"class":39},[33,41723,39694],{"class":59},[33,41725,41726],{"class":35,"line":11423},[33,41727,39699],{"class":59},[33,41729,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762],{"class":35,"line":11447},[33,41731,39661],{"class":59},[33,41733,32507],{"class":6877},[33,41735,64],{"class":63},[33,41737,40104],{"class":39},[33,41739,2196],{"class":59},[33,41741,32516],{"class":6877},[33,41743,64],{"class":63},[33,41745,40104],{"class":39},[33,41747,2196],{"class":59},[33,41749,32525],{"class":6877},[33,41751,64],{"class":63},[33,41753,1891],{"class":39},[33,41755,2196],{"class":59},[33,41757,32534],{"class":6877},[33,41759,64],{"class":63},[33,41761,2036],{"class":39},[33,41763,39694],{"class":59},[33,41765,41766],{"class":35,"line":11452},[33,41767,39699],{"class":59},[33,41769,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802],{"class":35,"line":11457},[33,41771,39661],{"class":59},[33,41773,32507],{"class":6877},[33,41775,64],{"class":63},[33,41777,40104],{"class":39},[33,41779,2196],{"class":59},[33,41781,32516],{"class":6877},[33,41783,64],{"class":63},[33,41785,40104],{"class":39},[33,41787,2196],{"class":59},[33,41789,32525],{"class":6877},[33,41791,64],{"class":63},[33,41793,1891],{"class":39},[33,41795,2196],{"class":59},[33,41797,32534],{"class":6877},[33,41799,64],{"class":63},[33,41801,2036],{"class":39},[33,41803,39694],{"class":59},[33,41805,41806],{"class":35,"line":11462},[33,41807,39699],{"class":59},[33,41809,41810,41812,41814,41816,41818,41820,41822,41824,41826,41828,41830,41832,41834],{"class":35,"line":11471},[33,41811,39744],{"class":59},[33,41813,32525],{"class":6877},[33,41815,64],{"class":63},[33,41817,1897],{"class":39},[33,41819,2196],{"class":59},[33,41821,32580],{"class":6877},[33,41823,64],{"class":63},[33,41825,1897],{"class":39},[33,41827,2196],{"class":59},[33,41829,32534],{"class":6877},[33,41831,64],{"class":63},[33,41833,2010],{"class":39},[33,41835,157],{"class":59},[33,41837,41838],{"class":35,"line":11476},[33,41839,39773],{"class":59},[33,41841,41842],{"class":35,"line":11482},[33,41843,40411],{"class":87},[33,41845,41846,41848,41850,41852],{"class":35,"line":11503},[33,41847,32496],{"class":39},[33,41849,40418],{"class":59},[33,41851,64],{"class":63},[33,41853,39656],{"class":59},[33,41855,41856],{"class":35,"line":11509},[33,41857,40427],{"class":87},[33,41859,41860],{"class":35,"line":11523},[33,41861,40432],{"class":87},[33,41863,41864],{"class":35,"line":11529},[33,41865,40437],{"class":59},[33,41867,41868,41870,41872,41874,41876,41878,41880,41882,41884],{"class":35,"line":11556},[33,41869,40442],{"class":59},[33,41871,2187],{"class":39},[33,41873,1540],{"class":63},[33,41875,2187],{"class":39},[33,41877,1540],{"class":63},[33,41879,40104],{"class":39},[33,41881,2196],{"class":59},[33,41883,36517],{"class":39},[33,41885,39694],{"class":59},[33,41887,41888],{"class":35,"line":11565},[33,41889,39699],{"class":59},[33,41891,41892,41894,41896,41898,41900],{"class":35,"line":11571},[33,41893,40442],{"class":59},[33,41895,36517],{"class":39},[33,41897,2196],{"class":59},[33,41899,33720],{"class":39},[33,41901,39694],{"class":59},[33,41903,41904],{"class":35,"line":11579},[33,41905,39699],{"class":59},[33,41907,41908,41910,41912,41914,41916],{"class":35,"line":11584},[33,41909,40442],{"class":59},[33,41911,33720],{"class":39},[33,41913,2196],{"class":59},[33,41915,2264],{"class":39},[33,41917,157],{"class":59},[33,41919,41920],{"class":35,"line":18259},[33,41921,39773],{"class":59},[33,41923,41924],{"class":35,"line":18265},[33,41925,127],{"emptyLinePlaceholder":126},[33,41927,41928],{"class":35,"line":18288},[33,41929,40503],{"class":87},[33,41931,41932],{"class":35,"line":18294},[33,41933,40508],{"class":87},[33,41935,41936,41938,41940,41942,41944],{"class":35,"line":18317},[33,41937,5066],{"class":63},[33,41939,40515],{"class":59},[33,41941,27699],{"class":63},[33,41943,40520],{"class":39},[33,41945,40523],{"class":59},[33,41947,41948],{"class":35,"line":18331},[33,41949,40528],{"class":87},[33,41951,41952,41954,41956],{"class":35,"line":18351},[33,41953,6303],{"class":63},[33,41955,40535],{"class":39},[33,41957,40538],{"class":59},[33,41959,41960],{"class":35,"line":18357},[33,41961,40543],{"class":87},[33,41963,41964,41966,41968,41970,41972],{"class":35,"line":18368},[33,41965,40548],{"class":59},[33,41967,40551],{"class":6877},[33,41969,64],{"class":63},[33,41971,40556],{"class":117},[33,41973,157],{"class":59},[33,41975,41976],{"class":35,"line":18391},[33,41977,40563],{"class":87},[33,41979,41980,41982,41984,41986,41988,41990],{"class":35,"line":18413},[33,41981,40568],{"class":63},[33,41983,40571],{"class":59},[33,41985,40574],{"class":63},[33,41987,783],{"class":63},[33,41989,40579],{"class":39},[33,41991,143],{"class":59},[33,41993,41994],{"class":35,"line":18418},[33,41995,40586],{"class":87},[33,41997,41998,42000,42002],{"class":35,"line":18424},[33,41999,40591],{"class":59},[33,42001,2010],{"class":39},[33,42003,157],{"class":59},[33,42005,42006],{"class":35,"line":18438},[33,42007,40600],{"class":87},[33,42009,42010,42012,42014],{"class":35,"line":18451},[33,42011,40605],{"class":63},[33,42013,40535],{"class":39},[33,42015,40610],{"class":59},[33,42017,42018],{"class":35,"line":18456},[33,42019,40615],{"class":87},[33,42021,42022],{"class":35,"line":18470},[33,42023,40620],{"class":87},[33,42025,42026,42028,42030,42032,42034],{"class":35,"line":18475},[33,42027,40625],{"class":59},[33,42029,2010],{"class":39},[33,42031,2196],{"class":59},[33,42033,40632],{"class":39},[33,42035,157],{"class":59},[33,42037,42038],{"class":35,"line":18481},[33,42039,40639],{"class":87},[33,42041,42042,42044,42046,42048,42050,42052],{"class":35,"line":18486},[33,42043,40568],{"class":63},[33,42045,40571],{"class":59},[33,42047,40574],{"class":63},[33,42049,783],{"class":63},[33,42051,40579],{"class":39},[33,42053,143],{"class":59},[33,42055,42056,42058,42060],{"class":35,"line":18500},[33,42057,40591],{"class":59},[33,42059,2010],{"class":39},[33,42061,157],{"class":59},[33,42063,42064],{"class":35,"line":18505},[33,42065,127],{"emptyLinePlaceholder":126},[33,42067,42068],{"class":35,"line":18510},[33,42069,36812],{"class":87},[33,42071,42072,42074,42076],{"class":35,"line":18524},[33,42073,32452],{"class":63},[33,42075,32744],{"class":3632},[33,42077,32747],{"class":59},[33,42079,42080,42082,42084,42086],{"class":35,"line":18536},[33,42081,32752],{"class":59},[33,42083,64],{"class":63},[33,42085,32474],{"class":39},[33,42087,40688],{"class":59},[33,42089,42090,42092,42094,42096],{"class":35,"line":18541},[33,42091,32752],{"class":59},[33,42093,64],{"class":63},[33,42095,32474],{"class":39},[33,42097,40699],{"class":59},[33,42099,42100,42102,42104,42106],{"class":35,"line":18554},[33,42101,32752],{"class":59},[33,42103,64],{"class":63},[33,42105,32474],{"class":39},[33,42107,40710],{"class":59},[33,42109,42110,42112,42114,42116],{"class":35,"line":18559},[33,42111,32752],{"class":59},[33,42113,64],{"class":63},[33,42115,32474],{"class":39},[33,42117,40721],{"class":59},[33,42119,42120,42122,42124,42126],{"class":35,"line":18564},[33,42121,32752],{"class":59},[33,42123,64],{"class":63},[33,42125,32474],{"class":39},[33,42127,40732],{"class":59},[33,42129,42130,42132,42134,42136],{"class":35,"line":18569},[33,42131,32752],{"class":59},[33,42133,64],{"class":63},[33,42135,32474],{"class":39},[33,42137,40743],{"class":59},[33,42139,42140,42142],{"class":35,"line":18582},[33,42141,16410],{"class":63},[33,42143,32860],{"class":59},[33,42145,42146],{"class":35,"line":18587},[33,42147,127],{"emptyLinePlaceholder":126},[33,42149,42150],{"class":35,"line":34280},[33,42151,40758],{"class":87},[33,42153,42154,42156,42158,42160,42162],{"class":35,"line":34286},[33,42155,133],{"class":63},[33,42157,32871],{"class":39},[33,42159,573],{"class":63},[33,42161,40769],{"class":117},[33,42163,143],{"class":59},[33,42165,42166,42168,42170,42172,42174,42176,42178,42180,42182],{"class":35,"line":34292},[33,42167,32888],{"class":59},[33,42169,64],{"class":63},[33,42171,32103],{"class":59},[33,42173,32895],{"class":117},[33,42175,3374],{"class":63},[33,42177,32900],{"class":59},[33,42179,270],{"class":63},[33,42181,32128],{"class":117},[33,42183,157],{"class":59},[33,42185,42186,42188],{"class":35,"line":34298},[33,42187,149],{"class":39},[33,42189,32137],{"class":59},[33,42191,42192,42194,42196],{"class":35,"line":34304},[33,42193,32940],{"class":59},[33,42195,64],{"class":63},[33,42197,40806],{"class":59},[33,42199,42200,42202,42204,42206,42208,42210,42212,42214],{"class":35,"line":34315},[33,42201,149],{"class":39},[33,42203,32952],{"class":59},[33,42205,2036],{"class":39},[33,42207,2196],{"class":59},[33,42209,33151],{"class":39},[33,42211,2196],{"class":59},[33,42213,33151],{"class":39},[33,42215,32965],{"class":59},[162,42217,42218],{"start":130},[165,42219,42220],{},"测试代码",[23,42222,42224],{"className":25,"code":42223,"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,42225,42226,42232,42242,42252,42256,42266,42277,42281,42285,42289,42297,42313,42323,42339,42349,42363,42367,42377,42387,42397,42403,42407,42411,42419,42423,42439,42447,42451,42455,42463,42471,42475,42479,42483,42487,42493,42497,42507,42515,42523,42527,42531,42535,42543,42547,42563,42567,42571,42575,42587,42591,42603,42607,42611,42623,42627,42637,42641,42645,42657,42661,42670,42674,42678,42686,42690,42698,42702,42706,42710,42714,42718,42734,42742,42746,42750,42798,42804,42808,42818,42826,42834,42838,42842,42846,42850,42858,42862,42878,42882,42890,42898],{"__ignoreMap":28},[33,42227,42228,42230],{"class":35,"line":36},[33,42229,32045],{"class":63},[33,42231,32048],{"class":59},[33,42233,42234,42236,42238,42240],{"class":35,"line":43},[33,42235,32045],{"class":63},[33,42237,33065],{"class":59},[33,42239,33033],{"class":63},[33,42241,33070],{"class":59},[33,42243,42244,42246,42248,42250],{"class":35,"line":130},[33,42245,32388],{"class":63},[33,42247,33048],{"class":59},[33,42249,32045],{"class":63},[33,42251,33053],{"class":59},[33,42253,42254],{"class":35,"line":146},[33,42255,35569],{"class":87},[33,42257,42258,42260,42262,42264],{"class":35,"line":267},[33,42259,32388],{"class":63},[33,42261,33018],{"class":59},[33,42263,32045],{"class":63},[33,42265,33023],{"class":59},[33,42267,42268,42270,42272,42274],{"class":35,"line":275},[33,42269,32388],{"class":63},[33,42271,33564],{"class":59},[33,42273,32045],{"class":63},[33,42275,42276],{"class":39}," VGG16\n",[33,42278,42279],{"class":35,"line":392},[33,42280,127],{"emptyLinePlaceholder":126},[33,42282,42283],{"class":35,"line":406},[33,42284,127],{"emptyLinePlaceholder":126},[33,42286,42287],{"class":35,"line":418},[33,42288,35598],{"class":87},[33,42290,42291,42293,42295],{"class":35,"line":425},[33,42292,33597],{"class":63},[33,42294,35605],{"class":3632},[33,42296,33603],{"class":59},[33,42298,42299,42301,42303,42305,42307,42309,42311],{"class":35,"line":1147},[33,42300,35612],{"class":59},[33,42302,64],{"class":63},[33,42304,33105],{"class":59},[33,42306,33108],{"class":6877},[33,42308,64],{"class":63},[33,42310,33113],{"class":117},[33,42312,33116],{"class":59},[33,42314,42315,42317,42319,42321],{"class":35,"line":1329},[33,42316,35629],{"class":6877},[33,42318,64],{"class":63},[33,42320,35634],{"class":39},[33,42322,33116],{"class":59},[33,42324,42325,42327,42329,42331,42333,42335,42337],{"class":35,"line":1341},[33,42326,35641],{"class":6877},[33,42328,64],{"class":63},[33,42330,33143],{"class":59},[33,42332,33146],{"class":6877},[33,42334,64],{"class":63},[33,42336,33151],{"class":39},[33,42338,33154],{"class":59},[33,42340,42341,42343,42345,42347],{"class":35,"line":1348},[33,42342,35658],{"class":6877},[33,42344,64],{"class":63},[33,42346,33126],{"class":39},[33,42348,157],{"class":59},[33,42350,42351,42353,42355,42357,42359,42361],{"class":35,"line":1529},[33,42352,35669],{"class":59},[33,42354,64],{"class":63},[33,42356,33184],{"class":59},[33,42358,33187],{"class":6877},[33,42360,64],{"class":63},[33,42362,35680],{"class":59},[33,42364,42365],{"class":35,"line":1546},[33,42366,35685],{"class":87},[33,42368,42369,42371,42373,42375],{"class":35,"line":1551},[33,42370,35690],{"class":6877},[33,42372,64],{"class":63},[33,42374,2036],{"class":39},[33,42376,33116],{"class":59},[33,42378,42379,42381,42383,42385],{"class":35,"line":1566},[33,42380,35701],{"class":6877},[33,42382,64],{"class":63},[33,42384,33126],{"class":39},[33,42386,33116],{"class":59},[33,42388,42389,42391,42393,42395],{"class":35,"line":1578},[33,42390,35712],{"class":6877},[33,42392,64],{"class":63},[33,42394,2010],{"class":39},[33,42396,157],{"class":59},[33,42398,42399,42401],{"class":35,"line":1583},[33,42400,5752],{"class":63},[33,42402,35725],{"class":59},[33,42404,42405],{"class":35,"line":3369},[33,42406,127],{"emptyLinePlaceholder":126},[33,42408,42409],{"class":35,"line":3396},[33,42410,35734],{"class":87},[33,42412,42413,42415,42417],{"class":35,"line":3401},[33,42414,33597],{"class":63},[33,42416,35741],{"class":3632},[33,42418,35744],{"class":59},[33,42420,42421],{"class":35,"line":3418},[33,42422,35749],{"class":87},[33,42424,42425,42427,42429,42431,42433,42435,42437],{"class":35,"line":3423},[33,42426,32888],{"class":59},[33,42428,64],{"class":63},[33,42430,32895],{"class":117},[33,42432,3374],{"class":63},[33,42434,32900],{"class":59},[33,42436,270],{"class":63},[33,42438,35766],{"class":117},[33,42440,42441,42443,42445],{"class":35,"line":3428},[33,42442,32940],{"class":59},[33,42444,64],{"class":63},[33,42446,33939],{"class":59},[33,42448,42449],{"class":35,"line":3433},[33,42450,127],{"emptyLinePlaceholder":126},[33,42452,42453],{"class":35,"line":3447},[33,42454,35783],{"class":87},[33,42456,42457,42459,42461],{"class":35,"line":3452},[33,42458,35788],{"class":59},[33,42460,64],{"class":63},[33,42462,928],{"class":39},[33,42464,42465,42467,42469],{"class":35,"line":4243},[33,42466,35797],{"class":59},[33,42468,64],{"class":63},[33,42470,923],{"class":39},[33,42472,42473],{"class":35,"line":4257},[33,42474,127],{"emptyLinePlaceholder":126},[33,42476,42477],{"class":35,"line":4265},[33,42478,35810],{"class":87},[33,42480,42481],{"class":35,"line":4270},[33,42482,35815],{"class":87},[33,42484,42485],{"class":35,"line":4276},[33,42486,35820],{"class":87},[33,42488,42489,42491],{"class":35,"line":4282},[33,42490,35825],{"class":63},[33,42492,34531],{"class":59},[33,42494,42495],{"class":35,"line":4287},[33,42496,35832],{"class":87},[33,42498,42499,42501,42503,42505],{"class":35,"line":9608},[33,42500,5066],{"class":63},[33,42502,35839],{"class":59},[33,42504,27699],{"class":63},[33,42506,35844],{"class":59},[33,42508,42509,42511,42513],{"class":35,"line":9632},[33,42510,35849],{"class":59},[33,42512,64],{"class":63},[33,42514,35854],{"class":59},[33,42516,42517,42519,42521],{"class":35,"line":9637},[33,42518,35859],{"class":59},[33,42520,64],{"class":63},[33,42522,35864],{"class":59},[33,42524,42525],{"class":35,"line":9643},[33,42526,35869],{"class":87},[33,42528,42529],{"class":35,"line":9670},[33,42530,34522],{"class":59},[33,42532,42533],{"class":35,"line":9675},[33,42534,35878],{"class":87},[33,42536,42537,42539,42541],{"class":35,"line":9681},[33,42538,34307],{"class":59},[33,42540,64],{"class":63},[33,42542,35887],{"class":59},[33,42544,42545],{"class":35,"line":9693},[33,42546,35892],{"class":87},[33,42548,42549,42551,42553,42555,42557,42559,42561],{"class":35,"line":9705},[33,42550,34324],{"class":59},[33,42552,64],{"class":63},[33,42554,34329],{"class":59},[33,42556,34332],{"class":6877},[33,42558,64],{"class":63},[33,42560,2036],{"class":39},[33,42562,157],{"class":59},[33,42564,42565],{"class":35,"line":9717},[33,42566,35913],{"class":87},[33,42568,42569],{"class":35,"line":11375},[33,42570,35918],{"class":87},[33,42572,42573],{"class":35,"line":11400},[33,42574,35923],{"class":87},[33,42576,42577,42579,42581,42583,42585],{"class":35,"line":11423},[33,42578,35928],{"class":59},[33,42580,11136],{"class":63},[33,42582,34434],{"class":59},[33,42584,573],{"class":63},[33,42586,35937],{"class":59},[33,42588,42589],{"class":35,"line":11447},[33,42590,35942],{"class":87},[33,42592,42593,42595,42597,42599,42601],{"class":35,"line":11452},[33,42594,35947],{"class":59},[33,42596,11136],{"class":63},[33,42598,35952],{"class":59},[33,42600,2010],{"class":39},[33,42602,157],{"class":59},[33,42604,42605],{"class":35,"line":11457},[33,42606,127],{"emptyLinePlaceholder":126},[33,42608,42609],{"class":35,"line":11462},[33,42610,35965],{"class":87},[33,42612,42613,42615,42617,42619,42621],{"class":35,"line":11471},[33,42614,35970],{"class":59},[33,42616,64],{"class":63},[33,42618,35975],{"class":59},[33,42620,2401],{"class":63},[33,42622,35980],{"class":59},[33,42624,42625],{"class":35,"line":11476},[33,42626,35985],{"class":87},[33,42628,42629,42631,42633,42635],{"class":35,"line":11482},[33,42630,583],{"class":39},[33,42632,109],{"class":59},[33,42634,35994],{"class":117},[33,42636,35997],{"class":59},[33,42638,42639],{"class":35,"line":11503},[33,42640,127],{"emptyLinePlaceholder":126},[33,42642,42643],{"class":35,"line":11509},[33,42644,36006],{"class":87},[33,42646,42647,42649,42651,42653,42655],{"class":35,"line":11523},[33,42648,133],{"class":63},[33,42650,32871],{"class":39},[33,42652,573],{"class":63},[33,42654,32876],{"class":117},[33,42656,143],{"class":59},[33,42658,42659],{"class":35,"line":11529},[33,42660,36023],{"class":87},[33,42662,42663,42665,42667],{"class":35,"line":11556},[33,42664,32940],{"class":59},[33,42666,64],{"class":63},[33,42668,42669],{"class":59},"VGG16()\n",[33,42671,42672],{"class":35,"line":11565},[33,42673,36036],{"class":87},[33,42675,42676],{"class":35,"line":11571},[33,42677,36041],{"class":87},[33,42679,42680,42682,42684],{"class":35,"line":11579},[33,42681,36046],{"class":59},[33,42683,36049],{"class":117},[33,42685,121],{"class":59},[33,42687,42688],{"class":35,"line":11584},[33,42689,36056],{"class":87},[33,42691,42692,42694,42696],{"class":35,"line":18259},[33,42693,35669],{"class":59},[33,42695,64],{"class":63},[33,42697,36065],{"class":59},[33,42699,42700],{"class":35,"line":18265},[33,42701,36070],{"class":87},[33,42703,42704],{"class":35,"line":18288},[33,42705,36075],{"class":59},[33,42707,42708],{"class":35,"line":18294},[33,42709,127],{"emptyLinePlaceholder":126},[33,42711,42712],{"class":35,"line":18317},[33,42713,36084],{"class":87},[33,42715,42716],{"class":35,"line":18331},[33,42717,36089],{"class":87},[33,42719,42720,42722,42724,42726,42728,42730,42732],{"class":35,"line":18351},[33,42721,32888],{"class":59},[33,42723,64],{"class":63},[33,42725,32895],{"class":117},[33,42727,3374],{"class":63},[33,42729,32900],{"class":59},[33,42731,270],{"class":63},[33,42733,35766],{"class":117},[33,42735,42736,42738,42740],{"class":35,"line":18357},[33,42737,32940],{"class":59},[33,42739,64],{"class":63},[33,42741,33939],{"class":59},[33,42743,42744],{"class":35,"line":18368},[33,42745,36118],{"class":87},[33,42747,42748],{"class":35,"line":18391},[33,42749,36123],{"class":87},[33,42751,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796],{"class":35,"line":18413},[33,42753,36128],{"class":59},[33,42755,64],{"class":63},[33,42757,2707],{"class":59},[33,42759,36135],{"class":117},[33,42761,2196],{"class":59},[33,42763,36140],{"class":117},[33,42765,2196],{"class":59},[33,42767,36145],{"class":117},[33,42769,2196],{"class":59},[33,42771,36150],{"class":117},[33,42773,2196],{"class":59},[33,42775,36155],{"class":117},[33,42777,2196],{"class":59},[33,42779,36160],{"class":117},[33,42781,2196],{"class":59},[33,42783,36165],{"class":117},[33,42785,2196],{"class":59},[33,42787,36170],{"class":117},[33,42789,2196],{"class":59},[33,42791,36175],{"class":117},[33,42793,2196],{"class":59},[33,42795,36180],{"class":117},[33,42797,34893],{"class":59},[33,42799,42800,42802],{"class":35,"line":18418},[33,42801,35825],{"class":63},[33,42803,34531],{"class":59},[33,42805,42806],{"class":35,"line":18424},[33,42807,36193],{"class":87},[33,42809,42810,42812,42814,42816],{"class":35,"line":18438},[33,42811,5066],{"class":63},[33,42813,36200],{"class":59},[33,42815,27699],{"class":63},[33,42817,35844],{"class":59},[33,42819,42820,42822,42824],{"class":35,"line":18451},[33,42821,34257],{"class":59},[33,42823,64],{"class":63},[33,42825,34262],{"class":59},[33,42827,42828,42830,42832],{"class":35,"line":18456},[33,42829,34272],{"class":59},[33,42831,64],{"class":63},[33,42833,34277],{"class":59},[33,42835,42836],{"class":35,"line":18470},[33,42837,127],{"emptyLinePlaceholder":126},[33,42839,42840],{"class":35,"line":18475},[33,42841,36229],{"class":87},[33,42843,42844],{"class":35,"line":18481},[33,42845,34522],{"class":59},[33,42847,42848],{"class":35,"line":18486},[33,42849,36238],{"class":87},[33,42851,42852,42854,42856],{"class":35,"line":18500},[33,42853,34307],{"class":59},[33,42855,64],{"class":63},[33,42857,34312],{"class":59},[33,42859,42860],{"class":35,"line":18505},[33,42861,36251],{"class":87},[33,42863,42864,42866,42868,42870,42872,42874,42876],{"class":35,"line":18510},[33,42865,34324],{"class":59},[33,42867,64],{"class":63},[33,42869,34329],{"class":59},[33,42871,34332],{"class":6877},[33,42873,64],{"class":63},[33,42875,2036],{"class":39},[33,42877,157],{"class":59},[33,42879,42880],{"class":35,"line":18524},[33,42881,36272],{"class":87},[33,42883,42884,42886,42888],{"class":35,"line":18536},[33,42885,36277],{"class":59},[33,42887,64],{"class":63},[33,42889,36282],{"class":59},[33,42891,42892,42894,42896],{"class":35,"line":18541},[33,42893,36287],{"class":59},[33,42895,64],{"class":63},[33,42897,36292],{"class":59},[33,42899,42900,42902,42904,42906,42908,42910,42912,42914],{"class":35,"line":18554},[33,42901,36297],{"class":39},[33,42903,109],{"class":59},[33,42905,36302],{"class":117},[33,42907,36305],{"class":59},[33,42909,36308],{"class":117},[33,42911,2196],{"class":59},[33,42913,36313],{"class":117},[33,42915,36316],{"class":59},[633,42917,42919],{"id":42918},"_23googlenet","2.3.GoogLeNet",[23653,42921,42923],{"id":42922},"_231原理","2.3.1.原理",[162,42925,42926],{},[165,42927,42928],{},"网络结构",[19,42930,42931],{},[3145,42932],{"alt":28,"src":42933},"\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,42935,42936],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42938,42939],{},[3145,42940],{"alt":28,"src":42941},"\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,42943,42944],{},[3145,42945],{"alt":28,"src":42946},"\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,42948,42949],{},[3145,42950],{"alt":28,"src":42951},"\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",[162,42953,42954],{"start":43},[165,42955,42956],{},"1x1卷积的优点",[19,42958,42959],{},[3145,42960],{"alt":28,"src":42961},"\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",[162,42963,42964],{"start":130},[165,42965,42966],{},"全局平均池化层优点",[19,42968,42969],{},[3145,42970],{"alt":28,"src":42971},"\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,42973,42974],{},[3145,42975],{"alt":28,"src":42976},"\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",[162,42978,42979],{"start":146},[165,42980,42981],{},"参数详细描述",[19,42983,42984],{},[3145,42985],{"alt":28,"src":42986},"\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,42988,42989],{},[3145,42990],{"alt":28,"src":42991},"\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,42993,42994],{},[3145,42995],{"alt":28,"src":42996},"\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,42998,42999],{},[3145,43000],{"alt":28,"src":43001},"\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,43003,43004],{},[3145,43005],{"alt":28,"src":43006},"\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,43008,43009],{},[3145,43010],{"alt":28,"src":43011},"\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,43013,43014],{},[3145,43015],{"alt":28,"src":43016},"\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,43018,43019],{},[3145,43020],{"alt":28,"src":43021},"\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,43023,43024],{},[3145,43025],{"alt":28,"src":43026},"\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,43028,43029],{},[3145,43030],{"alt":28,"src":43031},"\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,43033,43034],{},[3145,43035],{"alt":28,"src":43036},"\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,43038,43039],{},[3145,43040],{"alt":28,"src":43041},"\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,43043,43044],{},[3145,43045],{"alt":28,"src":43046},"\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,43048,43049],{},[3145,43050],{"alt":28,"src":43051},"\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,43053,43054],{},[3145,43055],{"alt":28,"src":43056},"\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,43058,43059],{},[3145,43060],{"alt":28,"src":43061},"\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,43063,43064],{},[3145,43065],{"alt":28,"src":43066},"\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,43068,43069],{},[3145,43070],{"alt":28,"src":43071},"\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,43073,43074],{},[3145,43075],{"alt":28,"src":43076},"\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,43078,43079],{},[3145,43080],{"alt":28,"src":43081},"\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,43083,43084],{},[3145,43085],{"alt":28,"src":43086},"\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",[23653,43088,43090],{"id":43089},"_232代码实现","2.3.2.代码实现",[162,43092,43093],{},[165,43094,32362],{},[19,43096,43097],{},"根据原理一步一步搭建即可",[23,43099,43101],{"className":25,"code":43100,"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,43102,43103,43109,43119,43129,43133,43150,43159,43174,43184,43189,43222,43227,43264,43311,43316,43352,43399,43404,43409,43444,43476,43480,43488,43504,43528,43553,43574,43579,43594,43598,43602,43607,43624,43629,43638,43653,43664,43708,43712,43740,43744,43755,43783,43787,43824,43828,43856,43860,43871,43907,43939,43967,43971,43982,44016,44048,44080,44113,44147,44175,44179,44190,44223,44255,44269,44273,44286,44290,44295,44307,44315,44337,44342,44347,44352,44357,44362,44367,44381,44389,44398,44411,44426,44435,44439,44447,44458,44469,44480,44491,44502,44508,44512,44517,44529,44549,44558],{"__ignoreMap":28},[33,43104,43105,43107],{"class":35,"line":36},[33,43106,32045],{"class":63},[33,43108,32048],{"class":59},[33,43110,43111,43113,43115,43117],{"class":35,"line":43},[33,43112,32388],{"class":63},[33,43114,32391],{"class":59},[33,43116,32045],{"class":63},[33,43118,32396],{"class":59},[33,43120,43121,43123,43125,43127],{"class":35,"line":130},[33,43122,32388],{"class":63},[33,43124,32408],{"class":59},[33,43126,32045],{"class":63},[33,43128,32413],{"class":59},[33,43130,43131],{"class":35,"line":146},[33,43132,127],{"emptyLinePlaceholder":126},[33,43134,43135,43137,43140,43142,43144,43146,43148],{"class":35,"line":267},[33,43136,16352],{"class":63},[33,43138,43139],{"class":3632}," Inception",[33,43141,109],{"class":59},[33,43143,32429],{"class":3632},[33,43145,2375],{"class":59},[33,43147,32434],{"class":3632},[33,43149,32437],{"class":59},[33,43151,43152,43154,43156],{"class":35,"line":275},[33,43153,32452],{"class":63},[33,43155,32455],{"class":39},[33,43157,43158],{"class":59},"(self,in_channels,c1,c2,c3,c4):\n",[33,43160,43161,43163,43166,43168,43170,43172],{"class":35,"line":392},[33,43162,32468],{"class":39},[33,43164,43165],{"class":59},"(Inception,",[33,43167,32474],{"class":39},[33,43169,32477],{"class":59},[33,43171,32480],{"class":39},[33,43173,943],{"class":59},[33,43175,43176,43178,43180,43182],{"class":35,"line":406},[33,43177,32496],{"class":39},[33,43179,36418],{"class":59},[33,43181,64],{"class":63},[33,43183,36423],{"class":59},[33,43185,43186],{"class":35,"line":418},[33,43187,43188],{"class":87},"        # 路线1：定义1*1卷积\n",[33,43190,43191,43193,43196,43198,43200,43202,43204,43207,43209,43211,43214,43216,43218,43220],{"class":35,"line":425},[33,43192,32496],{"class":39},[33,43194,43195],{"class":59},".p1_1",[33,43197,64],{"class":63},[33,43199,32504],{"class":59},[33,43201,32507],{"class":6877},[33,43203,64],{"class":63},[33,43205,43206],{"class":59},"in_channels,",[33,43208,32516],{"class":6877},[33,43210,64],{"class":63},[33,43212,43213],{"class":59},"c1,",[33,43215,32525],{"class":6877},[33,43217,64],{"class":63},[33,43219,2036],{"class":39},[33,43221,157],{"class":59},[33,43223,43224],{"class":35,"line":1147},[33,43225,43226],{"class":87},"        # 路线2：定义1*1卷积和3*3\n",[33,43228,43229,43231,43234,43236,43238,43240,43242,43244,43246,43248,43251,43253,43256,43258,43260,43262],{"class":35,"line":1329},[33,43230,32496],{"class":39},[33,43232,43233],{"class":59},".p2_1",[33,43235,64],{"class":63},[33,43237,32504],{"class":59},[33,43239,32507],{"class":6877},[33,43241,64],{"class":63},[33,43243,43206],{"class":59},[33,43245,32516],{"class":6877},[33,43247,64],{"class":63},[33,43249,43250],{"class":59},"c2[",[33,43252,2010],{"class":39},[33,43254,43255],{"class":59},"],",[33,43257,32525],{"class":6877},[33,43259,64],{"class":63},[33,43261,2036],{"class":39},[33,43263,157],{"class":59},[33,43265,43266,43268,43271,43273,43275,43277,43279,43281,43283,43285,43287,43289,43291,43293,43295,43297,43299,43301,43303,43305,43307,43309],{"class":35,"line":1341},[33,43267,32496],{"class":39},[33,43269,43270],{"class":59},".p2_2",[33,43272,64],{"class":63},[33,43274,32504],{"class":59},[33,43276,32507],{"class":6877},[33,43278,64],{"class":63},[33,43280,43250],{"class":59},[33,43282,2010],{"class":39},[33,43284,43255],{"class":59},[33,43286,32516],{"class":6877},[33,43288,64],{"class":63},[33,43290,43250],{"class":59},[33,43292,2036],{"class":39},[33,43294,43255],{"class":59},[33,43296,32525],{"class":6877},[33,43298,64],{"class":63},[33,43300,1891],{"class":39},[33,43302,2196],{"class":59},[33,43304,32534],{"class":6877},[33,43306,64],{"class":63},[33,43308,2036],{"class":39},[33,43310,157],{"class":59},[33,43312,43313],{"class":35,"line":1348},[33,43314,43315],{"class":87},"        # 路线3：定义1*1卷积和5*5\n",[33,43317,43318,43320,43323,43325,43327,43329,43331,43333,43335,43337,43340,43342,43344,43346,43348,43350],{"class":35,"line":1529},[33,43319,32496],{"class":39},[33,43321,43322],{"class":59},".p3_1",[33,43324,64],{"class":63},[33,43326,32504],{"class":59},[33,43328,32507],{"class":6877},[33,43330,64],{"class":63},[33,43332,43206],{"class":59},[33,43334,32516],{"class":6877},[33,43336,64],{"class":63},[33,43338,43339],{"class":59},"c3[",[33,43341,2010],{"class":39},[33,43343,43255],{"class":59},[33,43345,32525],{"class":6877},[33,43347,64],{"class":63},[33,43349,2036],{"class":39},[33,43351,157],{"class":59},[33,43353,43354,43356,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383,43385,43387,43389,43391,43393,43395,43397],{"class":35,"line":1546},[33,43355,32496],{"class":39},[33,43357,43358],{"class":59},".p3_2",[33,43360,64],{"class":63},[33,43362,32504],{"class":59},[33,43364,32507],{"class":6877},[33,43366,64],{"class":63},[33,43368,43339],{"class":59},[33,43370,2010],{"class":39},[33,43372,43255],{"class":59},[33,43374,32516],{"class":6877},[33,43376,64],{"class":63},[33,43378,43339],{"class":59},[33,43380,2036],{"class":39},[33,43382,43255],{"class":59},[33,43384,32525],{"class":6877},[33,43386,64],{"class":63},[33,43388,2137],{"class":39},[33,43390,2196],{"class":59},[33,43392,32534],{"class":6877},[33,43394,64],{"class":63},[33,43396,1897],{"class":39},[33,43398,157],{"class":59},[33,43400,43401],{"class":35,"line":1551},[33,43402,43403],{"class":87},"        # 路线4：定义3*3最大池化和1*1卷积\n",[33,43405,43406],{"class":35,"line":1566},[33,43407,43408],{"class":87},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[33,43410,43411,43413,43416,43418,43420,43422,43424,43426,43428,43430,43432,43434,43436,43438,43440,43442],{"class":35,"line":1578},[33,43412,32496],{"class":39},[33,43414,43415],{"class":59},".p4_1",[33,43417,64],{"class":63},[33,43419,36476],{"class":59},[33,43421,32525],{"class":6877},[33,43423,64],{"class":63},[33,43425,1891],{"class":39},[33,43427,2196],{"class":59},[33,43429,32580],{"class":6877},[33,43431,64],{"class":63},[33,43433,2036],{"class":39},[33,43435,2196],{"class":59},[33,43437,32534],{"class":6877},[33,43439,64],{"class":63},[33,43441,2036],{"class":39},[33,43443,157],{"class":59},[33,43445,43446,43448,43451,43453,43455,43457,43459,43461,43463,43465,43468,43470,43472,43474],{"class":35,"line":1583},[33,43447,32496],{"class":39},[33,43449,43450],{"class":59},".p4_2",[33,43452,64],{"class":63},[33,43454,32504],{"class":59},[33,43456,32507],{"class":6877},[33,43458,64],{"class":63},[33,43460,43206],{"class":59},[33,43462,32516],{"class":6877},[33,43464,64],{"class":63},[33,43466,43467],{"class":59},"c4,",[33,43469,32525],{"class":6877},[33,43471,64],{"class":63},[33,43473,2036],{"class":39},[33,43475,157],{"class":59},[33,43477,43478],{"class":35,"line":3369},[33,43479,127],{"emptyLinePlaceholder":126},[33,43481,43482,43484,43486],{"class":35,"line":3396},[33,43483,32452],{"class":63},[33,43485,32744],{"class":3632},[33,43487,32747],{"class":59},[33,43489,43490,43493,43495,43497,43499,43501],{"class":35,"line":3401},[33,43491,43492],{"class":59},"        p1",[33,43494,64],{"class":63},[33,43496,32474],{"class":39},[33,43498,36831],{"class":59},[33,43500,32474],{"class":39},[33,43502,43503],{"class":59},".p1_1(x))\n",[33,43505,43506,43508,43510,43512,43514,43516,43519,43521,43523,43525],{"class":35,"line":3418},[33,43507,8745],{"class":59},[33,43509,64],{"class":63},[33,43511,32474],{"class":39},[33,43513,36831],{"class":59},[33,43515,32474],{"class":39},[33,43517,43518],{"class":59},".p2_2(",[33,43520,32474],{"class":39},[33,43522,36831],{"class":59},[33,43524,32474],{"class":39},[33,43526,43527],{"class":59},".p2_1(x))))\n",[33,43529,43530,43533,43535,43537,43539,43541,43544,43546,43548,43550],{"class":35,"line":3423},[33,43531,43532],{"class":59},"        p3",[33,43534,64],{"class":63},[33,43536,32474],{"class":39},[33,43538,36831],{"class":59},[33,43540,32474],{"class":39},[33,43542,43543],{"class":59},".p3_2(",[33,43545,32474],{"class":39},[33,43547,36831],{"class":59},[33,43549,32474],{"class":39},[33,43551,43552],{"class":59},".p3_1(x))))\n",[33,43554,43555,43558,43560,43562,43564,43566,43569,43571],{"class":35,"line":3428},[33,43556,43557],{"class":59},"        p4",[33,43559,64],{"class":63},[33,43561,32474],{"class":39},[33,43563,36831],{"class":59},[33,43565,32474],{"class":39},[33,43567,43568],{"class":59},".p4_2(",[33,43570,32474],{"class":39},[33,43572,43573],{"class":59},".p4_1(x)))\n",[33,43575,43576],{"class":35,"line":3433},[33,43577,43578],{"class":87},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[33,43580,43581,43583,43586,43588,43590,43592],{"class":35,"line":3447},[33,43582,16410],{"class":63},[33,43584,43585],{"class":59}," torch.cat((p1,p2,p3,p4),",[33,43587,34332],{"class":6877},[33,43589,64],{"class":63},[33,43591,2036],{"class":39},[33,43593,157],{"class":59},[33,43595,43596],{"class":35,"line":3452},[33,43597,127],{"emptyLinePlaceholder":126},[33,43599,43600],{"class":35,"line":4243},[33,43601,127],{"emptyLinePlaceholder":126},[33,43603,43604],{"class":35,"line":4257},[33,43605,43606],{"class":87},"# 搭建GoogLeNet网络\n",[33,43608,43609,43611,43614,43616,43618,43620,43622],{"class":35,"line":4265},[33,43610,16352],{"class":63},[33,43612,43613],{"class":3632}," GoogLeNet",[33,43615,109],{"class":59},[33,43617,32429],{"class":3632},[33,43619,2375],{"class":59},[33,43621,32434],{"class":3632},[33,43623,32437],{"class":59},[33,43625,43626],{"class":35,"line":4270},[33,43627,43628],{"class":87},"    # 必须把Inception导入到里边\n",[33,43630,43631,43633,43635],{"class":35,"line":4276},[33,43632,32452],{"class":63},[33,43634,32455],{"class":39},[33,43636,43637],{"class":59},"(self,Inception):\n",[33,43639,43640,43642,43645,43647,43649,43651],{"class":35,"line":4282},[33,43641,32468],{"class":39},[33,43643,43644],{"class":59},"(GoogLeNet,",[33,43646,32474],{"class":39},[33,43648,32477],{"class":59},[33,43650,32480],{"class":39},[33,43652,943],{"class":59},[33,43654,43655,43657,43660,43662],{"class":35,"line":4287},[33,43656,32496],{"class":39},[33,43658,43659],{"class":59},".b1",[33,43661,64],{"class":63},[33,43663,39656],{"class":59},[33,43665,43666,43668,43670,43672,43674,43676,43678,43680,43682,43684,43686,43688,43690,43692,43694,43696,43698,43700,43702,43704,43706],{"class":35,"line":9608},[33,43667,39661],{"class":59},[33,43669,32507],{"class":6877},[33,43671,64],{"class":63},[33,43673,2036],{"class":39},[33,43675,2196],{"class":59},[33,43677,32516],{"class":6877},[33,43679,64],{"class":63},[33,43681,2022],{"class":39},[33,43683,2196],{"class":59},[33,43685,32525],{"class":6877},[33,43687,64],{"class":63},[33,43689,2187],{"class":39},[33,43691,2196],{"class":59},[33,43693,32580],{"class":6877},[33,43695,64],{"class":63},[33,43697,1897],{"class":39},[33,43699,2196],{"class":59},[33,43701,32534],{"class":6877},[33,43703,64],{"class":63},[33,43705,1891],{"class":39},[33,43707,39694],{"class":59},[33,43709,43710],{"class":35,"line":9632},[33,43711,39699],{"class":59},[33,43713,43714,43716,43718,43720,43722,43724,43726,43728,43730,43732,43734,43736,43738],{"class":35,"line":9637},[33,43715,39744],{"class":59},[33,43717,32525],{"class":6877},[33,43719,64],{"class":63},[33,43721,1891],{"class":39},[33,43723,2196],{"class":59},[33,43725,32580],{"class":6877},[33,43727,64],{"class":63},[33,43729,1897],{"class":39},[33,43731,2196],{"class":59},[33,43733,32534],{"class":6877},[33,43735,64],{"class":63},[33,43737,2036],{"class":39},[33,43739,157],{"class":59},[33,43741,43742],{"class":35,"line":9643},[33,43743,39773],{"class":59},[33,43745,43746,43748,43751,43753],{"class":35,"line":9670},[33,43747,32496],{"class":39},[33,43749,43750],{"class":59},".b2",[33,43752,64],{"class":63},[33,43754,39656],{"class":59},[33,43756,43757,43759,43761,43763,43765,43767,43769,43771,43773,43775,43777,43779,43781],{"class":35,"line":9675},[33,43758,39661],{"class":59},[33,43760,32507],{"class":6877},[33,43762,64],{"class":63},[33,43764,2022],{"class":39},[33,43766,2196],{"class":59},[33,43768,32516],{"class":6877},[33,43770,64],{"class":63},[33,43772,2022],{"class":39},[33,43774,2196],{"class":59},[33,43776,32525],{"class":6877},[33,43778,64],{"class":63},[33,43780,2036],{"class":39},[33,43782,39694],{"class":59},[33,43784,43785],{"class":35,"line":9681},[33,43786,39699],{"class":59},[33,43788,43789,43791,43793,43795,43797,43799,43801,43803,43806,43808,43810,43812,43814,43816,43818,43820,43822],{"class":35,"line":9693},[33,43790,39661],{"class":59},[33,43792,32507],{"class":6877},[33,43794,64],{"class":63},[33,43796,2022],{"class":39},[33,43798,2196],{"class":59},[33,43800,32516],{"class":6877},[33,43802,64],{"class":63},[33,43804,43805],{"class":39},"192",[33,43807,2196],{"class":59},[33,43809,32525],{"class":6877},[33,43811,64],{"class":63},[33,43813,1891],{"class":39},[33,43815,2196],{"class":59},[33,43817,32534],{"class":6877},[33,43819,64],{"class":63},[33,43821,2036],{"class":39},[33,43823,39694],{"class":59},[33,43825,43826],{"class":35,"line":9705},[33,43827,39699],{"class":59},[33,43829,43830,43832,43834,43836,43838,43840,43842,43844,43846,43848,43850,43852,43854],{"class":35,"line":9717},[33,43831,39744],{"class":59},[33,43833,32525],{"class":6877},[33,43835,64],{"class":63},[33,43837,1891],{"class":39},[33,43839,2196],{"class":59},[33,43841,32580],{"class":6877},[33,43843,64],{"class":63},[33,43845,1897],{"class":39},[33,43847,2196],{"class":59},[33,43849,32534],{"class":6877},[33,43851,64],{"class":63},[33,43853,2036],{"class":39},[33,43855,157],{"class":59},[33,43857,43858],{"class":35,"line":11375},[33,43859,39773],{"class":59},[33,43861,43862,43864,43867,43869],{"class":35,"line":11400},[33,43863,32496],{"class":39},[33,43865,43866],{"class":59},".b3",[33,43868,64],{"class":63},[33,43870,39656],{"class":59},[33,43872,43873,43876,43878,43880,43882,43885,43887,43889,43891,43894,43896,43898,43900,43903,43905],{"class":35,"line":11423},[33,43874,43875],{"class":59},"            Inception(",[33,43877,43805],{"class":39},[33,43879,2196],{"class":59},[33,43881,2022],{"class":39},[33,43883,43884],{"class":59},",(",[33,43886,2028],{"class":39},[33,43888,2196],{"class":59},[33,43890,33720],{"class":39},[33,43892,43893],{"class":59},"),(",[33,43895,2418],{"class":39},[33,43897,2196],{"class":59},[33,43899,2016],{"class":39},[33,43901,43902],{"class":59},"),",[33,43904,2016],{"class":39},[33,43906,39694],{"class":59},[33,43908,43909,43911,43913,43915,43917,43919,43921,43923,43925,43927,43929,43931,43933,43935,43937],{"class":35,"line":11447},[33,43910,43875],{"class":59},[33,43912,36517],{"class":39},[33,43914,2196],{"class":59},[33,43916,33720],{"class":39},[33,43918,43884],{"class":59},[33,43920,33720],{"class":39},[33,43922,2196],{"class":59},[33,43924,43805],{"class":39},[33,43926,43893],{"class":59},[33,43928,2016],{"class":39},[33,43930,2196],{"class":59},[33,43932,2028],{"class":39},[33,43934,43902],{"class":59},[33,43936,2022],{"class":39},[33,43938,39694],{"class":59},[33,43940,43941,43943,43945,43947,43949,43951,43953,43955,43957,43959,43961,43963,43965],{"class":35,"line":11452},[33,43942,39744],{"class":59},[33,43944,32525],{"class":6877},[33,43946,64],{"class":63},[33,43948,1891],{"class":39},[33,43950,2196],{"class":59},[33,43952,32580],{"class":6877},[33,43954,64],{"class":63},[33,43956,1897],{"class":39},[33,43958,2196],{"class":59},[33,43960,32534],{"class":6877},[33,43962,64],{"class":63},[33,43964,2036],{"class":39},[33,43966,157],{"class":59},[33,43968,43969],{"class":35,"line":11457},[33,43970,39773],{"class":59},[33,43972,43973,43975,43978,43980],{"class":35,"line":11462},[33,43974,32496],{"class":39},[33,43976,43977],{"class":59},".b4",[33,43979,64],{"class":63},[33,43981,39656],{"class":59},[33,43983,43984,43986,43989,43991,43993,43995,43997,43999,44002,44004,44006,44008,44010,44012,44014],{"class":35,"line":11471},[33,43985,43875],{"class":59},[33,43987,43988],{"class":39},"480",[33,43990,2196],{"class":59},[33,43992,43805],{"class":39},[33,43994,43884],{"class":59},[33,43996,2028],{"class":39},[33,43998,2196],{"class":59},[33,44000,44001],{"class":39},"208",[33,44003,43893],{"class":59},[33,44005,2418],{"class":39},[33,44007,2196],{"class":59},[33,44009,2424],{"class":39},[33,44011,43902],{"class":59},[33,44013,2022],{"class":39},[33,44015,39694],{"class":59},[33,44017,44018,44020,44022,44024,44026,44028,44030,44032,44034,44036,44038,44040,44042,44044,44046],{"class":35,"line":11476},[33,44019,43875],{"class":59},[33,44021,40104],{"class":39},[33,44023,2196],{"class":59},[33,44025,22703],{"class":39},[33,44027,43884],{"class":59},[33,44029,2435],{"class":39},[33,44031,2196],{"class":59},[33,44033,33151],{"class":39},[33,44035,43893],{"class":59},[33,44037,2617],{"class":39},[33,44039,2196],{"class":59},[33,44041,2022],{"class":39},[33,44043,43902],{"class":59},[33,44045,2022],{"class":39},[33,44047,39694],{"class":59},[33,44049,44050,44052,44054,44056,44058,44060,44062,44064,44066,44068,44070,44072,44074,44076,44078],{"class":35,"line":11482},[33,44051,43875],{"class":59},[33,44053,40104],{"class":39},[33,44055,2196],{"class":59},[33,44057,33720],{"class":39},[33,44059,43884],{"class":59},[33,44061,33720],{"class":39},[33,44063,2196],{"class":59},[33,44065,36517],{"class":39},[33,44067,43893],{"class":59},[33,44069,2617],{"class":39},[33,44071,2196],{"class":59},[33,44073,2022],{"class":39},[33,44075,43902],{"class":59},[33,44077,2022],{"class":39},[33,44079,39694],{"class":59},[33,44081,44082,44084,44086,44088,44090,44092,44094,44096,44099,44101,44103,44105,44107,44109,44111],{"class":35,"line":11503},[33,44083,43875],{"class":59},[33,44085,40104],{"class":39},[33,44087,2196],{"class":59},[33,44089,2435],{"class":39},[33,44091,43884],{"class":59},[33,44093,33720],{"class":39},[33,44095,2196],{"class":59},[33,44097,44098],{"class":39},"288",[33,44100,43893],{"class":59},[33,44102,2016],{"class":39},[33,44104,2196],{"class":59},[33,44106,2022],{"class":39},[33,44108,43902],{"class":59},[33,44110,2022],{"class":39},[33,44112,39694],{"class":59},[33,44114,44115,44117,44120,44122,44124,44126,44128,44130,44133,44135,44137,44139,44141,44143,44145],{"class":35,"line":11509},[33,44116,43875],{"class":59},[33,44118,44119],{"class":39},"528",[33,44121,2196],{"class":59},[33,44123,36517],{"class":39},[33,44125,43884],{"class":59},[33,44127,22703],{"class":39},[33,44129,2196],{"class":59},[33,44131,44132],{"class":39},"320",[33,44134,43893],{"class":59},[33,44136,2016],{"class":39},[33,44138,2196],{"class":59},[33,44140,33720],{"class":39},[33,44142,43902],{"class":59},[33,44144,33720],{"class":39},[33,44146,39694],{"class":59},[33,44148,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173],{"class":35,"line":11523},[33,44150,39744],{"class":59},[33,44152,32525],{"class":6877},[33,44154,64],{"class":63},[33,44156,1891],{"class":39},[33,44158,2196],{"class":59},[33,44160,32580],{"class":6877},[33,44162,64],{"class":63},[33,44164,1897],{"class":39},[33,44166,2196],{"class":59},[33,44168,32534],{"class":6877},[33,44170,64],{"class":63},[33,44172,2036],{"class":39},[33,44174,157],{"class":59},[33,44176,44177],{"class":35,"line":11529},[33,44178,39773],{"class":59},[33,44180,44181,44183,44186,44188],{"class":35,"line":11556},[33,44182,32496],{"class":39},[33,44184,44185],{"class":59},".b5",[33,44187,64],{"class":63},[33,44189,39656],{"class":59},[33,44191,44192,44194,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221],{"class":35,"line":11565},[33,44193,43875],{"class":59},[33,44195,44196],{"class":39},"832",[33,44198,2196],{"class":59},[33,44200,36517],{"class":39},[33,44202,43884],{"class":59},[33,44204,22703],{"class":39},[33,44206,2196],{"class":59},[33,44208,44132],{"class":39},[33,44210,43893],{"class":59},[33,44212,2016],{"class":39},[33,44214,2196],{"class":59},[33,44216,33720],{"class":39},[33,44218,43902],{"class":59},[33,44220,33720],{"class":39},[33,44222,39694],{"class":59},[33,44224,44225,44227,44229,44231,44233,44235,44237,44239,44241,44243,44245,44247,44249,44251,44253],{"class":35,"line":11571},[33,44226,43875],{"class":59},[33,44228,44196],{"class":39},[33,44230,2196],{"class":59},[33,44232,36587],{"class":39},[33,44234,43884],{"class":59},[33,44236,43805],{"class":39},[33,44238,2196],{"class":59},[33,44240,36587],{"class":39},[33,44242,43893],{"class":59},[33,44244,2424],{"class":39},[33,44246,2196],{"class":59},[33,44248,33720],{"class":39},[33,44250,43902],{"class":59},[33,44252,33720],{"class":39},[33,44254,39694],{"class":59},[33,44256,44257,44260,44262,44264,44266],{"class":35,"line":11579},[33,44258,44259],{"class":59},"            nn.AdaptiveAvgPool2d((",[33,44261,2036],{"class":39},[33,44263,2196],{"class":59},[33,44265,2036],{"class":39},[33,44267,44268],{"class":59},")),\n",[33,44270,44271],{"class":35,"line":11584},[33,44272,40437],{"class":59},[33,44274,44275,44277,44280,44282,44284],{"class":35,"line":18259},[33,44276,40442],{"class":59},[33,44278,44279],{"class":39},"1024",[33,44281,2196],{"class":59},[33,44283,2264],{"class":39},[33,44285,157],{"class":59},[33,44287,44288],{"class":35,"line":18265},[33,44289,39773],{"class":59},[33,44291,44292],{"class":35,"line":18288},[33,44293,44294],{"class":87},"        # 对模型参数初始化\n",[33,44296,44297,44299,44301,44303,44305],{"class":35,"line":18294},[33,44298,5066],{"class":63},[33,44300,40515],{"class":59},[33,44302,27699],{"class":63},[33,44304,40520],{"class":39},[33,44306,40523],{"class":59},[33,44308,44309,44311,44313],{"class":35,"line":18317},[33,44310,6303],{"class":63},[33,44312,40535],{"class":39},[33,44314,40538],{"class":59},[33,44316,44317,44319,44322,44324,44327,44329,44331,44333,44335],{"class":35,"line":18331},[33,44318,40548],{"class":59},[33,44320,44321],{"class":6877},"mode",[33,44323,64],{"class":63},[33,44325,44326],{"class":117},"'fan_out'",[33,44328,2196],{"class":59},[33,44330,40551],{"class":6877},[33,44332,64],{"class":63},[33,44334,40556],{"class":117},[33,44336,157],{"class":59},[33,44338,44339],{"class":35,"line":18351},[33,44340,44341],{"class":87},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[33,44343,44344],{"class":35,"line":18357},[33,44345,44346],{"class":87},"                # ② mode = 'fan_out'决定使用的fan值：\n",[33,44348,44349],{"class":35,"line":18368},[33,44350,44351],{"class":87},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[33,44353,44354],{"class":35,"line":18391},[33,44355,44356],{"class":87},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[33,44358,44359],{"class":35,"line":18413},[33,44360,44361],{"class":87},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[33,44363,44364],{"class":35,"line":18418},[33,44365,44366],{"class":87},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[33,44368,44369,44371,44373,44375,44377,44379],{"class":35,"line":18424},[33,44370,40568],{"class":63},[33,44372,40571],{"class":59},[33,44374,40574],{"class":63},[33,44376,783],{"class":63},[33,44378,40579],{"class":39},[33,44380,143],{"class":59},[33,44382,44383,44385,44387],{"class":35,"line":18438},[33,44384,40591],{"class":59},[33,44386,2010],{"class":39},[33,44388,157],{"class":59},[33,44390,44391,44394,44396],{"class":35,"line":18451},[33,44392,44393],{"class":63},"                elif",[33,44395,40535],{"class":39},[33,44397,40610],{"class":59},[33,44399,44400,44403,44405,44407,44409],{"class":35,"line":18456},[33,44401,44402],{"class":59},"                    nn.init.normal_(m.weight,",[33,44404,2010],{"class":39},[33,44406,2196],{"class":59},[33,44408,40632],{"class":39},[33,44410,157],{"class":59},[33,44412,44413,44416,44418,44420,44422,44424],{"class":35,"line":18470},[33,44414,44415],{"class":63},"                    if",[33,44417,40571],{"class":59},[33,44419,40574],{"class":63},[33,44421,783],{"class":63},[33,44423,40579],{"class":39},[33,44425,143],{"class":59},[33,44427,44428,44431,44433],{"class":35,"line":18475},[33,44429,44430],{"class":59},"                        nn.init.constant_(m.bias,",[33,44432,2010],{"class":39},[33,44434,157],{"class":59},[33,44436,44437],{"class":35,"line":18481},[33,44438,36812],{"class":87},[33,44440,44441,44443,44445],{"class":35,"line":18486},[33,44442,32452],{"class":63},[33,44444,32744],{"class":3632},[33,44446,32747],{"class":59},[33,44448,44449,44451,44453,44455],{"class":35,"line":18500},[33,44450,32752],{"class":59},[33,44452,64],{"class":63},[33,44454,32474],{"class":39},[33,44456,44457],{"class":59},".b1(x)\n",[33,44459,44460,44462,44464,44466],{"class":35,"line":18505},[33,44461,32752],{"class":59},[33,44463,64],{"class":63},[33,44465,32474],{"class":39},[33,44467,44468],{"class":59},".b2(x)\n",[33,44470,44471,44473,44475,44477],{"class":35,"line":18510},[33,44472,32752],{"class":59},[33,44474,64],{"class":63},[33,44476,32474],{"class":39},[33,44478,44479],{"class":59},".b3(x)\n",[33,44481,44482,44484,44486,44488],{"class":35,"line":18524},[33,44483,32752],{"class":59},[33,44485,64],{"class":63},[33,44487,32474],{"class":39},[33,44489,44490],{"class":59},".b4(x)\n",[33,44492,44493,44495,44497,44499],{"class":35,"line":18536},[33,44494,32752],{"class":59},[33,44496,64],{"class":63},[33,44498,32474],{"class":39},[33,44500,44501],{"class":59},".b5(x)\n",[33,44503,44504,44506],{"class":35,"line":18541},[33,44505,16410],{"class":63},[33,44507,32860],{"class":59},[33,44509,44510],{"class":35,"line":18554},[33,44511,127],{"emptyLinePlaceholder":126},[33,44513,44514],{"class":35,"line":18559},[33,44515,44516],{"class":87},"# 模型展示\n",[33,44518,44519,44521,44523,44525,44527],{"class":35,"line":18564},[33,44520,133],{"class":63},[33,44522,32871],{"class":39},[33,44524,573],{"class":63},[33,44526,32876],{"class":117},[33,44528,143],{"class":59},[33,44530,44531,44533,44535,44537,44539,44541,44543,44545,44547],{"class":35,"line":18569},[33,44532,32888],{"class":59},[33,44534,64],{"class":63},[33,44536,32103],{"class":59},[33,44538,32895],{"class":117},[33,44540,3374],{"class":63},[33,44542,32900],{"class":59},[33,44544,270],{"class":63},[33,44546,32128],{"class":117},[33,44548,157],{"class":59},[33,44550,44551,44553,44555],{"class":35,"line":18582},[33,44552,32940],{"class":59},[33,44554,64],{"class":63},[33,44556,44557],{"class":59},"GoogLeNet(Inception).to(device)\n",[33,44559,44560,44562,44564,44566,44568,44570,44572,44574],{"class":35,"line":18587},[33,44561,149],{"class":39},[33,44563,32952],{"class":59},[33,44565,2036],{"class":39},[33,44567,2196],{"class":59},[33,44569,33151],{"class":39},[33,44571,2196],{"class":59},[33,44573,33151],{"class":39},[33,44575,32965],{"class":59},[162,44577,44578],{"start":43},[165,44579,40829],{},[23,44581,44583],{"className":25,"code":44582,"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,44584,44585,44591,44597,44607,44613,44623,44633,44643,44653,44663,44667,44678,44688,44692,44696,44700,44708,44720,44730,44746,44756,44788,44802,44812,44822,44826,44836,44850,44860,44870,44880,44886,44890,44894,44898,44902,44906,44914,44934,44938,44942,44946,44950,44954,44970,44974,44978,44986,44990,44994,45002,45006,45010,45014,45022,45026,45030,45034,45038,45046,45050,45058,45062,45070,45074,45082,45086,45094,45098,45102,45110,45114,45118,45122,45134,45158,45172,45176,45180,45184,45192,45196,45204,45208,45216,45220,45228,45232,45240,45244,45252,45256,45268,45272,45280,45284,45292,45296,45300,45304,45308,45316,45320,45336,45340,45348,45352,45356,45360,45364,45368,45372,45376,45392,45396,45408,45412,45424,45428,45440,45444,45452,45456,45464,45468,45472,45476,45482,45486,45494,45498,45514,45518,45526,45530,45546,45558,45562,45574,45578,45582,45590,45594,45598,45606,45610,45618,45622,45630,45634,45638,45680,45722,45726,45730,45746,45750,45766,45770,45774,45782,45786,45790,45802,45840,45844,45848,45856,45860,45874,45884,45890,45896,45902,45908,45912,45916,45922,45926,45930,45938,45942,45960,45964,45968,45972,45988,45992,45996,46000,46004,46008,46028,46048,46052,46056,46060,46068,46076,46080,46096,46116,46136,46140,46144,46152,46160,46164,46168,46172,46184,46188,46198,46206,46223],{"__ignoreMap":28},[33,44586,44587,44589],{"class":35,"line":36},[33,44588,32045],{"class":63},[33,44590,33472],{"class":59},[33,44592,44593,44595],{"class":35,"line":43},[33,44594,32045],{"class":63},[33,44596,33479],{"class":59},[33,44598,44599,44601,44603,44605],{"class":35,"line":130},[33,44600,32045],{"class":63},[33,44602,33490],{"class":59},[33,44604,33033],{"class":63},[33,44606,33495],{"class":59},[33,44608,44609,44611],{"class":35,"line":146},[33,44610,32045],{"class":63},[33,44612,32048],{"class":59},[33,44614,44615,44617,44619,44621],{"class":35,"line":267},[33,44616,32388],{"class":63},[33,44618,33065],{"class":59},[33,44620,32045],{"class":63},[33,44622,33512],{"class":59},[33,44624,44625,44627,44629,44631],{"class":35,"line":275},[33,44626,32388],{"class":63},[33,44628,33018],{"class":59},[33,44630,32045],{"class":63},[33,44632,33023],{"class":59},[33,44634,44635,44637,44639,44641],{"class":35,"line":392},[33,44636,32388],{"class":63},[33,44638,33048],{"class":59},[33,44640,32045],{"class":63},[33,44642,33053],{"class":59},[33,44644,44645,44647,44649,44651],{"class":35,"line":406},[33,44646,32045],{"class":63},[33,44648,33065],{"class":59},[33,44650,33033],{"class":63},[33,44652,33070],{"class":59},[33,44654,44655,44657,44659,44661],{"class":35,"line":418},[33,44656,32045],{"class":63},[33,44658,33082],{"class":59},[33,44660,33033],{"class":63},[33,44662,33087],{"class":59},[33,44664,44665],{"class":35,"line":425},[33,44666,33557],{"class":87},[33,44668,44669,44671,44673,44675],{"class":35,"line":1147},[33,44670,32388],{"class":63},[33,44672,33564],{"class":59},[33,44674,32045],{"class":63},[33,44676,44677],{"class":59}," GoogLeNet, Inception\n",[33,44679,44680,44682,44684,44686],{"class":35,"line":1329},[33,44681,32388],{"class":63},[33,44683,32391],{"class":59},[33,44685,32045],{"class":63},[33,44687,32396],{"class":59},[33,44689,44690],{"class":35,"line":1341},[33,44691,127],{"emptyLinePlaceholder":126},[33,44693,44694],{"class":35,"line":1348},[33,44695,127],{"emptyLinePlaceholder":126},[33,44697,44698],{"class":35,"line":1529},[33,44699,33592],{"class":87},[33,44701,44702,44704,44706],{"class":35,"line":1546},[33,44703,33597],{"class":63},[33,44705,33600],{"class":3632},[33,44707,33603],{"class":59},[33,44709,44710,44712,44714,44716,44718],{"class":35,"line":1551},[33,44711,33608],{"class":59},[33,44713,64],{"class":63},[33,44715,33105],{"class":59},[33,44717,33113],{"class":117},[33,44719,33116],{"class":59},[33,44721,44722,44724,44726,44728],{"class":35,"line":1566},[33,44723,33621],{"class":6877},[33,44725,64],{"class":63},[33,44727,33126],{"class":39},[33,44729,33116],{"class":59},[33,44731,44732,44734,44736,44738,44740,44742,44744],{"class":35,"line":1578},[33,44733,33632],{"class":6877},[33,44735,64],{"class":63},[33,44737,33143],{"class":59},[33,44739,33146],{"class":6877},[33,44741,64],{"class":63},[33,44743,37096],{"class":39},[33,44745,33154],{"class":59},[33,44747,44748,44750,44752,44754],{"class":35,"line":1583},[33,44749,33649],{"class":6877},[33,44751,64],{"class":63},[33,44753,33126],{"class":39},[33,44755,157],{"class":59},[33,44757,44758,44760,44762,44764,44766,44768,44770,44772,44774,44776,44778,44780,44782,44784,44786],{"class":35,"line":3369},[33,44759,33660],{"class":59},[33,44761,64],{"class":63},[33,44763,33665],{"class":59},[33,44765,33668],{"class":39},[33,44767,109],{"class":59},[33,44769,33673],{"class":39},[33,44771,1540],{"class":63},[33,44773,9018],{"class":39},[33,44775,33680],{"class":59},[33,44777,33668],{"class":39},[33,44779,109],{"class":59},[33,44781,33687],{"class":39},[33,44783,1540],{"class":63},[33,44785,9018],{"class":39},[33,44787,33694],{"class":59},[33,44789,44790,44792,44794,44796,44798,44800],{"class":35,"line":3396},[33,44791,33699],{"class":59},[33,44793,64],{"class":63},[33,44795,33704],{"class":59},[33,44797,33187],{"class":6877},[33,44799,64],{"class":63},[33,44801,33192],{"class":59},[33,44803,44804,44806,44808,44810],{"class":35,"line":3401},[33,44805,33715],{"class":6877},[33,44807,64],{"class":63},[33,44809,2016],{"class":39},[33,44811,33116],{"class":59},[33,44813,44814,44816,44818,44820],{"class":35,"line":3418},[33,44815,33727],{"class":6877},[33,44817,64],{"class":63},[33,44819,33126],{"class":39},[33,44821,33116],{"class":59},[33,44823,44824],{"class":35,"line":3423},[33,44825,33738],{"class":87},[33,44827,44828,44830,44832,44834],{"class":35,"line":3428},[33,44829,33743],{"class":6877},[33,44831,64],{"class":63},[33,44833,2213],{"class":39},[33,44835,157],{"class":59},[33,44837,44838,44840,44842,44844,44846,44848],{"class":35,"line":3433},[33,44839,33754],{"class":59},[33,44841,64],{"class":63},[33,44843,33184],{"class":59},[33,44845,33187],{"class":6877},[33,44847,64],{"class":63},[33,44849,33765],{"class":59},[33,44851,44852,44854,44856,44858],{"class":35,"line":3447},[33,44853,33770],{"class":6877},[33,44855,64],{"class":63},[33,44857,2016],{"class":39},[33,44859,33116],{"class":59},[33,44861,44862,44864,44866,44868],{"class":35,"line":3452},[33,44863,33781],{"class":6877},[33,44865,64],{"class":63},[33,44867,33126],{"class":39},[33,44869,33116],{"class":59},[33,44871,44872,44874,44876,44878],{"class":35,"line":4243},[33,44873,33792],{"class":6877},[33,44875,64],{"class":63},[33,44877,2213],{"class":39},[33,44879,157],{"class":59},[33,44881,44882,44884],{"class":35,"line":4257},[33,44883,5752],{"class":63},[33,44885,33805],{"class":59},[33,44887,44888],{"class":35,"line":4265},[33,44889,127],{"emptyLinePlaceholder":126},[33,44891,44892],{"class":35,"line":4270},[33,44893,33814],{"class":87},[33,44895,44896],{"class":35,"line":4276},[33,44897,33819],{"class":87},[33,44899,44900],{"class":35,"line":4282},[33,44901,127],{"emptyLinePlaceholder":126},[33,44903,44904],{"class":35,"line":4287},[33,44905,33828],{"class":87},[33,44907,44908,44910,44912],{"class":35,"line":9608},[33,44909,33597],{"class":63},[33,44911,33835],{"class":3632},[33,44913,33838],{"class":59},[33,44915,44916,44918,44920,44922,44924,44926,44928,44930,44932],{"class":35,"line":9632},[33,44917,32888],{"class":59},[33,44919,64],{"class":63},[33,44921,32103],{"class":59},[33,44923,32895],{"class":117},[33,44925,3374],{"class":63},[33,44927,32900],{"class":59},[33,44929,270],{"class":63},[33,44931,33857],{"class":117},[33,44933,157],{"class":59},[33,44935,44936],{"class":35,"line":9637},[33,44937,127],{"emptyLinePlaceholder":126},[33,44939,44940],{"class":35,"line":9643},[33,44941,127],{"emptyLinePlaceholder":126},[33,44943,44944],{"class":35,"line":9670},[33,44945,33872],{"class":87},[33,44947,44948],{"class":35,"line":9675},[33,44949,33877],{"class":87},[33,44951,44952],{"class":35,"line":9681},[33,44953,33882],{"class":87},[33,44955,44956,44958,44960,44962,44964,44966,44968],{"class":35,"line":9693},[33,44957,33887],{"class":59},[33,44959,64],{"class":63},[33,44961,33892],{"class":59},[33,44963,33895],{"class":6877},[33,44965,64],{"class":63},[33,44967,33900],{"class":39},[33,44969,157],{"class":59},[33,44971,44972],{"class":35,"line":9705},[33,44973,127],{"emptyLinePlaceholder":126},[33,44975,44976],{"class":35,"line":9717},[33,44977,33911],{"class":87},[33,44979,44980,44982,44984],{"class":35,"line":11375},[33,44981,33916],{"class":59},[33,44983,64],{"class":63},[33,44985,33921],{"class":59},[33,44987,44988],{"class":35,"line":11400},[33,44989,127],{"emptyLinePlaceholder":126},[33,44991,44992],{"class":35,"line":11423},[33,44993,33930],{"class":87},[33,44995,44996,44998,45000],{"class":35,"line":11447},[33,44997,32940],{"class":59},[33,44999,64],{"class":63},[33,45001,33939],{"class":59},[33,45003,45004],{"class":35,"line":11452},[33,45005,33944],{"class":87},[33,45007,45008],{"class":35,"line":11457},[33,45009,33949],{"class":87},[33,45011,45012],{"class":35,"line":11462},[33,45013,33954],{"class":87},[33,45015,45016,45018,45020],{"class":35,"line":11471},[33,45017,33959],{"class":59},[33,45019,64],{"class":63},[33,45021,33964],{"class":59},[33,45023,45024],{"class":35,"line":11476},[33,45025,127],{"emptyLinePlaceholder":126},[33,45027,45028],{"class":35,"line":11482},[33,45029,127],{"emptyLinePlaceholder":126},[33,45031,45032],{"class":35,"line":11503},[33,45033,33977],{"class":87},[33,45035,45036],{"class":35,"line":11509},[33,45037,33982],{"class":87},[33,45039,45040,45042,45044],{"class":35,"line":11523},[33,45041,33987],{"class":59},[33,45043,64],{"class":63},[33,45045,928],{"class":39},[33,45047,45048],{"class":35,"line":11529},[33,45049,33996],{"class":87},[33,45051,45052,45054,45056],{"class":35,"line":11556},[33,45053,34001],{"class":59},[33,45055,64],{"class":63},[33,45057,938],{"class":59},[33,45059,45060],{"class":35,"line":11565},[33,45061,34010],{"class":87},[33,45063,45064,45066,45068],{"class":35,"line":11571},[33,45065,34015],{"class":59},[33,45067,64],{"class":63},[33,45069,938],{"class":59},[33,45071,45072],{"class":35,"line":11579},[33,45073,34024],{"class":87},[33,45075,45076,45078,45080],{"class":35,"line":11584},[33,45077,34029],{"class":59},[33,45079,64],{"class":63},[33,45081,938],{"class":59},[33,45083,45084],{"class":35,"line":18259},[33,45085,34038],{"class":87},[33,45087,45088,45090,45092],{"class":35,"line":18265},[33,45089,34043],{"class":59},[33,45091,64],{"class":63},[33,45093,938],{"class":59},[33,45095,45096],{"class":35,"line":18288},[33,45097,127],{"emptyLinePlaceholder":126},[33,45099,45100],{"class":35,"line":18294},[33,45101,34056],{"class":87},[33,45103,45104,45106,45108],{"class":35,"line":18317},[33,45105,34061],{"class":59},[33,45107,64],{"class":63},[33,45109,34066],{"class":59},[33,45111,45112],{"class":35,"line":18331},[33,45113,127],{"emptyLinePlaceholder":126},[33,45115,45116],{"class":35,"line":18351},[33,45117,127],{"emptyLinePlaceholder":126},[33,45119,45120],{"class":35,"line":18357},[33,45121,34079],{"class":87},[33,45123,45124,45126,45128,45130,45132],{"class":35,"line":18368},[33,45125,4864],{"class":63},[33,45127,34086],{"class":59},[33,45129,27699],{"class":63},[33,45131,34091],{"class":39},[33,45133,34094],{"class":59},[33,45135,45136,45138,45140,45142,45144,45146,45148,45150,45152,45154,45156],{"class":35,"line":18391},[33,45137,583],{"class":39},[33,45139,109],{"class":59},[33,45141,34103],{"class":117},[33,45143,34106],{"class":39},[33,45145,2401],{"class":117},[33,45147,34106],{"class":39},[33,45149,1014],{"class":117},[33,45151,34115],{"class":59},[33,45153,2349],{"class":63},[33,45155,2036],{"class":39},[33,45157,121],{"class":59},[33,45159,45160,45162,45164,45166,45168,45170],{"class":35,"line":18413},[33,45161,583],{"class":39},[33,45163,109],{"class":59},[33,45165,34130],{"class":117},[33,45167,1540],{"class":63},[33,45169,2264],{"class":39},[33,45171,157],{"class":59},[33,45173,45174],{"class":35,"line":18418},[33,45175,127],{"emptyLinePlaceholder":126},[33,45177,45178],{"class":35,"line":18424},[33,45179,34145],{"class":87},[33,45181,45182],{"class":35,"line":18438},[33,45183,34150],{"class":87},[33,45185,45186,45188,45190],{"class":35,"line":18451},[33,45187,34155],{"class":59},[33,45189,64],{"class":63},[33,45191,928],{"class":39},[33,45193,45194],{"class":35,"line":18456},[33,45195,34164],{"class":87},[33,45197,45198,45200,45202],{"class":35,"line":18470},[33,45199,34169],{"class":59},[33,45201,64],{"class":63},[33,45203,923],{"class":39},[33,45205,45206],{"class":35,"line":18475},[33,45207,34178],{"class":87},[33,45209,45210,45212,45214],{"class":35,"line":18481},[33,45211,34183],{"class":59},[33,45213,64],{"class":63},[33,45215,928],{"class":39},[33,45217,45218],{"class":35,"line":18486},[33,45219,34192],{"class":87},[33,45221,45222,45224,45226],{"class":35,"line":18500},[33,45223,34197],{"class":59},[33,45225,64],{"class":63},[33,45227,923],{"class":39},[33,45229,45230],{"class":35,"line":18505},[33,45231,34206],{"class":87},[33,45233,45234,45236,45238],{"class":35,"line":18510},[33,45235,34211],{"class":59},[33,45237,64],{"class":63},[33,45239,923],{"class":39},[33,45241,45242],{"class":35,"line":18524},[33,45243,34220],{"class":87},[33,45245,45246,45248,45250],{"class":35,"line":18536},[33,45247,34225],{"class":59},[33,45249,64],{"class":63},[33,45251,923],{"class":39},[33,45253,45254],{"class":35,"line":18541},[33,45255,34234],{"class":87},[33,45257,45258,45260,45262,45264,45266],{"class":35,"line":18554},[33,45259,5066],{"class":63},[33,45261,33251],{"class":59},[33,45263,27699],{"class":63},[33,45265,33256],{"class":39},[33,45267,34247],{"class":59},[33,45269,45270],{"class":35,"line":18559},[33,45271,34252],{"class":87},[33,45273,45274,45276,45278],{"class":35,"line":18564},[33,45275,34257],{"class":59},[33,45277,64],{"class":63},[33,45279,34262],{"class":59},[33,45281,45282],{"class":35,"line":18569},[33,45283,34267],{"class":87},[33,45285,45286,45288,45290],{"class":35,"line":18582},[33,45287,34272],{"class":59},[33,45289,64],{"class":63},[33,45291,34277],{"class":59},[33,45293,45294],{"class":35,"line":18587},[33,45295,34283],{"class":87},[33,45297,45298],{"class":35,"line":34280},[33,45299,34289],{"class":59},[33,45301,45302],{"class":35,"line":34286},[33,45303,34295],{"class":87},[33,45305,45306],{"class":35,"line":34292},[33,45307,34301],{"class":87},[33,45309,45310,45312,45314],{"class":35,"line":34298},[33,45311,34307],{"class":59},[33,45313,64],{"class":63},[33,45315,34312],{"class":59},[33,45317,45318],{"class":35,"line":34304},[33,45319,34318],{"class":87},[33,45321,45322,45324,45326,45328,45330,45332,45334],{"class":35,"line":34315},[33,45323,34324],{"class":59},[33,45325,64],{"class":63},[33,45327,34329],{"class":59},[33,45329,34332],{"class":6877},[33,45331,64],{"class":63},[33,45333,2036],{"class":39},[33,45335,157],{"class":59},[33,45337,45338],{"class":35,"line":34321},[33,45339,34344],{"class":87},[33,45341,45342,45344,45346],{"class":35,"line":34341},[33,45343,34350],{"class":59},[33,45345,64],{"class":63},[33,45347,34355],{"class":59},[33,45349,45350],{"class":35,"line":34347},[33,45351,34361],{"class":87},[33,45353,45354],{"class":35,"line":34358},[33,45355,34367],{"class":59},[33,45357,45358],{"class":35,"line":34364},[33,45359,34373],{"class":87},[33,45361,45362],{"class":35,"line":34370},[33,45363,34379],{"class":59},[33,45365,45366],{"class":35,"line":34376},[33,45367,34385],{"class":87},[33,45369,45370],{"class":35,"line":34382},[33,45371,34391],{"class":59},[33,45373,45374],{"class":35,"line":34388},[33,45375,34397],{"class":87},[33,45377,45378,45380,45382,45384,45386,45388,45390],{"class":35,"line":34394},[33,45379,34403],{"class":59},[33,45381,11136],{"class":63},[33,45383,34408],{"class":59},[33,45385,1540],{"class":63},[33,45387,34413],{"class":59},[33,45389,2010],{"class":39},[33,45391,157],{"class":59},[33,45393,45394],{"class":35,"line":34400},[33,45395,34423],{"class":87},[33,45397,45398,45400,45402,45404,45406],{"class":35,"line":34420},[33,45399,34429],{"class":59},[33,45401,11136],{"class":63},[33,45403,34434],{"class":59},[33,45405,573],{"class":63},[33,45407,34439],{"class":59},[33,45409,45410],{"class":35,"line":34426},[33,45411,34445],{"class":87},[33,45413,45414,45416,45418,45420,45422],{"class":35,"line":34442},[33,45415,34451],{"class":59},[33,45417,11136],{"class":63},[33,45419,34413],{"class":59},[33,45421,2010],{"class":39},[33,45423,157],{"class":59},[33,45425,45426],{"class":35,"line":34448},[33,45427,34465],{"class":87},[33,45429,45430,45432,45434,45436,45438],{"class":35,"line":34462},[33,45431,5066],{"class":63},[33,45433,34473],{"class":59},[33,45435,27699],{"class":63},[33,45437,33256],{"class":39},[33,45439,34480],{"class":59},[33,45441,45442],{"class":35,"line":34468},[33,45443,34486],{"class":87},[33,45445,45446,45448,45450],{"class":35,"line":34483},[33,45447,34257],{"class":59},[33,45449,64],{"class":63},[33,45451,34262],{"class":59},[33,45453,45454],{"class":35,"line":34489},[33,45455,34501],{"class":87},[33,45457,45458,45460,45462],{"class":35,"line":34498},[33,45459,34272],{"class":59},[33,45461,64],{"class":63},[33,45463,34277],{"class":59},[33,45465,45466],{"class":35,"line":34504},[33,45467,34516],{"class":87},[33,45469,45470],{"class":35,"line":34513},[33,45471,34522],{"class":59},[33,45473,45474],{"class":35,"line":34519},[33,45475,38003],{"class":87},[33,45477,45478,45480],{"class":35,"line":34525},[33,45479,34528],{"class":63},[33,45481,34531],{"class":59},[33,45483,45484],{"class":35,"line":34534},[33,45485,34537],{"class":87},[33,45487,45488,45490,45492],{"class":35,"line":34540},[33,45489,38018],{"class":59},[33,45491,64],{"class":63},[33,45493,34312],{"class":59},[33,45495,45496],{"class":35,"line":34551},[33,45497,34554],{"class":87},[33,45499,45500,45502,45504,45506,45508,45510,45512],{"class":35,"line":34557},[33,45501,38031],{"class":59},[33,45503,64],{"class":63},[33,45505,34329],{"class":59},[33,45507,34332],{"class":6877},[33,45509,64],{"class":63},[33,45511,2036],{"class":39},[33,45513,157],{"class":59},[33,45515,45516],{"class":35,"line":34576},[33,45517,34579],{"class":87},[33,45519,45520,45522,45524],{"class":35,"line":34582},[33,45521,38052],{"class":59},[33,45523,64],{"class":63},[33,45525,34355],{"class":59},[33,45527,45528],{"class":35,"line":34593},[33,45529,34596],{"class":87},[33,45531,45532,45534,45536,45538,45540,45542,45544],{"class":35,"line":34599},[33,45533,38065],{"class":59},[33,45535,11136],{"class":63},[33,45537,38070],{"class":59},[33,45539,1540],{"class":63},[33,45541,34413],{"class":59},[33,45543,2010],{"class":39},[33,45545,157],{"class":59},[33,45547,45548,45550,45552,45554,45556],{"class":35,"line":34619},[33,45549,38083],{"class":59},[33,45551,11136],{"class":63},[33,45553,34434],{"class":59},[33,45555,573],{"class":63},[33,45557,34439],{"class":59},[33,45559,45560],{"class":35,"line":34635},[33,45561,38096],{"class":87},[33,45563,45564,45566,45568,45570,45572],{"class":35,"line":34641},[33,45565,38101],{"class":59},[33,45567,11136],{"class":63},[33,45569,34413],{"class":59},[33,45571,2010],{"class":39},[33,45573,157],{"class":59},[33,45575,45576],{"class":35,"line":34655},[33,45577,34658],{"class":87},[33,45579,45580],{"class":35,"line":34661},[33,45581,34664],{"class":87},[33,45583,45584,45586,45588],{"class":35,"line":34667},[33,45585,34670],{"class":59},[33,45587,2401],{"class":63},[33,45589,34675],{"class":59},[33,45591,45592],{"class":35,"line":34678},[33,45593,34681],{"class":87},[33,45595,45596],{"class":35,"line":34684},[33,45597,34687],{"class":87},[33,45599,45600,45602,45604],{"class":35,"line":34690},[33,45601,34693],{"class":59},[33,45603,2401],{"class":63},[33,45605,34675],{"class":59},[33,45607,45608],{"class":35,"line":34700},[33,45609,34703],{"class":87},[33,45611,45612,45614,45616],{"class":35,"line":34706},[33,45613,34709],{"class":59},[33,45615,2401],{"class":63},[33,45617,34714],{"class":59},[33,45619,45620],{"class":35,"line":34717},[33,45621,34720],{"class":87},[33,45623,45624,45626,45628],{"class":35,"line":34723},[33,45625,34726],{"class":59},[33,45627,2401],{"class":63},[33,45629,34714],{"class":59},[33,45631,45632],{"class":35,"line":34733},[33,45633,127],{"emptyLinePlaceholder":126},[33,45635,45636],{"class":35,"line":34738},[33,45637,34741],{"class":87},[33,45639,45640,45642,45644,45646,45648,45650,45652,45654,45656,45658,45660,45662,45664,45666,45668,45670,45672,45674,45676,45678],{"class":35,"line":34744},[33,45641,583],{"class":39},[33,45643,109],{"class":59},[33,45645,5255],{"class":117},[33,45647,34106],{"class":39},[33,45649,34755],{"class":117},[33,45651,1005],{"class":39},[33,45653,34760],{"class":63},[33,45655,1011],{"class":39},[33,45657,34765],{"class":117},[33,45659,1005],{"class":39},[33,45661,34760],{"class":63},[33,45663,1011],{"class":39},[33,45665,5255],{"class":117},[33,45667,34776],{"class":59},[33,45669,2349],{"class":63},[33,45671,2036],{"class":39},[33,45673,34783],{"class":59},[33,45675,2349],{"class":63},[33,45677,2036],{"class":39},[33,45679,34790],{"class":59},[33,45681,45682,45684,45686,45688,45690,45692,45694,45696,45698,45700,45702,45704,45706,45708,45710,45712,45714,45716,45718,45720],{"class":35,"line":34793},[33,45683,583],{"class":39},[33,45685,109],{"class":59},[33,45687,5255],{"class":117},[33,45689,34106],{"class":39},[33,45691,34804],{"class":117},[33,45693,1005],{"class":39},[33,45695,34760],{"class":63},[33,45697,1011],{"class":39},[33,45699,34813],{"class":117},[33,45701,1005],{"class":39},[33,45703,34760],{"class":63},[33,45705,1011],{"class":39},[33,45707,5255],{"class":117},[33,45709,34824],{"class":59},[33,45711,2349],{"class":63},[33,45713,2036],{"class":39},[33,45715,34831],{"class":59},[33,45717,2349],{"class":63},[33,45719,2036],{"class":39},[33,45721,34790],{"class":59},[33,45723,45724],{"class":35,"line":34840},[33,45725,127],{"emptyLinePlaceholder":126},[33,45727,45728],{"class":35,"line":34845},[33,45729,34848],{"class":87},[33,45731,45732,45734,45736,45738,45740,45742,45744],{"class":35,"line":34851},[33,45733,4163],{"class":63},[33,45735,34856],{"class":59},[33,45737,2349],{"class":63},[33,45739,2036],{"class":39},[33,45741,2756],{"class":59},[33,45743,2775],{"class":63},[33,45745,34867],{"class":59},[33,45747,45748],{"class":35,"line":34870},[33,45749,34873],{"class":87},[33,45751,45752,45754,45756,45758,45760,45762,45764],{"class":35,"line":34876},[33,45753,34879],{"class":59},[33,45755,1863],{"class":39},[33,45757,64],{"class":63},[33,45759,34886],{"class":59},[33,45761,2349],{"class":63},[33,45763,2036],{"class":39},[33,45765,34893],{"class":59},[33,45767,45768],{"class":35,"line":34896},[33,45769,34899],{"class":87},[33,45771,45772],{"class":35,"line":34902},[33,45773,34905],{"class":87},[33,45775,45776,45778,45780],{"class":35,"line":34908},[33,45777,34911],{"class":59},[33,45779,64],{"class":63},[33,45781,33964],{"class":59},[33,45783,45784],{"class":35,"line":34918},[33,45785,127],{"emptyLinePlaceholder":126},[33,45787,45788],{"class":35,"line":34923},[33,45789,34926],{"class":87},[33,45791,45792,45794,45796,45798,45800],{"class":35,"line":34929},[33,45793,34932],{"class":59},[33,45795,64],{"class":63},[33,45797,34937],{"class":59},[33,45799,2349],{"class":63},[33,45801,34942],{"class":59},[33,45803,45804,45806,45808,45810,45812,45814,45816,45818,45820,45822,45824,45826,45828,45830,45832,45834,45836,45838],{"class":35,"line":34945},[33,45805,583],{"class":39},[33,45807,109],{"class":59},[33,45809,34952],{"class":117},[33,45811,1005],{"class":39},[33,45813,34957],{"class":63},[33,45815,1011],{"class":39},[33,45817,2361],{"class":117},[33,45819,1005],{"class":39},[33,45821,34957],{"class":63},[33,45823,1011],{"class":39},[33,45825,34970],{"class":117},[33,45827,34973],{"class":59},[33,45829,34976],{"class":63},[33,45831,2723],{"class":39},[33,45833,34981],{"class":59},[33,45835,2146],{"class":63},[33,45837,2723],{"class":39},[33,45839,121],{"class":59},[33,45841,45842],{"class":35,"line":34990},[33,45843,38380],{"class":87},[33,45845,45846],{"class":35,"line":34996},[33,45847,38385],{"class":87},[33,45849,45850,45852,45854],{"class":35,"line":35002},[33,45851,38390],{"class":59},[33,45853,35014],{"class":117},[33,45855,157],{"class":59},[33,45857,45858],{"class":35,"line":35008},[33,45859,35034],{"class":87},[33,45861,45862,45864,45866,45868,45870,45872],{"class":35,"line":35019},[33,45863,35040],{"class":59},[33,45865,64],{"class":63},[33,45867,35045],{"class":59},[33,45869,35048],{"class":6877},[33,45871,64],{"class":63},[33,45873,3228],{"class":59},[33,45875,45876,45878,45880,45882],{"class":35,"line":35025},[33,45877,35058],{"class":117},[33,45879,2676],{"class":59},[33,45881,35063],{"class":39},[33,45883,35066],{"class":59},[33,45885,45886,45888],{"class":35,"line":35031},[33,45887,35072],{"class":117},[33,45889,35075],{"class":59},[33,45891,45892,45894],{"class":35,"line":35037},[33,45893,35081],{"class":117},[33,45895,35084],{"class":59},[33,45897,45898,45900],{"class":35,"line":35055},[33,45899,35090],{"class":117},[33,45901,35093],{"class":59},[33,45903,45904,45906],{"class":35,"line":35069},[33,45905,35099],{"class":117},[33,45907,35102],{"class":59},[33,45909,45910],{"class":35,"line":35078},[33,45911,35108],{"class":59},[33,45913,45914],{"class":35,"line":35087},[33,45915,35114],{"class":87},[33,45917,45918,45920],{"class":35,"line":35096},[33,45919,5752],{"class":63},[33,45921,35122],{"class":59},[33,45923,45924],{"class":35,"line":35105},[33,45925,127],{"emptyLinePlaceholder":126},[33,45927,45928],{"class":35,"line":35111},[33,45929,35133],{"class":87},[33,45931,45932,45934,45936],{"class":35,"line":35117},[33,45933,33597],{"class":63},[33,45935,35141],{"class":3632},[33,45937,35144],{"class":59},[33,45939,45940],{"class":35,"line":35125},[33,45941,35150],{"class":87},[33,45943,45944,45946,45948,45950,45952,45954,45956,45958],{"class":35,"line":35130},[33,45945,35156],{"class":59},[33,45947,33343],{"class":6877},[33,45949,64],{"class":63},[33,45951,109],{"class":59},[33,45953,2315],{"class":39},[33,45955,2196],{"class":59},[33,45957,2111],{"class":39},[33,45959,121],{"class":59},[33,45961,45962],{"class":35,"line":35136},[33,45963,35176],{"class":87},[33,45965,45966],{"class":35,"line":35147},[33,45967,35182],{"class":87},[33,45969,45970],{"class":35,"line":35153},[33,45971,35188],{"class":87},[33,45973,45974,45976,45978,45980,45982,45984,45986],{"class":35,"line":35173},[33,45975,33377],{"class":59},[33,45977,2036],{"class":39},[33,45979,2196],{"class":59},[33,45981,1897],{"class":39},[33,45983,2196],{"class":59},[33,45985,2036],{"class":39},[33,45987,157],{"class":59},[33,45989,45990],{"class":35,"line":35179},[33,45991,35211],{"class":87},[33,45993,45994],{"class":35,"line":35185},[33,45995,35217],{"class":87},[33,45997,45998],{"class":35,"line":35191},[33,45999,35223],{"class":87},[33,46001,46002],{"class":35,"line":35208},[33,46003,35229],{"class":87},[33,46005,46006],{"class":35,"line":35214},[33,46007,35235],{"class":87},[33,46009,46010,46012,46014,46016,46018,46020,46022,46024,46026],{"class":35,"line":35220},[33,46011,35241],{"class":59},[33,46013,35244],{"class":117},[33,46015,35247],{"class":59},[33,46017,35250],{"class":117},[33,46019,2196],{"class":59},[33,46021,35255],{"class":6877},[33,46023,64],{"class":63},[33,46025,35260],{"class":117},[33,46027,157],{"class":59},[33,46029,46030,46032,46034,46036,46038,46040,46042,46044,46046],{"class":35,"line":35226},[33,46031,35241],{"class":59},[33,46033,35244],{"class":117},[33,46035,35272],{"class":59},[33,46037,35275],{"class":117},[33,46039,2196],{"class":59},[33,46041,35255],{"class":6877},[33,46043,64],{"class":63},[33,46045,35284],{"class":117},[33,46047,157],{"class":59},[33,46049,46050],{"class":35,"line":35232},[33,46051,35292],{"class":87},[33,46053,46054],{"class":35,"line":35238},[33,46055,35298],{"class":59},[33,46057,46058],{"class":35,"line":35265},[33,46059,35304],{"class":87},[33,46061,46062,46064,46066],{"class":35,"line":35289},[33,46063,35310],{"class":59},[33,46065,35313],{"class":117},[33,46067,157],{"class":59},[33,46069,46070,46072,46074],{"class":35,"line":35295},[33,46071,35321],{"class":59},[33,46073,35324],{"class":117},[33,46075,157],{"class":59},[33,46077,46078],{"class":35,"line":35301},[33,46079,35332],{"class":87},[33,46081,46082,46084,46086,46088,46090,46092,46094],{"class":35,"line":35307},[33,46083,33377],{"class":59},[33,46085,2036],{"class":39},[33,46087,2196],{"class":59},[33,46089,1897],{"class":39},[33,46091,2196],{"class":59},[33,46093,1897],{"class":39},[33,46095,157],{"class":59},[33,46097,46098,46100,46102,46104,46106,46108,46110,46112,46114],{"class":35,"line":35318},[33,46099,35241],{"class":59},[33,46101,35244],{"class":117},[33,46103,35359],{"class":59},[33,46105,35250],{"class":117},[33,46107,2196],{"class":59},[33,46109,35255],{"class":6877},[33,46111,64],{"class":63},[33,46113,35370],{"class":117},[33,46115,157],{"class":59},[33,46117,46118,46120,46122,46124,46126,46128,46130,46132,46134],{"class":35,"line":35329},[33,46119,35241],{"class":59},[33,46121,35244],{"class":117},[33,46123,35382],{"class":59},[33,46125,35275],{"class":117},[33,46127,2196],{"class":59},[33,46129,35255],{"class":6877},[33,46131,64],{"class":63},[33,46133,35393],{"class":117},[33,46135,157],{"class":59},[33,46137,46138],{"class":35,"line":35335},[33,46139,35401],{"class":87},[33,46141,46142],{"class":35,"line":35352},[33,46143,35298],{"class":59},[33,46145,46146,46148,46150],{"class":35,"line":35375},[33,46147,35310],{"class":59},[33,46149,35244],{"class":117},[33,46151,157],{"class":59},[33,46153,46154,46156,46158],{"class":35,"line":35398},[33,46155,35321],{"class":59},[33,46157,35423],{"class":117},[33,46159,157],{"class":59},[33,46161,46162],{"class":35,"line":35404},[33,46163,35431],{"class":59},[33,46165,46166],{"class":35,"line":35409},[33,46167,127],{"emptyLinePlaceholder":126},[33,46169,46170],{"class":35,"line":35418},[33,46171,35442],{"class":87},[33,46173,46174,46176,46178,46180,46182],{"class":35,"line":35428},[33,46175,133],{"class":63},[33,46177,32871],{"class":39},[33,46179,573],{"class":63},[33,46181,32876],{"class":117},[33,46183,143],{"class":59},[33,46185,46186],{"class":35,"line":35434},[33,46187,35461],{"class":87},[33,46189,46190,46193,46195],{"class":35,"line":35439},[33,46191,46192],{"class":59},"    GoogLeNet",[33,46194,64],{"class":63},[33,46196,46197],{"class":59},"GoogLeNet(Inception)\n",[33,46199,46200,46202,46204],{"class":35,"line":35445},[33,46201,35478],{"class":59},[33,46203,64],{"class":63},[33,46205,35483],{"class":59},[33,46207,46208,46210,46212,46215,46217,46219,46221],{"class":35,"line":35458},[33,46209,35040],{"class":59},[33,46211,64],{"class":63},[33,46213,46214],{"class":59},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[33,46216,35496],{"class":6877},[33,46218,64],{"class":63},[33,46220,2766],{"class":39},[33,46222,157],{"class":59},[33,46224,46225],{"class":35,"line":35464},[33,46226,35508],{"class":59},[162,46228,46229],{"start":130},[165,46230,42220],{},[23,46232,46234],{"className":25,"code":46233,"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,46235,46236,46242,46252,46262,46266,46276,46287,46291,46295,46299,46307,46323,46333,46349,46359,46373,46377,46387,46397,46407,46413,46417,46421,46429,46433,46449,46457,46461,46465,46473,46481,46485,46489,46493,46497,46503,46507,46517,46525,46533,46537,46541,46545,46553,46557,46573,46577,46581,46585,46597,46601,46613,46617,46621,46633,46637,46647,46651,46655,46667,46671,46679,46683,46687,46695,46699,46707,46711,46715,46719,46723,46727,46743,46751,46755,46759,46807,46813,46817,46827,46835,46843,46847,46851,46855,46859,46867,46871,46887,46891,46899,46907],{"__ignoreMap":28},[33,46237,46238,46240],{"class":35,"line":36},[33,46239,32045],{"class":63},[33,46241,32048],{"class":59},[33,46243,46244,46246,46248,46250],{"class":35,"line":43},[33,46245,32045],{"class":63},[33,46247,33065],{"class":59},[33,46249,33033],{"class":63},[33,46251,33070],{"class":59},[33,46253,46254,46256,46258,46260],{"class":35,"line":130},[33,46255,32388],{"class":63},[33,46257,33048],{"class":59},[33,46259,32045],{"class":63},[33,46261,33053],{"class":59},[33,46263,46264],{"class":35,"line":146},[33,46265,35569],{"class":87},[33,46267,46268,46270,46272,46274],{"class":35,"line":267},[33,46269,32388],{"class":63},[33,46271,33018],{"class":59},[33,46273,32045],{"class":63},[33,46275,33023],{"class":59},[33,46277,46278,46280,46282,46284],{"class":35,"line":275},[33,46279,32388],{"class":63},[33,46281,33564],{"class":59},[33,46283,32045],{"class":63},[33,46285,46286],{"class":59}," GoogLeNet,Inception\n",[33,46288,46289],{"class":35,"line":392},[33,46290,127],{"emptyLinePlaceholder":126},[33,46292,46293],{"class":35,"line":406},[33,46294,127],{"emptyLinePlaceholder":126},[33,46296,46297],{"class":35,"line":418},[33,46298,35598],{"class":87},[33,46300,46301,46303,46305],{"class":35,"line":425},[33,46302,33597],{"class":63},[33,46304,35605],{"class":3632},[33,46306,33603],{"class":59},[33,46308,46309,46311,46313,46315,46317,46319,46321],{"class":35,"line":1147},[33,46310,35612],{"class":59},[33,46312,64],{"class":63},[33,46314,33105],{"class":59},[33,46316,33108],{"class":6877},[33,46318,64],{"class":63},[33,46320,33113],{"class":117},[33,46322,33116],{"class":59},[33,46324,46325,46327,46329,46331],{"class":35,"line":1329},[33,46326,35629],{"class":6877},[33,46328,64],{"class":63},[33,46330,35634],{"class":39},[33,46332,33116],{"class":59},[33,46334,46335,46337,46339,46341,46343,46345,46347],{"class":35,"line":1341},[33,46336,35641],{"class":6877},[33,46338,64],{"class":63},[33,46340,33143],{"class":59},[33,46342,33146],{"class":6877},[33,46344,64],{"class":63},[33,46346,37096],{"class":39},[33,46348,33154],{"class":59},[33,46350,46351,46353,46355,46357],{"class":35,"line":1348},[33,46352,35658],{"class":6877},[33,46354,64],{"class":63},[33,46356,33126],{"class":39},[33,46358,157],{"class":59},[33,46360,46361,46363,46365,46367,46369,46371],{"class":35,"line":1529},[33,46362,35669],{"class":59},[33,46364,64],{"class":63},[33,46366,33184],{"class":59},[33,46368,33187],{"class":6877},[33,46370,64],{"class":63},[33,46372,35680],{"class":59},[33,46374,46375],{"class":35,"line":1546},[33,46376,35685],{"class":87},[33,46378,46379,46381,46383,46385],{"class":35,"line":1551},[33,46380,35690],{"class":6877},[33,46382,64],{"class":63},[33,46384,2036],{"class":39},[33,46386,33116],{"class":59},[33,46388,46389,46391,46393,46395],{"class":35,"line":1566},[33,46390,35701],{"class":6877},[33,46392,64],{"class":63},[33,46394,33126],{"class":39},[33,46396,33116],{"class":59},[33,46398,46399,46401,46403,46405],{"class":35,"line":1578},[33,46400,35712],{"class":6877},[33,46402,64],{"class":63},[33,46404,2010],{"class":39},[33,46406,157],{"class":59},[33,46408,46409,46411],{"class":35,"line":1583},[33,46410,5752],{"class":63},[33,46412,35725],{"class":59},[33,46414,46415],{"class":35,"line":3369},[33,46416,127],{"emptyLinePlaceholder":126},[33,46418,46419],{"class":35,"line":3396},[33,46420,35734],{"class":87},[33,46422,46423,46425,46427],{"class":35,"line":3401},[33,46424,33597],{"class":63},[33,46426,35741],{"class":3632},[33,46428,35744],{"class":59},[33,46430,46431],{"class":35,"line":3418},[33,46432,35749],{"class":87},[33,46434,46435,46437,46439,46441,46443,46445,46447],{"class":35,"line":3423},[33,46436,32888],{"class":59},[33,46438,64],{"class":63},[33,46440,32895],{"class":117},[33,46442,3374],{"class":63},[33,46444,32900],{"class":59},[33,46446,270],{"class":63},[33,46448,35766],{"class":117},[33,46450,46451,46453,46455],{"class":35,"line":3428},[33,46452,32940],{"class":59},[33,46454,64],{"class":63},[33,46456,33939],{"class":59},[33,46458,46459],{"class":35,"line":3433},[33,46460,127],{"emptyLinePlaceholder":126},[33,46462,46463],{"class":35,"line":3447},[33,46464,35783],{"class":87},[33,46466,46467,46469,46471],{"class":35,"line":3452},[33,46468,35788],{"class":59},[33,46470,64],{"class":63},[33,46472,928],{"class":39},[33,46474,46475,46477,46479],{"class":35,"line":4243},[33,46476,35797],{"class":59},[33,46478,64],{"class":63},[33,46480,923],{"class":39},[33,46482,46483],{"class":35,"line":4257},[33,46484,127],{"emptyLinePlaceholder":126},[33,46486,46487],{"class":35,"line":4265},[33,46488,35810],{"class":87},[33,46490,46491],{"class":35,"line":4270},[33,46492,35815],{"class":87},[33,46494,46495],{"class":35,"line":4276},[33,46496,35820],{"class":87},[33,46498,46499,46501],{"class":35,"line":4282},[33,46500,35825],{"class":63},[33,46502,34531],{"class":59},[33,46504,46505],{"class":35,"line":4287},[33,46506,35832],{"class":87},[33,46508,46509,46511,46513,46515],{"class":35,"line":9608},[33,46510,5066],{"class":63},[33,46512,35839],{"class":59},[33,46514,27699],{"class":63},[33,46516,35844],{"class":59},[33,46518,46519,46521,46523],{"class":35,"line":9632},[33,46520,35849],{"class":59},[33,46522,64],{"class":63},[33,46524,35854],{"class":59},[33,46526,46527,46529,46531],{"class":35,"line":9637},[33,46528,35859],{"class":59},[33,46530,64],{"class":63},[33,46532,35864],{"class":59},[33,46534,46535],{"class":35,"line":9643},[33,46536,35869],{"class":87},[33,46538,46539],{"class":35,"line":9670},[33,46540,34522],{"class":59},[33,46542,46543],{"class":35,"line":9675},[33,46544,35878],{"class":87},[33,46546,46547,46549,46551],{"class":35,"line":9681},[33,46548,34307],{"class":59},[33,46550,64],{"class":63},[33,46552,35887],{"class":59},[33,46554,46555],{"class":35,"line":9693},[33,46556,35892],{"class":87},[33,46558,46559,46561,46563,46565,46567,46569,46571],{"class":35,"line":9705},[33,46560,34324],{"class":59},[33,46562,64],{"class":63},[33,46564,34329],{"class":59},[33,46566,34332],{"class":6877},[33,46568,64],{"class":63},[33,46570,2036],{"class":39},[33,46572,157],{"class":59},[33,46574,46575],{"class":35,"line":9717},[33,46576,35913],{"class":87},[33,46578,46579],{"class":35,"line":11375},[33,46580,35918],{"class":87},[33,46582,46583],{"class":35,"line":11400},[33,46584,35923],{"class":87},[33,46586,46587,46589,46591,46593,46595],{"class":35,"line":11423},[33,46588,35928],{"class":59},[33,46590,11136],{"class":63},[33,46592,34434],{"class":59},[33,46594,573],{"class":63},[33,46596,35937],{"class":59},[33,46598,46599],{"class":35,"line":11447},[33,46600,35942],{"class":87},[33,46602,46603,46605,46607,46609,46611],{"class":35,"line":11452},[33,46604,35947],{"class":59},[33,46606,11136],{"class":63},[33,46608,35952],{"class":59},[33,46610,2010],{"class":39},[33,46612,157],{"class":59},[33,46614,46615],{"class":35,"line":11457},[33,46616,127],{"emptyLinePlaceholder":126},[33,46618,46619],{"class":35,"line":11462},[33,46620,35965],{"class":87},[33,46622,46623,46625,46627,46629,46631],{"class":35,"line":11471},[33,46624,35970],{"class":59},[33,46626,64],{"class":63},[33,46628,35975],{"class":59},[33,46630,2401],{"class":63},[33,46632,35980],{"class":59},[33,46634,46635],{"class":35,"line":11476},[33,46636,35985],{"class":87},[33,46638,46639,46641,46643,46645],{"class":35,"line":11482},[33,46640,583],{"class":39},[33,46642,109],{"class":59},[33,46644,35994],{"class":117},[33,46646,35997],{"class":59},[33,46648,46649],{"class":35,"line":11503},[33,46650,127],{"emptyLinePlaceholder":126},[33,46652,46653],{"class":35,"line":11509},[33,46654,36006],{"class":87},[33,46656,46657,46659,46661,46663,46665],{"class":35,"line":11523},[33,46658,133],{"class":63},[33,46660,32871],{"class":39},[33,46662,573],{"class":63},[33,46664,32876],{"class":117},[33,46666,143],{"class":59},[33,46668,46669],{"class":35,"line":11529},[33,46670,36023],{"class":87},[33,46672,46673,46675,46677],{"class":35,"line":11556},[33,46674,32940],{"class":59},[33,46676,64],{"class":63},[33,46678,46197],{"class":59},[33,46680,46681],{"class":35,"line":11565},[33,46682,36036],{"class":87},[33,46684,46685],{"class":35,"line":11571},[33,46686,36041],{"class":87},[33,46688,46689,46691,46693],{"class":35,"line":11579},[33,46690,36046],{"class":59},[33,46692,36049],{"class":117},[33,46694,121],{"class":59},[33,46696,46697],{"class":35,"line":11584},[33,46698,36056],{"class":87},[33,46700,46701,46703,46705],{"class":35,"line":18259},[33,46702,35669],{"class":59},[33,46704,64],{"class":63},[33,46706,36065],{"class":59},[33,46708,46709],{"class":35,"line":18265},[33,46710,36070],{"class":87},[33,46712,46713],{"class":35,"line":18288},[33,46714,36075],{"class":59},[33,46716,46717],{"class":35,"line":18294},[33,46718,127],{"emptyLinePlaceholder":126},[33,46720,46721],{"class":35,"line":18317},[33,46722,36084],{"class":87},[33,46724,46725],{"class":35,"line":18331},[33,46726,36089],{"class":87},[33,46728,46729,46731,46733,46735,46737,46739,46741],{"class":35,"line":18351},[33,46730,32888],{"class":59},[33,46732,64],{"class":63},[33,46734,32895],{"class":117},[33,46736,3374],{"class":63},[33,46738,32900],{"class":59},[33,46740,270],{"class":63},[33,46742,35766],{"class":117},[33,46744,46745,46747,46749],{"class":35,"line":18357},[33,46746,32940],{"class":59},[33,46748,64],{"class":63},[33,46750,33939],{"class":59},[33,46752,46753],{"class":35,"line":18368},[33,46754,36118],{"class":87},[33,46756,46757],{"class":35,"line":18391},[33,46758,36123],{"class":87},[33,46760,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805],{"class":35,"line":18413},[33,46762,36128],{"class":59},[33,46764,64],{"class":63},[33,46766,2707],{"class":59},[33,46768,36135],{"class":117},[33,46770,2196],{"class":59},[33,46772,36140],{"class":117},[33,46774,2196],{"class":59},[33,46776,36145],{"class":117},[33,46778,2196],{"class":59},[33,46780,36150],{"class":117},[33,46782,2196],{"class":59},[33,46784,36155],{"class":117},[33,46786,2196],{"class":59},[33,46788,36160],{"class":117},[33,46790,2196],{"class":59},[33,46792,36165],{"class":117},[33,46794,2196],{"class":59},[33,46796,36170],{"class":117},[33,46798,2196],{"class":59},[33,46800,36175],{"class":117},[33,46802,2196],{"class":59},[33,46804,36180],{"class":117},[33,46806,34893],{"class":59},[33,46808,46809,46811],{"class":35,"line":18418},[33,46810,35825],{"class":63},[33,46812,34531],{"class":59},[33,46814,46815],{"class":35,"line":18424},[33,46816,36193],{"class":87},[33,46818,46819,46821,46823,46825],{"class":35,"line":18438},[33,46820,5066],{"class":63},[33,46822,36200],{"class":59},[33,46824,27699],{"class":63},[33,46826,35844],{"class":59},[33,46828,46829,46831,46833],{"class":35,"line":18451},[33,46830,34257],{"class":59},[33,46832,64],{"class":63},[33,46834,34262],{"class":59},[33,46836,46837,46839,46841],{"class":35,"line":18456},[33,46838,34272],{"class":59},[33,46840,64],{"class":63},[33,46842,34277],{"class":59},[33,46844,46845],{"class":35,"line":18470},[33,46846,127],{"emptyLinePlaceholder":126},[33,46848,46849],{"class":35,"line":18475},[33,46850,36229],{"class":87},[33,46852,46853],{"class":35,"line":18481},[33,46854,34522],{"class":59},[33,46856,46857],{"class":35,"line":18486},[33,46858,36238],{"class":87},[33,46860,46861,46863,46865],{"class":35,"line":18500},[33,46862,34307],{"class":59},[33,46864,64],{"class":63},[33,46866,34312],{"class":59},[33,46868,46869],{"class":35,"line":18505},[33,46870,36251],{"class":87},[33,46872,46873,46875,46877,46879,46881,46883,46885],{"class":35,"line":18510},[33,46874,34324],{"class":59},[33,46876,64],{"class":63},[33,46878,34329],{"class":59},[33,46880,34332],{"class":6877},[33,46882,64],{"class":63},[33,46884,2036],{"class":39},[33,46886,157],{"class":59},[33,46888,46889],{"class":35,"line":18524},[33,46890,36272],{"class":87},[33,46892,46893,46895,46897],{"class":35,"line":18536},[33,46894,36277],{"class":59},[33,46896,64],{"class":63},[33,46898,36282],{"class":59},[33,46900,46901,46903,46905],{"class":35,"line":18541},[33,46902,36287],{"class":59},[33,46904,64],{"class":63},[33,46906,36292],{"class":59},[33,46908,46909,46911,46913,46915,46917,46919,46921,46923],{"class":35,"line":18554},[33,46910,36297],{"class":39},[33,46912,109],{"class":59},[33,46914,36302],{"class":117},[33,46916,36305],{"class":59},[33,46918,36308],{"class":117},[33,46920,2196],{"class":59},[33,46922,36313],{"class":117},[33,46924,36316],{"class":59},[633,46926,46928],{"id":46927},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46930,46931],{},"猫狗分类任务",[19,46933,46934],{},"划分数据集和验证集",[23,46936,46938],{"className":25,"code":46937,"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,46939,46940,46945,46952,46957,46968,46975,46979,46989,47003,47012,47016,47021,47031,47051,47055,47060,47070,47081,47094,47098,47103,47112,47122,47133,47137,47142,47152,47156,47161,47166,47171,47176,47181,47185,47195,47222,47235,47247,47274,47279,47284,47298,47303,47315,47330,47345,47353,47357,47362,47368,47380,47393,47398,47403,47408,47457,47463,47467],{"__ignoreMap":28},[33,46941,46942],{"class":35,"line":36},[33,46943,46944],{"class":87},"# 创建脚本，用于划分数据集和验证集\n",[33,46946,46947,46949],{"class":35,"line":43},[33,46948,32045],{"class":63},[33,46950,46951],{"class":59}," os\n",[33,46953,46954],{"class":35,"line":130},[33,46955,46956],{"class":87},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[33,46958,46959,46961,46964,46966],{"class":35,"line":146},[33,46960,32388],{"class":63},[33,46962,46963],{"class":59}," shutil ",[33,46965,32045],{"class":63},[33,46967,33472],{"class":59},[33,46969,46970,46972],{"class":35,"line":267},[33,46971,32045],{"class":63},[33,46973,46974],{"class":59}," random\n",[33,46976,46977],{"class":35,"line":275},[33,46978,127],{"emptyLinePlaceholder":126},[33,46980,46981,46983,46986],{"class":35,"line":392},[33,46982,33597],{"class":63},[33,46984,46985],{"class":3632}," mkfile",[33,46987,46988],{"class":59},"(file):\n",[33,46990,46991,46993,46995,46998,47001],{"class":35,"line":406},[33,46992,567],{"class":63},[33,46994,783],{"class":63},[33,46996,46997],{"class":59}," os.path.exists(",[33,46999,47000],{"class":6877},"file",[33,47002,32437],{"class":59},[33,47004,47005,47008,47010],{"class":35,"line":418},[33,47006,47007],{"class":59},"        os.makedirs(",[33,47009,47000],{"class":6877},[33,47011,157],{"class":59},[33,47013,47014],{"class":35,"line":425},[33,47015,127],{"emptyLinePlaceholder":126},[33,47017,47018],{"class":35,"line":1147},[33,47019,47020],{"class":87},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[33,47022,47023,47026,47028],{"class":35,"line":1329},[33,47024,47025],{"class":59},"file_path",[33,47027,64],{"class":63},[33,47029,47030],{"class":117},"'data_cat_dog'\n",[33,47032,47033,47036,47038,47041,47043,47046,47048],{"class":35,"line":1341},[33,47034,47035],{"class":59},"flower_class",[33,47037,64],{"class":63},[33,47039,47040],{"class":59},"[cla ",[33,47042,4690],{"class":63},[33,47044,47045],{"class":59}," cla ",[33,47047,27699],{"class":63},[33,47049,47050],{"class":59}," os.listdir(file_path)]\n",[33,47052,47053],{"class":35,"line":1348},[33,47054,127],{"emptyLinePlaceholder":126},[33,47056,47057],{"class":35,"line":1529},[33,47058,47059],{"class":87},"# 创建训练集train文件夹\n",[33,47061,47062,47065,47068],{"class":35,"line":1546},[33,47063,47064],{"class":59},"mkfile(",[33,47066,47067],{"class":117},"'data\u002Ftrain'",[33,47069,157],{"class":59},[33,47071,47072,47074,47076,47078],{"class":35,"line":1551},[33,47073,4690],{"class":63},[33,47075,47045],{"class":59},[33,47077,27699],{"class":63},[33,47079,47080],{"class":59}," flower_class:\n",[33,47082,47083,47086,47089,47091],{"class":35,"line":1566},[33,47084,47085],{"class":59},"    mkfile(",[33,47087,47088],{"class":117},"'data\u002Ftrain\u002F'",[33,47090,2298],{"class":63},[33,47092,47093],{"class":59},"cla)\n",[33,47095,47096],{"class":35,"line":1578},[33,47097,127],{"emptyLinePlaceholder":126},[33,47099,47100],{"class":35,"line":1583},[33,47101,47102],{"class":87},"# 创建验证集val文件夹\n",[33,47104,47105,47107,47110],{"class":35,"line":3369},[33,47106,47064],{"class":59},[33,47108,47109],{"class":117},"'data\u002Ftest'",[33,47111,157],{"class":59},[33,47113,47114,47116,47118,47120],{"class":35,"line":3396},[33,47115,4690],{"class":63},[33,47117,47045],{"class":59},[33,47119,27699],{"class":63},[33,47121,47080],{"class":59},[33,47123,47124,47126,47129,47131],{"class":35,"line":3401},[33,47125,47085],{"class":59},[33,47127,47128],{"class":117},"'data\u002Ftest\u002F'",[33,47130,2298],{"class":63},[33,47132,47093],{"class":59},[33,47134,47135],{"class":35,"line":3418},[33,47136,127],{"emptyLinePlaceholder":126},[33,47138,47139],{"class":35,"line":3423},[33,47140,47141],{"class":87},"# 划分比例，训练集：测试集=9：1\n",[33,47143,47144,47147,47149],{"class":35,"line":3428},[33,47145,47146],{"class":59},"split_rate",[33,47148,64],{"class":63},[33,47150,47151],{"class":39},"0.1\n",[33,47153,47154],{"class":35,"line":3433},[33,47155,127],{"emptyLinePlaceholder":126},[33,47157,47158],{"class":35,"line":3447},[33,47159,47160],{"class":87},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[33,47162,47163],{"class":35,"line":3452},[33,47164,47165],{"class":87},"# cla_path：当前类别的原始图片路径\n",[33,47167,47168],{"class":35,"line":4243},[33,47169,47170],{"class":87},"# images：当前类别下所有图片的文件名列表\n",[33,47172,47173],{"class":35,"line":4257},[33,47174,47175],{"class":87},"# num：该类别图片总数\n",[33,47177,47178],{"class":35,"line":4265},[33,47179,47180],{"class":87},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[33,47182,47183],{"class":35,"line":4270},[33,47184,127],{"emptyLinePlaceholder":126},[33,47186,47187,47189,47191,47193],{"class":35,"line":4276},[33,47188,4690],{"class":63},[33,47190,47045],{"class":59},[33,47192,27699],{"class":63},[33,47194,47080],{"class":59},[33,47196,47197,47200,47202,47205,47207,47210,47213,47215,47217,47219],{"class":35,"line":4282},[33,47198,47199],{"class":59},"    cla_path ",[33,47201,64],{"class":63},[33,47203,47204],{"class":59}," file_path ",[33,47206,2298],{"class":63},[33,47208,47209],{"class":117}," '\u002F'",[33,47211,47212],{"class":63}," +",[33,47214,47045],{"class":59},[33,47216,2298],{"class":63},[33,47218,47209],{"class":117},[33,47220,47221],{"class":87},"  # 某一类别的子目录\n",[33,47223,47224,47227,47229,47232],{"class":35,"line":4287},[33,47225,47226],{"class":59},"    images ",[33,47228,64],{"class":63},[33,47230,47231],{"class":59}," os.listdir(cla_path)  ",[33,47233,47234],{"class":87},"# iamges 列表存储了该目录下所有图像的名称\n",[33,47236,47237,47240,47242,47244],{"class":35,"line":9608},[33,47238,47239],{"class":59},"    num ",[33,47241,64],{"class":63},[33,47243,8991],{"class":39},[33,47245,47246],{"class":59},"(images)\n",[33,47248,47249,47252,47254,47257,47259,47261,47263,47266,47268,47271],{"class":35,"line":9632},[33,47250,47251],{"class":59},"    eval_index ",[33,47253,64],{"class":63},[33,47255,47256],{"class":59}," random.sample(images, ",[33,47258,2310],{"class":6877},[33,47260,64],{"class":63},[33,47262,1828],{"class":39},[33,47264,47265],{"class":59},"(num ",[33,47267,1540],{"class":63},[33,47269,47270],{"class":59}," split_rate))  ",[33,47272,47273],{"class":87},"# 从images列表中随机抽取 k 个图像名称\n",[33,47275,47276],{"class":35,"line":9637},[33,47277,47278],{"class":87},"    # 遍历该类别下的所有图片\n",[33,47280,47281],{"class":35,"line":9643},[33,47282,47283],{"class":87},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[33,47285,47286,47288,47291,47293,47295],{"class":35,"line":9670},[33,47287,4864],{"class":63},[33,47289,47290],{"class":59}," index, image ",[33,47292,27699],{"class":63},[33,47294,33256],{"class":39},[33,47296,47297],{"class":59},"(images):\n",[33,47299,47300],{"class":35,"line":9675},[33,47301,47302],{"class":87},"        # eval_index 中保存验证集val的图像名称\n",[33,47304,47305,47307,47310,47312],{"class":35,"line":9681},[33,47306,4163],{"class":63},[33,47308,47309],{"class":59}," image ",[33,47311,27699],{"class":63},[33,47313,47314],{"class":59}," eval_index:\n",[33,47316,47317,47320,47322,47325,47327],{"class":35,"line":9693},[33,47318,47319],{"class":59},"            image_path ",[33,47321,64],{"class":63},[33,47323,47324],{"class":59}," cla_path ",[33,47326,2298],{"class":63},[33,47328,47329],{"class":59}," image\n",[33,47331,47332,47335,47337,47340,47342],{"class":35,"line":9705},[33,47333,47334],{"class":59},"            new_path ",[33,47336,64],{"class":63},[33,47338,47339],{"class":117}," 'data\u002Ftest\u002F'",[33,47341,47212],{"class":63},[33,47343,47344],{"class":59}," cla\n",[33,47346,47347,47350],{"class":35,"line":9717},[33,47348,47349],{"class":59},"            copy(image_path, new_path)  ",[33,47351,47352],{"class":87},"# 将选中的图像复制到新路径\n",[33,47354,47355],{"class":35,"line":11375},[33,47356,127],{"emptyLinePlaceholder":126},[33,47358,47359],{"class":35,"line":11400},[33,47360,47361],{"class":87},"        # 其余的图像保存在训练集train中\n",[33,47363,47364,47366],{"class":35,"line":11423},[33,47365,4200],{"class":63},[33,47367,143],{"class":59},[33,47369,47370,47372,47374,47376,47378],{"class":35,"line":11447},[33,47371,47319],{"class":59},[33,47373,64],{"class":63},[33,47375,47324],{"class":59},[33,47377,2298],{"class":63},[33,47379,47329],{"class":59},[33,47381,47382,47384,47386,47389,47391],{"class":35,"line":11452},[33,47383,47334],{"class":59},[33,47385,64],{"class":63},[33,47387,47388],{"class":117}," 'data\u002Ftrain\u002F'",[33,47390,47212],{"class":63},[33,47392,47344],{"class":59},[33,47394,47395],{"class":35,"line":11457},[33,47396,47397],{"class":59},"            copy(image_path, new_path)\n",[33,47399,47400],{"class":35,"line":11462},[33,47401,47402],{"class":87},"            # 打印进度条信息\n",[33,47404,47405],{"class":35,"line":11471},[33,47406,47407],{"class":87},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[33,47409,47410,47412,47414,47416,47419,47421,47423,47426,47428,47430,47432,47435,47438,47440,47442,47445,47448,47450,47452,47454],{"class":35,"line":11476},[33,47411,583],{"class":39},[33,47413,109],{"class":59},[33,47415,1014],{"class":117},[33,47417,47418],{"class":39},"\\r",[33,47420,2707],{"class":117},[33,47422,34106],{"class":39},[33,47424,47425],{"class":117},"] processing [",[33,47427,34106],{"class":39},[33,47429,2401],{"class":117},[33,47431,34106],{"class":39},[33,47433,47434],{"class":117},"]\"",[33,47436,47437],{"class":59},".format(cla, index ",[33,47439,2298],{"class":63},[33,47441,26774],{"class":39},[33,47443,47444],{"class":59},", num), ",[33,47446,47447],{"class":6877},"end",[33,47449,64],{"class":63},[33,47451,9312],{"class":117},[33,47453,84],{"class":59},[33,47455,47456],{"class":87},"# processing bar\n",[33,47458,47459,47461],{"class":35,"line":11482},[33,47460,149],{"class":39},[33,47462,943],{"class":59},[33,47464,47465],{"class":35,"line":11503},[33,47466,127],{"emptyLinePlaceholder":126},[33,47468,47469,47471,47473,47476],{"class":35,"line":11509},[33,47470,72],{"class":39},[33,47472,109],{"class":59},[33,47474,47475],{"class":117},"\"processing done!\"",[33,47477,157],{"class":59},[19,47479,47480],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23653,47482,47484],{"id":47483},"_242模型代码","2.4.2.模型代码",[19,47486,47487],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[23,47489,47491],{"className":25,"code":47490,"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,47492,47493,47499,47509,47519,47523,47539,47547,47561,47571,47575,47605,47609,47643,47689,47693,47727,47773,47777,47781,47815,47845,47849,47857,47871,47893,47915,47933,47937,47951,47955,47959,47975,47979,47987,48001,48011,48055,48059,48087,48091,48101,48129,48133,48169,48173,48201,48205,48215,48247,48279,48307,48311,48321,48353,48385,48417,48449,48481,48509,48513,48523,48555,48587,48599,48603,48615,48619,48623,48635,48643,48663,48667,48671,48675,48679,48683,48687,48701,48709,48717,48729,48743,48751,48755,48763,48773,48783,48793,48803,48813,48819,48823,48827,48839,48859,48867],{"__ignoreMap":28},[33,47494,47495,47497],{"class":35,"line":36},[33,47496,32045],{"class":63},[33,47498,32048],{"class":59},[33,47500,47501,47503,47505,47507],{"class":35,"line":43},[33,47502,32388],{"class":63},[33,47504,32391],{"class":59},[33,47506,32045],{"class":63},[33,47508,32396],{"class":59},[33,47510,47511,47513,47515,47517],{"class":35,"line":130},[33,47512,32388],{"class":63},[33,47514,32408],{"class":59},[33,47516,32045],{"class":63},[33,47518,32413],{"class":59},[33,47520,47521],{"class":35,"line":146},[33,47522,127],{"emptyLinePlaceholder":126},[33,47524,47525,47527,47529,47531,47533,47535,47537],{"class":35,"line":267},[33,47526,16352],{"class":63},[33,47528,43139],{"class":3632},[33,47530,109],{"class":59},[33,47532,32429],{"class":3632},[33,47534,2375],{"class":59},[33,47536,32434],{"class":3632},[33,47538,32437],{"class":59},[33,47540,47541,47543,47545],{"class":35,"line":275},[33,47542,32452],{"class":63},[33,47544,32455],{"class":39},[33,47546,43158],{"class":59},[33,47548,47549,47551,47553,47555,47557,47559],{"class":35,"line":392},[33,47550,32468],{"class":39},[33,47552,43165],{"class":59},[33,47554,32474],{"class":39},[33,47556,32477],{"class":59},[33,47558,32480],{"class":39},[33,47560,943],{"class":59},[33,47562,47563,47565,47567,47569],{"class":35,"line":406},[33,47564,32496],{"class":39},[33,47566,36418],{"class":59},[33,47568,64],{"class":63},[33,47570,36423],{"class":59},[33,47572,47573],{"class":35,"line":418},[33,47574,43188],{"class":87},[33,47576,47577,47579,47581,47583,47585,47587,47589,47591,47593,47595,47597,47599,47601,47603],{"class":35,"line":425},[33,47578,32496],{"class":39},[33,47580,43195],{"class":59},[33,47582,64],{"class":63},[33,47584,32504],{"class":59},[33,47586,32507],{"class":6877},[33,47588,64],{"class":63},[33,47590,43206],{"class":59},[33,47592,32516],{"class":6877},[33,47594,64],{"class":63},[33,47596,43213],{"class":59},[33,47598,32525],{"class":6877},[33,47600,64],{"class":63},[33,47602,2036],{"class":39},[33,47604,157],{"class":59},[33,47606,47607],{"class":35,"line":1147},[33,47608,43226],{"class":87},[33,47610,47611,47613,47615,47617,47619,47621,47623,47625,47627,47629,47631,47633,47635,47637,47639,47641],{"class":35,"line":1329},[33,47612,32496],{"class":39},[33,47614,43233],{"class":59},[33,47616,64],{"class":63},[33,47618,32504],{"class":59},[33,47620,32507],{"class":6877},[33,47622,64],{"class":63},[33,47624,43206],{"class":59},[33,47626,32516],{"class":6877},[33,47628,64],{"class":63},[33,47630,43250],{"class":59},[33,47632,2010],{"class":39},[33,47634,43255],{"class":59},[33,47636,32525],{"class":6877},[33,47638,64],{"class":63},[33,47640,2036],{"class":39},[33,47642,157],{"class":59},[33,47644,47645,47647,47649,47651,47653,47655,47657,47659,47661,47663,47665,47667,47669,47671,47673,47675,47677,47679,47681,47683,47685,47687],{"class":35,"line":1341},[33,47646,32496],{"class":39},[33,47648,43270],{"class":59},[33,47650,64],{"class":63},[33,47652,32504],{"class":59},[33,47654,32507],{"class":6877},[33,47656,64],{"class":63},[33,47658,43250],{"class":59},[33,47660,2010],{"class":39},[33,47662,43255],{"class":59},[33,47664,32516],{"class":6877},[33,47666,64],{"class":63},[33,47668,43250],{"class":59},[33,47670,2036],{"class":39},[33,47672,43255],{"class":59},[33,47674,32525],{"class":6877},[33,47676,64],{"class":63},[33,47678,1891],{"class":39},[33,47680,2196],{"class":59},[33,47682,32534],{"class":6877},[33,47684,64],{"class":63},[33,47686,2036],{"class":39},[33,47688,157],{"class":59},[33,47690,47691],{"class":35,"line":1348},[33,47692,43315],{"class":87},[33,47694,47695,47697,47699,47701,47703,47705,47707,47709,47711,47713,47715,47717,47719,47721,47723,47725],{"class":35,"line":1529},[33,47696,32496],{"class":39},[33,47698,43322],{"class":59},[33,47700,64],{"class":63},[33,47702,32504],{"class":59},[33,47704,32507],{"class":6877},[33,47706,64],{"class":63},[33,47708,43206],{"class":59},[33,47710,32516],{"class":6877},[33,47712,64],{"class":63},[33,47714,43339],{"class":59},[33,47716,2010],{"class":39},[33,47718,43255],{"class":59},[33,47720,32525],{"class":6877},[33,47722,64],{"class":63},[33,47724,2036],{"class":39},[33,47726,157],{"class":59},[33,47728,47729,47731,47733,47735,47737,47739,47741,47743,47745,47747,47749,47751,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771],{"class":35,"line":1546},[33,47730,32496],{"class":39},[33,47732,43358],{"class":59},[33,47734,64],{"class":63},[33,47736,32504],{"class":59},[33,47738,32507],{"class":6877},[33,47740,64],{"class":63},[33,47742,43339],{"class":59},[33,47744,2010],{"class":39},[33,47746,43255],{"class":59},[33,47748,32516],{"class":6877},[33,47750,64],{"class":63},[33,47752,43339],{"class":59},[33,47754,2036],{"class":39},[33,47756,43255],{"class":59},[33,47758,32525],{"class":6877},[33,47760,64],{"class":63},[33,47762,2137],{"class":39},[33,47764,2196],{"class":59},[33,47766,32534],{"class":6877},[33,47768,64],{"class":63},[33,47770,1897],{"class":39},[33,47772,157],{"class":59},[33,47774,47775],{"class":35,"line":1551},[33,47776,43403],{"class":87},[33,47778,47779],{"class":35,"line":1566},[33,47780,43408],{"class":87},[33,47782,47783,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807,47809,47811,47813],{"class":35,"line":1578},[33,47784,32496],{"class":39},[33,47786,43415],{"class":59},[33,47788,64],{"class":63},[33,47790,36476],{"class":59},[33,47792,32525],{"class":6877},[33,47794,64],{"class":63},[33,47796,1891],{"class":39},[33,47798,2196],{"class":59},[33,47800,32580],{"class":6877},[33,47802,64],{"class":63},[33,47804,2036],{"class":39},[33,47806,2196],{"class":59},[33,47808,32534],{"class":6877},[33,47810,64],{"class":63},[33,47812,2036],{"class":39},[33,47814,157],{"class":59},[33,47816,47817,47819,47821,47823,47825,47827,47829,47831,47833,47835,47837,47839,47841,47843],{"class":35,"line":1583},[33,47818,32496],{"class":39},[33,47820,43450],{"class":59},[33,47822,64],{"class":63},[33,47824,32504],{"class":59},[33,47826,32507],{"class":6877},[33,47828,64],{"class":63},[33,47830,43206],{"class":59},[33,47832,32516],{"class":6877},[33,47834,64],{"class":63},[33,47836,43467],{"class":59},[33,47838,32525],{"class":6877},[33,47840,64],{"class":63},[33,47842,2036],{"class":39},[33,47844,157],{"class":59},[33,47846,47847],{"class":35,"line":3369},[33,47848,127],{"emptyLinePlaceholder":126},[33,47850,47851,47853,47855],{"class":35,"line":3396},[33,47852,32452],{"class":63},[33,47854,32744],{"class":3632},[33,47856,32747],{"class":59},[33,47858,47859,47861,47863,47865,47867,47869],{"class":35,"line":3401},[33,47860,43492],{"class":59},[33,47862,64],{"class":63},[33,47864,32474],{"class":39},[33,47866,36831],{"class":59},[33,47868,32474],{"class":39},[33,47870,43503],{"class":59},[33,47872,47873,47875,47877,47879,47881,47883,47885,47887,47889,47891],{"class":35,"line":3418},[33,47874,8745],{"class":59},[33,47876,64],{"class":63},[33,47878,32474],{"class":39},[33,47880,36831],{"class":59},[33,47882,32474],{"class":39},[33,47884,43518],{"class":59},[33,47886,32474],{"class":39},[33,47888,36831],{"class":59},[33,47890,32474],{"class":39},[33,47892,43527],{"class":59},[33,47894,47895,47897,47899,47901,47903,47905,47907,47909,47911,47913],{"class":35,"line":3423},[33,47896,43532],{"class":59},[33,47898,64],{"class":63},[33,47900,32474],{"class":39},[33,47902,36831],{"class":59},[33,47904,32474],{"class":39},[33,47906,43543],{"class":59},[33,47908,32474],{"class":39},[33,47910,36831],{"class":59},[33,47912,32474],{"class":39},[33,47914,43552],{"class":59},[33,47916,47917,47919,47921,47923,47925,47927,47929,47931],{"class":35,"line":3428},[33,47918,43557],{"class":59},[33,47920,64],{"class":63},[33,47922,32474],{"class":39},[33,47924,36831],{"class":59},[33,47926,32474],{"class":39},[33,47928,43568],{"class":59},[33,47930,32474],{"class":39},[33,47932,43573],{"class":59},[33,47934,47935],{"class":35,"line":3433},[33,47936,43578],{"class":87},[33,47938,47939,47941,47943,47945,47947,47949],{"class":35,"line":3447},[33,47940,16410],{"class":63},[33,47942,43585],{"class":59},[33,47944,34332],{"class":6877},[33,47946,64],{"class":63},[33,47948,2036],{"class":39},[33,47950,157],{"class":59},[33,47952,47953],{"class":35,"line":3452},[33,47954,127],{"emptyLinePlaceholder":126},[33,47956,47957],{"class":35,"line":4243},[33,47958,43606],{"class":87},[33,47960,47961,47963,47965,47967,47969,47971,47973],{"class":35,"line":4257},[33,47962,16352],{"class":63},[33,47964,43613],{"class":3632},[33,47966,109],{"class":59},[33,47968,32429],{"class":3632},[33,47970,2375],{"class":59},[33,47972,32434],{"class":3632},[33,47974,32437],{"class":59},[33,47976,47977],{"class":35,"line":4265},[33,47978,43628],{"class":87},[33,47980,47981,47983,47985],{"class":35,"line":4270},[33,47982,32452],{"class":63},[33,47984,32455],{"class":39},[33,47986,43637],{"class":59},[33,47988,47989,47991,47993,47995,47997,47999],{"class":35,"line":4276},[33,47990,32468],{"class":39},[33,47992,43644],{"class":59},[33,47994,32474],{"class":39},[33,47996,32477],{"class":59},[33,47998,32480],{"class":39},[33,48000,943],{"class":59},[33,48002,48003,48005,48007,48009],{"class":35,"line":4282},[33,48004,32496],{"class":39},[33,48006,43659],{"class":59},[33,48008,64],{"class":63},[33,48010,39656],{"class":59},[33,48012,48013,48015,48017,48019,48021,48023,48025,48027,48029,48031,48033,48035,48037,48039,48041,48043,48045,48047,48049,48051,48053],{"class":35,"line":4287},[33,48014,39661],{"class":59},[33,48016,32507],{"class":6877},[33,48018,64],{"class":63},[33,48020,1891],{"class":39},[33,48022,2196],{"class":59},[33,48024,32516],{"class":6877},[33,48026,64],{"class":63},[33,48028,2022],{"class":39},[33,48030,2196],{"class":59},[33,48032,32525],{"class":6877},[33,48034,64],{"class":63},[33,48036,2187],{"class":39},[33,48038,2196],{"class":59},[33,48040,32580],{"class":6877},[33,48042,64],{"class":63},[33,48044,1897],{"class":39},[33,48046,2196],{"class":59},[33,48048,32534],{"class":6877},[33,48050,64],{"class":63},[33,48052,1891],{"class":39},[33,48054,39694],{"class":59},[33,48056,48057],{"class":35,"line":9608},[33,48058,39699],{"class":59},[33,48060,48061,48063,48065,48067,48069,48071,48073,48075,48077,48079,48081,48083,48085],{"class":35,"line":9632},[33,48062,39744],{"class":59},[33,48064,32525],{"class":6877},[33,48066,64],{"class":63},[33,48068,1891],{"class":39},[33,48070,2196],{"class":59},[33,48072,32580],{"class":6877},[33,48074,64],{"class":63},[33,48076,1897],{"class":39},[33,48078,2196],{"class":59},[33,48080,32534],{"class":6877},[33,48082,64],{"class":63},[33,48084,2036],{"class":39},[33,48086,157],{"class":59},[33,48088,48089],{"class":35,"line":9637},[33,48090,39773],{"class":59},[33,48092,48093,48095,48097,48099],{"class":35,"line":9643},[33,48094,32496],{"class":39},[33,48096,43750],{"class":59},[33,48098,64],{"class":63},[33,48100,39656],{"class":59},[33,48102,48103,48105,48107,48109,48111,48113,48115,48117,48119,48121,48123,48125,48127],{"class":35,"line":9670},[33,48104,39661],{"class":59},[33,48106,32507],{"class":6877},[33,48108,64],{"class":63},[33,48110,2022],{"class":39},[33,48112,2196],{"class":59},[33,48114,32516],{"class":6877},[33,48116,64],{"class":63},[33,48118,2022],{"class":39},[33,48120,2196],{"class":59},[33,48122,32525],{"class":6877},[33,48124,64],{"class":63},[33,48126,2036],{"class":39},[33,48128,39694],{"class":59},[33,48130,48131],{"class":35,"line":9675},[33,48132,39699],{"class":59},[33,48134,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165,48167],{"class":35,"line":9681},[33,48136,39661],{"class":59},[33,48138,32507],{"class":6877},[33,48140,64],{"class":63},[33,48142,2022],{"class":39},[33,48144,2196],{"class":59},[33,48146,32516],{"class":6877},[33,48148,64],{"class":63},[33,48150,43805],{"class":39},[33,48152,2196],{"class":59},[33,48154,32525],{"class":6877},[33,48156,64],{"class":63},[33,48158,1891],{"class":39},[33,48160,2196],{"class":59},[33,48162,32534],{"class":6877},[33,48164,64],{"class":63},[33,48166,2036],{"class":39},[33,48168,39694],{"class":59},[33,48170,48171],{"class":35,"line":9693},[33,48172,39699],{"class":59},[33,48174,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193,48195,48197,48199],{"class":35,"line":9705},[33,48176,39744],{"class":59},[33,48178,32525],{"class":6877},[33,48180,64],{"class":63},[33,48182,1891],{"class":39},[33,48184,2196],{"class":59},[33,48186,32580],{"class":6877},[33,48188,64],{"class":63},[33,48190,1897],{"class":39},[33,48192,2196],{"class":59},[33,48194,32534],{"class":6877},[33,48196,64],{"class":63},[33,48198,2036],{"class":39},[33,48200,157],{"class":59},[33,48202,48203],{"class":35,"line":9717},[33,48204,39773],{"class":59},[33,48206,48207,48209,48211,48213],{"class":35,"line":11375},[33,48208,32496],{"class":39},[33,48210,43866],{"class":59},[33,48212,64],{"class":63},[33,48214,39656],{"class":59},[33,48216,48217,48219,48221,48223,48225,48227,48229,48231,48233,48235,48237,48239,48241,48243,48245],{"class":35,"line":11400},[33,48218,43875],{"class":59},[33,48220,43805],{"class":39},[33,48222,2196],{"class":59},[33,48224,2022],{"class":39},[33,48226,43884],{"class":59},[33,48228,2028],{"class":39},[33,48230,2196],{"class":59},[33,48232,33720],{"class":39},[33,48234,43893],{"class":59},[33,48236,2418],{"class":39},[33,48238,2196],{"class":59},[33,48240,2016],{"class":39},[33,48242,43902],{"class":59},[33,48244,2016],{"class":39},[33,48246,39694],{"class":59},[33,48248,48249,48251,48253,48255,48257,48259,48261,48263,48265,48267,48269,48271,48273,48275,48277],{"class":35,"line":11423},[33,48250,43875],{"class":59},[33,48252,36517],{"class":39},[33,48254,2196],{"class":59},[33,48256,33720],{"class":39},[33,48258,43884],{"class":59},[33,48260,33720],{"class":39},[33,48262,2196],{"class":59},[33,48264,43805],{"class":39},[33,48266,43893],{"class":59},[33,48268,2016],{"class":39},[33,48270,2196],{"class":59},[33,48272,2028],{"class":39},[33,48274,43902],{"class":59},[33,48276,2022],{"class":39},[33,48278,39694],{"class":59},[33,48280,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299,48301,48303,48305],{"class":35,"line":11447},[33,48282,39744],{"class":59},[33,48284,32525],{"class":6877},[33,48286,64],{"class":63},[33,48288,1891],{"class":39},[33,48290,2196],{"class":59},[33,48292,32580],{"class":6877},[33,48294,64],{"class":63},[33,48296,1897],{"class":39},[33,48298,2196],{"class":59},[33,48300,32534],{"class":6877},[33,48302,64],{"class":63},[33,48304,2036],{"class":39},[33,48306,157],{"class":59},[33,48308,48309],{"class":35,"line":11452},[33,48310,39773],{"class":59},[33,48312,48313,48315,48317,48319],{"class":35,"line":11457},[33,48314,32496],{"class":39},[33,48316,43977],{"class":59},[33,48318,64],{"class":63},[33,48320,39656],{"class":59},[33,48322,48323,48325,48327,48329,48331,48333,48335,48337,48339,48341,48343,48345,48347,48349,48351],{"class":35,"line":11462},[33,48324,43875],{"class":59},[33,48326,43988],{"class":39},[33,48328,2196],{"class":59},[33,48330,43805],{"class":39},[33,48332,43884],{"class":59},[33,48334,2028],{"class":39},[33,48336,2196],{"class":59},[33,48338,44001],{"class":39},[33,48340,43893],{"class":59},[33,48342,2418],{"class":39},[33,48344,2196],{"class":59},[33,48346,2424],{"class":39},[33,48348,43902],{"class":59},[33,48350,2022],{"class":39},[33,48352,39694],{"class":59},[33,48354,48355,48357,48359,48361,48363,48365,48367,48369,48371,48373,48375,48377,48379,48381,48383],{"class":35,"line":11471},[33,48356,43875],{"class":59},[33,48358,40104],{"class":39},[33,48360,2196],{"class":59},[33,48362,22703],{"class":39},[33,48364,43884],{"class":59},[33,48366,2435],{"class":39},[33,48368,2196],{"class":59},[33,48370,33151],{"class":39},[33,48372,43893],{"class":59},[33,48374,2617],{"class":39},[33,48376,2196],{"class":59},[33,48378,2022],{"class":39},[33,48380,43902],{"class":59},[33,48382,2022],{"class":39},[33,48384,39694],{"class":59},[33,48386,48387,48389,48391,48393,48395,48397,48399,48401,48403,48405,48407,48409,48411,48413,48415],{"class":35,"line":11476},[33,48388,43875],{"class":59},[33,48390,40104],{"class":39},[33,48392,2196],{"class":59},[33,48394,33720],{"class":39},[33,48396,43884],{"class":59},[33,48398,33720],{"class":39},[33,48400,2196],{"class":59},[33,48402,36517],{"class":39},[33,48404,43893],{"class":59},[33,48406,2617],{"class":39},[33,48408,2196],{"class":59},[33,48410,2022],{"class":39},[33,48412,43902],{"class":59},[33,48414,2022],{"class":39},[33,48416,39694],{"class":59},[33,48418,48419,48421,48423,48425,48427,48429,48431,48433,48435,48437,48439,48441,48443,48445,48447],{"class":35,"line":11482},[33,48420,43875],{"class":59},[33,48422,40104],{"class":39},[33,48424,2196],{"class":59},[33,48426,2435],{"class":39},[33,48428,43884],{"class":59},[33,48430,33720],{"class":39},[33,48432,2196],{"class":59},[33,48434,44098],{"class":39},[33,48436,43893],{"class":59},[33,48438,2016],{"class":39},[33,48440,2196],{"class":59},[33,48442,2022],{"class":39},[33,48444,43902],{"class":59},[33,48446,2022],{"class":39},[33,48448,39694],{"class":59},[33,48450,48451,48453,48455,48457,48459,48461,48463,48465,48467,48469,48471,48473,48475,48477,48479],{"class":35,"line":11503},[33,48452,43875],{"class":59},[33,48454,44119],{"class":39},[33,48456,2196],{"class":59},[33,48458,36517],{"class":39},[33,48460,43884],{"class":59},[33,48462,22703],{"class":39},[33,48464,2196],{"class":59},[33,48466,44132],{"class":39},[33,48468,43893],{"class":59},[33,48470,2016],{"class":39},[33,48472,2196],{"class":59},[33,48474,33720],{"class":39},[33,48476,43902],{"class":59},[33,48478,33720],{"class":39},[33,48480,39694],{"class":59},[33,48482,48483,48485,48487,48489,48491,48493,48495,48497,48499,48501,48503,48505,48507],{"class":35,"line":11509},[33,48484,39744],{"class":59},[33,48486,32525],{"class":6877},[33,48488,64],{"class":63},[33,48490,1891],{"class":39},[33,48492,2196],{"class":59},[33,48494,32580],{"class":6877},[33,48496,64],{"class":63},[33,48498,1897],{"class":39},[33,48500,2196],{"class":59},[33,48502,32534],{"class":6877},[33,48504,64],{"class":63},[33,48506,2036],{"class":39},[33,48508,157],{"class":59},[33,48510,48511],{"class":35,"line":11523},[33,48512,39773],{"class":59},[33,48514,48515,48517,48519,48521],{"class":35,"line":11529},[33,48516,32496],{"class":39},[33,48518,44185],{"class":59},[33,48520,64],{"class":63},[33,48522,39656],{"class":59},[33,48524,48525,48527,48529,48531,48533,48535,48537,48539,48541,48543,48545,48547,48549,48551,48553],{"class":35,"line":11556},[33,48526,43875],{"class":59},[33,48528,44196],{"class":39},[33,48530,2196],{"class":59},[33,48532,36517],{"class":39},[33,48534,43884],{"class":59},[33,48536,22703],{"class":39},[33,48538,2196],{"class":59},[33,48540,44132],{"class":39},[33,48542,43893],{"class":59},[33,48544,2016],{"class":39},[33,48546,2196],{"class":59},[33,48548,33720],{"class":39},[33,48550,43902],{"class":59},[33,48552,33720],{"class":39},[33,48554,39694],{"class":59},[33,48556,48557,48559,48561,48563,48565,48567,48569,48571,48573,48575,48577,48579,48581,48583,48585],{"class":35,"line":11565},[33,48558,43875],{"class":59},[33,48560,44196],{"class":39},[33,48562,2196],{"class":59},[33,48564,36587],{"class":39},[33,48566,43884],{"class":59},[33,48568,43805],{"class":39},[33,48570,2196],{"class":59},[33,48572,36587],{"class":39},[33,48574,43893],{"class":59},[33,48576,2424],{"class":39},[33,48578,2196],{"class":59},[33,48580,33720],{"class":39},[33,48582,43902],{"class":59},[33,48584,33720],{"class":39},[33,48586,39694],{"class":59},[33,48588,48589,48591,48593,48595,48597],{"class":35,"line":11571},[33,48590,44259],{"class":59},[33,48592,2036],{"class":39},[33,48594,2196],{"class":59},[33,48596,2036],{"class":39},[33,48598,44268],{"class":59},[33,48600,48601],{"class":35,"line":11579},[33,48602,40437],{"class":59},[33,48604,48605,48607,48609,48611,48613],{"class":35,"line":11584},[33,48606,40442],{"class":59},[33,48608,44279],{"class":39},[33,48610,2196],{"class":59},[33,48612,1897],{"class":39},[33,48614,157],{"class":59},[33,48616,48617],{"class":35,"line":18259},[33,48618,39773],{"class":59},[33,48620,48621],{"class":35,"line":18265},[33,48622,44294],{"class":87},[33,48624,48625,48627,48629,48631,48633],{"class":35,"line":18288},[33,48626,5066],{"class":63},[33,48628,40515],{"class":59},[33,48630,27699],{"class":63},[33,48632,40520],{"class":39},[33,48634,40523],{"class":59},[33,48636,48637,48639,48641],{"class":35,"line":18294},[33,48638,6303],{"class":63},[33,48640,40535],{"class":39},[33,48642,40538],{"class":59},[33,48644,48645,48647,48649,48651,48653,48655,48657,48659,48661],{"class":35,"line":18317},[33,48646,40548],{"class":59},[33,48648,44321],{"class":6877},[33,48650,64],{"class":63},[33,48652,44326],{"class":117},[33,48654,2196],{"class":59},[33,48656,40551],{"class":6877},[33,48658,64],{"class":63},[33,48660,40556],{"class":117},[33,48662,157],{"class":59},[33,48664,48665],{"class":35,"line":18331},[33,48666,44341],{"class":87},[33,48668,48669],{"class":35,"line":18351},[33,48670,44346],{"class":87},[33,48672,48673],{"class":35,"line":18357},[33,48674,44351],{"class":87},[33,48676,48677],{"class":35,"line":18368},[33,48678,44356],{"class":87},[33,48680,48681],{"class":35,"line":18391},[33,48682,44361],{"class":87},[33,48684,48685],{"class":35,"line":18413},[33,48686,44366],{"class":87},[33,48688,48689,48691,48693,48695,48697,48699],{"class":35,"line":18418},[33,48690,40568],{"class":63},[33,48692,40571],{"class":59},[33,48694,40574],{"class":63},[33,48696,783],{"class":63},[33,48698,40579],{"class":39},[33,48700,143],{"class":59},[33,48702,48703,48705,48707],{"class":35,"line":18424},[33,48704,40591],{"class":59},[33,48706,2010],{"class":39},[33,48708,157],{"class":59},[33,48710,48711,48713,48715],{"class":35,"line":18438},[33,48712,44393],{"class":63},[33,48714,40535],{"class":39},[33,48716,40610],{"class":59},[33,48718,48719,48721,48723,48725,48727],{"class":35,"line":18451},[33,48720,44402],{"class":59},[33,48722,2010],{"class":39},[33,48724,2196],{"class":59},[33,48726,40632],{"class":39},[33,48728,157],{"class":59},[33,48730,48731,48733,48735,48737,48739,48741],{"class":35,"line":18456},[33,48732,44415],{"class":63},[33,48734,40571],{"class":59},[33,48736,40574],{"class":63},[33,48738,783],{"class":63},[33,48740,40579],{"class":39},[33,48742,143],{"class":59},[33,48744,48745,48747,48749],{"class":35,"line":18470},[33,48746,44430],{"class":59},[33,48748,2010],{"class":39},[33,48750,157],{"class":59},[33,48752,48753],{"class":35,"line":18475},[33,48754,36812],{"class":87},[33,48756,48757,48759,48761],{"class":35,"line":18481},[33,48758,32452],{"class":63},[33,48760,32744],{"class":3632},[33,48762,32747],{"class":59},[33,48764,48765,48767,48769,48771],{"class":35,"line":18486},[33,48766,32752],{"class":59},[33,48768,64],{"class":63},[33,48770,32474],{"class":39},[33,48772,44457],{"class":59},[33,48774,48775,48777,48779,48781],{"class":35,"line":18500},[33,48776,32752],{"class":59},[33,48778,64],{"class":63},[33,48780,32474],{"class":39},[33,48782,44468],{"class":59},[33,48784,48785,48787,48789,48791],{"class":35,"line":18505},[33,48786,32752],{"class":59},[33,48788,64],{"class":63},[33,48790,32474],{"class":39},[33,48792,44479],{"class":59},[33,48794,48795,48797,48799,48801],{"class":35,"line":18510},[33,48796,32752],{"class":59},[33,48798,64],{"class":63},[33,48800,32474],{"class":39},[33,48802,44490],{"class":59},[33,48804,48805,48807,48809,48811],{"class":35,"line":18524},[33,48806,32752],{"class":59},[33,48808,64],{"class":63},[33,48810,32474],{"class":39},[33,48812,44501],{"class":59},[33,48814,48815,48817],{"class":35,"line":18536},[33,48816,16410],{"class":63},[33,48818,32860],{"class":59},[33,48820,48821],{"class":35,"line":18541},[33,48822,127],{"emptyLinePlaceholder":126},[33,48824,48825],{"class":35,"line":18554},[33,48826,44516],{"class":87},[33,48828,48829,48831,48833,48835,48837],{"class":35,"line":18559},[33,48830,133],{"class":63},[33,48832,32871],{"class":39},[33,48834,573],{"class":63},[33,48836,32876],{"class":117},[33,48838,143],{"class":59},[33,48840,48841,48843,48845,48847,48849,48851,48853,48855,48857],{"class":35,"line":18564},[33,48842,32888],{"class":59},[33,48844,64],{"class":63},[33,48846,32103],{"class":59},[33,48848,32895],{"class":117},[33,48850,3374],{"class":63},[33,48852,32900],{"class":59},[33,48854,270],{"class":63},[33,48856,32128],{"class":117},[33,48858,157],{"class":59},[33,48860,48861,48863,48865],{"class":35,"line":18569},[33,48862,32940],{"class":59},[33,48864,64],{"class":63},[33,48866,44557],{"class":59},[33,48868,48869,48871,48873,48875,48877,48879,48881,48883],{"class":35,"line":18582},[33,48870,149],{"class":39},[33,48872,32952],{"class":59},[33,48874,2036],{"class":39},[33,48876,2196],{"class":59},[33,48878,33151],{"class":39},[33,48880,2196],{"class":59},[33,48882,33151],{"class":39},[33,48884,32965],{"class":59},[23653,48886,48888],{"id":48887},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48890,48891],{},"计算图片的均值与方差，用于训练中归一化处理操作",[23,48893,48895],{"className":25,"code":48894,"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,48896,48897,48902,48915,48920,48926,48931,48941,48945,48950,48960,48964,48969,48979,48996,49000,49005,49017,49029,49060,49069,49079,49089,49093,49098,49113,49117,49122,49127,49132,49142,49147,49172,49176,49181,49196,49200,49213,49217,49222,49227,49232,49237,49242,49252,49262,49285,49293,49301,49309,49313,49325,49329,49334,49338,49342,49349,49369,49393,49400,49414,49419,49424,49428,49442,49446,49458],{"__ignoreMap":28},[33,48898,48899],{"class":35,"line":36},[33,48900,48901],{"class":87},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[33,48903,48904,48906,48909,48912],{"class":35,"line":43},[33,48905,32388],{"class":63},[33,48907,48908],{"class":39}," PIL",[33,48910,48911],{"class":63}," import",[33,48913,48914],{"class":59}," Image\n",[33,48916,48917],{"class":35,"line":130},[33,48918,48919],{"class":87},"# os 用来处理文件夹和文件路径\n",[33,48921,48922,48924],{"class":35,"line":146},[33,48923,32045],{"class":63},[33,48925,46951],{"class":59},[33,48927,48928],{"class":35,"line":267},[33,48929,48930],{"class":87},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[33,48932,48933,48935,48937,48939],{"class":35,"line":275},[33,48934,32045],{"class":63},[33,48936,33030],{"class":59},[33,48938,33033],{"class":63},[33,48940,33036],{"class":59},[33,48942,48943],{"class":35,"line":392},[33,48944,127],{"emptyLinePlaceholder":126},[33,48946,48947],{"class":35,"line":406},[33,48948,48949],{"class":87},"# 文件夹路径，包含所有图片文件\n",[33,48951,48952,48955,48957],{"class":35,"line":418},[33,48953,48954],{"class":59},"folder_path ",[33,48956,64],{"class":63},[33,48958,48959],{"class":117}," 'data_cat_dog'\n",[33,48961,48962],{"class":35,"line":425},[33,48963,127],{"emptyLinePlaceholder":126},[33,48965,48966],{"class":35,"line":1147},[33,48967,48968],{"class":87},"# 初始化累积变量\n",[33,48970,48971,48974,48976],{"class":35,"line":1329},[33,48972,48973],{"class":59},"total_pixels ",[33,48975,64],{"class":63},[33,48977,48978],{"class":39}," 0\n",[33,48980,48981,48984,48986,48989,48991,48993],{"class":35,"line":1341},[33,48982,48983],{"class":59},"sum_normalized_pixel_values ",[33,48985,64],{"class":63},[33,48987,48988],{"class":59}," np.zeros(",[33,48990,1891],{"class":39},[33,48992,84],{"class":59},[33,48994,48995],{"class":87},"# 如果是RGB图像，需要三个通道的均值和方差\n",[33,48997,48998],{"class":35,"line":1348},[33,48999,127],{"emptyLinePlaceholder":126},[33,49001,49002],{"class":35,"line":1529},[33,49003,49004],{"class":87},"# 遍历文件夹中的图片文件\n",[33,49006,49007,49009,49012,49014],{"class":35,"line":1546},[33,49008,4690],{"class":63},[33,49010,49011],{"class":59}," root, dirs, files ",[33,49013,27699],{"class":63},[33,49015,49016],{"class":59}," os.walk(folder_path):\n",[33,49018,49019,49021,49024,49026],{"class":35,"line":1551},[33,49020,4864],{"class":63},[33,49022,49023],{"class":59}," filename ",[33,49025,27699],{"class":63},[33,49027,49028],{"class":59}," files:\n",[33,49030,49031,49033,49036,49039,49041,49044,49046,49049,49051,49054,49057],{"class":35,"line":1566},[33,49032,4163],{"class":63},[33,49034,49035],{"class":59}," filename.endswith((",[33,49037,49038],{"class":117},"'.jpg'",[33,49040,14093],{"class":59},[33,49042,49043],{"class":117},"'.jpeg'",[33,49045,14093],{"class":59},[33,49047,49048],{"class":117},"'.png'",[33,49050,14093],{"class":59},[33,49052,49053],{"class":117},"'.bmp'",[33,49055,49056],{"class":59},")):  ",[33,49058,49059],{"class":87},"# 可根据实际情况添加其他格式\n",[33,49061,49062,49064,49066],{"class":35,"line":1578},[33,49063,47319],{"class":59},[33,49065,64],{"class":63},[33,49067,49068],{"class":59}," os.path.join(root, filename)\n",[33,49070,49071,49074,49076],{"class":35,"line":1583},[33,49072,49073],{"class":59},"            image ",[33,49075,64],{"class":63},[33,49077,49078],{"class":59}," Image.open(image_path)\n",[33,49080,49081,49084,49086],{"class":35,"line":3369},[33,49082,49083],{"class":59},"            image_array ",[33,49085,64],{"class":63},[33,49087,49088],{"class":59}," np.array(image)\n",[33,49090,49091],{"class":35,"line":3396},[33,49092,127],{"emptyLinePlaceholder":126},[33,49094,49095],{"class":35,"line":3401},[33,49096,49097],{"class":87},"            # 归一化像素值到0-1之间\n",[33,49099,49100,49103,49105,49108,49110],{"class":35,"line":3418},[33,49101,49102],{"class":59},"            normalized_image_array ",[33,49104,64],{"class":63},[33,49106,49107],{"class":59}," image_array ",[33,49109,2401],{"class":63},[33,49111,49112],{"class":39}," 255.0\n",[33,49114,49115],{"class":35,"line":3423},[33,49116,127],{"emptyLinePlaceholder":126},[33,49118,49119],{"class":35,"line":3428},[33,49120,49121],{"class":87},"            # print(image_path)\n",[33,49123,49124],{"class":35,"line":3433},[33,49125,49126],{"class":87},"            # print(normalized_image_array.shape)\n",[33,49128,49129],{"class":35,"line":3447},[33,49130,49131],{"class":87},"            # 累积归一化后的像素值和像素数量\n",[33,49133,49134,49137,49139],{"class":35,"line":3452},[33,49135,49136],{"class":59},"            total_pixels ",[33,49138,11136],{"class":63},[33,49140,49141],{"class":59}," normalized_image_array.size\n",[33,49143,49144],{"class":35,"line":4243},[33,49145,49146],{"class":87},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[33,49148,49149,49152,49154,49157,49160,49162,49164,49166,49168,49170],{"class":35,"line":4257},[33,49150,49151],{"class":59},"            sum_normalized_pixel_values ",[33,49153,11136],{"class":63},[33,49155,49156],{"class":59}," np.sum(normalized_image_array, ",[33,49158,49159],{"class":6877},"axis",[33,49161,64],{"class":63},[33,49163,109],{"class":59},[33,49165,2010],{"class":39},[33,49167,14093],{"class":59},[33,49169,2036],{"class":39},[33,49171,121],{"class":59},[33,49173,49174],{"class":35,"line":4265},[33,49175,127],{"emptyLinePlaceholder":126},[33,49177,49178],{"class":35,"line":4270},[33,49179,49180],{"class":87},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[33,49182,49183,49186,49188,49191,49193],{"class":35,"line":4276},[33,49184,49185],{"class":59},"mean ",[33,49187,64],{"class":63},[33,49189,49190],{"class":59}," sum_normalized_pixel_values ",[33,49192,2401],{"class":63},[33,49194,49195],{"class":59}," total_pixels\n",[33,49197,49198],{"class":35,"line":4282},[33,49199,127],{"emptyLinePlaceholder":126},[33,49201,49202,49205,49207,49209,49211],{"class":35,"line":4287},[33,49203,49204],{"class":59},"sum_squared_diff ",[33,49206,64],{"class":63},[33,49208,48988],{"class":59},[33,49210,1891],{"class":39},[33,49212,157],{"class":59},[33,49214,49215],{"class":35,"line":9608},[33,49216,127],{"emptyLinePlaceholder":126},[33,49218,49219],{"class":35,"line":9632},[33,49220,49221],{"class":87},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[33,49223,49224],{"class":35,"line":9637},[33,49225,49226],{"class":87},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[33,49228,49229],{"class":35,"line":9643},[33,49230,49231],{"class":87},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[33,49233,49234],{"class":35,"line":9670},[33,49235,49236],{"class":87},"# Image.open(image_path)：打开图片\n",[33,49238,49239],{"class":35,"line":9675},[33,49240,49241],{"class":87},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[33,49243,49244,49246,49248,49250],{"class":35,"line":9681},[33,49245,4690],{"class":63},[33,49247,49011],{"class":59},[33,49249,27699],{"class":63},[33,49251,49016],{"class":59},[33,49253,49254,49256,49258,49260],{"class":35,"line":9693},[33,49255,4864],{"class":63},[33,49257,49023],{"class":59},[33,49259,27699],{"class":63},[33,49261,49028],{"class":59},[33,49263,49264,49266,49268,49270,49272,49274,49276,49278,49280,49282],{"class":35,"line":9705},[33,49265,4163],{"class":63},[33,49267,49035],{"class":59},[33,49269,49038],{"class":117},[33,49271,14093],{"class":59},[33,49273,49043],{"class":117},[33,49275,14093],{"class":59},[33,49277,49048],{"class":117},[33,49279,14093],{"class":59},[33,49281,49053],{"class":117},[33,49283,49284],{"class":59},")):\n",[33,49286,49287,49289,49291],{"class":35,"line":9717},[33,49288,47319],{"class":59},[33,49290,64],{"class":63},[33,49292,49068],{"class":59},[33,49294,49295,49297,49299],{"class":35,"line":11375},[33,49296,49073],{"class":59},[33,49298,64],{"class":63},[33,49300,49078],{"class":59},[33,49302,49303,49305,49307],{"class":35,"line":11400},[33,49304,49083],{"class":59},[33,49306,64],{"class":63},[33,49308,49088],{"class":59},[33,49310,49311],{"class":35,"line":11423},[33,49312,49097],{"class":87},[33,49314,49315,49317,49319,49321,49323],{"class":35,"line":11447},[33,49316,49102],{"class":59},[33,49318,64],{"class":63},[33,49320,49107],{"class":59},[33,49322,2401],{"class":63},[33,49324,49112],{"class":39},[33,49326,49327],{"class":35,"line":11452},[33,49328,49126],{"class":87},[33,49330,49331],{"class":35,"line":11457},[33,49332,49333],{"class":87},"            # print(mean.shape)\n",[33,49335,49336],{"class":35,"line":11462},[33,49337,49121],{"class":87},[33,49339,49340],{"class":35,"line":11471},[33,49341,127],{"emptyLinePlaceholder":126},[33,49343,49344,49347],{"class":35,"line":11476},[33,49345,49346],{"class":63},"            try",[33,49348,143],{"class":59},[33,49350,49351,49354,49356,49359,49361,49364,49366],{"class":35,"line":11482},[33,49352,49353],{"class":59},"                diff ",[33,49355,64],{"class":63},[33,49357,49358],{"class":59}," (normalized_image_array ",[33,49360,2349],{"class":63},[33,49362,49363],{"class":59}," mean) ",[33,49365,12319],{"class":63},[33,49367,49368],{"class":39}," 2\n",[33,49370,49371,49374,49376,49379,49381,49383,49385,49387,49389,49391],{"class":35,"line":11503},[33,49372,49373],{"class":59},"                sum_squared_diff ",[33,49375,11136],{"class":63},[33,49377,49378],{"class":59}," np.sum(diff, ",[33,49380,49159],{"class":6877},[33,49382,64],{"class":63},[33,49384,109],{"class":59},[33,49386,2010],{"class":39},[33,49388,14093],{"class":59},[33,49390,2036],{"class":39},[33,49392,121],{"class":59},[33,49394,49395,49398],{"class":35,"line":11509},[33,49396,49397],{"class":63},"            except",[33,49399,143],{"class":59},[33,49401,49402,49405,49407,49409,49412],{"class":35,"line":11523},[33,49403,49404],{"class":39},"                print",[33,49406,109],{"class":59},[33,49408,999],{"class":63},[33,49410,49411],{"class":117},"\"捕获到自定义异常\"",[33,49413,157],{"class":59},[33,49415,49416],{"class":35,"line":11529},[33,49417,49418],{"class":87},"            # diff = (normalized_image_array - mean) ** 2\n",[33,49420,49421],{"class":35,"line":11556},[33,49422,49423],{"class":87},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[33,49425,49426],{"class":35,"line":11565},[33,49427,127],{"emptyLinePlaceholder":126},[33,49429,49430,49433,49435,49438,49440],{"class":35,"line":11571},[33,49431,49432],{"class":59},"variance ",[33,49434,64],{"class":63},[33,49436,49437],{"class":59}," sum_squared_diff ",[33,49439,2401],{"class":63},[33,49441,49195],{"class":59},[33,49443,49444],{"class":35,"line":11579},[33,49445,127],{"emptyLinePlaceholder":126},[33,49447,49448,49450,49452,49455],{"class":35,"line":11584},[33,49449,72],{"class":39},[33,49451,109],{"class":59},[33,49453,49454],{"class":117},"\"Mean:\"",[33,49456,49457],{"class":59},", mean)\n",[33,49459,49460,49462,49464,49467],{"class":35,"line":18259},[33,49461,72],{"class":39},[33,49463,109],{"class":59},[33,49465,49466],{"class":117},"\"Variance:\"",[33,49468,49469],{"class":59},", variance)\n",[23,49471,49473],{"className":25,"code":49472,"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,49474,49475,49481,49487,49497,49503,49513,49527,49537,49547,49557,49561,49571,49581,49585,49589,49597,49602,49607,49626,49630,49635,49640,49645,49650,49691,49696,49706,49711,49724,49729,49734,49739,49744,49749,49753,49758,49763,49785,49789,49821,49835,49845,49855,49859,49869,49883,49893,49903,49913,49919,49923,49927,49931,49935,49939,49947,49967,49971,49975,49979,49983,49999,50003,50007,50015,50019,50023,50031,50035,50039,50043,50051,50055,50059,50063,50071,50075,50083,50087,50095,50099,50107,50111,50119,50123,50127,50135,50139,50143,50155,50179,50193,50197,50201,50205,50213,50217,50225,50229,50237,50241,50249,50253,50261,50265,50273,50277,50289,50293,50301,50305,50313,50317,50321,50325,50329,50337,50341,50357,50361,50369,50373,50377,50381,50385,50389,50393,50397,50413,50417,50429,50433,50445,50449,50461,50465,50473,50477,50485,50489,50493,50497,50503,50507,50515,50519,50535,50539,50547,50551,50567,50579,50583,50595,50599,50603,50611,50615,50619,50627,50631,50639,50643,50651,50655,50659,50701,50743,50747,50751,50767,50771,50787,50791,50795,50803,50807,50811,50823,50861,50865,50869,50877,50881,50895,50905,50911,50917,50923,50929,50933,50937,50943,50947,50951,50959,50963,50981,50985,50989,50993,51009,51013,51017,51021,51025,51029,51049,51069,51073,51077,51081,51089,51097,51101,51117,51137,51157,51161,51166,51175,51184,51189,51194,51199,51212,51217,51226,51235,51252],{"__ignoreMap":28},[33,49476,49477,49479],{"class":35,"line":36},[33,49478,32045],{"class":63},[33,49480,33472],{"class":59},[33,49482,49483,49485],{"class":35,"line":43},[33,49484,32045],{"class":63},[33,49486,33479],{"class":59},[33,49488,49489,49491,49493,49495],{"class":35,"line":130},[33,49490,32045],{"class":63},[33,49492,33490],{"class":59},[33,49494,33033],{"class":63},[33,49496,33495],{"class":59},[33,49498,49499,49501],{"class":35,"line":146},[33,49500,32045],{"class":63},[33,49502,32048],{"class":59},[33,49504,49505,49507,49509,49511],{"class":35,"line":267},[33,49506,32388],{"class":63},[33,49508,33065],{"class":59},[33,49510,32045],{"class":63},[33,49512,33512],{"class":59},[33,49514,49515,49517,49519,49521,49524],{"class":35,"line":275},[33,49516,32388],{"class":63},[33,49518,33018],{"class":59},[33,49520,32045],{"class":63},[33,49522,49523],{"class":59}," ImageFolder ",[33,49525,49526],{"class":87},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[33,49528,49529,49531,49533,49535],{"class":35,"line":392},[33,49530,32388],{"class":63},[33,49532,33048],{"class":59},[33,49534,32045],{"class":63},[33,49536,33053],{"class":59},[33,49538,49539,49541,49543,49545],{"class":35,"line":406},[33,49540,32045],{"class":63},[33,49542,33065],{"class":59},[33,49544,33033],{"class":63},[33,49546,33070],{"class":59},[33,49548,49549,49551,49553,49555],{"class":35,"line":418},[33,49550,32045],{"class":63},[33,49552,33082],{"class":59},[33,49554,33033],{"class":63},[33,49556,33087],{"class":59},[33,49558,49559],{"class":35,"line":425},[33,49560,33557],{"class":87},[33,49562,49563,49565,49567,49569],{"class":35,"line":1147},[33,49564,32388],{"class":63},[33,49566,33564],{"class":59},[33,49568,32045],{"class":63},[33,49570,44677],{"class":59},[33,49572,49573,49575,49577,49579],{"class":35,"line":1329},[33,49574,32388],{"class":63},[33,49576,32391],{"class":59},[33,49578,32045],{"class":63},[33,49580,32396],{"class":59},[33,49582,49583],{"class":35,"line":1341},[33,49584,127],{"emptyLinePlaceholder":126},[33,49586,49587],{"class":35,"line":1348},[33,49588,33592],{"class":87},[33,49590,49591,49593,49595],{"class":35,"line":1529},[33,49592,33597],{"class":63},[33,49594,33600],{"class":3632},[33,49596,33603],{"class":59},[33,49598,49599],{"class":35,"line":1546},[33,49600,49601],{"class":87},"    # 导入自己的数据集，并进行数据处理\n",[33,49603,49604],{"class":35,"line":1551},[33,49605,49606],{"class":87},"    # 定义数据集的路径\n",[33,49608,49609,49612,49614,49616,49618,49620,49624],{"class":35,"line":1566},[33,49610,49611],{"class":39},"    ROOT_PATH",[33,49613,64],{"class":63},[33,49615,2487],{"class":63},[33,49617,1014],{"class":117},[33,49619,2375],{"class":39},[33,49621,49623],{"class":49622},"sA_wV","\u002Fdata\u002Ftrain",[33,49625,26789],{"class":117},[33,49627,49628],{"class":35,"line":1578},[33,49629,127],{"emptyLinePlaceholder":126},[33,49631,49632],{"class":35,"line":1583},[33,49633,49634],{"class":87},"    # 定义归一化方法\n",[33,49636,49637],{"class":35,"line":3369},[33,49638,49639],{"class":87},"    # 这里需要先计算一下数据集的均值和方差\n",[33,49641,49642],{"class":35,"line":3396},[33,49643,49644],{"class":87},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[33,49646,49647],{"class":35,"line":3401},[33,49648,49649],{"class":87},"    # 第一个参数是均值，第二个参数是方差\n",[33,49651,49652,49655,49657,49660,49663,49665,49668,49670,49673,49676,49679,49681,49684,49686,49689],{"class":35,"line":3418},[33,49653,49654],{"class":59},"    normalize",[33,49656,64],{"class":63},[33,49658,49659],{"class":59},"transforms.Normalize([",[33,49661,49662],{"class":39},"0.162",[33,49664,2196],{"class":59},[33,49666,49667],{"class":39},"0.151",[33,49669,2196],{"class":59},[33,49671,49672],{"class":39},"0.138",[33,49674,49675],{"class":59},"],[",[33,49677,49678],{"class":39},"0.058",[33,49680,2196],{"class":59},[33,49682,49683],{"class":39},"0.052",[33,49685,2196],{"class":59},[33,49687,49688],{"class":39},"0.048",[33,49690,6318],{"class":59},[33,49692,49693],{"class":35,"line":3423},[33,49694,49695],{"class":87},"    # 定义数据集处理方法变量\n",[33,49697,49698,49701,49703],{"class":35,"line":3428},[33,49699,49700],{"class":59},"    train_transform",[33,49702,64],{"class":63},[33,49704,49705],{"class":59},"transforms.Compose([\n",[33,49707,49708],{"class":35,"line":3433},[33,49709,49710],{"class":87},"        # 调整图像大小为224*224\n",[33,49712,49713,49716,49718,49720,49722],{"class":35,"line":3447},[33,49714,49715],{"class":59},"        transforms.Resize((",[33,49717,33151],{"class":39},[33,49719,2196],{"class":59},[33,49721,33151],{"class":39},[33,49723,44268],{"class":59},[33,49725,49726],{"class":35,"line":3452},[33,49727,49728],{"class":87},"        # 将图像转换为张量\n",[33,49730,49731],{"class":35,"line":4243},[33,49732,49733],{"class":59},"        transforms.ToTensor(),\n",[33,49735,49736],{"class":35,"line":4257},[33,49737,49738],{"class":59},"        normalize])\n",[33,49740,49741],{"class":35,"line":4265},[33,49742,49743],{"class":87},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[33,49745,49746],{"class":35,"line":4270},[33,49747,49748],{"class":87},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[33,49750,49751],{"class":35,"line":4276},[33,49752,127],{"emptyLinePlaceholder":126},[33,49754,49755],{"class":35,"line":4282},[33,49756,49757],{"class":87},"    # 加载数据集\n",[33,49759,49760],{"class":35,"line":4287},[33,49761,49762],{"class":87},"    # 传入数据集路径与处理方法\n",[33,49764,49765,49767,49769,49772,49775,49777,49780,49782],{"class":35,"line":9608},[33,49766,33608],{"class":59},[33,49768,64],{"class":63},[33,49770,49771],{"class":59},"ImageFolder(",[33,49773,49774],{"class":39},"ROOT_PATH",[33,49776,2196],{"class":59},[33,49778,49779],{"class":6877},"transform",[33,49781,64],{"class":63},[33,49783,49784],{"class":59},"train_transform)\n",[33,49786,49787],{"class":35,"line":9632},[33,49788,127],{"emptyLinePlaceholder":126},[33,49790,49791,49793,49795,49797,49799,49801,49803,49805,49807,49809,49811,49813,49815,49817,49819],{"class":35,"line":9637},[33,49792,33660],{"class":59},[33,49794,64],{"class":63},[33,49796,33665],{"class":59},[33,49798,33668],{"class":39},[33,49800,109],{"class":59},[33,49802,33673],{"class":39},[33,49804,1540],{"class":63},[33,49806,9018],{"class":39},[33,49808,33680],{"class":59},[33,49810,33668],{"class":39},[33,49812,109],{"class":59},[33,49814,33687],{"class":39},[33,49816,1540],{"class":63},[33,49818,9018],{"class":39},[33,49820,33694],{"class":59},[33,49822,49823,49825,49827,49829,49831,49833],{"class":35,"line":9643},[33,49824,33699],{"class":59},[33,49826,64],{"class":63},[33,49828,33704],{"class":59},[33,49830,33187],{"class":6877},[33,49832,64],{"class":63},[33,49834,33192],{"class":59},[33,49836,49837,49839,49841,49843],{"class":35,"line":9670},[33,49838,33715],{"class":6877},[33,49840,64],{"class":63},[33,49842,2016],{"class":39},[33,49844,33116],{"class":59},[33,49846,49847,49849,49851,49853],{"class":35,"line":9675},[33,49848,33727],{"class":6877},[33,49850,64],{"class":63},[33,49852,33126],{"class":39},[33,49854,33116],{"class":59},[33,49856,49857],{"class":35,"line":9681},[33,49858,33738],{"class":87},[33,49860,49861,49863,49865,49867],{"class":35,"line":9693},[33,49862,33743],{"class":6877},[33,49864,64],{"class":63},[33,49866,2213],{"class":39},[33,49868,157],{"class":59},[33,49870,49871,49873,49875,49877,49879,49881],{"class":35,"line":9705},[33,49872,33754],{"class":59},[33,49874,64],{"class":63},[33,49876,33184],{"class":59},[33,49878,33187],{"class":6877},[33,49880,64],{"class":63},[33,49882,33765],{"class":59},[33,49884,49885,49887,49889,49891],{"class":35,"line":9717},[33,49886,33770],{"class":6877},[33,49888,64],{"class":63},[33,49890,2016],{"class":39},[33,49892,33116],{"class":59},[33,49894,49895,49897,49899,49901],{"class":35,"line":11375},[33,49896,33781],{"class":6877},[33,49898,64],{"class":63},[33,49900,33126],{"class":39},[33,49902,33116],{"class":59},[33,49904,49905,49907,49909,49911],{"class":35,"line":11400},[33,49906,33792],{"class":6877},[33,49908,64],{"class":63},[33,49910,2213],{"class":39},[33,49912,157],{"class":59},[33,49914,49915,49917],{"class":35,"line":11423},[33,49916,5752],{"class":63},[33,49918,33805],{"class":59},[33,49920,49921],{"class":35,"line":11447},[33,49922,127],{"emptyLinePlaceholder":126},[33,49924,49925],{"class":35,"line":11452},[33,49926,33814],{"class":87},[33,49928,49929],{"class":35,"line":11457},[33,49930,33819],{"class":87},[33,49932,49933],{"class":35,"line":11462},[33,49934,127],{"emptyLinePlaceholder":126},[33,49936,49937],{"class":35,"line":11471},[33,49938,33828],{"class":87},[33,49940,49941,49943,49945],{"class":35,"line":11476},[33,49942,33597],{"class":63},[33,49944,33835],{"class":3632},[33,49946,33838],{"class":59},[33,49948,49949,49951,49953,49955,49957,49959,49961,49963,49965],{"class":35,"line":11482},[33,49950,32888],{"class":59},[33,49952,64],{"class":63},[33,49954,32103],{"class":59},[33,49956,32895],{"class":117},[33,49958,3374],{"class":63},[33,49960,32900],{"class":59},[33,49962,270],{"class":63},[33,49964,33857],{"class":117},[33,49966,157],{"class":59},[33,49968,49969],{"class":35,"line":11503},[33,49970,127],{"emptyLinePlaceholder":126},[33,49972,49973],{"class":35,"line":11509},[33,49974,33872],{"class":87},[33,49976,49977],{"class":35,"line":11523},[33,49978,33877],{"class":87},[33,49980,49981],{"class":35,"line":11529},[33,49982,33882],{"class":87},[33,49984,49985,49987,49989,49991,49993,49995,49997],{"class":35,"line":11556},[33,49986,33887],{"class":59},[33,49988,64],{"class":63},[33,49990,33892],{"class":59},[33,49992,33895],{"class":6877},[33,49994,64],{"class":63},[33,49996,33900],{"class":39},[33,49998,157],{"class":59},[33,50000,50001],{"class":35,"line":11565},[33,50002,127],{"emptyLinePlaceholder":126},[33,50004,50005],{"class":35,"line":11571},[33,50006,33911],{"class":87},[33,50008,50009,50011,50013],{"class":35,"line":11579},[33,50010,33916],{"class":59},[33,50012,64],{"class":63},[33,50014,33921],{"class":59},[33,50016,50017],{"class":35,"line":11584},[33,50018,127],{"emptyLinePlaceholder":126},[33,50020,50021],{"class":35,"line":18259},[33,50022,33930],{"class":87},[33,50024,50025,50027,50029],{"class":35,"line":18265},[33,50026,32940],{"class":59},[33,50028,64],{"class":63},[33,50030,33939],{"class":59},[33,50032,50033],{"class":35,"line":18288},[33,50034,33944],{"class":87},[33,50036,50037],{"class":35,"line":18294},[33,50038,33949],{"class":87},[33,50040,50041],{"class":35,"line":18317},[33,50042,33954],{"class":87},[33,50044,50045,50047,50049],{"class":35,"line":18331},[33,50046,33959],{"class":59},[33,50048,64],{"class":63},[33,50050,33964],{"class":59},[33,50052,50053],{"class":35,"line":18351},[33,50054,127],{"emptyLinePlaceholder":126},[33,50056,50057],{"class":35,"line":18357},[33,50058,33977],{"class":87},[33,50060,50061],{"class":35,"line":18368},[33,50062,33982],{"class":87},[33,50064,50065,50067,50069],{"class":35,"line":18391},[33,50066,33987],{"class":59},[33,50068,64],{"class":63},[33,50070,928],{"class":39},[33,50072,50073],{"class":35,"line":18413},[33,50074,33996],{"class":87},[33,50076,50077,50079,50081],{"class":35,"line":18418},[33,50078,34001],{"class":59},[33,50080,64],{"class":63},[33,50082,938],{"class":59},[33,50084,50085],{"class":35,"line":18424},[33,50086,34010],{"class":87},[33,50088,50089,50091,50093],{"class":35,"line":18438},[33,50090,34015],{"class":59},[33,50092,64],{"class":63},[33,50094,938],{"class":59},[33,50096,50097],{"class":35,"line":18451},[33,50098,34024],{"class":87},[33,50100,50101,50103,50105],{"class":35,"line":18456},[33,50102,34029],{"class":59},[33,50104,64],{"class":63},[33,50106,938],{"class":59},[33,50108,50109],{"class":35,"line":18470},[33,50110,34038],{"class":87},[33,50112,50113,50115,50117],{"class":35,"line":18475},[33,50114,34043],{"class":59},[33,50116,64],{"class":63},[33,50118,938],{"class":59},[33,50120,50121],{"class":35,"line":18481},[33,50122,127],{"emptyLinePlaceholder":126},[33,50124,50125],{"class":35,"line":18486},[33,50126,34056],{"class":87},[33,50128,50129,50131,50133],{"class":35,"line":18500},[33,50130,34061],{"class":59},[33,50132,64],{"class":63},[33,50134,34066],{"class":59},[33,50136,50137],{"class":35,"line":18505},[33,50138,127],{"emptyLinePlaceholder":126},[33,50140,50141],{"class":35,"line":18510},[33,50142,34079],{"class":87},[33,50144,50145,50147,50149,50151,50153],{"class":35,"line":18524},[33,50146,4864],{"class":63},[33,50148,34086],{"class":59},[33,50150,27699],{"class":63},[33,50152,34091],{"class":39},[33,50154,34094],{"class":59},[33,50156,50157,50159,50161,50163,50165,50167,50169,50171,50173,50175,50177],{"class":35,"line":18536},[33,50158,583],{"class":39},[33,50160,109],{"class":59},[33,50162,34103],{"class":117},[33,50164,34106],{"class":39},[33,50166,2401],{"class":117},[33,50168,34106],{"class":39},[33,50170,1014],{"class":117},[33,50172,34115],{"class":59},[33,50174,2349],{"class":63},[33,50176,2036],{"class":39},[33,50178,121],{"class":59},[33,50180,50181,50183,50185,50187,50189,50191],{"class":35,"line":18541},[33,50182,583],{"class":39},[33,50184,109],{"class":59},[33,50186,34130],{"class":117},[33,50188,1540],{"class":63},[33,50190,2264],{"class":39},[33,50192,157],{"class":59},[33,50194,50195],{"class":35,"line":18554},[33,50196,127],{"emptyLinePlaceholder":126},[33,50198,50199],{"class":35,"line":18559},[33,50200,34145],{"class":87},[33,50202,50203],{"class":35,"line":18564},[33,50204,34150],{"class":87},[33,50206,50207,50209,50211],{"class":35,"line":18569},[33,50208,34155],{"class":59},[33,50210,64],{"class":63},[33,50212,928],{"class":39},[33,50214,50215],{"class":35,"line":18582},[33,50216,34164],{"class":87},[33,50218,50219,50221,50223],{"class":35,"line":18587},[33,50220,34169],{"class":59},[33,50222,64],{"class":63},[33,50224,923],{"class":39},[33,50226,50227],{"class":35,"line":34280},[33,50228,34178],{"class":87},[33,50230,50231,50233,50235],{"class":35,"line":34286},[33,50232,34183],{"class":59},[33,50234,64],{"class":63},[33,50236,928],{"class":39},[33,50238,50239],{"class":35,"line":34292},[33,50240,34192],{"class":87},[33,50242,50243,50245,50247],{"class":35,"line":34298},[33,50244,34197],{"class":59},[33,50246,64],{"class":63},[33,50248,923],{"class":39},[33,50250,50251],{"class":35,"line":34304},[33,50252,34206],{"class":87},[33,50254,50255,50257,50259],{"class":35,"line":34315},[33,50256,34211],{"class":59},[33,50258,64],{"class":63},[33,50260,923],{"class":39},[33,50262,50263],{"class":35,"line":34321},[33,50264,34220],{"class":87},[33,50266,50267,50269,50271],{"class":35,"line":34341},[33,50268,34225],{"class":59},[33,50270,64],{"class":63},[33,50272,923],{"class":39},[33,50274,50275],{"class":35,"line":34347},[33,50276,34234],{"class":87},[33,50278,50279,50281,50283,50285,50287],{"class":35,"line":34358},[33,50280,5066],{"class":63},[33,50282,33251],{"class":59},[33,50284,27699],{"class":63},[33,50286,33256],{"class":39},[33,50288,34247],{"class":59},[33,50290,50291],{"class":35,"line":34364},[33,50292,34252],{"class":87},[33,50294,50295,50297,50299],{"class":35,"line":34370},[33,50296,34257],{"class":59},[33,50298,64],{"class":63},[33,50300,34262],{"class":59},[33,50302,50303],{"class":35,"line":34376},[33,50304,34267],{"class":87},[33,50306,50307,50309,50311],{"class":35,"line":34382},[33,50308,34272],{"class":59},[33,50310,64],{"class":63},[33,50312,34277],{"class":59},[33,50314,50315],{"class":35,"line":34388},[33,50316,34283],{"class":87},[33,50318,50319],{"class":35,"line":34394},[33,50320,34289],{"class":59},[33,50322,50323],{"class":35,"line":34400},[33,50324,34295],{"class":87},[33,50326,50327],{"class":35,"line":34420},[33,50328,34301],{"class":87},[33,50330,50331,50333,50335],{"class":35,"line":34426},[33,50332,34307],{"class":59},[33,50334,64],{"class":63},[33,50336,34312],{"class":59},[33,50338,50339],{"class":35,"line":34442},[33,50340,34318],{"class":87},[33,50342,50343,50345,50347,50349,50351,50353,50355],{"class":35,"line":34448},[33,50344,34324],{"class":59},[33,50346,64],{"class":63},[33,50348,34329],{"class":59},[33,50350,34332],{"class":6877},[33,50352,64],{"class":63},[33,50354,2036],{"class":39},[33,50356,157],{"class":59},[33,50358,50359],{"class":35,"line":34462},[33,50360,34344],{"class":87},[33,50362,50363,50365,50367],{"class":35,"line":34468},[33,50364,34350],{"class":59},[33,50366,64],{"class":63},[33,50368,34355],{"class":59},[33,50370,50371],{"class":35,"line":34483},[33,50372,34361],{"class":87},[33,50374,50375],{"class":35,"line":34489},[33,50376,34367],{"class":59},[33,50378,50379],{"class":35,"line":34498},[33,50380,34373],{"class":87},[33,50382,50383],{"class":35,"line":34504},[33,50384,34379],{"class":59},[33,50386,50387],{"class":35,"line":34513},[33,50388,34385],{"class":87},[33,50390,50391],{"class":35,"line":34519},[33,50392,34391],{"class":59},[33,50394,50395],{"class":35,"line":34525},[33,50396,34397],{"class":87},[33,50398,50399,50401,50403,50405,50407,50409,50411],{"class":35,"line":34534},[33,50400,34403],{"class":59},[33,50402,11136],{"class":63},[33,50404,34408],{"class":59},[33,50406,1540],{"class":63},[33,50408,34413],{"class":59},[33,50410,2010],{"class":39},[33,50412,157],{"class":59},[33,50414,50415],{"class":35,"line":34540},[33,50416,34423],{"class":87},[33,50418,50419,50421,50423,50425,50427],{"class":35,"line":34551},[33,50420,34429],{"class":59},[33,50422,11136],{"class":63},[33,50424,34434],{"class":59},[33,50426,573],{"class":63},[33,50428,34439],{"class":59},[33,50430,50431],{"class":35,"line":34557},[33,50432,34445],{"class":87},[33,50434,50435,50437,50439,50441,50443],{"class":35,"line":34576},[33,50436,34451],{"class":59},[33,50438,11136],{"class":63},[33,50440,34413],{"class":59},[33,50442,2010],{"class":39},[33,50444,157],{"class":59},[33,50446,50447],{"class":35,"line":34582},[33,50448,34465],{"class":87},[33,50450,50451,50453,50455,50457,50459],{"class":35,"line":34593},[33,50452,5066],{"class":63},[33,50454,34473],{"class":59},[33,50456,27699],{"class":63},[33,50458,33256],{"class":39},[33,50460,34480],{"class":59},[33,50462,50463],{"class":35,"line":34599},[33,50464,34486],{"class":87},[33,50466,50467,50469,50471],{"class":35,"line":34619},[33,50468,34257],{"class":59},[33,50470,64],{"class":63},[33,50472,34262],{"class":59},[33,50474,50475],{"class":35,"line":34635},[33,50476,34501],{"class":87},[33,50478,50479,50481,50483],{"class":35,"line":34641},[33,50480,34272],{"class":59},[33,50482,64],{"class":63},[33,50484,34277],{"class":59},[33,50486,50487],{"class":35,"line":34655},[33,50488,34516],{"class":87},[33,50490,50491],{"class":35,"line":34661},[33,50492,34522],{"class":59},[33,50494,50495],{"class":35,"line":34667},[33,50496,38003],{"class":87},[33,50498,50499,50501],{"class":35,"line":34678},[33,50500,34528],{"class":63},[33,50502,34531],{"class":59},[33,50504,50505],{"class":35,"line":34684},[33,50506,34537],{"class":87},[33,50508,50509,50511,50513],{"class":35,"line":34690},[33,50510,38018],{"class":59},[33,50512,64],{"class":63},[33,50514,34312],{"class":59},[33,50516,50517],{"class":35,"line":34700},[33,50518,34554],{"class":87},[33,50520,50521,50523,50525,50527,50529,50531,50533],{"class":35,"line":34706},[33,50522,38031],{"class":59},[33,50524,64],{"class":63},[33,50526,34329],{"class":59},[33,50528,34332],{"class":6877},[33,50530,64],{"class":63},[33,50532,2036],{"class":39},[33,50534,157],{"class":59},[33,50536,50537],{"class":35,"line":34717},[33,50538,34579],{"class":87},[33,50540,50541,50543,50545],{"class":35,"line":34723},[33,50542,38052],{"class":59},[33,50544,64],{"class":63},[33,50546,34355],{"class":59},[33,50548,50549],{"class":35,"line":34733},[33,50550,34596],{"class":87},[33,50552,50553,50555,50557,50559,50561,50563,50565],{"class":35,"line":34738},[33,50554,38065],{"class":59},[33,50556,11136],{"class":63},[33,50558,38070],{"class":59},[33,50560,1540],{"class":63},[33,50562,34413],{"class":59},[33,50564,2010],{"class":39},[33,50566,157],{"class":59},[33,50568,50569,50571,50573,50575,50577],{"class":35,"line":34744},[33,50570,38083],{"class":59},[33,50572,11136],{"class":63},[33,50574,34434],{"class":59},[33,50576,573],{"class":63},[33,50578,34439],{"class":59},[33,50580,50581],{"class":35,"line":34793},[33,50582,38096],{"class":87},[33,50584,50585,50587,50589,50591,50593],{"class":35,"line":34840},[33,50586,38101],{"class":59},[33,50588,11136],{"class":63},[33,50590,34413],{"class":59},[33,50592,2010],{"class":39},[33,50594,157],{"class":59},[33,50596,50597],{"class":35,"line":34845},[33,50598,34658],{"class":87},[33,50600,50601],{"class":35,"line":34851},[33,50602,34664],{"class":87},[33,50604,50605,50607,50609],{"class":35,"line":34870},[33,50606,34670],{"class":59},[33,50608,2401],{"class":63},[33,50610,34675],{"class":59},[33,50612,50613],{"class":35,"line":34876},[33,50614,34681],{"class":87},[33,50616,50617],{"class":35,"line":34896},[33,50618,34687],{"class":87},[33,50620,50621,50623,50625],{"class":35,"line":34902},[33,50622,34693],{"class":59},[33,50624,2401],{"class":63},[33,50626,34675],{"class":59},[33,50628,50629],{"class":35,"line":34908},[33,50630,34703],{"class":87},[33,50632,50633,50635,50637],{"class":35,"line":34918},[33,50634,34709],{"class":59},[33,50636,2401],{"class":63},[33,50638,34714],{"class":59},[33,50640,50641],{"class":35,"line":34923},[33,50642,34720],{"class":87},[33,50644,50645,50647,50649],{"class":35,"line":34929},[33,50646,34726],{"class":59},[33,50648,2401],{"class":63},[33,50650,34714],{"class":59},[33,50652,50653],{"class":35,"line":34945},[33,50654,127],{"emptyLinePlaceholder":126},[33,50656,50657],{"class":35,"line":34990},[33,50658,34741],{"class":87},[33,50660,50661,50663,50665,50667,50669,50671,50673,50675,50677,50679,50681,50683,50685,50687,50689,50691,50693,50695,50697,50699],{"class":35,"line":34996},[33,50662,583],{"class":39},[33,50664,109],{"class":59},[33,50666,5255],{"class":117},[33,50668,34106],{"class":39},[33,50670,34755],{"class":117},[33,50672,1005],{"class":39},[33,50674,34760],{"class":63},[33,50676,1011],{"class":39},[33,50678,34765],{"class":117},[33,50680,1005],{"class":39},[33,50682,34760],{"class":63},[33,50684,1011],{"class":39},[33,50686,5255],{"class":117},[33,50688,34776],{"class":59},[33,50690,2349],{"class":63},[33,50692,2036],{"class":39},[33,50694,34783],{"class":59},[33,50696,2349],{"class":63},[33,50698,2036],{"class":39},[33,50700,34790],{"class":59},[33,50702,50703,50705,50707,50709,50711,50713,50715,50717,50719,50721,50723,50725,50727,50729,50731,50733,50735,50737,50739,50741],{"class":35,"line":35002},[33,50704,583],{"class":39},[33,50706,109],{"class":59},[33,50708,5255],{"class":117},[33,50710,34106],{"class":39},[33,50712,34804],{"class":117},[33,50714,1005],{"class":39},[33,50716,34760],{"class":63},[33,50718,1011],{"class":39},[33,50720,34813],{"class":117},[33,50722,1005],{"class":39},[33,50724,34760],{"class":63},[33,50726,1011],{"class":39},[33,50728,5255],{"class":117},[33,50730,34824],{"class":59},[33,50732,2349],{"class":63},[33,50734,2036],{"class":39},[33,50736,34831],{"class":59},[33,50738,2349],{"class":63},[33,50740,2036],{"class":39},[33,50742,34790],{"class":59},[33,50744,50745],{"class":35,"line":35008},[33,50746,127],{"emptyLinePlaceholder":126},[33,50748,50749],{"class":35,"line":35019},[33,50750,34848],{"class":87},[33,50752,50753,50755,50757,50759,50761,50763,50765],{"class":35,"line":35025},[33,50754,4163],{"class":63},[33,50756,34856],{"class":59},[33,50758,2349],{"class":63},[33,50760,2036],{"class":39},[33,50762,2756],{"class":59},[33,50764,2775],{"class":63},[33,50766,34867],{"class":59},[33,50768,50769],{"class":35,"line":35031},[33,50770,34873],{"class":87},[33,50772,50773,50775,50777,50779,50781,50783,50785],{"class":35,"line":35037},[33,50774,34879],{"class":59},[33,50776,1863],{"class":39},[33,50778,64],{"class":63},[33,50780,34886],{"class":59},[33,50782,2349],{"class":63},[33,50784,2036],{"class":39},[33,50786,34893],{"class":59},[33,50788,50789],{"class":35,"line":35055},[33,50790,34899],{"class":87},[33,50792,50793],{"class":35,"line":35069},[33,50794,34905],{"class":87},[33,50796,50797,50799,50801],{"class":35,"line":35078},[33,50798,34911],{"class":59},[33,50800,64],{"class":63},[33,50802,33964],{"class":59},[33,50804,50805],{"class":35,"line":35087},[33,50806,127],{"emptyLinePlaceholder":126},[33,50808,50809],{"class":35,"line":35096},[33,50810,34926],{"class":87},[33,50812,50813,50815,50817,50819,50821],{"class":35,"line":35105},[33,50814,34932],{"class":59},[33,50816,64],{"class":63},[33,50818,34937],{"class":59},[33,50820,2349],{"class":63},[33,50822,34942],{"class":59},[33,50824,50825,50827,50829,50831,50833,50835,50837,50839,50841,50843,50845,50847,50849,50851,50853,50855,50857,50859],{"class":35,"line":35111},[33,50826,583],{"class":39},[33,50828,109],{"class":59},[33,50830,34952],{"class":117},[33,50832,1005],{"class":39},[33,50834,34957],{"class":63},[33,50836,1011],{"class":39},[33,50838,2361],{"class":117},[33,50840,1005],{"class":39},[33,50842,34957],{"class":63},[33,50844,1011],{"class":39},[33,50846,34970],{"class":117},[33,50848,34973],{"class":59},[33,50850,34976],{"class":63},[33,50852,2723],{"class":39},[33,50854,34981],{"class":59},[33,50856,2146],{"class":63},[33,50858,2723],{"class":39},[33,50860,121],{"class":59},[33,50862,50863],{"class":35,"line":35117},[33,50864,38380],{"class":87},[33,50866,50867],{"class":35,"line":35125},[33,50868,38385],{"class":87},[33,50870,50871,50873,50875],{"class":35,"line":35130},[33,50872,38390],{"class":59},[33,50874,35014],{"class":117},[33,50876,157],{"class":59},[33,50878,50879],{"class":35,"line":35136},[33,50880,35034],{"class":87},[33,50882,50883,50885,50887,50889,50891,50893],{"class":35,"line":35147},[33,50884,35040],{"class":59},[33,50886,64],{"class":63},[33,50888,35045],{"class":59},[33,50890,35048],{"class":6877},[33,50892,64],{"class":63},[33,50894,3228],{"class":59},[33,50896,50897,50899,50901,50903],{"class":35,"line":35153},[33,50898,35058],{"class":117},[33,50900,2676],{"class":59},[33,50902,35063],{"class":39},[33,50904,35066],{"class":59},[33,50906,50907,50909],{"class":35,"line":35173},[33,50908,35072],{"class":117},[33,50910,35075],{"class":59},[33,50912,50913,50915],{"class":35,"line":35179},[33,50914,35081],{"class":117},[33,50916,35084],{"class":59},[33,50918,50919,50921],{"class":35,"line":35185},[33,50920,35090],{"class":117},[33,50922,35093],{"class":59},[33,50924,50925,50927],{"class":35,"line":35191},[33,50926,35099],{"class":117},[33,50928,35102],{"class":59},[33,50930,50931],{"class":35,"line":35208},[33,50932,35108],{"class":59},[33,50934,50935],{"class":35,"line":35214},[33,50936,35114],{"class":87},[33,50938,50939,50941],{"class":35,"line":35220},[33,50940,5752],{"class":63},[33,50942,35122],{"class":59},[33,50944,50945],{"class":35,"line":35226},[33,50946,127],{"emptyLinePlaceholder":126},[33,50948,50949],{"class":35,"line":35232},[33,50950,35133],{"class":87},[33,50952,50953,50955,50957],{"class":35,"line":35238},[33,50954,33597],{"class":63},[33,50956,35141],{"class":3632},[33,50958,35144],{"class":59},[33,50960,50961],{"class":35,"line":35265},[33,50962,35150],{"class":87},[33,50964,50965,50967,50969,50971,50973,50975,50977,50979],{"class":35,"line":35289},[33,50966,35156],{"class":59},[33,50968,33343],{"class":6877},[33,50970,64],{"class":63},[33,50972,109],{"class":59},[33,50974,2315],{"class":39},[33,50976,2196],{"class":59},[33,50978,2111],{"class":39},[33,50980,121],{"class":59},[33,50982,50983],{"class":35,"line":35295},[33,50984,35176],{"class":87},[33,50986,50987],{"class":35,"line":35301},[33,50988,35182],{"class":87},[33,50990,50991],{"class":35,"line":35307},[33,50992,35188],{"class":87},[33,50994,50995,50997,50999,51001,51003,51005,51007],{"class":35,"line":35318},[33,50996,33377],{"class":59},[33,50998,2036],{"class":39},[33,51000,2196],{"class":59},[33,51002,1897],{"class":39},[33,51004,2196],{"class":59},[33,51006,2036],{"class":39},[33,51008,157],{"class":59},[33,51010,51011],{"class":35,"line":35329},[33,51012,35211],{"class":87},[33,51014,51015],{"class":35,"line":35335},[33,51016,35217],{"class":87},[33,51018,51019],{"class":35,"line":35352},[33,51020,35223],{"class":87},[33,51022,51023],{"class":35,"line":35375},[33,51024,35229],{"class":87},[33,51026,51027],{"class":35,"line":35398},[33,51028,35235],{"class":87},[33,51030,51031,51033,51035,51037,51039,51041,51043,51045,51047],{"class":35,"line":35404},[33,51032,35241],{"class":59},[33,51034,35244],{"class":117},[33,51036,35247],{"class":59},[33,51038,35250],{"class":117},[33,51040,2196],{"class":59},[33,51042,35255],{"class":6877},[33,51044,64],{"class":63},[33,51046,35260],{"class":117},[33,51048,157],{"class":59},[33,51050,51051,51053,51055,51057,51059,51061,51063,51065,51067],{"class":35,"line":35409},[33,51052,35241],{"class":59},[33,51054,35244],{"class":117},[33,51056,35272],{"class":59},[33,51058,35275],{"class":117},[33,51060,2196],{"class":59},[33,51062,35255],{"class":6877},[33,51064,64],{"class":63},[33,51066,35284],{"class":117},[33,51068,157],{"class":59},[33,51070,51071],{"class":35,"line":35418},[33,51072,35292],{"class":87},[33,51074,51075],{"class":35,"line":35428},[33,51076,35298],{"class":59},[33,51078,51079],{"class":35,"line":35434},[33,51080,35304],{"class":87},[33,51082,51083,51085,51087],{"class":35,"line":35439},[33,51084,35310],{"class":59},[33,51086,35313],{"class":117},[33,51088,157],{"class":59},[33,51090,51091,51093,51095],{"class":35,"line":35445},[33,51092,35321],{"class":59},[33,51094,35324],{"class":117},[33,51096,157],{"class":59},[33,51098,51099],{"class":35,"line":35458},[33,51100,35332],{"class":87},[33,51102,51103,51105,51107,51109,51111,51113,51115],{"class":35,"line":35464},[33,51104,33377],{"class":59},[33,51106,2036],{"class":39},[33,51108,2196],{"class":59},[33,51110,1897],{"class":39},[33,51112,2196],{"class":59},[33,51114,1897],{"class":39},[33,51116,157],{"class":59},[33,51118,51119,51121,51123,51125,51127,51129,51131,51133,51135],{"class":35,"line":35475},[33,51120,35241],{"class":59},[33,51122,35244],{"class":117},[33,51124,35359],{"class":59},[33,51126,35250],{"class":117},[33,51128,2196],{"class":59},[33,51130,35255],{"class":6877},[33,51132,64],{"class":63},[33,51134,35370],{"class":117},[33,51136,157],{"class":59},[33,51138,51139,51141,51143,51145,51147,51149,51151,51153,51155],{"class":35,"line":35486},[33,51140,35241],{"class":59},[33,51142,35244],{"class":117},[33,51144,35382],{"class":59},[33,51146,35275],{"class":117},[33,51148,2196],{"class":59},[33,51150,35255],{"class":6877},[33,51152,64],{"class":63},[33,51154,35393],{"class":117},[33,51156,157],{"class":59},[33,51158,51159],{"class":35,"line":35505},[33,51160,35401],{"class":87},[33,51162,51164],{"class":35,"line":51163},219,[33,51165,35298],{"class":59},[33,51167,51169,51171,51173],{"class":35,"line":51168},220,[33,51170,35310],{"class":59},[33,51172,35244],{"class":117},[33,51174,157],{"class":59},[33,51176,51178,51180,51182],{"class":35,"line":51177},221,[33,51179,35321],{"class":59},[33,51181,35423],{"class":117},[33,51183,157],{"class":59},[33,51185,51187],{"class":35,"line":51186},222,[33,51188,35431],{"class":59},[33,51190,51192],{"class":35,"line":51191},223,[33,51193,127],{"emptyLinePlaceholder":126},[33,51195,51197],{"class":35,"line":51196},224,[33,51198,35442],{"class":87},[33,51200,51202,51204,51206,51208,51210],{"class":35,"line":51201},225,[33,51203,133],{"class":63},[33,51205,32871],{"class":39},[33,51207,573],{"class":63},[33,51209,32876],{"class":117},[33,51211,143],{"class":59},[33,51213,51215],{"class":35,"line":51214},226,[33,51216,35461],{"class":87},[33,51218,51220,51222,51224],{"class":35,"line":51219},227,[33,51221,46192],{"class":59},[33,51223,64],{"class":63},[33,51225,46197],{"class":59},[33,51227,51229,51231,51233],{"class":35,"line":51228},228,[33,51230,35478],{"class":59},[33,51232,64],{"class":63},[33,51234,35483],{"class":59},[33,51236,51238,51240,51242,51244,51246,51248,51250],{"class":35,"line":51237},229,[33,51239,35040],{"class":59},[33,51241,64],{"class":63},[33,51243,46214],{"class":59},[33,51245,35496],{"class":6877},[33,51247,64],{"class":63},[33,51249,2723],{"class":39},[33,51251,157],{"class":59},[33,51253,51255],{"class":35,"line":51254},230,[33,51256,35508],{"class":59},[23653,51258,51260],{"id":51259},"_242测试代码","2.4.2.测试代码",[19,51262,51263],{},"使用测试集进行测试与推理",[23,51265,51267],{"className":25,"code":51266,"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,51268,51269,51275,51285,51295,51306,51316,51320,51324,51332,51337,51341,51358,51362,51366,51370,51374,51378,51410,51414,51422,51426,51438,51442,51446,51450,51454,51458,51462,51466,51470,51488,51502,51506,51516,51526,51536,51542,51546,51550,51558,51562,51578,51586,51590,51594,51602,51610,51614,51618,51622,51626,51632,51636,51646,51654,51662,51666,51670,51674,51682,51686,51702,51706,51710,51714,51726,51730,51742,51746,51750,51762,51766,51776,51780,51784,51796,51800,51808,51812,51816,51824,51828,51836,51840,51844,51848,51852,51856,51872,51880,51884,51888,51906,51912,51916,51926,51934,51942,51946,51950,51954,51958,51966,51970,51986,51990,51998,52006],{"__ignoreMap":28},[33,51270,51271,51273],{"class":35,"line":36},[33,51272,32045],{"class":63},[33,51274,32048],{"class":59},[33,51276,51277,51279,51281,51283],{"class":35,"line":43},[33,51278,32045],{"class":63},[33,51280,33065],{"class":59},[33,51282,33033],{"class":63},[33,51284,33070],{"class":59},[33,51286,51287,51289,51291,51293],{"class":35,"line":130},[33,51288,32388],{"class":63},[33,51290,33048],{"class":59},[33,51292,32045],{"class":63},[33,51294,33053],{"class":59},[33,51296,51297,51299,51301,51303],{"class":35,"line":146},[33,51298,32388],{"class":63},[33,51300,33018],{"class":59},[33,51302,32045],{"class":63},[33,51304,51305],{"class":59}," ImageFolder\n",[33,51307,51308,51310,51312,51314],{"class":35,"line":267},[33,51309,32388],{"class":63},[33,51311,33564],{"class":59},[33,51313,32045],{"class":63},[33,51315,46286],{"class":59},[33,51317,51318],{"class":35,"line":275},[33,51319,127],{"emptyLinePlaceholder":126},[33,51321,51322],{"class":35,"line":392},[33,51323,35598],{"class":87},[33,51325,51326,51328,51330],{"class":35,"line":406},[33,51327,33597],{"class":63},[33,51329,35605],{"class":3632},[33,51331,33603],{"class":59},[33,51333,51334],{"class":35,"line":418},[33,51335,51336],{"class":87},"   # 导入自己的数据集，并进行数据处理\n",[33,51338,51339],{"class":35,"line":425},[33,51340,49606],{"class":87},[33,51342,51343,51345,51347,51349,51351,51353,51356],{"class":35,"line":1147},[33,51344,49611],{"class":39},[33,51346,64],{"class":63},[33,51348,2487],{"class":63},[33,51350,1014],{"class":117},[33,51352,2375],{"class":39},[33,51354,51355],{"class":49622},"\u002Fdata\u002Ftest",[33,51357,26789],{"class":117},[33,51359,51360],{"class":35,"line":1329},[33,51361,127],{"emptyLinePlaceholder":126},[33,51363,51364],{"class":35,"line":1341},[33,51365,49634],{"class":87},[33,51367,51368],{"class":35,"line":1348},[33,51369,49639],{"class":87},[33,51371,51372],{"class":35,"line":1529},[33,51373,49644],{"class":87},[33,51375,51376],{"class":35,"line":1546},[33,51377,49649],{"class":87},[33,51379,51380,51382,51384,51386,51388,51390,51392,51394,51396,51398,51400,51402,51404,51406,51408],{"class":35,"line":1551},[33,51381,49654],{"class":59},[33,51383,64],{"class":63},[33,51385,49659],{"class":59},[33,51387,49662],{"class":39},[33,51389,2196],{"class":59},[33,51391,49667],{"class":39},[33,51393,2196],{"class":59},[33,51395,49672],{"class":39},[33,51397,49675],{"class":59},[33,51399,49678],{"class":39},[33,51401,2196],{"class":59},[33,51403,49683],{"class":39},[33,51405,2196],{"class":59},[33,51407,49688],{"class":39},[33,51409,6318],{"class":59},[33,51411,51412],{"class":35,"line":1566},[33,51413,49695],{"class":87},[33,51415,51416,51418,51420],{"class":35,"line":1578},[33,51417,49700],{"class":59},[33,51419,64],{"class":63},[33,51421,49705],{"class":59},[33,51423,51424],{"class":35,"line":1583},[33,51425,49710],{"class":87},[33,51427,51428,51430,51432,51434,51436],{"class":35,"line":3369},[33,51429,49715],{"class":59},[33,51431,33151],{"class":39},[33,51433,2196],{"class":59},[33,51435,33151],{"class":39},[33,51437,44268],{"class":59},[33,51439,51440],{"class":35,"line":3396},[33,51441,49728],{"class":87},[33,51443,51444],{"class":35,"line":3401},[33,51445,49733],{"class":59},[33,51447,51448],{"class":35,"line":3418},[33,51449,49738],{"class":59},[33,51451,51452],{"class":35,"line":3423},[33,51453,49743],{"class":87},[33,51455,51456],{"class":35,"line":3428},[33,51457,49748],{"class":87},[33,51459,51460],{"class":35,"line":3433},[33,51461,127],{"emptyLinePlaceholder":126},[33,51463,51464],{"class":35,"line":3447},[33,51465,49757],{"class":87},[33,51467,51468],{"class":35,"line":3452},[33,51469,49762],{"class":87},[33,51471,51472,51474,51476,51478,51480,51482,51484,51486],{"class":35,"line":4243},[33,51473,35612],{"class":59},[33,51475,64],{"class":63},[33,51477,49771],{"class":59},[33,51479,49774],{"class":39},[33,51481,2196],{"class":59},[33,51483,49779],{"class":6877},[33,51485,64],{"class":63},[33,51487,49784],{"class":59},[33,51489,51490,51492,51494,51496,51498,51500],{"class":35,"line":4257},[33,51491,35669],{"class":59},[33,51493,64],{"class":63},[33,51495,33184],{"class":59},[33,51497,33187],{"class":6877},[33,51499,64],{"class":63},[33,51501,35680],{"class":59},[33,51503,51504],{"class":35,"line":4265},[33,51505,35685],{"class":87},[33,51507,51508,51510,51512,51514],{"class":35,"line":4270},[33,51509,35690],{"class":6877},[33,51511,64],{"class":63},[33,51513,2036],{"class":39},[33,51515,33116],{"class":59},[33,51517,51518,51520,51522,51524],{"class":35,"line":4276},[33,51519,35701],{"class":6877},[33,51521,64],{"class":63},[33,51523,33126],{"class":39},[33,51525,33116],{"class":59},[33,51527,51528,51530,51532,51534],{"class":35,"line":4282},[33,51529,35712],{"class":6877},[33,51531,64],{"class":63},[33,51533,2010],{"class":39},[33,51535,157],{"class":59},[33,51537,51538,51540],{"class":35,"line":4287},[33,51539,5752],{"class":63},[33,51541,35725],{"class":59},[33,51543,51544],{"class":35,"line":9608},[33,51545,127],{"emptyLinePlaceholder":126},[33,51547,51548],{"class":35,"line":9632},[33,51549,35734],{"class":87},[33,51551,51552,51554,51556],{"class":35,"line":9637},[33,51553,33597],{"class":63},[33,51555,35741],{"class":3632},[33,51557,35744],{"class":59},[33,51559,51560],{"class":35,"line":9643},[33,51561,35749],{"class":87},[33,51563,51564,51566,51568,51570,51572,51574,51576],{"class":35,"line":9670},[33,51565,32888],{"class":59},[33,51567,64],{"class":63},[33,51569,32895],{"class":117},[33,51571,3374],{"class":63},[33,51573,32900],{"class":59},[33,51575,270],{"class":63},[33,51577,35766],{"class":117},[33,51579,51580,51582,51584],{"class":35,"line":9675},[33,51581,32940],{"class":59},[33,51583,64],{"class":63},[33,51585,33939],{"class":59},[33,51587,51588],{"class":35,"line":9681},[33,51589,127],{"emptyLinePlaceholder":126},[33,51591,51592],{"class":35,"line":9693},[33,51593,35783],{"class":87},[33,51595,51596,51598,51600],{"class":35,"line":9705},[33,51597,35788],{"class":59},[33,51599,64],{"class":63},[33,51601,928],{"class":39},[33,51603,51604,51606,51608],{"class":35,"line":9717},[33,51605,35797],{"class":59},[33,51607,64],{"class":63},[33,51609,923],{"class":39},[33,51611,51612],{"class":35,"line":11375},[33,51613,127],{"emptyLinePlaceholder":126},[33,51615,51616],{"class":35,"line":11400},[33,51617,35810],{"class":87},[33,51619,51620],{"class":35,"line":11423},[33,51621,35815],{"class":87},[33,51623,51624],{"class":35,"line":11447},[33,51625,35820],{"class":87},[33,51627,51628,51630],{"class":35,"line":11452},[33,51629,35825],{"class":63},[33,51631,34531],{"class":59},[33,51633,51634],{"class":35,"line":11457},[33,51635,35832],{"class":87},[33,51637,51638,51640,51642,51644],{"class":35,"line":11462},[33,51639,5066],{"class":63},[33,51641,35839],{"class":59},[33,51643,27699],{"class":63},[33,51645,35844],{"class":59},[33,51647,51648,51650,51652],{"class":35,"line":11471},[33,51649,35849],{"class":59},[33,51651,64],{"class":63},[33,51653,35854],{"class":59},[33,51655,51656,51658,51660],{"class":35,"line":11476},[33,51657,35859],{"class":59},[33,51659,64],{"class":63},[33,51661,35864],{"class":59},[33,51663,51664],{"class":35,"line":11482},[33,51665,35869],{"class":87},[33,51667,51668],{"class":35,"line":11503},[33,51669,34522],{"class":59},[33,51671,51672],{"class":35,"line":11509},[33,51673,35878],{"class":87},[33,51675,51676,51678,51680],{"class":35,"line":11523},[33,51677,34307],{"class":59},[33,51679,64],{"class":63},[33,51681,35887],{"class":59},[33,51683,51684],{"class":35,"line":11529},[33,51685,35892],{"class":87},[33,51687,51688,51690,51692,51694,51696,51698,51700],{"class":35,"line":11556},[33,51689,34324],{"class":59},[33,51691,64],{"class":63},[33,51693,34329],{"class":59},[33,51695,34332],{"class":6877},[33,51697,64],{"class":63},[33,51699,2036],{"class":39},[33,51701,157],{"class":59},[33,51703,51704],{"class":35,"line":11565},[33,51705,35913],{"class":87},[33,51707,51708],{"class":35,"line":11571},[33,51709,35918],{"class":87},[33,51711,51712],{"class":35,"line":11579},[33,51713,35923],{"class":87},[33,51715,51716,51718,51720,51722,51724],{"class":35,"line":11584},[33,51717,35928],{"class":59},[33,51719,11136],{"class":63},[33,51721,34434],{"class":59},[33,51723,573],{"class":63},[33,51725,35937],{"class":59},[33,51727,51728],{"class":35,"line":18259},[33,51729,35942],{"class":87},[33,51731,51732,51734,51736,51738,51740],{"class":35,"line":18265},[33,51733,35947],{"class":59},[33,51735,11136],{"class":63},[33,51737,35952],{"class":59},[33,51739,2010],{"class":39},[33,51741,157],{"class":59},[33,51743,51744],{"class":35,"line":18288},[33,51745,127],{"emptyLinePlaceholder":126},[33,51747,51748],{"class":35,"line":18294},[33,51749,35965],{"class":87},[33,51751,51752,51754,51756,51758,51760],{"class":35,"line":18317},[33,51753,35970],{"class":59},[33,51755,64],{"class":63},[33,51757,35975],{"class":59},[33,51759,2401],{"class":63},[33,51761,35980],{"class":59},[33,51763,51764],{"class":35,"line":18331},[33,51765,35985],{"class":87},[33,51767,51768,51770,51772,51774],{"class":35,"line":18351},[33,51769,583],{"class":39},[33,51771,109],{"class":59},[33,51773,35994],{"class":117},[33,51775,35997],{"class":59},[33,51777,51778],{"class":35,"line":18357},[33,51779,127],{"emptyLinePlaceholder":126},[33,51781,51782],{"class":35,"line":18368},[33,51783,36006],{"class":87},[33,51785,51786,51788,51790,51792,51794],{"class":35,"line":18391},[33,51787,133],{"class":63},[33,51789,32871],{"class":39},[33,51791,573],{"class":63},[33,51793,32876],{"class":117},[33,51795,143],{"class":59},[33,51797,51798],{"class":35,"line":18413},[33,51799,36023],{"class":87},[33,51801,51802,51804,51806],{"class":35,"line":18418},[33,51803,32940],{"class":59},[33,51805,64],{"class":63},[33,51807,46197],{"class":59},[33,51809,51810],{"class":35,"line":18424},[33,51811,36036],{"class":87},[33,51813,51814],{"class":35,"line":18438},[33,51815,36041],{"class":87},[33,51817,51818,51820,51822],{"class":35,"line":18451},[33,51819,36046],{"class":59},[33,51821,36049],{"class":117},[33,51823,121],{"class":59},[33,51825,51826],{"class":35,"line":18456},[33,51827,36056],{"class":87},[33,51829,51830,51832,51834],{"class":35,"line":18470},[33,51831,35669],{"class":59},[33,51833,64],{"class":63},[33,51835,36065],{"class":59},[33,51837,51838],{"class":35,"line":18475},[33,51839,36070],{"class":87},[33,51841,51842],{"class":35,"line":18481},[33,51843,36075],{"class":59},[33,51845,51846],{"class":35,"line":18486},[33,51847,127],{"emptyLinePlaceholder":126},[33,51849,51850],{"class":35,"line":18500},[33,51851,36084],{"class":87},[33,51853,51854],{"class":35,"line":18505},[33,51855,36089],{"class":87},[33,51857,51858,51860,51862,51864,51866,51868,51870],{"class":35,"line":18510},[33,51859,32888],{"class":59},[33,51861,64],{"class":63},[33,51863,32895],{"class":117},[33,51865,3374],{"class":63},[33,51867,32900],{"class":59},[33,51869,270],{"class":63},[33,51871,35766],{"class":117},[33,51873,51874,51876,51878],{"class":35,"line":18524},[33,51875,32940],{"class":59},[33,51877,64],{"class":63},[33,51879,33939],{"class":59},[33,51881,51882],{"class":35,"line":18536},[33,51883,36118],{"class":87},[33,51885,51886],{"class":35,"line":18541},[33,51887,36123],{"class":87},[33,51889,51890,51892,51894,51896,51899,51901,51904],{"class":35,"line":18554},[33,51891,36128],{"class":59},[33,51893,64],{"class":63},[33,51895,2707],{"class":59},[33,51897,51898],{"class":117},"'猫'",[33,51900,2196],{"class":59},[33,51902,51903],{"class":117},"'狗'",[33,51905,34893],{"class":59},[33,51907,51908,51910],{"class":35,"line":18559},[33,51909,35825],{"class":63},[33,51911,34531],{"class":59},[33,51913,51914],{"class":35,"line":18564},[33,51915,36193],{"class":87},[33,51917,51918,51920,51922,51924],{"class":35,"line":18569},[33,51919,5066],{"class":63},[33,51921,36200],{"class":59},[33,51923,27699],{"class":63},[33,51925,35844],{"class":59},[33,51927,51928,51930,51932],{"class":35,"line":18582},[33,51929,34257],{"class":59},[33,51931,64],{"class":63},[33,51933,34262],{"class":59},[33,51935,51936,51938,51940],{"class":35,"line":18587},[33,51937,34272],{"class":59},[33,51939,64],{"class":63},[33,51941,34277],{"class":59},[33,51943,51944],{"class":35,"line":34280},[33,51945,127],{"emptyLinePlaceholder":126},[33,51947,51948],{"class":35,"line":34286},[33,51949,36229],{"class":87},[33,51951,51952],{"class":35,"line":34292},[33,51953,34522],{"class":59},[33,51955,51956],{"class":35,"line":34298},[33,51957,36238],{"class":87},[33,51959,51960,51962,51964],{"class":35,"line":34304},[33,51961,34307],{"class":59},[33,51963,64],{"class":63},[33,51965,34312],{"class":59},[33,51967,51968],{"class":35,"line":34315},[33,51969,36251],{"class":87},[33,51971,51972,51974,51976,51978,51980,51982,51984],{"class":35,"line":34321},[33,51973,34324],{"class":59},[33,51975,64],{"class":63},[33,51977,34329],{"class":59},[33,51979,34332],{"class":6877},[33,51981,64],{"class":63},[33,51983,2036],{"class":39},[33,51985,157],{"class":59},[33,51987,51988],{"class":35,"line":34341},[33,51989,36272],{"class":87},[33,51991,51992,51994,51996],{"class":35,"line":34347},[33,51993,36277],{"class":59},[33,51995,64],{"class":63},[33,51997,36282],{"class":59},[33,51999,52000,52002,52004],{"class":35,"line":34358},[33,52001,36287],{"class":59},[33,52003,64],{"class":63},[33,52005,36292],{"class":59},[33,52007,52008,52010,52012,52014,52016,52018,52020,52022],{"class":35,"line":34364},[33,52009,36297],{"class":39},[33,52011,109],{"class":59},[33,52013,36302],{"class":117},[33,52015,36305],{"class":59},[33,52017,36308],{"class":117},[33,52019,2196],{"class":59},[33,52021,36313],{"class":117},[33,52023,36316],{"class":59},[1729,52025,52026],{},"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":43,"depth":43,"links":52028},[52029,52030,52031,52032],{"id":32242,"depth":130,"text":32243},{"id":39486,"depth":130,"text":39487},{"id":42918,"depth":130,"text":42919},{"id":46927,"depth":130,"text":46928},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32234,"description":1751},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52039,"title":52040,"body":52041,"description":1751,"extension":1752,"meta":52048,"navigation":126,"path":52049,"seo":52050,"stem":52051,"__hash__":52052},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52042,"toc":52046},[52043],[10,52044,52040],{"id":52045},"_3yolo模型学习",{"title":28,"searchDepth":43,"depth":43,"links":52047},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52040,"description":1751},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52054,"title":52055,"body":52056,"description":52063,"extension":1752,"meta":52064,"navigation":126,"path":52066,"seo":52067,"stem":52068,"__hash__":52069},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52057,"toc":52061},[52058],[19,52059,52060],{},"yolo模型还未补充",{"title":28,"searchDepth":43,"depth":43,"links":52062},[],"深度学习学习",{"category":52065},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52055,"description":52063},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52071,"title":52072,"body":52073,"description":1751,"extension":1752,"meta":52098,"navigation":126,"path":52099,"seo":52100,"stem":52101,"__hash__":52102},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52074,"toc":52096},[52075,52078,52081,52086,52093],[10,52076,52072],{"id":52077},"_1工具",[19,52079,52080],{},"提示错误插件：有问题会提前报错",[19,52082,52083],{},[3145,52084],{"alt":28,"src":52085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52087,52088],{},[2057,52089,52092],{"href":52090,"rel":52091},"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",[25520],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52094,52095],{},"alt键加上下箭头可以实现语句的移动",{"title":28,"searchDepth":43,"depth":43,"links":52097},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52072,"description":1751},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52104,"title":52105,"body":52106,"description":1751,"extension":1752,"meta":54970,"navigation":126,"path":54971,"seo":54972,"stem":54973,"__hash__":54974},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52107,"toc":54921},[52108,52111,52115,52119,52124,52127,52132,52136,52143,52148,52155,52160,52167,52172,52176,52181,52184,52188,52193,52197,52202,52205,52208,52211,52214,52217,52220,52223,52226,52231,52236,52241,52245,52248,52251,52255,52260,52263,52271,52276,52293,52301,52306,52311,52316,52321,52326,52329,52334,52339,52343,52352,52357,52362,52366,52371,52374,52378,52383,52391,52396,52401,52404,52409,52414,52419,52422,52425,52428,52433,52438,52441,52446,52449,52454,52457,52460,52463,52468,52471,52474,52489,52494,52499,52504,52507,52510,52513,52527,52530,52535,52540,52543,52546,52549,52552,52555,52558,52561,52565,52569,52574,52578,52581,52586,52591,52594,52599,52602,52606,52611,52614,52617,52620,52623,52626,52629,52632,52635,52638,52642,52647,52652,52657,52660,52663,52667,52672,52675,52679,52682,52685,52690,52693,52696,52700,52704,52707,52712,52717,52720,52749,52754,52759,52764,52769,52773,52778,52782,52787,52790,52794,52798,52803,52807,52812,52817,52821,52826,52829,52831,52834,52839,52843,52848,52852,52856,52861,52866,52871,52876,52880,52885,52890,52895,52898,52901,52906,52909,52914,52919,52924,52929,52933,53740,53744,54087,54092,54095,54098,54101,54104,54107,54110,54113,54116,54118,54121,54123,54126,54130,54135,54138,54141,54144,54148,54153,54158,54178,54181,54185,54190,54195,54212,54216,54245,54249,54271,54273,54312,54320,54326,54330,54333,54336,54341,54346,54349,54352,54355,54360,54365,54368,54371,54374,54377,54380,54383,54386,54389,54392,54395,54398,54400,54403,54406,54409,54412,54415,54418,54421,54424,54428,54433,54436,54441,54444,54447,54450,54453,54456,54459,54462,54464,54467,54470,54473,54476,54479,54482,54486,54489,54498,54501,54506,54509,54514,54517,54520,54523,54526,54529,54532,54535,54539,54543,54546,54549,54554,54559,54564,54568,54573,54578,54581,54584,54587,54590,54593,54598,54601,54606,54608,54613,54616,54620,54625,54628,54631,54636,54640,54643,54648,54651,54654,54683,54688,54691,54694,54697,54700,54703,54707,54710,54796,54800,54803,54808,54813,54820,54823,54826,54829,54832,54835,54840,54845,54848,54851,54854,54857,54860,54863,54866,54869,54872,54874,54877,54881,54886,54891,54896,54899,54904,54909,54912,54915,54918],[10,52109,52105],{"id":52110},"_2基础语法",[14,52112,52114],{"id":52113},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[633,52116,52118],{"id":52117},"_211-js组成","2.1.1 js组成",[162,52120,52121],{},[165,52122,52123],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52125,52126],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[162,52128,52129],{"start":43},[165,52130,52131],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[633,52133,52135],{"id":52134},"_212-js书写位置","2.1.2 js书写位置",[162,52137,52138],{},[165,52139,52140],{},[1968,52141,52142],{},"内部 JavaScript",[19,52144,52145],{},[3145,52146],{"alt":28,"src":52147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[162,52149,52150],{"start":43},[165,52151,52152],{},[1968,52153,52154],{},"外部 JavaScript",[19,52156,52157],{},[3145,52158],{"alt":28,"src":52159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[162,52161,52162],{"start":130},[165,52163,52164],{},[1968,52165,52166],{},"内联 JavaScript",[19,52168,52169],{},[3145,52170],{"alt":28,"src":52171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[633,52173,52175],{"id":52174},"_213-javascript注释","2.1.3 JavaScript注释",[19,52177,52178],{},[3145,52179],{"alt":28,"src":52180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52182,52183],{},"alt+shift+a一定要记住！",[633,52185,52187],{"id":52186},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52189,52190],{},[3145,52191],{"alt":28,"src":52192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[633,52194,52196],{"id":52195},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[162,52198,52199],{},[165,52200,52201],{},"输出语法：",[19,52203,52204],{},"①document.write('要出的内容')",[19,52206,52207],{},"向body内输出内容；",[19,52209,52210],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52212,52213],{},"②alert('要出的内容')",[19,52215,52216],{},"页面弹出警告对话框",[19,52218,52219],{},"③console.log('控制台打印')",[19,52221,52222],{},"控制台输出语法，程序员调试使用",[19,52224,52225],{},"输入log就行，自动生成：",[19,52227,52228],{},[3145,52229],{"alt":28,"src":52230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[162,52232,52233],{"start":43},[165,52234,52235],{},"输入语法：",[19,52237,52238],{},[3145,52239],{"alt":28,"src":52240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[633,52242,52244],{"id":52243},"_2116-字面量","21.1.6 字面量",[19,52246,52247],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52249,52250],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52252,52254],{"id":52253},"_22-变量","2.2 变量",[162,52256,52257],{},[165,52258,52259],{},"变量声明",[19,52261,52262],{},"let 变量名",[2822,52264,52265,52268],{},[165,52266,52267],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[165,52269,52270],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[162,52272,52273],{"start":43},[165,52274,52275],{},"变量赋值",[23,52277,52281],{"className":52278,"code":52279,"language":52280,"meta":28,"style":28},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[30,52282,52283,52288],{"__ignoreMap":28},[33,52284,52285],{"class":35,"line":36},[33,52286,52287],{"class":59},"let age\n",[33,52289,52290],{"class":35,"line":43},[33,52291,52292],{"class":59},"age=18\n",[162,52294,52295,52298],{"start":130},[165,52296,52297],{},"连这些（变量的初始化）：let age=18",[165,52299,52300],{},"更新变量",[19,52302,52303],{},[3145,52304],{"alt":28,"src":52305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[162,52307,52308],{"start":267},[165,52309,52310],{},"声明多个变量",[19,52312,52313],{},[3145,52314],{"alt":28,"src":52315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[162,52317,52318],{"start":275},[165,52319,52320],{},"变量命名规则与规范",[19,52322,52323],{},[3145,52324],{"alt":28,"src":52325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52327,52328],{},"遵守小驼峰！",[162,52330,52331],{"start":392},[165,52332,52333],{},"变量拓展-let和var的区别",[19,52335,52336],{},[3145,52337],{"alt":28,"src":52338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52340,52342],{"id":52341},"_23-数组","2.3 数组",[23,52344,52346],{"className":52278,"code":52345,"language":52280,"meta":28,"style":28},"let arr = []\n",[30,52347,52348],{"__ignoreMap":28},[33,52349,52350],{"class":35,"line":36},[33,52351,52345],{"class":59},[19,52353,52354],{},[3145,52355],{"alt":28,"src":52356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52358,52359],{},[3145,52360],{"alt":28,"src":52361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52363,52365],{"id":52364},"_24-常量","2.4 常量",[19,52367,52368],{},[3145,52369],{"alt":28,"src":52370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52372,52373],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52375,52377],{"id":52376},"_25-数据类型","2.5 数据类型",[19,52379,52380],{},[3145,52381],{"alt":28,"src":52382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[162,52384,52385,52388],{},[165,52386,52387],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[165,52389,52390],{},"算数运算符：",[19,52392,52393],{},[3145,52394],{"alt":28,"src":52395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[162,52397,52398],{"start":130},[165,52399,52400],{},"数字类型（Number）",[19,52402,52403],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52405,52406],{},[3145,52407],{"alt":28,"src":52408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[162,52410,52411],{"start":146},[165,52412,52413],{},"字符串类型（string）",[19,52415,52416],{},[3145,52417],{"alt":28,"src":52418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52420,52421],{},"反引号也是可以使用的",[19,52423,52424],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52426,52427],{},"例如：document.write(\"我今年\"+age+\"岁\")",[162,52429,52430],{"start":267},[165,52431,52432],{},"模板字符串",[19,52434,52435],{},[3145,52436],{"alt":28,"src":52437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52439,52440],{},"类似于python的字符串格式化",[162,52442,52443],{"start":275},[165,52444,52445],{},"布尔类型",[19,52447,52448],{},"true 和 false",[162,52450,52451],{"start":392},[165,52452,52453],{},"未定义类型（underfined）",[19,52455,52456],{},"表示没有赋值",[19,52458,52459],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52461,52462],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[162,52464,52465],{"start":406},[165,52466,52467],{},"null（空类型）",[19,52469,52470],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52472,52473],{},"赋值了，但是内容为空",[23,52475,52477],{"className":52278,"code":52476,"language":52280,"meta":28,"style":28},"typeof null\n输出的是'object'，是一个对象数据类型\n",[30,52478,52479,52484],{"__ignoreMap":28},[33,52480,52481],{"class":35,"line":36},[33,52482,52483],{"class":59},"typeof null\n",[33,52485,52486],{"class":35,"line":43},[33,52487,52488],{"class":59},"输出的是'object'，是一个对象数据类型\n",[162,52490,52491],{"start":418},[165,52492,52493],{},"控制台检测数据类型",[19,52495,52496],{},[3145,52497],{"alt":28,"src":52498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[162,52500,52501],{"start":425},[165,52502,52503],{},"类型转换",[19,52505,52506],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52508,52509],{},"转换方式：隐式转换和显示转换",[19,52511,52512],{},"①隐式转换",[2822,52514,52515,52518,52521,52524],{},[165,52516,52517],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[165,52519,52520],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[165,52522,52523],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[165,52525,52526],{},"任何数据和字符串相加结果都是字符串",[19,52528,52529],{},"②显示转换",[19,52531,52532],{},[3145,52533],{"alt":28,"src":52534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52536,52537],{},[3145,52538],{"alt":28,"src":52539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52541,52542],{},"在输入的时候要用好隐式转换，简单写起来",[19,52544,52545],{},"let num = +prompt(’请输入数字：‘)",[19,52547,52548],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52550,52551],{},"console.log(parseInt('12.333px'))",[19,52553,52554],{},"输出为：12",[19,52556,52557],{},"console.log(parseInt('a'a'a12.333px'))",[19,52559,52560],{},"输出：NaN",[14,52562,52564],{"id":52563},"_26-运算符","2.6 运算符",[633,52566,52568],{"id":52567},"_261-赋值运算符","2.6.1 赋值运算符",[19,52570,52571],{},[3145,52572],{"alt":28,"src":52573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[633,52575,52577],{"id":52576},"_262-一元运算符","2.6.2 一元运算符",[19,52579,52580],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52582,52583],{},[3145,52584],{"alt":28,"src":52585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52587,52588],{},[3145,52589],{"alt":28,"src":52590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52592,52593],{},"两者的区别：",[19,52595,52596],{},[3145,52597],{"alt":28,"src":52598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52600,52601],{},"前置先自加；后置后加，代码执行完之后再加",[633,52603,52605],{"id":52604},"_263-比较运算符","2.6.3 比较运算符",[19,52607,52608],{},[3145,52609],{"alt":28,"src":52610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52612,52613],{},"比较运算符也有隐式转换",[19,52615,52616],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52618,52619],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52621,52622],{},"要使用三等，开发的时候",[19,52624,52625],{},"NaN不等于任何人，包括它自己",[19,52627,52628],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52630,52631],{},"7\u002F10=0.7",[19,52633,52634],{},"最后：0.5+0.2=0.7",[19,52636,52637],{},"字符串比较，比较的是字符对应的ASCII码",[633,52639,52641],{"id":52640},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52643,52644],{},[3145,52645],{"alt":28,"src":52646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52648,52649],{},[3145,52650],{"alt":28,"src":52651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52653,52654],{},[3145,52655],{"alt":28,"src":52656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52658,52659],{},"上述题目选D",[19,52661,52662],{},"与真2假1；或真1假2",[633,52664,52666],{"id":52665},"_265-运算符优先级","2.6.5 运算符优先级",[19,52668,52669],{},[3145,52670],{"alt":28,"src":52671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52673,52674],{},"先算逻辑与，后算逻辑或",[14,52676,52678],{"id":52677},"_27-语句","2.7 语句",[19,52680,52681],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52683,52684],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52686,52687],{},[3145,52688],{"alt":28,"src":52689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52691,52692],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52694,52695],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[633,52697,52699],{"id":52698},"_271-分支语句","2.7.1 分支语句",[23653,52701,52703],{"id":52702},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52705,52706],{},"if语句单行简单的话，可以不写{}，写在一行就行",[162,52708,52709],{},[165,52710,52711],{},"单分支语句",[19,52713,52714],{},[3145,52715],{"alt":28,"src":52716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52718,52719],{},"除了0，所有数字都为真",[23,52721,52723],{"className":52278,"code":52722,"language":52280,"meta":28,"style":28},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[30,52724,52725,52730,52735,52740,52744],{"__ignoreMap":28},[33,52726,52727],{"class":35,"line":36},[33,52728,52729],{"class":59},"if（0) {\n",[33,52731,52732],{"class":35,"line":43},[33,52733,52734],{"class":59},"    let a=1\n",[33,52736,52737],{"class":35,"line":130},[33,52738,52739],{"class":59},"    alert(typeof a)\n",[33,52741,52742],{"class":35,"line":146},[33,52743,3247],{"class":59},[33,52745,52746],{"class":35,"line":267},[33,52747,52748],{"class":59},"不输出，括号为假\n",[162,52750,52751],{"start":43},[165,52752,52753],{},"双分支语句",[19,52755,52756],{},[3145,52757],{"alt":28,"src":52758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[162,52760,52761],{"start":130},[165,52762,52763],{},"多分支语句",[19,52765,52766],{},[3145,52767],{"alt":28,"src":52768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23653,52770,52772],{"id":52771},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52774,52775],{},[3145,52776],{"alt":28,"src":52777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23653,52779,52781],{"id":52780},"_2713-switch语句","2.7.1.3 switch语句",[19,52783,52784],{},[3145,52785],{"alt":28,"src":52786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52788,52789],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[633,52791,52793],{"id":52792},"_272-循环语句","2.7.2 循环语句",[23653,52795,52797],{"id":52796},"_2721-断点演示","2.7.2.1 断点演示",[19,52799,52800],{},[3145,52801],{"alt":28,"src":52802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23653,52804,52806],{"id":52805},"_2722-while循环","2.7.2.2 while循环",[19,52808,52809],{},[3145,52810],{"alt":28,"src":52811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52813,52814],{},[3145,52815],{"alt":28,"src":52816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23653,52818,52820],{"id":52819},"_2723-for循环","2.7.2.3 for循环",[19,52822,52823],{},[3145,52824],{"alt":28,"src":52825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52827,52828],{},"for(;;) {",[19,52830,1011],{},[19,52832,52833],{},"表示无限循环",[19,52835,52836],{},[3145,52837],{"alt":28,"src":52838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23653,52840,52842],{"id":52841},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52844,52845],{},[3145,52846],{"alt":28,"src":52847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52849,52851],{"id":52850},"_28-数组","2.8 数组",[633,52853,52855],{"id":52854},"_281-基础认识","2.8.1 基础认识",[19,52857,52858],{},[3145,52859],{"alt":28,"src":52860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52862,52863],{},[3145,52864],{"alt":28,"src":52865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52867,52868],{},[3145,52869],{"alt":28,"src":52870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52872,52873],{},[3145,52874],{"alt":28,"src":52875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[633,52877,52879],{"id":52878},"_282-操作数组","2.8.2 操作数组",[19,52881,52882],{},[3145,52883],{"alt":28,"src":52884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[162,52886,52887],{},[165,52888,52889],{},"添加元素",[19,52891,52892],{},[3145,52893],{"alt":28,"src":52894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52896,52897],{},"console.log(arr.push('green'))",[19,52899,52900],{},"输出结果：为新数组的长度",[19,52902,52903],{},[3145,52904],{"alt":28,"src":52905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52907,52908],{},"push用的非常多，一定要记住",[162,52910,52911],{},[165,52912,52913],{},"删除元素",[19,52915,52916],{},[3145,52917],{"alt":28,"src":52918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52920,52921],{},[3145,52922],{"alt":28,"src":52923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52925,52926],{},[3145,52927],{"alt":28,"src":52928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[633,52930,52932],{"id":52931},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[23,52934,52936],{"className":52278,"code":52935,"language":52280,"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,52937,52938,52953,52969,52973,52982,53000,53024,53046,53060,53068,53075,53087,53098,53102,53106,53113,53125,53140,53153,53172,53189,53204,53216,53228,53240,53244,53248,53259,53269,53281,53293,53305,53316,53320,53324,53336,53340,53354,53358,53362,53373,53387,53399,53413,53417,53426,53435,53439,53448,53452,53461,53466,53471,53484,53512,53517,53522,53547,53552,53556,53561,53566,53581,53585,53590,53620,53632,53648,53664,53678,53683,53690,53694,53699,53712,53720,53728,53732],{"__ignoreMap":28},[33,52939,52940,52943,52947,52950],{"class":35,"line":36},[33,52941,52942],{"class":59},"\u003C!",[33,52944,52946],{"class":52945},"s9eBZ","DOCTYPE",[33,52948,52949],{"class":3632}," html",[33,52951,52952],{"class":59},">\n",[33,52954,52955,52957,52959,52962,52964,52967],{"class":35,"line":43},[33,52956,2726],{"class":59},[33,52958,52280],{"class":52945},[33,52960,52961],{"class":3632}," lang",[33,52963,64],{"class":59},[33,52965,52966],{"class":117},"\"en\"",[33,52968,52952],{"class":59},[33,52970,52971],{"class":35,"line":130},[33,52972,127],{"emptyLinePlaceholder":126},[33,52974,52975,52977,52980],{"class":35,"line":146},[33,52976,2726],{"class":59},[33,52978,52979],{"class":52945},"head",[33,52981,52952],{"class":59},[33,52983,52984,52987,52990,52993,52995,52998],{"class":35,"line":267},[33,52985,52986],{"class":59},"    \u003C",[33,52988,52989],{"class":52945},"meta",[33,52991,52992],{"class":3632}," charset",[33,52994,64],{"class":59},[33,52996,52997],{"class":117},"\"UTF-8\"",[33,52999,52952],{"class":59},[33,53001,53002,53004,53006,53009,53011,53014,53017,53019,53022],{"class":35,"line":275},[33,53003,52986],{"class":59},[33,53005,52989],{"class":52945},[33,53007,53008],{"class":3632}," http-equiv",[33,53010,64],{"class":59},[33,53012,53013],{"class":117},"\"X-UA-Compatible\"",[33,53015,53016],{"class":3632}," content",[33,53018,64],{"class":59},[33,53020,53021],{"class":117},"\"IE=edge\"",[33,53023,52952],{"class":59},[33,53025,53026,53028,53030,53032,53034,53037,53039,53041,53044],{"class":35,"line":392},[33,53027,52986],{"class":59},[33,53029,52989],{"class":52945},[33,53031,16578],{"class":3632},[33,53033,64],{"class":59},[33,53035,53036],{"class":117},"\"viewport\"",[33,53038,53016],{"class":3632},[33,53040,64],{"class":59},[33,53042,53043],{"class":117},"\"width=device-width, initial-scale=1.0\"",[33,53045,52952],{"class":59},[33,53047,53048,53050,53053,53056,53058],{"class":35,"line":406},[33,53049,52986],{"class":59},[33,53051,53052],{"class":52945},"title",[33,53054,53055],{"class":59},">Document\u003C\u002F",[33,53057,53052],{"class":52945},[33,53059,52952],{"class":59},[33,53061,53062,53064,53066],{"class":35,"line":418},[33,53063,52986],{"class":59},[33,53065,1729],{"class":52945},[33,53067,52952],{"class":59},[33,53069,53070,53073],{"class":35,"line":425},[33,53071,53072],{"class":52945},"        *",[33,53074,17228],{"class":59},[33,53076,53077,53080,53083,53085],{"class":35,"line":1147},[33,53078,53079],{"class":39},"            margin",[33,53081,53082],{"class":59},": ",[33,53084,2010],{"class":39},[33,53086,2976],{"class":59},[33,53088,53089,53092,53094,53096],{"class":35,"line":1329},[33,53090,53091],{"class":39},"            padding",[33,53093,53082],{"class":59},[33,53095,2010],{"class":39},[33,53097,2976],{"class":59},[33,53099,53100],{"class":35,"line":1341},[33,53101,4195],{"class":59},[33,53103,53104],{"class":35,"line":1348},[33,53105,127],{"emptyLinePlaceholder":126},[33,53107,53108,53111],{"class":35,"line":1529},[33,53109,53110],{"class":3632},"        .box",[33,53112,17228],{"class":59},[33,53114,53115,53118,53120,53123],{"class":35,"line":1546},[33,53116,53117],{"class":39},"            display",[33,53119,53082],{"class":59},[33,53121,53122],{"class":39},"flex",[33,53124,2976],{"class":59},[33,53126,53127,53130,53132,53135,53138],{"class":35,"line":1551},[33,53128,53129],{"class":39},"            width",[33,53131,53082],{"class":59},[33,53133,53134],{"class":39},"700",[33,53136,53137],{"class":63},"px",[33,53139,2976],{"class":59},[33,53141,53142,53145,53147,53149,53151],{"class":35,"line":1566},[33,53143,53144],{"class":39},"            height",[33,53146,53082],{"class":59},[33,53148,5635],{"class":39},[33,53150,53137],{"class":63},[33,53152,2976],{"class":59},[33,53154,53155,53158,53160,53162,53164,53167,53170],{"class":35,"line":1578},[33,53156,53157],{"class":39},"            border-left",[33,53159,53082],{"class":59},[33,53161,2036],{"class":39},[33,53163,53137],{"class":63},[33,53165,53166],{"class":39}," solid",[33,53168,53169],{"class":39}," pink",[33,53171,2976],{"class":59},[33,53173,53174,53177,53179,53181,53183,53185,53187],{"class":35,"line":1583},[33,53175,53176],{"class":39},"            border-bottom",[33,53178,53082],{"class":59},[33,53180,2036],{"class":39},[33,53182,53137],{"class":63},[33,53184,53166],{"class":39},[33,53186,53169],{"class":39},[33,53188,2976],{"class":59},[33,53190,53191,53193,53195,53197,53199,53202],{"class":35,"line":3369},[33,53192,53079],{"class":39},[33,53194,53082],{"class":59},[33,53196,2473],{"class":39},[33,53198,53137],{"class":63},[33,53200,53201],{"class":39}," auto",[33,53203,2976],{"class":59},[33,53205,53206,53209,53211,53214],{"class":35,"line":3396},[33,53207,53208],{"class":39},"            justify-content",[33,53210,53082],{"class":59},[33,53212,53213],{"class":39},"space-around",[33,53215,2976],{"class":59},[33,53217,53218,53221,53223,53226],{"class":35,"line":3401},[33,53219,53220],{"class":39},"            align-items",[33,53222,53082],{"class":59},[33,53224,53225],{"class":39},"flex-end",[33,53227,2976],{"class":59},[33,53229,53230,53233,53235,53238],{"class":35,"line":3418},[33,53231,53232],{"class":39},"            text-align",[33,53234,53082],{"class":59},[33,53236,53237],{"class":39},"center",[33,53239,2976],{"class":59},[33,53241,53242],{"class":35,"line":3423},[33,53243,4195],{"class":59},[33,53245,53246],{"class":35,"line":3428},[33,53247,127],{"emptyLinePlaceholder":126},[33,53249,53250,53252,53254,53257],{"class":35,"line":3433},[33,53251,53110],{"class":3632},[33,53253,2775],{"class":63},[33,53255,53256],{"class":52945},"div",[33,53258,17228],{"class":59},[33,53260,53261,53263,53265,53267],{"class":35,"line":3447},[33,53262,53117],{"class":39},[33,53264,53082],{"class":59},[33,53266,53122],{"class":39},[33,53268,2976],{"class":59},[33,53270,53271,53273,53275,53277,53279],{"class":35,"line":3452},[33,53272,53129],{"class":39},[33,53274,53082],{"class":59},[33,53276,2473],{"class":39},[33,53278,53137],{"class":63},[33,53280,2976],{"class":59},[33,53282,53283,53286,53288,53291],{"class":35,"line":4243},[33,53284,53285],{"class":39},"            background-color",[33,53287,53082],{"class":59},[33,53289,53290],{"class":39},"pink",[33,53292,2976],{"class":59},[33,53294,53295,53298,53300,53303],{"class":35,"line":4257},[33,53296,53297],{"class":39},"            flex-direction",[33,53299,53082],{"class":59},[33,53301,53302],{"class":39},"column",[33,53304,2976],{"class":59},[33,53306,53307,53309,53311,53314],{"class":35,"line":4265},[33,53308,53208],{"class":39},[33,53310,53082],{"class":59},[33,53312,53313],{"class":39},"space-between",[33,53315,2976],{"class":59},[33,53317,53318],{"class":35,"line":4270},[33,53319,4195],{"class":59},[33,53321,53322],{"class":35,"line":4276},[33,53323,127],{"emptyLinePlaceholder":126},[33,53325,53326,53328,53331,53334],{"class":35,"line":4282},[33,53327,53110],{"class":3632},[33,53329,53330],{"class":52945}," div",[33,53332,53333],{"class":52945}," span",[33,53335,17228],{"class":59},[33,53337,53338],{"class":35,"line":4287},[33,53339,127],{"emptyLinePlaceholder":126},[33,53341,53342,53345,53347,53350,53352],{"class":35,"line":9608},[33,53343,53344],{"class":39},"            margin-top",[33,53346,53082],{"class":59},[33,53348,53349],{"class":39},"-20",[33,53351,53137],{"class":63},[33,53353,2976],{"class":59},[33,53355,53356],{"class":35,"line":9632},[33,53357,4195],{"class":59},[33,53359,53360],{"class":35,"line":9637},[33,53361,127],{"emptyLinePlaceholder":126},[33,53363,53364,53366,53368,53371],{"class":35,"line":9643},[33,53365,53110],{"class":3632},[33,53367,53330],{"class":52945},[33,53369,53370],{"class":52945}," h4",[33,53372,17228],{"class":59},[33,53374,53375,53378,53380,53383,53385],{"class":35,"line":9670},[33,53376,53377],{"class":39},"            margin-bottom",[33,53379,53082],{"class":59},[33,53381,53382],{"class":39},"-35",[33,53384,53137],{"class":63},[33,53386,2976],{"class":59},[33,53388,53389,53391,53393,53395,53397],{"class":35,"line":9675},[33,53390,53129],{"class":39},[33,53392,53082],{"class":59},[33,53394,2174],{"class":39},[33,53396,53137],{"class":63},[33,53398,2976],{"class":59},[33,53400,53401,53404,53406,53409,53411],{"class":35,"line":9681},[33,53402,53403],{"class":39},"            margin-left",[33,53405,53082],{"class":59},[33,53407,53408],{"class":39},"-10",[33,53410,53137],{"class":63},[33,53412,2976],{"class":59},[33,53414,53415],{"class":35,"line":9693},[33,53416,4195],{"class":59},[33,53418,53419,53422,53424],{"class":35,"line":9705},[33,53420,53421],{"class":59},"    \u003C\u002F",[33,53423,1729],{"class":52945},[33,53425,52952],{"class":59},[33,53427,53428,53431,53433],{"class":35,"line":9717},[33,53429,53430],{"class":59},"\u003C\u002F",[33,53432,52979],{"class":52945},[33,53434,52952],{"class":59},[33,53436,53437],{"class":35,"line":11375},[33,53438,127],{"emptyLinePlaceholder":126},[33,53440,53441,53443,53446],{"class":35,"line":11400},[33,53442,2726],{"class":59},[33,53444,53445],{"class":52945},"body",[33,53447,52952],{"class":59},[33,53449,53450],{"class":35,"line":11423},[33,53451,127],{"emptyLinePlaceholder":126},[33,53453,53454,53456,53459],{"class":35,"line":11447},[33,53455,52986],{"class":59},[33,53457,53458],{"class":52945},"script",[33,53460,52952],{"class":59},[33,53462,53463],{"class":35,"line":11452},[33,53464,53465],{"class":87},"        \u002F\u002F 1. 四次弹框效果\n",[33,53467,53468],{"class":35,"line":11457},[33,53469,53470],{"class":87},"        \u002F\u002F 声明一个新的数组\n",[33,53472,53473,53476,53479,53481],{"class":35,"line":11462},[33,53474,53475],{"class":63},"        let",[33,53477,53478],{"class":59}," arr ",[33,53480,64],{"class":63},[33,53482,53483],{"class":59}," []\n",[33,53485,53486,53488,53490,53493,53495,53497,53499,53501,53503,53506,53508,53510],{"class":35,"line":11471},[33,53487,5066],{"class":63},[33,53489,3332],{"class":59},[33,53491,53492],{"class":63},"let",[33,53494,11097],{"class":59},[33,53496,64],{"class":63},[33,53498,26774],{"class":39},[33,53500,11104],{"class":59},[33,53502,837],{"class":63},[33,53504,53505],{"class":39}," 4",[33,53507,4877],{"class":59},[33,53509,3960],{"class":63},[33,53511,14100],{"class":59},[33,53513,53514],{"class":35,"line":11476},[33,53515,53516],{"class":87},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[33,53518,53519],{"class":35,"line":11482},[33,53520,53521],{"class":87},"            \u002F\u002F arr.push(num)\n",[33,53523,53524,53527,53530,53532,53535,53537,53540,53542,53545],{"class":35,"line":11503},[33,53525,53526],{"class":59},"            arr.",[33,53528,53529],{"class":3632},"push",[33,53531,109],{"class":59},[33,53533,53534],{"class":3632},"prompt",[33,53536,109],{"class":59},[33,53538,53539],{"class":117},"`请输入第${",[33,53541,2259],{"class":59},[33,53543,53544],{"class":117},"}季度的数据:`",[33,53546,121],{"class":59},[33,53548,53549],{"class":35,"line":11509},[33,53550,53551],{"class":87},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[33,53553,53554],{"class":35,"line":11523},[33,53555,4195],{"class":59},[33,53557,53558],{"class":35,"line":11529},[33,53559,53560],{"class":87},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[33,53562,53563],{"class":35,"line":11556},[33,53564,53565],{"class":87},"        \u002F\u002F 盒子开头\n",[33,53567,53568,53571,53574,53576,53579],{"class":35,"line":11565},[33,53569,53570],{"class":59},"        document.",[33,53572,53573],{"class":3632},"write",[33,53575,109],{"class":59},[33,53577,53578],{"class":117},"` \u003Cdiv class=\"box\">`",[33,53580,157],{"class":59},[33,53582,53583],{"class":35,"line":11571},[33,53584,127],{"emptyLinePlaceholder":126},[33,53586,53587],{"class":35,"line":11579},[33,53588,53589],{"class":87},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[33,53591,53592,53594,53596,53598,53600,53602,53604,53606,53608,53611,53614,53616,53618],{"class":35,"line":11584},[33,53593,5066],{"class":63},[33,53595,3332],{"class":59},[33,53597,53492],{"class":63},[33,53599,11097],{"class":59},[33,53601,64],{"class":63},[33,53603,829],{"class":39},[33,53605,11104],{"class":59},[33,53607,2726],{"class":63},[33,53609,53610],{"class":59}," arr.",[33,53612,53613],{"class":39},"length",[33,53615,4877],{"class":59},[33,53617,3960],{"class":63},[33,53619,14100],{"class":59},[33,53621,53622,53625,53627,53629],{"class":35,"line":18259},[33,53623,53624],{"class":59},"            document.",[33,53626,53573],{"class":3632},[33,53628,109],{"class":59},[33,53630,53631],{"class":117},"`\n",[33,53633,53634,53637,53639,53641,53643,53645],{"class":35,"line":18265},[33,53635,53636],{"class":117},"              \u003Cdiv style=\"height: ${",[33,53638,5542],{"class":59},[33,53640,2707],{"class":117},[33,53642,2259],{"class":59},[33,53644,2756],{"class":117},[33,53646,53647],{"class":117},"}px;\">\n",[33,53649,53650,53653,53655,53657,53659,53661],{"class":35,"line":18288},[33,53651,53652],{"class":117},"                \u003Cspan>${",[33,53654,5542],{"class":59},[33,53656,2707],{"class":117},[33,53658,2259],{"class":59},[33,53660,2756],{"class":117},[33,53662,53663],{"class":117},"}\u003C\u002Fspan>\n",[33,53665,53666,53669,53671,53673,53675],{"class":35,"line":18294},[33,53667,53668],{"class":117},"                \u003Ch4>第${",[33,53670,2259],{"class":59},[33,53672,47212],{"class":63},[33,53674,26774],{"class":39},[33,53676,53677],{"class":117},"}季度\u003C\u002Fh4>\n",[33,53679,53680],{"class":35,"line":18317},[33,53681,53682],{"class":117},"              \u003C\u002Fdiv>          \n",[33,53684,53685,53688],{"class":35,"line":18331},[33,53686,53687],{"class":117},"            `",[33,53689,157],{"class":59},[33,53691,53692],{"class":35,"line":18351},[33,53693,4195],{"class":59},[33,53695,53696],{"class":35,"line":18357},[33,53697,53698],{"class":87},"        \u002F\u002F 盒子结尾\n",[33,53700,53701,53703,53705,53707,53710],{"class":35,"line":18368},[33,53702,53570],{"class":59},[33,53704,53573],{"class":3632},[33,53706,109],{"class":59},[33,53708,53709],{"class":117},"` \u003C\u002Fdiv>`",[33,53711,157],{"class":59},[33,53713,53714,53716,53718],{"class":35,"line":18391},[33,53715,53421],{"class":59},[33,53717,53458],{"class":52945},[33,53719,52952],{"class":59},[33,53721,53722,53724,53726],{"class":35,"line":18413},[33,53723,53430],{"class":59},[33,53725,53445],{"class":52945},[33,53727,52952],{"class":59},[33,53729,53730],{"class":35,"line":18418},[33,53731,127],{"emptyLinePlaceholder":126},[33,53733,53734,53736,53738],{"class":35,"line":18424},[33,53735,53430],{"class":59},[33,53737,52280],{"class":52945},[33,53739,52952],{"class":59},[633,53741,53743],{"id":53742},"_284-冒泡排序","2.8.4 冒泡排序",[23,53745,53747],{"className":52278,"code":53746,"language":52280,"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,53748,53749,53759,53773,53777,53785,53800,53820,53832,53840,53844,53852,53860,53892,53925,53962,53967,53986,53991,54004,54019,54035,54039,54044,54048,54058,54067,54075,54079],{"__ignoreMap":28},[33,53750,53751,53753,53755,53757],{"class":35,"line":36},[33,53752,52942],{"class":59},[33,53754,52946],{"class":52945},[33,53756,52949],{"class":3632},[33,53758,52952],{"class":59},[33,53760,53761,53763,53765,53767,53769,53771],{"class":35,"line":43},[33,53762,2726],{"class":59},[33,53764,52280],{"class":52945},[33,53766,52961],{"class":3632},[33,53768,64],{"class":59},[33,53770,52966],{"class":117},[33,53772,52952],{"class":59},[33,53774,53775],{"class":35,"line":130},[33,53776,127],{"emptyLinePlaceholder":126},[33,53778,53779,53781,53783],{"class":35,"line":146},[33,53780,2726],{"class":59},[33,53782,52979],{"class":52945},[33,53784,52952],{"class":59},[33,53786,53787,53790,53792,53794,53796,53798],{"class":35,"line":267},[33,53788,53789],{"class":59},"  \u003C",[33,53791,52989],{"class":52945},[33,53793,52992],{"class":3632},[33,53795,64],{"class":59},[33,53797,52997],{"class":117},[33,53799,52952],{"class":59},[33,53801,53802,53804,53806,53808,53810,53812,53814,53816,53818],{"class":35,"line":275},[33,53803,53789],{"class":59},[33,53805,52989],{"class":52945},[33,53807,16578],{"class":3632},[33,53809,64],{"class":59},[33,53811,53036],{"class":117},[33,53813,53016],{"class":3632},[33,53815,64],{"class":59},[33,53817,53043],{"class":117},[33,53819,52952],{"class":59},[33,53821,53822,53824,53826,53828,53830],{"class":35,"line":392},[33,53823,53789],{"class":59},[33,53825,53052],{"class":52945},[33,53827,53055],{"class":59},[33,53829,53052],{"class":52945},[33,53831,52952],{"class":59},[33,53833,53834,53836,53838],{"class":35,"line":406},[33,53835,53430],{"class":59},[33,53837,52979],{"class":52945},[33,53839,52952],{"class":59},[33,53841,53842],{"class":35,"line":418},[33,53843,127],{"emptyLinePlaceholder":126},[33,53845,53846,53848,53850],{"class":35,"line":425},[33,53847,2726],{"class":59},[33,53849,53445],{"class":52945},[33,53851,52952],{"class":59},[33,53853,53854,53856,53858],{"class":35,"line":1147},[33,53855,53789],{"class":59},[33,53857,53458],{"class":52945},[33,53859,52952],{"class":59},[33,53861,53862,53865,53867,53869,53872,53874,53876,53878,53880,53882,53884,53886,53888,53890],{"class":35,"line":1329},[33,53863,53864],{"class":63},"    let",[33,53866,53478],{"class":59},[33,53868,64],{"class":63},[33,53870,53871],{"class":59}," [",[33,53873,2137],{"class":39},[33,53875,14093],{"class":59},[33,53877,2111],{"class":39},[33,53879,14093],{"class":59},[33,53881,1891],{"class":39},[33,53883,14093],{"class":59},[33,53885,1897],{"class":39},[33,53887,14093],{"class":59},[33,53889,2036],{"class":39},[33,53891,34893],{"class":59},[33,53893,53894,53896,53898,53900,53902,53904,53906,53908,53910,53912,53914,53917,53919,53921,53923],{"class":35,"line":1341},[33,53895,4864],{"class":63},[33,53897,3332],{"class":59},[33,53899,53492],{"class":63},[33,53901,11097],{"class":59},[33,53903,64],{"class":63},[33,53905,829],{"class":39},[33,53907,11104],{"class":59},[33,53909,2726],{"class":63},[33,53911,53610],{"class":59},[33,53913,53613],{"class":39},[33,53915,53916],{"class":63}," -",[33,53918,26774],{"class":39},[33,53920,4877],{"class":59},[33,53922,3960],{"class":63},[33,53924,14100],{"class":59},[33,53926,53927,53930,53932,53934,53936,53938,53940,53942,53944,53946,53948,53950,53952,53954,53956,53958,53960],{"class":35,"line":1348},[33,53928,53929],{"class":63},"      for",[33,53931,3332],{"class":59},[33,53933,53492],{"class":63},[33,53935,11159],{"class":59},[33,53937,64],{"class":63},[33,53939,829],{"class":39},[33,53941,11166],{"class":59},[33,53943,2726],{"class":63},[33,53945,53610],{"class":59},[33,53947,53613],{"class":39},[33,53949,53916],{"class":63},[33,53951,11097],{"class":59},[33,53953,2349],{"class":63},[33,53955,26774],{"class":39},[33,53957,11173],{"class":59},[33,53959,3960],{"class":63},[33,53961,14100],{"class":59},[33,53963,53964],{"class":35,"line":1529},[33,53965,53966],{"class":87},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[33,53968,53969,53971,53974,53976,53979,53981,53983],{"class":35,"line":1546},[33,53970,4163],{"class":63},[33,53972,53973],{"class":59}," (arr[j] ",[33,53975,2775],{"class":63},[33,53977,53978],{"class":59}," arr[j ",[33,53980,2298],{"class":63},[33,53982,26774],{"class":39},[33,53984,53985],{"class":59},"]) {\n",[33,53987,53988],{"class":35,"line":1551},[33,53989,53990],{"class":87},"          \u002F\u002F 交换两个变量\n",[33,53992,53993,53996,53999,54001],{"class":35,"line":1566},[33,53994,53995],{"class":63},"          let",[33,53997,53998],{"class":59}," tmp ",[33,54000,64],{"class":63},[33,54002,54003],{"class":59}," arr[j]\n",[33,54005,54006,54009,54011,54013,54015,54017],{"class":35,"line":1578},[33,54007,54008],{"class":59},"          arr[j] ",[33,54010,64],{"class":63},[33,54012,53978],{"class":59},[33,54014,2298],{"class":63},[33,54016,26774],{"class":39},[33,54018,34893],{"class":59},[33,54020,54021,54024,54026,54028,54030,54032],{"class":35,"line":1583},[33,54022,54023],{"class":59},"          arr[j ",[33,54025,2298],{"class":63},[33,54027,26774],{"class":39},[33,54029,6104],{"class":59},[33,54031,64],{"class":63},[33,54033,54034],{"class":59}," tmp\n",[33,54036,54037],{"class":35,"line":3369},[33,54038,4195],{"class":59},[33,54040,54041],{"class":35,"line":3396},[33,54042,54043],{"class":59},"      }\n",[33,54045,54046],{"class":35,"line":3401},[33,54047,3855],{"class":59},[33,54049,54050,54053,54055],{"class":35,"line":3418},[33,54051,54052],{"class":59},"    document.",[33,54054,53573],{"class":3632},[33,54056,54057],{"class":59},"(arr)\n",[33,54059,54060,54063,54065],{"class":35,"line":3423},[33,54061,54062],{"class":59},"  \u003C\u002F",[33,54064,53458],{"class":52945},[33,54066,52952],{"class":59},[33,54068,54069,54071,54073],{"class":35,"line":3428},[33,54070,53430],{"class":59},[33,54072,53445],{"class":52945},[33,54074,52952],{"class":59},[33,54076,54077],{"class":35,"line":3433},[33,54078,127],{"emptyLinePlaceholder":126},[33,54080,54081,54083,54085],{"class":35,"line":3447},[33,54082,53430],{"class":59},[33,54084,52280],{"class":52945},[33,54086,52952],{"class":59},[19,54088,54089],{},[3145,54090],{"alt":28,"src":54091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54093,54094],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54096,54097],{},"let arr = [4, 2, 5, 1, 3]",[19,54099,54100],{},"\u002F\u002F 1.升序排列写法",[19,54102,54103],{},"arr.sort(function (a, b) {",[19,54105,54106],{},"return a - b",[19,54108,54109],{},"})",[19,54111,54112],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54114,54115],{},"\u002F\u002F 降序排列写法",[19,54117,54103],{},[19,54119,54120],{},"return b - a",[19,54122,54109],{},[19,54124,54125],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54127,54129],{"id":54128},"_29-函数","2.9 函数",[19,54131,54132],{},[3145,54133],{"alt":28,"src":54134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54136,54137],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54139,54140],{},"函数的声明用function",[19,54142,54143],{},"函数里边可以嵌套函数",[633,54145,54147],{"id":54146},"_291-函数传参","2.9.1 函数传参",[19,54149,54150],{},[3145,54151],{"alt":28,"src":54152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54154,54155],{},[3145,54156],{"alt":28,"src":54157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2822,54159,54160,54163,54166,54169,54172,54175],{},[165,54161,54162],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[165,54164,54165],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[165,54167,54168],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[165,54170,54171],{},"开发中尽量保持形参和实参个数一致",[165,54173,54174],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[165,54176,54177],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54179,54180],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[633,54182,54184],{"id":54183},"_292-函数的返回值","2.9.2 函数的返回值",[19,54186,54187],{},[3145,54188],{"alt":28,"src":54189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54191,54192],{},[3145,54193],{"alt":28,"src":54194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2822,54196,54197,54200,54203,54206,54209],{},[165,54198,54199],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[165,54201,54202],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[165,54204,54205],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[165,54207,54208],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[165,54210,54211],{},"断点调试:进入函数内部看执行过程F11",[633,54213,54215],{"id":54214},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[23,54217,54219],{"className":52278,"code":54218,"language":52280,"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,54220,54221,54226,54231,54235,54240],{"__ignoreMap":28},[33,54222,54223],{"class":35,"line":36},[33,54224,54225],{"class":59},"    function fn(a, b) {\n",[33,54227,54228],{"class":35,"line":43},[33,54229,54230],{"class":59},"      console.log(a + b);\n",[33,54232,54233],{"class":35,"line":130},[33,54234,3855],{"class":59},[33,54236,54237],{"class":35,"line":146},[33,54238,54239],{"class":59},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[33,54241,54242],{"class":35,"line":267},[33,54243,54244],{"class":59},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[633,54246,54248],{"id":54247},"_294-作用域","2.9.4 作用域",[2822,54250,54251,54257,54262,54265,54268],{},[165,54252,54253,54254],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[1968,54255,54256],{},"作用域",[165,54258,54259],{},[1968,54260,54261],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[165,54263,54264],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[165,54266,54267],{},"函数内部可以直接所使用全局变量",[165,54269,54270],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54272,16291],{},[23,54274,54276],{"className":52278,"code":54275,"language":52280,"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,54277,54278,54283,54288,54292,54297,54302,54307],{"__ignoreMap":28},[33,54279,54280],{"class":35,"line":36},[33,54281,54282],{"class":59},"    function fun() {\n",[33,54284,54285],{"class":35,"line":43},[33,54286,54287],{"class":59},"      num = 10\n",[33,54289,54290],{"class":35,"line":130},[33,54291,3855],{"class":59},[33,54293,54294],{"class":35,"line":146},[33,54295,54296],{"class":59},"    fun()\n",[33,54298,54299],{"class":35,"line":267},[33,54300,54301],{"class":59},"    console.log(num)\n",[33,54303,54304],{"class":35,"line":275},[33,54305,54306],{"class":59},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[33,54308,54309],{"class":35,"line":392},[33,54310,54311],{"class":59},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2822,54313,54314,54317],{},[165,54315,54316],{},"函数内部的形参可以看做是局部变量",[165,54318,54319],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54321,54322,54323],{},"变量访问原则： ",[1968,54324,54325],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[633,54327,54329],{"id":54328},"_295-匿名函数","2.9.5 匿名函数",[19,54331,54332],{},"函数可以分为具名函数和匿名函数",[19,54334,54335],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[162,54337,54338],{},[165,54339,54340],{},"函数表达式",[19,54342,54343],{},[3145,54344],{"alt":28,"src":54345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54347,54348],{},"里边也可以写参数",[19,54350,54351],{},"具名函数调用位置可以随意调整；",[19,54353,54354],{},"匿名函数函数表达式形式只能在声明后才可以使用",[162,54356,54357],{"start":43},[165,54358,54359],{},"立即执行函数",[19,54361,54362],{},[3145,54363],{"alt":28,"src":54364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54366,54367],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54369,54370],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54372,54373],{},"(function () {})();",[19,54375,54376],{},"不要落下最后的;",[19,54378,54379],{},"立即执行函数必须要加;",[19,54381,54382],{},"分号写前写后都没问题",[19,54384,54385],{},"写前：",[19,54387,54388],{},"(function() {})()",[19,54390,54391],{},";(function () {})();",[19,54393,54394],{},"写后:",[19,54396,54397],{},"(function() {})();",[19,54399,54373],{},[19,54401,54402],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54404,54405],{},"还有一种写法：",[19,54407,54408],{},"(function(){}());",[19,54410,54411],{},"或者:",[19,54413,54414],{},"!function(){}();",[19,54416,54417],{},"立即执行函数有时候也是可以加名字的：",[19,54419,54420],{},"(function flexible(window,document) {}(window,document));",[19,54422,54423],{},"省一些调用方法",[633,54425,54427],{"id":54426},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54429,54430],{},[3145,54431],{"alt":28,"src":54432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54434,54435],{},"这样就不用非得给x,y初始化了",[19,54437,54438],{},[3145,54439],{"alt":28,"src":54440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54442,54443],{},"代码执行时先看左边",[19,54445,54446],{},"例如：console.log(false && 3+5)",[19,54448,54449],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54451,54452],{},"&&都是真时，就返回最后一个真值",[19,54454,54455],{},"console.log(11 && 22)",[19,54457,54458],{},"输出22",[19,54460,54461],{},"逻辑与：遇真则真",[19,54463,16291],{},[19,54465,54466],{},"let age=1",[19,54468,54469],{},"console.log(11 || age++)",[19,54471,54472],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54474,54475],{},"console.log(11 || 22)",[19,54477,54478],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54480,54481],{},"||如果都是假的话，就取最后一个假的值了",[633,54483,54485],{"id":54484},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54487,54488],{},"显示转换：",[19,54490,54491,54494,54495],{},[1968,54492,54493],{},"记忆","： ",[1968,54496,54497],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54499,54500],{},"空字符串为假，其他字符串全为真",[19,54502,54503],{},[3145,54504],{"alt":28,"src":54505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54507,54508],{},"隐式转换：",[19,54510,54511],{},[3145,54512],{"alt":28,"src":54513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54515,54516],{},"隐式转换:",[19,54518,54519],{},"null+3=3",[19,54521,54522],{},"undefined+3=NaN",[19,54524,54525],{},"null==undefined 输出true,他两个都当0看",[19,54527,54528],{},"null===undefined 输出false",[19,54530,54531],{},"undefined做任何操作都是NaN",[19,54533,54534],{},"NaN不等于NaN，NaN表示计算错误",[14,54536,54538],{"id":54537},"_210-对象","2.10 对象",[633,54540,54542],{"id":54541},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54544,54545],{},"对象也是一种数据类型，里边的数据是无序的",[19,54547,54548],{},"对象由属性和方法组成",[19,54550,54551],{},[3145,54552],{"alt":28,"src":54553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54555,54556],{},[3145,54557],{"alt":28,"src":54558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54560,54561],{},[3145,54562],{"alt":28,"src":54563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[633,54565,54567],{"id":54566},"_2102-对象属性","2.10.2 对象属性",[19,54569,54570],{},[3145,54571],{"alt":28,"src":54572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[162,54574,54575],{},[165,54576,54577],{},"查询对象",[19,54579,54580],{},"对象名.属性 goods.uname",[19,54582,54583],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54585,54586],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54588,54589],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54591,54592],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[162,54594,54595],{"start":43},[165,54596,54597],{},"重新赋值",[19,54599,54600],{},"对象名.属性=新值",[162,54602,54603],{"start":130},[165,54604,54605],{},"增加新数据",[19,54607,54600],{},[162,54609,54610],{"start":146},[165,54611,54612],{},"删除对象中的属性",[19,54614,54615],{},"delete 对象名.属性",[633,54617,54619],{"id":54618},"_2103-对象方法","2.10.3 对象方法",[19,54621,54622],{},[3145,54623],{"alt":28,"src":54624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54626,54627],{},"后边跟的是匿名函数",[19,54629,54630],{},"对象外面的叫函数；对象内部的叫方法",[19,54632,54633],{},[3145,54634],{"alt":28,"src":54635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[633,54637,54639],{"id":54638},"_2104-遍历对象","2.10.4 遍历对象",[19,54641,54642],{},"理解为加括号的python字典遍历",[19,54644,54645],{},[3145,54646],{"alt":28,"src":54647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54649,54650],{},"k是字符串类型",[19,54652,54653],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[23,54655,54657],{"className":52278,"code":54656,"language":52280,"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,54658,54659,54664,54669,54674,54679],{"__ignoreMap":28},[33,54660,54661],{"class":35,"line":36},[33,54662,54663],{"class":59},"   let arr = [1, 2, 3]\n",[33,54665,54666],{"class":35,"line":43},[33,54667,54668],{"class":59},"    for (let k in arr) {\n",[33,54670,54671],{"class":35,"line":130},[33,54672,54673],{"class":59},"      console.log(k)\n",[33,54675,54676],{"class":35,"line":146},[33,54677,54678],{"class":59},"      console.log(arr[k])\n",[33,54680,54681],{"class":35,"line":267},[33,54682,3855],{"class":59},[19,54684,54685],{},[3145,54686],{"alt":28,"src":54687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54689,54690],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54692,54693],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54695,54696],{},"for in 得到的k是属性名",[53458,54698,54699],{},"\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,54701,54702],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[633,54704,54706],{"id":54705},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54708,54709],{},"数组中放对象信息",[23,54711,54715],{"className":54712,"code":54713,"language":54714,"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,54716,54717,54725,54730,54735,54740,54745,54750,54755,54760,54765,54770,54775,54780,54784,54788],{"__ignoreMap":28},[33,54718,54719,54721,54723],{"class":35,"line":36},[33,54720,2726],{"class":59},[33,54722,53458],{"class":52945},[33,54724,52952],{"class":59},[33,54726,54727],{"class":35,"line":43},[33,54728,54729],{"class":59},"    let students = [\n",[33,54731,54732],{"class":35,"line":130},[33,54733,54734],{"class":59},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[33,54736,54737],{"class":35,"line":146},[33,54738,54739],{"class":59},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[33,54741,54742],{"class":35,"line":267},[33,54743,54744],{"class":59},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[33,54746,54747],{"class":35,"line":275},[33,54748,54749],{"class":59},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[33,54751,54752],{"class":35,"line":392},[33,54753,54754],{"class":59},"    ]\n",[33,54756,54757],{"class":35,"line":406},[33,54758,54759],{"class":59},"    for (let i = 0; i \u003C students.length; i++) {\n",[33,54761,54762],{"class":35,"line":418},[33,54763,54764],{"class":59},"      for (let k in students[i]) {\n",[33,54766,54767],{"class":35,"line":425},[33,54768,54769],{"class":59},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[33,54771,54772],{"class":35,"line":1147},[33,54773,54774],{"class":59},"        \u002F\u002F输出每个人的名字：\n",[33,54776,54777],{"class":35,"line":1329},[33,54778,54779],{"class":59},"        \u002F\u002Fconsole.log(students[i].name)\n",[33,54781,54782],{"class":35,"line":1341},[33,54783,54043],{"class":59},[33,54785,54786],{"class":35,"line":1348},[33,54787,3855],{"class":59},[33,54789,54790,54792,54794],{"class":35,"line":1529},[33,54791,54062],{"class":59},[33,54793,53458],{"class":52945},[33,54795,52952],{"class":59},[633,54797,54799],{"id":54798},"_2106-内置对象","2.10.6 内置对象",[19,54801,54802],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[162,54804,54805],{},[165,54806,54807],{},"数学对象Math",[19,54809,54810],{},[3145,54811],{"alt":28,"src":54812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54814,54815],{},[2057,54816,54819],{"href":54817,"rel":54818},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25520],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54821,54822],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54824,54825],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54827,54828],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54830,54831],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54833,54834],{},"null属于对象数据类型",[162,54836,54837],{"start":43},[165,54838,54839],{},"生成任意范围随机数",[19,54841,54842],{},[3145,54843],{"alt":28,"src":54844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54846,54847],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54849,54850],{},"乘以几就取不到几",[19,54852,54853],{},"取数组中的随机元素：",[19,54855,54856],{},"let arr = ['red', 'green', 'blue']",[19,54858,54859],{},"let random = Math.floor(Math.random() * arr.length)",[19,54861,54862],{},"console.log(arr[random])",[19,54864,54865],{},"这个函数得到的是全闭区间",[19,54867,54868],{},"function getRandom(N, M) {",[19,54870,54871],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54873,1011],{},[19,54875,54876],{},"console.log(getRandom(4, 8))",[633,54878,54880],{"id":54879},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54882,54883],{},[3145,54884],{"alt":28,"src":54885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54887,54888],{},[3145,54889],{"alt":28,"src":54890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54892,54893],{},[3145,54894],{"alt":28,"src":54895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54897,54898],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54900,54901],{},[3145,54902],{"alt":28,"src":54903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54905,54906],{},[3145,54907],{"alt":28,"src":54908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54910,54911],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54913,54914],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54916,54917],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1729,54919,54920],{},"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":43,"depth":43,"links":54922},[54923,54931,54932,54933,54934,54935,54942,54946,54952,54961],{"id":52113,"depth":43,"text":52114,"children":54924},[54925,54926,54927,54928,54929,54930],{"id":52117,"depth":130,"text":52118},{"id":52134,"depth":130,"text":52135},{"id":52174,"depth":130,"text":52175},{"id":52186,"depth":130,"text":52187},{"id":52195,"depth":130,"text":52196},{"id":52243,"depth":130,"text":52244},{"id":52253,"depth":43,"text":52254},{"id":52341,"depth":43,"text":52342},{"id":52364,"depth":43,"text":52365},{"id":52376,"depth":43,"text":52377},{"id":52563,"depth":43,"text":52564,"children":54936},[54937,54938,54939,54940,54941],{"id":52567,"depth":130,"text":52568},{"id":52576,"depth":130,"text":52577},{"id":52604,"depth":130,"text":52605},{"id":52640,"depth":130,"text":52641},{"id":52665,"depth":130,"text":52666},{"id":52677,"depth":43,"text":52678,"children":54943},[54944,54945],{"id":52698,"depth":130,"text":52699},{"id":52792,"depth":130,"text":52793},{"id":52850,"depth":43,"text":52851,"children":54947},[54948,54949,54950,54951],{"id":52854,"depth":130,"text":52855},{"id":52878,"depth":130,"text":52879},{"id":52931,"depth":130,"text":52932},{"id":53742,"depth":130,"text":53743},{"id":54128,"depth":43,"text":54129,"children":54953},[54954,54955,54956,54957,54958,54959,54960],{"id":54146,"depth":130,"text":54147},{"id":54183,"depth":130,"text":54184},{"id":54214,"depth":130,"text":54215},{"id":54247,"depth":130,"text":54248},{"id":54328,"depth":130,"text":54329},{"id":54426,"depth":130,"text":54427},{"id":54484,"depth":130,"text":54485},{"id":54537,"depth":43,"text":54538,"children":54962},[54963,54964,54965,54966,54967,54968,54969],{"id":54541,"depth":130,"text":54542},{"id":54566,"depth":130,"text":54567},{"id":54618,"depth":130,"text":54619},{"id":54638,"depth":130,"text":54639},{"id":54705,"depth":130,"text":54706},{"id":54798,"depth":130,"text":54799},{"id":54879,"depth":130,"text":54880},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52105,"description":1751},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54976,"title":54977,"body":54978,"description":1751,"extension":1752,"meta":78314,"navigation":126,"path":78315,"seo":78316,"stem":78317,"__hash__":78318},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54979,"toc":78254},[54980,54983,54986,54989,54994,54997,55000,55003,55007,55011,55017,55022,55030,55037,55040,55044,55049,55054,55059,55062,55065,55076,55079,55083,55086,55089,55094,55099,55104,55107,55110,55202,55205,55210,55213,55218,55221,55224,55229,55232,55237,55241,55244,55258,55262,55267,55270,55273,55277,55282,55285,55289,55293,55298,55302,55307,55310,55313,55316,55319,55322,55325,55330,55335,55363,55366,55369,55372,55377,55380,55383,55386,55389,55393,55422,55426,55431,55436,55439,55442,55445,55450,55564,55569,55574,55735,55740,55743,55747,55752,55757,55760,55763,55766,55769,55772,55775,55778,55781,55784,55787,55790,55793,55796,55799,55801,55804,55807,55810,55815,55819,56216,56219,56225,56229,56234,57515,57520,57523,57526,57529,57534,58730,58734,58740,58745,58748,58753,58758,58762,58766,58771,58774,58779,58782,58785,58789,59697,59700,59704,59925,59928,59931,59934,60160,60163,60387,60390,60394,60399,60402,60405,60633,60636,60669,60672,60676,60681,60685,60688,60691,60694,60697,60700,60703,60706,60711,61991,61995,61998,63090,63094,63097,63100,63103,63106,63110,63113,63116,63118,63126,64607,64611,64614,64617,64620,64829,64832,64836,64840,64845,64850,64853,64856,64861,64865,64870,64873,64982,64986,64991,64996,64999,65002,65006,65011,65016,65021,65024,65027,65038,65041,65046,65051,65054,65057,65130,65134,65139,65142,65144,65155,65159,65164,66490,66493,66496,66499,66501,66504,66507,66510,66513,66516,66519,66522,66525,66528,66531,66534,66537,66539,66541,66544,66548,67642,67645,67648,67664,67678,67681,67686,67692,67697,67701,67705,67710,67714,67719,68161,68166,68169,68173,68178,68181,68184,68188,68193,68197,68202,68207,68211,68216,68221,68224,68229,68234,68238,68243,68248,68352,68355,68359,68364,68730,68733,68736,68739,68742,68745,68748,68751,68754,70050,70054,70059,70064,70067,70070,70073,70076,70078,70083,70088,70091,70095,70100,70105,70110,70113,70116,70119,70122,70125,70130,70133,70137,70142,70147,70151,70156,70159,70164,70167,70170,70173,70176,70179,70184,70187,70190,70193,70196,70200,70205,70208,70212,70217,70220,70223,70227,70256,70259,70263,70267,70272,70276,70281,70284,70287,70290,70293,70296,70299,70302,70305,70308,70311,70314,70317,70320,70323,70327,70332,70337,70340,70344,70348,70353,70356,70360,70363,70366,70371,70376,70381,70386,70391,70394,70397,70402,70407,70411,70416,70419,70424,70427,70430,70433,70436,70441,70444,70453,70457,70462,70465,70468,70472,70475,70480,70484,70487,70493,70499,70503,70529,70532,72093,72096,72592,72595,72600,72605,72610,72614,72619,72624,72629,72633,72638,72641,72644,72647,72650,72654,72657,72662,72665,72670,72674,72679,72682,72687,72692,72697,72700,72703,72708,72713,72716,72719,72723,72726,72731,72734,72739,72742,72747,72752,72757,72760,72765,72830,72833,72844,72848,72853,73024,73028,73033,73036,73039,73042,73046,73057,73061,73064,73069,73074,73077,73080,73083,73086,73089,73091,73094,73097,73100,73105,73108,73113,73116,73120,73123,73126,73140,73144,73147,73202,73207,73210,73213,73218,73221,73225,73230,73360,73364,73369,73374,73455,73460,73464,73467,73472,73477,73483,73486,73489,73492,73496,73501,73504,73515,73519,73536,76583,76587,76590,76593,76596,76617,76621,76624,76632,76635,76640,76643,76646,76651,76656,76660,76681,76685,76690,76693,76696,76699,76702,76706,76711,76714,76718,76723,76726,76731,76734,76739,76742,76747,77950,77954,77959,77962,77967,78251],[10,54981,54977],{"id":54982},"_3web-apis",[19,54984,54985],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54987,54988],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54990,54991],{},[3145,54992],{"alt":28,"src":54993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54995,54996],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54998,54999],{},"建议数组和对象使用 const 来声明",[19,55001,55002],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55004,55006],{"id":55005},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[633,55008,55010],{"id":55009},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55012,55013,55016],{},[30,55014,55015],{},"document"," = HTML 文件解析后的对象化表示；",[19,55018,55019,55021],{},[30,55020,55015],{}," ≠ HTML 文件本身",[19,55023,55024,55029],{},[1968,55025,55026],{},[30,55027,55028],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55031,55032,55036],{},[1968,55033,55034],{},[30,55035,55015],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55038,55039],{},"document实际上为window.document的简写",[633,55041,55043],{"id":55042},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55045,55046],{},[3145,55047],{"alt":28,"src":55048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55050,55051],{},[3145,55052],{"alt":28,"src":55053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55055,55056],{},[3145,55057],{"alt":28,"src":55058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55060,55061],{},"console.dir()",[19,55063,55064],{},"dir用来打印对象",[2822,55066,55067,55070,55073],{},[165,55068,55069],{},"任何一个标签，都是一个对象",[165,55071,55072],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[165,55074,55075],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55077,55078],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[633,55080,55082],{"id":55081},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55084,55085],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55087,55088],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55090,55091],{},[1968,55092,55093],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[162,55095,55096],{},[165,55097,55098],{},"利用CSS选择器来获取标签元素",[19,55100,55101],{},[3145,55102],{"alt":28,"src":55103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55105,55106],{},"里边的选择器必须必须加引号！！！",[19,55108,55109],{},"只选择第一个元素",[23,55111,55113],{"className":54712,"code":55112,"language":54714,"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,55114,55115,55123,55144,55163,55171,55176,55181,55186,55194],{"__ignoreMap":28},[33,55116,55117,55119,55121],{"class":35,"line":36},[33,55118,2726],{"class":59},[33,55120,53445],{"class":52945},[33,55122,52952],{"class":59},[33,55124,55125,55127,55129,55132,55134,55137,55140,55142],{"class":35,"line":43},[33,55126,53789],{"class":59},[33,55128,53256],{"class":52945},[33,55130,55131],{"class":3632}," class",[33,55133,64],{"class":59},[33,55135,55136],{"class":117},"\"box\"",[33,55138,55139],{"class":59},">123\u003C\u002F",[33,55141,53256],{"class":52945},[33,55143,52952],{"class":59},[33,55145,55146,55148,55150,55152,55154,55156,55159,55161],{"class":35,"line":130},[33,55147,53789],{"class":59},[33,55149,53256],{"class":52945},[33,55151,55131],{"class":3632},[33,55153,64],{"class":59},[33,55155,55136],{"class":117},[33,55157,55158],{"class":59},">456\u003C\u002F",[33,55160,53256],{"class":52945},[33,55162,52952],{"class":59},[33,55164,55165,55167,55169],{"class":35,"line":146},[33,55166,53789],{"class":59},[33,55168,53458],{"class":52945},[33,55170,52952],{"class":59},[33,55172,55173],{"class":35,"line":267},[33,55174,55175],{"class":59},"    \u002F\u002F 1.获取匹配的第一个元素\n",[33,55177,55178],{"class":35,"line":275},[33,55179,55180],{"class":59},"    const box = document.querySelector('div')\n",[33,55182,55183],{"class":35,"line":392},[33,55184,55185],{"class":59},"    console.dir(box)\n",[33,55187,55188,55190,55192],{"class":35,"line":406},[33,55189,54062],{"class":59},[33,55191,53458],{"class":52945},[33,55193,52952],{"class":59},[33,55195,55196,55198,55200],{"class":35,"line":418},[33,55197,53430],{"class":59},[33,55199,53445],{"class":52945},[33,55201,52952],{"class":59},[19,55203,55204],{},"只选123，不选456",[19,55206,55207],{},[3145,55208],{"alt":28,"src":55209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55211,55212],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55214,55215],{},[3145,55216],{"alt":28,"src":55217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55219,55220],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55222,55223],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[162,55225,55226],{"start":43},[165,55227,55228],{},"其他方法来获取标签元素",[19,55230,55231],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55233,55234],{},[3145,55235],{"alt":28,"src":55236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[633,55238,55240],{"id":55239},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55242,55243],{},"设置修改DOM元素内容有两种方式：",[2822,55245,55246,55249,55252,55255],{},[165,55247,55248],{},"元素.innerText=''",[165,55250,55251],{},"元素.innerHTML=''",[165,55253,55254],{},"不写字符串输出数字也是可以的",[165,55256,55257],{},"元素.innerHtml=1",[23653,55259,55261],{"id":55260},"_3131-innertext","3.1.3.1 innerText",[19,55263,55264],{},[3145,55265],{"alt":28,"src":55266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55268,55269],{},"思路：实现了修改盒子中的内容！",[19,55271,55272],{},"它只显示纯文本，不解析标签",[23653,55274,55276],{"id":55275},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55278,55279],{},[3145,55280],{"alt":28,"src":55281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55283,55284],{},"相比于innerText，他的强大之处在于可以解析标签",[633,55286,55288],{"id":55287},"_314-操作元素属性","3.1.4 操作元素属性",[23653,55290,55292],{"id":55291},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55294,55295],{},[3145,55296],{"alt":28,"src":55297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23653,55299,55301],{"id":55300},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55303,55304],{},[3145,55305],{"alt":28,"src":55306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55308,55309],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55311,55312],{},"div.style.backgroundColor = 'hotpink'",[19,55314,55315],{},"如果按照css的写法，-表示减，就会出错",[19,55317,55318],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55320,55321],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55323,55324],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55326,55327],{},[3145,55328],{"alt":28,"src":55329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55331,55332],{},[3145,55333],{"alt":28,"src":55334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[162,55336,55337,55340,55343,55346,55349,55352],{},[165,55338,55339],{},"className这个方式就是修改很多样式的时候来使用的！",[165,55341,55342],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[165,55344,55345],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[165,55347,55348],{},"className为属性名，如果还用class的话就导致与关键字冲突",[165,55350,55351],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[165,55353,55354,55355,55360],{},"解析标签的时候就变为了",[53256,55356],{"className":55357},[55358,55359],"nav","box",[55361,55362],"br",{},[19,55364,55365],{},"例子：",[53256,55367],{"className":55368},[55358],[53458,55370,55371],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55373,55374],{},[3145,55375],{"alt":28,"src":55376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55378,55379],{},"追加和删除类名用classList",[19,55381,55382],{},"常用于类似于开关的操作",[19,55384,55385],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55387,55388],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23653,55390,55392],{"id":55391},"_3143-牢记点","3.1.4.3 牢记点",[162,55394,55395,55398,55401,55404,55407,55410,55413,55416,55419],{},[165,55396,55397],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[165,55399,55400],{},"使用style属性操作css时不要忘记引号",[165,55402,55403],{},"使用className或者classList时也不要忘记引号",[165,55405,55406],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[165,55408,55409],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[165,55411,55412],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[165,55414,55415],{},"若： let arr=['1','2',3] arr[0]=1",[165,55417,55418],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[165,55420,55421],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[633,55423,55425],{"id":55424},"_315-操作表单元素","3.1.5 操作表单元素",[162,55427,55428],{},[165,55429,55430],{},"天生的属性",[19,55432,55433],{},[3145,55434],{"alt":28,"src":55435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55437,55438],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55440,55441],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55443,55444],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55446,55447],{},[3145,55448],{"alt":28,"src":55449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[23,55451,55453],{"className":52278,"code":55452,"language":52280,"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,55454,55455,55460,55491,55496,55501,55506,55511,55515,55520,55525,55542,55554,55559],{"__ignoreMap":28},[33,55456,55457],{"class":35,"line":36},[33,55458,55459],{"class":59},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[33,55461,55462,55464,55466,55469,55471,55474,55476,55478,55480,55482,55484,55486,55489],{"class":35,"line":43},[33,55463,2726],{"class":59},[33,55465,112],{"class":52945},[33,55467,55468],{"class":3632}," type",[33,55470,64],{"class":59},[33,55472,55473],{"class":117},"\"checkbox\"",[33,55475,16578],{"class":3632},[33,55477,64],{"class":59},[33,55479,9312],{"class":117},[33,55481,16617],{"class":3632},[33,55483,64],{"class":59},[33,55485,9312],{"class":117},[33,55487,55488],{"class":3632}," checked",[33,55490,52952],{"class":59},[33,55492,55493],{"class":35,"line":130},[33,55494,55495],{"class":59},"不选的话：\n",[33,55497,55498],{"class":35,"line":146},[33,55499,55500],{"class":59},"const input = document.querySelector('input')\n",[33,55502,55503],{"class":35,"line":267},[33,55504,55505],{"class":59},"input.checked=false\n",[33,55507,55508],{"class":35,"line":275},[33,55509,55510],{"class":59},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[33,55512,55513],{"class":35,"line":392},[33,55514,127],{"emptyLinePlaceholder":126},[33,55516,55517],{"class":35,"line":406},[33,55518,55519],{"class":59},"禁用按钮：\n",[33,55521,55522],{"class":35,"line":418},[33,55523,55524],{"class":59},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[33,55526,55527,55529,55532,55535,55538,55540],{"class":35,"line":425},[33,55528,2726],{"class":59},[33,55530,55531],{"class":52945},"button",[33,55533,55534],{"class":3632}," disabled",[33,55536,55537],{"class":59},">点击\u003C\u002F",[33,55539,55531],{"class":52945},[33,55541,52952],{"class":59},[33,55543,55544,55546,55548,55550,55552],{"class":35,"line":1147},[33,55545,2726],{"class":59},[33,55547,55531],{"class":52945},[33,55549,55537],{"class":59},[33,55551,55531],{"class":52945},[33,55553,52952],{"class":59},[33,55555,55556],{"class":35,"line":1329},[33,55557,55558],{"class":59},"const bt = document.querySelector('button')\n",[33,55560,55561],{"class":35,"line":1341},[33,55562,55563],{"class":59},"bt.disabled = false\n",[162,55565,55566],{"start":43},[165,55567,55568],{},"自定义属性",[19,55570,55571],{},[3145,55572],{"alt":28,"src":55573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[23,55575,55577],{"className":54712,"code":55576,"language":54714,"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,55578,55579,55587,55615,55634,55653,55672,55691,55699,55704,55709,55714,55719,55727],{"__ignoreMap":28},[33,55580,55581,55583,55585],{"class":35,"line":36},[33,55582,2726],{"class":59},[33,55584,53445],{"class":52945},[33,55586,52952],{"class":59},[33,55588,55589,55591,55593,55596,55598,55600,55603,55605,55608,55611,55613],{"class":35,"line":43},[33,55590,53789],{"class":59},[33,55592,53256],{"class":52945},[33,55594,55595],{"class":3632}," data-id",[33,55597,64],{"class":59},[33,55599,5341],{"class":117},[33,55601,55602],{"class":3632}," data-spm",[33,55604,64],{"class":59},[33,55606,55607],{"class":117},"\"我不知道\"",[33,55609,55610],{"class":59},">1\u003C\u002F",[33,55612,53256],{"class":52945},[33,55614,52952],{"class":59},[33,55616,55617,55619,55621,55623,55625,55627,55630,55632],{"class":35,"line":130},[33,55618,53789],{"class":59},[33,55620,53256],{"class":52945},[33,55622,55595],{"class":3632},[33,55624,64],{"class":59},[33,55626,5364],{"class":117},[33,55628,55629],{"class":59},">2\u003C\u002F",[33,55631,53256],{"class":52945},[33,55633,52952],{"class":59},[33,55635,55636,55638,55640,55642,55644,55646,55649,55651],{"class":35,"line":146},[33,55637,53789],{"class":59},[33,55639,53256],{"class":52945},[33,55641,55595],{"class":3632},[33,55643,64],{"class":59},[33,55645,5377],{"class":117},[33,55647,55648],{"class":59},">3\u003C\u002F",[33,55650,53256],{"class":52945},[33,55652,52952],{"class":59},[33,55654,55655,55657,55659,55661,55663,55665,55668,55670],{"class":35,"line":267},[33,55656,53789],{"class":59},[33,55658,53256],{"class":52945},[33,55660,55595],{"class":3632},[33,55662,64],{"class":59},[33,55664,5390],{"class":117},[33,55666,55667],{"class":59},">4\u003C\u002F",[33,55669,53256],{"class":52945},[33,55671,52952],{"class":59},[33,55673,55674,55676,55678,55680,55682,55684,55687,55689],{"class":35,"line":275},[33,55675,53789],{"class":59},[33,55677,53256],{"class":52945},[33,55679,55595],{"class":3632},[33,55681,64],{"class":59},[33,55683,5410],{"class":117},[33,55685,55686],{"class":59},">5\u003C\u002F",[33,55688,53256],{"class":52945},[33,55690,52952],{"class":59},[33,55692,55693,55695,55697],{"class":35,"line":392},[33,55694,53789],{"class":59},[33,55696,53458],{"class":52945},[33,55698,52952],{"class":59},[33,55700,55701],{"class":35,"line":406},[33,55702,55703],{"class":59},"    const one = document.querySelector('div')\n",[33,55705,55706],{"class":35,"line":418},[33,55707,55708],{"class":59},"    console.log(one.dataset)\n",[33,55710,55711],{"class":35,"line":425},[33,55712,55713],{"class":59},"    console.log(one.dataset.id)\n",[33,55715,55716],{"class":35,"line":1147},[33,55717,55718],{"class":59},"    console.log(one.dataset.spm)\n",[33,55720,55721,55723,55725],{"class":35,"line":1329},[33,55722,54062],{"class":59},[33,55724,53458],{"class":52945},[33,55726,52952],{"class":59},[33,55728,55729,55731,55733],{"class":35,"line":1341},[33,55730,53430],{"class":59},[33,55732,53445],{"class":52945},[33,55734,52952],{"class":59},[19,55736,55737],{},[3145,55738],{"alt":28,"src":55739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55741,55742],{},"document.querySelector选择的是第一个对象（元素）",[633,55744,55746],{"id":55745},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55748,55749],{},[3145,55750],{"alt":28,"src":55751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55753,55754],{},[3145,55755],{"alt":28,"src":55756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55758,55759],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53458,55761,55762],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55764,55765],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53458,55767,55768],{},"\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,55770,55771],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55773,55774],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55776,55777],{},"单位为毫秒！！！",[19,55779,55780],{},"可以搭配匿名函数来用！！！",[19,55782,55783],{},"setInterval(function () {",[19,55785,55786],{},"alert('两秒执行一次')",[19,55788,55789],{},"}, 2000)",[19,55791,55792],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55794,55795],{},"function fn() {",[19,55797,55798],{},"document.write(1)",[19,55800,1011],{},[19,55802,55803],{},"setInterval(fn, 1000)",[19,55805,55806],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55808,55809],{},"setInterval('fn()', 1000)",[19,55811,55812],{},[3145,55813],{"alt":28,"src":55814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23653,55816,55818],{"id":55817},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[23,55820,55822],{"className":52278,"code":55821,"language":52280,"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,55823,55824,55834,55848,55852,55860,55874,55894,55906,55914,55918,55926,55963,55968,55973,55978,55986,55994,56016,56024,56029,56051,56056,56061,56072,56077,56097,56105,56120,56135,56146,56151,56161,56171,56175,56184,56188,56196,56204,56208],{"__ignoreMap":28},[33,55825,55826,55828,55830,55832],{"class":35,"line":36},[33,55827,52942],{"class":59},[33,55829,52946],{"class":52945},[33,55831,52949],{"class":3632},[33,55833,52952],{"class":59},[33,55835,55836,55838,55840,55842,55844,55846],{"class":35,"line":43},[33,55837,2726],{"class":59},[33,55839,52280],{"class":52945},[33,55841,52961],{"class":3632},[33,55843,64],{"class":59},[33,55845,52966],{"class":117},[33,55847,52952],{"class":59},[33,55849,55850],{"class":35,"line":130},[33,55851,127],{"emptyLinePlaceholder":126},[33,55853,55854,55856,55858],{"class":35,"line":146},[33,55855,2726],{"class":59},[33,55857,52979],{"class":52945},[33,55859,52952],{"class":59},[33,55861,55862,55864,55866,55868,55870,55872],{"class":35,"line":267},[33,55863,53789],{"class":59},[33,55865,52989],{"class":52945},[33,55867,52992],{"class":3632},[33,55869,64],{"class":59},[33,55871,52997],{"class":117},[33,55873,52952],{"class":59},[33,55875,55876,55878,55880,55882,55884,55886,55888,55890,55892],{"class":35,"line":275},[33,55877,53789],{"class":59},[33,55879,52989],{"class":52945},[33,55881,16578],{"class":3632},[33,55883,64],{"class":59},[33,55885,53036],{"class":117},[33,55887,53016],{"class":3632},[33,55889,64],{"class":59},[33,55891,53043],{"class":117},[33,55893,52952],{"class":59},[33,55895,55896,55898,55900,55902,55904],{"class":35,"line":392},[33,55897,53789],{"class":59},[33,55899,53052],{"class":52945},[33,55901,53055],{"class":59},[33,55903,53052],{"class":52945},[33,55905,52952],{"class":59},[33,55907,55908,55910,55912],{"class":35,"line":406},[33,55909,53430],{"class":59},[33,55911,52979],{"class":52945},[33,55913,52952],{"class":59},[33,55915,55916],{"class":35,"line":418},[33,55917,127],{"emptyLinePlaceholder":126},[33,55919,55920,55922,55924],{"class":35,"line":425},[33,55921,2726],{"class":59},[33,55923,53445],{"class":52945},[33,55925,52952],{"class":59},[33,55927,55928,55930,55933,55935,55937,55939,55941,55943,55945,55948,55950,55953,55956,55958,55961],{"class":35,"line":1147},[33,55929,53789],{"class":59},[33,55931,55932],{"class":52945},"textarea",[33,55934,16578],{"class":3632},[33,55936,64],{"class":59},[33,55938,9312],{"class":117},[33,55940,16617],{"class":3632},[33,55942,64],{"class":59},[33,55944,9312],{"class":117},[33,55946,55947],{"class":3632}," cols",[33,55949,64],{"class":59},[33,55951,55952],{"class":117},"\"30\"",[33,55954,55955],{"class":3632}," rows",[33,55957,64],{"class":59},[33,55959,55960],{"class":117},"\"10\"",[33,55962,52952],{"class":59},[33,55964,55965],{"class":35,"line":1329},[33,55966,55967],{"class":59},"        用户注册协议\n",[33,55969,55970],{"class":35,"line":1341},[33,55971,55972],{"class":59},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[33,55974,55975],{"class":35,"line":1348},[33,55976,55977],{"class":59},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[33,55979,55980,55982,55984],{"class":35,"line":1529},[33,55981,53421],{"class":59},[33,55983,55932],{"class":52945},[33,55985,52952],{"class":59},[33,55987,55988,55990,55992],{"class":35,"line":1546},[33,55989,53789],{"class":59},[33,55991,55361],{"class":52945},[33,55993,52952],{"class":59},[33,55995,55996,55998,56000,56002,56004,56007,56009,56012,56014],{"class":35,"line":1551},[33,55997,53789],{"class":59},[33,55999,55531],{"class":52945},[33,56001,55131],{"class":3632},[33,56003,64],{"class":59},[33,56005,56006],{"class":117},"\"btn\"",[33,56008,55534],{"class":3632},[33,56010,56011],{"class":59},">我已经阅读用户协议(5)\u003C\u002F",[33,56013,55531],{"class":52945},[33,56015,52952],{"class":59},[33,56017,56018,56020,56022],{"class":35,"line":1566},[33,56019,53789],{"class":59},[33,56021,53458],{"class":52945},[33,56023,52952],{"class":59},[33,56025,56026],{"class":35,"line":1578},[33,56027,56028],{"class":87},"    \u002F\u002F 1. 获取元素\n",[33,56030,56031,56033,56036,56038,56041,56044,56046,56049],{"class":35,"line":1583},[33,56032,12879],{"class":63},[33,56034,56035],{"class":39}," btn",[33,56037,15222],{"class":63},[33,56039,56040],{"class":59}," document.",[33,56042,56043],{"class":3632},"querySelector",[33,56045,109],{"class":59},[33,56047,56048],{"class":117},"'.btn'",[33,56050,157],{"class":59},[33,56052,56053],{"class":35,"line":3369},[33,56054,56055],{"class":87},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[33,56057,56058],{"class":35,"line":3396},[33,56059,56060],{"class":87},"    \u002F\u002F 2. 倒计时\n",[33,56062,56063,56065,56067,56069],{"class":35,"line":3401},[33,56064,53864],{"class":63},[33,56066,11097],{"class":59},[33,56068,64],{"class":63},[33,56070,56071],{"class":39}," 5\n",[33,56073,56074],{"class":35,"line":3418},[33,56075,56076],{"class":87},"    \u002F\u002F 2.1 开启定时器\n",[33,56078,56079,56081,56084,56086,56089,56091,56094],{"class":35,"line":3423},[33,56080,53864],{"class":63},[33,56082,56083],{"class":59}," n ",[33,56085,64],{"class":63},[33,56087,56088],{"class":3632}," setInterval",[33,56090,109],{"class":59},[33,56092,56093],{"class":63},"function",[33,56095,56096],{"class":59}," () {\n",[33,56098,56099,56102],{"class":35,"line":3428},[33,56100,56101],{"class":59},"      i",[33,56103,56104],{"class":63},"--\n",[33,56106,56107,56110,56112,56115,56117],{"class":35,"line":3433},[33,56108,56109],{"class":59},"      btn.innerHTML ",[33,56111,64],{"class":63},[33,56113,56114],{"class":117}," `我已经阅读用户协议(${",[33,56116,2259],{"class":59},[33,56118,56119],{"class":117},"})`\n",[33,56121,56122,56125,56128,56131,56133],{"class":35,"line":3447},[33,56123,56124],{"class":63},"      if",[33,56126,56127],{"class":59}," (i ",[33,56129,56130],{"class":63},"===",[33,56132,829],{"class":39},[33,56134,14100],{"class":59},[33,56136,56137,56140,56143],{"class":35,"line":3452},[33,56138,56139],{"class":3632},"        clearInterval",[33,56141,56142],{"class":59},"(n)  ",[33,56144,56145],{"class":87},"\u002F\u002F 关闭定时器\n",[33,56147,56148],{"class":35,"line":4243},[33,56149,56150],{"class":87},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[33,56152,56153,56156,56158],{"class":35,"line":4257},[33,56154,56155],{"class":59},"        btn.disabled ",[33,56157,64],{"class":63},[33,56159,56160],{"class":39}," false\n",[33,56162,56163,56166,56168],{"class":35,"line":4265},[33,56164,56165],{"class":59},"        btn.innerHTML ",[33,56167,64],{"class":63},[33,56169,56170],{"class":117}," '同意'\n",[33,56172,56173],{"class":35,"line":4270},[33,56174,54043],{"class":59},[33,56176,56177,56180,56182],{"class":35,"line":4276},[33,56178,56179],{"class":59},"    }, ",[33,56181,8070],{"class":39},[33,56183,157],{"class":59},[33,56185,56186],{"class":35,"line":4282},[33,56187,127],{"emptyLinePlaceholder":126},[33,56189,56190,56192,56194],{"class":35,"line":4287},[33,56191,54062],{"class":59},[33,56193,53458],{"class":52945},[33,56195,52952],{"class":59},[33,56197,56198,56200,56202],{"class":35,"line":9608},[33,56199,53430],{"class":59},[33,56201,53445],{"class":52945},[33,56203,52952],{"class":59},[33,56205,56206],{"class":35,"line":9632},[33,56207,127],{"emptyLinePlaceholder":126},[33,56209,56210,56212,56214],{"class":35,"line":9637},[33,56211,53430],{"class":59},[33,56213,52280],{"class":52945},[33,56215,52952],{"class":59},[19,56217,56218],{},"不要一直想着用死循环,避免死循环",[19,56220,56221,56224],{},[30,56222,56223],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23653,56226,56228],{"id":56227},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[162,56230,56231],{},[165,56232,56233],{},"法1",[23,56235,56237],{"className":52278,"code":56236,"language":52280,"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,56238,56239,56249,56263,56267,56275,56289,56309,56321,56329,56335,56346,56357,56361,56365,56372,56384,56388,56392,56399,56411,56425,56438,56452,56456,56460,56467,56478,56489,56500,56512,56524,56536,56540,56544,56552,56562,56575,56587,56600,56604,56608,56615,56625,56637,56649,56660,56671,56681,56693,56705,56709,56713,56722,56734,56746,56774,56787,56791,56795,56802,56813,56817,56825,56833,56837,56845,56859,56874,56898,56906,56921,56934,56942,56963,56975,56987,56999,57011,57023,57035,57047,57056,57064,57072,57080,57092,57115,57134,57153,57172,57191,57210,57229,57249,57253,57273,57292,57312,57333,57343,57360,57370,57380,57390,57395,57400,57405,57410,57435,57448,57452,57475,57479,57487,57495,57503,57507],{"__ignoreMap":28},[33,56240,56241,56243,56245,56247],{"class":35,"line":36},[33,56242,52942],{"class":59},[33,56244,52946],{"class":52945},[33,56246,52949],{"class":3632},[33,56248,52952],{"class":59},[33,56250,56251,56253,56255,56257,56259,56261],{"class":35,"line":43},[33,56252,2726],{"class":59},[33,56254,52280],{"class":52945},[33,56256,52961],{"class":3632},[33,56258,64],{"class":59},[33,56260,52966],{"class":117},[33,56262,52952],{"class":59},[33,56264,56265],{"class":35,"line":130},[33,56266,127],{"emptyLinePlaceholder":126},[33,56268,56269,56271,56273],{"class":35,"line":146},[33,56270,2726],{"class":59},[33,56272,52979],{"class":52945},[33,56274,52952],{"class":59},[33,56276,56277,56279,56281,56283,56285,56287],{"class":35,"line":267},[33,56278,53789],{"class":59},[33,56280,52989],{"class":52945},[33,56282,52992],{"class":3632},[33,56284,64],{"class":59},[33,56286,52997],{"class":117},[33,56288,52952],{"class":59},[33,56290,56291,56293,56295,56297,56299,56301,56303,56305,56307],{"class":35,"line":275},[33,56292,53789],{"class":59},[33,56294,52989],{"class":52945},[33,56296,16578],{"class":3632},[33,56298,64],{"class":59},[33,56300,53036],{"class":117},[33,56302,53016],{"class":3632},[33,56304,64],{"class":59},[33,56306,53043],{"class":117},[33,56308,52952],{"class":59},[33,56310,56311,56313,56315,56317,56319],{"class":35,"line":392},[33,56312,53789],{"class":59},[33,56314,53052],{"class":52945},[33,56316,53055],{"class":59},[33,56318,53052],{"class":52945},[33,56320,52952],{"class":59},[33,56322,56323,56325,56327],{"class":35,"line":406},[33,56324,53789],{"class":59},[33,56326,1729],{"class":52945},[33,56328,52952],{"class":59},[33,56330,56331,56333],{"class":35,"line":418},[33,56332,8063],{"class":52945},[33,56334,17228],{"class":59},[33,56336,56337,56340,56342,56344],{"class":35,"line":425},[33,56338,56339],{"class":39},"      padding",[33,56341,53082],{"class":59},[33,56343,2010],{"class":39},[33,56345,2976],{"class":59},[33,56347,56348,56351,56353,56355],{"class":35,"line":1147},[33,56349,56350],{"class":39},"      margin",[33,56352,53082],{"class":59},[33,56354,2010],{"class":39},[33,56356,2976],{"class":59},[33,56358,56359],{"class":35,"line":1329},[33,56360,3855],{"class":59},[33,56362,56363],{"class":35,"line":1341},[33,56364,127],{"emptyLinePlaceholder":126},[33,56366,56367,56370],{"class":35,"line":1348},[33,56368,56369],{"class":52945},"    li",[33,56371,17228],{"class":59},[33,56373,56374,56377,56379,56382],{"class":35,"line":1529},[33,56375,56376],{"class":39},"      list-style",[33,56378,53082],{"class":59},[33,56380,56381],{"class":39},"none",[33,56383,2976],{"class":59},[33,56385,56386],{"class":35,"line":1546},[33,56387,3855],{"class":59},[33,56389,56390],{"class":35,"line":1551},[33,56391,127],{"emptyLinePlaceholder":126},[33,56393,56394,56397],{"class":35,"line":1566},[33,56395,56396],{"class":3632},"    .box",[33,56398,17228],{"class":59},[33,56400,56401,56404,56406,56409],{"class":35,"line":1578},[33,56402,56403],{"class":39},"      position",[33,56405,53082],{"class":59},[33,56407,56408],{"class":39},"relative",[33,56410,2976],{"class":59},[33,56412,56413,56416,56418,56421,56423],{"class":35,"line":1583},[33,56414,56415],{"class":39},"      width",[33,56417,53082],{"class":59},[33,56419,56420],{"class":39},"976",[33,56422,53137],{"class":63},[33,56424,2976],{"class":59},[33,56426,56427,56430,56432,56434,56436],{"class":35,"line":3369},[33,56428,56429],{"class":39},"      height",[33,56431,53082],{"class":59},[33,56433,3221],{"class":39},[33,56435,53137],{"class":63},[33,56437,2976],{"class":59},[33,56439,56440,56442,56444,56446,56448,56450],{"class":35,"line":3396},[33,56441,56350],{"class":39},[33,56443,53082],{"class":59},[33,56445,2129],{"class":39},[33,56447,53137],{"class":63},[33,56449,53201],{"class":39},[33,56451,2976],{"class":59},[33,56453,56454],{"class":35,"line":3401},[33,56455,3855],{"class":59},[33,56457,56458],{"class":35,"line":3418},[33,56459,127],{"emptyLinePlaceholder":126},[33,56461,56462,56465],{"class":35,"line":3423},[33,56463,56464],{"class":3632},"    .slider-footer",[33,56466,17228],{"class":59},[33,56468,56469,56471,56473,56476],{"class":35,"line":3428},[33,56470,56403],{"class":39},[33,56472,53082],{"class":59},[33,56474,56475],{"class":39},"absolute",[33,56477,2976],{"class":59},[33,56479,56480,56483,56485,56487],{"class":35,"line":3433},[33,56481,56482],{"class":39},"      left",[33,56484,53082],{"class":59},[33,56486,2010],{"class":39},[33,56488,2976],{"class":59},[33,56490,56491,56494,56496,56498],{"class":35,"line":3447},[33,56492,56493],{"class":39},"      bottom",[33,56495,53082],{"class":59},[33,56497,2010],{"class":39},[33,56499,2976],{"class":59},[33,56501,56502,56504,56506,56508,56510],{"class":35,"line":3452},[33,56503,56415],{"class":39},[33,56505,53082],{"class":59},[33,56507,2129],{"class":39},[33,56509,2146],{"class":63},[33,56511,2976],{"class":59},[33,56513,56514,56516,56518,56520,56522],{"class":35,"line":4243},[33,56515,56429],{"class":39},[33,56517,53082],{"class":59},[33,56519,2392],{"class":39},[33,56521,2146],{"class":63},[33,56523,2976],{"class":59},[33,56525,56526,56529,56531,56534],{"class":35,"line":4257},[33,56527,56528],{"class":39},"      background-color",[33,56530,53082],{"class":59},[33,56532,56533],{"class":39},"skyblue",[33,56535,2976],{"class":59},[33,56537,56538],{"class":35,"line":4265},[33,56539,3855],{"class":59},[33,56541,56542],{"class":35,"line":4270},[33,56543,127],{"emptyLinePlaceholder":126},[33,56545,56546,56548,56550],{"class":35,"line":4276},[33,56547,56464],{"class":3632},[33,56549,8485],{"class":52945},[33,56551,17228],{"class":59},[33,56553,56554,56556,56558,56560],{"class":35,"line":4282},[33,56555,56403],{"class":39},[33,56557,53082],{"class":59},[33,56559,56475],{"class":39},[33,56561,2976],{"class":59},[33,56563,56564,56567,56569,56571,56573],{"class":35,"line":4287},[33,56565,56566],{"class":39},"      font-size",[33,56568,53082],{"class":59},[33,56570,2717],{"class":39},[33,56572,53137],{"class":63},[33,56574,2976],{"class":59},[33,56576,56577,56579,56581,56583,56585],{"class":35,"line":9608},[33,56578,56482],{"class":39},[33,56580,53082],{"class":59},[33,56582,2517],{"class":39},[33,56584,53137],{"class":63},[33,56586,2976],{"class":59},[33,56588,56589,56592,56594,56596,56598],{"class":35,"line":9632},[33,56590,56591],{"class":39},"      top",[33,56593,53082],{"class":59},[33,56595,2137],{"class":39},[33,56597,53137],{"class":63},[33,56599,2976],{"class":59},[33,56601,56602],{"class":35,"line":9637},[33,56603,3855],{"class":59},[33,56605,56606],{"class":35,"line":9643},[33,56607,127],{"emptyLinePlaceholder":126},[33,56609,56610,56613],{"class":35,"line":9670},[33,56611,56612],{"class":52945},"    ul",[33,56614,17228],{"class":59},[33,56616,56617,56619,56621,56623],{"class":35,"line":9675},[33,56618,56403],{"class":39},[33,56620,53082],{"class":59},[33,56622,56475],{"class":39},[33,56624,2976],{"class":59},[33,56626,56627,56629,56631,56633,56635],{"class":35,"line":9681},[33,56628,56591],{"class":39},[33,56630,53082],{"class":59},[33,56632,2598],{"class":39},[33,56634,53137],{"class":63},[33,56636,2976],{"class":59},[33,56638,56639,56641,56643,56645,56647],{"class":35,"line":9693},[33,56640,56482],{"class":39},[33,56642,53082],{"class":59},[33,56644,2517],{"class":39},[33,56646,53137],{"class":63},[33,56648,2976],{"class":59},[33,56650,56651,56654,56656,56658],{"class":35,"line":9705},[33,56652,56653],{"class":39},"      display",[33,56655,53082],{"class":59},[33,56657,53122],{"class":39},[33,56659,2976],{"class":59},[33,56661,56662,56665,56667,56669],{"class":35,"line":9717},[33,56663,56664],{"class":39},"      justify-content",[33,56666,53082],{"class":59},[33,56668,53313],{"class":39},[33,56670,2976],{"class":59},[33,56672,56673,56675,56677,56679],{"class":35,"line":11375},[33,56674,56403],{"class":39},[33,56676,53082],{"class":59},[33,56678,56475],{"class":39},[33,56680,2976],{"class":59},[33,56682,56683,56685,56687,56689,56691],{"class":35,"line":11400},[33,56684,56415],{"class":39},[33,56686,53082],{"class":59},[33,56688,5654],{"class":39},[33,56690,53137],{"class":63},[33,56692,2976],{"class":59},[33,56694,56695,56697,56699,56701,56703],{"class":35,"line":11423},[33,56696,56429],{"class":39},[33,56698,53082],{"class":59},[33,56700,2517],{"class":39},[33,56702,53137],{"class":63},[33,56704,2976],{"class":59},[33,56706,56707],{"class":35,"line":11447},[33,56708,3855],{"class":59},[33,56710,56711],{"class":35,"line":11452},[33,56712,127],{"emptyLinePlaceholder":126},[33,56714,56715,56717,56720],{"class":35,"line":11457},[33,56716,56612],{"class":52945},[33,56718,56719],{"class":52945}," li",[33,56721,17228],{"class":59},[33,56723,56724,56726,56728,56730,56732],{"class":35,"line":11462},[33,56725,56415],{"class":39},[33,56727,53082],{"class":59},[33,56729,2517],{"class":39},[33,56731,53137],{"class":63},[33,56733,2976],{"class":59},[33,56735,56736,56738,56740,56742,56744],{"class":35,"line":11471},[33,56737,56429],{"class":39},[33,56739,53082],{"class":59},[33,56741,2517],{"class":39},[33,56743,53137],{"class":63},[33,56745,2976],{"class":59},[33,56747,56748,56750,56752,56755,56757,56759,56761,56763,56765,56767,56769,56772],{"class":35,"line":11476},[33,56749,56528],{"class":39},[33,56751,53082],{"class":59},[33,56753,56754],{"class":39},"rgba",[33,56756,109],{"class":59},[33,56758,2010],{"class":39},[33,56760,14093],{"class":59},[33,56762,2010],{"class":39},[33,56764,14093],{"class":59},[33,56766,2010],{"class":39},[33,56768,14093],{"class":59},[33,56770,56771],{"class":39},".4",[33,56773,4385],{"class":59},[33,56775,56776,56779,56781,56783,56785],{"class":35,"line":11482},[33,56777,56778],{"class":39},"      border-radius",[33,56780,53082],{"class":59},[33,56782,2264],{"class":39},[33,56784,53137],{"class":63},[33,56786,2976],{"class":59},[33,56788,56789],{"class":35,"line":11503},[33,56790,3855],{"class":59},[33,56792,56793],{"class":35,"line":11509},[33,56794,127],{"emptyLinePlaceholder":126},[33,56796,56797,56800],{"class":35,"line":11523},[33,56798,56799],{"class":3632},"    .activate",[33,56801,17228],{"class":59},[33,56803,56804,56806,56808,56811],{"class":35,"line":11529},[33,56805,56528],{"class":39},[33,56807,53082],{"class":59},[33,56809,56810],{"class":39},"#f7f7f7",[33,56812,2976],{"class":59},[33,56814,56815],{"class":35,"line":11556},[33,56816,3855],{"class":59},[33,56818,56819,56821,56823],{"class":35,"line":11565},[33,56820,54062],{"class":59},[33,56822,1729],{"class":52945},[33,56824,52952],{"class":59},[33,56826,56827,56829,56831],{"class":35,"line":11571},[33,56828,53430],{"class":59},[33,56830,52979],{"class":52945},[33,56832,52952],{"class":59},[33,56834,56835],{"class":35,"line":11579},[33,56836,127],{"emptyLinePlaceholder":126},[33,56838,56839,56841,56843],{"class":35,"line":11584},[33,56840,2726],{"class":59},[33,56842,53445],{"class":52945},[33,56844,52952],{"class":59},[33,56846,56847,56849,56851,56853,56855,56857],{"class":35,"line":18259},[33,56848,53789],{"class":59},[33,56850,53256],{"class":52945},[33,56852,55131],{"class":3632},[33,56854,64],{"class":59},[33,56856,55136],{"class":117},[33,56858,52952],{"class":59},[33,56860,56861,56863,56865,56867,56869,56872],{"class":35,"line":18265},[33,56862,52986],{"class":59},[33,56864,53256],{"class":52945},[33,56866,55131],{"class":3632},[33,56868,64],{"class":59},[33,56870,56871],{"class":117},"\"slider-wrapper\"",[33,56873,52952],{"class":59},[33,56875,56876,56879,56881,56884,56886,56889,56892,56894,56896],{"class":35,"line":18288},[33,56877,56878],{"class":59},"      \u003C",[33,56880,3145],{"class":52945},[33,56882,56883],{"class":3632}," src",[33,56885,64],{"class":59},[33,56887,56888],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,56890,56891],{"class":3632}," alt",[33,56893,64],{"class":59},[33,56895,9312],{"class":117},[33,56897,52952],{"class":59},[33,56899,56900,56902,56904],{"class":35,"line":18294},[33,56901,53421],{"class":59},[33,56903,53256],{"class":52945},[33,56905,52952],{"class":59},[33,56907,56908,56910,56912,56914,56916,56919],{"class":35,"line":18317},[33,56909,52986],{"class":59},[33,56911,53256],{"class":52945},[33,56913,55131],{"class":3632},[33,56915,64],{"class":59},[33,56917,56918],{"class":117},"\"slider-footer\"",[33,56920,52952],{"class":59},[33,56922,56923,56925,56927,56930,56932],{"class":35,"line":18331},[33,56924,56878],{"class":59},[33,56926,19],{"class":52945},[33,56928,56929],{"class":59},">对人类来说会不会太超前了?\u003C\u002F",[33,56931,19],{"class":52945},[33,56933,52952],{"class":59},[33,56935,56936,56938,56940],{"class":35,"line":18351},[33,56937,56878],{"class":59},[33,56939,2822],{"class":52945},[33,56941,52952],{"class":59},[33,56943,56944,56947,56949,56951,56953,56956,56959,56961],{"class":35,"line":18357},[33,56945,56946],{"class":59},"        \u003C",[33,56948,165],{"class":52945},[33,56950,55131],{"class":3632},[33,56952,64],{"class":59},[33,56954,56955],{"class":117},"\"activate\"",[33,56957,56958],{"class":59},">\u003C\u002F",[33,56960,165],{"class":52945},[33,56962,52952],{"class":59},[33,56964,56965,56967,56969,56971,56973],{"class":35,"line":18368},[33,56966,56946],{"class":59},[33,56968,165],{"class":52945},[33,56970,56958],{"class":59},[33,56972,165],{"class":52945},[33,56974,52952],{"class":59},[33,56976,56977,56979,56981,56983,56985],{"class":35,"line":18391},[33,56978,56946],{"class":59},[33,56980,165],{"class":52945},[33,56982,56958],{"class":59},[33,56984,165],{"class":52945},[33,56986,52952],{"class":59},[33,56988,56989,56991,56993,56995,56997],{"class":35,"line":18413},[33,56990,56946],{"class":59},[33,56992,165],{"class":52945},[33,56994,56958],{"class":59},[33,56996,165],{"class":52945},[33,56998,52952],{"class":59},[33,57000,57001,57003,57005,57007,57009],{"class":35,"line":18418},[33,57002,56946],{"class":59},[33,57004,165],{"class":52945},[33,57006,56958],{"class":59},[33,57008,165],{"class":52945},[33,57010,52952],{"class":59},[33,57012,57013,57015,57017,57019,57021],{"class":35,"line":18424},[33,57014,56946],{"class":59},[33,57016,165],{"class":52945},[33,57018,56958],{"class":59},[33,57020,165],{"class":52945},[33,57022,52952],{"class":59},[33,57024,57025,57027,57029,57031,57033],{"class":35,"line":18438},[33,57026,56946],{"class":59},[33,57028,165],{"class":52945},[33,57030,56958],{"class":59},[33,57032,165],{"class":52945},[33,57034,52952],{"class":59},[33,57036,57037,57039,57041,57043,57045],{"class":35,"line":18451},[33,57038,56946],{"class":59},[33,57040,165],{"class":52945},[33,57042,56958],{"class":59},[33,57044,165],{"class":52945},[33,57046,52952],{"class":59},[33,57048,57049,57052,57054],{"class":35,"line":18456},[33,57050,57051],{"class":59},"      \u003C\u002F",[33,57053,2822],{"class":52945},[33,57055,52952],{"class":59},[33,57057,57058,57060,57062],{"class":35,"line":18470},[33,57059,53421],{"class":59},[33,57061,53256],{"class":52945},[33,57063,52952],{"class":59},[33,57065,57066,57068,57070],{"class":35,"line":18475},[33,57067,54062],{"class":59},[33,57069,53256],{"class":52945},[33,57071,52952],{"class":59},[33,57073,57074,57076,57078],{"class":35,"line":18481},[33,57075,53789],{"class":59},[33,57077,53458],{"class":52945},[33,57079,52952],{"class":59},[33,57081,57082,57084,57087,57089],{"class":35,"line":18486},[33,57083,12879],{"class":63},[33,57085,57086],{"class":39}," arrImage",[33,57088,15222],{"class":63},[33,57090,57091],{"class":59}," [\n",[33,57093,57094,57097,57100,57103,57106,57109,57112],{"class":35,"line":18500},[33,57095,57096],{"class":59},"      { url: ",[33,57098,57099],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[33,57101,57102],{"class":59},", title: ",[33,57104,57105],{"class":117},"'对人类来说会不会太超前了?'",[33,57107,57108],{"class":59},", color: ",[33,57110,57111],{"class":117},"'rgba(100,67,68)'",[33,57113,57114],{"class":59}," },\n",[33,57116,57117,57119,57122,57124,57127,57129,57132],{"class":35,"line":18505},[33,57118,57096],{"class":59},[33,57120,57121],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[33,57123,57102],{"class":59},[33,57125,57126],{"class":117},"'开启剑与雪的黑暗传说!'",[33,57128,57108],{"class":59},[33,57130,57131],{"class":117},"'rgba(43,35,26)'",[33,57133,57114],{"class":59},[33,57135,57136,57138,57141,57143,57146,57148,57151],{"class":35,"line":18510},[33,57137,57096],{"class":59},[33,57139,57140],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[33,57142,57102],{"class":59},[33,57144,57145],{"class":117},"'真正的jo厨出现了!'",[33,57147,57108],{"class":59},[33,57149,57150],{"class":117},"'rgba(36,31,33)'",[33,57152,57114],{"class":59},[33,57154,57155,57157,57160,57162,57165,57167,57170],{"class":35,"line":18524},[33,57156,57096],{"class":59},[33,57158,57159],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[33,57161,57102],{"class":59},[33,57163,57164],{"class":117},"'李玉刚:让世界通过b站看到东方大国文化'",[33,57166,57108],{"class":59},[33,57168,57169],{"class":117},"'rgba(139,98,66)'",[33,57171,57114],{"class":59},[33,57173,57174,57176,57179,57181,57184,57186,57189],{"class":35,"line":18536},[33,57175,57096],{"class":59},[33,57177,57178],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[33,57180,57102],{"class":59},[33,57182,57183],{"class":117},"'快来分享你的寒假日常吧'",[33,57185,57108],{"class":59},[33,57187,57188],{"class":117},"'rgba(67,90,92)'",[33,57190,57114],{"class":59},[33,57192,57193,57195,57198,57200,57203,57205,57208],{"class":35,"line":18541},[33,57194,57096],{"class":59},[33,57196,57197],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[33,57199,57102],{"class":59},[33,57201,57202],{"class":117},"'哔哩哔哩小年YEAR'",[33,57204,57108],{"class":59},[33,57206,57207],{"class":117},"'rgba(166,131,143)'",[33,57209,57114],{"class":59},[33,57211,57212,57214,57217,57219,57222,57224,57227],{"class":35,"line":18554},[33,57213,57096],{"class":59},[33,57215,57216],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[33,57218,57102],{"class":59},[33,57220,57221],{"class":117},"'一站式解决你的电脑配置问题'",[33,57223,57108],{"class":59},[33,57225,57226],{"class":117},"'rgba(53,29,25)'",[33,57228,57114],{"class":59},[33,57230,57231,57233,57236,57238,57241,57243,57246],{"class":35,"line":18559},[33,57232,57096],{"class":59},[33,57234,57235],{"class":117},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[33,57237,57102],{"class":59},[33,57239,57240],{"class":117},"'谁不想和小猫咪贴贴呢?'",[33,57242,57108],{"class":59},[33,57244,57245],{"class":117},"'rgba(99,72,114)'",[33,57247,57248],{"class":59}," }\n",[33,57250,57251],{"class":35,"line":18564},[33,57252,54754],{"class":59},[33,57254,57255,57257,57260,57262,57264,57266,57268,57271],{"class":35,"line":18569},[33,57256,12879],{"class":63},[33,57258,57259],{"class":39}," img",[33,57261,15222],{"class":63},[33,57263,56040],{"class":59},[33,57265,56043],{"class":3632},[33,57267,109],{"class":59},[33,57269,57270],{"class":117},"'.slider-wrapper img'",[33,57272,157],{"class":59},[33,57274,57275,57277,57279,57281,57283,57285,57287,57290],{"class":35,"line":18582},[33,57276,12879],{"class":63},[33,57278,8485],{"class":39},[33,57280,15222],{"class":63},[33,57282,56040],{"class":59},[33,57284,56043],{"class":3632},[33,57286,109],{"class":59},[33,57288,57289],{"class":117},"'.slider-footer p'",[33,57291,157],{"class":59},[33,57293,57294,57296,57299,57301,57303,57305,57307,57310],{"class":35,"line":18587},[33,57295,12879],{"class":63},[33,57297,57298],{"class":39}," color",[33,57300,15222],{"class":63},[33,57302,56040],{"class":59},[33,57304,56043],{"class":3632},[33,57306,109],{"class":59},[33,57308,57309],{"class":117},"'.slider-footer'",[33,57311,157],{"class":59},[33,57313,57314,57316,57319,57321,57323,57326,57328,57331],{"class":35,"line":34280},[33,57315,12879],{"class":63},[33,57317,57318],{"class":39}," lis",[33,57320,15222],{"class":63},[33,57322,56040],{"class":59},[33,57324,57325],{"class":3632},"querySelectorAll",[33,57327,109],{"class":59},[33,57329,57330],{"class":117},"'.slider-footer ul li'",[33,57332,157],{"class":59},[33,57334,57335,57337,57339,57341],{"class":35,"line":34286},[33,57336,53864],{"class":63},[33,57338,11097],{"class":59},[33,57340,64],{"class":63},[33,57342,1434],{"class":39},[33,57344,57345,57347,57350,57352,57354,57356,57358],{"class":35,"line":34292},[33,57346,53864],{"class":63},[33,57348,57349],{"class":59}," timer ",[33,57351,64],{"class":63},[33,57353,56088],{"class":3632},[33,57355,109],{"class":59},[33,57357,56093],{"class":63},[33,57359,56096],{"class":59},[33,57361,57362,57365,57367],{"class":35,"line":34298},[33,57363,57364],{"class":59},"      img.src ",[33,57366,64],{"class":63},[33,57368,57369],{"class":59}," arrImage[i].url\n",[33,57371,57372,57375,57377],{"class":35,"line":34304},[33,57373,57374],{"class":59},"      p.innerHTML ",[33,57376,64],{"class":63},[33,57378,57379],{"class":59}," arrImage[i].title\n",[33,57381,57382,57385,57387],{"class":35,"line":34315},[33,57383,57384],{"class":59},"      color.style.backgroundColor ",[33,57386,64],{"class":63},[33,57388,57389],{"class":59}," arrImage[i].color\n",[33,57391,57392],{"class":35,"line":34321},[33,57393,57394],{"class":87},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[33,57396,57397],{"class":35,"line":34341},[33,57398,57399],{"class":87},"      \u002F\u002F li.classList.add('activate')\n",[33,57401,57402],{"class":35,"line":34347},[33,57403,57404],{"class":87},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[33,57406,57407],{"class":35,"line":34358},[33,57408,57409],{"class":87},"      \u002F\u002F lis[i].classList.remove('activate')\n",[33,57411,57412,57415,57417,57419,57422,57425,57428,57430,57433],{"class":35,"line":34364},[33,57413,57414],{"class":59},"      document.",[33,57416,56043],{"class":3632},[33,57418,109],{"class":59},[33,57420,57421],{"class":117},"'.activate'",[33,57423,57424],{"class":59},")?.classList.",[33,57426,57427],{"class":3632},"toggle",[33,57429,109],{"class":59},[33,57431,57432],{"class":117},"'activate'",[33,57434,157],{"class":59},[33,57436,57437,57440,57442,57444,57446],{"class":35,"line":34370},[33,57438,57439],{"class":59},"      lis[i].classList.",[33,57441,6995],{"class":3632},[33,57443,109],{"class":59},[33,57445,57432],{"class":117},[33,57447,157],{"class":59},[33,57449,57450],{"class":35,"line":34376},[33,57451,127],{"emptyLinePlaceholder":126},[33,57453,57454,57457,57459,57461,57463,57465,57467,57469,57472],{"class":35,"line":34382},[33,57455,57456],{"class":59},"      i ",[33,57458,64],{"class":63},[33,57460,56127],{"class":59},[33,57462,2298],{"class":63},[33,57464,26774],{"class":39},[33,57466,15372],{"class":59},[33,57468,2146],{"class":63},[33,57470,57471],{"class":59}," arrImage.",[33,57473,57474],{"class":39},"length\n",[33,57476,57477],{"class":35,"line":34388},[33,57478,127],{"emptyLinePlaceholder":126},[33,57480,57481,57483,57485],{"class":35,"line":34394},[33,57482,56179],{"class":59},[33,57484,8070],{"class":39},[33,57486,157],{"class":59},[33,57488,57489,57491,57493],{"class":35,"line":34400},[33,57490,54062],{"class":59},[33,57492,53458],{"class":52945},[33,57494,52952],{"class":59},[33,57496,57497,57499,57501],{"class":35,"line":34420},[33,57498,53430],{"class":59},[33,57500,53445],{"class":52945},[33,57502,52952],{"class":59},[33,57504,57505],{"class":35,"line":34426},[33,57506,127],{"emptyLinePlaceholder":126},[33,57508,57509,57511,57513],{"class":35,"line":34442},[33,57510,53430],{"class":59},[33,57512,52280],{"class":52945},[33,57514,52952],{"class":59},[19,57516,57517],{},[3145,57518],{"alt":28,"src":57519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57521,57522],{},"?.就是短路保护,确保输出正常进行",[19,57524,57525],{},"不要忘记取余%,有时候可以用",[19,57527,57528],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[162,57530,57531],{"start":43},[165,57532,57533],{},"法2",[23,57535,57537],{"className":52278,"code":57536,"language":52280,"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,57538,57539,57549,57563,57567,57575,57589,57609,57621,57629,57635,57645,57655,57659,57663,57669,57679,57683,57687,57693,57703,57715,57727,57741,57745,57749,57755,57765,57775,57785,57797,57809,57819,57823,57827,57835,57845,57857,57869,57881,57885,57889,57895,57905,57917,57929,57939,57949,57959,57971,57983,57987,57991,57999,58011,58023,58049,58061,58065,58069,58075,58085,58089,58097,58105,58109,58117,58131,58145,58165,58173,58187,58199,58207,58225,58237,58249,58261,58273,58285,58297,58309,58317,58325,58333,58341,58352,58368,58384,58400,58416,58432,58448,58464,58480,58484,58489,58507,58525,58535,58540,58545,58556,58562,58577,58586,58590,58595,58604,58609,58618,58623,58628,58633,58656,58686,58690,58698,58702,58710,58718,58722],{"__ignoreMap":28},[33,57540,57541,57543,57545,57547],{"class":35,"line":36},[33,57542,52942],{"class":59},[33,57544,52946],{"class":52945},[33,57546,52949],{"class":3632},[33,57548,52952],{"class":59},[33,57550,57551,57553,57555,57557,57559,57561],{"class":35,"line":43},[33,57552,2726],{"class":59},[33,57554,52280],{"class":52945},[33,57556,52961],{"class":3632},[33,57558,64],{"class":59},[33,57560,52966],{"class":117},[33,57562,52952],{"class":59},[33,57564,57565],{"class":35,"line":130},[33,57566,127],{"emptyLinePlaceholder":126},[33,57568,57569,57571,57573],{"class":35,"line":146},[33,57570,2726],{"class":59},[33,57572,52979],{"class":52945},[33,57574,52952],{"class":59},[33,57576,57577,57579,57581,57583,57585,57587],{"class":35,"line":267},[33,57578,53789],{"class":59},[33,57580,52989],{"class":52945},[33,57582,52992],{"class":3632},[33,57584,64],{"class":59},[33,57586,52997],{"class":117},[33,57588,52952],{"class":59},[33,57590,57591,57593,57595,57597,57599,57601,57603,57605,57607],{"class":35,"line":275},[33,57592,53789],{"class":59},[33,57594,52989],{"class":52945},[33,57596,16578],{"class":3632},[33,57598,64],{"class":59},[33,57600,53036],{"class":117},[33,57602,53016],{"class":3632},[33,57604,64],{"class":59},[33,57606,53043],{"class":117},[33,57608,52952],{"class":59},[33,57610,57611,57613,57615,57617,57619],{"class":35,"line":392},[33,57612,53789],{"class":59},[33,57614,53052],{"class":52945},[33,57616,53055],{"class":59},[33,57618,53052],{"class":52945},[33,57620,52952],{"class":59},[33,57622,57623,57625,57627],{"class":35,"line":406},[33,57624,53789],{"class":59},[33,57626,1729],{"class":52945},[33,57628,52952],{"class":59},[33,57630,57631,57633],{"class":35,"line":418},[33,57632,8063],{"class":52945},[33,57634,17228],{"class":59},[33,57636,57637,57639,57641,57643],{"class":35,"line":425},[33,57638,56339],{"class":39},[33,57640,53082],{"class":59},[33,57642,2010],{"class":39},[33,57644,2976],{"class":59},[33,57646,57647,57649,57651,57653],{"class":35,"line":1147},[33,57648,56350],{"class":39},[33,57650,53082],{"class":59},[33,57652,2010],{"class":39},[33,57654,2976],{"class":59},[33,57656,57657],{"class":35,"line":1329},[33,57658,3855],{"class":59},[33,57660,57661],{"class":35,"line":1341},[33,57662,127],{"emptyLinePlaceholder":126},[33,57664,57665,57667],{"class":35,"line":1348},[33,57666,56369],{"class":52945},[33,57668,17228],{"class":59},[33,57670,57671,57673,57675,57677],{"class":35,"line":1529},[33,57672,56376],{"class":39},[33,57674,53082],{"class":59},[33,57676,56381],{"class":39},[33,57678,2976],{"class":59},[33,57680,57681],{"class":35,"line":1546},[33,57682,3855],{"class":59},[33,57684,57685],{"class":35,"line":1551},[33,57686,127],{"emptyLinePlaceholder":126},[33,57688,57689,57691],{"class":35,"line":1566},[33,57690,56396],{"class":3632},[33,57692,17228],{"class":59},[33,57694,57695,57697,57699,57701],{"class":35,"line":1578},[33,57696,56403],{"class":39},[33,57698,53082],{"class":59},[33,57700,56408],{"class":39},[33,57702,2976],{"class":59},[33,57704,57705,57707,57709,57711,57713],{"class":35,"line":1583},[33,57706,56415],{"class":39},[33,57708,53082],{"class":59},[33,57710,56420],{"class":39},[33,57712,53137],{"class":63},[33,57714,2976],{"class":59},[33,57716,57717,57719,57721,57723,57725],{"class":35,"line":3369},[33,57718,56429],{"class":39},[33,57720,53082],{"class":59},[33,57722,3221],{"class":39},[33,57724,53137],{"class":63},[33,57726,2976],{"class":59},[33,57728,57729,57731,57733,57735,57737,57739],{"class":35,"line":3396},[33,57730,56350],{"class":39},[33,57732,53082],{"class":59},[33,57734,2129],{"class":39},[33,57736,53137],{"class":63},[33,57738,53201],{"class":39},[33,57740,2976],{"class":59},[33,57742,57743],{"class":35,"line":3401},[33,57744,3855],{"class":59},[33,57746,57747],{"class":35,"line":3418},[33,57748,127],{"emptyLinePlaceholder":126},[33,57750,57751,57753],{"class":35,"line":3423},[33,57752,56464],{"class":3632},[33,57754,17228],{"class":59},[33,57756,57757,57759,57761,57763],{"class":35,"line":3428},[33,57758,56403],{"class":39},[33,57760,53082],{"class":59},[33,57762,56475],{"class":39},[33,57764,2976],{"class":59},[33,57766,57767,57769,57771,57773],{"class":35,"line":3433},[33,57768,56482],{"class":39},[33,57770,53082],{"class":59},[33,57772,2010],{"class":39},[33,57774,2976],{"class":59},[33,57776,57777,57779,57781,57783],{"class":35,"line":3447},[33,57778,56493],{"class":39},[33,57780,53082],{"class":59},[33,57782,2010],{"class":39},[33,57784,2976],{"class":59},[33,57786,57787,57789,57791,57793,57795],{"class":35,"line":3452},[33,57788,56415],{"class":39},[33,57790,53082],{"class":59},[33,57792,2129],{"class":39},[33,57794,2146],{"class":63},[33,57796,2976],{"class":59},[33,57798,57799,57801,57803,57805,57807],{"class":35,"line":4243},[33,57800,56429],{"class":39},[33,57802,53082],{"class":59},[33,57804,2392],{"class":39},[33,57806,2146],{"class":63},[33,57808,2976],{"class":59},[33,57810,57811,57813,57815,57817],{"class":35,"line":4257},[33,57812,56528],{"class":39},[33,57814,53082],{"class":59},[33,57816,56533],{"class":39},[33,57818,2976],{"class":59},[33,57820,57821],{"class":35,"line":4265},[33,57822,3855],{"class":59},[33,57824,57825],{"class":35,"line":4270},[33,57826,127],{"emptyLinePlaceholder":126},[33,57828,57829,57831,57833],{"class":35,"line":4276},[33,57830,56464],{"class":3632},[33,57832,8485],{"class":52945},[33,57834,17228],{"class":59},[33,57836,57837,57839,57841,57843],{"class":35,"line":4282},[33,57838,56403],{"class":39},[33,57840,53082],{"class":59},[33,57842,56475],{"class":39},[33,57844,2976],{"class":59},[33,57846,57847,57849,57851,57853,57855],{"class":35,"line":4287},[33,57848,56566],{"class":39},[33,57850,53082],{"class":59},[33,57852,2717],{"class":39},[33,57854,53137],{"class":63},[33,57856,2976],{"class":59},[33,57858,57859,57861,57863,57865,57867],{"class":35,"line":9608},[33,57860,56482],{"class":39},[33,57862,53082],{"class":59},[33,57864,2517],{"class":39},[33,57866,53137],{"class":63},[33,57868,2976],{"class":59},[33,57870,57871,57873,57875,57877,57879],{"class":35,"line":9632},[33,57872,56591],{"class":39},[33,57874,53082],{"class":59},[33,57876,2137],{"class":39},[33,57878,53137],{"class":63},[33,57880,2976],{"class":59},[33,57882,57883],{"class":35,"line":9637},[33,57884,3855],{"class":59},[33,57886,57887],{"class":35,"line":9643},[33,57888,127],{"emptyLinePlaceholder":126},[33,57890,57891,57893],{"class":35,"line":9670},[33,57892,56612],{"class":52945},[33,57894,17228],{"class":59},[33,57896,57897,57899,57901,57903],{"class":35,"line":9675},[33,57898,56403],{"class":39},[33,57900,53082],{"class":59},[33,57902,56475],{"class":39},[33,57904,2976],{"class":59},[33,57906,57907,57909,57911,57913,57915],{"class":35,"line":9681},[33,57908,56591],{"class":39},[33,57910,53082],{"class":59},[33,57912,2598],{"class":39},[33,57914,53137],{"class":63},[33,57916,2976],{"class":59},[33,57918,57919,57921,57923,57925,57927],{"class":35,"line":9693},[33,57920,56482],{"class":39},[33,57922,53082],{"class":59},[33,57924,2517],{"class":39},[33,57926,53137],{"class":63},[33,57928,2976],{"class":59},[33,57930,57931,57933,57935,57937],{"class":35,"line":9705},[33,57932,56653],{"class":39},[33,57934,53082],{"class":59},[33,57936,53122],{"class":39},[33,57938,2976],{"class":59},[33,57940,57941,57943,57945,57947],{"class":35,"line":9717},[33,57942,56664],{"class":39},[33,57944,53082],{"class":59},[33,57946,53313],{"class":39},[33,57948,2976],{"class":59},[33,57950,57951,57953,57955,57957],{"class":35,"line":11375},[33,57952,56403],{"class":39},[33,57954,53082],{"class":59},[33,57956,56475],{"class":39},[33,57958,2976],{"class":59},[33,57960,57961,57963,57965,57967,57969],{"class":35,"line":11400},[33,57962,56415],{"class":39},[33,57964,53082],{"class":59},[33,57966,5654],{"class":39},[33,57968,53137],{"class":63},[33,57970,2976],{"class":59},[33,57972,57973,57975,57977,57979,57981],{"class":35,"line":11423},[33,57974,56429],{"class":39},[33,57976,53082],{"class":59},[33,57978,2517],{"class":39},[33,57980,53137],{"class":63},[33,57982,2976],{"class":59},[33,57984,57985],{"class":35,"line":11447},[33,57986,3855],{"class":59},[33,57988,57989],{"class":35,"line":11452},[33,57990,127],{"emptyLinePlaceholder":126},[33,57992,57993,57995,57997],{"class":35,"line":11457},[33,57994,56612],{"class":52945},[33,57996,56719],{"class":52945},[33,57998,17228],{"class":59},[33,58000,58001,58003,58005,58007,58009],{"class":35,"line":11462},[33,58002,56415],{"class":39},[33,58004,53082],{"class":59},[33,58006,2517],{"class":39},[33,58008,53137],{"class":63},[33,58010,2976],{"class":59},[33,58012,58013,58015,58017,58019,58021],{"class":35,"line":11471},[33,58014,56429],{"class":39},[33,58016,53082],{"class":59},[33,58018,2517],{"class":39},[33,58020,53137],{"class":63},[33,58022,2976],{"class":59},[33,58024,58025,58027,58029,58031,58033,58035,58037,58039,58041,58043,58045,58047],{"class":35,"line":11476},[33,58026,56528],{"class":39},[33,58028,53082],{"class":59},[33,58030,56754],{"class":39},[33,58032,109],{"class":59},[33,58034,2010],{"class":39},[33,58036,14093],{"class":59},[33,58038,2010],{"class":39},[33,58040,14093],{"class":59},[33,58042,2010],{"class":39},[33,58044,14093],{"class":59},[33,58046,56771],{"class":39},[33,58048,4385],{"class":59},[33,58050,58051,58053,58055,58057,58059],{"class":35,"line":11482},[33,58052,56778],{"class":39},[33,58054,53082],{"class":59},[33,58056,2264],{"class":39},[33,58058,53137],{"class":63},[33,58060,2976],{"class":59},[33,58062,58063],{"class":35,"line":11503},[33,58064,3855],{"class":59},[33,58066,58067],{"class":35,"line":11509},[33,58068,127],{"emptyLinePlaceholder":126},[33,58070,58071,58073],{"class":35,"line":11523},[33,58072,56799],{"class":3632},[33,58074,17228],{"class":59},[33,58076,58077,58079,58081,58083],{"class":35,"line":11529},[33,58078,56528],{"class":39},[33,58080,53082],{"class":59},[33,58082,56810],{"class":39},[33,58084,2976],{"class":59},[33,58086,58087],{"class":35,"line":11556},[33,58088,3855],{"class":59},[33,58090,58091,58093,58095],{"class":35,"line":11565},[33,58092,54062],{"class":59},[33,58094,1729],{"class":52945},[33,58096,52952],{"class":59},[33,58098,58099,58101,58103],{"class":35,"line":11571},[33,58100,53430],{"class":59},[33,58102,52979],{"class":52945},[33,58104,52952],{"class":59},[33,58106,58107],{"class":35,"line":11579},[33,58108,127],{"emptyLinePlaceholder":126},[33,58110,58111,58113,58115],{"class":35,"line":11584},[33,58112,2726],{"class":59},[33,58114,53445],{"class":52945},[33,58116,52952],{"class":59},[33,58118,58119,58121,58123,58125,58127,58129],{"class":35,"line":18259},[33,58120,53789],{"class":59},[33,58122,53256],{"class":52945},[33,58124,55131],{"class":3632},[33,58126,64],{"class":59},[33,58128,55136],{"class":117},[33,58130,52952],{"class":59},[33,58132,58133,58135,58137,58139,58141,58143],{"class":35,"line":18265},[33,58134,52986],{"class":59},[33,58136,53256],{"class":52945},[33,58138,55131],{"class":3632},[33,58140,64],{"class":59},[33,58142,56871],{"class":117},[33,58144,52952],{"class":59},[33,58146,58147,58149,58151,58153,58155,58157,58159,58161,58163],{"class":35,"line":18288},[33,58148,56878],{"class":59},[33,58150,3145],{"class":52945},[33,58152,56883],{"class":3632},[33,58154,64],{"class":59},[33,58156,56888],{"class":117},[33,58158,56891],{"class":3632},[33,58160,64],{"class":59},[33,58162,9312],{"class":117},[33,58164,52952],{"class":59},[33,58166,58167,58169,58171],{"class":35,"line":18294},[33,58168,53421],{"class":59},[33,58170,53256],{"class":52945},[33,58172,52952],{"class":59},[33,58174,58175,58177,58179,58181,58183,58185],{"class":35,"line":18317},[33,58176,52986],{"class":59},[33,58178,53256],{"class":52945},[33,58180,55131],{"class":3632},[33,58182,64],{"class":59},[33,58184,56918],{"class":117},[33,58186,52952],{"class":59},[33,58188,58189,58191,58193,58195,58197],{"class":35,"line":18331},[33,58190,56878],{"class":59},[33,58192,19],{"class":52945},[33,58194,56929],{"class":59},[33,58196,19],{"class":52945},[33,58198,52952],{"class":59},[33,58200,58201,58203,58205],{"class":35,"line":18351},[33,58202,56878],{"class":59},[33,58204,2822],{"class":52945},[33,58206,52952],{"class":59},[33,58208,58209,58211,58213,58215,58217,58219,58221,58223],{"class":35,"line":18357},[33,58210,56946],{"class":59},[33,58212,165],{"class":52945},[33,58214,55131],{"class":3632},[33,58216,64],{"class":59},[33,58218,56955],{"class":117},[33,58220,56958],{"class":59},[33,58222,165],{"class":52945},[33,58224,52952],{"class":59},[33,58226,58227,58229,58231,58233,58235],{"class":35,"line":18368},[33,58228,56946],{"class":59},[33,58230,165],{"class":52945},[33,58232,56958],{"class":59},[33,58234,165],{"class":52945},[33,58236,52952],{"class":59},[33,58238,58239,58241,58243,58245,58247],{"class":35,"line":18391},[33,58240,56946],{"class":59},[33,58242,165],{"class":52945},[33,58244,56958],{"class":59},[33,58246,165],{"class":52945},[33,58248,52952],{"class":59},[33,58250,58251,58253,58255,58257,58259],{"class":35,"line":18413},[33,58252,56946],{"class":59},[33,58254,165],{"class":52945},[33,58256,56958],{"class":59},[33,58258,165],{"class":52945},[33,58260,52952],{"class":59},[33,58262,58263,58265,58267,58269,58271],{"class":35,"line":18418},[33,58264,56946],{"class":59},[33,58266,165],{"class":52945},[33,58268,56958],{"class":59},[33,58270,165],{"class":52945},[33,58272,52952],{"class":59},[33,58274,58275,58277,58279,58281,58283],{"class":35,"line":18424},[33,58276,56946],{"class":59},[33,58278,165],{"class":52945},[33,58280,56958],{"class":59},[33,58282,165],{"class":52945},[33,58284,52952],{"class":59},[33,58286,58287,58289,58291,58293,58295],{"class":35,"line":18438},[33,58288,56946],{"class":59},[33,58290,165],{"class":52945},[33,58292,56958],{"class":59},[33,58294,165],{"class":52945},[33,58296,52952],{"class":59},[33,58298,58299,58301,58303,58305,58307],{"class":35,"line":18451},[33,58300,56946],{"class":59},[33,58302,165],{"class":52945},[33,58304,56958],{"class":59},[33,58306,165],{"class":52945},[33,58308,52952],{"class":59},[33,58310,58311,58313,58315],{"class":35,"line":18456},[33,58312,57051],{"class":59},[33,58314,2822],{"class":52945},[33,58316,52952],{"class":59},[33,58318,58319,58321,58323],{"class":35,"line":18470},[33,58320,53421],{"class":59},[33,58322,53256],{"class":52945},[33,58324,52952],{"class":59},[33,58326,58327,58329,58331],{"class":35,"line":18475},[33,58328,54062],{"class":59},[33,58330,53256],{"class":52945},[33,58332,52952],{"class":59},[33,58334,58335,58337,58339],{"class":35,"line":18481},[33,58336,53789],{"class":59},[33,58338,53458],{"class":52945},[33,58340,52952],{"class":59},[33,58342,58343,58345,58348,58350],{"class":35,"line":18486},[33,58344,12879],{"class":63},[33,58346,58347],{"class":39}," sliderData",[33,58349,15222],{"class":63},[33,58351,57091],{"class":59},[33,58353,58354,58356,58358,58360,58362,58364,58366],{"class":35,"line":18500},[33,58355,57096],{"class":59},[33,58357,57099],{"class":117},[33,58359,57102],{"class":59},[33,58361,57105],{"class":117},[33,58363,57108],{"class":59},[33,58365,57111],{"class":117},[33,58367,57114],{"class":59},[33,58369,58370,58372,58374,58376,58378,58380,58382],{"class":35,"line":18505},[33,58371,57096],{"class":59},[33,58373,57121],{"class":117},[33,58375,57102],{"class":59},[33,58377,57126],{"class":117},[33,58379,57108],{"class":59},[33,58381,57131],{"class":117},[33,58383,57114],{"class":59},[33,58385,58386,58388,58390,58392,58394,58396,58398],{"class":35,"line":18510},[33,58387,57096],{"class":59},[33,58389,57140],{"class":117},[33,58391,57102],{"class":59},[33,58393,57145],{"class":117},[33,58395,57108],{"class":59},[33,58397,57150],{"class":117},[33,58399,57114],{"class":59},[33,58401,58402,58404,58406,58408,58410,58412,58414],{"class":35,"line":18524},[33,58403,57096],{"class":59},[33,58405,57159],{"class":117},[33,58407,57102],{"class":59},[33,58409,57164],{"class":117},[33,58411,57108],{"class":59},[33,58413,57169],{"class":117},[33,58415,57114],{"class":59},[33,58417,58418,58420,58422,58424,58426,58428,58430],{"class":35,"line":18536},[33,58419,57096],{"class":59},[33,58421,57178],{"class":117},[33,58423,57102],{"class":59},[33,58425,57183],{"class":117},[33,58427,57108],{"class":59},[33,58429,57188],{"class":117},[33,58431,57114],{"class":59},[33,58433,58434,58436,58438,58440,58442,58444,58446],{"class":35,"line":18541},[33,58435,57096],{"class":59},[33,58437,57197],{"class":117},[33,58439,57102],{"class":59},[33,58441,57202],{"class":117},[33,58443,57108],{"class":59},[33,58445,57207],{"class":117},[33,58447,57114],{"class":59},[33,58449,58450,58452,58454,58456,58458,58460,58462],{"class":35,"line":18554},[33,58451,57096],{"class":59},[33,58453,57216],{"class":117},[33,58455,57102],{"class":59},[33,58457,57221],{"class":117},[33,58459,57108],{"class":59},[33,58461,57226],{"class":117},[33,58463,57114],{"class":59},[33,58465,58466,58468,58470,58472,58474,58476,58478],{"class":35,"line":18559},[33,58467,57096],{"class":59},[33,58469,57235],{"class":117},[33,58471,57102],{"class":59},[33,58473,57240],{"class":117},[33,58475,57108],{"class":59},[33,58477,57245],{"class":117},[33,58479,57248],{"class":59},[33,58481,58482],{"class":35,"line":18564},[33,58483,54754],{"class":59},[33,58485,58486],{"class":35,"line":18569},[33,58487,58488],{"class":87},"    \u002F\u002F 1.获取元素\n",[33,58490,58491,58493,58495,58497,58499,58501,58503,58505],{"class":35,"line":18582},[33,58492,12879],{"class":63},[33,58494,57259],{"class":39},[33,58496,15222],{"class":63},[33,58498,56040],{"class":59},[33,58500,56043],{"class":3632},[33,58502,109],{"class":59},[33,58504,57270],{"class":117},[33,58506,157],{"class":59},[33,58508,58509,58511,58513,58515,58517,58519,58521,58523],{"class":35,"line":18587},[33,58510,12879],{"class":63},[33,58512,8485],{"class":39},[33,58514,15222],{"class":63},[33,58516,56040],{"class":59},[33,58518,56043],{"class":3632},[33,58520,109],{"class":59},[33,58522,57289],{"class":117},[33,58524,157],{"class":59},[33,58526,58527,58529,58531,58533],{"class":35,"line":34280},[33,58528,53864],{"class":63},[33,58530,11097],{"class":59},[33,58532,64],{"class":63},[33,58534,48978],{"class":39},[33,58536,58537],{"class":35,"line":34286},[33,58538,58539],{"class":87},"    \u002F\u002F 2.开启定时器\n",[33,58541,58542],{"class":35,"line":34292},[33,58543,58544],{"class":87},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[33,58546,58547,58550,58552,58554],{"class":35,"line":34298},[33,58548,58549],{"class":3632},"    setInterval",[33,58551,109],{"class":59},[33,58553,56093],{"class":63},[33,58555,56096],{"class":59},[33,58557,58558,58560],{"class":35,"line":34304},[33,58559,56101],{"class":59},[33,58561,4368],{"class":63},[33,58563,58564,58566,58568,58570,58573,58575],{"class":35,"line":34315},[33,58565,56124],{"class":63},[33,58567,56127],{"class":59},[33,58569,78],{"class":63},[33,58571,58572],{"class":59}," sliderData.",[33,58574,53613],{"class":39},[33,58576,14100],{"class":59},[33,58578,58579,58582,58584],{"class":35,"line":34321},[33,58580,58581],{"class":59},"        i ",[33,58583,64],{"class":63},[33,58585,48978],{"class":39},[33,58587,58588],{"class":35,"line":34341},[33,58589,54043],{"class":59},[33,58591,58592],{"class":35,"line":34347},[33,58593,58594],{"class":87},"      \u002F\u002F 更换图片路径\n",[33,58596,58597,58599,58601],{"class":35,"line":34358},[33,58598,57364],{"class":59},[33,58600,64],{"class":63},[33,58602,58603],{"class":59}," sliderData[i].url\n",[33,58605,58606],{"class":35,"line":34364},[33,58607,58608],{"class":87},"      \u002F\u002F 把文字写到p里面\n",[33,58610,58611,58613,58615],{"class":35,"line":34370},[33,58612,57374],{"class":59},[33,58614,64],{"class":63},[33,58616,58617],{"class":59}," sliderData[i].title\n",[33,58619,58620],{"class":35,"line":34376},[33,58621,58622],{"class":87},"      \u002F\u002F 小圆点\n",[33,58624,58625],{"class":35,"line":34382},[33,58626,58627],{"class":87},"      \u002F\u002F 先删除以前的active\n",[33,58629,58630],{"class":35,"line":34388},[33,58631,58632],{"class":87},"      \u002F\u002F 只让当前li添加active\n",[33,58634,58635,58637,58639,58641,58644,58647,58650,58652,58654],{"class":35,"line":34394},[33,58636,57414],{"class":59},[33,58638,56043],{"class":3632},[33,58640,109],{"class":59},[33,58642,58643],{"class":117},"'.slider-footer .activate'",[33,58645,58646],{"class":59},").classList.",[33,58648,58649],{"class":3632},"remove",[33,58651,109],{"class":59},[33,58653,57432],{"class":117},[33,58655,157],{"class":59},[33,58657,58658,58660,58662,58664,58667,58669,58671,58673,58676,58678,58680,58682,58684],{"class":35,"line":34400},[33,58659,57414],{"class":59},[33,58661,56043],{"class":3632},[33,58663,109],{"class":59},[33,58665,58666],{"class":117},"`.slider-footer ul li:nth-child(${",[33,58668,2259],{"class":59},[33,58670,47212],{"class":63},[33,58672,26774],{"class":39},[33,58674,58675],{"class":117},"})`",[33,58677,58646],{"class":59},[33,58679,6995],{"class":3632},[33,58681,109],{"class":59},[33,58683,57432],{"class":117},[33,58685,157],{"class":59},[33,58687,58688],{"class":35,"line":34420},[33,58689,127],{"emptyLinePlaceholder":126},[33,58691,58692,58694,58696],{"class":35,"line":34426},[33,58693,56179],{"class":59},[33,58695,8070],{"class":39},[33,58697,157],{"class":59},[33,58699,58700],{"class":35,"line":34442},[33,58701,127],{"emptyLinePlaceholder":126},[33,58703,58704,58706,58708],{"class":35,"line":34448},[33,58705,54062],{"class":59},[33,58707,53458],{"class":52945},[33,58709,52952],{"class":59},[33,58711,58712,58714,58716],{"class":35,"line":34462},[33,58713,53430],{"class":59},[33,58715,53445],{"class":52945},[33,58717,52952],{"class":59},[33,58719,58720],{"class":35,"line":34468},[33,58721,127],{"emptyLinePlaceholder":126},[33,58723,58724,58726,58728],{"class":35,"line":34483},[33,58725,53430],{"class":59},[33,58727,52280],{"class":52945},[33,58729,52952],{"class":59},[633,58731,58733],{"id":58732},"_317-重要知识点","3.1.7 重要知识点",[19,58735,58736,58737],{},"浏览器在渲染文本时， ",[1968,58738,58739],{},"没有空格或换行符就没有“断行点”",[19,58741,58742],{},[3145,58743],{"alt":28,"src":58744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58746,58747],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58749,58750],{},[3145,58751],{"alt":28,"src":58752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58754,58755],{},[3145,58756],{"alt":28,"src":58757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58759,58761],{"id":58760},"_32-dom事件基础","3.2 DOM事件基础",[633,58763,58765],{"id":58764},"_321-事件监听","3.2.1 事件监听",[19,58767,58768],{},[3145,58769],{"alt":28,"src":58770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58772,58773],{},"事件监听有响应的发生",[19,58775,58776],{},[3145,58777],{"alt":28,"src":58778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58780,58781],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58783,58784],{},"对于有名函数,要执行的函数名后边不要加()",[633,58786,58788],{"id":58787},"_322-随机点名案例","3.2.2 随机点名案例",[23,58790,58792],{"className":52278,"code":58791,"language":52280,"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,58793,58794,58804,58818,58822,58830,58844,58864,58876,58884,58890,58900,58910,58914,58918,58925,58936,58940,58944,58950,58962,58976,58986,58998,59011,59015,59019,59026,59030,59043,59055,59067,59071,59075,59079,59086,59096,59100,59104,59113,59125,59137,59152,59156,59164,59172,59176,59184,59197,59211,59224,59244,59252,59267,59287,59307,59315,59319,59327,59332,59368,59388,59393,59412,59417,59428,59433,59444,59449,59468,59483,59488,59514,59524,59533,59538,59554,59559,59564,59569,59584,59588,59592,59597,59616,59633,59641,59646,59661,59665,59669,59677,59685,59689],{"__ignoreMap":28},[33,58795,58796,58798,58800,58802],{"class":35,"line":36},[33,58797,52942],{"class":59},[33,58799,52946],{"class":52945},[33,58801,52949],{"class":3632},[33,58803,52952],{"class":59},[33,58805,58806,58808,58810,58812,58814,58816],{"class":35,"line":43},[33,58807,2726],{"class":59},[33,58809,52280],{"class":52945},[33,58811,52961],{"class":3632},[33,58813,64],{"class":59},[33,58815,52966],{"class":117},[33,58817,52952],{"class":59},[33,58819,58820],{"class":35,"line":130},[33,58821,127],{"emptyLinePlaceholder":126},[33,58823,58824,58826,58828],{"class":35,"line":146},[33,58825,2726],{"class":59},[33,58827,52979],{"class":52945},[33,58829,52952],{"class":59},[33,58831,58832,58834,58836,58838,58840,58842],{"class":35,"line":267},[33,58833,53789],{"class":59},[33,58835,52989],{"class":52945},[33,58837,52992],{"class":3632},[33,58839,64],{"class":59},[33,58841,52997],{"class":117},[33,58843,52952],{"class":59},[33,58845,58846,58848,58850,58852,58854,58856,58858,58860,58862],{"class":35,"line":275},[33,58847,53789],{"class":59},[33,58849,52989],{"class":52945},[33,58851,16578],{"class":3632},[33,58853,64],{"class":59},[33,58855,53036],{"class":117},[33,58857,53016],{"class":3632},[33,58859,64],{"class":59},[33,58861,53043],{"class":117},[33,58863,52952],{"class":59},[33,58865,58866,58868,58870,58872,58874],{"class":35,"line":392},[33,58867,53789],{"class":59},[33,58869,53052],{"class":52945},[33,58871,53055],{"class":59},[33,58873,53052],{"class":52945},[33,58875,52952],{"class":59},[33,58877,58878,58880,58882],{"class":35,"line":406},[33,58879,53789],{"class":59},[33,58881,1729],{"class":52945},[33,58883,52952],{"class":59},[33,58885,58886,58888],{"class":35,"line":418},[33,58887,8063],{"class":52945},[33,58889,17228],{"class":59},[33,58891,58892,58894,58896,58898],{"class":35,"line":425},[33,58893,56350],{"class":39},[33,58895,53082],{"class":59},[33,58897,2010],{"class":39},[33,58899,2976],{"class":59},[33,58901,58902,58904,58906,58908],{"class":35,"line":1147},[33,58903,56339],{"class":39},[33,58905,53082],{"class":59},[33,58907,2010],{"class":39},[33,58909,2976],{"class":59},[33,58911,58912],{"class":35,"line":1329},[33,58913,3855],{"class":59},[33,58915,58916],{"class":35,"line":1341},[33,58917,127],{"emptyLinePlaceholder":126},[33,58919,58920,58923],{"class":35,"line":1348},[33,58921,58922],{"class":52945},"    h2",[33,58924,17228],{"class":59},[33,58926,58927,58930,58932,58934],{"class":35,"line":1529},[33,58928,58929],{"class":39},"      text-align",[33,58931,53082],{"class":59},[33,58933,53237],{"class":39},[33,58935,2976],{"class":59},[33,58937,58938],{"class":35,"line":1546},[33,58939,3855],{"class":59},[33,58941,58942],{"class":35,"line":1551},[33,58943,127],{"emptyLinePlaceholder":126},[33,58945,58946,58948],{"class":35,"line":1566},[33,58947,56396],{"class":3632},[33,58949,17228],{"class":59},[33,58951,58952,58954,58956,58958,58960],{"class":35,"line":1578},[33,58953,56415],{"class":39},[33,58955,53082],{"class":59},[33,58957,3221],{"class":39},[33,58959,53137],{"class":63},[33,58961,2976],{"class":59},[33,58963,58964,58966,58968,58970,58972,58974],{"class":35,"line":1583},[33,58965,56350],{"class":39},[33,58967,53082],{"class":59},[33,58969,2473],{"class":39},[33,58971,53137],{"class":63},[33,58973,53201],{"class":39},[33,58975,2976],{"class":59},[33,58977,58978,58980,58982,58984],{"class":35,"line":3369},[33,58979,56653],{"class":39},[33,58981,53082],{"class":59},[33,58983,53122],{"class":39},[33,58985,2976],{"class":59},[33,58987,58988,58990,58992,58994,58996],{"class":35,"line":3396},[33,58989,56566],{"class":39},[33,58991,53082],{"class":59},[33,58993,2642],{"class":39},[33,58995,53137],{"class":63},[33,58997,2976],{"class":59},[33,58999,59000,59003,59005,59007,59009],{"class":35,"line":3401},[33,59001,59002],{"class":39},"      line-height",[33,59004,53082],{"class":59},[33,59006,2219],{"class":39},[33,59008,53137],{"class":63},[33,59010,2976],{"class":59},[33,59012,59013],{"class":35,"line":3418},[33,59014,3855],{"class":59},[33,59016,59017],{"class":35,"line":3423},[33,59018,127],{"emptyLinePlaceholder":126},[33,59020,59021,59024],{"class":35,"line":3428},[33,59022,59023],{"class":3632},"    .qs",[33,59025,17228],{"class":59},[33,59027,59028],{"class":35,"line":3433},[33,59029,127],{"emptyLinePlaceholder":126},[33,59031,59032,59034,59036,59039,59041],{"class":35,"line":3447},[33,59033,56415],{"class":39},[33,59035,53082],{"class":59},[33,59037,59038],{"class":39},"450",[33,59040,53137],{"class":63},[33,59042,2976],{"class":59},[33,59044,59045,59047,59049,59051,59053],{"class":35,"line":3452},[33,59046,56429],{"class":39},[33,59048,53082],{"class":59},[33,59050,2219],{"class":39},[33,59052,53137],{"class":63},[33,59054,2976],{"class":59},[33,59056,59057,59060,59062,59065],{"class":35,"line":4243},[33,59058,59059],{"class":39},"      color",[33,59061,53082],{"class":59},[33,59063,59064],{"class":39},"red",[33,59066,2976],{"class":59},[33,59068,59069],{"class":35,"line":4257},[33,59070,127],{"emptyLinePlaceholder":126},[33,59072,59073],{"class":35,"line":4265},[33,59074,3855],{"class":59},[33,59076,59077],{"class":35,"line":4270},[33,59078,127],{"emptyLinePlaceholder":126},[33,59080,59081,59084],{"class":35,"line":4276},[33,59082,59083],{"class":3632},"    .btns",[33,59085,17228],{"class":59},[33,59087,59088,59090,59092,59094],{"class":35,"line":4282},[33,59089,58929],{"class":39},[33,59091,53082],{"class":59},[33,59093,53237],{"class":39},[33,59095,2976],{"class":59},[33,59097,59098],{"class":35,"line":4287},[33,59099,3855],{"class":59},[33,59101,59102],{"class":35,"line":9608},[33,59103,127],{"emptyLinePlaceholder":126},[33,59105,59106,59108,59111],{"class":35,"line":9632},[33,59107,59083],{"class":3632},[33,59109,59110],{"class":52945}," button",[33,59112,17228],{"class":59},[33,59114,59115,59117,59119,59121,59123],{"class":35,"line":9637},[33,59116,56415],{"class":39},[33,59118,53082],{"class":59},[33,59120,2634],{"class":39},[33,59122,53137],{"class":63},[33,59124,2976],{"class":59},[33,59126,59127,59129,59131,59133,59135],{"class":35,"line":9643},[33,59128,56429],{"class":39},[33,59130,53082],{"class":59},[33,59132,2091],{"class":39},[33,59134,53137],{"class":63},[33,59136,2976],{"class":59},[33,59138,59139,59141,59143,59145,59148,59150],{"class":35,"line":9670},[33,59140,56350],{"class":39},[33,59142,53082],{"class":59},[33,59144,2010],{"class":39},[33,59146,59147],{"class":39}," 50",[33,59149,53137],{"class":63},[33,59151,2976],{"class":59},[33,59153,59154],{"class":35,"line":9675},[33,59155,3855],{"class":59},[33,59157,59158,59160,59162],{"class":35,"line":9681},[33,59159,54062],{"class":59},[33,59161,1729],{"class":52945},[33,59163,52952],{"class":59},[33,59165,59166,59168,59170],{"class":35,"line":9693},[33,59167,53430],{"class":59},[33,59169,52979],{"class":52945},[33,59171,52952],{"class":59},[33,59173,59174],{"class":35,"line":9705},[33,59175,127],{"emptyLinePlaceholder":126},[33,59177,59178,59180,59182],{"class":35,"line":9717},[33,59179,2726],{"class":59},[33,59181,53445],{"class":52945},[33,59183,52952],{"class":59},[33,59185,59186,59188,59190,59193,59195],{"class":35,"line":11375},[33,59187,53789],{"class":59},[33,59189,14],{"class":52945},[33,59191,59192],{"class":59},">随机点名\u003C\u002F",[33,59194,14],{"class":52945},[33,59196,52952],{"class":59},[33,59198,59199,59201,59203,59205,59207,59209],{"class":35,"line":11400},[33,59200,53789],{"class":59},[33,59202,53256],{"class":52945},[33,59204,55131],{"class":3632},[33,59206,64],{"class":59},[33,59208,55136],{"class":117},[33,59210,52952],{"class":59},[33,59212,59213,59215,59217,59220,59222],{"class":35,"line":11423},[33,59214,52986],{"class":59},[33,59216,33],{"class":52945},[33,59218,59219],{"class":59},">名字是：\u003C\u002F",[33,59221,33],{"class":52945},[33,59223,52952],{"class":59},[33,59225,59226,59228,59230,59232,59234,59237,59240,59242],{"class":35,"line":11447},[33,59227,52986],{"class":59},[33,59229,53256],{"class":52945},[33,59231,55131],{"class":3632},[33,59233,64],{"class":59},[33,59235,59236],{"class":117},"\"qs\"",[33,59238,59239],{"class":59},">这里显示姓名\u003C\u002F",[33,59241,53256],{"class":52945},[33,59243,52952],{"class":59},[33,59245,59246,59248,59250],{"class":35,"line":11452},[33,59247,54062],{"class":59},[33,59249,53256],{"class":52945},[33,59251,52952],{"class":59},[33,59253,59254,59256,59258,59260,59262,59265],{"class":35,"line":11457},[33,59255,53789],{"class":59},[33,59257,53256],{"class":52945},[33,59259,55131],{"class":3632},[33,59261,64],{"class":59},[33,59263,59264],{"class":117},"\"btns\"",[33,59266,52952],{"class":59},[33,59268,59269,59271,59273,59275,59277,59280,59283,59285],{"class":35,"line":11462},[33,59270,52986],{"class":59},[33,59272,55531],{"class":52945},[33,59274,55131],{"class":3632},[33,59276,64],{"class":59},[33,59278,59279],{"class":117},"\"start\"",[33,59281,59282],{"class":59},">开始\u003C\u002F",[33,59284,55531],{"class":52945},[33,59286,52952],{"class":59},[33,59288,59289,59291,59293,59295,59297,59300,59303,59305],{"class":35,"line":11471},[33,59290,52986],{"class":59},[33,59292,55531],{"class":52945},[33,59294,55131],{"class":3632},[33,59296,64],{"class":59},[33,59298,59299],{"class":117},"\"end\"",[33,59301,59302],{"class":59},">结束\u003C\u002F",[33,59304,55531],{"class":52945},[33,59306,52952],{"class":59},[33,59308,59309,59311,59313],{"class":35,"line":11476},[33,59310,54062],{"class":59},[33,59312,53256],{"class":52945},[33,59314,52952],{"class":59},[33,59316,59317],{"class":35,"line":11482},[33,59318,127],{"emptyLinePlaceholder":126},[33,59320,59321,59323,59325],{"class":35,"line":11503},[33,59322,53789],{"class":59},[33,59324,53458],{"class":52945},[33,59326,52952],{"class":59},[33,59328,59329],{"class":35,"line":11509},[33,59330,59331],{"class":87},"    \u002F\u002F 数据数组\n",[33,59333,59334,59336,59339,59341,59343,59346,59348,59351,59353,59356,59358,59361,59363,59366],{"class":35,"line":11523},[33,59335,12879],{"class":63},[33,59337,59338],{"class":39}," arr",[33,59340,15222],{"class":63},[33,59342,53871],{"class":59},[33,59344,59345],{"class":117},"'马超'",[33,59347,14093],{"class":59},[33,59349,59350],{"class":117},"'黄忠'",[33,59352,14093],{"class":59},[33,59354,59355],{"class":117},"'赵云'",[33,59357,14093],{"class":59},[33,59359,59360],{"class":117},"'关羽'",[33,59362,14093],{"class":59},[33,59364,59365],{"class":117},"'张飞'",[33,59367,34893],{"class":59},[33,59369,59370,59372,59375,59377,59379,59381,59383,59386],{"class":35,"line":11529},[33,59371,12879],{"class":63},[33,59373,59374],{"class":39}," qs",[33,59376,15222],{"class":63},[33,59378,56040],{"class":59},[33,59380,56043],{"class":3632},[33,59382,109],{"class":59},[33,59384,59385],{"class":117},"'.qs'",[33,59387,157],{"class":59},[33,59389,59390],{"class":35,"line":11556},[33,59391,59392],{"class":87},"    \u002F\u002F 1.业务1.开始按钮模块\n",[33,59394,59395,59397,59399,59401,59403,59405,59407,59410],{"class":35,"line":11565},[33,59396,12879],{"class":63},[33,59398,5845],{"class":39},[33,59400,15222],{"class":63},[33,59402,56040],{"class":59},[33,59404,56043],{"class":3632},[33,59406,109],{"class":59},[33,59408,59409],{"class":117},"'.start'",[33,59411,157],{"class":59},[33,59413,59414],{"class":35,"line":11571},[33,59415,59416],{"class":87},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[33,59418,59419,59421,59424,59426],{"class":35,"line":11579},[33,59420,53864],{"class":63},[33,59422,59423],{"class":59}," timerId ",[33,59425,64],{"class":63},[33,59427,48978],{"class":39},[33,59429,59430],{"class":35,"line":11584},[33,59431,59432],{"class":87},"    \u002F\u002F 随机号要全局变量\n",[33,59434,59435,59437,59440,59442],{"class":35,"line":18259},[33,59436,53864],{"class":63},[33,59438,59439],{"class":59}," random ",[33,59441,64],{"class":63},[33,59443,48978],{"class":39},[33,59445,59446],{"class":35,"line":18265},[33,59447,59448],{"class":87},"    \u002F\u002F 1.1 添加点击事件\n",[33,59450,59451,59454,59457,59459,59462,59464,59466],{"class":35,"line":18288},[33,59452,59453],{"class":59},"    start.",[33,59455,59456],{"class":3632},"addEventListener",[33,59458,109],{"class":59},[33,59460,59461],{"class":117},"'click'",[33,59463,14093],{"class":59},[33,59465,56093],{"class":63},[33,59467,56096],{"class":59},[33,59469,59470,59473,59475,59477,59479,59481],{"class":35,"line":18294},[33,59471,59472],{"class":59},"      timerId ",[33,59474,64],{"class":63},[33,59476,56088],{"class":3632},[33,59478,109],{"class":59},[33,59480,56093],{"class":63},[33,59482,56096],{"class":59},[33,59484,59485],{"class":35,"line":18317},[33,59486,59487],{"class":87},"        \u002F\u002F 随机数\n",[33,59489,59490,59493,59495,59498,59501,59504,59506,59508,59510,59512],{"class":35,"line":18331},[33,59491,59492],{"class":59},"        random ",[33,59494,64],{"class":63},[33,59496,59497],{"class":3632}," parseInt",[33,59499,59500],{"class":59},"(Math.",[33,59502,59503],{"class":3632},"random",[33,59505,14708],{"class":59},[33,59507,1540],{"class":63},[33,59509,53610],{"class":59},[33,59511,53613],{"class":39},[33,59513,157],{"class":59},[33,59515,59516,59519,59521],{"class":35,"line":18351},[33,59517,59518],{"class":59},"        qs.innerHTML ",[33,59520,64],{"class":63},[33,59522,59523],{"class":59}," arr[random]\n",[33,59525,59526,59529,59531],{"class":35,"line":18357},[33,59527,59528],{"class":59},"      }, ",[33,59530,2091],{"class":39},[33,59532,157],{"class":59},[33,59534,59535],{"class":35,"line":18368},[33,59536,59537],{"class":87},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[33,59539,59540,59542,59545,59547,59550,59552],{"class":35,"line":18391},[33,59541,56124],{"class":63},[33,59543,59544],{"class":59}," (arr.",[33,59546,53613],{"class":39},[33,59548,59549],{"class":63}," ===",[33,59551,26774],{"class":39},[33,59553,14100],{"class":59},[33,59555,59556],{"class":35,"line":18413},[33,59557,59558],{"class":87},"        \u002F\u002F start.disabled = true\n",[33,59560,59561],{"class":35,"line":18418},[33,59562,59563],{"class":87},"        \u002F\u002F end.disabled = true\n",[33,59565,59566],{"class":35,"line":18424},[33,59567,59568],{"class":87},"        \u002F\u002F 可以合起来写\n",[33,59570,59571,59574,59576,59579,59581],{"class":35,"line":18438},[33,59572,59573],{"class":59},"        start.disabled ",[33,59575,64],{"class":63},[33,59577,59578],{"class":59}," end.disabled ",[33,59580,64],{"class":63},[33,59582,59583],{"class":39}," true\n",[33,59585,59586],{"class":35,"line":18451},[33,59587,54043],{"class":59},[33,59589,59590],{"class":35,"line":18456},[33,59591,35108],{"class":59},[33,59593,59594],{"class":35,"line":18470},[33,59595,59596],{"class":87},"    \u002F\u002F 1.2 关闭按钮模块\n",[33,59598,59599,59601,59603,59605,59607,59609,59611,59614],{"class":35,"line":18475},[33,59600,12879],{"class":63},[33,59602,5861],{"class":39},[33,59604,15222],{"class":63},[33,59606,56040],{"class":59},[33,59608,56043],{"class":3632},[33,59610,109],{"class":59},[33,59612,59613],{"class":117},"'.end'",[33,59615,157],{"class":59},[33,59617,59618,59621,59623,59625,59627,59629,59631],{"class":35,"line":18481},[33,59619,59620],{"class":59},"    end.",[33,59622,59456],{"class":3632},[33,59624,109],{"class":59},[33,59626,59461],{"class":117},[33,59628,14093],{"class":59},[33,59630,56093],{"class":63},[33,59632,56096],{"class":59},[33,59634,59635,59638],{"class":35,"line":18486},[33,59636,59637],{"class":3632},"      clearInterval",[33,59639,59640],{"class":59},"(timerId)\n",[33,59642,59643],{"class":35,"line":18500},[33,59644,59645],{"class":87},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[33,59647,59648,59651,59654,59657,59659],{"class":35,"line":18505},[33,59649,59650],{"class":59},"      arr.",[33,59652,59653],{"class":3632},"splice",[33,59655,59656],{"class":59},"(random, ",[33,59658,2036],{"class":39},[33,59660,157],{"class":59},[33,59662,59663],{"class":35,"line":18510},[33,59664,35108],{"class":59},[33,59666,59667],{"class":35,"line":18524},[33,59668,127],{"emptyLinePlaceholder":126},[33,59670,59671,59673,59675],{"class":35,"line":18536},[33,59672,54062],{"class":59},[33,59674,53458],{"class":52945},[33,59676,52952],{"class":59},[33,59678,59679,59681,59683],{"class":35,"line":18541},[33,59680,53430],{"class":59},[33,59682,53445],{"class":52945},[33,59684,52952],{"class":59},[33,59686,59687],{"class":35,"line":18554},[33,59688,127],{"emptyLinePlaceholder":126},[33,59690,59691,59693,59695],{"class":35,"line":18559},[33,59692,53430],{"class":59},[33,59694,52280],{"class":52945},[33,59696,52952],{"class":59},[19,59698,59699],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[633,59701,59703],{"id":59702},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[23,59705,59707],{"className":52278,"code":59706,"language":52280,"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,59708,59709,59719,59733,59737,59745,59759,59779,59791,59799,59803,59811,59823,59831,59850,59867,59883,59893,59897,59905,59913,59917],{"__ignoreMap":28},[33,59710,59711,59713,59715,59717],{"class":35,"line":36},[33,59712,52942],{"class":59},[33,59714,52946],{"class":52945},[33,59716,52949],{"class":3632},[33,59718,52952],{"class":59},[33,59720,59721,59723,59725,59727,59729,59731],{"class":35,"line":43},[33,59722,2726],{"class":59},[33,59724,52280],{"class":52945},[33,59726,52961],{"class":3632},[33,59728,64],{"class":59},[33,59730,52966],{"class":117},[33,59732,52952],{"class":59},[33,59734,59735],{"class":35,"line":130},[33,59736,127],{"emptyLinePlaceholder":126},[33,59738,59739,59741,59743],{"class":35,"line":146},[33,59740,2726],{"class":59},[33,59742,52979],{"class":52945},[33,59744,52952],{"class":59},[33,59746,59747,59749,59751,59753,59755,59757],{"class":35,"line":267},[33,59748,53789],{"class":59},[33,59750,52989],{"class":52945},[33,59752,52992],{"class":3632},[33,59754,64],{"class":59},[33,59756,52997],{"class":117},[33,59758,52952],{"class":59},[33,59760,59761,59763,59765,59767,59769,59771,59773,59775,59777],{"class":35,"line":275},[33,59762,53789],{"class":59},[33,59764,52989],{"class":52945},[33,59766,16578],{"class":3632},[33,59768,64],{"class":59},[33,59770,53036],{"class":117},[33,59772,53016],{"class":3632},[33,59774,64],{"class":59},[33,59776,53043],{"class":117},[33,59778,52952],{"class":59},[33,59780,59781,59783,59785,59787,59789],{"class":35,"line":392},[33,59782,53789],{"class":59},[33,59784,53052],{"class":52945},[33,59786,53055],{"class":59},[33,59788,53052],{"class":52945},[33,59790,52952],{"class":59},[33,59792,59793,59795,59797],{"class":35,"line":406},[33,59794,53430],{"class":59},[33,59796,52979],{"class":52945},[33,59798,52952],{"class":59},[33,59800,59801],{"class":35,"line":418},[33,59802,127],{"emptyLinePlaceholder":126},[33,59804,59805,59807,59809],{"class":35,"line":425},[33,59806,2726],{"class":59},[33,59808,53445],{"class":52945},[33,59810,52952],{"class":59},[33,59812,59813,59815,59817,59819,59821],{"class":35,"line":1147},[33,59814,53789],{"class":59},[33,59816,55531],{"class":52945},[33,59818,55537],{"class":59},[33,59820,55531],{"class":52945},[33,59822,52952],{"class":59},[33,59824,59825,59827,59829],{"class":35,"line":1329},[33,59826,53789],{"class":59},[33,59828,53458],{"class":52945},[33,59830,52952],{"class":59},[33,59832,59833,59835,59837,59839,59841,59843,59845,59848],{"class":35,"line":1341},[33,59834,12879],{"class":63},[33,59836,56035],{"class":39},[33,59838,15222],{"class":63},[33,59840,56040],{"class":59},[33,59842,56043],{"class":3632},[33,59844,109],{"class":59},[33,59846,59847],{"class":117},"'button'",[33,59849,157],{"class":59},[33,59851,59852,59855,59857,59859,59861,59863,59865],{"class":35,"line":1348},[33,59853,59854],{"class":59},"    btn.",[33,59856,59456],{"class":3632},[33,59858,109],{"class":59},[33,59860,59461],{"class":117},[33,59862,14093],{"class":59},[33,59864,56093],{"class":63},[33,59866,56096],{"class":59},[33,59868,59869,59872,59874,59876,59879,59881],{"class":35,"line":1529},[33,59870,59871],{"class":63},"      const",[33,59873,3908],{"class":39},[33,59875,15222],{"class":63},[33,59877,59878],{"class":59}," Math.",[33,59880,59503],{"class":3632},[33,59882,943],{"class":59},[33,59884,59885,59888,59891],{"class":35,"line":1546},[33,59886,59887],{"class":59},"      console.",[33,59889,59890],{"class":3632},"log",[33,59892,1837],{"class":59},[33,59894,59895],{"class":35,"line":1551},[33,59896,35108],{"class":59},[33,59898,59899,59901,59903],{"class":35,"line":1566},[33,59900,54062],{"class":59},[33,59902,53458],{"class":52945},[33,59904,52952],{"class":59},[33,59906,59907,59909,59911],{"class":35,"line":1578},[33,59908,53430],{"class":59},[33,59910,53445],{"class":52945},[33,59912,52952],{"class":59},[33,59914,59915],{"class":35,"line":1583},[33,59916,127],{"emptyLinePlaceholder":126},[33,59918,59919,59921,59923],{"class":35,"line":3369},[33,59920,53430],{"class":59},[33,59922,52280],{"class":52945},[33,59924,52952],{"class":59},[19,59926,59927],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59929,59930],{},"常量不可以重新赋值",[19,59932,59933],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[23,59935,59937],{"className":52278,"code":59936,"language":52280,"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,59938,59939,59949,59963,59967,59975,59989,60009,60021,60029,60033,60041,60053,60061,60072,60090,60106,60120,60128,60132,60140,60148,60152],{"__ignoreMap":28},[33,59940,59941,59943,59945,59947],{"class":35,"line":36},[33,59942,52942],{"class":59},[33,59944,52946],{"class":52945},[33,59946,52949],{"class":3632},[33,59948,52952],{"class":59},[33,59950,59951,59953,59955,59957,59959,59961],{"class":35,"line":43},[33,59952,2726],{"class":59},[33,59954,52280],{"class":52945},[33,59956,52961],{"class":3632},[33,59958,64],{"class":59},[33,59960,52966],{"class":117},[33,59962,52952],{"class":59},[33,59964,59965],{"class":35,"line":130},[33,59966,127],{"emptyLinePlaceholder":126},[33,59968,59969,59971,59973],{"class":35,"line":146},[33,59970,2726],{"class":59},[33,59972,52979],{"class":52945},[33,59974,52952],{"class":59},[33,59976,59977,59979,59981,59983,59985,59987],{"class":35,"line":267},[33,59978,53789],{"class":59},[33,59980,52989],{"class":52945},[33,59982,52992],{"class":3632},[33,59984,64],{"class":59},[33,59986,52997],{"class":117},[33,59988,52952],{"class":59},[33,59990,59991,59993,59995,59997,59999,60001,60003,60005,60007],{"class":35,"line":275},[33,59992,53789],{"class":59},[33,59994,52989],{"class":52945},[33,59996,16578],{"class":3632},[33,59998,64],{"class":59},[33,60000,53036],{"class":117},[33,60002,53016],{"class":3632},[33,60004,64],{"class":59},[33,60006,53043],{"class":117},[33,60008,52952],{"class":59},[33,60010,60011,60013,60015,60017,60019],{"class":35,"line":392},[33,60012,53789],{"class":59},[33,60014,53052],{"class":52945},[33,60016,53055],{"class":59},[33,60018,53052],{"class":52945},[33,60020,52952],{"class":59},[33,60022,60023,60025,60027],{"class":35,"line":406},[33,60024,53430],{"class":59},[33,60026,52979],{"class":52945},[33,60028,52952],{"class":59},[33,60030,60031],{"class":35,"line":418},[33,60032,127],{"emptyLinePlaceholder":126},[33,60034,60035,60037,60039],{"class":35,"line":425},[33,60036,2726],{"class":59},[33,60038,53445],{"class":52945},[33,60040,52952],{"class":59},[33,60042,60043,60045,60047,60049,60051],{"class":35,"line":1147},[33,60044,53789],{"class":59},[33,60046,55531],{"class":52945},[33,60048,55537],{"class":59},[33,60050,55531],{"class":52945},[33,60052,52952],{"class":59},[33,60054,60055,60057,60059],{"class":35,"line":1329},[33,60056,53789],{"class":59},[33,60058,53458],{"class":52945},[33,60060,52952],{"class":59},[33,60062,60063,60065,60067,60069],{"class":35,"line":1341},[33,60064,12879],{"class":63},[33,60066,3908],{"class":39},[33,60068,15222],{"class":63},[33,60070,60071],{"class":39}," 10\n",[33,60073,60074,60076,60078,60080,60082,60084,60086,60088],{"class":35,"line":1348},[33,60075,12879],{"class":63},[33,60077,56035],{"class":39},[33,60079,15222],{"class":63},[33,60081,56040],{"class":59},[33,60083,56043],{"class":3632},[33,60085,109],{"class":59},[33,60087,59847],{"class":117},[33,60089,157],{"class":59},[33,60091,60092,60094,60096,60098,60100,60102,60104],{"class":35,"line":1529},[33,60093,59854],{"class":59},[33,60095,59456],{"class":3632},[33,60097,109],{"class":59},[33,60099,59461],{"class":117},[33,60101,14093],{"class":59},[33,60103,56093],{"class":63},[33,60105,56096],{"class":59},[33,60107,60108,60110,60112,60114,60116,60118],{"class":35,"line":1546},[33,60109,59871],{"class":63},[33,60111,3908],{"class":39},[33,60113,15222],{"class":63},[33,60115,59878],{"class":59},[33,60117,59503],{"class":3632},[33,60119,943],{"class":59},[33,60121,60122,60124,60126],{"class":35,"line":1551},[33,60123,59887],{"class":59},[33,60125,59890],{"class":3632},[33,60127,1837],{"class":59},[33,60129,60130],{"class":35,"line":1566},[33,60131,35108],{"class":59},[33,60133,60134,60136,60138],{"class":35,"line":1578},[33,60135,54062],{"class":59},[33,60137,53458],{"class":52945},[33,60139,52952],{"class":59},[33,60141,60142,60144,60146],{"class":35,"line":1583},[33,60143,53430],{"class":59},[33,60145,53445],{"class":52945},[33,60147,52952],{"class":59},[33,60149,60150],{"class":35,"line":3369},[33,60151,127],{"emptyLinePlaceholder":126},[33,60153,60154,60156,60158],{"class":35,"line":3396},[33,60155,53430],{"class":59},[33,60157,52280],{"class":52945},[33,60159,52952],{"class":59},[19,60161,60162],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[23,60164,60166],{"className":52278,"code":60165,"language":52280,"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,60167,60168,60178,60192,60196,60204,60218,60238,60250,60258,60262,60270,60282,60290,60300,60318,60334,60347,60355,60359,60367,60375,60379],{"__ignoreMap":28},[33,60169,60170,60172,60174,60176],{"class":35,"line":36},[33,60171,52942],{"class":59},[33,60173,52946],{"class":52945},[33,60175,52949],{"class":3632},[33,60177,52952],{"class":59},[33,60179,60180,60182,60184,60186,60188,60190],{"class":35,"line":43},[33,60181,2726],{"class":59},[33,60183,52280],{"class":52945},[33,60185,52961],{"class":3632},[33,60187,64],{"class":59},[33,60189,52966],{"class":117},[33,60191,52952],{"class":59},[33,60193,60194],{"class":35,"line":130},[33,60195,127],{"emptyLinePlaceholder":126},[33,60197,60198,60200,60202],{"class":35,"line":146},[33,60199,2726],{"class":59},[33,60201,52979],{"class":52945},[33,60203,52952],{"class":59},[33,60205,60206,60208,60210,60212,60214,60216],{"class":35,"line":267},[33,60207,53789],{"class":59},[33,60209,52989],{"class":52945},[33,60211,52992],{"class":3632},[33,60213,64],{"class":59},[33,60215,52997],{"class":117},[33,60217,52952],{"class":59},[33,60219,60220,60222,60224,60226,60228,60230,60232,60234,60236],{"class":35,"line":275},[33,60221,53789],{"class":59},[33,60223,52989],{"class":52945},[33,60225,16578],{"class":3632},[33,60227,64],{"class":59},[33,60229,53036],{"class":117},[33,60231,53016],{"class":3632},[33,60233,64],{"class":59},[33,60235,53043],{"class":117},[33,60237,52952],{"class":59},[33,60239,60240,60242,60244,60246,60248],{"class":35,"line":392},[33,60241,53789],{"class":59},[33,60243,53052],{"class":52945},[33,60245,53055],{"class":59},[33,60247,53052],{"class":52945},[33,60249,52952],{"class":59},[33,60251,60252,60254,60256],{"class":35,"line":406},[33,60253,53430],{"class":59},[33,60255,52979],{"class":52945},[33,60257,52952],{"class":59},[33,60259,60260],{"class":35,"line":418},[33,60261,127],{"emptyLinePlaceholder":126},[33,60263,60264,60266,60268],{"class":35,"line":425},[33,60265,2726],{"class":59},[33,60267,53445],{"class":52945},[33,60269,52952],{"class":59},[33,60271,60272,60274,60276,60278,60280],{"class":35,"line":1147},[33,60273,53789],{"class":59},[33,60275,55531],{"class":52945},[33,60277,55537],{"class":59},[33,60279,55531],{"class":52945},[33,60281,52952],{"class":59},[33,60283,60284,60286,60288],{"class":35,"line":1329},[33,60285,53789],{"class":59},[33,60287,53458],{"class":52945},[33,60289,52952],{"class":59},[33,60291,60292,60294,60296,60298],{"class":35,"line":1341},[33,60293,12879],{"class":63},[33,60295,3908],{"class":39},[33,60297,15222],{"class":63},[33,60299,60071],{"class":39},[33,60301,60302,60304,60306,60308,60310,60312,60314,60316],{"class":35,"line":1348},[33,60303,12879],{"class":63},[33,60305,56035],{"class":39},[33,60307,15222],{"class":63},[33,60309,56040],{"class":59},[33,60311,56043],{"class":3632},[33,60313,109],{"class":59},[33,60315,59847],{"class":117},[33,60317,157],{"class":59},[33,60319,60320,60322,60324,60326,60328,60330,60332],{"class":35,"line":1529},[33,60321,59854],{"class":59},[33,60323,59456],{"class":3632},[33,60325,109],{"class":59},[33,60327,59461],{"class":117},[33,60329,14093],{"class":59},[33,60331,56093],{"class":63},[33,60333,56096],{"class":59},[33,60335,60336,60339,60341,60343,60345],{"class":35,"line":1546},[33,60337,60338],{"class":59},"      num ",[33,60340,64],{"class":63},[33,60342,59878],{"class":59},[33,60344,59503],{"class":3632},[33,60346,943],{"class":59},[33,60348,60349,60351,60353],{"class":35,"line":1551},[33,60350,59887],{"class":59},[33,60352,59890],{"class":3632},[33,60354,1837],{"class":59},[33,60356,60357],{"class":35,"line":1566},[33,60358,35108],{"class":59},[33,60360,60361,60363,60365],{"class":35,"line":1578},[33,60362,54062],{"class":59},[33,60364,53458],{"class":52945},[33,60366,52952],{"class":59},[33,60368,60369,60371,60373],{"class":35,"line":1583},[33,60370,53430],{"class":59},[33,60372,53445],{"class":52945},[33,60374,52952],{"class":59},[33,60376,60377],{"class":35,"line":3369},[33,60378,127],{"emptyLinePlaceholder":126},[33,60380,60381,60383,60385],{"class":35,"line":3396},[33,60382,53430],{"class":59},[33,60384,52280],{"class":52945},[33,60386,52952],{"class":59},[19,60388,60389],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[633,60391,60393],{"id":60392},"_324-事件监听版本","3.2.4 事件监听版本",[19,60395,60396],{},[3145,60397],{"alt":28,"src":60398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60400,60401],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60403,60404],{},"这种方式会覆盖前边的事件监听:",[23,60406,60408],{"className":52278,"code":60407,"language":52280,"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,60409,60410,60420,60434,60438,60446,60460,60480,60492,60500,60504,60512,60524,60532,60550,60564,60575,60579,60591,60601,60605,60613,60621,60625],{"__ignoreMap":28},[33,60411,60412,60414,60416,60418],{"class":35,"line":36},[33,60413,52942],{"class":59},[33,60415,52946],{"class":52945},[33,60417,52949],{"class":3632},[33,60419,52952],{"class":59},[33,60421,60422,60424,60426,60428,60430,60432],{"class":35,"line":43},[33,60423,2726],{"class":59},[33,60425,52280],{"class":52945},[33,60427,52961],{"class":3632},[33,60429,64],{"class":59},[33,60431,52966],{"class":117},[33,60433,52952],{"class":59},[33,60435,60436],{"class":35,"line":130},[33,60437,127],{"emptyLinePlaceholder":126},[33,60439,60440,60442,60444],{"class":35,"line":146},[33,60441,2726],{"class":59},[33,60443,52979],{"class":52945},[33,60445,52952],{"class":59},[33,60447,60448,60450,60452,60454,60456,60458],{"class":35,"line":267},[33,60449,53789],{"class":59},[33,60451,52989],{"class":52945},[33,60453,52992],{"class":3632},[33,60455,64],{"class":59},[33,60457,52997],{"class":117},[33,60459,52952],{"class":59},[33,60461,60462,60464,60466,60468,60470,60472,60474,60476,60478],{"class":35,"line":275},[33,60463,53789],{"class":59},[33,60465,52989],{"class":52945},[33,60467,16578],{"class":3632},[33,60469,64],{"class":59},[33,60471,53036],{"class":117},[33,60473,53016],{"class":3632},[33,60475,64],{"class":59},[33,60477,53043],{"class":117},[33,60479,52952],{"class":59},[33,60481,60482,60484,60486,60488,60490],{"class":35,"line":392},[33,60483,53789],{"class":59},[33,60485,53052],{"class":52945},[33,60487,53055],{"class":59},[33,60489,53052],{"class":52945},[33,60491,52952],{"class":59},[33,60493,60494,60496,60498],{"class":35,"line":406},[33,60495,53430],{"class":59},[33,60497,52979],{"class":52945},[33,60499,52952],{"class":59},[33,60501,60502],{"class":35,"line":418},[33,60503,127],{"emptyLinePlaceholder":126},[33,60505,60506,60508,60510],{"class":35,"line":425},[33,60507,2726],{"class":59},[33,60509,53445],{"class":52945},[33,60511,52952],{"class":59},[33,60513,60514,60516,60518,60520,60522],{"class":35,"line":1147},[33,60515,53789],{"class":59},[33,60517,55531],{"class":52945},[33,60519,55537],{"class":59},[33,60521,55531],{"class":52945},[33,60523,52952],{"class":59},[33,60525,60526,60528,60530],{"class":35,"line":1329},[33,60527,53789],{"class":59},[33,60529,53458],{"class":52945},[33,60531,52952],{"class":59},[33,60533,60534,60536,60538,60540,60542,60544,60546,60548],{"class":35,"line":1341},[33,60535,12879],{"class":63},[33,60537,56035],{"class":39},[33,60539,15222],{"class":63},[33,60541,56040],{"class":59},[33,60543,56043],{"class":3632},[33,60545,109],{"class":59},[33,60547,59847],{"class":117},[33,60549,157],{"class":59},[33,60551,60552,60554,60557,60559,60562],{"class":35,"line":1348},[33,60553,59854],{"class":59},[33,60555,60556],{"class":3632},"onclick",[33,60558,15222],{"class":63},[33,60560,60561],{"class":63}," function",[33,60563,56096],{"class":59},[33,60565,60566,60569,60571,60573],{"class":35,"line":1529},[33,60567,60568],{"class":3632},"      alert",[33,60570,109],{"class":59},[33,60572,2289],{"class":39},[33,60574,157],{"class":59},[33,60576,60577],{"class":35,"line":1546},[33,60578,3855],{"class":59},[33,60580,60581,60583,60585,60587,60589],{"class":35,"line":1551},[33,60582,59854],{"class":59},[33,60584,60556],{"class":3632},[33,60586,15222],{"class":63},[33,60588,60561],{"class":63},[33,60590,56096],{"class":59},[33,60592,60593,60595,60597,60599],{"class":35,"line":1566},[33,60594,60568],{"class":3632},[33,60596,109],{"class":59},[33,60598,2567],{"class":39},[33,60600,157],{"class":59},[33,60602,60603],{"class":35,"line":1578},[33,60604,3855],{"class":59},[33,60606,60607,60609,60611],{"class":35,"line":1583},[33,60608,54062],{"class":59},[33,60610,53458],{"class":52945},[33,60612,52952],{"class":59},[33,60614,60615,60617,60619],{"class":35,"line":3369},[33,60616,53430],{"class":59},[33,60618,53445],{"class":52945},[33,60620,52952],{"class":59},[33,60622,60623],{"class":35,"line":3396},[33,60624,127],{"emptyLinePlaceholder":126},[33,60626,60627,60629,60631],{"class":35,"line":3401},[33,60628,53430],{"class":59},[33,60630,52280],{"class":52945},[33,60632,52952],{"class":59},[19,60634,60635],{},"只要点击就输出结果为22,前边11被覆盖了",[23,60637,60639],{"className":52278,"code":60638,"language":52280,"meta":28,"style":28},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[30,60640,60641,60646,60651,60655,60660,60665],{"__ignoreMap":28},[33,60642,60643],{"class":35,"line":36},[33,60644,60645],{"class":59},"  btn.addEventListener('click', function () {\n",[33,60647,60648],{"class":35,"line":43},[33,60649,60650],{"class":59},"      alert(11)\n",[33,60652,60653],{"class":35,"line":130},[33,60654,35108],{"class":59},[33,60656,60657],{"class":35,"line":146},[33,60658,60659],{"class":59},"    btn.addEventListener('click', function () {\n",[33,60661,60662],{"class":35,"line":267},[33,60663,60664],{"class":59},"      alert(22)\n",[33,60666,60667],{"class":35,"line":275},[33,60668,35108],{"class":59},[19,60670,60671],{},"点击第一次输出11,第二次点击为22",[633,60673,60675],{"id":60674},"_325-事件类型","3.2.5 事件类型",[19,60677,60678],{},[3145,60679],{"alt":28,"src":60680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23653,60682,60684],{"id":60683},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60686,60687],{},"补充知识:",[19,60689,60690],{},"轮播图自动播放模块,可以使用",[19,60692,60693],{},"let timerId = setInterval(function () {",[19,60695,60696],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60698,60699],{},"用js方法模拟进行点击事件,click必须加()",[19,60701,60702],{},"next.click()",[19,60704,60705],{},"}, 1000)",[19,60707,60708],{},[3145,60709],{"alt":28,"src":60710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[23,60712,60714],{"className":54712,"code":60713,"language":54714,"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,60715,60716,60720,60730,60744,60748,60756,60771,60791,60811,60824,60832,60837,60842,60846,60850,60855,60860,60865,60870,60874,60878,60883,60888,60893,60897,60901,60906,60910,60915,60920,60924,60928,60933,60938,60943,60948,60953,60957,60961,60966,60971,60976,60981,60986,60990,60994,60999,61004,61009,61014,61019,61024,61029,61034,61039,61044,61048,61052,61057,61062,61066,61070,61075,61080,61084,61089,61094,61098,61102,61107,61111,61116,61121,61125,61130,61134,61138,61143,61148,61153,61158,61163,61168,61173,61177,61181,61185,61190,61195,61200,61205,61209,61217,61225,61229,61237,61252,61266,61287,61295,61309,61322,61337,61356,61368,61380,61392,61404,61416,61428,61440,61448,61463,61487,61511,61519,61527,61535,61543,61548,61553,61558,61563,61568,61573,61578,61583,61588,61593,61597,61602,61607,61612,61617,61622,61627,61632,61637,61642,61646,61651,61656,61661,61666,61671,61676,61681,61686,61691,61696,61701,61706,61710,61714,61719,61724,61729,61733,61738,61743,61748,61753,61758,61762,61767,61771,61775,61779,61783,61787,61791,61796,61801,61806,61811,61816,61821,61826,61831,61836,61840,61844,61849,61854,61859,61864,61869,61873,61878,61883,61888,61893,61898,61903,61907,61911,61916,61920,61925,61929,61934,61939,61944,61949,61954,61959,61963,61971,61979,61983],{"__ignoreMap":28},[33,60717,60718],{"class":35,"line":36},[33,60719,127],{"emptyLinePlaceholder":126},[33,60721,60722,60724,60726,60728],{"class":35,"line":43},[33,60723,52942],{"class":59},[33,60725,52946],{"class":63},[33,60727,52949],{"class":39},[33,60729,52952],{"class":59},[33,60731,60732,60734,60736,60738,60740,60742],{"class":35,"line":130},[33,60733,2726],{"class":59},[33,60735,52280],{"class":52945},[33,60737,52961],{"class":3632},[33,60739,64],{"class":59},[33,60741,52966],{"class":117},[33,60743,52952],{"class":59},[33,60745,60746],{"class":35,"line":146},[33,60747,127],{"emptyLinePlaceholder":126},[33,60749,60750,60752,60754],{"class":35,"line":267},[33,60751,2726],{"class":59},[33,60753,52979],{"class":52945},[33,60755,52952],{"class":59},[33,60757,60758,60760,60762,60764,60766,60768],{"class":35,"line":275},[33,60759,53789],{"class":59},[33,60761,52989],{"class":52945},[33,60763,52992],{"class":3632},[33,60765,64],{"class":59},[33,60767,52997],{"class":117},[33,60769,60770],{"class":59}," \u002F>\n",[33,60772,60773,60775,60777,60779,60781,60783,60785,60787,60789],{"class":35,"line":392},[33,60774,53789],{"class":59},[33,60776,52989],{"class":52945},[33,60778,53008],{"class":3632},[33,60780,64],{"class":59},[33,60782,53013],{"class":117},[33,60784,53016],{"class":3632},[33,60786,64],{"class":59},[33,60788,53021],{"class":117},[33,60790,60770],{"class":59},[33,60792,60793,60795,60797,60799,60801,60803,60805,60807,60809],{"class":35,"line":406},[33,60794,53789],{"class":59},[33,60796,52989],{"class":52945},[33,60798,16578],{"class":3632},[33,60800,64],{"class":59},[33,60802,53036],{"class":117},[33,60804,53016],{"class":3632},[33,60806,64],{"class":59},[33,60808,53043],{"class":117},[33,60810,60770],{"class":59},[33,60812,60813,60815,60817,60820,60822],{"class":35,"line":418},[33,60814,53789],{"class":59},[33,60816,53052],{"class":52945},[33,60818,60819],{"class":59},">轮播图点击切换\u003C\u002F",[33,60821,53052],{"class":52945},[33,60823,52952],{"class":59},[33,60825,60826,60828,60830],{"class":35,"line":425},[33,60827,53789],{"class":59},[33,60829,1729],{"class":52945},[33,60831,52952],{"class":59},[33,60833,60834],{"class":35,"line":1147},[33,60835,60836],{"class":59},"    * {\n",[33,60838,60839],{"class":35,"line":1329},[33,60840,60841],{"class":59},"      box-sizing: border-box;\n",[33,60843,60844],{"class":35,"line":1341},[33,60845,3855],{"class":59},[33,60847,60848],{"class":35,"line":1348},[33,60849,127],{"emptyLinePlaceholder":126},[33,60851,60852],{"class":35,"line":1529},[33,60853,60854],{"class":59},"    .slider {\n",[33,60856,60857],{"class":35,"line":1546},[33,60858,60859],{"class":59},"      width: 560px;\n",[33,60861,60862],{"class":35,"line":1551},[33,60863,60864],{"class":59},"      height: 400px;\n",[33,60866,60867],{"class":35,"line":1566},[33,60868,60869],{"class":59},"      overflow: hidden;\n",[33,60871,60872],{"class":35,"line":1578},[33,60873,3855],{"class":59},[33,60875,60876],{"class":35,"line":1583},[33,60877,127],{"emptyLinePlaceholder":126},[33,60879,60880],{"class":35,"line":3369},[33,60881,60882],{"class":59},"    .slider-wrapper {\n",[33,60884,60885],{"class":35,"line":3396},[33,60886,60887],{"class":59},"      width: 100%;\n",[33,60889,60890],{"class":35,"line":3401},[33,60891,60892],{"class":59},"      height: 320px;\n",[33,60894,60895],{"class":35,"line":3418},[33,60896,3855],{"class":59},[33,60898,60899],{"class":35,"line":3423},[33,60900,127],{"emptyLinePlaceholder":126},[33,60902,60903],{"class":35,"line":3428},[33,60904,60905],{"class":59},"    .slider-wrapper img {\n",[33,60907,60908],{"class":35,"line":3433},[33,60909,60887],{"class":59},[33,60911,60912],{"class":35,"line":3447},[33,60913,60914],{"class":59},"      height: 100%;\n",[33,60916,60917],{"class":35,"line":3452},[33,60918,60919],{"class":59},"      display: block;\n",[33,60921,60922],{"class":35,"line":4243},[33,60923,3855],{"class":59},[33,60925,60926],{"class":35,"line":4257},[33,60927,127],{"emptyLinePlaceholder":126},[33,60929,60930],{"class":35,"line":4265},[33,60931,60932],{"class":59},"    .slider-footer {\n",[33,60934,60935],{"class":35,"line":4270},[33,60936,60937],{"class":59},"      height: 80px;\n",[33,60939,60940],{"class":35,"line":4276},[33,60941,60942],{"class":59},"      background-color: rgb(100, 67, 68);\n",[33,60944,60945],{"class":35,"line":4282},[33,60946,60947],{"class":59},"      padding: 12px 12px 0 12px;\n",[33,60949,60950],{"class":35,"line":4287},[33,60951,60952],{"class":59},"      position: relative;\n",[33,60954,60955],{"class":35,"line":9608},[33,60956,3855],{"class":59},[33,60958,60959],{"class":35,"line":9632},[33,60960,127],{"emptyLinePlaceholder":126},[33,60962,60963],{"class":35,"line":9637},[33,60964,60965],{"class":59},"    .slider-footer .toggle {\n",[33,60967,60968],{"class":35,"line":9643},[33,60969,60970],{"class":59},"      position: absolute;\n",[33,60972,60973],{"class":35,"line":9670},[33,60974,60975],{"class":59},"      right: 0;\n",[33,60977,60978],{"class":35,"line":9675},[33,60979,60980],{"class":59},"      top: 12px;\n",[33,60982,60983],{"class":35,"line":9681},[33,60984,60985],{"class":59},"      display: flex;\n",[33,60987,60988],{"class":35,"line":9693},[33,60989,3855],{"class":59},[33,60991,60992],{"class":35,"line":9705},[33,60993,127],{"emptyLinePlaceholder":126},[33,60995,60996],{"class":35,"line":9717},[33,60997,60998],{"class":59},"    .slider-footer .toggle button {\n",[33,61000,61001],{"class":35,"line":11375},[33,61002,61003],{"class":59},"      margin-right: 12px;\n",[33,61005,61006],{"class":35,"line":11400},[33,61007,61008],{"class":59},"      width: 28px;\n",[33,61010,61011],{"class":35,"line":11423},[33,61012,61013],{"class":59},"      height: 28px;\n",[33,61015,61016],{"class":35,"line":11447},[33,61017,61018],{"class":59},"      appearance: none;\n",[33,61020,61021],{"class":35,"line":11452},[33,61022,61023],{"class":59},"      border: none;\n",[33,61025,61026],{"class":35,"line":11457},[33,61027,61028],{"class":59},"      background: rgba(255, 255, 255, 0.1);\n",[33,61030,61031],{"class":35,"line":11462},[33,61032,61033],{"class":59},"      color: #fff;\n",[33,61035,61036],{"class":35,"line":11471},[33,61037,61038],{"class":59},"      border-radius: 4px;\n",[33,61040,61041],{"class":35,"line":11476},[33,61042,61043],{"class":59},"      cursor: pointer;\n",[33,61045,61046],{"class":35,"line":11482},[33,61047,3855],{"class":59},[33,61049,61050],{"class":35,"line":11503},[33,61051,127],{"emptyLinePlaceholder":126},[33,61053,61054],{"class":35,"line":11509},[33,61055,61056],{"class":59},"    .slider-footer .toggle button:hover {\n",[33,61058,61059],{"class":35,"line":11523},[33,61060,61061],{"class":59},"      background: rgba(255, 255, 255, 0.2);\n",[33,61063,61064],{"class":35,"line":11529},[33,61065,3855],{"class":59},[33,61067,61068],{"class":35,"line":11556},[33,61069,127],{"emptyLinePlaceholder":126},[33,61071,61072],{"class":35,"line":11565},[33,61073,61074],{"class":59},"    .slider-footer p {\n",[33,61076,61077],{"class":35,"line":11571},[33,61078,61079],{"class":59},"      margin: 0;\n",[33,61081,61082],{"class":35,"line":11579},[33,61083,61033],{"class":59},[33,61085,61086],{"class":35,"line":11584},[33,61087,61088],{"class":59},"      font-size: 18px;\n",[33,61090,61091],{"class":35,"line":18259},[33,61092,61093],{"class":59},"      margin-bottom: 10px;\n",[33,61095,61096],{"class":35,"line":18265},[33,61097,3855],{"class":59},[33,61099,61100],{"class":35,"line":18288},[33,61101,127],{"emptyLinePlaceholder":126},[33,61103,61104],{"class":35,"line":18294},[33,61105,61106],{"class":59},"    .slider-indicator {\n",[33,61108,61109],{"class":35,"line":18317},[33,61110,61079],{"class":59},[33,61112,61113],{"class":35,"line":18331},[33,61114,61115],{"class":59},"      padding: 0;\n",[33,61117,61118],{"class":35,"line":18351},[33,61119,61120],{"class":59},"      list-style: none;\n",[33,61122,61123],{"class":35,"line":18357},[33,61124,60985],{"class":59},[33,61126,61127],{"class":35,"line":18368},[33,61128,61129],{"class":59},"      align-items: center;\n",[33,61131,61132],{"class":35,"line":18391},[33,61133,3855],{"class":59},[33,61135,61136],{"class":35,"line":18413},[33,61137,127],{"emptyLinePlaceholder":126},[33,61139,61140],{"class":35,"line":18418},[33,61141,61142],{"class":59},"    .slider-indicator li {\n",[33,61144,61145],{"class":35,"line":18424},[33,61146,61147],{"class":59},"      width: 8px;\n",[33,61149,61150],{"class":35,"line":18438},[33,61151,61152],{"class":59},"      height: 8px;\n",[33,61154,61155],{"class":35,"line":18451},[33,61156,61157],{"class":59},"      margin: 4px;\n",[33,61159,61160],{"class":35,"line":18456},[33,61161,61162],{"class":59},"      border-radius: 50%;\n",[33,61164,61165],{"class":35,"line":18470},[33,61166,61167],{"class":59},"      background: #fff;\n",[33,61169,61170],{"class":35,"line":18475},[33,61171,61172],{"class":59},"      opacity: 0.4;\n",[33,61174,61175],{"class":35,"line":18481},[33,61176,61043],{"class":59},[33,61178,61179],{"class":35,"line":18486},[33,61180,3855],{"class":59},[33,61182,61183],{"class":35,"line":18500},[33,61184,127],{"emptyLinePlaceholder":126},[33,61186,61187],{"class":35,"line":18505},[33,61188,61189],{"class":59},"    .slider-indicator li.active {\n",[33,61191,61192],{"class":35,"line":18510},[33,61193,61194],{"class":59},"      width: 12px;\n",[33,61196,61197],{"class":35,"line":18524},[33,61198,61199],{"class":59},"      height: 12px;\n",[33,61201,61202],{"class":35,"line":18536},[33,61203,61204],{"class":59},"      opacity: 1;\n",[33,61206,61207],{"class":35,"line":18541},[33,61208,3855],{"class":59},[33,61210,61211,61213,61215],{"class":35,"line":18554},[33,61212,54062],{"class":59},[33,61214,1729],{"class":52945},[33,61216,52952],{"class":59},[33,61218,61219,61221,61223],{"class":35,"line":18559},[33,61220,53430],{"class":59},[33,61222,52979],{"class":52945},[33,61224,52952],{"class":59},[33,61226,61227],{"class":35,"line":18564},[33,61228,127],{"emptyLinePlaceholder":126},[33,61230,61231,61233,61235],{"class":35,"line":18569},[33,61232,2726],{"class":59},[33,61234,53445],{"class":52945},[33,61236,52952],{"class":59},[33,61238,61239,61241,61243,61245,61247,61250],{"class":35,"line":18582},[33,61240,53789],{"class":59},[33,61242,53256],{"class":52945},[33,61244,55131],{"class":3632},[33,61246,64],{"class":59},[33,61248,61249],{"class":117},"\"slider\"",[33,61251,52952],{"class":59},[33,61253,61254,61256,61258,61260,61262,61264],{"class":35,"line":18587},[33,61255,52986],{"class":59},[33,61257,53256],{"class":52945},[33,61259,55131],{"class":3632},[33,61261,64],{"class":59},[33,61263,56871],{"class":117},[33,61265,52952],{"class":59},[33,61267,61268,61270,61272,61274,61276,61279,61281,61283,61285],{"class":35,"line":34280},[33,61269,56878],{"class":59},[33,61271,3145],{"class":52945},[33,61273,56883],{"class":3632},[33,61275,64],{"class":59},[33,61277,61278],{"class":117},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,61280,56891],{"class":3632},[33,61282,64],{"class":59},[33,61284,9312],{"class":117},[33,61286,60770],{"class":59},[33,61288,61289,61291,61293],{"class":35,"line":34286},[33,61290,53421],{"class":59},[33,61292,53256],{"class":52945},[33,61294,52952],{"class":59},[33,61296,61297,61299,61301,61303,61305,61307],{"class":35,"line":34292},[33,61298,52986],{"class":59},[33,61300,53256],{"class":52945},[33,61302,55131],{"class":3632},[33,61304,64],{"class":59},[33,61306,56918],{"class":117},[33,61308,52952],{"class":59},[33,61310,61311,61313,61315,61318,61320],{"class":35,"line":34298},[33,61312,56878],{"class":59},[33,61314,19],{"class":52945},[33,61316,61317],{"class":59},">对人类来说会不会太超前了？\u003C\u002F",[33,61319,19],{"class":52945},[33,61321,52952],{"class":59},[33,61323,61324,61326,61328,61330,61332,61335],{"class":35,"line":34304},[33,61325,56878],{"class":59},[33,61327,2822],{"class":52945},[33,61329,55131],{"class":3632},[33,61331,64],{"class":59},[33,61333,61334],{"class":117},"\"slider-indicator\"",[33,61336,52952],{"class":59},[33,61338,61339,61341,61343,61345,61347,61350,61352,61354],{"class":35,"line":34315},[33,61340,56946],{"class":59},[33,61342,165],{"class":52945},[33,61344,55131],{"class":3632},[33,61346,64],{"class":59},[33,61348,61349],{"class":117},"\"active\"",[33,61351,56958],{"class":59},[33,61353,165],{"class":52945},[33,61355,52952],{"class":59},[33,61357,61358,61360,61362,61364,61366],{"class":35,"line":34321},[33,61359,56946],{"class":59},[33,61361,165],{"class":52945},[33,61363,56958],{"class":59},[33,61365,165],{"class":52945},[33,61367,52952],{"class":59},[33,61369,61370,61372,61374,61376,61378],{"class":35,"line":34341},[33,61371,56946],{"class":59},[33,61373,165],{"class":52945},[33,61375,56958],{"class":59},[33,61377,165],{"class":52945},[33,61379,52952],{"class":59},[33,61381,61382,61384,61386,61388,61390],{"class":35,"line":34347},[33,61383,56946],{"class":59},[33,61385,165],{"class":52945},[33,61387,56958],{"class":59},[33,61389,165],{"class":52945},[33,61391,52952],{"class":59},[33,61393,61394,61396,61398,61400,61402],{"class":35,"line":34358},[33,61395,56946],{"class":59},[33,61397,165],{"class":52945},[33,61399,56958],{"class":59},[33,61401,165],{"class":52945},[33,61403,52952],{"class":59},[33,61405,61406,61408,61410,61412,61414],{"class":35,"line":34364},[33,61407,56946],{"class":59},[33,61409,165],{"class":52945},[33,61411,56958],{"class":59},[33,61413,165],{"class":52945},[33,61415,52952],{"class":59},[33,61417,61418,61420,61422,61424,61426],{"class":35,"line":34370},[33,61419,56946],{"class":59},[33,61421,165],{"class":52945},[33,61423,56958],{"class":59},[33,61425,165],{"class":52945},[33,61427,52952],{"class":59},[33,61429,61430,61432,61434,61436,61438],{"class":35,"line":34376},[33,61431,56946],{"class":59},[33,61433,165],{"class":52945},[33,61435,56958],{"class":59},[33,61437,165],{"class":52945},[33,61439,52952],{"class":59},[33,61441,61442,61444,61446],{"class":35,"line":34382},[33,61443,57051],{"class":59},[33,61445,2822],{"class":52945},[33,61447,52952],{"class":59},[33,61449,61450,61452,61454,61456,61458,61461],{"class":35,"line":34388},[33,61451,56878],{"class":59},[33,61453,53256],{"class":52945},[33,61455,55131],{"class":3632},[33,61457,64],{"class":59},[33,61459,61460],{"class":117},"\"toggle\"",[33,61462,52952],{"class":59},[33,61464,61465,61467,61469,61471,61473,61476,61478,61481,61483,61485],{"class":35,"line":34394},[33,61466,56946],{"class":59},[33,61468,55531],{"class":52945},[33,61470,55131],{"class":3632},[33,61472,64],{"class":59},[33,61474,61475],{"class":117},"\"prev\"",[33,61477,2775],{"class":59},[33,61479,61480],{"class":39},"&lt;",[33,61482,53430],{"class":59},[33,61484,55531],{"class":52945},[33,61486,52952],{"class":59},[33,61488,61489,61491,61493,61495,61497,61500,61502,61505,61507,61509],{"class":35,"line":34400},[33,61490,56946],{"class":59},[33,61492,55531],{"class":52945},[33,61494,55131],{"class":3632},[33,61496,64],{"class":59},[33,61498,61499],{"class":117},"\"next\"",[33,61501,2775],{"class":59},[33,61503,61504],{"class":39},"&gt;",[33,61506,53430],{"class":59},[33,61508,55531],{"class":52945},[33,61510,52952],{"class":59},[33,61512,61513,61515,61517],{"class":35,"line":34420},[33,61514,57051],{"class":59},[33,61516,53256],{"class":52945},[33,61518,52952],{"class":59},[33,61520,61521,61523,61525],{"class":35,"line":34426},[33,61522,53421],{"class":59},[33,61524,53256],{"class":52945},[33,61526,52952],{"class":59},[33,61528,61529,61531,61533],{"class":35,"line":34442},[33,61530,54062],{"class":59},[33,61532,53256],{"class":52945},[33,61534,52952],{"class":59},[33,61536,61537,61539,61541],{"class":35,"line":34448},[33,61538,53789],{"class":59},[33,61540,53458],{"class":52945},[33,61542,52952],{"class":59},[33,61544,61545],{"class":35,"line":34462},[33,61546,61547],{"class":59},"    \u002F\u002F 1. 初始数据\n",[33,61549,61550],{"class":35,"line":34468},[33,61551,61552],{"class":59},"    const data = [\n",[33,61554,61555],{"class":35,"line":34483},[33,61556,61557],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[33,61559,61560],{"class":35,"line":34489},[33,61561,61562],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[33,61564,61565],{"class":35,"line":34498},[33,61566,61567],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[33,61569,61570],{"class":35,"line":34504},[33,61571,61572],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[33,61574,61575],{"class":35,"line":34513},[33,61576,61577],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[33,61579,61580],{"class":35,"line":34519},[33,61581,61582],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[33,61584,61585],{"class":35,"line":34525},[33,61586,61587],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[33,61589,61590],{"class":35,"line":34534},[33,61591,61592],{"class":59},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[33,61594,61595],{"class":35,"line":34540},[33,61596,54754],{"class":59},[33,61598,61599],{"class":35,"line":34551},[33,61600,61601],{"class":59},"    \u002F\u002F 获取元素\n",[33,61603,61604],{"class":35,"line":34557},[33,61605,61606],{"class":59},"    const img = document.querySelector('.slider-wrapper img')\n",[33,61608,61609],{"class":35,"line":34576},[33,61610,61611],{"class":59},"    const p = document.querySelector('.slider-footer p')\n",[33,61613,61614],{"class":35,"line":34582},[33,61615,61616],{"class":59},"    const footer = document.querySelector('.slider-footer')\n",[33,61618,61619],{"class":35,"line":34593},[33,61620,61621],{"class":59},"    \u002F\u002F 1. 右按钮业务\n",[33,61623,61624],{"class":35,"line":34599},[33,61625,61626],{"class":59},"    \u002F\u002F 1.1 获取右侧按钮 \n",[33,61628,61629],{"class":35,"line":34619},[33,61630,61631],{"class":59},"    const next = document.querySelector('.next')\n",[33,61633,61634],{"class":35,"line":34635},[33,61635,61636],{"class":59},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[33,61638,61639],{"class":35,"line":34641},[33,61640,61641],{"class":59},"    \u002F\u002F 1.2 注册点击事件\n",[33,61643,61644],{"class":35,"line":34655},[33,61645,127],{"emptyLinePlaceholder":126},[33,61647,61648],{"class":35,"line":34661},[33,61649,61650],{"class":59},"    next.addEventListener('click', function () {\n",[33,61652,61653],{"class":35,"line":34667},[33,61654,61655],{"class":59},"      \u002F\u002F console.log(11)\n",[33,61657,61658],{"class":35,"line":34678},[33,61659,61660],{"class":59},"      i++\n",[33,61662,61663],{"class":35,"line":34684},[33,61664,61665],{"class":59},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[33,61667,61668],{"class":35,"line":34690},[33,61669,61670],{"class":59},"      \u002F\u002F if (i >= 8) {\n",[33,61672,61673],{"class":35,"line":34700},[33,61674,61675],{"class":59},"      \u002F\u002F   i = 0\n",[33,61677,61678],{"class":35,"line":34706},[33,61679,61680],{"class":59},"      \u002F\u002F }\n",[33,61682,61683],{"class":35,"line":34717},[33,61684,61685],{"class":59},"      i = i >= data.length ? 0 : i\n",[33,61687,61688],{"class":35,"line":34723},[33,61689,61690],{"class":59},"      \u002F\u002F 1.3 得到对应的对象\n",[33,61692,61693],{"class":35,"line":34733},[33,61694,61695],{"class":59},"      \u002F\u002F console.log(data[i])\n",[33,61697,61698],{"class":35,"line":34738},[33,61699,61700],{"class":59},"      \u002F\u002F 调用函数\n",[33,61702,61703],{"class":35,"line":34744},[33,61704,61705],{"class":59},"      toggle()\n",[33,61707,61708],{"class":35,"line":34793},[33,61709,35108],{"class":59},[33,61711,61712],{"class":35,"line":34840},[33,61713,127],{"emptyLinePlaceholder":126},[33,61715,61716],{"class":35,"line":34845},[33,61717,61718],{"class":59},"    \u002F\u002F 2. 左侧按钮业务\n",[33,61720,61721],{"class":35,"line":34851},[33,61722,61723],{"class":59},"    \u002F\u002F 2.1 获取左侧按钮 \n",[33,61725,61726],{"class":35,"line":34870},[33,61727,61728],{"class":59},"    const prev = document.querySelector('.prev')\n",[33,61730,61731],{"class":35,"line":34876},[33,61732,61641],{"class":59},[33,61734,61735],{"class":35,"line":34896},[33,61736,61737],{"class":59},"    prev.addEventListener('click', function () {\n",[33,61739,61740],{"class":35,"line":34902},[33,61741,61742],{"class":59},"      i--\n",[33,61744,61745],{"class":35,"line":34908},[33,61746,61747],{"class":59},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[33,61749,61750],{"class":35,"line":34918},[33,61751,61752],{"class":59},"      \u002F\u002F if (i \u003C 0) {\n",[33,61754,61755],{"class":35,"line":34923},[33,61756,61757],{"class":59},"      \u002F\u002F   i = 7\n",[33,61759,61760],{"class":35,"line":34929},[33,61761,61680],{"class":59},[33,61763,61764],{"class":35,"line":34945},[33,61765,61766],{"class":59},"      i = i \u003C 0 ? data.length - 1 : i\n",[33,61768,61769],{"class":35,"line":34990},[33,61770,61690],{"class":59},[33,61772,61773],{"class":35,"line":34996},[33,61774,61695],{"class":59},[33,61776,61777],{"class":35,"line":35002},[33,61778,61700],{"class":59},[33,61780,61781],{"class":35,"line":35008},[33,61782,61705],{"class":59},[33,61784,61785],{"class":35,"line":35019},[33,61786,35108],{"class":59},[33,61788,61789],{"class":35,"line":35025},[33,61790,127],{"emptyLinePlaceholder":126},[33,61792,61793],{"class":35,"line":35031},[33,61794,61795],{"class":59},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[33,61797,61798],{"class":35,"line":35037},[33,61799,61800],{"class":59},"    function toggle() {\n",[33,61802,61803],{"class":35,"line":35055},[33,61804,61805],{"class":59},"      \u002F\u002F 1.4 渲染对应的数据\n",[33,61807,61808],{"class":35,"line":35069},[33,61809,61810],{"class":59},"      img.src = data[i].url\n",[33,61812,61813],{"class":35,"line":35078},[33,61814,61815],{"class":59},"      p.innerHTML = data[i].title\n",[33,61817,61818],{"class":35,"line":35087},[33,61819,61820],{"class":59},"      footer.style.backgroundColor = data[i].color\n",[33,61822,61823],{"class":35,"line":35096},[33,61824,61825],{"class":59},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[33,61827,61828],{"class":35,"line":35105},[33,61829,61830],{"class":59},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[33,61832,61833],{"class":35,"line":35111},[33,61834,61835],{"class":59},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[33,61837,61838],{"class":35,"line":35117},[33,61839,3855],{"class":59},[33,61841,61842],{"class":35,"line":35125},[33,61843,127],{"emptyLinePlaceholder":126},[33,61845,61846],{"class":35,"line":35130},[33,61847,61848],{"class":59},"    \u002F\u002F 3. 自动播放模块\n",[33,61850,61851],{"class":35,"line":35136},[33,61852,61853],{"class":59},"    let timerId = setInterval(function () {\n",[33,61855,61856],{"class":35,"line":35147},[33,61857,61858],{"class":59},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,61860,61861],{"class":35,"line":35153},[33,61862,61863],{"class":59},"      next.click()\n",[33,61865,61866],{"class":35,"line":35173},[33,61867,61868],{"class":59},"    }, 1000)\n",[33,61870,61871],{"class":35,"line":35179},[33,61872,127],{"emptyLinePlaceholder":126},[33,61874,61875],{"class":35,"line":35185},[33,61876,61877],{"class":59},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[33,61879,61880],{"class":35,"line":35191},[33,61881,61882],{"class":59},"    const slider = document.querySelector('.slider')\n",[33,61884,61885],{"class":35,"line":35208},[33,61886,61887],{"class":59},"    \u002F\u002F 注册事件\n",[33,61889,61890],{"class":35,"line":35214},[33,61891,61892],{"class":59},"    slider.addEventListener('mouseenter', function () {\n",[33,61894,61895],{"class":35,"line":35220},[33,61896,61897],{"class":59},"      \u002F\u002F 停止定时器\n",[33,61899,61900],{"class":35,"line":35226},[33,61901,61902],{"class":59},"      clearInterval(timerId)\n",[33,61904,61905],{"class":35,"line":35232},[33,61906,35108],{"class":59},[33,61908,61909],{"class":35,"line":35238},[33,61910,127],{"emptyLinePlaceholder":126},[33,61912,61913],{"class":35,"line":35265},[33,61914,61915],{"class":59},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[33,61917,61918],{"class":35,"line":35289},[33,61919,61887],{"class":59},[33,61921,61922],{"class":35,"line":35295},[33,61923,61924],{"class":59},"    slider.addEventListener('mouseleave', function () {\n",[33,61926,61927],{"class":35,"line":35301},[33,61928,61897],{"class":59},[33,61930,61931],{"class":35,"line":35307},[33,61932,61933],{"class":59},"      if (timerId) clearInterval(timerId)\n",[33,61935,61936],{"class":35,"line":35318},[33,61937,61938],{"class":59},"      \u002F\u002F 开启定时器\n",[33,61940,61941],{"class":35,"line":35329},[33,61942,61943],{"class":59},"      timerId = setInterval(function () {\n",[33,61945,61946],{"class":35,"line":35335},[33,61947,61948],{"class":59},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,61950,61951],{"class":35,"line":35352},[33,61952,61953],{"class":59},"        next.click()\n",[33,61955,61956],{"class":35,"line":35375},[33,61957,61958],{"class":59},"      }, 1000)\n",[33,61960,61961],{"class":35,"line":35398},[33,61962,35108],{"class":59},[33,61964,61965,61967,61969],{"class":35,"line":35404},[33,61966,54062],{"class":59},[33,61968,53458],{"class":52945},[33,61970,52952],{"class":59},[33,61972,61973,61975,61977],{"class":35,"line":35409},[33,61974,53430],{"class":59},[33,61976,53445],{"class":52945},[33,61978,52952],{"class":59},[33,61980,61981],{"class":35,"line":35418},[33,61982,127],{"emptyLinePlaceholder":126},[33,61984,61985,61987,61989],{"class":35,"line":35428},[33,61986,53430],{"class":59},[33,61988,52280],{"class":52945},[33,61990,52952],{"class":59},[23653,61992,61994],{"id":61993},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61996,61997],{},"小米搜索框案例：",[23,61999,62001],{"className":52278,"code":62000,"language":52280,"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,62002,62003,62013,62027,62031,62039,62053,62073,62093,62105,62113,62119,62129,62139,62151,62155,62159,62166,62170,62181,62185,62189,62196,62207,62220,62234,62238,62242,62250,62262,62274,62288,62301,62314,62332,62343,62347,62351,62360,62377,62381,62385,62392,62402,62412,62423,62436,62448,62464,62475,62487,62491,62495,62503,62514,62531,62543,62555,62566,62570,62574,62585,62596,62600,62608,62612,62620,62624,62632,62647,62670,62685,62716,62743,62770,62797,62824,62851,62878,62887,62895,62903,62908,62928,62948,62953,62958,62976,62981,62991,62996,63010,63015,63020,63037,63046,63058,63062,63070,63078,63082],{"__ignoreMap":28},[33,62004,62005,62007,62009,62011],{"class":35,"line":36},[33,62006,52942],{"class":59},[33,62008,52946],{"class":52945},[33,62010,52949],{"class":3632},[33,62012,52952],{"class":59},[33,62014,62015,62017,62019,62021,62023,62025],{"class":35,"line":43},[33,62016,2726],{"class":59},[33,62018,52280],{"class":52945},[33,62020,52961],{"class":3632},[33,62022,64],{"class":59},[33,62024,52966],{"class":117},[33,62026,52952],{"class":59},[33,62028,62029],{"class":35,"line":130},[33,62030,127],{"emptyLinePlaceholder":126},[33,62032,62033,62035,62037],{"class":35,"line":146},[33,62034,2726],{"class":59},[33,62036,52979],{"class":52945},[33,62038,52952],{"class":59},[33,62040,62041,62043,62045,62047,62049,62051],{"class":35,"line":267},[33,62042,52986],{"class":59},[33,62044,52989],{"class":52945},[33,62046,52992],{"class":3632},[33,62048,64],{"class":59},[33,62050,52997],{"class":117},[33,62052,52952],{"class":59},[33,62054,62055,62057,62059,62061,62063,62065,62067,62069,62071],{"class":35,"line":275},[33,62056,52986],{"class":59},[33,62058,52989],{"class":52945},[33,62060,53008],{"class":3632},[33,62062,64],{"class":59},[33,62064,53013],{"class":117},[33,62066,53016],{"class":3632},[33,62068,64],{"class":59},[33,62070,53021],{"class":117},[33,62072,52952],{"class":59},[33,62074,62075,62077,62079,62081,62083,62085,62087,62089,62091],{"class":35,"line":392},[33,62076,52986],{"class":59},[33,62078,52989],{"class":52945},[33,62080,16578],{"class":3632},[33,62082,64],{"class":59},[33,62084,53036],{"class":117},[33,62086,53016],{"class":3632},[33,62088,64],{"class":59},[33,62090,53043],{"class":117},[33,62092,52952],{"class":59},[33,62094,62095,62097,62099,62101,62103],{"class":35,"line":406},[33,62096,52986],{"class":59},[33,62098,53052],{"class":52945},[33,62100,53055],{"class":59},[33,62102,53052],{"class":52945},[33,62104,52952],{"class":59},[33,62106,62107,62109,62111],{"class":35,"line":418},[33,62108,52986],{"class":59},[33,62110,1729],{"class":52945},[33,62112,52952],{"class":59},[33,62114,62115,62117],{"class":35,"line":425},[33,62116,53072],{"class":52945},[33,62118,17228],{"class":59},[33,62120,62121,62123,62125,62127],{"class":35,"line":1147},[33,62122,53079],{"class":39},[33,62124,53082],{"class":59},[33,62126,2010],{"class":39},[33,62128,2976],{"class":59},[33,62130,62131,62133,62135,62137],{"class":35,"line":1329},[33,62132,53091],{"class":39},[33,62134,53082],{"class":59},[33,62136,2010],{"class":39},[33,62138,2976],{"class":59},[33,62140,62141,62144,62146,62149],{"class":35,"line":1341},[33,62142,62143],{"class":39},"            box-sizing",[33,62145,53082],{"class":59},[33,62147,62148],{"class":39},"border-box",[33,62150,2976],{"class":59},[33,62152,62153],{"class":35,"line":1348},[33,62154,4195],{"class":59},[33,62156,62157],{"class":35,"line":1529},[33,62158,127],{"emptyLinePlaceholder":126},[33,62160,62161,62164],{"class":35,"line":1546},[33,62162,62163],{"class":52945},"        ul",[33,62165,17228],{"class":59},[33,62167,62168],{"class":35,"line":1551},[33,62169,127],{"emptyLinePlaceholder":126},[33,62171,62172,62175,62177,62179],{"class":35,"line":1566},[33,62173,62174],{"class":39},"            list-style",[33,62176,53082],{"class":59},[33,62178,56381],{"class":39},[33,62180,2976],{"class":59},[33,62182,62183],{"class":35,"line":1578},[33,62184,4195],{"class":59},[33,62186,62187],{"class":35,"line":1583},[33,62188,127],{"emptyLinePlaceholder":126},[33,62190,62191,62194],{"class":35,"line":3369},[33,62192,62193],{"class":3632},"        .mi",[33,62195,17228],{"class":59},[33,62197,62198,62201,62203,62205],{"class":35,"line":3396},[33,62199,62200],{"class":39},"            position",[33,62202,53082],{"class":59},[33,62204,56408],{"class":39},[33,62206,2976],{"class":59},[33,62208,62209,62211,62213,62216,62218],{"class":35,"line":3401},[33,62210,53129],{"class":39},[33,62212,53082],{"class":59},[33,62214,62215],{"class":39},"223",[33,62217,53137],{"class":63},[33,62219,2976],{"class":59},[33,62221,62222,62224,62226,62228,62230,62232],{"class":35,"line":3418},[33,62223,53079],{"class":39},[33,62225,53082],{"class":59},[33,62227,2129],{"class":39},[33,62229,53137],{"class":63},[33,62231,53201],{"class":39},[33,62233,2976],{"class":59},[33,62235,62236],{"class":35,"line":3423},[33,62237,4195],{"class":59},[33,62239,62240],{"class":35,"line":3428},[33,62241,127],{"emptyLinePlaceholder":126},[33,62243,62244,62246,62248],{"class":35,"line":3433},[33,62245,62193],{"class":3632},[33,62247,539],{"class":52945},[33,62249,17228],{"class":59},[33,62251,62252,62254,62256,62258,62260],{"class":35,"line":3447},[33,62253,53129],{"class":39},[33,62255,53082],{"class":59},[33,62257,62215],{"class":39},[33,62259,53137],{"class":63},[33,62261,2976],{"class":59},[33,62263,62264,62266,62268,62270,62272],{"class":35,"line":3452},[33,62265,53144],{"class":39},[33,62267,53082],{"class":59},[33,62269,2424],{"class":39},[33,62271,53137],{"class":63},[33,62273,2976],{"class":59},[33,62275,62276,62278,62280,62282,62284,62286],{"class":35,"line":4243},[33,62277,53091],{"class":39},[33,62279,53082],{"class":59},[33,62281,2010],{"class":39},[33,62283,3706],{"class":39},[33,62285,53137],{"class":63},[33,62287,2976],{"class":59},[33,62289,62290,62293,62295,62297,62299],{"class":35,"line":4257},[33,62291,62292],{"class":39},"            font-size",[33,62294,53082],{"class":59},[33,62296,2366],{"class":39},[33,62298,53137],{"class":63},[33,62300,2976],{"class":59},[33,62302,62303,62306,62308,62310,62312],{"class":35,"line":4265},[33,62304,62305],{"class":39},"            line-height",[33,62307,53082],{"class":59},[33,62309,2424],{"class":39},[33,62311,53137],{"class":63},[33,62313,2976],{"class":59},[33,62315,62316,62319,62321,62323,62325,62327,62330],{"class":35,"line":4270},[33,62317,62318],{"class":39},"            border",[33,62320,53082],{"class":59},[33,62322,2036],{"class":39},[33,62324,53137],{"class":63},[33,62326,53166],{"class":39},[33,62328,62329],{"class":39}," #e0e0e0",[33,62331,2976],{"class":59},[33,62333,62334,62337,62339,62341],{"class":35,"line":4276},[33,62335,62336],{"class":39},"            outline",[33,62338,53082],{"class":59},[33,62340,56381],{"class":39},[33,62342,2976],{"class":59},[33,62344,62345],{"class":35,"line":4282},[33,62346,4195],{"class":59},[33,62348,62349],{"class":35,"line":4287},[33,62350,127],{"emptyLinePlaceholder":126},[33,62352,62353,62355,62358],{"class":35,"line":9608},[33,62354,62193],{"class":3632},[33,62356,62357],{"class":3632}," .search",[33,62359,17228],{"class":59},[33,62361,62362,62364,62366,62368,62370,62372,62375],{"class":35,"line":9632},[33,62363,62318],{"class":39},[33,62365,53082],{"class":59},[33,62367,2036],{"class":39},[33,62369,53137],{"class":63},[33,62371,53166],{"class":39},[33,62373,62374],{"class":39}," #ff6700",[33,62376,2976],{"class":59},[33,62378,62379],{"class":35,"line":9637},[33,62380,4195],{"class":59},[33,62382,62383],{"class":35,"line":9643},[33,62384,127],{"emptyLinePlaceholder":126},[33,62386,62387,62390],{"class":35,"line":9670},[33,62388,62389],{"class":3632},"        .result-list",[33,62391,17228],{"class":59},[33,62393,62394,62396,62398,62400],{"class":35,"line":9675},[33,62395,53117],{"class":39},[33,62397,53082],{"class":59},[33,62399,56381],{"class":39},[33,62401,2976],{"class":59},[33,62403,62404,62406,62408,62410],{"class":35,"line":9681},[33,62405,62200],{"class":39},[33,62407,53082],{"class":59},[33,62409,56475],{"class":39},[33,62411,2976],{"class":59},[33,62413,62414,62417,62419,62421],{"class":35,"line":9693},[33,62415,62416],{"class":39},"            left",[33,62418,53082],{"class":59},[33,62420,2010],{"class":39},[33,62422,2976],{"class":59},[33,62424,62425,62428,62430,62432,62434],{"class":35,"line":9705},[33,62426,62427],{"class":39},"            top",[33,62429,53082],{"class":59},[33,62431,2424],{"class":39},[33,62433,53137],{"class":63},[33,62435,2976],{"class":59},[33,62437,62438,62440,62442,62444,62446],{"class":35,"line":9717},[33,62439,53129],{"class":39},[33,62441,53082],{"class":59},[33,62443,62215],{"class":39},[33,62445,53137],{"class":63},[33,62447,2976],{"class":59},[33,62449,62450,62452,62454,62456,62458,62460,62462],{"class":35,"line":11375},[33,62451,62318],{"class":39},[33,62453,53082],{"class":59},[33,62455,2036],{"class":39},[33,62457,53137],{"class":63},[33,62459,53166],{"class":39},[33,62461,62374],{"class":39},[33,62463,2976],{"class":59},[33,62465,62466,62469,62471,62473],{"class":35,"line":11400},[33,62467,62468],{"class":39},"            border-top",[33,62470,53082],{"class":59},[33,62472,2010],{"class":39},[33,62474,2976],{"class":59},[33,62476,62477,62480,62482,62485],{"class":35,"line":11423},[33,62478,62479],{"class":39},"            background",[33,62481,53082],{"class":59},[33,62483,62484],{"class":39},"#fff",[33,62486,2976],{"class":59},[33,62488,62489],{"class":35,"line":11447},[33,62490,4195],{"class":59},[33,62492,62493],{"class":35,"line":11452},[33,62494,127],{"emptyLinePlaceholder":126},[33,62496,62497,62499,62501],{"class":35,"line":11457},[33,62498,62389],{"class":3632},[33,62500,3081],{"class":52945},[33,62502,17228],{"class":59},[33,62504,62505,62507,62509,62512],{"class":35,"line":11462},[33,62506,53117],{"class":39},[33,62508,53082],{"class":59},[33,62510,62511],{"class":39},"block",[33,62513,2976],{"class":59},[33,62515,62516,62518,62520,62522,62524,62527,62529],{"class":35,"line":11471},[33,62517,53091],{"class":39},[33,62519,53082],{"class":59},[33,62521,2162],{"class":39},[33,62523,53137],{"class":63},[33,62525,62526],{"class":39}," 15",[33,62528,53137],{"class":63},[33,62530,2976],{"class":59},[33,62532,62533,62535,62537,62539,62541],{"class":35,"line":11476},[33,62534,62292],{"class":39},[33,62536,53082],{"class":59},[33,62538,2315],{"class":39},[33,62540,53137],{"class":63},[33,62542,2976],{"class":59},[33,62544,62545,62548,62550,62553],{"class":35,"line":11482},[33,62546,62547],{"class":39},"            color",[33,62549,53082],{"class":59},[33,62551,62552],{"class":39},"#424242",[33,62554,2976],{"class":59},[33,62556,62557,62560,62562,62564],{"class":35,"line":11503},[33,62558,62559],{"class":39},"            text-decoration",[33,62561,53082],{"class":59},[33,62563,56381],{"class":39},[33,62565,2976],{"class":59},[33,62567,62568],{"class":35,"line":11509},[33,62569,4195],{"class":59},[33,62571,62572],{"class":35,"line":11523},[33,62573,127],{"emptyLinePlaceholder":126},[33,62575,62576,62578,62580,62583],{"class":35,"line":11529},[33,62577,62389],{"class":3632},[33,62579,3081],{"class":52945},[33,62581,62582],{"class":3632},":hover",[33,62584,17228],{"class":59},[33,62586,62587,62589,62591,62594],{"class":35,"line":11556},[33,62588,53285],{"class":39},[33,62590,53082],{"class":59},[33,62592,62593],{"class":39},"#eee",[33,62595,2976],{"class":59},[33,62597,62598],{"class":35,"line":11565},[33,62599,4195],{"class":59},[33,62601,62602,62604,62606],{"class":35,"line":11571},[33,62603,53421],{"class":59},[33,62605,1729],{"class":52945},[33,62607,52952],{"class":59},[33,62609,62610],{"class":35,"line":11579},[33,62611,127],{"emptyLinePlaceholder":126},[33,62613,62614,62616,62618],{"class":35,"line":11584},[33,62615,53430],{"class":59},[33,62617,52979],{"class":52945},[33,62619,52952],{"class":59},[33,62621,62622],{"class":35,"line":18259},[33,62623,127],{"emptyLinePlaceholder":126},[33,62625,62626,62628,62630],{"class":35,"line":18265},[33,62627,2726],{"class":59},[33,62629,53445],{"class":52945},[33,62631,52952],{"class":59},[33,62633,62634,62636,62638,62640,62642,62645],{"class":35,"line":18288},[33,62635,52986],{"class":59},[33,62637,53256],{"class":52945},[33,62639,55131],{"class":3632},[33,62641,64],{"class":59},[33,62643,62644],{"class":117},"\"mi\"",[33,62646,52952],{"class":59},[33,62648,62649,62651,62653,62655,62657,62660,62663,62665,62668],{"class":35,"line":18294},[33,62650,56946],{"class":59},[33,62652,112],{"class":52945},[33,62654,55468],{"class":3632},[33,62656,64],{"class":59},[33,62658,62659],{"class":117},"\"search\"",[33,62661,62662],{"class":3632}," placeholder",[33,62664,64],{"class":59},[33,62666,62667],{"class":117},"\"小米笔记本\"",[33,62669,52952],{"class":59},[33,62671,62672,62674,62676,62678,62680,62683],{"class":35,"line":18317},[33,62673,56946],{"class":59},[33,62675,2822],{"class":52945},[33,62677,55131],{"class":3632},[33,62679,64],{"class":59},[33,62681,62682],{"class":117},"\"result-list\"",[33,62684,52952],{"class":59},[33,62686,62687,62690,62692,62695,62697,62700,62702,62705,62708,62710,62712,62714],{"class":35,"line":18331},[33,62688,62689],{"class":59},"            \u003C",[33,62691,165],{"class":52945},[33,62693,62694],{"class":59},">\u003C",[33,62696,2057],{"class":52945},[33,62698,62699],{"class":3632}," href",[33,62701,64],{"class":59},[33,62703,62704],{"class":117},"\"#\"",[33,62706,62707],{"class":59},">全部商品\u003C\u002F",[33,62709,2057],{"class":52945},[33,62711,56958],{"class":59},[33,62713,165],{"class":52945},[33,62715,52952],{"class":59},[33,62717,62718,62720,62722,62724,62726,62728,62730,62732,62735,62737,62739,62741],{"class":35,"line":18351},[33,62719,62689],{"class":59},[33,62721,165],{"class":52945},[33,62723,62694],{"class":59},[33,62725,2057],{"class":52945},[33,62727,62699],{"class":3632},[33,62729,64],{"class":59},[33,62731,62704],{"class":117},[33,62733,62734],{"class":59},">小米11\u003C\u002F",[33,62736,2057],{"class":52945},[33,62738,56958],{"class":59},[33,62740,165],{"class":52945},[33,62742,52952],{"class":59},[33,62744,62745,62747,62749,62751,62753,62755,62757,62759,62762,62764,62766,62768],{"class":35,"line":18357},[33,62746,62689],{"class":59},[33,62748,165],{"class":52945},[33,62750,62694],{"class":59},[33,62752,2057],{"class":52945},[33,62754,62699],{"class":3632},[33,62756,64],{"class":59},[33,62758,62704],{"class":117},[33,62760,62761],{"class":59},">小米10S\u003C\u002F",[33,62763,2057],{"class":52945},[33,62765,56958],{"class":59},[33,62767,165],{"class":52945},[33,62769,52952],{"class":59},[33,62771,62772,62774,62776,62778,62780,62782,62784,62786,62789,62791,62793,62795],{"class":35,"line":18368},[33,62773,62689],{"class":59},[33,62775,165],{"class":52945},[33,62777,62694],{"class":59},[33,62779,2057],{"class":52945},[33,62781,62699],{"class":3632},[33,62783,64],{"class":59},[33,62785,62704],{"class":117},[33,62787,62788],{"class":59},">小米笔记本\u003C\u002F",[33,62790,2057],{"class":52945},[33,62792,56958],{"class":59},[33,62794,165],{"class":52945},[33,62796,52952],{"class":59},[33,62798,62799,62801,62803,62805,62807,62809,62811,62813,62816,62818,62820,62822],{"class":35,"line":18391},[33,62800,62689],{"class":59},[33,62802,165],{"class":52945},[33,62804,62694],{"class":59},[33,62806,2057],{"class":52945},[33,62808,62699],{"class":3632},[33,62810,64],{"class":59},[33,62812,62704],{"class":117},[33,62814,62815],{"class":59},">小米手机\u003C\u002F",[33,62817,2057],{"class":52945},[33,62819,56958],{"class":59},[33,62821,165],{"class":52945},[33,62823,52952],{"class":59},[33,62825,62826,62828,62830,62832,62834,62836,62838,62840,62843,62845,62847,62849],{"class":35,"line":18413},[33,62827,62689],{"class":59},[33,62829,165],{"class":52945},[33,62831,62694],{"class":59},[33,62833,2057],{"class":52945},[33,62835,62699],{"class":3632},[33,62837,64],{"class":59},[33,62839,62704],{"class":117},[33,62841,62842],{"class":59},">黑鲨4\u003C\u002F",[33,62844,2057],{"class":52945},[33,62846,56958],{"class":59},[33,62848,165],{"class":52945},[33,62850,52952],{"class":59},[33,62852,62853,62855,62857,62859,62861,62863,62865,62867,62870,62872,62874,62876],{"class":35,"line":18418},[33,62854,62689],{"class":59},[33,62856,165],{"class":52945},[33,62858,62694],{"class":59},[33,62860,2057],{"class":52945},[33,62862,62699],{"class":3632},[33,62864,64],{"class":59},[33,62866,62704],{"class":117},[33,62868,62869],{"class":59},">空调\u003C\u002F",[33,62871,2057],{"class":52945},[33,62873,56958],{"class":59},[33,62875,165],{"class":52945},[33,62877,52952],{"class":59},[33,62879,62880,62883,62885],{"class":35,"line":18424},[33,62881,62882],{"class":59},"        \u003C\u002F",[33,62884,2822],{"class":52945},[33,62886,52952],{"class":59},[33,62888,62889,62891,62893],{"class":35,"line":18438},[33,62890,53421],{"class":59},[33,62892,53256],{"class":52945},[33,62894,52952],{"class":59},[33,62896,62897,62899,62901],{"class":35,"line":18451},[33,62898,52986],{"class":59},[33,62900,53458],{"class":52945},[33,62902,52952],{"class":59},[33,62904,62905],{"class":35,"line":18456},[33,62906,62907],{"class":87},"        \u002F\u002F 1. 获取元素\n",[33,62909,62910,62913,62915,62917,62919,62921,62923,62926],{"class":35,"line":18470},[33,62911,62912],{"class":63},"        const",[33,62914,539],{"class":39},[33,62916,15222],{"class":63},[33,62918,56040],{"class":59},[33,62920,56043],{"class":3632},[33,62922,109],{"class":59},[33,62924,62925],{"class":117},"'[type=search]'",[33,62927,157],{"class":59},[33,62929,62930,62932,62935,62937,62939,62941,62943,62946],{"class":35,"line":18475},[33,62931,62912],{"class":63},[33,62933,62934],{"class":39}," ul",[33,62936,15222],{"class":63},[33,62938,56040],{"class":59},[33,62940,56043],{"class":3632},[33,62942,109],{"class":59},[33,62944,62945],{"class":117},"'.result-list'",[33,62947,157],{"class":59},[33,62949,62950],{"class":35,"line":18481},[33,62951,62952],{"class":87},"        \u002F\u002F console.log(input)\n",[33,62954,62955],{"class":35,"line":18486},[33,62956,62957],{"class":87},"        \u002F\u002F 2. 监听事件 获得焦点\n",[33,62959,62960,62963,62965,62967,62970,62972,62974],{"class":35,"line":18500},[33,62961,62962],{"class":59},"        input.",[33,62964,59456],{"class":3632},[33,62966,109],{"class":59},[33,62968,62969],{"class":117},"'focus'",[33,62971,14093],{"class":59},[33,62973,56093],{"class":63},[33,62975,56096],{"class":59},[33,62977,62978],{"class":35,"line":18505},[33,62979,62980],{"class":87},"            \u002F\u002F ul显示\n",[33,62982,62983,62986,62988],{"class":35,"line":18510},[33,62984,62985],{"class":59},"            ul.style.display ",[33,62987,64],{"class":63},[33,62989,62990],{"class":117}," 'block'\n",[33,62992,62993],{"class":35,"line":18524},[33,62994,62995],{"class":87},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[33,62997,62998,63001,63003,63005,63008],{"class":35,"line":18536},[33,62999,63000],{"class":59},"            input.classList.",[33,63002,6995],{"class":3632},[33,63004,109],{"class":59},[33,63006,63007],{"class":117},"'search'",[33,63009,157],{"class":59},[33,63011,63012],{"class":35,"line":18541},[33,63013,63014],{"class":59},"        })\n",[33,63016,63017],{"class":35,"line":18554},[33,63018,63019],{"class":87},"        \u002F\u002F 3. 监听事件 失去焦点\n",[33,63021,63022,63024,63026,63028,63031,63033,63035],{"class":35,"line":18559},[33,63023,62962],{"class":59},[33,63025,59456],{"class":3632},[33,63027,109],{"class":59},[33,63029,63030],{"class":117},"'blur'",[33,63032,14093],{"class":59},[33,63034,56093],{"class":63},[33,63036,56096],{"class":59},[33,63038,63039,63041,63043],{"class":35,"line":18564},[33,63040,62985],{"class":59},[33,63042,64],{"class":63},[33,63044,63045],{"class":117}," 'none'\n",[33,63047,63048,63050,63052,63054,63056],{"class":35,"line":18569},[33,63049,63000],{"class":59},[33,63051,58649],{"class":3632},[33,63053,109],{"class":59},[33,63055,63007],{"class":117},[33,63057,157],{"class":59},[33,63059,63060],{"class":35,"line":18582},[33,63061,63014],{"class":59},[33,63063,63064,63066,63068],{"class":35,"line":18587},[33,63065,53421],{"class":59},[33,63067,53458],{"class":52945},[33,63069,52952],{"class":59},[33,63071,63072,63074,63076],{"class":35,"line":34280},[33,63073,53430],{"class":59},[33,63075,53445],{"class":52945},[33,63077,52952],{"class":59},[33,63079,63080],{"class":35,"line":34286},[33,63081,127],{"emptyLinePlaceholder":126},[33,63083,63084,63086,63088],{"class":35,"line":34292},[33,63085,53430],{"class":59},[33,63087,52280],{"class":52945},[33,63089,52952],{"class":59},[23653,63091,63093],{"id":63092},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63095,63096],{},"评论字数统计案例",[19,63098,63099],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63101,63102],{},"牢记focus伪类选择器",[52989,63104],{"charSet":63105},"UTF-8",[52989,63107],{"name":63108,"content":63109},"viewport","width=device-width, initial-scale=1.0",[53052,63111,63112],{},"Document",[1729,63114,63115],{},"\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",[112,63117],{"type":6848},[2822,63119,63120,63123],{},[165,63121,63122],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[165,63124,63125],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[23,63127,63129],{"className":52278,"code":63128,"language":52280,"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,63130,63131,63141,63155,63159,63167,63181,63201,63221,63234,63242,63249,63262,63276,63286,63296,63300,63304,63311,63323,63335,63347,63359,63388,63401,63405,63409,63418,63429,63441,63452,63463,63475,63486,63498,63514,63526,63530,63534,63545,63556,63566,63578,63582,63586,63594,63605,63615,63626,63638,63651,63663,63675,63679,63683,63692,63704,63715,63728,63739,63753,63757,63761,63768,63780,63792,63802,63806,63810,63819,63831,63841,63845,63849,63860,63870,63889,63902,63906,63910,63920,63930,63934,63938,63949,63960,63972,63984,63988,63992,64003,64014,64028,64032,64036,64047,64057,64069,64073,64081,64089,64093,64101,64116,64135,64175,64188,64196,64210,64230,64238,64253,64276,64294,64309,64329,64349,64369,64377,64385,64393,64401,64421,64441,64446,64463,64472,64476,64481,64497,64505,64509,64514,64531,64536,64561,64565,64569,64574,64579,64587,64595,64599],{"__ignoreMap":28},[33,63132,63133,63135,63137,63139],{"class":35,"line":36},[33,63134,52942],{"class":59},[33,63136,52946],{"class":52945},[33,63138,52949],{"class":3632},[33,63140,52952],{"class":59},[33,63142,63143,63145,63147,63149,63151,63153],{"class":35,"line":43},[33,63144,2726],{"class":59},[33,63146,52280],{"class":52945},[33,63148,52961],{"class":3632},[33,63150,64],{"class":59},[33,63152,52966],{"class":117},[33,63154,52952],{"class":59},[33,63156,63157],{"class":35,"line":130},[33,63158,127],{"emptyLinePlaceholder":126},[33,63160,63161,63163,63165],{"class":35,"line":146},[33,63162,2726],{"class":59},[33,63164,52979],{"class":52945},[33,63166,52952],{"class":59},[33,63168,63169,63171,63173,63175,63177,63179],{"class":35,"line":267},[33,63170,53789],{"class":59},[33,63172,52989],{"class":52945},[33,63174,52992],{"class":3632},[33,63176,64],{"class":59},[33,63178,52997],{"class":117},[33,63180,52952],{"class":59},[33,63182,63183,63185,63187,63189,63191,63193,63195,63197,63199],{"class":35,"line":275},[33,63184,53789],{"class":59},[33,63186,52989],{"class":52945},[33,63188,53008],{"class":3632},[33,63190,64],{"class":59},[33,63192,53013],{"class":117},[33,63194,53016],{"class":3632},[33,63196,64],{"class":59},[33,63198,53021],{"class":117},[33,63200,52952],{"class":59},[33,63202,63203,63205,63207,63209,63211,63213,63215,63217,63219],{"class":35,"line":392},[33,63204,53789],{"class":59},[33,63206,52989],{"class":52945},[33,63208,16578],{"class":3632},[33,63210,64],{"class":59},[33,63212,53036],{"class":117},[33,63214,53016],{"class":3632},[33,63216,64],{"class":59},[33,63218,53043],{"class":117},[33,63220,52952],{"class":59},[33,63222,63223,63225,63227,63230,63232],{"class":35,"line":406},[33,63224,53789],{"class":59},[33,63226,53052],{"class":52945},[33,63228,63229],{"class":59},">评论回车发布\u003C\u002F",[33,63231,53052],{"class":52945},[33,63233,52952],{"class":59},[33,63235,63236,63238,63240],{"class":35,"line":418},[33,63237,53789],{"class":59},[33,63239,1729],{"class":52945},[33,63241,52952],{"class":59},[33,63243,63244,63247],{"class":35,"line":425},[33,63245,63246],{"class":3632},"    .wrapper",[33,63248,17228],{"class":59},[33,63250,63251,63254,63256,63258,63260],{"class":35,"line":1147},[33,63252,63253],{"class":39},"      min-width",[33,63255,53082],{"class":59},[33,63257,5649],{"class":39},[33,63259,53137],{"class":63},[33,63261,2976],{"class":59},[33,63263,63264,63267,63269,63272,63274],{"class":35,"line":1329},[33,63265,63266],{"class":39},"      max-width",[33,63268,53082],{"class":59},[33,63270,63271],{"class":39},"800",[33,63273,53137],{"class":63},[33,63275,2976],{"class":59},[33,63277,63278,63280,63282,63284],{"class":35,"line":1341},[33,63279,56653],{"class":39},[33,63281,53082],{"class":59},[33,63283,53122],{"class":39},[33,63285,2976],{"class":59},[33,63287,63288,63290,63292,63294],{"class":35,"line":1348},[33,63289,56664],{"class":39},[33,63291,53082],{"class":59},[33,63293,53225],{"class":39},[33,63295,2976],{"class":59},[33,63297,63298],{"class":35,"line":1529},[33,63299,3855],{"class":59},[33,63301,63302],{"class":35,"line":1546},[33,63303,127],{"emptyLinePlaceholder":126},[33,63305,63306,63309],{"class":35,"line":1551},[33,63307,63308],{"class":3632},"    .avatar",[33,63310,17228],{"class":59},[33,63312,63313,63315,63317,63319,63321],{"class":35,"line":1566},[33,63314,56415],{"class":39},[33,63316,53082],{"class":59},[33,63318,2424],{"class":39},[33,63320,53137],{"class":63},[33,63322,2976],{"class":59},[33,63324,63325,63327,63329,63331,63333],{"class":35,"line":1578},[33,63326,56429],{"class":39},[33,63328,53082],{"class":59},[33,63330,2424],{"class":39},[33,63332,53137],{"class":63},[33,63334,2976],{"class":59},[33,63336,63337,63339,63341,63343,63345],{"class":35,"line":1583},[33,63338,56778],{"class":39},[33,63340,53082],{"class":59},[33,63342,2473],{"class":39},[33,63344,2146],{"class":63},[33,63346,2976],{"class":59},[33,63348,63349,63352,63354,63357],{"class":35,"line":3369},[33,63350,63351],{"class":39},"      overflow",[33,63353,53082],{"class":59},[33,63355,63356],{"class":39},"hidden",[33,63358,2976],{"class":59},[33,63360,63361,63364,63366,63369,63371,63374,63376,63379,63381,63383,63386],{"class":35,"line":3396},[33,63362,63363],{"class":39},"      background",[33,63365,53082],{"class":59},[33,63367,63368],{"class":39},"url",[33,63370,109],{"class":59},[33,63372,63373],{"class":6877},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[33,63375,15372],{"class":59},[33,63377,63378],{"class":39},"no-repeat",[33,63380,18799],{"class":39},[33,63382,26634],{"class":59},[33,63384,63385],{"class":39},"cover",[33,63387,2976],{"class":59},[33,63389,63390,63393,63395,63397,63399],{"class":35,"line":3401},[33,63391,63392],{"class":39},"      margin-right",[33,63394,53082],{"class":59},[33,63396,2517],{"class":39},[33,63398,53137],{"class":63},[33,63400,2976],{"class":59},[33,63402,63403],{"class":35,"line":3418},[33,63404,3855],{"class":59},[33,63406,63407],{"class":35,"line":3423},[33,63408,127],{"emptyLinePlaceholder":126},[33,63410,63411,63413,63416],{"class":35,"line":3428},[33,63412,63246],{"class":3632},[33,63414,63415],{"class":52945}," textarea",[33,63417,17228],{"class":59},[33,63419,63420,63423,63425,63427],{"class":35,"line":3433},[33,63421,63422],{"class":39},"      outline",[33,63424,53082],{"class":59},[33,63426,56381],{"class":39},[33,63428,2976],{"class":59},[33,63430,63431,63434,63436,63439],{"class":35,"line":3447},[33,63432,63433],{"class":39},"      border-color",[33,63435,53082],{"class":59},[33,63437,63438],{"class":39},"transparent",[33,63440,2976],{"class":59},[33,63442,63443,63446,63448,63450],{"class":35,"line":3452},[33,63444,63445],{"class":39},"      resize",[33,63447,53082],{"class":59},[33,63449,56381],{"class":39},[33,63451,2976],{"class":59},[33,63453,63454,63456,63458,63461],{"class":35,"line":4243},[33,63455,63363],{"class":39},[33,63457,53082],{"class":59},[33,63459,63460],{"class":39},"#f5f5f5",[33,63462,2976],{"class":59},[33,63464,63465,63467,63469,63471,63473],{"class":35,"line":4257},[33,63466,56778],{"class":39},[33,63468,53082],{"class":59},[33,63470,2111],{"class":39},[33,63472,53137],{"class":63},[33,63474,2976],{"class":59},[33,63476,63477,63480,63482,63484],{"class":35,"line":4265},[33,63478,63479],{"class":39},"      flex",[33,63481,53082],{"class":59},[33,63483,2036],{"class":39},[33,63485,2976],{"class":59},[33,63487,63488,63490,63492,63494,63496],{"class":35,"line":4270},[33,63489,56339],{"class":39},[33,63491,53082],{"class":59},[33,63493,2264],{"class":39},[33,63495,53137],{"class":63},[33,63497,2976],{"class":59},[33,63499,63500,63503,63505,63507,63510,63512],{"class":35,"line":4276},[33,63501,63502],{"class":39},"      transition",[33,63504,53082],{"class":59},[33,63506,29777],{"class":39},[33,63508,63509],{"class":39}," 0.5",[33,63511,2512],{"class":63},[33,63513,2976],{"class":59},[33,63515,63516,63518,63520,63522,63524],{"class":35,"line":4282},[33,63517,56429],{"class":39},[33,63519,53082],{"class":59},[33,63521,2766],{"class":39},[33,63523,53137],{"class":63},[33,63525,2976],{"class":59},[33,63527,63528],{"class":35,"line":4287},[33,63529,3855],{"class":59},[33,63531,63532],{"class":35,"line":9608},[33,63533,127],{"emptyLinePlaceholder":126},[33,63535,63536,63538,63540,63543],{"class":35,"line":9632},[33,63537,63246],{"class":3632},[33,63539,63415],{"class":52945},[33,63541,63542],{"class":3632},":focus",[33,63544,17228],{"class":59},[33,63546,63547,63549,63551,63554],{"class":35,"line":9637},[33,63548,63433],{"class":39},[33,63550,53082],{"class":59},[33,63552,63553],{"class":39},"#e4e4e4",[33,63555,2976],{"class":59},[33,63557,63558,63560,63562,63564],{"class":35,"line":9643},[33,63559,63363],{"class":39},[33,63561,53082],{"class":59},[33,63563,62484],{"class":39},[33,63565,2976],{"class":59},[33,63567,63568,63570,63572,63574,63576],{"class":35,"line":9670},[33,63569,56429],{"class":39},[33,63571,53082],{"class":59},[33,63573,2473],{"class":39},[33,63575,53137],{"class":63},[33,63577,2976],{"class":59},[33,63579,63580],{"class":35,"line":9675},[33,63581,3855],{"class":59},[33,63583,63584],{"class":35,"line":9681},[33,63585,127],{"emptyLinePlaceholder":126},[33,63587,63588,63590,63592],{"class":35,"line":9693},[33,63589,63246],{"class":3632},[33,63591,59110],{"class":52945},[33,63593,17228],{"class":59},[33,63595,63596,63598,63600,63603],{"class":35,"line":9705},[33,63597,63363],{"class":39},[33,63599,53082],{"class":59},[33,63601,63602],{"class":39},"#00aeec",[33,63604,2976],{"class":59},[33,63606,63607,63609,63611,63613],{"class":35,"line":9717},[33,63608,59059],{"class":39},[33,63610,53082],{"class":59},[33,63612,62484],{"class":39},[33,63614,2976],{"class":59},[33,63616,63617,63620,63622,63624],{"class":35,"line":11375},[33,63618,63619],{"class":39},"      border",[33,63621,53082],{"class":59},[33,63623,56381],{"class":39},[33,63625,2976],{"class":59},[33,63627,63628,63630,63632,63634,63636],{"class":35,"line":11400},[33,63629,56778],{"class":39},[33,63631,53082],{"class":59},[33,63633,2111],{"class":39},[33,63635,53137],{"class":63},[33,63637,2976],{"class":59},[33,63639,63640,63643,63645,63647,63649],{"class":35,"line":11423},[33,63641,63642],{"class":39},"      margin-left",[33,63644,53082],{"class":59},[33,63646,2264],{"class":39},[33,63648,53137],{"class":63},[33,63650,2976],{"class":59},[33,63652,63653,63655,63657,63659,63661],{"class":35,"line":11447},[33,63654,56415],{"class":39},[33,63656,53082],{"class":59},[33,63658,2174],{"class":39},[33,63660,53137],{"class":63},[33,63662,2976],{"class":59},[33,63664,63665,63668,63670,63673],{"class":35,"line":11452},[33,63666,63667],{"class":39},"      cursor",[33,63669,53082],{"class":59},[33,63671,63672],{"class":39},"pointer",[33,63674,2976],{"class":59},[33,63676,63677],{"class":35,"line":11457},[33,63678,3855],{"class":59},[33,63680,63681],{"class":35,"line":11462},[33,63682,127],{"emptyLinePlaceholder":126},[33,63684,63685,63687,63690],{"class":35,"line":11471},[33,63686,63246],{"class":3632},[33,63688,63689],{"class":3632}," .total",[33,63691,17228],{"class":59},[33,63693,63694,63696,63698,63700,63702],{"class":35,"line":11476},[33,63695,63392],{"class":39},[33,63697,53082],{"class":59},[33,63699,2429],{"class":39},[33,63701,53137],{"class":63},[33,63703,2976],{"class":59},[33,63705,63706,63708,63710,63713],{"class":35,"line":11482},[33,63707,59059],{"class":39},[33,63709,53082],{"class":59},[33,63711,63712],{"class":39},"#999",[33,63714,2976],{"class":59},[33,63716,63717,63720,63722,63724,63726],{"class":35,"line":11503},[33,63718,63719],{"class":39},"      margin-top",[33,63721,53082],{"class":59},[33,63723,2137],{"class":39},[33,63725,53137],{"class":63},[33,63727,2976],{"class":59},[33,63729,63730,63733,63735,63737],{"class":35,"line":11509},[33,63731,63732],{"class":39},"      opacity",[33,63734,53082],{"class":59},[33,63736,2010],{"class":39},[33,63738,2976],{"class":59},[33,63740,63741,63743,63745,63747,63749,63751],{"class":35,"line":11523},[33,63742,63502],{"class":39},[33,63744,53082],{"class":59},[33,63746,29777],{"class":39},[33,63748,63509],{"class":39},[33,63750,2512],{"class":63},[33,63752,2976],{"class":59},[33,63754,63755],{"class":35,"line":11529},[33,63756,3855],{"class":59},[33,63758,63759],{"class":35,"line":11556},[33,63760,127],{"emptyLinePlaceholder":126},[33,63762,63763,63766],{"class":35,"line":11565},[33,63764,63765],{"class":3632},"    .list",[33,63767,17228],{"class":59},[33,63769,63770,63772,63774,63776,63778],{"class":35,"line":11571},[33,63771,63253],{"class":39},[33,63773,53082],{"class":59},[33,63775,5649],{"class":39},[33,63777,53137],{"class":63},[33,63779,2976],{"class":59},[33,63781,63782,63784,63786,63788,63790],{"class":35,"line":11579},[33,63783,63266],{"class":39},[33,63785,53082],{"class":59},[33,63787,63271],{"class":39},[33,63789,53137],{"class":63},[33,63791,2976],{"class":59},[33,63793,63794,63796,63798,63800],{"class":35,"line":11584},[33,63795,56653],{"class":39},[33,63797,53082],{"class":59},[33,63799,53122],{"class":39},[33,63801,2976],{"class":59},[33,63803,63804],{"class":35,"line":18259},[33,63805,3855],{"class":59},[33,63807,63808],{"class":35,"line":18265},[33,63809,127],{"emptyLinePlaceholder":126},[33,63811,63812,63814,63817],{"class":35,"line":18288},[33,63813,63765],{"class":3632},[33,63815,63816],{"class":3632}," .item",[33,63818,17228],{"class":59},[33,63820,63821,63823,63825,63827,63829],{"class":35,"line":18294},[33,63822,56415],{"class":39},[33,63824,53082],{"class":59},[33,63826,2129],{"class":39},[33,63828,2146],{"class":63},[33,63830,2976],{"class":59},[33,63832,63833,63835,63837,63839],{"class":35,"line":18317},[33,63834,56653],{"class":39},[33,63836,53082],{"class":59},[33,63838,53122],{"class":39},[33,63840,2976],{"class":59},[33,63842,63843],{"class":35,"line":18331},[33,63844,3855],{"class":59},[33,63846,63847],{"class":35,"line":18351},[33,63848,127],{"emptyLinePlaceholder":126},[33,63850,63851,63853,63855,63858],{"class":35,"line":18357},[33,63852,63765],{"class":3632},[33,63854,63816],{"class":3632},[33,63856,63857],{"class":3632}," .info",[33,63859,17228],{"class":59},[33,63861,63862,63864,63866,63868],{"class":35,"line":18368},[33,63863,63479],{"class":39},[33,63865,53082],{"class":59},[33,63867,2036],{"class":39},[33,63869,2976],{"class":59},[33,63871,63872,63875,63877,63879,63881,63884,63887],{"class":35,"line":18391},[33,63873,63874],{"class":39},"      border-bottom",[33,63876,53082],{"class":59},[33,63878,2036],{"class":39},[33,63880,53137],{"class":63},[33,63882,63883],{"class":39}," dashed",[33,63885,63886],{"class":39}," #e4e4e4",[33,63888,2976],{"class":59},[33,63890,63891,63894,63896,63898,63900],{"class":35,"line":18413},[33,63892,63893],{"class":39},"      padding-bottom",[33,63895,53082],{"class":59},[33,63897,2264],{"class":39},[33,63899,53137],{"class":63},[33,63901,2976],{"class":59},[33,63903,63904],{"class":35,"line":18418},[33,63905,3855],{"class":59},[33,63907,63908],{"class":35,"line":18424},[33,63909,127],{"emptyLinePlaceholder":126},[33,63911,63912,63914,63916,63918],{"class":35,"line":18438},[33,63913,63765],{"class":3632},[33,63915,63816],{"class":3632},[33,63917,8485],{"class":52945},[33,63919,17228],{"class":59},[33,63921,63922,63924,63926,63928],{"class":35,"line":18451},[33,63923,56350],{"class":39},[33,63925,53082],{"class":59},[33,63927,2010],{"class":39},[33,63929,2976],{"class":59},[33,63931,63932],{"class":35,"line":18456},[33,63933,3855],{"class":59},[33,63935,63936],{"class":35,"line":18470},[33,63937,127],{"emptyLinePlaceholder":126},[33,63939,63940,63942,63944,63947],{"class":35,"line":18475},[33,63941,63765],{"class":3632},[33,63943,63816],{"class":3632},[33,63945,63946],{"class":3632}," .name",[33,63948,17228],{"class":59},[33,63950,63951,63953,63955,63958],{"class":35,"line":18481},[33,63952,59059],{"class":39},[33,63954,53082],{"class":59},[33,63956,63957],{"class":39},"#FB7299",[33,63959,2976],{"class":59},[33,63961,63962,63964,63966,63968,63970],{"class":35,"line":18486},[33,63963,56566],{"class":39},[33,63965,53082],{"class":59},[33,63967,2366],{"class":39},[33,63969,53137],{"class":63},[33,63971,2976],{"class":59},[33,63973,63974,63977,63979,63982],{"class":35,"line":18500},[33,63975,63976],{"class":39},"      font-weight",[33,63978,53082],{"class":59},[33,63980,63981],{"class":39},"bold",[33,63983,2976],{"class":59},[33,63985,63986],{"class":35,"line":18505},[33,63987,3855],{"class":59},[33,63989,63990],{"class":35,"line":18510},[33,63991,127],{"emptyLinePlaceholder":126},[33,63993,63994,63996,63998,64001],{"class":35,"line":18524},[33,63995,63765],{"class":3632},[33,63997,63816],{"class":3632},[33,63999,64000],{"class":3632}," .text",[33,64002,17228],{"class":59},[33,64004,64005,64007,64009,64012],{"class":35,"line":18536},[33,64006,59059],{"class":39},[33,64008,53082],{"class":59},[33,64010,64011],{"class":39},"#333",[33,64013,2976],{"class":59},[33,64015,64016,64018,64020,64022,64024,64026],{"class":35,"line":18541},[33,64017,56339],{"class":39},[33,64019,53082],{"class":59},[33,64021,2264],{"class":39},[33,64023,53137],{"class":63},[33,64025,829],{"class":39},[33,64027,2976],{"class":59},[33,64029,64030],{"class":35,"line":18554},[33,64031,3855],{"class":59},[33,64033,64034],{"class":35,"line":18559},[33,64035,127],{"emptyLinePlaceholder":126},[33,64037,64038,64040,64042,64045],{"class":35,"line":18564},[33,64039,63765],{"class":3632},[33,64041,63816],{"class":3632},[33,64043,64044],{"class":3632}," .time",[33,64046,17228],{"class":59},[33,64048,64049,64051,64053,64055],{"class":35,"line":18569},[33,64050,59059],{"class":39},[33,64052,53082],{"class":59},[33,64054,63712],{"class":39},[33,64056,2976],{"class":59},[33,64058,64059,64061,64063,64065,64067],{"class":35,"line":18582},[33,64060,56566],{"class":39},[33,64062,53082],{"class":59},[33,64064,2315],{"class":39},[33,64066,53137],{"class":63},[33,64068,2976],{"class":59},[33,64070,64071],{"class":35,"line":18587},[33,64072,3855],{"class":59},[33,64074,64075,64077,64079],{"class":35,"line":34280},[33,64076,54062],{"class":59},[33,64078,1729],{"class":52945},[33,64080,52952],{"class":59},[33,64082,64083,64085,64087],{"class":35,"line":34286},[33,64084,53430],{"class":59},[33,64086,52979],{"class":52945},[33,64088,52952],{"class":59},[33,64090,64091],{"class":35,"line":34292},[33,64092,127],{"emptyLinePlaceholder":126},[33,64094,64095,64097,64099],{"class":35,"line":34298},[33,64096,2726],{"class":59},[33,64098,53445],{"class":52945},[33,64100,52952],{"class":59},[33,64102,64103,64105,64107,64109,64111,64114],{"class":35,"line":34304},[33,64104,53789],{"class":59},[33,64106,53256],{"class":52945},[33,64108,55131],{"class":3632},[33,64110,64],{"class":59},[33,64112,64113],{"class":117},"\"wrapper\"",[33,64115,52952],{"class":59},[33,64117,64118,64120,64122,64124,64126,64129,64131,64133],{"class":35,"line":34315},[33,64119,52986],{"class":59},[33,64121,2259],{"class":52945},[33,64123,55131],{"class":3632},[33,64125,64],{"class":59},[33,64127,64128],{"class":117},"\"avatar\"",[33,64130,56958],{"class":59},[33,64132,2259],{"class":52945},[33,64134,52952],{"class":59},[33,64136,64137,64139,64141,64143,64145,64148,64150,64152,64155,64157,64159,64161,64164,64166,64169,64171,64173],{"class":35,"line":34321},[33,64138,52986],{"class":59},[33,64140,55932],{"class":52945},[33,64142,16617],{"class":3632},[33,64144,64],{"class":59},[33,64146,64147],{"class":117},"\"tx\"",[33,64149,62662],{"class":3632},[33,64151,64],{"class":59},[33,64153,64154],{"class":117},"\"发一条友善的评论\"",[33,64156,55955],{"class":3632},[33,64158,64],{"class":59},[33,64160,5364],{"class":117},[33,64162,64163],{"class":3632}," maxlength",[33,64165,64],{"class":59},[33,64167,64168],{"class":117},"\"200\"",[33,64170,56958],{"class":59},[33,64172,55932],{"class":52945},[33,64174,52952],{"class":59},[33,64176,64177,64179,64181,64184,64186],{"class":35,"line":34341},[33,64178,52986],{"class":59},[33,64180,55531],{"class":52945},[33,64182,64183],{"class":59},">发布\u003C\u002F",[33,64185,55531],{"class":52945},[33,64187,52952],{"class":59},[33,64189,64190,64192,64194],{"class":35,"line":34347},[33,64191,54062],{"class":59},[33,64193,53256],{"class":52945},[33,64195,52952],{"class":59},[33,64197,64198,64200,64202,64204,64206,64208],{"class":35,"line":34358},[33,64199,53789],{"class":59},[33,64201,53256],{"class":52945},[33,64203,55131],{"class":3632},[33,64205,64],{"class":59},[33,64207,64113],{"class":117},[33,64209,52952],{"class":59},[33,64211,64212,64214,64216,64218,64220,64223,64226,64228],{"class":35,"line":34364},[33,64213,52986],{"class":59},[33,64215,33],{"class":52945},[33,64217,55131],{"class":3632},[33,64219,64],{"class":59},[33,64221,64222],{"class":117},"\"total\"",[33,64224,64225],{"class":59},">0\u002F200字\u003C\u002F",[33,64227,33],{"class":52945},[33,64229,52952],{"class":59},[33,64231,64232,64234,64236],{"class":35,"line":34370},[33,64233,54062],{"class":59},[33,64235,53256],{"class":52945},[33,64237,52952],{"class":59},[33,64239,64240,64242,64244,64246,64248,64251],{"class":35,"line":34376},[33,64241,53789],{"class":59},[33,64243,53256],{"class":52945},[33,64245,55131],{"class":3632},[33,64247,64],{"class":59},[33,64249,64250],{"class":117},"\"list\"",[33,64252,52952],{"class":59},[33,64254,64255,64257,64259,64261,64263,64266,64269,64271,64274],{"class":35,"line":34382},[33,64256,52986],{"class":59},[33,64258,53256],{"class":52945},[33,64260,55131],{"class":3632},[33,64262,64],{"class":59},[33,64264,64265],{"class":117},"\"item\"",[33,64267,64268],{"class":3632}," style",[33,64270,64],{"class":59},[33,64272,64273],{"class":117},"\"display: none;\"",[33,64275,52952],{"class":59},[33,64277,64278,64280,64282,64284,64286,64288,64290,64292],{"class":35,"line":34388},[33,64279,56878],{"class":59},[33,64281,2259],{"class":52945},[33,64283,55131],{"class":3632},[33,64285,64],{"class":59},[33,64287,64128],{"class":117},[33,64289,56958],{"class":59},[33,64291,2259],{"class":52945},[33,64293,52952],{"class":59},[33,64295,64296,64298,64300,64302,64304,64307],{"class":35,"line":34394},[33,64297,56878],{"class":59},[33,64299,53256],{"class":52945},[33,64301,55131],{"class":3632},[33,64303,64],{"class":59},[33,64305,64306],{"class":117},"\"info\"",[33,64308,52952],{"class":59},[33,64310,64311,64313,64315,64317,64319,64322,64325,64327],{"class":35,"line":34400},[33,64312,56946],{"class":59},[33,64314,19],{"class":52945},[33,64316,55131],{"class":3632},[33,64318,64],{"class":59},[33,64320,64321],{"class":117},"\"name\"",[33,64323,64324],{"class":59},">清风徐来\u003C\u002F",[33,64326,19],{"class":52945},[33,64328,52952],{"class":59},[33,64330,64331,64333,64335,64337,64339,64342,64345,64347],{"class":35,"line":34420},[33,64332,56946],{"class":59},[33,64334,19],{"class":52945},[33,64336,55131],{"class":3632},[33,64338,64],{"class":59},[33,64340,64341],{"class":117},"\"text\"",[33,64343,64344],{"class":59},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[33,64346,19],{"class":52945},[33,64348,52952],{"class":59},[33,64350,64351,64353,64355,64357,64359,64362,64365,64367],{"class":35,"line":34426},[33,64352,56946],{"class":59},[33,64354,19],{"class":52945},[33,64356,55131],{"class":3632},[33,64358,64],{"class":59},[33,64360,64361],{"class":117},"\"time\"",[33,64363,64364],{"class":59},">2022-10-10 20:29:21\u003C\u002F",[33,64366,19],{"class":52945},[33,64368,52952],{"class":59},[33,64370,64371,64373,64375],{"class":35,"line":34442},[33,64372,57051],{"class":59},[33,64374,53256],{"class":52945},[33,64376,52952],{"class":59},[33,64378,64379,64381,64383],{"class":35,"line":34448},[33,64380,53421],{"class":59},[33,64382,53256],{"class":52945},[33,64384,52952],{"class":59},[33,64386,64387,64389,64391],{"class":35,"line":34462},[33,64388,54062],{"class":59},[33,64390,53256],{"class":52945},[33,64392,52952],{"class":59},[33,64394,64395,64397,64399],{"class":35,"line":34468},[33,64396,53789],{"class":59},[33,64398,53458],{"class":52945},[33,64400,52952],{"class":59},[33,64402,64403,64405,64408,64410,64412,64414,64416,64419],{"class":35,"line":34483},[33,64404,12879],{"class":63},[33,64406,64407],{"class":39}," tx",[33,64409,15222],{"class":63},[33,64411,56040],{"class":59},[33,64413,56043],{"class":3632},[33,64415,109],{"class":59},[33,64417,64418],{"class":117},"'#tx'",[33,64420,157],{"class":59},[33,64422,64423,64425,64428,64430,64432,64434,64436,64439],{"class":35,"line":34489},[33,64424,12879],{"class":63},[33,64426,64427],{"class":39}," total",[33,64429,15222],{"class":63},[33,64431,56040],{"class":59},[33,64433,56043],{"class":3632},[33,64435,109],{"class":59},[33,64437,64438],{"class":117},"'.total'",[33,64440,157],{"class":59},[33,64442,64443],{"class":35,"line":34498},[33,64444,64445],{"class":87},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[33,64447,64448,64451,64453,64455,64457,64459,64461],{"class":35,"line":34504},[33,64449,64450],{"class":59},"    tx.",[33,64452,59456],{"class":3632},[33,64454,109],{"class":59},[33,64456,62969],{"class":117},[33,64458,14093],{"class":59},[33,64460,56093],{"class":63},[33,64462,56096],{"class":59},[33,64464,64465,64468,64470],{"class":35,"line":34513},[33,64466,64467],{"class":59},"      total.style.opacity ",[33,64469,64],{"class":63},[33,64471,1434],{"class":39},[33,64473,64474],{"class":35,"line":34519},[33,64475,35108],{"class":59},[33,64477,64478],{"class":35,"line":34525},[33,64479,64480],{"class":87},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[33,64482,64483,64485,64487,64489,64491,64493,64495],{"class":35,"line":34534},[33,64484,64450],{"class":59},[33,64486,59456],{"class":3632},[33,64488,109],{"class":59},[33,64490,63030],{"class":117},[33,64492,14093],{"class":59},[33,64494,56093],{"class":63},[33,64496,56096],{"class":59},[33,64498,64499,64501,64503],{"class":35,"line":34540},[33,64500,64467],{"class":59},[33,64502,64],{"class":63},[33,64504,48978],{"class":39},[33,64506,64507],{"class":35,"line":34551},[33,64508,35108],{"class":59},[33,64510,64511],{"class":35,"line":34557},[33,64512,64513],{"class":87},"    \u002F\u002F 3. 检测用户输入\n",[33,64515,64516,64518,64520,64522,64525,64527,64529],{"class":35,"line":34576},[33,64517,64450],{"class":59},[33,64519,59456],{"class":3632},[33,64521,109],{"class":59},[33,64523,64524],{"class":117},"'input'",[33,64526,14093],{"class":59},[33,64528,56093],{"class":63},[33,64530,56096],{"class":59},[33,64532,64533],{"class":35,"line":34582},[33,64534,64535],{"class":87},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[33,64537,64538,64541,64543,64546,64549,64551,64554,64556,64558],{"class":35,"line":34593},[33,64539,64540],{"class":59},"      total.innerHTML ",[33,64542,64],{"class":63},[33,64544,64545],{"class":117}," `${",[33,64547,64548],{"class":59},"tx",[33,64550,2375],{"class":117},[33,64552,64553],{"class":59},"value",[33,64555,2375],{"class":117},[33,64557,53613],{"class":39},[33,64559,64560],{"class":117},"}\u002F200字`\n",[33,64562,64563],{"class":35,"line":34599},[33,64564,35108],{"class":59},[33,64566,64567],{"class":35,"line":34619},[33,64568,127],{"emptyLinePlaceholder":126},[33,64570,64571],{"class":35,"line":34635},[33,64572,64573],{"class":87},"    \u002F\u002F const str = 'andy'\n",[33,64575,64576],{"class":35,"line":34641},[33,64577,64578],{"class":87},"    \u002F\u002F console.log(str.length)\n",[33,64580,64581,64583,64585],{"class":35,"line":34655},[33,64582,54062],{"class":59},[33,64584,53458],{"class":52945},[33,64586,52952],{"class":59},[33,64588,64589,64591,64593],{"class":35,"line":34661},[33,64590,53430],{"class":59},[33,64592,53445],{"class":52945},[33,64594,52952],{"class":59},[33,64596,64597],{"class":35,"line":34667},[33,64598,127],{"emptyLinePlaceholder":126},[33,64600,64601,64603,64605],{"class":35,"line":34678},[33,64602,53430],{"class":59},[33,64604,52280],{"class":52945},[33,64606,52952],{"class":59},[23653,64608,64610],{"id":64609},"_3254-change事件","3.2.5.4 change事件",[19,64612,64613],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64615,64616],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64618,64619],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[23,64621,64623],{"className":52278,"code":64622,"language":52280,"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,64624,64625,64635,64649,64653,64661,64675,64695,64707,64715,64719,64727,64741,64749,64767,64785,64797,64801,64809,64817,64821],{"__ignoreMap":28},[33,64626,64627,64629,64631,64633],{"class":35,"line":36},[33,64628,52942],{"class":59},[33,64630,52946],{"class":52945},[33,64632,52949],{"class":3632},[33,64634,52952],{"class":59},[33,64636,64637,64639,64641,64643,64645,64647],{"class":35,"line":43},[33,64638,2726],{"class":59},[33,64640,52280],{"class":52945},[33,64642,52961],{"class":3632},[33,64644,64],{"class":59},[33,64646,52966],{"class":117},[33,64648,52952],{"class":59},[33,64650,64651],{"class":35,"line":130},[33,64652,127],{"emptyLinePlaceholder":126},[33,64654,64655,64657,64659],{"class":35,"line":146},[33,64656,2726],{"class":59},[33,64658,52979],{"class":52945},[33,64660,52952],{"class":59},[33,64662,64663,64665,64667,64669,64671,64673],{"class":35,"line":267},[33,64664,53789],{"class":59},[33,64666,52989],{"class":52945},[33,64668,52992],{"class":3632},[33,64670,64],{"class":59},[33,64672,52997],{"class":117},[33,64674,52952],{"class":59},[33,64676,64677,64679,64681,64683,64685,64687,64689,64691,64693],{"class":35,"line":275},[33,64678,53789],{"class":59},[33,64680,52989],{"class":52945},[33,64682,16578],{"class":3632},[33,64684,64],{"class":59},[33,64686,53036],{"class":117},[33,64688,53016],{"class":3632},[33,64690,64],{"class":59},[33,64692,53043],{"class":117},[33,64694,52952],{"class":59},[33,64696,64697,64699,64701,64703,64705],{"class":35,"line":392},[33,64698,53789],{"class":59},[33,64700,53052],{"class":52945},[33,64702,53055],{"class":59},[33,64704,53052],{"class":52945},[33,64706,52952],{"class":59},[33,64708,64709,64711,64713],{"class":35,"line":406},[33,64710,53430],{"class":59},[33,64712,52979],{"class":52945},[33,64714,52952],{"class":59},[33,64716,64717],{"class":35,"line":418},[33,64718,127],{"emptyLinePlaceholder":126},[33,64720,64721,64723,64725],{"class":35,"line":425},[33,64722,2726],{"class":59},[33,64724,53445],{"class":52945},[33,64726,52952],{"class":59},[33,64728,64729,64731,64733,64735,64737,64739],{"class":35,"line":1147},[33,64730,53789],{"class":59},[33,64732,112],{"class":52945},[33,64734,55468],{"class":3632},[33,64736,64],{"class":59},[33,64738,64341],{"class":117},[33,64740,52952],{"class":59},[33,64742,64743,64745,64747],{"class":35,"line":1329},[33,64744,53789],{"class":59},[33,64746,53458],{"class":52945},[33,64748,52952],{"class":59},[33,64750,64751,64753,64755,64757,64759,64761,64763,64765],{"class":35,"line":1341},[33,64752,12879],{"class":63},[33,64754,539],{"class":39},[33,64756,15222],{"class":63},[33,64758,56040],{"class":59},[33,64760,56043],{"class":3632},[33,64762,109],{"class":59},[33,64764,64524],{"class":117},[33,64766,157],{"class":59},[33,64768,64769,64772,64774,64776,64779,64781,64783],{"class":35,"line":1348},[33,64770,64771],{"class":59},"    input.",[33,64773,59456],{"class":3632},[33,64775,109],{"class":59},[33,64777,64778],{"class":117},"'change'",[33,64780,14093],{"class":59},[33,64782,56093],{"class":63},[33,64784,56096],{"class":59},[33,64786,64787,64789,64791,64793,64795],{"class":35,"line":1529},[33,64788,59887],{"class":59},[33,64790,59890],{"class":3632},[33,64792,109],{"class":59},[33,64794,2410],{"class":39},[33,64796,157],{"class":59},[33,64798,64799],{"class":35,"line":1546},[33,64800,35108],{"class":59},[33,64802,64803,64805,64807],{"class":35,"line":1551},[33,64804,54062],{"class":59},[33,64806,53458],{"class":52945},[33,64808,52952],{"class":59},[33,64810,64811,64813,64815],{"class":35,"line":1566},[33,64812,53430],{"class":59},[33,64814,53445],{"class":52945},[33,64816,52952],{"class":59},[33,64818,64819],{"class":35,"line":1578},[33,64820,127],{"emptyLinePlaceholder":126},[33,64822,64823,64825,64827],{"class":35,"line":1583},[33,64824,53430],{"class":59},[33,64826,52280],{"class":52945},[33,64828,52952],{"class":59},[19,64830,64831],{},"总结：内容发生改变才回去触发",[633,64833,64835],{"id":64834},"_326-事件对象","3.2.6 事件对象",[23653,64837,64839],{"id":64838},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64841,64842],{},[3145,64843],{"alt":28,"src":64844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64846,64847],{},[3145,64848],{"alt":28,"src":64849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64851,64852],{},"点击一次，就输出了事件对象，它是个对象",[19,64854,64855],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64857,64858],{},[3145,64859],{"alt":28,"src":64860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23653,64862,64864],{"id":64863},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64866,64867],{},[3145,64868],{"alt":28,"src":64869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64871,64872],{},"实现按特殊字符才是实现打印输出效果：",[23,64874,64876],{"className":54712,"code":64875,"language":54714,"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,64877,64878,64886,64891,64905,64913,64918,64923,64928,64933,64938,64943,64948,64953,64958,64962,64966,64974],{"__ignoreMap":28},[33,64879,64880,64882,64884],{"class":35,"line":36},[33,64881,2726],{"class":59},[33,64883,53445],{"class":52945},[33,64885,52952],{"class":59},[33,64887,64888],{"class":35,"line":43},[33,64889,64890],{"class":87},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[33,64892,64893,64895,64897,64899,64901,64903],{"class":35,"line":130},[33,64894,53789],{"class":59},[33,64896,112],{"class":52945},[33,64898,55468],{"class":3632},[33,64900,64],{"class":59},[33,64902,64341],{"class":117},[33,64904,52952],{"class":59},[33,64906,64907,64909,64911],{"class":35,"line":146},[33,64908,53789],{"class":59},[33,64910,53458],{"class":52945},[33,64912,52952],{"class":59},[33,64914,64915],{"class":35,"line":267},[33,64916,64917],{"class":59},"    \u002F\u002F const btn = document.querySelector('button')\n",[33,64919,64920],{"class":35,"line":275},[33,64921,64922],{"class":59},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[33,64924,64925],{"class":35,"line":392},[33,64926,64927],{"class":59},"    \u002F\u002F   console.log(e);\n",[33,64929,64930],{"class":35,"line":406},[33,64931,64932],{"class":59},"    \u002F\u002F })\n",[33,64934,64935],{"class":35,"line":418},[33,64936,64937],{"class":59},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[33,64939,64940],{"class":35,"line":425},[33,64941,64942],{"class":59},"    const input = document.querySelector('input')\n",[33,64944,64945],{"class":35,"line":1147},[33,64946,64947],{"class":59},"    input.addEventListener('keyup', function (e) {\n",[33,64949,64950],{"class":35,"line":1329},[33,64951,64952],{"class":59},"      if (e.key === 'Enter') {\n",[33,64954,64955],{"class":35,"line":1341},[33,64956,64957],{"class":59},"        console.log('我按下了回车键')\n",[33,64959,64960],{"class":35,"line":1348},[33,64961,54043],{"class":59},[33,64963,64964],{"class":35,"line":1529},[33,64965,35108],{"class":59},[33,64967,64968,64970,64972],{"class":35,"line":1546},[33,64969,54062],{"class":59},[33,64971,53458],{"class":52945},[33,64973,52952],{"class":59},[33,64975,64976,64978,64980],{"class":35,"line":1551},[33,64977,53430],{"class":59},[33,64979,53445],{"class":52945},[33,64981,52952],{"class":59},[23653,64983,64985],{"id":64984},"_3263-trim方法","3.2.6.3 trim方法",[19,64987,64988],{},[3145,64989],{"alt":28,"src":64990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64992,64993],{},[3145,64994],{"alt":28,"src":64995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64997,64998],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65000,65001],{},"str.trim()",[633,65003,65005],{"id":65004},"_327-环境对象","3.2.7 环境对象",[19,65007,65008],{},[3145,65009],{"alt":28,"src":65010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65012,65013],{},[3145,65014],{"alt":28,"src":65015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65017,65018],{},[3145,65019],{"alt":28,"src":65020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65022,65023],{},"实际函数调用是window.fn()",[19,65025,65026],{},"普通函数里面this指向的是window",[2822,65028,65029,65032,65035],{},[165,65030,65031],{},"在普通函数下，this指向的是window",[165,65033,65034],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[165,65036,65037],{},"箭头函数没有this",[19,65039,65040],{},"粗略记法就是：谁调用，this就指向谁",[19,65042,65043],{},[3145,65044],{"alt":28,"src":65045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65047,65048],{},[3145,65049],{"alt":28,"src":65050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65052,65053],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65055,65056],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[23,65058,65060],{"className":54712,"code":65059,"language":54714,"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,65061,65062,65070,65082,65090,65095,65100,65105,65110,65114,65122],{"__ignoreMap":28},[33,65063,65064,65066,65068],{"class":35,"line":36},[33,65065,2726],{"class":59},[33,65067,53445],{"class":52945},[33,65069,52952],{"class":59},[33,65071,65072,65074,65076,65078,65080],{"class":35,"line":43},[33,65073,53789],{"class":59},[33,65075,55531],{"class":52945},[33,65077,55537],{"class":59},[33,65079,55531],{"class":52945},[33,65081,52952],{"class":59},[33,65083,65084,65086,65088],{"class":35,"line":130},[33,65085,53789],{"class":59},[33,65087,53458],{"class":52945},[33,65089,52952],{"class":59},[33,65091,65092],{"class":35,"line":146},[33,65093,65094],{"class":59},"    const button = document.querySelector('button')\n",[33,65096,65097],{"class":35,"line":267},[33,65098,65099],{"class":59},"    button.addEventListener('click', function () {\n",[33,65101,65102],{"class":35,"line":275},[33,65103,65104],{"class":59},"      \u002F\u002F console.log(this);\n",[33,65106,65107],{"class":35,"line":392},[33,65108,65109],{"class":59},"      this.style.color = 'pink'\n",[33,65111,65112],{"class":35,"line":406},[33,65113,35108],{"class":59},[33,65115,65116,65118,65120],{"class":35,"line":418},[33,65117,54062],{"class":59},[33,65119,53458],{"class":52945},[33,65121,52952],{"class":59},[33,65123,65124,65126,65128],{"class":35,"line":425},[33,65125,53430],{"class":59},[33,65127,53445],{"class":52945},[33,65129,52952],{"class":59},[633,65131,65133],{"id":65132},"_328-回调函数","3.2.8 回调函数",[19,65135,65136],{},[3145,65137],{"alt":28,"src":65138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65140,65141],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65143,12990],{},[2822,65145,65146,65149,65152],{},[165,65147,65148],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[165,65150,65151],{},"回调函数本质还是函数，只不过把它当成参数使用",[165,65153,65154],{},"使用匿名函数做为回调函数比较常见",[633,65156,65158],{"id":65157},"_329-tab栏切换","3.2.9 tab栏切换",[19,65160,65161],{},[3145,65162],{"alt":28,"src":65163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[23,65165,65167],{"className":52278,"code":65166,"language":52280,"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,65168,65169,65179,65193,65197,65205,65219,65239,65259,65272,65280,65286,65296,65306,65310,65314,65321,65334,65347,65359,65375,65379,65383,65390,65402,65414,65426,65436,65446,65450,65454,65463,65475,65486,65498,65502,65506,65514,65524,65534,65544,65548,65552,65562,65576,65588,65592,65596,65608,65619,65636,65646,65650,65654,65669,65680,65690,65694,65698,65705,65720,65724,65728,65736,65746,65750,65754,65763,65773,65777,65785,65793,65797,65805,65820,65835,65848,65856,65890,65917,65944,65971,65998,66006,66014,66029,66066,66101,66136,66171,66206,66214,66222,66230,66235,66240,66260,66265,66294,66299,66304,66322,66327,66332,66337,66359,66364,66380,66384,66389,66394,66415,66420,66449,66453,66458,66462,66470,66478,66482],{"__ignoreMap":28},[33,65170,65171,65173,65175,65177],{"class":35,"line":36},[33,65172,52942],{"class":59},[33,65174,52946],{"class":52945},[33,65176,52949],{"class":3632},[33,65178,52952],{"class":59},[33,65180,65181,65183,65185,65187,65189,65191],{"class":35,"line":43},[33,65182,2726],{"class":59},[33,65184,52280],{"class":52945},[33,65186,52961],{"class":3632},[33,65188,64],{"class":59},[33,65190,52966],{"class":117},[33,65192,52952],{"class":59},[33,65194,65195],{"class":35,"line":130},[33,65196,127],{"emptyLinePlaceholder":126},[33,65198,65199,65201,65203],{"class":35,"line":146},[33,65200,2726],{"class":59},[33,65202,52979],{"class":52945},[33,65204,52952],{"class":59},[33,65206,65207,65209,65211,65213,65215,65217],{"class":35,"line":267},[33,65208,53789],{"class":59},[33,65210,52989],{"class":52945},[33,65212,52992],{"class":3632},[33,65214,64],{"class":59},[33,65216,52997],{"class":117},[33,65218,60770],{"class":59},[33,65220,65221,65223,65225,65227,65229,65231,65233,65235,65237],{"class":35,"line":275},[33,65222,53789],{"class":59},[33,65224,52989],{"class":52945},[33,65226,53008],{"class":3632},[33,65228,64],{"class":59},[33,65230,53013],{"class":117},[33,65232,53016],{"class":3632},[33,65234,64],{"class":59},[33,65236,53021],{"class":117},[33,65238,60770],{"class":59},[33,65240,65241,65243,65245,65247,65249,65251,65253,65255,65257],{"class":35,"line":392},[33,65242,53789],{"class":59},[33,65244,52989],{"class":52945},[33,65246,16578],{"class":3632},[33,65248,64],{"class":59},[33,65250,53036],{"class":117},[33,65252,53016],{"class":3632},[33,65254,64],{"class":59},[33,65256,53043],{"class":117},[33,65258,60770],{"class":59},[33,65260,65261,65263,65265,65268,65270],{"class":35,"line":406},[33,65262,53789],{"class":59},[33,65264,53052],{"class":52945},[33,65266,65267],{"class":59},">tab栏切换\u003C\u002F",[33,65269,53052],{"class":52945},[33,65271,52952],{"class":59},[33,65273,65274,65276,65278],{"class":35,"line":418},[33,65275,53789],{"class":59},[33,65277,1729],{"class":52945},[33,65279,52952],{"class":59},[33,65281,65282,65284],{"class":35,"line":425},[33,65283,8063],{"class":52945},[33,65285,17228],{"class":59},[33,65287,65288,65290,65292,65294],{"class":35,"line":1147},[33,65289,56350],{"class":39},[33,65291,53082],{"class":59},[33,65293,2010],{"class":39},[33,65295,2976],{"class":59},[33,65297,65298,65300,65302,65304],{"class":35,"line":1329},[33,65299,56339],{"class":39},[33,65301,53082],{"class":59},[33,65303,2010],{"class":39},[33,65305,2976],{"class":59},[33,65307,65308],{"class":35,"line":1341},[33,65309,3855],{"class":59},[33,65311,65312],{"class":35,"line":1348},[33,65313,127],{"emptyLinePlaceholder":126},[33,65315,65316,65319],{"class":35,"line":1529},[33,65317,65318],{"class":3632},"    .tab",[33,65320,17228],{"class":59},[33,65322,65323,65325,65327,65330,65332],{"class":35,"line":1546},[33,65324,56415],{"class":39},[33,65326,53082],{"class":59},[33,65328,65329],{"class":39},"590",[33,65331,53137],{"class":63},[33,65333,2976],{"class":59},[33,65335,65336,65338,65340,65343,65345],{"class":35,"line":1551},[33,65337,56429],{"class":39},[33,65339,53082],{"class":59},[33,65341,65342],{"class":39},"340",[33,65344,53137],{"class":63},[33,65346,2976],{"class":59},[33,65348,65349,65351,65353,65355,65357],{"class":35,"line":1566},[33,65350,56350],{"class":39},[33,65352,53082],{"class":59},[33,65354,2517],{"class":39},[33,65356,53137],{"class":63},[33,65358,2976],{"class":59},[33,65360,65361,65363,65365,65367,65369,65371,65373],{"class":35,"line":1578},[33,65362,63619],{"class":39},[33,65364,53082],{"class":59},[33,65366,2036],{"class":39},[33,65368,53137],{"class":63},[33,65370,53166],{"class":39},[33,65372,63886],{"class":39},[33,65374,2976],{"class":59},[33,65376,65377],{"class":35,"line":1583},[33,65378,3855],{"class":59},[33,65380,65381],{"class":35,"line":3369},[33,65382,127],{"emptyLinePlaceholder":126},[33,65384,65385,65388],{"class":35,"line":3396},[33,65386,65387],{"class":3632},"    .tab-nav",[33,65389,17228],{"class":59},[33,65391,65392,65394,65396,65398,65400],{"class":35,"line":3401},[33,65393,56415],{"class":39},[33,65395,53082],{"class":59},[33,65397,2129],{"class":39},[33,65399,2146],{"class":63},[33,65401,2976],{"class":59},[33,65403,65404,65406,65408,65410,65412],{"class":35,"line":3418},[33,65405,56429],{"class":39},[33,65407,53082],{"class":59},[33,65409,2723],{"class":39},[33,65411,53137],{"class":63},[33,65413,2976],{"class":59},[33,65415,65416,65418,65420,65422,65424],{"class":35,"line":3423},[33,65417,59002],{"class":39},[33,65419,53082],{"class":59},[33,65421,2723],{"class":39},[33,65423,53137],{"class":63},[33,65425,2976],{"class":59},[33,65427,65428,65430,65432,65434],{"class":35,"line":3428},[33,65429,56653],{"class":39},[33,65431,53082],{"class":59},[33,65433,53122],{"class":39},[33,65435,2976],{"class":59},[33,65437,65438,65440,65442,65444],{"class":35,"line":3433},[33,65439,56664],{"class":39},[33,65441,53082],{"class":59},[33,65443,53313],{"class":39},[33,65445,2976],{"class":59},[33,65447,65448],{"class":35,"line":3447},[33,65449,3855],{"class":59},[33,65451,65452],{"class":35,"line":3452},[33,65453,127],{"emptyLinePlaceholder":126},[33,65455,65456,65458,65461],{"class":35,"line":4243},[33,65457,65387],{"class":3632},[33,65459,65460],{"class":52945}," h3",[33,65462,17228],{"class":59},[33,65464,65465,65467,65469,65471,65473],{"class":35,"line":4257},[33,65466,56566],{"class":39},[33,65468,53082],{"class":59},[33,65470,2617],{"class":39},[33,65472,53137],{"class":63},[33,65474,2976],{"class":59},[33,65476,65477,65479,65481,65484],{"class":35,"line":4265},[33,65478,63976],{"class":39},[33,65480,53082],{"class":59},[33,65482,65483],{"class":39},"normal",[33,65485,2976],{"class":59},[33,65487,65488,65490,65492,65494,65496],{"class":35,"line":4270},[33,65489,63642],{"class":39},[33,65491,53082],{"class":59},[33,65493,2517],{"class":39},[33,65495,53137],{"class":63},[33,65497,2976],{"class":59},[33,65499,65500],{"class":35,"line":4276},[33,65501,3855],{"class":59},[33,65503,65504],{"class":35,"line":4282},[33,65505,127],{"emptyLinePlaceholder":126},[33,65507,65508,65510,65512],{"class":35,"line":4287},[33,65509,65387],{"class":3632},[33,65511,62934],{"class":52945},[33,65513,17228],{"class":59},[33,65515,65516,65518,65520,65522],{"class":35,"line":9608},[33,65517,56376],{"class":39},[33,65519,53082],{"class":59},[33,65521,56381],{"class":39},[33,65523,2976],{"class":59},[33,65525,65526,65528,65530,65532],{"class":35,"line":9632},[33,65527,56653],{"class":39},[33,65529,53082],{"class":59},[33,65531,53122],{"class":39},[33,65533,2976],{"class":59},[33,65535,65536,65538,65540,65542],{"class":35,"line":9637},[33,65537,56664],{"class":39},[33,65539,53082],{"class":59},[33,65541,53225],{"class":39},[33,65543,2976],{"class":59},[33,65545,65546],{"class":35,"line":9643},[33,65547,3855],{"class":59},[33,65549,65550],{"class":35,"line":9670},[33,65551,127],{"emptyLinePlaceholder":126},[33,65553,65554,65556,65558,65560],{"class":35,"line":9675},[33,65555,65387],{"class":3632},[33,65557,62934],{"class":52945},[33,65559,56719],{"class":52945},[33,65561,17228],{"class":59},[33,65563,65564,65566,65568,65570,65572,65574],{"class":35,"line":9681},[33,65565,56350],{"class":39},[33,65567,53082],{"class":59},[33,65569,2010],{"class":39},[33,65571,10610],{"class":39},[33,65573,53137],{"class":63},[33,65575,2976],{"class":59},[33,65577,65578,65580,65582,65584,65586],{"class":35,"line":9693},[33,65579,56566],{"class":39},[33,65581,53082],{"class":59},[33,65583,2366],{"class":39},[33,65585,53137],{"class":63},[33,65587,2976],{"class":59},[33,65589,65590],{"class":35,"line":9705},[33,65591,3855],{"class":59},[33,65593,65594],{"class":35,"line":9717},[33,65595,127],{"emptyLinePlaceholder":126},[33,65597,65598,65600,65602,65604,65606],{"class":35,"line":11375},[33,65599,65387],{"class":3632},[33,65601,62934],{"class":52945},[33,65603,56719],{"class":52945},[33,65605,3081],{"class":52945},[33,65607,17228],{"class":59},[33,65609,65610,65613,65615,65617],{"class":35,"line":11400},[33,65611,65612],{"class":39},"      text-decoration",[33,65614,53082],{"class":59},[33,65616,56381],{"class":39},[33,65618,2976],{"class":59},[33,65620,65621,65623,65625,65627,65629,65631,65634],{"class":35,"line":11423},[33,65622,63874],{"class":39},[33,65624,53082],{"class":59},[33,65626,1897],{"class":39},[33,65628,53137],{"class":63},[33,65630,53166],{"class":39},[33,65632,65633],{"class":39}," transparent",[33,65635,2976],{"class":59},[33,65637,65638,65640,65642,65644],{"class":35,"line":11447},[33,65639,59059],{"class":39},[33,65641,53082],{"class":59},[33,65643,64011],{"class":39},[33,65645,2976],{"class":59},[33,65647,65648],{"class":35,"line":11452},[33,65649,3855],{"class":59},[33,65651,65652],{"class":35,"line":11457},[33,65653,127],{"emptyLinePlaceholder":126},[33,65655,65656,65658,65660,65662,65664,65667],{"class":35,"line":11462},[33,65657,65387],{"class":3632},[33,65659,62934],{"class":52945},[33,65661,56719],{"class":52945},[33,65663,3081],{"class":52945},[33,65665,65666],{"class":3632},".active",[33,65668,17228],{"class":59},[33,65670,65671,65673,65675,65678],{"class":35,"line":11471},[33,65672,63433],{"class":39},[33,65674,53082],{"class":59},[33,65676,65677],{"class":39},"#e1251b",[33,65679,2976],{"class":59},[33,65681,65682,65684,65686,65688],{"class":35,"line":11476},[33,65683,59059],{"class":39},[33,65685,53082],{"class":59},[33,65687,65677],{"class":39},[33,65689,2976],{"class":59},[33,65691,65692],{"class":35,"line":11482},[33,65693,3855],{"class":59},[33,65695,65696],{"class":35,"line":11503},[33,65697,127],{"emptyLinePlaceholder":126},[33,65699,65700,65703],{"class":35,"line":11509},[33,65701,65702],{"class":3632},"    .tab-content",[33,65704,17228],{"class":59},[33,65706,65707,65709,65711,65713,65716,65718],{"class":35,"line":11523},[33,65708,56339],{"class":39},[33,65710,53082],{"class":59},[33,65712,2010],{"class":39},[33,65714,65715],{"class":39}," 16",[33,65717,53137],{"class":63},[33,65719,2976],{"class":59},[33,65721,65722],{"class":35,"line":11529},[33,65723,3855],{"class":59},[33,65725,65726],{"class":35,"line":11556},[33,65727,127],{"emptyLinePlaceholder":126},[33,65729,65730,65732,65734],{"class":35,"line":11565},[33,65731,65702],{"class":3632},[33,65733,63816],{"class":3632},[33,65735,17228],{"class":59},[33,65737,65738,65740,65742,65744],{"class":35,"line":11571},[33,65739,56653],{"class":39},[33,65741,53082],{"class":59},[33,65743,56381],{"class":39},[33,65745,2976],{"class":59},[33,65747,65748],{"class":35,"line":11579},[33,65749,3855],{"class":59},[33,65751,65752],{"class":35,"line":11584},[33,65753,127],{"emptyLinePlaceholder":126},[33,65755,65756,65758,65761],{"class":35,"line":18259},[33,65757,65702],{"class":3632},[33,65759,65760],{"class":3632}," .item.active",[33,65762,17228],{"class":59},[33,65764,65765,65767,65769,65771],{"class":35,"line":18265},[33,65766,56653],{"class":39},[33,65768,53082],{"class":59},[33,65770,62511],{"class":39},[33,65772,2976],{"class":59},[33,65774,65775],{"class":35,"line":18288},[33,65776,3855],{"class":59},[33,65778,65779,65781,65783],{"class":35,"line":18294},[33,65780,54062],{"class":59},[33,65782,1729],{"class":52945},[33,65784,52952],{"class":59},[33,65786,65787,65789,65791],{"class":35,"line":18317},[33,65788,53430],{"class":59},[33,65790,52979],{"class":52945},[33,65792,52952],{"class":59},[33,65794,65795],{"class":35,"line":18331},[33,65796,127],{"emptyLinePlaceholder":126},[33,65798,65799,65801,65803],{"class":35,"line":18351},[33,65800,2726],{"class":59},[33,65802,53445],{"class":52945},[33,65804,52952],{"class":59},[33,65806,65807,65809,65811,65813,65815,65818],{"class":35,"line":18357},[33,65808,53789],{"class":59},[33,65810,53256],{"class":52945},[33,65812,55131],{"class":3632},[33,65814,64],{"class":59},[33,65816,65817],{"class":117},"\"tab\"",[33,65819,52952],{"class":59},[33,65821,65822,65824,65826,65828,65830,65833],{"class":35,"line":18368},[33,65823,52986],{"class":59},[33,65825,53256],{"class":52945},[33,65827,55131],{"class":3632},[33,65829,64],{"class":59},[33,65831,65832],{"class":117},"\"tab-nav\"",[33,65834,52952],{"class":59},[33,65836,65837,65839,65841,65844,65846],{"class":35,"line":18391},[33,65838,56878],{"class":59},[33,65840,633],{"class":52945},[33,65842,65843],{"class":59},">每日特价\u003C\u002F",[33,65845,633],{"class":52945},[33,65847,52952],{"class":59},[33,65849,65850,65852,65854],{"class":35,"line":18413},[33,65851,56878],{"class":59},[33,65853,2822],{"class":52945},[33,65855,52952],{"class":59},[33,65857,65858,65860,65862,65864,65866,65868,65870,65872,65874,65876,65879,65882,65884,65886,65888],{"class":35,"line":18418},[33,65859,56946],{"class":59},[33,65861,165],{"class":52945},[33,65863,62694],{"class":59},[33,65865,2057],{"class":52945},[33,65867,55131],{"class":3632},[33,65869,64],{"class":59},[33,65871,61349],{"class":117},[33,65873,62699],{"class":3632},[33,65875,64],{"class":59},[33,65877,65878],{"class":117},"\"javascript:;\"",[33,65880,65881],{"class":59},">精选\u003C\u002F",[33,65883,2057],{"class":52945},[33,65885,56958],{"class":59},[33,65887,165],{"class":52945},[33,65889,52952],{"class":59},[33,65891,65892,65894,65896,65898,65900,65902,65904,65906,65909,65911,65913,65915],{"class":35,"line":18424},[33,65893,56946],{"class":59},[33,65895,165],{"class":52945},[33,65897,62694],{"class":59},[33,65899,2057],{"class":52945},[33,65901,62699],{"class":3632},[33,65903,64],{"class":59},[33,65905,65878],{"class":117},[33,65907,65908],{"class":59},">美食\u003C\u002F",[33,65910,2057],{"class":52945},[33,65912,56958],{"class":59},[33,65914,165],{"class":52945},[33,65916,52952],{"class":59},[33,65918,65919,65921,65923,65925,65927,65929,65931,65933,65936,65938,65940,65942],{"class":35,"line":18438},[33,65920,56946],{"class":59},[33,65922,165],{"class":52945},[33,65924,62694],{"class":59},[33,65926,2057],{"class":52945},[33,65928,62699],{"class":3632},[33,65930,64],{"class":59},[33,65932,65878],{"class":117},[33,65934,65935],{"class":59},">百货\u003C\u002F",[33,65937,2057],{"class":52945},[33,65939,56958],{"class":59},[33,65941,165],{"class":52945},[33,65943,52952],{"class":59},[33,65945,65946,65948,65950,65952,65954,65956,65958,65960,65963,65965,65967,65969],{"class":35,"line":18451},[33,65947,56946],{"class":59},[33,65949,165],{"class":52945},[33,65951,62694],{"class":59},[33,65953,2057],{"class":52945},[33,65955,62699],{"class":3632},[33,65957,64],{"class":59},[33,65959,65878],{"class":117},[33,65961,65962],{"class":59},">个护\u003C\u002F",[33,65964,2057],{"class":52945},[33,65966,56958],{"class":59},[33,65968,165],{"class":52945},[33,65970,52952],{"class":59},[33,65972,65973,65975,65977,65979,65981,65983,65985,65987,65990,65992,65994,65996],{"class":35,"line":18456},[33,65974,56946],{"class":59},[33,65976,165],{"class":52945},[33,65978,62694],{"class":59},[33,65980,2057],{"class":52945},[33,65982,62699],{"class":3632},[33,65984,64],{"class":59},[33,65986,65878],{"class":117},[33,65988,65989],{"class":59},">预告\u003C\u002F",[33,65991,2057],{"class":52945},[33,65993,56958],{"class":59},[33,65995,165],{"class":52945},[33,65997,52952],{"class":59},[33,65999,66000,66002,66004],{"class":35,"line":18470},[33,66001,57051],{"class":59},[33,66003,2822],{"class":52945},[33,66005,52952],{"class":59},[33,66007,66008,66010,66012],{"class":35,"line":18475},[33,66009,53421],{"class":59},[33,66011,53256],{"class":52945},[33,66013,52952],{"class":59},[33,66015,66016,66018,66020,66022,66024,66027],{"class":35,"line":18481},[33,66017,52986],{"class":59},[33,66019,53256],{"class":52945},[33,66021,55131],{"class":3632},[33,66023,64],{"class":59},[33,66025,66026],{"class":117},"\"tab-content\"",[33,66028,52952],{"class":59},[33,66030,66031,66033,66035,66037,66039,66042,66044,66046,66048,66050,66053,66055,66057,66059,66062,66064],{"class":35,"line":18486},[33,66032,56878],{"class":59},[33,66034,53256],{"class":52945},[33,66036,55131],{"class":3632},[33,66038,64],{"class":59},[33,66040,66041],{"class":117},"\"item active\"",[33,66043,62694],{"class":59},[33,66045,3145],{"class":52945},[33,66047,56883],{"class":3632},[33,66049,64],{"class":59},[33,66051,66052],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[33,66054,56891],{"class":3632},[33,66056,64],{"class":59},[33,66058,9312],{"class":117},[33,66060,66061],{"class":59}," \u002F>\u003C\u002F",[33,66063,53256],{"class":52945},[33,66065,52952],{"class":59},[33,66067,66068,66070,66072,66074,66076,66078,66080,66082,66084,66086,66089,66091,66093,66095,66097,66099],{"class":35,"line":18500},[33,66069,56878],{"class":59},[33,66071,53256],{"class":52945},[33,66073,55131],{"class":3632},[33,66075,64],{"class":59},[33,66077,64265],{"class":117},[33,66079,62694],{"class":59},[33,66081,3145],{"class":52945},[33,66083,56883],{"class":3632},[33,66085,64],{"class":59},[33,66087,66088],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[33,66090,56891],{"class":3632},[33,66092,64],{"class":59},[33,66094,9312],{"class":117},[33,66096,66061],{"class":59},[33,66098,53256],{"class":52945},[33,66100,52952],{"class":59},[33,66102,66103,66105,66107,66109,66111,66113,66115,66117,66119,66121,66124,66126,66128,66130,66132,66134],{"class":35,"line":18505},[33,66104,56878],{"class":59},[33,66106,53256],{"class":52945},[33,66108,55131],{"class":3632},[33,66110,64],{"class":59},[33,66112,64265],{"class":117},[33,66114,62694],{"class":59},[33,66116,3145],{"class":52945},[33,66118,56883],{"class":3632},[33,66120,64],{"class":59},[33,66122,66123],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[33,66125,56891],{"class":3632},[33,66127,64],{"class":59},[33,66129,9312],{"class":117},[33,66131,66061],{"class":59},[33,66133,53256],{"class":52945},[33,66135,52952],{"class":59},[33,66137,66138,66140,66142,66144,66146,66148,66150,66152,66154,66156,66159,66161,66163,66165,66167,66169],{"class":35,"line":18510},[33,66139,56878],{"class":59},[33,66141,53256],{"class":52945},[33,66143,55131],{"class":3632},[33,66145,64],{"class":59},[33,66147,64265],{"class":117},[33,66149,62694],{"class":59},[33,66151,3145],{"class":52945},[33,66153,56883],{"class":3632},[33,66155,64],{"class":59},[33,66157,66158],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[33,66160,56891],{"class":3632},[33,66162,64],{"class":59},[33,66164,9312],{"class":117},[33,66166,66061],{"class":59},[33,66168,53256],{"class":52945},[33,66170,52952],{"class":59},[33,66172,66173,66175,66177,66179,66181,66183,66185,66187,66189,66191,66194,66196,66198,66200,66202,66204],{"class":35,"line":18524},[33,66174,56878],{"class":59},[33,66176,53256],{"class":52945},[33,66178,55131],{"class":3632},[33,66180,64],{"class":59},[33,66182,64265],{"class":117},[33,66184,62694],{"class":59},[33,66186,3145],{"class":52945},[33,66188,56883],{"class":3632},[33,66190,64],{"class":59},[33,66192,66193],{"class":117},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[33,66195,56891],{"class":3632},[33,66197,64],{"class":59},[33,66199,9312],{"class":117},[33,66201,66061],{"class":59},[33,66203,53256],{"class":52945},[33,66205,52952],{"class":59},[33,66207,66208,66210,66212],{"class":35,"line":18536},[33,66209,53421],{"class":59},[33,66211,53256],{"class":52945},[33,66213,52952],{"class":59},[33,66215,66216,66218,66220],{"class":35,"line":18541},[33,66217,54062],{"class":59},[33,66219,53256],{"class":52945},[33,66221,52952],{"class":59},[33,66223,66224,66226,66228],{"class":35,"line":18554},[33,66225,53789],{"class":59},[33,66227,53458],{"class":52945},[33,66229,52952],{"class":59},[33,66231,66232],{"class":35,"line":18559},[33,66233,66234],{"class":87},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[33,66236,66237],{"class":35,"line":18564},[33,66238,66239],{"class":87},"    \u002F\u002F 1.1 获取 a 元素 \n",[33,66241,66242,66244,66247,66249,66251,66253,66255,66258],{"class":35,"line":18569},[33,66243,12879],{"class":63},[33,66245,66246],{"class":39}," as",[33,66248,15222],{"class":63},[33,66250,56040],{"class":59},[33,66252,57325],{"class":3632},[33,66254,109],{"class":59},[33,66256,66257],{"class":117},"'.tab-nav a'",[33,66259,157],{"class":59},[33,66261,66262],{"class":35,"line":18582},[33,66263,66264],{"class":87},"    \u002F\u002F console.log(as) \n",[33,66266,66267,66269,66271,66273,66275,66277,66279,66281,66283,66286,66288,66290,66292],{"class":35,"line":18587},[33,66268,4864],{"class":63},[33,66270,3332],{"class":59},[33,66272,53492],{"class":63},[33,66274,11097],{"class":59},[33,66276,64],{"class":63},[33,66278,829],{"class":39},[33,66280,11104],{"class":59},[33,66282,2726],{"class":63},[33,66284,66285],{"class":59}," as.",[33,66287,53613],{"class":39},[33,66289,4877],{"class":59},[33,66291,3960],{"class":63},[33,66293,14100],{"class":59},[33,66295,66296],{"class":35,"line":34280},[33,66297,66298],{"class":87},"      \u002F\u002F console.log(as[i])\n",[33,66300,66301],{"class":35,"line":34286},[33,66302,66303],{"class":87},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[33,66305,66306,66309,66311,66313,66316,66318,66320],{"class":35,"line":34292},[33,66307,66308],{"class":59},"      as[i].",[33,66310,59456],{"class":3632},[33,66312,109],{"class":59},[33,66314,66315],{"class":117},"'mouseenter'",[33,66317,14093],{"class":59},[33,66319,56093],{"class":63},[33,66321,56096],{"class":59},[33,66323,66324],{"class":35,"line":34298},[33,66325,66326],{"class":87},"        \u002F\u002F console.log('鼠标经过')\n",[33,66328,66329],{"class":35,"line":34304},[33,66330,66331],{"class":87},"        \u002F\u002F 排他思想  \n",[33,66333,66334],{"class":35,"line":34315},[33,66335,66336],{"class":87},"        \u002F\u002F 干掉别人 移除类active\n",[33,66338,66339,66341,66343,66345,66348,66350,66352,66354,66357],{"class":35,"line":34321},[33,66340,53570],{"class":59},[33,66342,56043],{"class":3632},[33,66344,109],{"class":59},[33,66346,66347],{"class":117},"'.tab-nav .active'",[33,66349,58646],{"class":59},[33,66351,58649],{"class":3632},[33,66353,109],{"class":59},[33,66355,66356],{"class":117},"'active'",[33,66358,157],{"class":59},[33,66360,66361],{"class":35,"line":34341},[33,66362,66363],{"class":87},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[33,66365,66366,66369,66372,66374,66376,66378],{"class":35,"line":34347},[33,66367,66368],{"class":39},"        this",[33,66370,66371],{"class":59},".classList.",[33,66373,6995],{"class":3632},[33,66375,109],{"class":59},[33,66377,66356],{"class":117},[33,66379,157],{"class":59},[33,66381,66382],{"class":35,"line":34358},[33,66383,127],{"emptyLinePlaceholder":126},[33,66385,66386],{"class":35,"line":34364},[33,66387,66388],{"class":87},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[33,66390,66391],{"class":35,"line":34370},[33,66392,66393],{"class":87},"        \u002F\u002F 干掉别人\n",[33,66395,66396,66398,66400,66402,66405,66407,66409,66411,66413],{"class":35,"line":34376},[33,66397,53570],{"class":59},[33,66399,56043],{"class":3632},[33,66401,109],{"class":59},[33,66403,66404],{"class":117},"'.tab-content .active'",[33,66406,58646],{"class":59},[33,66408,58649],{"class":3632},[33,66410,109],{"class":59},[33,66412,66356],{"class":117},[33,66414,157],{"class":59},[33,66416,66417],{"class":35,"line":34382},[33,66418,66419],{"class":87},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[33,66421,66422,66424,66426,66428,66431,66433,66435,66437,66439,66441,66443,66445,66447],{"class":35,"line":34388},[33,66423,53570],{"class":59},[33,66425,56043],{"class":3632},[33,66427,109],{"class":59},[33,66429,66430],{"class":117},"`.tab-content .item:nth-child(${",[33,66432,2259],{"class":59},[33,66434,47212],{"class":63},[33,66436,26774],{"class":39},[33,66438,58675],{"class":117},[33,66440,58646],{"class":59},[33,66442,6995],{"class":3632},[33,66444,109],{"class":59},[33,66446,66356],{"class":117},[33,66448,157],{"class":59},[33,66450,66451],{"class":35,"line":34394},[33,66452,127],{"emptyLinePlaceholder":126},[33,66454,66455],{"class":35,"line":34400},[33,66456,66457],{"class":59},"      })\n",[33,66459,66460],{"class":35,"line":34420},[33,66461,3855],{"class":59},[33,66463,66464,66466,66468],{"class":35,"line":34426},[33,66465,54062],{"class":59},[33,66467,53458],{"class":52945},[33,66469,52952],{"class":59},[33,66471,66472,66474,66476],{"class":35,"line":34442},[33,66473,53430],{"class":59},[33,66475,53445],{"class":52945},[33,66477,52952],{"class":59},[33,66479,66480],{"class":35,"line":34448},[33,66481,127],{"emptyLinePlaceholder":126},[33,66483,66484,66486,66488],{"class":35,"line":34462},[33,66485,53430],{"class":59},[33,66487,52280],{"class":52945},[33,66489,52952],{"class":59},[19,66491,66492],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66494,66495],{},"在监听事件中，this指向的就是他的调用者",[19,66497,66498],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66500,55365],{},[19,66502,66503],{},"(function () {",[19,66505,66506],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66508,66509],{},"list.addEventListener('click', function (e) {",[19,66511,66512],{},"if (e.target.tagName === 'A') {",[19,66514,66515],{},"\u002F\u002F 排他思想",[19,66517,66518],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66520,66521],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66523,66524],{},"\u002F\u002F console.log(old);",[19,66526,66527],{},"\u002F\u002F 判断",[19,66529,66530],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66532,66533],{},"if (old) old.classList.remove('active')",[19,66535,66536],{},"e.target.classList.add('active')",[19,66538,1011],{},[19,66540,54109],{},[19,66542,66543],{},"})();",[633,66545,66547],{"id":66546},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[23,66549,66551],{"className":52278,"code":66550,"language":52280,"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,66552,66553,66563,66567,66575,66579,66593,66607,66619,66627,66633,66643,66653,66657,66661,66668,66680,66691,66708,66721,66735,66745,66749,66753,66760,66771,66789,66799,66811,66815,66819,66826,66843,66854,66866,66870,66874,66881,66893,66897,66905,66913,66917,66925,66933,66941,66956,67000,67008,67021,67034,67047,67055,67063,67071,67099,67107,67119,67132,67145,67153,67161,67169,67195,67203,67216,67228,67241,67249,67257,67265,67291,67299,67312,67324,67337,67345,67353,67361,67366,67386,67391,67411,67416,67433,67438,67446,67451,67480,67493,67497,67501,67506,67510,67538,67543,67560,67565,67570,67575,67580,67606,67610,67614,67622,67630,67634],{"__ignoreMap":28},[33,66554,66555,66557,66559,66561],{"class":35,"line":36},[33,66556,52942],{"class":59},[33,66558,52946],{"class":52945},[33,66560,52949],{"class":3632},[33,66562,52952],{"class":59},[33,66564,66565],{"class":35,"line":43},[33,66566,127],{"emptyLinePlaceholder":126},[33,66568,66569,66571,66573],{"class":35,"line":130},[33,66570,2726],{"class":59},[33,66572,52280],{"class":52945},[33,66574,52952],{"class":59},[33,66576,66577],{"class":35,"line":146},[33,66578,127],{"emptyLinePlaceholder":126},[33,66580,66581,66583,66585,66587,66589,66591],{"class":35,"line":267},[33,66582,2726],{"class":59},[33,66584,52979],{"class":52945},[33,66586,52961],{"class":3632},[33,66588,64],{"class":59},[33,66590,52966],{"class":117},[33,66592,52952],{"class":59},[33,66594,66595,66597,66599,66601,66603,66605],{"class":35,"line":275},[33,66596,53789],{"class":59},[33,66598,52989],{"class":52945},[33,66600,52992],{"class":3632},[33,66602,64],{"class":59},[33,66604,52997],{"class":117},[33,66606,52952],{"class":59},[33,66608,66609,66611,66613,66615,66617],{"class":35,"line":392},[33,66610,53789],{"class":59},[33,66612,53052],{"class":52945},[33,66614,56958],{"class":59},[33,66616,53052],{"class":52945},[33,66618,52952],{"class":59},[33,66620,66621,66623,66625],{"class":35,"line":406},[33,66622,53789],{"class":59},[33,66624,1729],{"class":52945},[33,66626,52952],{"class":59},[33,66628,66629,66631],{"class":35,"line":418},[33,66630,8063],{"class":52945},[33,66632,17228],{"class":59},[33,66634,66635,66637,66639,66641],{"class":35,"line":425},[33,66636,56350],{"class":39},[33,66638,53082],{"class":59},[33,66640,2010],{"class":39},[33,66642,2976],{"class":59},[33,66644,66645,66647,66649,66651],{"class":35,"line":1147},[33,66646,56339],{"class":39},[33,66648,53082],{"class":59},[33,66650,2010],{"class":39},[33,66652,2976],{"class":59},[33,66654,66655],{"class":35,"line":1329},[33,66656,3855],{"class":59},[33,66658,66659],{"class":35,"line":1341},[33,66660,127],{"emptyLinePlaceholder":126},[33,66662,66663,66666],{"class":35,"line":1348},[33,66664,66665],{"class":52945},"    table",[33,66667,17228],{"class":59},[33,66669,66670,66673,66675,66678],{"class":35,"line":1529},[33,66671,66672],{"class":39},"      border-collapse",[33,66674,53082],{"class":59},[33,66676,66677],{"class":39},"collapse",[33,66679,2976],{"class":59},[33,66681,66682,66685,66687,66689],{"class":35,"line":1546},[33,66683,66684],{"class":39},"      border-spacing",[33,66686,53082],{"class":59},[33,66688,2010],{"class":39},[33,66690,2976],{"class":59},[33,66692,66693,66695,66697,66699,66701,66703,66706],{"class":35,"line":1551},[33,66694,63619],{"class":39},[33,66696,53082],{"class":59},[33,66698,2036],{"class":39},[33,66700,53137],{"class":63},[33,66702,53166],{"class":39},[33,66704,66705],{"class":39}," #c0c0c0",[33,66707,2976],{"class":59},[33,66709,66710,66712,66714,66717,66719],{"class":35,"line":1566},[33,66711,56415],{"class":39},[33,66713,53082],{"class":59},[33,66715,66716],{"class":39},"500",[33,66718,53137],{"class":63},[33,66720,2976],{"class":59},[33,66722,66723,66725,66727,66729,66731,66733],{"class":35,"line":1578},[33,66724,56350],{"class":39},[33,66726,53082],{"class":59},[33,66728,2129],{"class":39},[33,66730,53137],{"class":63},[33,66732,53201],{"class":39},[33,66734,2976],{"class":59},[33,66736,66737,66739,66741,66743],{"class":35,"line":1583},[33,66738,58929],{"class":39},[33,66740,53082],{"class":59},[33,66742,53237],{"class":39},[33,66744,2976],{"class":59},[33,66746,66747],{"class":35,"line":3369},[33,66748,3855],{"class":59},[33,66750,66751],{"class":35,"line":3396},[33,66752,127],{"emptyLinePlaceholder":126},[33,66754,66755,66758],{"class":35,"line":3401},[33,66756,66757],{"class":52945},"    th",[33,66759,17228],{"class":59},[33,66761,66762,66764,66766,66769],{"class":35,"line":3418},[33,66763,56528],{"class":39},[33,66765,53082],{"class":59},[33,66767,66768],{"class":39},"#09c",[33,66770,2976],{"class":59},[33,66772,66773,66776,66778,66780,66782,66784,66787],{"class":35,"line":3423},[33,66774,66775],{"class":39},"      font",[33,66777,53082],{"class":59},[33,66779,63981],{"class":39},[33,66781,65715],{"class":39},[33,66783,53137],{"class":63},[33,66785,66786],{"class":117}," \"微软雅黑\"",[33,66788,2976],{"class":59},[33,66790,66791,66793,66795,66797],{"class":35,"line":3428},[33,66792,59059],{"class":39},[33,66794,53082],{"class":59},[33,66796,62484],{"class":39},[33,66798,2976],{"class":59},[33,66800,66801,66803,66805,66807,66809],{"class":35,"line":3433},[33,66802,56429],{"class":39},[33,66804,53082],{"class":59},[33,66806,2617],{"class":39},[33,66808,53137],{"class":63},[33,66810,2976],{"class":59},[33,66812,66813],{"class":35,"line":3447},[33,66814,3855],{"class":59},[33,66816,66817],{"class":35,"line":3452},[33,66818,127],{"emptyLinePlaceholder":126},[33,66820,66821,66824],{"class":35,"line":4243},[33,66822,66823],{"class":52945},"    td",[33,66825,17228],{"class":59},[33,66827,66828,66830,66832,66834,66836,66838,66841],{"class":35,"line":4257},[33,66829,63619],{"class":39},[33,66831,53082],{"class":59},[33,66833,2036],{"class":39},[33,66835,53137],{"class":63},[33,66837,53166],{"class":39},[33,66839,66840],{"class":39}," #d0d0d0",[33,66842,2976],{"class":59},[33,66844,66845,66847,66849,66852],{"class":35,"line":4265},[33,66846,59059],{"class":39},[33,66848,53082],{"class":59},[33,66850,66851],{"class":39},"#404060",[33,66853,2976],{"class":59},[33,66855,66856,66858,66860,66862,66864],{"class":35,"line":4270},[33,66857,56339],{"class":39},[33,66859,53082],{"class":59},[33,66861,2264],{"class":39},[33,66863,53137],{"class":63},[33,66865,2976],{"class":59},[33,66867,66868],{"class":35,"line":4276},[33,66869,3855],{"class":59},[33,66871,66872],{"class":35,"line":4282},[33,66873,127],{"emptyLinePlaceholder":126},[33,66875,66876,66879],{"class":35,"line":4287},[33,66877,66878],{"class":3632},"    .allCheck",[33,66880,17228],{"class":59},[33,66882,66883,66885,66887,66889,66891],{"class":35,"line":9608},[33,66884,56415],{"class":39},[33,66886,53082],{"class":59},[33,66888,2429],{"class":39},[33,66890,53137],{"class":63},[33,66892,2976],{"class":59},[33,66894,66895],{"class":35,"line":9632},[33,66896,3855],{"class":59},[33,66898,66899,66901,66903],{"class":35,"line":9637},[33,66900,54062],{"class":59},[33,66902,1729],{"class":52945},[33,66904,52952],{"class":59},[33,66906,66907,66909,66911],{"class":35,"line":9643},[33,66908,53430],{"class":59},[33,66910,52979],{"class":52945},[33,66912,52952],{"class":59},[33,66914,66915],{"class":35,"line":9670},[33,66916,127],{"emptyLinePlaceholder":126},[33,66918,66919,66921,66923],{"class":35,"line":9675},[33,66920,2726],{"class":59},[33,66922,53445],{"class":52945},[33,66924,52952],{"class":59},[33,66926,66927,66929,66931],{"class":35,"line":9681},[33,66928,53789],{"class":59},[33,66930,1956],{"class":52945},[33,66932,52952],{"class":59},[33,66934,66935,66937,66939],{"class":35,"line":9693},[33,66936,52986],{"class":59},[33,66938,1962],{"class":52945},[33,66940,52952],{"class":59},[33,66942,66943,66945,66947,66949,66951,66954],{"class":35,"line":9705},[33,66944,56878],{"class":59},[33,66946,1965],{"class":52945},[33,66948,55131],{"class":3632},[33,66950,64],{"class":59},[33,66952,66953],{"class":117},"\"allCheck\"",[33,66955,52952],{"class":59},[33,66957,66958,66960,66962,66964,66966,66968,66970,66972,66974,66976,66978,66981,66984,66986,66988,66990,66993,66996,66998],{"class":35,"line":9717},[33,66959,56946],{"class":59},[33,66961,112],{"class":52945},[33,66963,55468],{"class":3632},[33,66965,64],{"class":59},[33,66967,55473],{"class":117},[33,66969,16578],{"class":3632},[33,66971,64],{"class":59},[33,66973,9312],{"class":117},[33,66975,16617],{"class":3632},[33,66977,64],{"class":59},[33,66979,66980],{"class":117},"\"checkAll\"",[33,66982,66983],{"class":59},"> \u003C",[33,66985,33],{"class":52945},[33,66987,55131],{"class":3632},[33,66989,64],{"class":59},[33,66991,66992],{"class":117},"\"all\"",[33,66994,66995],{"class":59},">全选\u003C\u002F",[33,66997,33],{"class":52945},[33,66999,52952],{"class":59},[33,67001,67002,67004,67006],{"class":35,"line":11375},[33,67003,57051],{"class":59},[33,67005,1965],{"class":52945},[33,67007,52952],{"class":59},[33,67009,67010,67012,67014,67017,67019],{"class":35,"line":11400},[33,67011,56878],{"class":59},[33,67013,1965],{"class":52945},[33,67015,67016],{"class":59},">商品\u003C\u002F",[33,67018,1965],{"class":52945},[33,67020,52952],{"class":59},[33,67022,67023,67025,67027,67030,67032],{"class":35,"line":11423},[33,67024,56878],{"class":59},[33,67026,1965],{"class":52945},[33,67028,67029],{"class":59},">商家\u003C\u002F",[33,67031,1965],{"class":52945},[33,67033,52952],{"class":59},[33,67035,67036,67038,67040,67043,67045],{"class":35,"line":11447},[33,67037,56878],{"class":59},[33,67039,1965],{"class":52945},[33,67041,67042],{"class":59},">价格\u003C\u002F",[33,67044,1965],{"class":52945},[33,67046,52952],{"class":59},[33,67048,67049,67051,67053],{"class":35,"line":11452},[33,67050,53421],{"class":59},[33,67052,1962],{"class":52945},[33,67054,52952],{"class":59},[33,67056,67057,67059,67061],{"class":35,"line":11457},[33,67058,52986],{"class":59},[33,67060,1962],{"class":52945},[33,67062,52952],{"class":59},[33,67064,67065,67067,67069],{"class":35,"line":11462},[33,67066,56878],{"class":59},[33,67068,2008],{"class":52945},[33,67070,52952],{"class":59},[33,67072,67073,67075,67077,67079,67081,67083,67085,67087,67090,67092,67094,67097],{"class":35,"line":11471},[33,67074,56946],{"class":59},[33,67076,112],{"class":52945},[33,67078,55468],{"class":3632},[33,67080,64],{"class":59},[33,67082,55473],{"class":117},[33,67084,16578],{"class":3632},[33,67086,64],{"class":59},[33,67088,67089],{"class":117},"\"check\"",[33,67091,55131],{"class":3632},[33,67093,64],{"class":59},[33,67095,67096],{"class":117},"\"ck\"",[33,67098,52952],{"class":59},[33,67100,67101,67103,67105],{"class":35,"line":11476},[33,67102,57051],{"class":59},[33,67104,2008],{"class":52945},[33,67106,52952],{"class":59},[33,67108,67109,67111,67113,67115,67117],{"class":35,"line":11482},[33,67110,56878],{"class":59},[33,67112,2008],{"class":52945},[33,67114,62815],{"class":59},[33,67116,2008],{"class":52945},[33,67118,52952],{"class":59},[33,67120,67121,67123,67125,67128,67130],{"class":35,"line":11503},[33,67122,56878],{"class":59},[33,67124,2008],{"class":52945},[33,67126,67127],{"class":59},">小米\u003C\u002F",[33,67129,2008],{"class":52945},[33,67131,52952],{"class":59},[33,67133,67134,67136,67138,67141,67143],{"class":35,"line":11509},[33,67135,56878],{"class":59},[33,67137,2008],{"class":52945},[33,67139,67140],{"class":59},">￥1999\u003C\u002F",[33,67142,2008],{"class":52945},[33,67144,52952],{"class":59},[33,67146,67147,67149,67151],{"class":35,"line":11523},[33,67148,53421],{"class":59},[33,67150,1962],{"class":52945},[33,67152,52952],{"class":59},[33,67154,67155,67157,67159],{"class":35,"line":11529},[33,67156,52986],{"class":59},[33,67158,1962],{"class":52945},[33,67160,52952],{"class":59},[33,67162,67163,67165,67167],{"class":35,"line":11556},[33,67164,56878],{"class":59},[33,67166,2008],{"class":52945},[33,67168,52952],{"class":59},[33,67170,67171,67173,67175,67177,67179,67181,67183,67185,67187,67189,67191,67193],{"class":35,"line":11565},[33,67172,56946],{"class":59},[33,67174,112],{"class":52945},[33,67176,55468],{"class":3632},[33,67178,64],{"class":59},[33,67180,55473],{"class":117},[33,67182,16578],{"class":3632},[33,67184,64],{"class":59},[33,67186,67089],{"class":117},[33,67188,55131],{"class":3632},[33,67190,64],{"class":59},[33,67192,67096],{"class":117},[33,67194,52952],{"class":59},[33,67196,67197,67199,67201],{"class":35,"line":11571},[33,67198,57051],{"class":59},[33,67200,2008],{"class":52945},[33,67202,52952],{"class":59},[33,67204,67205,67207,67209,67212,67214],{"class":35,"line":11579},[33,67206,56878],{"class":59},[33,67208,2008],{"class":52945},[33,67210,67211],{"class":59},">小米净水器\u003C\u002F",[33,67213,2008],{"class":52945},[33,67215,52952],{"class":59},[33,67217,67218,67220,67222,67224,67226],{"class":35,"line":11584},[33,67219,56878],{"class":59},[33,67221,2008],{"class":52945},[33,67223,67127],{"class":59},[33,67225,2008],{"class":52945},[33,67227,52952],{"class":59},[33,67229,67230,67232,67234,67237,67239],{"class":35,"line":18259},[33,67231,56878],{"class":59},[33,67233,2008],{"class":52945},[33,67235,67236],{"class":59},">￥4999\u003C\u002F",[33,67238,2008],{"class":52945},[33,67240,52952],{"class":59},[33,67242,67243,67245,67247],{"class":35,"line":18265},[33,67244,53421],{"class":59},[33,67246,1962],{"class":52945},[33,67248,52952],{"class":59},[33,67250,67251,67253,67255],{"class":35,"line":18288},[33,67252,52986],{"class":59},[33,67254,1962],{"class":52945},[33,67256,52952],{"class":59},[33,67258,67259,67261,67263],{"class":35,"line":18294},[33,67260,56878],{"class":59},[33,67262,2008],{"class":52945},[33,67264,52952],{"class":59},[33,67266,67267,67269,67271,67273,67275,67277,67279,67281,67283,67285,67287,67289],{"class":35,"line":18317},[33,67268,56946],{"class":59},[33,67270,112],{"class":52945},[33,67272,55468],{"class":3632},[33,67274,64],{"class":59},[33,67276,55473],{"class":117},[33,67278,16578],{"class":3632},[33,67280,64],{"class":59},[33,67282,67089],{"class":117},[33,67284,55131],{"class":3632},[33,67286,64],{"class":59},[33,67288,67096],{"class":117},[33,67290,52952],{"class":59},[33,67292,67293,67295,67297],{"class":35,"line":18331},[33,67294,57051],{"class":59},[33,67296,2008],{"class":52945},[33,67298,52952],{"class":59},[33,67300,67301,67303,67305,67308,67310],{"class":35,"line":18351},[33,67302,56878],{"class":59},[33,67304,2008],{"class":52945},[33,67306,67307],{"class":59},">小米电视\u003C\u002F",[33,67309,2008],{"class":52945},[33,67311,52952],{"class":59},[33,67313,67314,67316,67318,67320,67322],{"class":35,"line":18357},[33,67315,56878],{"class":59},[33,67317,2008],{"class":52945},[33,67319,67127],{"class":59},[33,67321,2008],{"class":52945},[33,67323,52952],{"class":59},[33,67325,67326,67328,67330,67333,67335],{"class":35,"line":18368},[33,67327,56878],{"class":59},[33,67329,2008],{"class":52945},[33,67331,67332],{"class":59},">￥5999\u003C\u002F",[33,67334,2008],{"class":52945},[33,67336,52952],{"class":59},[33,67338,67339,67341,67343],{"class":35,"line":18391},[33,67340,53421],{"class":59},[33,67342,1962],{"class":52945},[33,67344,52952],{"class":59},[33,67346,67347,67349,67351],{"class":35,"line":18413},[33,67348,54062],{"class":59},[33,67350,1956],{"class":52945},[33,67352,52952],{"class":59},[33,67354,67355,67357,67359],{"class":35,"line":18418},[33,67356,53789],{"class":59},[33,67358,53458],{"class":52945},[33,67360,52952],{"class":59},[33,67362,67363],{"class":35,"line":18424},[33,67364,67365],{"class":87},"    \u002F\u002F 1. 获取大复选框\n",[33,67367,67368,67370,67373,67375,67377,67379,67381,67384],{"class":35,"line":18438},[33,67369,12879],{"class":63},[33,67371,67372],{"class":39}," checkAll",[33,67374,15222],{"class":63},[33,67376,56040],{"class":59},[33,67378,56043],{"class":3632},[33,67380,109],{"class":59},[33,67382,67383],{"class":117},"'#checkAll'",[33,67385,157],{"class":59},[33,67387,67388],{"class":35,"line":18451},[33,67389,67390],{"class":87},"    \u002F\u002F 2. 获取所有的小复选框\n",[33,67392,67393,67395,67398,67400,67402,67404,67406,67409],{"class":35,"line":18456},[33,67394,12879],{"class":63},[33,67396,67397],{"class":39}," cks",[33,67399,15222],{"class":63},[33,67401,56040],{"class":59},[33,67403,57325],{"class":3632},[33,67405,109],{"class":59},[33,67407,67408],{"class":117},"'.ck'",[33,67410,157],{"class":59},[33,67412,67413],{"class":35,"line":18470},[33,67414,67415],{"class":87},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[33,67417,67418,67421,67423,67425,67427,67429,67431],{"class":35,"line":18475},[33,67419,67420],{"class":59},"    checkAll.",[33,67422,59456],{"class":3632},[33,67424,109],{"class":59},[33,67426,59461],{"class":117},[33,67428,14093],{"class":59},[33,67430,56093],{"class":63},[33,67432,56096],{"class":59},[33,67434,67435],{"class":35,"line":18481},[33,67436,67437],{"class":87},"      \u002F\u002F 得到当前大复选框的选中状态\n",[33,67439,67440,67443],{"class":35,"line":18486},[33,67441,67442],{"class":87},"      \u002F\u002F console.log(checkAll.checked)",[33,67444,67445],{"class":87},"  \u002F\u002F 得到 是 true 或者是 false\n",[33,67447,67448],{"class":35,"line":18500},[33,67449,67450],{"class":87},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[33,67452,67453,67455,67457,67459,67461,67463,67465,67467,67469,67472,67474,67476,67478],{"class":35,"line":18505},[33,67454,53929],{"class":63},[33,67456,3332],{"class":59},[33,67458,53492],{"class":63},[33,67460,11097],{"class":59},[33,67462,64],{"class":63},[33,67464,829],{"class":39},[33,67466,11104],{"class":59},[33,67468,2726],{"class":63},[33,67470,67471],{"class":59}," cks.",[33,67473,53613],{"class":39},[33,67475,4877],{"class":59},[33,67477,3960],{"class":63},[33,67479,14100],{"class":59},[33,67481,67482,67485,67487,67490],{"class":35,"line":18510},[33,67483,67484],{"class":59},"        cks[i].checked ",[33,67486,64],{"class":63},[33,67488,67489],{"class":39}," this",[33,67491,67492],{"class":59},".checked\n",[33,67494,67495],{"class":35,"line":18524},[33,67496,54043],{"class":59},[33,67498,67499],{"class":35,"line":18536},[33,67500,35108],{"class":59},[33,67502,67503],{"class":35,"line":18541},[33,67504,67505],{"class":87},"    \u002F\u002F 5. 小复选框控制大复选框\n",[33,67507,67508],{"class":35,"line":18554},[33,67509,127],{"emptyLinePlaceholder":126},[33,67511,67512,67514,67516,67518,67520,67522,67524,67526,67528,67530,67532,67534,67536],{"class":35,"line":18559},[33,67513,4864],{"class":63},[33,67515,3332],{"class":59},[33,67517,53492],{"class":63},[33,67519,11097],{"class":59},[33,67521,64],{"class":63},[33,67523,829],{"class":39},[33,67525,11104],{"class":59},[33,67527,2726],{"class":63},[33,67529,67471],{"class":59},[33,67531,53613],{"class":39},[33,67533,4877],{"class":59},[33,67535,3960],{"class":63},[33,67537,14100],{"class":59},[33,67539,67540],{"class":35,"line":18564},[33,67541,67542],{"class":87},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[33,67544,67545,67548,67550,67552,67554,67556,67558],{"class":35,"line":18569},[33,67546,67547],{"class":59},"      cks[i].",[33,67549,59456],{"class":3632},[33,67551,109],{"class":59},[33,67553,59461],{"class":117},[33,67555,14093],{"class":59},[33,67557,56093],{"class":63},[33,67559,56096],{"class":59},[33,67561,67562],{"class":35,"line":18582},[33,67563,67564],{"class":87},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[33,67566,67567],{"class":35,"line":18587},[33,67568,67569],{"class":87},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[33,67571,67572],{"class":35,"line":34280},[33,67573,67574],{"class":87},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[33,67576,67577],{"class":35,"line":34286},[33,67578,67579],{"class":87},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[33,67581,67582,67585,67587,67589,67591,67593,67596,67598,67600,67602,67604],{"class":35,"line":34292},[33,67583,67584],{"class":59},"        checkAll.checked ",[33,67586,64],{"class":63},[33,67588,56040],{"class":59},[33,67590,57325],{"class":3632},[33,67592,109],{"class":59},[33,67594,67595],{"class":117},"'.ck:checked'",[33,67597,32477],{"class":59},[33,67599,53613],{"class":39},[33,67601,59549],{"class":63},[33,67603,67471],{"class":59},[33,67605,57474],{"class":39},[33,67607,67608],{"class":35,"line":34298},[33,67609,66457],{"class":59},[33,67611,67612],{"class":35,"line":34304},[33,67613,3855],{"class":59},[33,67615,67616,67618,67620],{"class":35,"line":34315},[33,67617,54062],{"class":59},[33,67619,53458],{"class":52945},[33,67621,52952],{"class":59},[33,67623,67624,67626,67628],{"class":35,"line":34321},[33,67625,53430],{"class":59},[33,67627,53445],{"class":52945},[33,67629,52952],{"class":59},[33,67631,67632],{"class":35,"line":34341},[33,67633,127],{"emptyLinePlaceholder":126},[33,67635,67636,67638,67640],{"class":35,"line":34347},[33,67637,53430],{"class":59},[33,67639,52280],{"class":52945},[33,67641,52952],{"class":59},[19,67643,67644],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67646,67647],{},"用好之间比较得到的布尔值！！！",[19,67649,67650,67651,67654,67655,3332,67658,2401,67660,67663],{},"在 JS 里访问的时候，",[30,67652,67653],{},"checkbox.checked"," 是一个 ",[1968,67656,67657],{},"布尔值",[30,67659,3045],{},[30,67661,67662],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67665,67666,67667,67670,67671],{},"HTML 的 ",[30,67668,67669],{},"checked=\"checked\""," 只是 ",[1968,67672,67673,67674,67677],{},"初始值；JS 的 ",[30,67675,67676],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67679,67680],{},"：checked是一个伪类选择器",[19,67682,67683],{},[3145,67684],{"alt":28,"src":67685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67687,67688,67691],{},[67689,67690],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67693,67694],{},[3145,67695],{"alt":28,"src":67696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67698,67700],{"id":67699},"_33-dom事件进阶","3.3 DOM事件进阶",[633,67702,67704],{"id":67703},"_331-事件流","3.3.1 事件流",[19,67706,67707],{},[3145,67708],{"alt":28,"src":67709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23653,67711,67713],{"id":67712},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67715,67716],{},[3145,67717],{"alt":28,"src":67718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[23,67720,67722],{"className":52278,"code":67721,"language":52280,"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,67723,67724,67734,67748,67752,67760,67774,67794,67806,67814,67821,67833,67845,67855,67859,67863,67870,67882,67894,67904,67908,67916,67924,67928,67936,67951,67970,67978,67986,68006,68026,68042,68053,68061,68078,68089,68097,68114,68125,68133,68141,68149,68153],{"__ignoreMap":28},[33,67725,67726,67728,67730,67732],{"class":35,"line":36},[33,67727,52942],{"class":59},[33,67729,52946],{"class":52945},[33,67731,52949],{"class":3632},[33,67733,52952],{"class":59},[33,67735,67736,67738,67740,67742,67744,67746],{"class":35,"line":43},[33,67737,2726],{"class":59},[33,67739,52280],{"class":52945},[33,67741,52961],{"class":3632},[33,67743,64],{"class":59},[33,67745,52966],{"class":117},[33,67747,52952],{"class":59},[33,67749,67750],{"class":35,"line":130},[33,67751,127],{"emptyLinePlaceholder":126},[33,67753,67754,67756,67758],{"class":35,"line":146},[33,67755,2726],{"class":59},[33,67757,52979],{"class":52945},[33,67759,52952],{"class":59},[33,67761,67762,67764,67766,67768,67770,67772],{"class":35,"line":267},[33,67763,53789],{"class":59},[33,67765,52989],{"class":52945},[33,67767,52992],{"class":3632},[33,67769,64],{"class":59},[33,67771,52997],{"class":117},[33,67773,52952],{"class":59},[33,67775,67776,67778,67780,67782,67784,67786,67788,67790,67792],{"class":35,"line":275},[33,67777,53789],{"class":59},[33,67779,52989],{"class":52945},[33,67781,16578],{"class":3632},[33,67783,64],{"class":59},[33,67785,53036],{"class":117},[33,67787,53016],{"class":3632},[33,67789,64],{"class":59},[33,67791,53043],{"class":117},[33,67793,52952],{"class":59},[33,67795,67796,67798,67800,67802,67804],{"class":35,"line":392},[33,67797,53789],{"class":59},[33,67799,53052],{"class":52945},[33,67801,53055],{"class":59},[33,67803,53052],{"class":52945},[33,67805,52952],{"class":59},[33,67807,67808,67810,67812],{"class":35,"line":406},[33,67809,53789],{"class":59},[33,67811,1729],{"class":52945},[33,67813,52952],{"class":59},[33,67815,67816,67819],{"class":35,"line":418},[33,67817,67818],{"class":3632},"    .father",[33,67820,17228],{"class":59},[33,67822,67823,67825,67827,67829,67831],{"class":35,"line":425},[33,67824,56415],{"class":39},[33,67826,53082],{"class":59},[33,67828,66716],{"class":39},[33,67830,53137],{"class":63},[33,67832,2976],{"class":59},[33,67834,67835,67837,67839,67841,67843],{"class":35,"line":1147},[33,67836,56429],{"class":39},[33,67838,53082],{"class":59},[33,67840,66716],{"class":39},[33,67842,53137],{"class":63},[33,67844,2976],{"class":59},[33,67846,67847,67849,67851,67853],{"class":35,"line":1329},[33,67848,56528],{"class":39},[33,67850,53082],{"class":59},[33,67852,53290],{"class":39},[33,67854,2976],{"class":59},[33,67856,67857],{"class":35,"line":1341},[33,67858,3855],{"class":59},[33,67860,67861],{"class":35,"line":1348},[33,67862,127],{"emptyLinePlaceholder":126},[33,67864,67865,67868],{"class":35,"line":1529},[33,67866,67867],{"class":3632},"    .son",[33,67869,17228],{"class":59},[33,67871,67872,67874,67876,67878,67880],{"class":35,"line":1546},[33,67873,56415],{"class":39},[33,67875,53082],{"class":59},[33,67877,3391],{"class":39},[33,67879,53137],{"class":63},[33,67881,2976],{"class":59},[33,67883,67884,67886,67888,67890,67892],{"class":35,"line":1551},[33,67885,56429],{"class":39},[33,67887,53082],{"class":59},[33,67889,3391],{"class":39},[33,67891,53137],{"class":63},[33,67893,2976],{"class":59},[33,67895,67896,67898,67900,67902],{"class":35,"line":1566},[33,67897,56528],{"class":39},[33,67899,53082],{"class":59},[33,67901,56533],{"class":39},[33,67903,2976],{"class":59},[33,67905,67906],{"class":35,"line":1578},[33,67907,3855],{"class":59},[33,67909,67910,67912,67914],{"class":35,"line":1583},[33,67911,54062],{"class":59},[33,67913,1729],{"class":52945},[33,67915,52952],{"class":59},[33,67917,67918,67920,67922],{"class":35,"line":3369},[33,67919,53430],{"class":59},[33,67921,52979],{"class":52945},[33,67923,52952],{"class":59},[33,67925,67926],{"class":35,"line":3396},[33,67927,127],{"emptyLinePlaceholder":126},[33,67929,67930,67932,67934],{"class":35,"line":3401},[33,67931,2726],{"class":59},[33,67933,53445],{"class":52945},[33,67935,52952],{"class":59},[33,67937,67938,67940,67942,67944,67946,67949],{"class":35,"line":3418},[33,67939,53789],{"class":59},[33,67941,53256],{"class":52945},[33,67943,55131],{"class":3632},[33,67945,64],{"class":59},[33,67947,67948],{"class":117},"\"father\"",[33,67950,52952],{"class":59},[33,67952,67953,67955,67957,67959,67961,67964,67966,67968],{"class":35,"line":3423},[33,67954,52986],{"class":59},[33,67956,53256],{"class":52945},[33,67958,55131],{"class":3632},[33,67960,64],{"class":59},[33,67962,67963],{"class":117},"\"son\"",[33,67965,56958],{"class":59},[33,67967,53256],{"class":52945},[33,67969,52952],{"class":59},[33,67971,67972,67974,67976],{"class":35,"line":3428},[33,67973,54062],{"class":59},[33,67975,53256],{"class":52945},[33,67977,52952],{"class":59},[33,67979,67980,67982,67984],{"class":35,"line":3433},[33,67981,53789],{"class":59},[33,67983,53458],{"class":52945},[33,67985,52952],{"class":59},[33,67987,67988,67990,67993,67995,67997,67999,68001,68004],{"class":35,"line":3447},[33,67989,12879],{"class":63},[33,67991,67992],{"class":39}," fa",[33,67994,15222],{"class":63},[33,67996,56040],{"class":59},[33,67998,56043],{"class":3632},[33,68000,109],{"class":59},[33,68002,68003],{"class":117},"'.father'",[33,68005,157],{"class":59},[33,68007,68008,68010,68013,68015,68017,68019,68021,68024],{"class":35,"line":3452},[33,68009,12879],{"class":63},[33,68011,68012],{"class":39}," son",[33,68014,15222],{"class":63},[33,68016,56040],{"class":59},[33,68018,56043],{"class":3632},[33,68020,109],{"class":59},[33,68022,68023],{"class":117},"'.son'",[33,68025,157],{"class":59},[33,68027,68028,68030,68032,68034,68036,68038,68040],{"class":35,"line":4243},[33,68029,54052],{"class":59},[33,68031,59456],{"class":3632},[33,68033,109],{"class":59},[33,68035,59461],{"class":117},[33,68037,14093],{"class":59},[33,68039,56093],{"class":63},[33,68041,56096],{"class":59},[33,68043,68044,68046,68048,68051],{"class":35,"line":4257},[33,68045,60568],{"class":3632},[33,68047,109],{"class":59},[33,68049,68050],{"class":117},"'woshiu1'",[33,68052,157],{"class":59},[33,68054,68055,68057,68059],{"class":35,"line":4265},[33,68056,56179],{"class":59},[33,68058,3045],{"class":39},[33,68060,157],{"class":59},[33,68062,68063,68066,68068,68070,68072,68074,68076],{"class":35,"line":4270},[33,68064,68065],{"class":59},"    fa.",[33,68067,59456],{"class":3632},[33,68069,109],{"class":59},[33,68071,59461],{"class":117},[33,68073,14093],{"class":59},[33,68075,56093],{"class":63},[33,68077,56096],{"class":59},[33,68079,68080,68082,68084,68087],{"class":35,"line":4276},[33,68081,60568],{"class":3632},[33,68083,109],{"class":59},[33,68085,68086],{"class":117},"'1'",[33,68088,157],{"class":59},[33,68090,68091,68093,68095],{"class":35,"line":4282},[33,68092,56179],{"class":59},[33,68094,3045],{"class":39},[33,68096,157],{"class":59},[33,68098,68099,68102,68104,68106,68108,68110,68112],{"class":35,"line":4287},[33,68100,68101],{"class":59},"    son.",[33,68103,59456],{"class":3632},[33,68105,109],{"class":59},[33,68107,59461],{"class":117},[33,68109,14093],{"class":59},[33,68111,56093],{"class":63},[33,68113,56096],{"class":59},[33,68115,68116,68118,68120,68123],{"class":35,"line":9608},[33,68117,60568],{"class":3632},[33,68119,109],{"class":59},[33,68121,68122],{"class":117},"'2'",[33,68124,157],{"class":59},[33,68126,68127,68129,68131],{"class":35,"line":9632},[33,68128,56179],{"class":59},[33,68130,3045],{"class":39},[33,68132,157],{"class":59},[33,68134,68135,68137,68139],{"class":35,"line":9637},[33,68136,54062],{"class":59},[33,68138,53458],{"class":52945},[33,68140,52952],{"class":59},[33,68142,68143,68145,68147],{"class":35,"line":9643},[33,68144,53430],{"class":59},[33,68146,53445],{"class":52945},[33,68148,52952],{"class":59},[33,68150,68151],{"class":35,"line":9670},[33,68152,127],{"emptyLinePlaceholder":126},[33,68154,68155,68157,68159],{"class":35,"line":9675},[33,68156,53430],{"class":59},[33,68158,52280],{"class":52945},[33,68160,52952],{"class":59},[19,68162,68163],{},[3145,68164],{"alt":28,"src":68165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68167,68168],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23653,68170,68172],{"id":68171},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68174,68175],{},[3145,68176],{"alt":28,"src":68177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68179,68180],{},"反着来",[19,68182,68183],{},"注意是同名事件，比如都是‘click’",[23653,68185,68187],{"id":68186},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68189,68190],{},[3145,68191],{"alt":28,"src":68192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23653,68194,68196],{"id":68195},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68198,68199],{},[3145,68200],{"alt":28,"src":68201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68203,68204],{},[3145,68205],{"alt":28,"src":68206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23653,68208,68210],{"id":68209},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[162,68212,68213],{},[165,68214,68215],{},"事件类型的区别",[19,68217,68218],{},[3145,68219],{"alt":28,"src":68220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68222,68223],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[162,68225,68226],{"start":43},[165,68227,68228],{},"注册事件的区别",[19,68230,68231],{},[3145,68232],{"alt":28,"src":68233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23653,68235,68237],{"id":68236},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68239,68240],{},[3145,68241],{"alt":28,"src":68242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68244,68245],{},[3145,68246],{"alt":28,"src":68247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[23,68249,68251],{"className":54712,"code":68250,"language":54714,"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,68252,68253,68261,68278,68301,68309,68314,68319,68324,68328,68336,68344],{"__ignoreMap":28},[33,68254,68255,68257,68259],{"class":35,"line":36},[33,68256,2726],{"class":59},[33,68258,53445],{"class":52945},[33,68260,52952],{"class":59},[33,68262,68263,68265,68268,68271,68273,68276],{"class":35,"line":43},[33,68264,53789],{"class":59},[33,68266,68267],{"class":52945},"form",[33,68269,68270],{"class":3632}," action",[33,68272,64],{"class":59},[33,68274,68275],{"class":117},"\"http:\u002F\u002Fwww.itcast.cn\"",[33,68277,52952],{"class":59},[33,68279,68280,68282,68284,68286,68288,68291,68294,68296,68299],{"class":35,"line":130},[33,68281,52986],{"class":59},[33,68283,112],{"class":52945},[33,68285,55468],{"class":3632},[33,68287,64],{"class":59},[33,68289,68290],{"class":117},"\"submit\"",[33,68292,68293],{"class":3632}," value",[33,68295,64],{"class":59},[33,68297,68298],{"class":117},"\"免费注册\"",[33,68300,52952],{"class":59},[33,68302,68303,68305,68307],{"class":35,"line":146},[33,68304,52986],{"class":59},[33,68306,53458],{"class":52945},[33,68308,52952],{"class":59},[33,68310,68311],{"class":35,"line":267},[33,68312,68313],{"class":59},"      const form = document.querySelector('form')\n",[33,68315,68316],{"class":35,"line":275},[33,68317,68318],{"class":59},"      form.addEventListener('submit', function (e) {\n",[33,68320,68321],{"class":35,"line":392},[33,68322,68323],{"class":59},"        e.preventDefault()\n",[33,68325,68326],{"class":35,"line":406},[33,68327,66457],{"class":59},[33,68329,68330,68332,68334],{"class":35,"line":418},[33,68331,53421],{"class":59},[33,68333,53458],{"class":52945},[33,68335,52952],{"class":59},[33,68337,68338,68340,68342],{"class":35,"line":425},[33,68339,54062],{"class":59},[33,68341,68267],{"class":52945},[33,68343,52952],{"class":59},[33,68345,68346,68348,68350],{"class":35,"line":1147},[33,68347,53430],{"class":59},[33,68349,53445],{"class":52945},[33,68351,52952],{"class":59},[19,68353,68354],{},"点击不在跳转！！！",[633,68356,68358],{"id":68357},"_332-事件委托","3.3.2 事件委托",[19,68360,68361],{},[3145,68362],{"alt":28,"src":68363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[23,68365,68367],{"className":52278,"code":68366,"language":52280,"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,68368,68369,68379,68393,68397,68405,68419,68439,68451,68459,68463,68471,68479,68491,68503,68515,68527,68539,68552,68560,68568,68573,68592,68613,68618,68623,68628,68633,68642,68646,68656,68660,68665,68670,68684,68694,68698,68702,68710,68718,68722],{"__ignoreMap":28},[33,68370,68371,68373,68375,68377],{"class":35,"line":36},[33,68372,52942],{"class":59},[33,68374,52946],{"class":52945},[33,68376,52949],{"class":3632},[33,68378,52952],{"class":59},[33,68380,68381,68383,68385,68387,68389,68391],{"class":35,"line":43},[33,68382,2726],{"class":59},[33,68384,52280],{"class":52945},[33,68386,52961],{"class":3632},[33,68388,64],{"class":59},[33,68390,52966],{"class":117},[33,68392,52952],{"class":59},[33,68394,68395],{"class":35,"line":130},[33,68396,127],{"emptyLinePlaceholder":126},[33,68398,68399,68401,68403],{"class":35,"line":146},[33,68400,2726],{"class":59},[33,68402,52979],{"class":52945},[33,68404,52952],{"class":59},[33,68406,68407,68409,68411,68413,68415,68417],{"class":35,"line":267},[33,68408,53789],{"class":59},[33,68410,52989],{"class":52945},[33,68412,52992],{"class":3632},[33,68414,64],{"class":59},[33,68416,52997],{"class":117},[33,68418,52952],{"class":59},[33,68420,68421,68423,68425,68427,68429,68431,68433,68435,68437],{"class":35,"line":275},[33,68422,53789],{"class":59},[33,68424,52989],{"class":52945},[33,68426,16578],{"class":3632},[33,68428,64],{"class":59},[33,68430,53036],{"class":117},[33,68432,53016],{"class":3632},[33,68434,64],{"class":59},[33,68436,53043],{"class":117},[33,68438,52952],{"class":59},[33,68440,68441,68443,68445,68447,68449],{"class":35,"line":392},[33,68442,53789],{"class":59},[33,68444,53052],{"class":52945},[33,68446,53055],{"class":59},[33,68448,53052],{"class":52945},[33,68450,52952],{"class":59},[33,68452,68453,68455,68457],{"class":35,"line":406},[33,68454,53430],{"class":59},[33,68456,52979],{"class":52945},[33,68458,52952],{"class":59},[33,68460,68461],{"class":35,"line":418},[33,68462,127],{"emptyLinePlaceholder":126},[33,68464,68465,68467,68469],{"class":35,"line":425},[33,68466,2726],{"class":59},[33,68468,53445],{"class":52945},[33,68470,52952],{"class":59},[33,68472,68473,68475,68477],{"class":35,"line":1147},[33,68474,53789],{"class":59},[33,68476,2822],{"class":52945},[33,68478,52952],{"class":59},[33,68480,68481,68483,68485,68487,68489],{"class":35,"line":1329},[33,68482,52986],{"class":59},[33,68484,165],{"class":52945},[33,68486,55610],{"class":59},[33,68488,165],{"class":52945},[33,68490,52952],{"class":59},[33,68492,68493,68495,68497,68499,68501],{"class":35,"line":1341},[33,68494,52986],{"class":59},[33,68496,165],{"class":52945},[33,68498,55629],{"class":59},[33,68500,165],{"class":52945},[33,68502,52952],{"class":59},[33,68504,68505,68507,68509,68511,68513],{"class":35,"line":1348},[33,68506,52986],{"class":59},[33,68508,165],{"class":52945},[33,68510,55648],{"class":59},[33,68512,165],{"class":52945},[33,68514,52952],{"class":59},[33,68516,68517,68519,68521,68523,68525],{"class":35,"line":1529},[33,68518,52986],{"class":59},[33,68520,165],{"class":52945},[33,68522,55667],{"class":59},[33,68524,165],{"class":52945},[33,68526,52952],{"class":59},[33,68528,68529,68531,68533,68535,68537],{"class":35,"line":1546},[33,68530,52986],{"class":59},[33,68532,165],{"class":52945},[33,68534,55686],{"class":59},[33,68536,165],{"class":52945},[33,68538,52952],{"class":59},[33,68540,68541,68543,68545,68548,68550],{"class":35,"line":1551},[33,68542,52986],{"class":59},[33,68544,19],{"class":52945},[33,68546,68547],{"class":59},">我不需要变色\u003C\u002F",[33,68549,19],{"class":52945},[33,68551,52952],{"class":59},[33,68553,68554,68556,68558],{"class":35,"line":1566},[33,68555,54062],{"class":59},[33,68557,2822],{"class":52945},[33,68559,52952],{"class":59},[33,68561,68562,68564,68566],{"class":35,"line":1578},[33,68563,53789],{"class":59},[33,68565,53458],{"class":52945},[33,68567,52952],{"class":59},[33,68569,68570],{"class":35,"line":1583},[33,68571,68572],{"class":87},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[33,68574,68575,68577,68579,68581,68583,68585,68587,68590],{"class":35,"line":3369},[33,68576,12879],{"class":63},[33,68578,62934],{"class":39},[33,68580,15222],{"class":63},[33,68582,56040],{"class":59},[33,68584,56043],{"class":3632},[33,68586,109],{"class":59},[33,68588,68589],{"class":117},"'ul'",[33,68591,157],{"class":59},[33,68593,68594,68597,68599,68601,68603,68605,68607,68609,68611],{"class":35,"line":3396},[33,68595,68596],{"class":59},"    ul.",[33,68598,59456],{"class":3632},[33,68600,109],{"class":59},[33,68602,59461],{"class":117},[33,68604,14093],{"class":59},[33,68606,56093],{"class":63},[33,68608,3332],{"class":59},[33,68610,1894],{"class":6877},[33,68612,14100],{"class":59},[33,68614,68615],{"class":35,"line":3401},[33,68616,68617],{"class":87},"      \u002F\u002F alert(1)\n",[33,68619,68620],{"class":35,"line":3418},[33,68621,68622],{"class":87},"      \u002F\u002F e.target就是我们点击的对象\n",[33,68624,68625],{"class":35,"line":3423},[33,68626,68627],{"class":87},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[33,68629,68630],{"class":35,"line":3428},[33,68631,68632],{"class":87},"      \u002F\u002F e.target.style.color = 'red'\n",[33,68634,68635,68637,68639],{"class":35,"line":3433},[33,68636,59887],{"class":59},[33,68638,59890],{"class":3632},[33,68640,68641],{"class":59},"(e)\n",[33,68643,68644],{"class":35,"line":3447},[33,68645,127],{"emptyLinePlaceholder":126},[33,68647,68648,68650,68653],{"class":35,"line":3452},[33,68649,59887],{"class":59},[33,68651,68652],{"class":3632},"dir",[33,68654,68655],{"class":59},"(e.target)\n",[33,68657,68658],{"class":35,"line":4243},[33,68659,127],{"emptyLinePlaceholder":126},[33,68661,68662],{"class":35,"line":4257},[33,68663,68664],{"class":87},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[33,68666,68667],{"class":35,"line":4265},[33,68668,68669],{"class":87},"      \u002F\u002F 通过tagName来进行判断\n",[33,68671,68672,68674,68677,68679,68682],{"class":35,"line":4270},[33,68673,56124],{"class":63},[33,68675,68676],{"class":59}," (e.target.tagName ",[33,68678,56130],{"class":63},[33,68680,68681],{"class":117}," 'LI'",[33,68683,14100],{"class":59},[33,68685,68686,68689,68691],{"class":35,"line":4276},[33,68687,68688],{"class":59},"        e.target.style.color ",[33,68690,64],{"class":63},[33,68692,68693],{"class":117}," 'red'\n",[33,68695,68696],{"class":35,"line":4282},[33,68697,54043],{"class":59},[33,68699,68700],{"class":35,"line":4287},[33,68701,35108],{"class":59},[33,68703,68704,68706,68708],{"class":35,"line":9608},[33,68705,54062],{"class":59},[33,68707,53458],{"class":52945},[33,68709,52952],{"class":59},[33,68711,68712,68714,68716],{"class":35,"line":9632},[33,68713,53430],{"class":59},[33,68715,53445],{"class":52945},[33,68717,52952],{"class":59},[33,68719,68720],{"class":35,"line":9637},[33,68721,127],{"emptyLinePlaceholder":126},[33,68723,68724,68726,68728],{"class":35,"line":9643},[33,68725,53430],{"class":59},[33,68727,52280],{"class":52945},[33,68729,52952],{"class":59},[19,68731,68732],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68734,68735],{},"if(e.target.ragName==='P') {}",[19,68737,68738],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68740,68741],{},"通过事件委托的方式实现tab栏切换改造：",[19,68743,68744],{},"一定要记住自定义属性！！！！！！",[19,68746,68747],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68749,68750],{},"id是自定义的属性名",[19,68752,68753],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[23,68755,68757],{"className":52278,"code":68756,"language":52280,"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,68758,68759,68769,68783,68787,68795,68809,68829,68849,68861,68869,68875,68885,68895,68899,68903,68909,68921,68933,68945,68961,68965,68969,68975,68987,68999,69011,69021,69031,69035,69039,69047,69059,69069,69081,69085,69089,69097,69107,69117,69127,69131,69135,69145,69159,69171,69175,69179,69191,69201,69217,69227,69231,69235,69249,69259,69269,69273,69277,69283,69297,69301,69305,69313,69323,69327,69331,69340,69350,69354,69362,69370,69374,69382,69396,69410,69422,69430,69469,69501,69533,69565,69597,69605,69613,69627,69661,69695,69729,69763,69797,69805,69813,69821,69826,69831,69850,69855,69875,69883,69888,69901,69922,69935,69939,69944,69949,69962,69982,70010,70014,70018,70022,70030,70038,70042],{"__ignoreMap":28},[33,68760,68761,68763,68765,68767],{"class":35,"line":36},[33,68762,52942],{"class":59},[33,68764,52946],{"class":52945},[33,68766,52949],{"class":3632},[33,68768,52952],{"class":59},[33,68770,68771,68773,68775,68777,68779,68781],{"class":35,"line":43},[33,68772,2726],{"class":59},[33,68774,52280],{"class":52945},[33,68776,52961],{"class":3632},[33,68778,64],{"class":59},[33,68780,52966],{"class":117},[33,68782,52952],{"class":59},[33,68784,68785],{"class":35,"line":130},[33,68786,127],{"emptyLinePlaceholder":126},[33,68788,68789,68791,68793],{"class":35,"line":146},[33,68790,2726],{"class":59},[33,68792,52979],{"class":52945},[33,68794,52952],{"class":59},[33,68796,68797,68799,68801,68803,68805,68807],{"class":35,"line":267},[33,68798,53789],{"class":59},[33,68800,52989],{"class":52945},[33,68802,52992],{"class":3632},[33,68804,64],{"class":59},[33,68806,52997],{"class":117},[33,68808,60770],{"class":59},[33,68810,68811,68813,68815,68817,68819,68821,68823,68825,68827],{"class":35,"line":275},[33,68812,53789],{"class":59},[33,68814,52989],{"class":52945},[33,68816,53008],{"class":3632},[33,68818,64],{"class":59},[33,68820,53013],{"class":117},[33,68822,53016],{"class":3632},[33,68824,64],{"class":59},[33,68826,53021],{"class":117},[33,68828,60770],{"class":59},[33,68830,68831,68833,68835,68837,68839,68841,68843,68845,68847],{"class":35,"line":392},[33,68832,53789],{"class":59},[33,68834,52989],{"class":52945},[33,68836,16578],{"class":3632},[33,68838,64],{"class":59},[33,68840,53036],{"class":117},[33,68842,53016],{"class":3632},[33,68844,64],{"class":59},[33,68846,53043],{"class":117},[33,68848,60770],{"class":59},[33,68850,68851,68853,68855,68857,68859],{"class":35,"line":406},[33,68852,53789],{"class":59},[33,68854,53052],{"class":52945},[33,68856,65267],{"class":59},[33,68858,53052],{"class":52945},[33,68860,52952],{"class":59},[33,68862,68863,68865,68867],{"class":35,"line":418},[33,68864,53789],{"class":59},[33,68866,1729],{"class":52945},[33,68868,52952],{"class":59},[33,68870,68871,68873],{"class":35,"line":425},[33,68872,8063],{"class":52945},[33,68874,17228],{"class":59},[33,68876,68877,68879,68881,68883],{"class":35,"line":1147},[33,68878,56350],{"class":39},[33,68880,53082],{"class":59},[33,68882,2010],{"class":39},[33,68884,2976],{"class":59},[33,68886,68887,68889,68891,68893],{"class":35,"line":1329},[33,68888,56339],{"class":39},[33,68890,53082],{"class":59},[33,68892,2010],{"class":39},[33,68894,2976],{"class":59},[33,68896,68897],{"class":35,"line":1341},[33,68898,3855],{"class":59},[33,68900,68901],{"class":35,"line":1348},[33,68902,127],{"emptyLinePlaceholder":126},[33,68904,68905,68907],{"class":35,"line":1529},[33,68906,65318],{"class":3632},[33,68908,17228],{"class":59},[33,68910,68911,68913,68915,68917,68919],{"class":35,"line":1546},[33,68912,56415],{"class":39},[33,68914,53082],{"class":59},[33,68916,65329],{"class":39},[33,68918,53137],{"class":63},[33,68920,2976],{"class":59},[33,68922,68923,68925,68927,68929,68931],{"class":35,"line":1551},[33,68924,56429],{"class":39},[33,68926,53082],{"class":59},[33,68928,65342],{"class":39},[33,68930,53137],{"class":63},[33,68932,2976],{"class":59},[33,68934,68935,68937,68939,68941,68943],{"class":35,"line":1566},[33,68936,56350],{"class":39},[33,68938,53082],{"class":59},[33,68940,2517],{"class":39},[33,68942,53137],{"class":63},[33,68944,2976],{"class":59},[33,68946,68947,68949,68951,68953,68955,68957,68959],{"class":35,"line":1578},[33,68948,63619],{"class":39},[33,68950,53082],{"class":59},[33,68952,2036],{"class":39},[33,68954,53137],{"class":63},[33,68956,53166],{"class":39},[33,68958,63886],{"class":39},[33,68960,2976],{"class":59},[33,68962,68963],{"class":35,"line":1583},[33,68964,3855],{"class":59},[33,68966,68967],{"class":35,"line":3369},[33,68968,127],{"emptyLinePlaceholder":126},[33,68970,68971,68973],{"class":35,"line":3396},[33,68972,65387],{"class":3632},[33,68974,17228],{"class":59},[33,68976,68977,68979,68981,68983,68985],{"class":35,"line":3401},[33,68978,56415],{"class":39},[33,68980,53082],{"class":59},[33,68982,2129],{"class":39},[33,68984,2146],{"class":63},[33,68986,2976],{"class":59},[33,68988,68989,68991,68993,68995,68997],{"class":35,"line":3418},[33,68990,56429],{"class":39},[33,68992,53082],{"class":59},[33,68994,2723],{"class":39},[33,68996,53137],{"class":63},[33,68998,2976],{"class":59},[33,69000,69001,69003,69005,69007,69009],{"class":35,"line":3423},[33,69002,59002],{"class":39},[33,69004,53082],{"class":59},[33,69006,2723],{"class":39},[33,69008,53137],{"class":63},[33,69010,2976],{"class":59},[33,69012,69013,69015,69017,69019],{"class":35,"line":3428},[33,69014,56653],{"class":39},[33,69016,53082],{"class":59},[33,69018,53122],{"class":39},[33,69020,2976],{"class":59},[33,69022,69023,69025,69027,69029],{"class":35,"line":3433},[33,69024,56664],{"class":39},[33,69026,53082],{"class":59},[33,69028,53313],{"class":39},[33,69030,2976],{"class":59},[33,69032,69033],{"class":35,"line":3447},[33,69034,3855],{"class":59},[33,69036,69037],{"class":35,"line":3452},[33,69038,127],{"emptyLinePlaceholder":126},[33,69040,69041,69043,69045],{"class":35,"line":4243},[33,69042,65387],{"class":3632},[33,69044,65460],{"class":52945},[33,69046,17228],{"class":59},[33,69048,69049,69051,69053,69055,69057],{"class":35,"line":4257},[33,69050,56566],{"class":39},[33,69052,53082],{"class":59},[33,69054,2617],{"class":39},[33,69056,53137],{"class":63},[33,69058,2976],{"class":59},[33,69060,69061,69063,69065,69067],{"class":35,"line":4265},[33,69062,63976],{"class":39},[33,69064,53082],{"class":59},[33,69066,65483],{"class":39},[33,69068,2976],{"class":59},[33,69070,69071,69073,69075,69077,69079],{"class":35,"line":4270},[33,69072,63642],{"class":39},[33,69074,53082],{"class":59},[33,69076,2517],{"class":39},[33,69078,53137],{"class":63},[33,69080,2976],{"class":59},[33,69082,69083],{"class":35,"line":4276},[33,69084,3855],{"class":59},[33,69086,69087],{"class":35,"line":4282},[33,69088,127],{"emptyLinePlaceholder":126},[33,69090,69091,69093,69095],{"class":35,"line":4287},[33,69092,65387],{"class":3632},[33,69094,62934],{"class":52945},[33,69096,17228],{"class":59},[33,69098,69099,69101,69103,69105],{"class":35,"line":9608},[33,69100,56376],{"class":39},[33,69102,53082],{"class":59},[33,69104,56381],{"class":39},[33,69106,2976],{"class":59},[33,69108,69109,69111,69113,69115],{"class":35,"line":9632},[33,69110,56653],{"class":39},[33,69112,53082],{"class":59},[33,69114,53122],{"class":39},[33,69116,2976],{"class":59},[33,69118,69119,69121,69123,69125],{"class":35,"line":9637},[33,69120,56664],{"class":39},[33,69122,53082],{"class":59},[33,69124,53225],{"class":39},[33,69126,2976],{"class":59},[33,69128,69129],{"class":35,"line":9643},[33,69130,3855],{"class":59},[33,69132,69133],{"class":35,"line":9670},[33,69134,127],{"emptyLinePlaceholder":126},[33,69136,69137,69139,69141,69143],{"class":35,"line":9675},[33,69138,65387],{"class":3632},[33,69140,62934],{"class":52945},[33,69142,56719],{"class":52945},[33,69144,17228],{"class":59},[33,69146,69147,69149,69151,69153,69155,69157],{"class":35,"line":9681},[33,69148,56350],{"class":39},[33,69150,53082],{"class":59},[33,69152,2010],{"class":39},[33,69154,10610],{"class":39},[33,69156,53137],{"class":63},[33,69158,2976],{"class":59},[33,69160,69161,69163,69165,69167,69169],{"class":35,"line":9693},[33,69162,56566],{"class":39},[33,69164,53082],{"class":59},[33,69166,2366],{"class":39},[33,69168,53137],{"class":63},[33,69170,2976],{"class":59},[33,69172,69173],{"class":35,"line":9705},[33,69174,3855],{"class":59},[33,69176,69177],{"class":35,"line":9717},[33,69178,127],{"emptyLinePlaceholder":126},[33,69180,69181,69183,69185,69187,69189],{"class":35,"line":11375},[33,69182,65387],{"class":3632},[33,69184,62934],{"class":52945},[33,69186,56719],{"class":52945},[33,69188,3081],{"class":52945},[33,69190,17228],{"class":59},[33,69192,69193,69195,69197,69199],{"class":35,"line":11400},[33,69194,65612],{"class":39},[33,69196,53082],{"class":59},[33,69198,56381],{"class":39},[33,69200,2976],{"class":59},[33,69202,69203,69205,69207,69209,69211,69213,69215],{"class":35,"line":11423},[33,69204,63874],{"class":39},[33,69206,53082],{"class":59},[33,69208,1897],{"class":39},[33,69210,53137],{"class":63},[33,69212,53166],{"class":39},[33,69214,65633],{"class":39},[33,69216,2976],{"class":59},[33,69218,69219,69221,69223,69225],{"class":35,"line":11447},[33,69220,59059],{"class":39},[33,69222,53082],{"class":59},[33,69224,64011],{"class":39},[33,69226,2976],{"class":59},[33,69228,69229],{"class":35,"line":11452},[33,69230,3855],{"class":59},[33,69232,69233],{"class":35,"line":11457},[33,69234,127],{"emptyLinePlaceholder":126},[33,69236,69237,69239,69241,69243,69245,69247],{"class":35,"line":11462},[33,69238,65387],{"class":3632},[33,69240,62934],{"class":52945},[33,69242,56719],{"class":52945},[33,69244,3081],{"class":52945},[33,69246,65666],{"class":3632},[33,69248,17228],{"class":59},[33,69250,69251,69253,69255,69257],{"class":35,"line":11471},[33,69252,63433],{"class":39},[33,69254,53082],{"class":59},[33,69256,65677],{"class":39},[33,69258,2976],{"class":59},[33,69260,69261,69263,69265,69267],{"class":35,"line":11476},[33,69262,59059],{"class":39},[33,69264,53082],{"class":59},[33,69266,65677],{"class":39},[33,69268,2976],{"class":59},[33,69270,69271],{"class":35,"line":11482},[33,69272,3855],{"class":59},[33,69274,69275],{"class":35,"line":11503},[33,69276,127],{"emptyLinePlaceholder":126},[33,69278,69279,69281],{"class":35,"line":11509},[33,69280,65702],{"class":3632},[33,69282,17228],{"class":59},[33,69284,69285,69287,69289,69291,69293,69295],{"class":35,"line":11523},[33,69286,56339],{"class":39},[33,69288,53082],{"class":59},[33,69290,2010],{"class":39},[33,69292,65715],{"class":39},[33,69294,53137],{"class":63},[33,69296,2976],{"class":59},[33,69298,69299],{"class":35,"line":11529},[33,69300,3855],{"class":59},[33,69302,69303],{"class":35,"line":11556},[33,69304,127],{"emptyLinePlaceholder":126},[33,69306,69307,69309,69311],{"class":35,"line":11565},[33,69308,65702],{"class":3632},[33,69310,63816],{"class":3632},[33,69312,17228],{"class":59},[33,69314,69315,69317,69319,69321],{"class":35,"line":11571},[33,69316,56653],{"class":39},[33,69318,53082],{"class":59},[33,69320,56381],{"class":39},[33,69322,2976],{"class":59},[33,69324,69325],{"class":35,"line":11579},[33,69326,3855],{"class":59},[33,69328,69329],{"class":35,"line":11584},[33,69330,127],{"emptyLinePlaceholder":126},[33,69332,69333,69335,69338],{"class":35,"line":18259},[33,69334,65702],{"class":3632},[33,69336,69337],{"class":3632}," .active",[33,69339,17228],{"class":59},[33,69341,69342,69344,69346,69348],{"class":35,"line":18265},[33,69343,56653],{"class":39},[33,69345,53082],{"class":59},[33,69347,62511],{"class":39},[33,69349,2976],{"class":59},[33,69351,69352],{"class":35,"line":18288},[33,69353,3855],{"class":59},[33,69355,69356,69358,69360],{"class":35,"line":18294},[33,69357,54062],{"class":59},[33,69359,1729],{"class":52945},[33,69361,52952],{"class":59},[33,69363,69364,69366,69368],{"class":35,"line":18317},[33,69365,53430],{"class":59},[33,69367,52979],{"class":52945},[33,69369,52952],{"class":59},[33,69371,69372],{"class":35,"line":18331},[33,69373,127],{"emptyLinePlaceholder":126},[33,69375,69376,69378,69380],{"class":35,"line":18351},[33,69377,2726],{"class":59},[33,69379,53445],{"class":52945},[33,69381,52952],{"class":59},[33,69383,69384,69386,69388,69390,69392,69394],{"class":35,"line":18357},[33,69385,53789],{"class":59},[33,69387,53256],{"class":52945},[33,69389,55131],{"class":3632},[33,69391,64],{"class":59},[33,69393,65817],{"class":117},[33,69395,52952],{"class":59},[33,69397,69398,69400,69402,69404,69406,69408],{"class":35,"line":18368},[33,69399,52986],{"class":59},[33,69401,53256],{"class":52945},[33,69403,55131],{"class":3632},[33,69405,64],{"class":59},[33,69407,65832],{"class":117},[33,69409,52952],{"class":59},[33,69411,69412,69414,69416,69418,69420],{"class":35,"line":18391},[33,69413,56878],{"class":59},[33,69415,633],{"class":52945},[33,69417,65843],{"class":59},[33,69419,633],{"class":52945},[33,69421,52952],{"class":59},[33,69423,69424,69426,69428],{"class":35,"line":18413},[33,69425,56878],{"class":59},[33,69427,2822],{"class":52945},[33,69429,52952],{"class":59},[33,69431,69432,69434,69436,69438,69440,69442,69444,69446,69448,69450,69452,69454,69456,69459,69461,69463,69465,69467],{"class":35,"line":18418},[33,69433,56946],{"class":59},[33,69435,165],{"class":52945},[33,69437,62694],{"class":59},[33,69439,2057],{"class":52945},[33,69441,55131],{"class":3632},[33,69443,64],{"class":59},[33,69445,61349],{"class":117},[33,69447,62699],{"class":3632},[33,69449,64],{"class":59},[33,69451,65878],{"class":117},[33,69453,55595],{"class":3632},[33,69455,64],{"class":59},[33,69457,69458],{"class":117},"\"0\"",[33,69460,65881],{"class":59},[33,69462,2057],{"class":52945},[33,69464,56958],{"class":59},[33,69466,165],{"class":52945},[33,69468,52952],{"class":59},[33,69470,69471,69473,69475,69477,69479,69481,69483,69485,69487,69489,69491,69493,69495,69497,69499],{"class":35,"line":18424},[33,69472,56946],{"class":59},[33,69474,165],{"class":52945},[33,69476,62694],{"class":59},[33,69478,2057],{"class":52945},[33,69480,62699],{"class":3632},[33,69482,64],{"class":59},[33,69484,65878],{"class":117},[33,69486,55595],{"class":3632},[33,69488,64],{"class":59},[33,69490,5341],{"class":117},[33,69492,65908],{"class":59},[33,69494,2057],{"class":52945},[33,69496,56958],{"class":59},[33,69498,165],{"class":52945},[33,69500,52952],{"class":59},[33,69502,69503,69505,69507,69509,69511,69513,69515,69517,69519,69521,69523,69525,69527,69529,69531],{"class":35,"line":18438},[33,69504,56946],{"class":59},[33,69506,165],{"class":52945},[33,69508,62694],{"class":59},[33,69510,2057],{"class":52945},[33,69512,62699],{"class":3632},[33,69514,64],{"class":59},[33,69516,65878],{"class":117},[33,69518,55595],{"class":3632},[33,69520,64],{"class":59},[33,69522,5364],{"class":117},[33,69524,65935],{"class":59},[33,69526,2057],{"class":52945},[33,69528,56958],{"class":59},[33,69530,165],{"class":52945},[33,69532,52952],{"class":59},[33,69534,69535,69537,69539,69541,69543,69545,69547,69549,69551,69553,69555,69557,69559,69561,69563],{"class":35,"line":18451},[33,69536,56946],{"class":59},[33,69538,165],{"class":52945},[33,69540,62694],{"class":59},[33,69542,2057],{"class":52945},[33,69544,62699],{"class":3632},[33,69546,64],{"class":59},[33,69548,65878],{"class":117},[33,69550,55595],{"class":3632},[33,69552,64],{"class":59},[33,69554,5377],{"class":117},[33,69556,65962],{"class":59},[33,69558,2057],{"class":52945},[33,69560,56958],{"class":59},[33,69562,165],{"class":52945},[33,69564,52952],{"class":59},[33,69566,69567,69569,69571,69573,69575,69577,69579,69581,69583,69585,69587,69589,69591,69593,69595],{"class":35,"line":18456},[33,69568,56946],{"class":59},[33,69570,165],{"class":52945},[33,69572,62694],{"class":59},[33,69574,2057],{"class":52945},[33,69576,62699],{"class":3632},[33,69578,64],{"class":59},[33,69580,65878],{"class":117},[33,69582,55595],{"class":3632},[33,69584,64],{"class":59},[33,69586,5390],{"class":117},[33,69588,65989],{"class":59},[33,69590,2057],{"class":52945},[33,69592,56958],{"class":59},[33,69594,165],{"class":52945},[33,69596,52952],{"class":59},[33,69598,69599,69601,69603],{"class":35,"line":18470},[33,69600,57051],{"class":59},[33,69602,2822],{"class":52945},[33,69604,52952],{"class":59},[33,69606,69607,69609,69611],{"class":35,"line":18475},[33,69608,53421],{"class":59},[33,69610,53256],{"class":52945},[33,69612,52952],{"class":59},[33,69614,69615,69617,69619,69621,69623,69625],{"class":35,"line":18481},[33,69616,52986],{"class":59},[33,69618,53256],{"class":52945},[33,69620,55131],{"class":3632},[33,69622,64],{"class":59},[33,69624,66026],{"class":117},[33,69626,52952],{"class":59},[33,69628,69629,69631,69633,69635,69637,69639,69641,69643,69645,69647,69649,69651,69653,69655,69657,69659],{"class":35,"line":18486},[33,69630,56878],{"class":59},[33,69632,53256],{"class":52945},[33,69634,55131],{"class":3632},[33,69636,64],{"class":59},[33,69638,66041],{"class":117},[33,69640,62694],{"class":59},[33,69642,3145],{"class":52945},[33,69644,56883],{"class":3632},[33,69646,64],{"class":59},[33,69648,66052],{"class":117},[33,69650,56891],{"class":3632},[33,69652,64],{"class":59},[33,69654,9312],{"class":117},[33,69656,66061],{"class":59},[33,69658,53256],{"class":52945},[33,69660,52952],{"class":59},[33,69662,69663,69665,69667,69669,69671,69673,69675,69677,69679,69681,69683,69685,69687,69689,69691,69693],{"class":35,"line":18500},[33,69664,56878],{"class":59},[33,69666,53256],{"class":52945},[33,69668,55131],{"class":3632},[33,69670,64],{"class":59},[33,69672,64265],{"class":117},[33,69674,62694],{"class":59},[33,69676,3145],{"class":52945},[33,69678,56883],{"class":3632},[33,69680,64],{"class":59},[33,69682,66088],{"class":117},[33,69684,56891],{"class":3632},[33,69686,64],{"class":59},[33,69688,9312],{"class":117},[33,69690,66061],{"class":59},[33,69692,53256],{"class":52945},[33,69694,52952],{"class":59},[33,69696,69697,69699,69701,69703,69705,69707,69709,69711,69713,69715,69717,69719,69721,69723,69725,69727],{"class":35,"line":18505},[33,69698,56878],{"class":59},[33,69700,53256],{"class":52945},[33,69702,55131],{"class":3632},[33,69704,64],{"class":59},[33,69706,64265],{"class":117},[33,69708,62694],{"class":59},[33,69710,3145],{"class":52945},[33,69712,56883],{"class":3632},[33,69714,64],{"class":59},[33,69716,66123],{"class":117},[33,69718,56891],{"class":3632},[33,69720,64],{"class":59},[33,69722,9312],{"class":117},[33,69724,66061],{"class":59},[33,69726,53256],{"class":52945},[33,69728,52952],{"class":59},[33,69730,69731,69733,69735,69737,69739,69741,69743,69745,69747,69749,69751,69753,69755,69757,69759,69761],{"class":35,"line":18510},[33,69732,56878],{"class":59},[33,69734,53256],{"class":52945},[33,69736,55131],{"class":3632},[33,69738,64],{"class":59},[33,69740,64265],{"class":117},[33,69742,62694],{"class":59},[33,69744,3145],{"class":52945},[33,69746,56883],{"class":3632},[33,69748,64],{"class":59},[33,69750,66158],{"class":117},[33,69752,56891],{"class":3632},[33,69754,64],{"class":59},[33,69756,9312],{"class":117},[33,69758,66061],{"class":59},[33,69760,53256],{"class":52945},[33,69762,52952],{"class":59},[33,69764,69765,69767,69769,69771,69773,69775,69777,69779,69781,69783,69785,69787,69789,69791,69793,69795],{"class":35,"line":18524},[33,69766,56878],{"class":59},[33,69768,53256],{"class":52945},[33,69770,55131],{"class":3632},[33,69772,64],{"class":59},[33,69774,64265],{"class":117},[33,69776,62694],{"class":59},[33,69778,3145],{"class":52945},[33,69780,56883],{"class":3632},[33,69782,64],{"class":59},[33,69784,66193],{"class":117},[33,69786,56891],{"class":3632},[33,69788,64],{"class":59},[33,69790,9312],{"class":117},[33,69792,66061],{"class":59},[33,69794,53256],{"class":52945},[33,69796,52952],{"class":59},[33,69798,69799,69801,69803],{"class":35,"line":18536},[33,69800,53421],{"class":59},[33,69802,53256],{"class":52945},[33,69804,52952],{"class":59},[33,69806,69807,69809,69811],{"class":35,"line":18541},[33,69808,54062],{"class":59},[33,69810,53256],{"class":52945},[33,69812,52952],{"class":59},[33,69814,69815,69817,69819],{"class":35,"line":18554},[33,69816,53789],{"class":59},[33,69818,53458],{"class":52945},[33,69820,52952],{"class":59},[33,69822,69823],{"class":35,"line":18559},[33,69824,69825],{"class":87},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[33,69827,69828],{"class":35,"line":18564},[33,69829,69830],{"class":87},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[33,69832,69833,69835,69837,69839,69841,69843,69845,69848],{"class":35,"line":18569},[33,69834,12879],{"class":63},[33,69836,62934],{"class":39},[33,69838,15222],{"class":63},[33,69840,56040],{"class":59},[33,69842,56043],{"class":3632},[33,69844,109],{"class":59},[33,69846,69847],{"class":117},"'.tab-nav ul'",[33,69849,157],{"class":59},[33,69851,69852],{"class":35,"line":18582},[33,69853,69854],{"class":87},"    \u002F\u002F 2.添加事件\n",[33,69856,69857,69859,69861,69863,69865,69867,69869,69871,69873],{"class":35,"line":18587},[33,69858,68596],{"class":59},[33,69860,59456],{"class":3632},[33,69862,109],{"class":59},[33,69864,59461],{"class":117},[33,69866,14093],{"class":59},[33,69868,56093],{"class":63},[33,69870,3332],{"class":59},[33,69872,1894],{"class":6877},[33,69874,14100],{"class":59},[33,69876,69877,69879,69881],{"class":35,"line":34280},[33,69878,59887],{"class":59},[33,69880,68652],{"class":3632},[33,69882,68655],{"class":59},[33,69884,69885],{"class":35,"line":34286},[33,69886,69887],{"class":87},"      \u002F\u002Fe.targer是我们点击的对象\n",[33,69889,69890,69892,69894,69896,69899],{"class":35,"line":34292},[33,69891,56124],{"class":63},[33,69893,68676],{"class":59},[33,69895,56130],{"class":63},[33,69897,69898],{"class":117}," 'A'",[33,69900,14100],{"class":59},[33,69902,69903,69905,69907,69909,69912,69914,69916,69918,69920],{"class":35,"line":34298},[33,69904,53570],{"class":59},[33,69906,56043],{"class":3632},[33,69908,109],{"class":59},[33,69910,69911],{"class":117},"'.active'",[33,69913,58646],{"class":59},[33,69915,58649],{"class":3632},[33,69917,109],{"class":59},[33,69919,66356],{"class":117},[33,69921,157],{"class":59},[33,69923,69924,69927,69929,69931,69933],{"class":35,"line":34304},[33,69925,69926],{"class":59},"        e.target.classList.",[33,69928,6995],{"class":3632},[33,69930,109],{"class":59},[33,69932,66356],{"class":117},[33,69934,157],{"class":59},[33,69936,69937],{"class":35,"line":34315},[33,69938,127],{"emptyLinePlaceholder":126},[33,69940,69941],{"class":35,"line":34321},[33,69942,69943],{"class":87},"        \u002F\u002F 下面大盒子模块\n",[33,69945,69946],{"class":35,"line":34341},[33,69947,69948],{"class":87},"        \u002F\u002F console.log(e.target.dataset.id)\n",[33,69950,69951,69953,69955,69957,69959],{"class":35,"line":34347},[33,69952,62912],{"class":63},[33,69954,4697],{"class":39},[33,69956,15222],{"class":63},[33,69958,47212],{"class":63},[33,69960,69961],{"class":59},"e.target.dataset.id\n",[33,69963,69964,69966,69968,69970,69972,69974,69976,69978,69980],{"class":35,"line":34358},[33,69965,53570],{"class":59},[33,69967,56043],{"class":3632},[33,69969,109],{"class":59},[33,69971,66404],{"class":117},[33,69973,58646],{"class":59},[33,69975,58649],{"class":3632},[33,69977,109],{"class":59},[33,69979,66356],{"class":117},[33,69981,157],{"class":59},[33,69983,69984,69986,69988,69990,69992,69994,69996,69998,70000,70002,70004,70006,70008],{"class":35,"line":34364},[33,69985,53570],{"class":59},[33,69987,56043],{"class":3632},[33,69989,109],{"class":59},[33,69991,66430],{"class":117},[33,69993,2259],{"class":59},[33,69995,47212],{"class":63},[33,69997,26774],{"class":39},[33,69999,58675],{"class":117},[33,70001,58646],{"class":59},[33,70003,6995],{"class":3632},[33,70005,109],{"class":59},[33,70007,66356],{"class":117},[33,70009,157],{"class":59},[33,70011,70012],{"class":35,"line":34370},[33,70013,127],{"emptyLinePlaceholder":126},[33,70015,70016],{"class":35,"line":34376},[33,70017,54043],{"class":59},[33,70019,70020],{"class":35,"line":34382},[33,70021,35108],{"class":59},[33,70023,70024,70026,70028],{"class":35,"line":34388},[33,70025,54062],{"class":59},[33,70027,53458],{"class":52945},[33,70029,52952],{"class":59},[33,70031,70032,70034,70036],{"class":35,"line":34394},[33,70033,53430],{"class":59},[33,70035,53445],{"class":52945},[33,70037,52952],{"class":59},[33,70039,70040],{"class":35,"line":34400},[33,70041,127],{"emptyLinePlaceholder":126},[33,70043,70044,70046,70048],{"class":35,"line":34420},[33,70045,53430],{"class":59},[33,70047,52280],{"class":52945},[33,70049,52952],{"class":59},[633,70051,70053],{"id":70052},"_333-页面加载事件","3.3.3 页面加载事件",[162,70055,70056],{},[165,70057,70058],{},"load",[19,70060,70061],{},[3145,70062],{"alt":28,"src":70063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70065,70066],{},"window代表整个窗口，比document还要大",[19,70068,70069],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70071,70072],{},"img.addEventListener('load', function () {",[19,70074,70075],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70077,54109],{},[162,70079,70080],{"start":43},[165,70081,70082],{},"DOMContentLoaded",[19,70084,70085],{},[3145,70086],{"alt":28,"src":70087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70089,70090],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[633,70092,70094],{"id":70093},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70096,70097],{},[3145,70098],{"alt":28,"src":70099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70101,70102],{},[3145,70103],{"alt":28,"src":70104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70106,70107],{},[3145,70108],{"alt":28,"src":70109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70111,70112],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70114,70115],{},"获得的是数字型数据，不带单位",[19,70117,70118],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70120,70121],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70123,70124],{},"它是通过document.documentElement来获取",[19,70126,70127],{},[3145,70128],{"alt":28,"src":70129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70131,70132],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[633,70134,70136],{"id":70135},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70138,70139],{},[3145,70140],{"alt":28,"src":70141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70143,70144],{},[3145,70145],{"alt":28,"src":70146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[633,70148,70150],{"id":70149},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70152,70153],{},[3145,70154],{"alt":28,"src":70155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70157,70158],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70160,70161],{},[3145,70162],{"alt":28,"src":70163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70165,70166],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70168,70169],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70171,70172],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70174,70175],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70177,70178],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70180,70181],{},[3145,70182],{"alt":28,"src":70183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70185,70186],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70188,70189],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70191,70192],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70194,70195],{},"e.pageX-box.getBoundingClientRect()",[633,70197,70199],{"id":70198},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70201,70202],{},[3145,70203],{"alt":28,"src":70204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70206,70207],{},"这个是相对于视口来说的，它是个方法，不是属性值",[633,70209,70211],{"id":70210},"_338-总结","3.3.8 总结",[19,70213,70214],{},[3145,70215],{"alt":28,"src":70216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70218,70219],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70221,70222],{},"修改盒子的宽高只能通过width和height来实现",[633,70224,70226],{"id":70225},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[23,70228,70230],{"className":52278,"code":70229,"language":52280,"meta":28,"style":28},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[30,70231,70232,70237,70242,70247,70252],{"__ignoreMap":28},[33,70233,70234],{"class":35,"line":36},[33,70235,70236],{"class":59},"\u002F* 页面滑动 *\u002F\n",[33,70238,70239],{"class":35,"line":43},[33,70240,70241],{"class":59},"html {\n",[33,70243,70244],{"class":35,"line":130},[33,70245,70246],{"class":59},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[33,70248,70249],{"class":35,"line":146},[33,70250,70251],{"class":59},"  scroll-behavior: smooth;\n",[33,70253,70254],{"class":35,"line":267},[33,70255,3247],{"class":59},[19,70257,70258],{},"默认是auto",[633,70260,70262],{"id":70261},"_3310-日期对象","3.3.10 日期对象",[23653,70264,70266],{"id":70265},"_33101-实例化","3.3.10.1 实例化",[19,70268,70269],{},[3145,70270],{"alt":28,"src":70271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23653,70273,70275],{"id":70274},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70277,70278],{},[3145,70279],{"alt":28,"src":70280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70282,70283],{},"月份+1",[19,70285,70286],{},"老外认为第一天为0，星期天",[19,70288,70289],{},"方法使用的时候必须要跟括号",[19,70291,70292],{},"快速获得日期",[19,70294,70295],{},"\u002F\u002F 得到年月日",[19,70297,70298],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70300,70301],{},"\u002F\u002F 得到当地日期",[19,70303,70304],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70306,70307],{},"\u002F\u002F 得到当地时间",[19,70309,70310],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70312,70313],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70315,70316],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53458,70318,70319],{},"\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,70321,70322],{},"学会去封装函数！",[23653,70324,70326],{"id":70325},"_33103-时间戳","3.3.10.3 时间戳",[19,70328,70329],{},[3145,70330],{"alt":28,"src":70331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70333,70334],{},[3145,70335],{"alt":28,"src":70336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70338,70339],{},"三种方法记住一个就可以",[633,70341,70343],{"id":70342},"_3311-节点操作","3.3.11 节点操作",[23653,70345,70347],{"id":70346},"_33111-dom节点","3.3.11.1 DOM节点",[19,70349,70350],{},[3145,70351],{"alt":28,"src":70352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70354,70355],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23653,70357,70359],{"id":70358},"_33112-查找节点","3.3.11.2 查找节点",[19,70361,70362],{},"前边的document.querySelector()是获取的元素",[19,70364,70365],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70367,70368],{},[3145,70369],{"alt":28,"src":70370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[162,70372,70373],{},[165,70374,70375],{},"父节点",[19,70377,70378],{},[3145,70379],{"alt":28,"src":70380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[162,70382,70383],{"start":43},[165,70384,70385],{},"子节点",[19,70387,70388],{},[3145,70389],{"alt":28,"src":70390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70392,70393],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70395,70396],{},"children获得的是伪数组，是亲儿子",[162,70398,70399],{"start":130},[165,70400,70401],{},"兄弟节点",[19,70403,70404],{},[3145,70405],{"alt":28,"src":70406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23653,70408,70410],{"id":70409},"_33113-增加节点","3.3.11.3 增加节点",[19,70412,70413],{},[3145,70414],{"alt":28,"src":70415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70417,70418],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70420,70421],{},[3145,70422],{"alt":28,"src":70423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70425,70426],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70428,70429],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70431,70432],{},"例：",[53458,70434,70435],{},"\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,70437,70438],{},[3145,70439],{"alt":28,"src":70440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70442,70443],{},"false只克隆标签，里边的内容不会克隆过来",[23,70445,70447],{"className":52278,"code":70446,"language":52280,"meta":28,"style":28},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[30,70448,70449],{"__ignoreMap":28},[33,70450,70451],{"class":35,"line":36},[33,70452,70446],{"class":59},[23653,70454,70456],{"id":70455},"_33114-删除节点","3.3.11.4 删除节点",[19,70458,70459],{},[3145,70460],{"alt":28,"src":70461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70463,70464],{},"父亲删儿子",[19,70466,70467],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[633,70469,70471],{"id":70470},"_3312-m端事件","3.3.12 M端事件",[19,70473,70474],{},"M端就是移动端",[19,70476,70477],{},[3145,70478],{"alt":28,"src":70479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[633,70481,70483],{"id":70482},"_3313-插件","3.3.13 插件",[19,70485,70486],{},"要熟悉官网！！！",[19,70488,70489],{},[2057,70490,70491],{"href":70491,"rel":70492},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25520],[19,70494,70495],{},[2057,70496,70497],{"href":70497,"rel":70498},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25520],[633,70500,70502],{"id":70501},"_3314-学生信息表","3.3.14 学生信息表",[162,70504,70505,70508,70511,70514,70517,70520,70523,70526],{},[165,70506,70507],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[165,70509,70510],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[165,70512,70513],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[165,70515,70516],{},"用好表单元素自带的属性，value,name等",[165,70518,70519],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[165,70521,70522],{},"不要忘记事件对象",[165,70524,70525],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[165,70527,70528],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70530,70531],{},"结构：",[23,70533,70535],{"className":52278,"code":70534,"language":52280,"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,70536,70537,70547,70561,70565,70573,70587,70607,70628,70641,70665,70673,70677,70685,70698,70719,70747,70775,70780,70802,70822,70841,70849,70877,70899,70919,70939,70959,70979,70999,71007,71027,71035,71039,71052,71060,71068,71076,71089,71102,71115,71128,71141,71154,71167,71175,71183,71191,71196,71201,71206,71211,71216,71221,71226,71231,71236,71241,71246,71251,71256,71264,71272,71280,71284,71304,71323,71343,71363,71383,71403,71407,71412,71432,71437,71447,71452,71457,71477,71499,71504,71514,71518,71522,71527,71532,71561,71575,71590,71594,71598,71602,71607,71618,71631,71636,71641,71646,71651,71656,71660,71665,71670,71679,71684,71689,71701,71706,71713,71717,71722,71732,71737,71747,71752,71780,71801,71811,71831,71849,71866,71883,71900,71917,71921,71931,71936,71941,71946,71957,71961,71965,71969,71974,71979,72000,72012,72017,72022,72027,72041,72046,72053,72057,72061,72069,72073,72081,72085],{"__ignoreMap":28},[33,70538,70539,70541,70543,70545],{"class":35,"line":36},[33,70540,52942],{"class":59},[33,70542,52946],{"class":52945},[33,70544,52949],{"class":3632},[33,70546,52952],{"class":59},[33,70548,70549,70551,70553,70555,70557,70559],{"class":35,"line":43},[33,70550,2726],{"class":59},[33,70552,52280],{"class":52945},[33,70554,52961],{"class":3632},[33,70556,64],{"class":59},[33,70558,52966],{"class":117},[33,70560,52952],{"class":59},[33,70562,70563],{"class":35,"line":130},[33,70564,127],{"emptyLinePlaceholder":126},[33,70566,70567,70569,70571],{"class":35,"line":146},[33,70568,2726],{"class":59},[33,70570,52979],{"class":52945},[33,70572,52952],{"class":59},[33,70574,70575,70577,70579,70581,70583,70585],{"class":35,"line":267},[33,70576,53789],{"class":59},[33,70578,52989],{"class":52945},[33,70580,52992],{"class":3632},[33,70582,64],{"class":59},[33,70584,52997],{"class":117},[33,70586,60770],{"class":59},[33,70588,70589,70591,70593,70595,70597,70599,70601,70603,70605],{"class":35,"line":275},[33,70590,53789],{"class":59},[33,70592,52989],{"class":52945},[33,70594,16578],{"class":3632},[33,70596,64],{"class":59},[33,70598,53036],{"class":117},[33,70600,53016],{"class":3632},[33,70602,64],{"class":59},[33,70604,53043],{"class":117},[33,70606,60770],{"class":59},[33,70608,70609,70611,70613,70615,70617,70619,70621,70623,70626],{"class":35,"line":392},[33,70610,53789],{"class":59},[33,70612,52989],{"class":52945},[33,70614,53008],{"class":3632},[33,70616,64],{"class":59},[33,70618,53013],{"class":117},[33,70620,53016],{"class":3632},[33,70622,64],{"class":59},[33,70624,70625],{"class":117},"\"ie=edge\"",[33,70627,60770],{"class":59},[33,70629,70630,70632,70634,70637,70639],{"class":35,"line":406},[33,70631,53789],{"class":59},[33,70633,53052],{"class":52945},[33,70635,70636],{"class":59},">学生信息管理\u003C\u002F",[33,70638,53052],{"class":52945},[33,70640,52952],{"class":59},[33,70642,70643,70645,70648,70651,70653,70656,70658,70660,70663],{"class":35,"line":418},[33,70644,53789],{"class":59},[33,70646,70647],{"class":52945},"link",[33,70649,70650],{"class":3632}," rel",[33,70652,64],{"class":59},[33,70654,70655],{"class":117},"\"stylesheet\"",[33,70657,62699],{"class":3632},[33,70659,64],{"class":59},[33,70661,70662],{"class":117},"\"css\u002Findex.css\"",[33,70664,60770],{"class":59},[33,70666,70667,70669,70671],{"class":35,"line":425},[33,70668,53430],{"class":59},[33,70670,52979],{"class":52945},[33,70672,52952],{"class":59},[33,70674,70675],{"class":35,"line":1147},[33,70676,127],{"emptyLinePlaceholder":126},[33,70678,70679,70681,70683],{"class":35,"line":1329},[33,70680,2726],{"class":59},[33,70682,53445],{"class":52945},[33,70684,52952],{"class":59},[33,70686,70687,70689,70691,70694,70696],{"class":35,"line":1341},[33,70688,53789],{"class":59},[33,70690,10],{"class":52945},[33,70692,70693],{"class":59},">新增学员\u003C\u002F",[33,70695,10],{"class":52945},[33,70697,52952],{"class":59},[33,70699,70700,70702,70704,70706,70708,70710,70713,70715,70717],{"class":35,"line":1348},[33,70701,53789],{"class":59},[33,70703,68267],{"class":52945},[33,70705,55131],{"class":3632},[33,70707,64],{"class":59},[33,70709,64306],{"class":117},[33,70711,70712],{"class":3632}," autocomplete",[33,70714,64],{"class":59},[33,70716,33426],{"class":117},[33,70718,52952],{"class":59},[33,70720,70721,70724,70726,70728,70730,70732,70734,70736,70739,70741,70743,70745],{"class":35,"line":1529},[33,70722,70723],{"class":59},"    姓名：\u003C",[33,70725,112],{"class":52945},[33,70727,55468],{"class":3632},[33,70729,64],{"class":59},[33,70731,64341],{"class":117},[33,70733,55131],{"class":3632},[33,70735,64],{"class":59},[33,70737,70738],{"class":117},"\"uname\"",[33,70740,16578],{"class":3632},[33,70742,64],{"class":59},[33,70744,70738],{"class":117},[33,70746,60770],{"class":59},[33,70748,70749,70752,70754,70756,70758,70760,70762,70764,70767,70769,70771,70773],{"class":35,"line":1546},[33,70750,70751],{"class":59},"    年龄：\u003C",[33,70753,112],{"class":52945},[33,70755,55468],{"class":3632},[33,70757,64],{"class":59},[33,70759,64341],{"class":117},[33,70761,55131],{"class":3632},[33,70763,64],{"class":59},[33,70765,70766],{"class":117},"\"age\"",[33,70768,16578],{"class":3632},[33,70770,64],{"class":59},[33,70772,70766],{"class":117},[33,70774,60770],{"class":59},[33,70776,70777],{"class":35,"line":1551},[33,70778,70779],{"class":59},"    性别:\n",[33,70781,70782,70784,70787,70789,70791,70794,70796,70798,70800],{"class":35,"line":1566},[33,70783,52986],{"class":59},[33,70785,70786],{"class":52945},"select",[33,70788,16578],{"class":3632},[33,70790,64],{"class":59},[33,70792,70793],{"class":117},"\"gender\"",[33,70795,55131],{"class":3632},[33,70797,64],{"class":59},[33,70799,70793],{"class":117},[33,70801,52952],{"class":59},[33,70803,70804,70806,70809,70811,70813,70815,70818,70820],{"class":35,"line":1578},[33,70805,56878],{"class":59},[33,70807,70808],{"class":52945},"option",[33,70810,68293],{"class":3632},[33,70812,64],{"class":59},[33,70814,11620],{"class":117},[33,70816,70817],{"class":59},">男\u003C\u002F",[33,70819,70808],{"class":52945},[33,70821,52952],{"class":59},[33,70823,70824,70826,70828,70830,70832,70834,70837,70839],{"class":35,"line":1583},[33,70825,56878],{"class":59},[33,70827,70808],{"class":52945},[33,70829,68293],{"class":3632},[33,70831,64],{"class":59},[33,70833,11689],{"class":117},[33,70835,70836],{"class":59},">女\u003C\u002F",[33,70838,70808],{"class":52945},[33,70840,52952],{"class":59},[33,70842,70843,70845,70847],{"class":35,"line":3369},[33,70844,53421],{"class":59},[33,70846,70786],{"class":52945},[33,70848,52952],{"class":59},[33,70850,70851,70854,70856,70858,70860,70862,70864,70866,70869,70871,70873,70875],{"class":35,"line":3396},[33,70852,70853],{"class":59},"    薪资：\u003C",[33,70855,112],{"class":52945},[33,70857,55468],{"class":3632},[33,70859,64],{"class":59},[33,70861,64341],{"class":117},[33,70863,55131],{"class":3632},[33,70865,64],{"class":59},[33,70867,70868],{"class":117},"\"salary\"",[33,70870,16578],{"class":3632},[33,70872,64],{"class":59},[33,70874,70868],{"class":117},[33,70876,60770],{"class":59},[33,70878,70879,70882,70884,70886,70888,70891,70893,70895,70897],{"class":35,"line":3401},[33,70880,70881],{"class":59},"    就业城市：\u003C",[33,70883,70786],{"class":52945},[33,70885,16578],{"class":3632},[33,70887,64],{"class":59},[33,70889,70890],{"class":117},"\"city\"",[33,70892,55131],{"class":3632},[33,70894,64],{"class":59},[33,70896,70890],{"class":117},[33,70898,52952],{"class":59},[33,70900,70901,70903,70905,70907,70909,70912,70915,70917],{"class":35,"line":3418},[33,70902,56878],{"class":59},[33,70904,70808],{"class":52945},[33,70906,68293],{"class":3632},[33,70908,64],{"class":59},[33,70910,70911],{"class":117},"\"北京\"",[33,70913,70914],{"class":59},">北京\u003C\u002F",[33,70916,70808],{"class":52945},[33,70918,52952],{"class":59},[33,70920,70921,70923,70925,70927,70929,70932,70935,70937],{"class":35,"line":3423},[33,70922,56878],{"class":59},[33,70924,70808],{"class":52945},[33,70926,68293],{"class":3632},[33,70928,64],{"class":59},[33,70930,70931],{"class":117},"\"上海\"",[33,70933,70934],{"class":59},">上海\u003C\u002F",[33,70936,70808],{"class":52945},[33,70938,52952],{"class":59},[33,70940,70941,70943,70945,70947,70949,70952,70955,70957],{"class":35,"line":3428},[33,70942,56878],{"class":59},[33,70944,70808],{"class":52945},[33,70946,68293],{"class":3632},[33,70948,64],{"class":59},[33,70950,70951],{"class":117},"\"广州\"",[33,70953,70954],{"class":59},">广州\u003C\u002F",[33,70956,70808],{"class":52945},[33,70958,52952],{"class":59},[33,70960,70961,70963,70965,70967,70969,70972,70975,70977],{"class":35,"line":3433},[33,70962,56878],{"class":59},[33,70964,70808],{"class":52945},[33,70966,68293],{"class":3632},[33,70968,64],{"class":59},[33,70970,70971],{"class":117},"\"深圳\"",[33,70973,70974],{"class":59},">深圳\u003C\u002F",[33,70976,70808],{"class":52945},[33,70978,52952],{"class":59},[33,70980,70981,70983,70985,70987,70989,70992,70995,70997],{"class":35,"line":3447},[33,70982,56878],{"class":59},[33,70984,70808],{"class":52945},[33,70986,68293],{"class":3632},[33,70988,64],{"class":59},[33,70990,70991],{"class":117},"\"曹县\"",[33,70993,70994],{"class":59},">曹县\u003C\u002F",[33,70996,70808],{"class":52945},[33,70998,52952],{"class":59},[33,71000,71001,71003,71005],{"class":35,"line":3452},[33,71002,53421],{"class":59},[33,71004,70786],{"class":52945},[33,71006,52952],{"class":59},[33,71008,71009,71011,71013,71015,71017,71020,71023,71025],{"class":35,"line":4243},[33,71010,52986],{"class":59},[33,71012,55531],{"class":52945},[33,71014,55131],{"class":3632},[33,71016,64],{"class":59},[33,71018,71019],{"class":117},"\"add\"",[33,71021,71022],{"class":59},">录入\u003C\u002F",[33,71024,55531],{"class":52945},[33,71026,52952],{"class":59},[33,71028,71029,71031,71033],{"class":35,"line":4257},[33,71030,54062],{"class":59},[33,71032,68267],{"class":52945},[33,71034,52952],{"class":59},[33,71036,71037],{"class":35,"line":4265},[33,71038,127],{"emptyLinePlaceholder":126},[33,71040,71041,71043,71045,71048,71050],{"class":35,"line":4270},[33,71042,53789],{"class":59},[33,71044,10],{"class":52945},[33,71046,71047],{"class":59},">就业榜\u003C\u002F",[33,71049,10],{"class":52945},[33,71051,52952],{"class":59},[33,71053,71054,71056,71058],{"class":35,"line":4276},[33,71055,53789],{"class":59},[33,71057,1956],{"class":52945},[33,71059,52952],{"class":59},[33,71061,71062,71064,71066],{"class":35,"line":4282},[33,71063,52986],{"class":59},[33,71065,1959],{"class":52945},[33,71067,52952],{"class":59},[33,71069,71070,71072,71074],{"class":35,"line":4287},[33,71071,56878],{"class":59},[33,71073,1962],{"class":52945},[33,71075,52952],{"class":59},[33,71077,71078,71080,71082,71085,71087],{"class":35,"line":9608},[33,71079,56946],{"class":59},[33,71081,1965],{"class":52945},[33,71083,71084],{"class":59},">序号\u003C\u002F",[33,71086,1965],{"class":52945},[33,71088,52952],{"class":59},[33,71090,71091,71093,71095,71098,71100],{"class":35,"line":9632},[33,71092,56946],{"class":59},[33,71094,1965],{"class":52945},[33,71096,71097],{"class":59},">姓名\u003C\u002F",[33,71099,1965],{"class":52945},[33,71101,52952],{"class":59},[33,71103,71104,71106,71108,71111,71113],{"class":35,"line":9637},[33,71105,56946],{"class":59},[33,71107,1965],{"class":52945},[33,71109,71110],{"class":59},">年龄\u003C\u002F",[33,71112,1965],{"class":52945},[33,71114,52952],{"class":59},[33,71116,71117,71119,71121,71124,71126],{"class":35,"line":9643},[33,71118,56946],{"class":59},[33,71120,1965],{"class":52945},[33,71122,71123],{"class":59},">性别\u003C\u002F",[33,71125,1965],{"class":52945},[33,71127,52952],{"class":59},[33,71129,71130,71132,71134,71137,71139],{"class":35,"line":9670},[33,71131,56946],{"class":59},[33,71133,1965],{"class":52945},[33,71135,71136],{"class":59},">薪资\u003C\u002F",[33,71138,1965],{"class":52945},[33,71140,52952],{"class":59},[33,71142,71143,71145,71147,71150,71152],{"class":35,"line":9675},[33,71144,56946],{"class":59},[33,71146,1965],{"class":52945},[33,71148,71149],{"class":59},">就业城市\u003C\u002F",[33,71151,1965],{"class":52945},[33,71153,52952],{"class":59},[33,71155,71156,71158,71160,71163,71165],{"class":35,"line":9681},[33,71157,56946],{"class":59},[33,71159,1965],{"class":52945},[33,71161,71162],{"class":59},">操作\u003C\u002F",[33,71164,1965],{"class":52945},[33,71166,52952],{"class":59},[33,71168,71169,71171,71173],{"class":35,"line":9693},[33,71170,57051],{"class":59},[33,71172,1962],{"class":52945},[33,71174,52952],{"class":59},[33,71176,71177,71179,71181],{"class":35,"line":9705},[33,71178,53421],{"class":59},[33,71180,1959],{"class":52945},[33,71182,52952],{"class":59},[33,71184,71185,71187,71189],{"class":35,"line":9717},[33,71186,52986],{"class":59},[33,71188,2003],{"class":52945},[33,71190,52952],{"class":59},[33,71192,71193],{"class":35,"line":11375},[33,71194,71195],{"class":87},"      \u003C!-- \n",[33,71197,71198],{"class":35,"line":11400},[33,71199,71200],{"class":87},"        \u003Ctr>\n",[33,71202,71203],{"class":35,"line":11423},[33,71204,71205],{"class":87},"          \u003Ctd>1001\u003C\u002Ftd>\n",[33,71207,71208],{"class":35,"line":11447},[33,71209,71210],{"class":87},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[33,71212,71213],{"class":35,"line":11452},[33,71214,71215],{"class":87},"          \u003Ctd>19\u003C\u002Ftd>\n",[33,71217,71218],{"class":35,"line":11457},[33,71219,71220],{"class":87},"          \u003Ctd>男\u003C\u002Ftd>\n",[33,71222,71223],{"class":35,"line":11462},[33,71224,71225],{"class":87},"          \u003Ctd>15000\u003C\u002Ftd>\n",[33,71227,71228],{"class":35,"line":11471},[33,71229,71230],{"class":87},"          \u003Ctd>上海\u003C\u002Ftd>\n",[33,71232,71233],{"class":35,"line":11476},[33,71234,71235],{"class":87},"          \u003Ctd>\n",[33,71237,71238],{"class":35,"line":11482},[33,71239,71240],{"class":87},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[33,71242,71243],{"class":35,"line":11503},[33,71244,71245],{"class":87},"          \u003C\u002Ftd>\n",[33,71247,71248],{"class":35,"line":11509},[33,71249,71250],{"class":87},"        \u003C\u002Ftr> \n",[33,71252,71253],{"class":35,"line":11523},[33,71254,71255],{"class":87},"        -->\n",[33,71257,71258,71260,71262],{"class":35,"line":11529},[33,71259,53421],{"class":59},[33,71261,2003],{"class":52945},[33,71263,52952],{"class":59},[33,71265,71266,71268,71270],{"class":35,"line":11556},[33,71267,54062],{"class":59},[33,71269,1956],{"class":52945},[33,71271,52952],{"class":59},[33,71273,71274,71276,71278],{"class":35,"line":11565},[33,71275,53789],{"class":59},[33,71277,53458],{"class":52945},[33,71279,52952],{"class":59},[33,71281,71282],{"class":35,"line":11571},[33,71283,61601],{"class":87},[33,71285,71286,71288,71291,71293,71295,71297,71299,71302],{"class":35,"line":11579},[33,71287,12879],{"class":63},[33,71289,71290],{"class":39}," uname",[33,71292,15222],{"class":63},[33,71294,56040],{"class":59},[33,71296,56043],{"class":3632},[33,71298,109],{"class":59},[33,71300,71301],{"class":117},"'.uname'",[33,71303,157],{"class":59},[33,71305,71306,71308,71310,71312,71314,71316,71318,71321],{"class":35,"line":11584},[33,71307,12879],{"class":63},[33,71309,17345],{"class":39},[33,71311,15222],{"class":63},[33,71313,56040],{"class":59},[33,71315,56043],{"class":3632},[33,71317,109],{"class":59},[33,71319,71320],{"class":117},"'.age'",[33,71322,157],{"class":59},[33,71324,71325,71327,71330,71332,71334,71336,71338,71341],{"class":35,"line":18259},[33,71326,12879],{"class":63},[33,71328,71329],{"class":39}," gender",[33,71331,15222],{"class":63},[33,71333,56040],{"class":59},[33,71335,56043],{"class":3632},[33,71337,109],{"class":59},[33,71339,71340],{"class":117},"'.gender'",[33,71342,157],{"class":59},[33,71344,71345,71347,71350,71352,71354,71356,71358,71361],{"class":35,"line":18265},[33,71346,12879],{"class":63},[33,71348,71349],{"class":39}," salary",[33,71351,15222],{"class":63},[33,71353,56040],{"class":59},[33,71355,56043],{"class":3632},[33,71357,109],{"class":59},[33,71359,71360],{"class":117},"'.salary'",[33,71362,157],{"class":59},[33,71364,71365,71367,71370,71372,71374,71376,71378,71381],{"class":35,"line":18288},[33,71366,12879],{"class":63},[33,71368,71369],{"class":39}," city",[33,71371,15222],{"class":63},[33,71373,56040],{"class":59},[33,71375,56043],{"class":3632},[33,71377,109],{"class":59},[33,71379,71380],{"class":117},"'.city'",[33,71382,157],{"class":59},[33,71384,71385,71387,71390,71392,71394,71396,71398,71401],{"class":35,"line":18294},[33,71386,12879],{"class":63},[33,71388,71389],{"class":39}," tbody",[33,71391,15222],{"class":63},[33,71393,56040],{"class":59},[33,71395,56043],{"class":3632},[33,71397,109],{"class":59},[33,71399,71400],{"class":117},"'tbody'",[33,71402,157],{"class":59},[33,71404,71405],{"class":35,"line":18317},[33,71406,127],{"emptyLinePlaceholder":126},[33,71408,71409],{"class":35,"line":18331},[33,71410,71411],{"class":87},"    \u002F\u002F 获取所有带有name属性的元素\n",[33,71413,71414,71416,71419,71421,71423,71425,71427,71430],{"class":35,"line":18351},[33,71415,12879],{"class":63},[33,71417,71418],{"class":39}," items",[33,71420,15222],{"class":63},[33,71422,56040],{"class":59},[33,71424,57325],{"class":3632},[33,71426,109],{"class":59},[33,71428,71429],{"class":117},"'[name]'",[33,71431,157],{"class":59},[33,71433,71434],{"class":35,"line":18357},[33,71435,71436],{"class":87},"    \u002F\u002F 声明一个空的数组\n",[33,71438,71439,71441,71443,71445],{"class":35,"line":18368},[33,71440,12879],{"class":63},[33,71442,59338],{"class":39},[33,71444,15222],{"class":63},[33,71446,53483],{"class":59},[33,71448,71449],{"class":35,"line":18391},[33,71450,71451],{"class":87},"    \u002F\u002F 1.录入模块\n",[33,71453,71454],{"class":35,"line":18413},[33,71455,71456],{"class":87},"    \u002F\u002F 1.1这是一个表单提交事件\n",[33,71458,71459,71461,71464,71466,71468,71470,71472,71475],{"class":35,"line":18418},[33,71460,12879],{"class":63},[33,71462,71463],{"class":39}," info",[33,71465,15222],{"class":63},[33,71467,56040],{"class":59},[33,71469,56043],{"class":3632},[33,71471,109],{"class":59},[33,71473,71474],{"class":117},"'.info'",[33,71476,157],{"class":59},[33,71478,71479,71482,71484,71486,71489,71491,71493,71495,71497],{"class":35,"line":18424},[33,71480,71481],{"class":59},"    info.",[33,71483,59456],{"class":3632},[33,71485,109],{"class":59},[33,71487,71488],{"class":117},"'submit'",[33,71490,14093],{"class":59},[33,71492,56093],{"class":63},[33,71494,3332],{"class":59},[33,71496,1894],{"class":6877},[33,71498,14100],{"class":59},[33,71500,71501],{"class":35,"line":18438},[33,71502,71503],{"class":87},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[33,71505,71506,71509,71512],{"class":35,"line":18451},[33,71507,71508],{"class":59},"      e.",[33,71510,71511],{"class":3632},"preventDefault",[33,71513,943],{"class":59},[33,71515,71516],{"class":35,"line":18456},[33,71517,61655],{"class":87},[33,71519,71520],{"class":35,"line":18470},[33,71521,127],{"emptyLinePlaceholder":126},[33,71523,71524],{"class":35,"line":18475},[33,71525,71526],{"class":87},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[33,71528,71529],{"class":35,"line":18481},[33,71530,71531],{"class":87},"      \u002F\u002F 先遍历循环\n",[33,71533,71534,71536,71538,71540,71542,71544,71546,71548,71550,71553,71555,71557,71559],{"class":35,"line":18486},[33,71535,53929],{"class":63},[33,71537,3332],{"class":59},[33,71539,53492],{"class":63},[33,71541,11097],{"class":59},[33,71543,64],{"class":63},[33,71545,829],{"class":39},[33,71547,11104],{"class":59},[33,71549,2726],{"class":63},[33,71551,71552],{"class":59}," items.",[33,71554,53613],{"class":39},[33,71556,4877],{"class":59},[33,71558,3960],{"class":63},[33,71560,14100],{"class":59},[33,71562,71563,71565,71568,71570,71573],{"class":35,"line":18500},[33,71564,4163],{"class":63},[33,71566,71567],{"class":59}," (items[i].value ",[33,71569,56130],{"class":63},[33,71571,71572],{"class":117}," ''",[33,71574,14100],{"class":59},[33,71576,71577,71580,71583,71585,71588],{"class":35,"line":18505},[33,71578,71579],{"class":63},"          return",[33,71581,71582],{"class":3632}," alert",[33,71584,109],{"class":59},[33,71586,71587],{"class":117},"'输入内容不能为空'",[33,71589,157],{"class":59},[33,71591,71592],{"class":35,"line":18510},[33,71593,4195],{"class":59},[33,71595,71596],{"class":35,"line":18524},[33,71597,54043],{"class":59},[33,71599,71600],{"class":35,"line":18536},[33,71601,127],{"emptyLinePlaceholder":126},[33,71603,71604],{"class":35,"line":18541},[33,71605,71606],{"class":87},"      \u002F\u002F 创建新的对象\n",[33,71608,71609,71611,71614,71616],{"class":35,"line":18554},[33,71610,59871],{"class":63},[33,71612,71613],{"class":39}," obj",[33,71615,15222],{"class":63},[33,71617,17228],{"class":59},[33,71619,71620,71623,71625,71627,71629],{"class":35,"line":18559},[33,71621,71622],{"class":59},"        stuID: arr.",[33,71624,53613],{"class":39},[33,71626,47212],{"class":63},[33,71628,26774],{"class":39},[33,71630,33116],{"class":59},[33,71632,71633],{"class":35,"line":18564},[33,71634,71635],{"class":59},"        uname: uname.value,\n",[33,71637,71638],{"class":35,"line":18569},[33,71639,71640],{"class":59},"        age: age.value,\n",[33,71642,71643],{"class":35,"line":18582},[33,71644,71645],{"class":59},"        gender: gender.value,\n",[33,71647,71648],{"class":35,"line":18587},[33,71649,71650],{"class":59},"        salary: salary.value,\n",[33,71652,71653],{"class":35,"line":34280},[33,71654,71655],{"class":59},"        city: city.value\n",[33,71657,71658],{"class":35,"line":34286},[33,71659,54043],{"class":59},[33,71661,71662],{"class":35,"line":34292},[33,71663,71664],{"class":87},"      \u002F\u002F console.log(obj);\n",[33,71666,71667],{"class":35,"line":34298},[33,71668,71669],{"class":87},"      \u002F\u002F 追加到数组里面\n",[33,71671,71672,71674,71676],{"class":35,"line":34304},[33,71673,59650],{"class":59},[33,71675,53529],{"class":3632},[33,71677,71678],{"class":59},"(obj)\n",[33,71680,71681],{"class":35,"line":34315},[33,71682,71683],{"class":87},"      \u002F\u002F console.log(arr);\n",[33,71685,71686],{"class":35,"line":34321},[33,71687,71688],{"class":87},"      \u002F\u002F 清空表单  reset重置表单\n",[33,71690,71691,71694,71696,71699],{"class":35,"line":34341},[33,71692,71693],{"class":39},"      this",[33,71695,2375],{"class":59},[33,71697,71698],{"class":3632},"reset",[33,71700,943],{"class":59},[33,71702,71703],{"class":35,"line":34347},[33,71704,71705],{"class":87},"      \u002F\u002F 调用渲染函数\n",[33,71707,71708,71711],{"class":35,"line":34358},[33,71709,71710],{"class":3632},"      render",[33,71712,943],{"class":59},[33,71714,71715],{"class":35,"line":34364},[33,71716,35108],{"class":59},[33,71718,71719],{"class":35,"line":34370},[33,71720,71721],{"class":87},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[33,71723,71724,71727,71730],{"class":35,"line":34376},[33,71725,71726],{"class":63},"    function",[33,71728,71729],{"class":3632}," render",[33,71731,12511],{"class":59},[33,71733,71734],{"class":35,"line":34382},[33,71735,71736],{"class":87},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[33,71738,71739,71742,71744],{"class":35,"line":34388},[33,71740,71741],{"class":59},"      tbody.innerHTML ",[33,71743,64],{"class":63},[33,71745,71746],{"class":117}," ''\n",[33,71748,71749],{"class":35,"line":34394},[33,71750,71751],{"class":87},"      \u002F\u002F 遍历数组\n",[33,71753,71754,71756,71758,71760,71762,71764,71766,71768,71770,71772,71774,71776,71778],{"class":35,"line":34400},[33,71755,53929],{"class":63},[33,71757,3332],{"class":59},[33,71759,53492],{"class":63},[33,71761,11097],{"class":59},[33,71763,64],{"class":63},[33,71765,829],{"class":39},[33,71767,11104],{"class":59},[33,71769,2726],{"class":63},[33,71771,53610],{"class":59},[33,71773,53613],{"class":39},[33,71775,4877],{"class":59},[33,71777,3960],{"class":63},[33,71779,14100],{"class":59},[33,71781,71782,71784,71787,71789,71791,71794,71796,71799],{"class":35,"line":34420},[33,71783,62912],{"class":63},[33,71785,71786],{"class":39}," tr",[33,71788,15222],{"class":63},[33,71790,56040],{"class":59},[33,71792,71793],{"class":3632},"createElement",[33,71795,109],{"class":59},[33,71797,71798],{"class":117},"'tr'",[33,71800,157],{"class":59},[33,71802,71803,71806,71808],{"class":35,"line":34426},[33,71804,71805],{"class":59},"        tr.innerHTML ",[33,71807,64],{"class":63},[33,71809,71810],{"class":117}," `\n",[33,71812,71813,71816,71818,71820,71822,71825,71828],{"class":35,"line":34442},[33,71814,71815],{"class":117},"        \u003Ctd>${",[33,71817,5542],{"class":59},[33,71819,2707],{"class":117},[33,71821,2259],{"class":59},[33,71823,71824],{"class":117},"].",[33,71826,71827],{"class":59},"stuID",[33,71829,71830],{"class":117},"}\u003C\u002Ftd>\n",[33,71832,71833,71836,71838,71840,71842,71844,71847],{"class":35,"line":34448},[33,71834,71835],{"class":117},"          \u003Ctd>${",[33,71837,5542],{"class":59},[33,71839,2707],{"class":117},[33,71841,2259],{"class":59},[33,71843,71824],{"class":117},[33,71845,71846],{"class":59},"uname",[33,71848,71830],{"class":117},[33,71850,71851,71853,71855,71857,71859,71861,71864],{"class":35,"line":34462},[33,71852,71835],{"class":117},[33,71854,5542],{"class":59},[33,71856,2707],{"class":117},[33,71858,2259],{"class":59},[33,71860,71824],{"class":117},[33,71862,71863],{"class":59},"age",[33,71865,71830],{"class":117},[33,71867,71868,71870,71872,71874,71876,71878,71881],{"class":35,"line":34468},[33,71869,71835],{"class":117},[33,71871,5542],{"class":59},[33,71873,2707],{"class":117},[33,71875,2259],{"class":59},[33,71877,71824],{"class":117},[33,71879,71880],{"class":59},"gender",[33,71882,71830],{"class":117},[33,71884,71885,71887,71889,71891,71893,71895,71898],{"class":35,"line":34483},[33,71886,71835],{"class":117},[33,71888,5542],{"class":59},[33,71890,2707],{"class":117},[33,71892,2259],{"class":59},[33,71894,71824],{"class":117},[33,71896,71897],{"class":59},"salary",[33,71899,71830],{"class":117},[33,71901,71902,71904,71906,71908,71910,71912,71915],{"class":35,"line":34489},[33,71903,71835],{"class":117},[33,71905,5542],{"class":59},[33,71907,2707],{"class":117},[33,71909,2259],{"class":59},[33,71911,71824],{"class":117},[33,71913,71914],{"class":59},"city",[33,71916,71830],{"class":117},[33,71918,71919],{"class":35,"line":34498},[33,71920,71235],{"class":117},[33,71922,71923,71926,71928],{"class":35,"line":34504},[33,71924,71925],{"class":117},"            \u003Ca href=\"javascript:\" data-id=${",[33,71927,2259],{"class":59},[33,71929,71930],{"class":117},"}>删除\u003C\u002Fa>\n",[33,71932,71933],{"class":35,"line":34513},[33,71934,71935],{"class":117},"          \u003C\u002Ftd> \n",[33,71937,71938],{"class":35,"line":34519},[33,71939,71940],{"class":117},"          `\n",[33,71942,71943],{"class":35,"line":34525},[33,71944,71945],{"class":87},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[33,71947,71948,71951,71954],{"class":35,"line":34534},[33,71949,71950],{"class":59},"        tbody.",[33,71952,71953],{"class":3632},"appendChild",[33,71955,71956],{"class":59},"(tr)\n",[33,71958,71959],{"class":35,"line":34540},[33,71960,54043],{"class":59},[33,71962,71963],{"class":35,"line":34551},[33,71964,3855],{"class":59},[33,71966,71967],{"class":35,"line":34557},[33,71968,127],{"emptyLinePlaceholder":126},[33,71970,71971],{"class":35,"line":34576},[33,71972,71973],{"class":87},"    \u002F\u002F 3.删除委托\n",[33,71975,71976],{"class":35,"line":34582},[33,71977,71978],{"class":87},"    \u002F\u002F 3.1 事件委托 tbody\n",[33,71980,71981,71984,71986,71988,71990,71992,71994,71996,71998],{"class":35,"line":34593},[33,71982,71983],{"class":59},"    tbody.",[33,71985,59456],{"class":3632},[33,71987,109],{"class":59},[33,71989,59461],{"class":117},[33,71991,14093],{"class":59},[33,71993,56093],{"class":63},[33,71995,3332],{"class":59},[33,71997,1894],{"class":6877},[33,71999,14100],{"class":59},[33,72001,72002,72004,72006,72008,72010],{"class":35,"line":34599},[33,72003,56124],{"class":63},[33,72005,68676],{"class":59},[33,72007,56130],{"class":63},[33,72009,69898],{"class":117},[33,72011,14100],{"class":59},[33,72013,72014],{"class":35,"line":34619},[33,72015,72016],{"class":87},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[33,72018,72019],{"class":35,"line":34635},[33,72020,72021],{"class":87},"        \u002F\u002F console.log(e.target.dataset.id);\n",[33,72023,72024],{"class":35,"line":34641},[33,72025,72026],{"class":87},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[33,72028,72029,72032,72034,72037,72039],{"class":35,"line":34655},[33,72030,72031],{"class":59},"        arr.",[33,72033,59653],{"class":3632},[33,72035,72036],{"class":59},"(e.target.dataset.id, ",[33,72038,2036],{"class":39},[33,72040,157],{"class":59},[33,72042,72043],{"class":35,"line":34661},[33,72044,72045],{"class":87},"        \u002F\u002F 重新渲染一次\n",[33,72047,72048,72051],{"class":35,"line":34667},[33,72049,72050],{"class":3632},"        render",[33,72052,943],{"class":59},[33,72054,72055],{"class":35,"line":34678},[33,72056,54043],{"class":59},[33,72058,72059],{"class":35,"line":34684},[33,72060,35108],{"class":59},[33,72062,72063,72065,72067],{"class":35,"line":34690},[33,72064,54062],{"class":59},[33,72066,53458],{"class":52945},[33,72068,52952],{"class":59},[33,72070,72071],{"class":35,"line":34700},[33,72072,127],{"emptyLinePlaceholder":126},[33,72074,72075,72077,72079],{"class":35,"line":34706},[33,72076,53430],{"class":59},[33,72078,53445],{"class":52945},[33,72080,52952],{"class":59},[33,72082,72083],{"class":35,"line":34717},[33,72084,127],{"emptyLinePlaceholder":126},[33,72086,72087,72089,72091],{"class":35,"line":34723},[33,72088,53430],{"class":59},[33,72090,52280],{"class":52945},[33,72092,52952],{"class":59},[19,72094,72095],{},"样式：",[23,72097,72101],{"className":72098,"code":72099,"language":72100,"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,72102,72103,72108,72118,72127,72131,72135,72140,72150,72155,72159,72164,72174,72179,72188,72192,72196,72201,72206,72216,72226,72231,72235,72240,72249,72259,72264,72274,72284,72288,72293,72301,72305,72310,72315,72320,72328,72337,72341,72346,72355,72359,72364,72373,72377,72382,72391,72400,72408,72412,72417,72426,72436,72445,72455,72461,72470,72480,72490,72494,72499,72508,72516,72526,72534,72543,72552,72562,72570,72574,72579,72588],{"__ignoreMap":28},[33,72104,72105],{"class":35,"line":36},[33,72106,72107],{"class":59},"* {\n",[33,72109,72110,72113,72115],{"class":35,"line":43},[33,72111,72112],{"class":52945},"  margin",[33,72114,53082],{"class":59},[33,72116,72117],{"class":117},"0;\n",[33,72119,72120,72123,72125],{"class":35,"line":130},[33,72121,72122],{"class":117},"  padding",[33,72124,53082],{"class":59},[33,72126,72117],{"class":117},[33,72128,72129],{"class":35,"line":146},[33,72130,3247],{"class":59},[33,72132,72133],{"class":35,"line":267},[33,72134,127],{"emptyLinePlaceholder":126},[33,72136,72137],{"class":35,"line":275},[33,72138,72139],{"class":117},"a {\n",[33,72141,72142,72145,72147],{"class":35,"line":392},[33,72143,72144],{"class":52945},"  text-decoration",[33,72146,53082],{"class":59},[33,72148,72149],{"class":117},"none;\n",[33,72151,72152],{"class":35,"line":406},[33,72153,72154],{"class":117},"  color:#721c24;\n",[33,72156,72157],{"class":35,"line":418},[33,72158,3247],{"class":59},[33,72160,72161],{"class":35,"line":425},[33,72162,72163],{"class":117},"h1 {\n",[33,72165,72166,72169,72171],{"class":35,"line":1147},[33,72167,72168],{"class":52945},"  text-align",[33,72170,53082],{"class":59},[33,72172,72173],{"class":117},"center;\n",[33,72175,72176],{"class":35,"line":1329},[33,72177,72178],{"class":117},"  color:#333;\n",[33,72180,72181,72183,72185],{"class":35,"line":1341},[33,72182,72112],{"class":52945},[33,72184,53082],{"class":59},[33,72186,72187],{"class":117},"20px 0;\n",[33,72189,72190],{"class":35,"line":1348},[33,72191,4340],{"class":59},[33,72193,72194],{"class":35,"line":1529},[33,72195,3247],{"class":59},[33,72197,72198],{"class":35,"line":1546},[33,72199,72200],{"class":117},"table {\n",[33,72202,72203],{"class":35,"line":1551},[33,72204,72205],{"class":117},"  margin:0 auto;\n",[33,72207,72208,72211,72213],{"class":35,"line":1566},[33,72209,72210],{"class":52945},"  width",[33,72212,53082],{"class":59},[33,72214,72215],{"class":117},"800px;\n",[33,72217,72218,72221,72223],{"class":35,"line":1578},[33,72219,72220],{"class":52945},"  border-collapse",[33,72222,53082],{"class":59},[33,72224,72225],{"class":117},"collapse;\n",[33,72227,72228],{"class":35,"line":1583},[33,72229,72230],{"class":117},"  color:#004085;\n",[33,72232,72233],{"class":35,"line":3369},[33,72234,3247],{"class":59},[33,72236,72237],{"class":35,"line":3396},[33,72238,72239],{"class":117},"th {\n",[33,72241,72242,72244,72246],{"class":35,"line":3401},[33,72243,72122],{"class":52945},[33,72245,53082],{"class":59},[33,72247,72248],{"class":117},"10px;\n",[33,72250,72251,72254,72256],{"class":35,"line":3418},[33,72252,72253],{"class":52945},"  background",[33,72255,53082],{"class":59},[33,72257,72258],{"class":87},"#cfe5ff;\n",[33,72260,72261],{"class":35,"line":3423},[33,72262,72263],{"class":59},"  \n",[33,72265,72266,72269,72271],{"class":35,"line":3428},[33,72267,72268],{"class":52945},"  font-size",[33,72270,53082],{"class":59},[33,72272,72273],{"class":117},"20px;\n",[33,72275,72276,72279,72281],{"class":35,"line":3433},[33,72277,72278],{"class":52945},"  font-weight",[33,72280,53082],{"class":59},[33,72282,72283],{"class":117},"400;\n",[33,72285,72286],{"class":35,"line":3447},[33,72287,3247],{"class":59},[33,72289,72290],{"class":35,"line":3452},[33,72291,72292],{"class":117},"td,th {\n",[33,72294,72295,72298],{"class":35,"line":4243},[33,72296,72297],{"class":117},"  border:1px solid",[33,72299,72300],{"class":87}," #b8daff;\n",[33,72302,72303],{"class":35,"line":4257},[33,72304,3247],{"class":59},[33,72306,72307],{"class":35,"line":4265},[33,72308,72309],{"class":117},"td {\n",[33,72311,72312],{"class":35,"line":4270},[33,72313,72314],{"class":117},"  padding:10px;\n",[33,72316,72317],{"class":35,"line":4276},[33,72318,72319],{"class":117},"  color:#666;\n",[33,72321,72322,72324,72326],{"class":35,"line":4282},[33,72323,72168],{"class":52945},[33,72325,53082],{"class":59},[33,72327,72173],{"class":117},[33,72329,72330,72332,72334],{"class":35,"line":4287},[33,72331,72268],{"class":52945},[33,72333,53082],{"class":59},[33,72335,72336],{"class":117},"16px;\n",[33,72338,72339],{"class":35,"line":9608},[33,72340,3247],{"class":59},[33,72342,72343],{"class":35,"line":9632},[33,72344,72345],{"class":117},"tbody tr {\n",[33,72347,72348,72350,72352],{"class":35,"line":9637},[33,72349,72253],{"class":52945},[33,72351,53082],{"class":59},[33,72353,72354],{"class":87},"#fff;\n",[33,72356,72357],{"class":35,"line":9643},[33,72358,3247],{"class":59},[33,72360,72361],{"class":35,"line":9670},[33,72362,72363],{"class":117},"tbody tr:hover {\n",[33,72365,72366,72368,72370],{"class":35,"line":9675},[33,72367,72253],{"class":52945},[33,72369,53082],{"class":59},[33,72371,72372],{"class":87},"#e1ecf8;\n",[33,72374,72375],{"class":35,"line":9681},[33,72376,3247],{"class":59},[33,72378,72379],{"class":35,"line":9693},[33,72380,72381],{"class":117},".info {\n",[33,72383,72384,72386,72388],{"class":35,"line":9705},[33,72385,72210],{"class":52945},[33,72387,53082],{"class":59},[33,72389,72390],{"class":117},"900px;\n",[33,72392,72393,72395,72397],{"class":35,"line":9717},[33,72394,72112],{"class":52945},[33,72396,53082],{"class":59},[33,72398,72399],{"class":117},"50px auto;\n",[33,72401,72402,72404,72406],{"class":35,"line":11375},[33,72403,72168],{"class":52945},[33,72405,53082],{"class":59},[33,72407,72173],{"class":117},[33,72409,72410],{"class":35,"line":11400},[33,72411,3247],{"class":59},[33,72413,72414],{"class":35,"line":11423},[33,72415,72416],{"class":117},".info  input, .info select {\n",[33,72418,72419,72421,72423],{"class":35,"line":11447},[33,72420,72210],{"class":52945},[33,72422,53082],{"class":59},[33,72424,72425],{"class":117},"80px;\n",[33,72427,72428,72431,72433],{"class":35,"line":11452},[33,72429,72430],{"class":52945},"  height",[33,72432,53082],{"class":59},[33,72434,72435],{"class":117},"27px;\n",[33,72437,72438,72441,72443],{"class":35,"line":11457},[33,72439,72440],{"class":52945},"  outline",[33,72442,53082],{"class":59},[33,72444,72149],{"class":117},[33,72446,72447,72450,72452],{"class":35,"line":11462},[33,72448,72449],{"class":52945},"  border-radius",[33,72451,53082],{"class":59},[33,72453,72454],{"class":117},"5px;\n",[33,72456,72457,72459],{"class":35,"line":11471},[33,72458,72297],{"class":117},[33,72460,72300],{"class":87},[33,72462,72463,72466,72468],{"class":35,"line":11476},[33,72464,72465],{"class":52945},"  padding-left",[33,72467,53082],{"class":59},[33,72469,72454],{"class":117},[33,72471,72472,72475,72477],{"class":35,"line":11482},[33,72473,72474],{"class":52945},"  box-sizing",[33,72476,53082],{"class":59},[33,72478,72479],{"class":117},"border-box;\n",[33,72481,72482,72485,72487],{"class":35,"line":11503},[33,72483,72484],{"class":52945},"  margin-right",[33,72486,53082],{"class":59},[33,72488,72489],{"class":117},"15px;\n",[33,72491,72492],{"class":35,"line":11509},[33,72493,3247],{"class":59},[33,72495,72496],{"class":35,"line":11523},[33,72497,72498],{"class":117},".info button {\n",[33,72500,72501,72503,72505],{"class":35,"line":11529},[33,72502,72210],{"class":52945},[33,72504,53082],{"class":59},[33,72506,72507],{"class":117},"60px;\n",[33,72509,72510,72512,72514],{"class":35,"line":11556},[33,72511,72430],{"class":52945},[33,72513,53082],{"class":59},[33,72515,72435],{"class":117},[33,72517,72518,72521,72523],{"class":35,"line":11565},[33,72519,72520],{"class":52945},"  background-color",[33,72522,53082],{"class":59},[33,72524,72525],{"class":87},"#004085;\n",[33,72527,72528,72530,72532],{"class":35,"line":11571},[33,72529,72440],{"class":52945},[33,72531,53082],{"class":59},[33,72533,72149],{"class":117},[33,72535,72536,72539,72541],{"class":35,"line":11579},[33,72537,72538],{"class":52945},"  border",[33,72540,53082],{"class":59},[33,72542,72117],{"class":117},[33,72544,72545,72548,72550],{"class":35,"line":11584},[33,72546,72547],{"class":52945},"  color",[33,72549,53082],{"class":59},[33,72551,72354],{"class":87},[33,72553,72554,72557,72559],{"class":35,"line":18259},[33,72555,72556],{"class":52945},"  cursor",[33,72558,53082],{"class":59},[33,72560,72561],{"class":117},"pointer;\n",[33,72563,72564,72566,72568],{"class":35,"line":18265},[33,72565,72449],{"class":52945},[33,72567,53082],{"class":59},[33,72569,72454],{"class":117},[33,72571,72572],{"class":35,"line":18288},[33,72573,3247],{"class":59},[33,72575,72576],{"class":35,"line":18294},[33,72577,72578],{"class":117},".info .age {\n",[33,72580,72581,72583,72585],{"class":35,"line":18317},[33,72582,72210],{"class":52945},[33,72584,53082],{"class":59},[33,72586,72587],{"class":117},"50px;\n",[33,72589,72590],{"class":35,"line":18331},[33,72591,3247],{"class":59},[19,72593,72594],{},"思路：",[19,72596,72597],{},[3145,72598],{"alt":28,"src":72599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72601,72602],{},[3145,72603],{"alt":28,"src":72604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72606,72607],{},[3145,72608],{"alt":28,"src":72609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[633,72611,72613],{"id":72612},"_3315-重绘回流","3.3.15 重绘回流",[19,72615,72616],{},[3145,72617],{"alt":28,"src":72618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72620,72621],{},[3145,72622],{"alt":28,"src":72623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72625,72626],{},[3145,72627],{"alt":28,"src":72628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72630,72632],{"id":72631},"_34-bom","3.4 BOM",[19,72634,72635],{},[3145,72636],{"alt":28,"src":72637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72639,72640],{},"平时写的document省略了window而已，实际上是window.document",[19,72642,72643],{},"函数也是这样，调用的时候实际为window.fn()",[19,72645,72646],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72648,72649],{},"window大部分情况下可以省略",[633,72651,72653],{"id":72652},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72655,72656],{},"只执行一次",[19,72658,72659],{},[3145,72660],{"alt":28,"src":72661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72663,72664],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72666,72667],{},[3145,72668],{"alt":28,"src":72669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[633,72671,72673],{"id":72672},"_342-js执行机制","3.4.2 JS执行机制",[19,72675,72676],{},[3145,72677],{"alt":28,"src":72678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72680,72681],{},"两个的结果都是1111 3333 2222",[19,72683,72684],{},[3145,72685],{"alt":28,"src":72686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72688,72689],{},[3145,72690],{"alt":28,"src":72691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72693,72694],{},[3145,72695],{"alt":28,"src":72696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72698,72699],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72701,72702],{},"工作流程：",[19,72704,72705],{},[3145,72706],{"alt":28,"src":72707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72709,72710],{},[3145,72711],{"alt":28,"src":72712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72714,72715],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72717,72718],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[633,72720,72722],{"id":72721},"_343-location对象","3.4.3 location对象",[19,72724,72725],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72727,72728],{},[3145,72729],{"alt":28,"src":72730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72732,72733],{},"href可以跳转页面",[162,72735,72736],{},[165,72737,72738],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72740,72741],{},"search得到提交信息之后网站后边的地址",[19,72743,72744],{},[3145,72745],{"alt":28,"src":72746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72748,72749],{},[3145,72750],{"alt":28,"src":72751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[162,72753,72754],{"start":43},[165,72755,72756],{},"hash:这个获取单页面应用#后边的地址",[19,72758,72759],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72761,72762],{},[3145,72763],{"alt":28,"src":72764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[23,72766,72768],{"className":54712,"code":72767,"language":54714,"meta":28,"style":28},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[30,72769,72770,72790,72810],{"__ignoreMap":28},[33,72771,72772,72774,72776,72778,72780,72783,72786,72788],{"class":35,"line":36},[33,72773,53789],{"class":59},[33,72775,2057],{"class":52945},[33,72777,62699],{"class":3632},[33,72779,64],{"class":59},[33,72781,72782],{"class":117},"\"#\u002Fmy\"",[33,72784,72785],{"class":59},">我的\u003C\u002F",[33,72787,2057],{"class":52945},[33,72789,52952],{"class":59},[33,72791,72792,72794,72796,72798,72800,72803,72806,72808],{"class":35,"line":43},[33,72793,53789],{"class":59},[33,72795,2057],{"class":52945},[33,72797,62699],{"class":3632},[33,72799,64],{"class":59},[33,72801,72802],{"class":117},"\"#\u002Ffriend\"",[33,72804,72805],{"class":59},">关注\u003C\u002F",[33,72807,2057],{"class":52945},[33,72809,52952],{"class":59},[33,72811,72812,72814,72816,72818,72820,72823,72826,72828],{"class":35,"line":130},[33,72813,53789],{"class":59},[33,72815,2057],{"class":52945},[33,72817,62699],{"class":3632},[33,72819,64],{"class":59},[33,72821,72822],{"class":117},"\"#\u002Fdownload\"",[33,72824,72825],{"class":59},">下载\u003C\u002F",[33,72827,2057],{"class":52945},[33,72829,52952],{"class":59},[19,72831,72832],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[162,72834,72835],{"start":130},[165,72836,72837,72838,72840,72841,72843],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55361,72839],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55361,72842],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[633,72845,72847],{"id":72846},"_345-navigator对象","3.4.5 navigator对象",[19,72849,72850],{},[3145,72851],{"alt":28,"src":72852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[23,72854,72858],{"className":72855,"code":72856,"language":72857,"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,72859,72860,72865,72876,72888,72893,72943,72984,72989,73002,73014,73019],{"__ignoreMap":28},[33,72861,72862],{"class":35,"line":36},[33,72863,72864],{"class":87},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[33,72866,72867,72869,72871,72873],{"class":35,"line":43},[33,72868,2045],{"class":63},[33,72870,109],{"class":59},[33,72872,56093],{"class":63},[33,72874,72875],{"class":59}," () { \n",[33,72877,72878,72880,72883,72885],{"class":35,"line":130},[33,72879,8452],{"class":63},[33,72881,72882],{"class":39}," userAgent",[33,72884,15222],{"class":63},[33,72886,72887],{"class":59}," navigator.userAgent \n",[33,72889,72890],{"class":35,"line":146},[33,72891,72892],{"class":87},"\u002F\u002F 验证是否为Android或iPhone \n",[33,72894,72895,72897,72900,72902,72905,72907,72909,72911,72914,72916,72919,72923,72925,72927,72929,72932,72934,72936,72938,72940],{"class":35,"line":267},[33,72896,8452],{"class":63},[33,72898,72899],{"class":39}," android",[33,72901,15222],{"class":63},[33,72903,72904],{"class":59}," userAgent.",[33,72906,1043],{"class":3632},[33,72908,109],{"class":59},[33,72910,2401],{"class":117},[33,72912,72913],{"class":49622},"(Android);",[33,72915,2801],{"class":63},[33,72917,72918],{"class":39},"[\\s",[33,72920,72922],{"class":72921},"snhLl","\\\u002F",[33,72924,2756],{"class":39},[33,72926,2298],{"class":63},[33,72928,109],{"class":49622},[33,72930,72931],{"class":39},"[\\d.]",[33,72933,2298],{"class":63},[33,72935,2247],{"class":49622},[33,72937,2801],{"class":63},[33,72939,2401],{"class":117},[33,72941,72942],{"class":59},") \n",[33,72944,72945,72947,72950,72952,72954,72956,72958,72960,72963,72966,72969,72971,72973,72976,72978,72980,72982],{"class":35,"line":275},[33,72946,8452],{"class":63},[33,72948,72949],{"class":39}," iphone",[33,72951,15222],{"class":63},[33,72953,72904],{"class":59},[33,72955,1043],{"class":3632},[33,72957,109],{"class":59},[33,72959,2401],{"class":117},[33,72961,72962],{"class":49622},"(iPhone",[33,72964,72965],{"class":39},"\\s",[33,72967,72968],{"class":49622},"OS)",[33,72970,72965],{"class":39},[33,72972,109],{"class":49622},[33,72974,72975],{"class":39},"[\\d_]",[33,72977,2298],{"class":63},[33,72979,2247],{"class":49622},[33,72981,2401],{"class":117},[33,72983,72942],{"class":59},[33,72985,72986],{"class":35,"line":392},[33,72987,72988],{"class":87},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[33,72990,72991,72993,72996,72999],{"class":35,"line":406},[33,72992,133],{"class":63},[33,72994,72995],{"class":59}," (android ",[33,72997,72998],{"class":63},"||",[33,73000,73001],{"class":59}," iphone) { \n",[33,73003,73004,73007,73009,73012],{"class":35,"line":418},[33,73005,73006],{"class":59},"location.href ",[33,73008,64],{"class":63},[33,73010,73011],{"class":117}," 'http:\u002F\u002Fm.itcast.cn'",[33,73013,4340],{"class":59},[33,73015,73016],{"class":35,"line":425},[33,73017,73018],{"class":59},"} \n",[33,73020,73021],{"class":35,"line":1147},[33,73022,73023],{"class":59},"})()\n",[633,73025,73027],{"id":73026},"_346-histroy对象","3.4.6 histroy对象",[19,73029,73030],{},[3145,73031],{"alt":28,"src":73032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73034,73035],{},"浏览器地址的前进与后退!!!",[19,73037,73038],{},"history.back() 等效于 history.go(-1)",[19,73040,73041],{},"history.forward() 等效于 history.go(1)",[14,73043,73045],{"id":73044},"_35-本地存储","3.5 本地存储",[162,73047,73048,73051,73054],{},[165,73049,73050],{},"数据存储在用户浏览器中",[165,73052,73053],{},"设置、读取方便、甚至页面刷新不丢失数据",[165,73055,73056],{},"容量较大，sessionStorage和localStorage约 5M 左右",[633,73058,73060],{"id":73059},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73062,73063],{},"只能存储字符串",[19,73065,73066],{},[3145,73067],{"alt":28,"src":73068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73070,73071],{},[3145,73072],{"alt":28,"src":73073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73075,73076],{},"键值对要加引号,不然就会当变量来看了",[19,73078,73079],{},"localStorage.setItem('uname', 'pink')",[19,73081,73082],{},"刷新之后信息不再丢失",[19,73084,73085],{},"操作key,value会跟着变",[19,73087,73088],{},"删除只删除键就可以,即名字",[19,73090,73079],{},[19,73092,73093],{},"改:",[19,73095,73096],{},"localStorage.setItem('uname','red')",[19,73098,73099],{},"有这个键就是改,没有这个键就是改",[19,73101,73102],{},[3145,73103],{"alt":28,"src":73104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73106,73107],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73109,73110],{},[3145,73111],{"alt":28,"src":73112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73114,73115],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[633,73117,73119],{"id":73118},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73121,73122],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73124,73125],{},"特性:",[162,73127,73128,73131,73134,73137],{},[165,73129,73130],{},"生命周期为关闭浏览器窗口",[165,73132,73133],{},"在同一个窗口(页面)下数据可以共享",[165,73135,73136],{},"以键值对的形式存储使用",[165,73138,73139],{},"用法跟localStorage 基本相同",[633,73141,73143],{"id":73142},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73145,73146],{},"本地只能存储字符串,无法直接存储复杂数据类型",[23,73148,73150],{"className":54712,"code":73149,"language":54714,"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,73151,73152,73160,73165,73170,73175,73180,73184,73189,73194],{"__ignoreMap":28},[33,73153,73154,73156,73158],{"class":35,"line":36},[33,73155,2726],{"class":59},[33,73157,53458],{"class":52945},[33,73159,52952],{"class":59},[33,73161,73162],{"class":35,"line":43},[33,73163,73164],{"class":59},"    const obj = {\n",[33,73166,73167],{"class":35,"line":130},[33,73168,73169],{"class":59},"      uname: 'pink老师',\n",[33,73171,73172],{"class":35,"line":146},[33,73173,73174],{"class":59},"      age: 18,\n",[33,73176,73177],{"class":35,"line":267},[33,73178,73179],{"class":59},"      gender: '女'\n",[33,73181,73182],{"class":35,"line":275},[33,73183,3855],{"class":59},[33,73185,73186],{"class":35,"line":392},[33,73187,73188],{"class":59},"    \u002F\u002F 存储复杂数据类型\n",[33,73190,73191],{"class":35,"line":406},[33,73192,73193],{"class":59},"    localStorage.setItem('obj', obj)\n",[33,73195,73196,73198,73200],{"class":35,"line":418},[33,73197,54062],{"class":59},[33,73199,53458],{"class":52945},[33,73201,52952],{"class":59},[19,73203,73204],{},[3145,73205],{"alt":28,"src":73206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73208,73209],{},"如果获取一下数据:",[19,73211,73212],{},"log(localStorage.getItem('obj'))",[19,73214,73215],{},[3145,73216],{"alt":28,"src":73217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73219,73220],{},"发现直接存对象是使用不了的!!!",[23653,73222,73224],{"id":73223},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73226,73227],{},[3145,73228],{"alt":28,"src":73229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[23,73231,73233],{"className":52278,"code":73232,"language":52280,"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,73234,73235,73243,73253,73263,73272,73280,73284,73288,73314,73333,73341,73345,73350,73355],{"__ignoreMap":28},[33,73236,73237,73239,73241],{"class":35,"line":36},[33,73238,2726],{"class":59},[33,73240,53458],{"class":52945},[33,73242,52952],{"class":59},[33,73244,73245,73247,73249,73251],{"class":35,"line":43},[33,73246,12879],{"class":63},[33,73248,71613],{"class":39},[33,73250,15222],{"class":63},[33,73252,17228],{"class":59},[33,73254,73255,73258,73261],{"class":35,"line":130},[33,73256,73257],{"class":59},"      uname: ",[33,73259,73260],{"class":117},"'pink老师'",[33,73262,33116],{"class":59},[33,73264,73265,73268,73270],{"class":35,"line":146},[33,73266,73267],{"class":59},"      age: ",[33,73269,2467],{"class":39},[33,73271,33116],{"class":59},[33,73273,73274,73277],{"class":35,"line":267},[33,73275,73276],{"class":59},"      gender: ",[33,73278,73279],{"class":117},"'女'\n",[33,73281,73282],{"class":35,"line":275},[33,73283,3855],{"class":59},[33,73285,73286],{"class":35,"line":392},[33,73287,73188],{"class":87},[33,73289,73290,73293,73296,73298,73301,73303,73306,73308,73311],{"class":35,"line":406},[33,73291,73292],{"class":59},"  localStorage.",[33,73294,73295],{"class":3632},"setItem",[33,73297,109],{"class":59},[33,73299,73300],{"class":117},"'obj'",[33,73302,14093],{"class":59},[33,73304,73305],{"class":39},"JSON",[33,73307,2375],{"class":59},[33,73309,73310],{"class":3632},"stringify",[33,73312,73313],{"class":59},"(obj))\n",[33,73315,73316,73319,73321,73324,73327,73329,73331],{"class":35,"line":418},[33,73317,73318],{"class":59},"  console.",[33,73320,59890],{"class":3632},[33,73322,73323],{"class":59},"(localStorage.",[33,73325,73326],{"class":3632},"getItem",[33,73328,109],{"class":59},[33,73330,73300],{"class":117},[33,73332,121],{"class":59},[33,73334,73335,73337,73339],{"class":35,"line":425},[33,73336,54062],{"class":59},[33,73338,53458],{"class":52945},[33,73340,52952],{"class":59},[33,73342,73343],{"class":35,"line":1147},[33,73344,72263],{"class":59},[33,73346,73347],{"class":35,"line":1329},[33,73348,73349],{"class":59},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[33,73351,73352],{"class":35,"line":1341},[33,73353,73354],{"class":59},"  类型是字符串的\n",[33,73356,73357],{"class":35,"line":1348},[33,73358,73359],{"class":59},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23653,73361,73363],{"id":73362},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73365,73366],{},[3145,73367],{"alt":28,"src":73368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73370,73371],{},[3145,73372],{"alt":28,"src":73373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[23,73375,73377],{"className":54712,"code":73376,"language":54714,"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,73378,73379,73387,73391,73395,73399,73403,73407,73412,73417,73422,73427,73432,73437,73442,73447],{"__ignoreMap":28},[33,73380,73381,73383,73385],{"class":35,"line":36},[33,73382,53789],{"class":59},[33,73384,53458],{"class":52945},[33,73386,52952],{"class":59},[33,73388,73389],{"class":35,"line":43},[33,73390,73164],{"class":59},[33,73392,73393],{"class":35,"line":130},[33,73394,73169],{"class":59},[33,73396,73397],{"class":35,"line":146},[33,73398,73174],{"class":59},[33,73400,73401],{"class":35,"line":267},[33,73402,73179],{"class":59},[33,73404,73405],{"class":35,"line":275},[33,73406,3855],{"class":59},[33,73408,73409],{"class":35,"line":392},[33,73410,73411],{"class":59},"    \u002F\u002F 1.存储复杂数据类型\n",[33,73413,73414],{"class":35,"line":406},[33,73415,73416],{"class":59},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[33,73418,73419],{"class":35,"line":418},[33,73420,73421],{"class":59},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[33,73423,73424],{"class":35,"line":425},[33,73425,73426],{"class":59},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[33,73428,73429],{"class":35,"line":1147},[33,73430,73431],{"class":59},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[33,73433,73434],{"class":35,"line":1329},[33,73435,73436],{"class":59},"    \u002F\u002F 取\n",[33,73438,73439],{"class":35,"line":1341},[33,73440,73441],{"class":59},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[33,73443,73444],{"class":35,"line":1348},[33,73445,73446],{"class":59},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[33,73448,73449,73451,73453],{"class":35,"line":1529},[33,73450,54062],{"class":59},[33,73452,53458],{"class":52945},[33,73454,52952],{"class":59},[19,73456,73457],{},[3145,73458],{"alt":28,"src":73459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[633,73461,73463],{"id":73462},"_356-数组map方法","3.5.6 数组map方法",[19,73465,73466],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73468,73469],{},[3145,73470],{"alt":28,"src":73471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73473,73474],{},[3145,73475],{"alt":28,"src":73476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73478,73479,73482],{},[1968,73480,73481],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73484,73485],{},"map有返回值，但是forEach没有返回值",[19,73487,73488],{},"map是个方法。用的时候要加 ()",[19,73490,73491],{},"map返回的是一个数组",[633,73493,73495],{"id":73494},"_357-数组中join方法","3.5.7 数组中join方法",[19,73497,73498],{},[3145,73499],{"alt":28,"src":73500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73502,73503],{},"类似于python中拼接字符串一样！",[162,73505,73506,73509,73512],{},[165,73507,73508],{},"小括号为空则逗号分开",[165,73510,73511],{},"小括号为空字符串 ''，则元素之间没有分隔符",[165,73513,73514],{},"小括号用啥符号就用进行分割",[633,73516,73518],{"id":73517},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[162,73520,73521,73524,73527,73530,73533],{},[165,73522,73523],{},"记住本地时间获取快速方式：new Date().toDateString()",[165,73525,73526],{},"尽量减少DOM操作，用好map+join的渲染方式",[165,73528,73529],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[165,73531,73532],{},"return可以实现函数的结束",[165,73534,73535],{},"禁止跳转是 preventDefault() 不要忘记",[23,73537,73539],{"className":52278,"code":73538,"language":52280,"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,73540,73541,73551,73565,73569,73577,73591,73611,73623,73631,73637,73647,73657,73661,73665,73671,73681,73693,73697,73701,73708,73720,73734,73744,73748,73752,73759,73766,73773,73785,73797,73807,73819,73823,73827,73834,73841,73853,73865,73875,73887,73917,73921,73925,73932,73944,73956,73980,73990,74000,74004,74008,74016,74027,74039,74051,74063,74080,74092,74104,74108,74112,74119,74131,74143,74155,74166,74184,74197,74209,74233,74244,74248,74252,74260,74270,74274,74278,74284,74296,74307,74317,74321,74325,74331,74353,74357,74361,74367,74373,74385,74395,74407,74437,74450,74467,74471,74475,74486,74508,74518,74522,74526,74539,74549,74561,74573,74585,74597,74607,74617,74627,74638,74651,74655,74663,74671,74675,74683,74696,74716,74749,74782,74815,74841,74859,74877,74885,74911,74929,74947,74965,74983,75001,75009,75017,75035,75043,75072,75080,75088,75096,75109,75121,75133,75145,75157,75169,75182,75194,75202,75210,75218,75223,75228,75232,75236,75240,75244,75248,75252,75257,75262,75267,75272,75280,75288,75296,75301,75306,75311,75316,75321,75326,75331,75336,75341,75346,75351,75356,75361,75366,75370,75375,75380,75390,75399,75403,75408,75417,75433,75475,75515,75554,75619,75627,75631,75636,75654,75662,75667,75672,75702,75708,75713,75726,75738,75750,75762,75774,75786,75798,75802,75812,75816,75821,75826,75830,75839,75843,75848,75853,75872,75877,75897,75901,75906,75910,75915,75933,75951,75969,75988,76007,76026,76031,76037,76058,76064,76073,76079,76085,76091,76118,76131,76136,76146,76152,76158,76164,76170,76175,76181,76187,76193,76199,76232,76237,76242,76247,76252,76258,76264,76270,76281,76286,76292,76299,76313,76319,76343,76348,76353,76359,76365,76386,76392,76405,76411,76417,76423,76429,76434,76440,76446,76452,76470,76484,76490,76498,76504,76526,76531,76536,76541,76546,76551,76560,76569,76574],{"__ignoreMap":28},[33,73542,73543,73545,73547,73549],{"class":35,"line":36},[33,73544,52942],{"class":59},[33,73546,52946],{"class":52945},[33,73548,52949],{"class":3632},[33,73550,52952],{"class":59},[33,73552,73553,73555,73557,73559,73561,73563],{"class":35,"line":43},[33,73554,2726],{"class":59},[33,73556,52280],{"class":52945},[33,73558,52961],{"class":3632},[33,73560,64],{"class":59},[33,73562,52966],{"class":117},[33,73564,52952],{"class":59},[33,73566,73567],{"class":35,"line":130},[33,73568,127],{"emptyLinePlaceholder":126},[33,73570,73571,73573,73575],{"class":35,"line":146},[33,73572,2726],{"class":59},[33,73574,52979],{"class":52945},[33,73576,52952],{"class":59},[33,73578,73579,73581,73583,73585,73587,73589],{"class":35,"line":267},[33,73580,53789],{"class":59},[33,73582,52989],{"class":52945},[33,73584,52992],{"class":3632},[33,73586,64],{"class":59},[33,73588,52997],{"class":117},[33,73590,52952],{"class":59},[33,73592,73593,73595,73597,73599,73601,73603,73605,73607,73609],{"class":35,"line":275},[33,73594,53789],{"class":59},[33,73596,52989],{"class":52945},[33,73598,16578],{"class":3632},[33,73600,64],{"class":59},[33,73602,53036],{"class":117},[33,73604,53016],{"class":3632},[33,73606,64],{"class":59},[33,73608,53043],{"class":117},[33,73610,52952],{"class":59},[33,73612,73613,73615,73617,73619,73621],{"class":35,"line":392},[33,73614,53789],{"class":59},[33,73616,53052],{"class":52945},[33,73618,53055],{"class":59},[33,73620,53052],{"class":52945},[33,73622,52952],{"class":59},[33,73624,73625,73627,73629],{"class":35,"line":406},[33,73626,53789],{"class":59},[33,73628,1729],{"class":52945},[33,73630,52952],{"class":59},[33,73632,73633,73635],{"class":35,"line":418},[33,73634,8063],{"class":52945},[33,73636,17228],{"class":59},[33,73638,73639,73641,73643,73645],{"class":35,"line":425},[33,73640,56339],{"class":39},[33,73642,53082],{"class":59},[33,73644,2010],{"class":39},[33,73646,2976],{"class":59},[33,73648,73649,73651,73653,73655],{"class":35,"line":1147},[33,73650,56350],{"class":39},[33,73652,53082],{"class":59},[33,73654,2010],{"class":39},[33,73656,2976],{"class":59},[33,73658,73659],{"class":35,"line":1329},[33,73660,3855],{"class":59},[33,73662,73663],{"class":35,"line":1341},[33,73664,127],{"emptyLinePlaceholder":126},[33,73666,73667,73669],{"class":35,"line":1348},[33,73668,58922],{"class":52945},[33,73670,17228],{"class":59},[33,73672,73673,73675,73677,73679],{"class":35,"line":1529},[33,73674,58929],{"class":39},[33,73676,53082],{"class":59},[33,73678,53237],{"class":39},[33,73680,2976],{"class":59},[33,73682,73683,73685,73687,73689,73691],{"class":35,"line":1546},[33,73684,63719],{"class":39},[33,73686,53082],{"class":59},[33,73688,2517],{"class":39},[33,73690,53137],{"class":63},[33,73692,2976],{"class":59},[33,73694,73695],{"class":35,"line":1551},[33,73696,3855],{"class":59},[33,73698,73699],{"class":35,"line":1566},[33,73700,127],{"emptyLinePlaceholder":126},[33,73702,73703,73706],{"class":35,"line":1578},[33,73704,73705],{"class":3632},"    .info",[33,73707,17228],{"class":59},[33,73709,73710,73712,73714,73716,73718],{"class":35,"line":1583},[33,73711,56415],{"class":39},[33,73713,53082],{"class":59},[33,73715,53134],{"class":39},[33,73717,53137],{"class":63},[33,73719,2976],{"class":59},[33,73721,73722,73724,73726,73728,73730,73732],{"class":35,"line":3369},[33,73723,56350],{"class":39},[33,73725,53082],{"class":59},[33,73727,2264],{"class":39},[33,73729,53137],{"class":63},[33,73731,53201],{"class":39},[33,73733,2976],{"class":59},[33,73735,73736,73738,73740,73742],{"class":35,"line":3396},[33,73737,58929],{"class":39},[33,73739,53082],{"class":59},[33,73741,53237],{"class":39},[33,73743,2976],{"class":59},[33,73745,73746],{"class":35,"line":3401},[33,73747,3855],{"class":59},[33,73749,73750],{"class":35,"line":3418},[33,73751,127],{"emptyLinePlaceholder":126},[33,73753,73754,73757],{"class":35,"line":3423},[33,73755,73756],{"class":3632},"    .uname",[33,73758,33116],{"class":59},[33,73760,73761,73764],{"class":35,"line":3428},[33,73762,73763],{"class":3632},"    .age",[33,73765,33116],{"class":59},[33,73767,73768,73771],{"class":35,"line":3433},[33,73769,73770],{"class":3632},"    .salary",[33,73772,17228],{"class":59},[33,73774,73775,73777,73779,73781,73783],{"class":35,"line":3447},[33,73776,56415],{"class":39},[33,73778,53082],{"class":59},[33,73780,2129],{"class":39},[33,73782,53137],{"class":63},[33,73784,2976],{"class":59},[33,73786,73787,73789,73791,73793,73795],{"class":35,"line":3452},[33,73788,56429],{"class":39},[33,73790,53082],{"class":59},[33,73792,2517],{"class":39},[33,73794,53137],{"class":63},[33,73796,2976],{"class":59},[33,73798,73799,73801,73803,73805],{"class":35,"line":4243},[33,73800,63422],{"class":39},[33,73802,53082],{"class":59},[33,73804,56381],{"class":39},[33,73806,2976],{"class":59},[33,73808,73809,73811,73813,73815,73817],{"class":35,"line":4257},[33,73810,63392],{"class":39},[33,73812,53082],{"class":59},[33,73814,2392],{"class":39},[33,73816,53137],{"class":63},[33,73818,2976],{"class":59},[33,73820,73821],{"class":35,"line":4265},[33,73822,3855],{"class":59},[33,73824,73825],{"class":35,"line":4270},[33,73826,127],{"emptyLinePlaceholder":126},[33,73828,73829,73832],{"class":35,"line":4276},[33,73830,73831],{"class":3632},"    .gender",[33,73833,33116],{"class":59},[33,73835,73836,73839],{"class":35,"line":4282},[33,73837,73838],{"class":3632},"    .city",[33,73840,17228],{"class":59},[33,73842,73843,73845,73847,73849,73851],{"class":35,"line":4287},[33,73844,56415],{"class":39},[33,73846,53082],{"class":59},[33,73848,2129],{"class":39},[33,73850,53137],{"class":63},[33,73852,2976],{"class":59},[33,73854,73855,73857,73859,73861,73863],{"class":35,"line":9608},[33,73856,56429],{"class":39},[33,73858,53082],{"class":59},[33,73860,2642],{"class":39},[33,73862,53137],{"class":63},[33,73864,2976],{"class":59},[33,73866,73867,73869,73871,73873],{"class":35,"line":9632},[33,73868,63422],{"class":39},[33,73870,53082],{"class":59},[33,73872,56381],{"class":39},[33,73874,2976],{"class":59},[33,73876,73877,73879,73881,73883,73885],{"class":35,"line":9637},[33,73878,63392],{"class":39},[33,73880,53082],{"class":59},[33,73882,2392],{"class":39},[33,73884,53137],{"class":63},[33,73886,2976],{"class":59},[33,73888,73889,73891,73893,73895,73897,73899,73902,73904,73906,73908,73911,73913,73915],{"class":35,"line":9643},[33,73890,63619],{"class":39},[33,73892,53082],{"class":59},[33,73894,2036],{"class":39},[33,73896,53137],{"class":63},[33,73898,53166],{"class":39},[33,73900,73901],{"class":39}," rgb",[33,73903,109],{"class":59},[33,73905,3391],{"class":39},[33,73907,14093],{"class":59},[33,73909,73910],{"class":39},"197",[33,73912,14093],{"class":59},[33,73914,73910],{"class":39},[33,73916,4385],{"class":59},[33,73918,73919],{"class":35,"line":9670},[33,73920,3855],{"class":59},[33,73922,73923],{"class":35,"line":9675},[33,73924,127],{"emptyLinePlaceholder":126},[33,73926,73927,73930],{"class":35,"line":9681},[33,73928,73929],{"class":52945},"    button",[33,73931,17228],{"class":59},[33,73933,73934,73936,73938,73940,73942],{"class":35,"line":9693},[33,73935,56429],{"class":39},[33,73937,53082],{"class":59},[33,73939,2642],{"class":39},[33,73941,53137],{"class":63},[33,73943,2976],{"class":59},[33,73945,73946,73948,73950,73952,73954],{"class":35,"line":9705},[33,73947,56415],{"class":39},[33,73949,53082],{"class":59},[33,73951,2301],{"class":39},[33,73953,53137],{"class":63},[33,73955,2976],{"class":59},[33,73957,73958,73960,73962,73965,73967,73969,73971,73974,73976,73978],{"class":35,"line":9717},[33,73959,56528],{"class":39},[33,73961,53082],{"class":59},[33,73963,73964],{"class":39},"rgb",[33,73966,109],{"class":59},[33,73968,2784],{"class":39},[33,73970,14093],{"class":59},[33,73972,73973],{"class":39},"187",[33,73975,14093],{"class":59},[33,73977,2117],{"class":39},[33,73979,4385],{"class":59},[33,73981,73982,73984,73986,73988],{"class":35,"line":11375},[33,73983,59059],{"class":39},[33,73985,53082],{"class":59},[33,73987,62484],{"class":39},[33,73989,2976],{"class":59},[33,73991,73992,73994,73996,73998],{"class":35,"line":11400},[33,73993,63619],{"class":39},[33,73995,53082],{"class":59},[33,73997,2010],{"class":39},[33,73999,2976],{"class":59},[33,74001,74002],{"class":35,"line":11423},[33,74003,3855],{"class":59},[33,74005,74006],{"class":35,"line":11447},[33,74007,127],{"emptyLinePlaceholder":126},[33,74009,74010,74012,74014],{"class":35,"line":11452},[33,74011,73929],{"class":52945},[33,74013,53333],{"class":52945},[33,74015,17228],{"class":59},[33,74017,74018,74020,74022,74025],{"class":35,"line":11457},[33,74019,56653],{"class":39},[33,74021,53082],{"class":59},[33,74023,74024],{"class":39},"inline-block",[33,74026,2976],{"class":59},[33,74028,74029,74031,74033,74035,74037],{"class":35,"line":11462},[33,74030,56415],{"class":39},[33,74032,53082],{"class":59},[33,74034,2264],{"class":39},[33,74036,53137],{"class":63},[33,74038,2976],{"class":59},[33,74040,74041,74043,74045,74047,74049],{"class":35,"line":11471},[33,74042,56429],{"class":39},[33,74044,53082],{"class":59},[33,74046,2264],{"class":39},[33,74048,53137],{"class":63},[33,74050,2976],{"class":59},[33,74052,74053,74055,74057,74059,74061],{"class":35,"line":11476},[33,74054,59002],{"class":39},[33,74056,53082],{"class":59},[33,74058,2289],{"class":39},[33,74060,53137],{"class":63},[33,74062,2976],{"class":59},[33,74064,74065,74067,74069,74071,74073,74075,74078],{"class":35,"line":11482},[33,74066,63619],{"class":39},[33,74068,53082],{"class":59},[33,74070,2036],{"class":39},[33,74072,53137],{"class":63},[33,74074,53166],{"class":39},[33,74076,74077],{"class":39}," #fff",[33,74079,2976],{"class":59},[33,74081,74082,74084,74086,74088,74090],{"class":35,"line":11503},[33,74083,56778],{"class":39},[33,74085,53082],{"class":59},[33,74087,2137],{"class":39},[33,74089,53137],{"class":63},[33,74091,2976],{"class":59},[33,74093,74094,74096,74098,74100,74102],{"class":35,"line":11509},[33,74095,63392],{"class":39},[33,74097,53082],{"class":59},[33,74099,2036],{"class":39},[33,74101,53137],{"class":63},[33,74103,2976],{"class":59},[33,74105,74106],{"class":35,"line":11523},[33,74107,3855],{"class":59},[33,74109,74110],{"class":35,"line":11529},[33,74111,127],{"emptyLinePlaceholder":126},[33,74113,74114,74117],{"class":35,"line":11556},[33,74115,74116],{"class":3632},"    .total",[33,74118,17228],{"class":59},[33,74120,74121,74123,74125,74127,74129],{"class":35,"line":11565},[33,74122,56415],{"class":39},[33,74124,53082],{"class":59},[33,74126,63271],{"class":39},[33,74128,53137],{"class":63},[33,74130,2976],{"class":59},[33,74132,74133,74135,74137,74139,74141],{"class":35,"line":11571},[33,74134,56429],{"class":39},[33,74136,53082],{"class":59},[33,74138,2219],{"class":39},[33,74140,53137],{"class":63},[33,74142,2976],{"class":59},[33,74144,74145,74147,74149,74151,74153],{"class":35,"line":11579},[33,74146,59002],{"class":39},[33,74148,53082],{"class":59},[33,74150,2219],{"class":39},[33,74152,53137],{"class":63},[33,74154,2976],{"class":59},[33,74156,74157,74159,74161,74164],{"class":35,"line":11584},[33,74158,58929],{"class":39},[33,74160,53082],{"class":59},[33,74162,74163],{"class":39},"right",[33,74165,2976],{"class":59},[33,74167,74168,74170,74172,74174,74176,74178,74180,74182],{"class":35,"line":18259},[33,74169,56350],{"class":39},[33,74171,53082],{"class":59},[33,74173,2219],{"class":39},[33,74175,53137],{"class":63},[33,74177,53201],{"class":39},[33,74179,3706],{"class":39},[33,74181,53137],{"class":63},[33,74183,2976],{"class":59},[33,74185,74186,74189,74191,74193,74195],{"class":35,"line":18265},[33,74187,74188],{"class":39},"      padding-right",[33,74190,53082],{"class":59},[33,74192,2264],{"class":39},[33,74194,53137],{"class":63},[33,74196,2976],{"class":59},[33,74198,74199,74201,74203,74205,74207],{"class":35,"line":18288},[33,74200,56566],{"class":39},[33,74202,53082],{"class":59},[33,74204,2340],{"class":39},[33,74206,53137],{"class":63},[33,74208,2976],{"class":59},[33,74210,74211,74213,74215,74217,74219,74222,74224,74227,74229,74231],{"class":35,"line":18294},[33,74212,56528],{"class":39},[33,74214,53082],{"class":59},[33,74216,73964],{"class":39},[33,74218,109],{"class":59},[33,74220,74221],{"class":39},"237",[33,74223,14093],{"class":59},[33,74225,74226],{"class":39},"235",[33,74228,14093],{"class":59},[33,74230,74226],{"class":39},[33,74232,4385],{"class":59},[33,74234,74235,74238,74240,74242],{"class":35,"line":18317},[33,74236,74237],{"class":39},"      box-sizing",[33,74239,53082],{"class":59},[33,74241,62148],{"class":39},[33,74243,2976],{"class":59},[33,74245,74246],{"class":35,"line":18331},[33,74247,3855],{"class":59},[33,74249,74250],{"class":35,"line":18351},[33,74251,127],{"emptyLinePlaceholder":126},[33,74253,74254,74256,74258],{"class":35,"line":18357},[33,74255,74116],{"class":3632},[33,74257,53333],{"class":52945},[33,74259,17228],{"class":59},[33,74261,74262,74264,74266,74268],{"class":35,"line":18368},[33,74263,59059],{"class":39},[33,74265,53082],{"class":59},[33,74267,59064],{"class":39},[33,74269,2976],{"class":59},[33,74271,74272],{"class":35,"line":18391},[33,74273,3855],{"class":59},[33,74275,74276],{"class":35,"line":18413},[33,74277,127],{"emptyLinePlaceholder":126},[33,74279,74280,74282],{"class":35,"line":18418},[33,74281,66665],{"class":52945},[33,74283,17228],{"class":59},[33,74285,74286,74288,74290,74292,74294],{"class":35,"line":18424},[33,74287,56415],{"class":39},[33,74289,53082],{"class":59},[33,74291,63271],{"class":39},[33,74293,53137],{"class":63},[33,74295,2976],{"class":59},[33,74297,74298,74300,74302,74305],{"class":35,"line":18438},[33,74299,56350],{"class":39},[33,74301,53082],{"class":59},[33,74303,74304],{"class":39},"auto",[33,74306,2976],{"class":59},[33,74308,74309,74311,74313,74315],{"class":35,"line":18451},[33,74310,66672],{"class":39},[33,74312,53082],{"class":59},[33,74314,66677],{"class":39},[33,74316,2976],{"class":59},[33,74318,74319],{"class":35,"line":18456},[33,74320,3855],{"class":59},[33,74322,74323],{"class":35,"line":18470},[33,74324,127],{"emptyLinePlaceholder":126},[33,74326,74327,74329],{"class":35,"line":18475},[33,74328,66757],{"class":52945},[33,74330,17228],{"class":59},[33,74332,74333,74335,74337,74339,74341,74343,74345,74347,74349,74351],{"class":35,"line":18481},[33,74334,56528],{"class":39},[33,74336,53082],{"class":59},[33,74338,73964],{"class":39},[33,74340,109],{"class":59},[33,74342,74221],{"class":39},[33,74344,14093],{"class":59},[33,74346,74226],{"class":39},[33,74348,14093],{"class":59},[33,74350,74226],{"class":39},[33,74352,4385],{"class":59},[33,74354,74355],{"class":35,"line":18486},[33,74356,3855],{"class":59},[33,74358,74359],{"class":35,"line":18500},[33,74360,127],{"emptyLinePlaceholder":126},[33,74362,74363,74365],{"class":35,"line":18505},[33,74364,66757],{"class":52945},[33,74366,33116],{"class":59},[33,74368,74369,74371],{"class":35,"line":18510},[33,74370,66823],{"class":52945},[33,74372,17228],{"class":59},[33,74374,74375,74377,74379,74381,74383],{"class":35,"line":18524},[33,74376,56429],{"class":39},[33,74378,53082],{"class":59},[33,74380,2091],{"class":39},[33,74382,53137],{"class":63},[33,74384,2976],{"class":59},[33,74386,74387,74389,74391,74393],{"class":35,"line":18536},[33,74388,58929],{"class":39},[33,74390,53082],{"class":59},[33,74392,25391],{"class":39},[33,74394,2976],{"class":59},[33,74396,74397,74399,74401,74403,74405],{"class":35,"line":18541},[33,74398,56566],{"class":39},[33,74400,53082],{"class":59},[33,74402,2366],{"class":39},[33,74404,53137],{"class":63},[33,74406,2976],{"class":59},[33,74408,74409,74411,74413,74415,74417,74419,74421,74423,74426,74428,74431,74433,74435],{"class":35,"line":18554},[33,74410,63619],{"class":39},[33,74412,53082],{"class":59},[33,74414,2036],{"class":39},[33,74416,53137],{"class":63},[33,74418,53166],{"class":39},[33,74420,73901],{"class":39},[33,74422,109],{"class":59},[33,74424,74425],{"class":39},"228",[33,74427,14093],{"class":59},[33,74429,74430],{"class":39},"225",[33,74432,14093],{"class":59},[33,74434,74430],{"class":39},[33,74436,4385],{"class":59},[33,74438,74439,74442,74444,74446,74448],{"class":35,"line":18559},[33,74440,74441],{"class":39},"      padding-left",[33,74443,53082],{"class":59},[33,74445,2137],{"class":39},[33,74447,53137],{"class":63},[33,74449,2976],{"class":59},[33,74451,74452,74454,74456,74458,74461,74463,74465],{"class":35,"line":18564},[33,74453,63502],{"class":39},[33,74455,53082],{"class":59},[33,74457,29777],{"class":39},[33,74459,74460],{"class":39}," linear",[33,74462,63509],{"class":39},[33,74464,2512],{"class":63},[33,74466,2976],{"class":59},[33,74468,74469],{"class":35,"line":18569},[33,74470,3855],{"class":59},[33,74472,74473],{"class":35,"line":18582},[33,74474,127],{"emptyLinePlaceholder":126},[33,74476,74477,74480,74482,74484],{"class":35,"line":18587},[33,74478,74479],{"class":52945},"    tbody",[33,74481,71786],{"class":52945},[33,74483,62582],{"class":3632},[33,74485,17228],{"class":59},[33,74487,74488,74490,74492,74494,74496,74498,74500,74502,74504,74506],{"class":35,"line":34280},[33,74489,56528],{"class":39},[33,74491,53082],{"class":59},[33,74493,73964],{"class":39},[33,74495,109],{"class":59},[33,74497,74221],{"class":39},[33,74499,14093],{"class":59},[33,74501,74226],{"class":39},[33,74503,14093],{"class":59},[33,74505,74226],{"class":39},[33,74507,4385],{"class":59},[33,74509,74510,74512,74514,74516],{"class":35,"line":34286},[33,74511,63667],{"class":39},[33,74513,53082],{"class":59},[33,74515,63672],{"class":39},[33,74517,2976],{"class":59},[33,74519,74520],{"class":35,"line":34292},[33,74521,3855],{"class":59},[33,74523,74524],{"class":35,"line":34298},[33,74525,127],{"emptyLinePlaceholder":126},[33,74527,74528,74530,74532,74535,74537],{"class":35,"line":34304},[33,74529,74479],{"class":52945},[33,74531,71786],{"class":52945},[33,74533,74534],{"class":52945}," td",[33,74536,3081],{"class":52945},[33,74538,17228],{"class":59},[33,74540,74541,74543,74545,74547],{"class":35,"line":34315},[33,74542,56653],{"class":39},[33,74544,53082],{"class":59},[33,74546,62511],{"class":39},[33,74548,2976],{"class":59},[33,74550,74551,74553,74555,74557,74559],{"class":35,"line":34321},[33,74552,56415],{"class":39},[33,74554,53082],{"class":59},[33,74556,2723],{"class":39},[33,74558,53137],{"class":63},[33,74560,2976],{"class":59},[33,74562,74563,74565,74567,74569,74571],{"class":35,"line":34341},[33,74564,56429],{"class":39},[33,74566,53082],{"class":59},[33,74568,2642],{"class":39},[33,74570,53137],{"class":63},[33,74572,2976],{"class":59},[33,74574,74575,74577,74579,74581,74583],{"class":35,"line":34347},[33,74576,59002],{"class":39},[33,74578,53082],{"class":59},[33,74580,2642],{"class":39},[33,74582,53137],{"class":63},[33,74584,2976],{"class":59},[33,74586,74587,74589,74591,74593,74595],{"class":35,"line":34358},[33,74588,63719],{"class":39},[33,74590,53082],{"class":59},[33,74592,1897],{"class":39},[33,74594,53137],{"class":63},[33,74596,2976],{"class":59},[33,74598,74599,74601,74603,74605],{"class":35,"line":34364},[33,74600,59059],{"class":39},[33,74602,53082],{"class":59},[33,74604,62484],{"class":39},[33,74606,2976],{"class":59},[33,74608,74609,74611,74613,74615],{"class":35,"line":34370},[33,74610,58929],{"class":39},[33,74612,53082],{"class":59},[33,74614,53237],{"class":39},[33,74616,2976],{"class":59},[33,74618,74619,74621,74623,74625],{"class":35,"line":34376},[33,74620,65612],{"class":39},[33,74622,53082],{"class":59},[33,74624,56381],{"class":39},[33,74626,2976],{"class":59},[33,74628,74629,74631,74633,74636],{"class":35,"line":34382},[33,74630,56528],{"class":39},[33,74632,53082],{"class":59},[33,74634,74635],{"class":39},"orange",[33,74637,2976],{"class":59},[33,74639,74640,74642,74644,74647,74649],{"class":35,"line":34388},[33,74641,56778],{"class":39},[33,74643,53082],{"class":59},[33,74645,74646],{"class":39},"12.5",[33,74648,53137],{"class":63},[33,74650,2976],{"class":59},[33,74652,74653],{"class":35,"line":34394},[33,74654,3855],{"class":59},[33,74656,74657,74659,74661],{"class":35,"line":34400},[33,74658,54062],{"class":59},[33,74660,1729],{"class":52945},[33,74662,52952],{"class":59},[33,74664,74665,74667,74669],{"class":35,"line":34420},[33,74666,53430],{"class":59},[33,74668,52979],{"class":52945},[33,74670,52952],{"class":59},[33,74672,74673],{"class":35,"line":34426},[33,74674,127],{"emptyLinePlaceholder":126},[33,74676,74677,74679,74681],{"class":35,"line":34442},[33,74678,2726],{"class":59},[33,74680,53445],{"class":52945},[33,74682,52952],{"class":59},[33,74684,74685,74687,74689,74692,74694],{"class":35,"line":34448},[33,74686,53789],{"class":59},[33,74688,14],{"class":52945},[33,74690,74691],{"class":59},">学生就业统计表\u003C\u002F",[33,74693,14],{"class":52945},[33,74695,52952],{"class":59},[33,74697,74698,74700,74702,74704,74706,74708,74710,74712,74714],{"class":35,"line":34462},[33,74699,53789],{"class":59},[33,74701,68267],{"class":52945},[33,74703,55131],{"class":3632},[33,74705,64],{"class":59},[33,74707,64306],{"class":117},[33,74709,70712],{"class":3632},[33,74711,64],{"class":59},[33,74713,33426],{"class":117},[33,74715,52952],{"class":59},[33,74717,74718,74720,74722,74724,74726,74728,74730,74732,74734,74736,74738,74741,74743,74745,74747],{"class":35,"line":34468},[33,74719,52986],{"class":59},[33,74721,112],{"class":52945},[33,74723,55468],{"class":3632},[33,74725,64],{"class":59},[33,74727,64341],{"class":117},[33,74729,16578],{"class":3632},[33,74731,64],{"class":59},[33,74733,70738],{"class":117},[33,74735,62662],{"class":3632},[33,74737,64],{"class":59},[33,74739,74740],{"class":117},"\"姓名\"",[33,74742,55131],{"class":3632},[33,74744,64],{"class":59},[33,74746,70738],{"class":117},[33,74748,52952],{"class":59},[33,74750,74751,74753,74755,74757,74759,74761,74763,74765,74767,74769,74771,74774,74776,74778,74780],{"class":35,"line":34483},[33,74752,52986],{"class":59},[33,74754,112],{"class":52945},[33,74756,55468],{"class":3632},[33,74758,64],{"class":59},[33,74760,64341],{"class":117},[33,74762,16578],{"class":3632},[33,74764,64],{"class":59},[33,74766,70766],{"class":117},[33,74768,62662],{"class":3632},[33,74770,64],{"class":59},[33,74772,74773],{"class":117},"\"年龄\"",[33,74775,55131],{"class":3632},[33,74777,64],{"class":59},[33,74779,70766],{"class":117},[33,74781,52952],{"class":59},[33,74783,74784,74786,74788,74790,74792,74794,74796,74798,74800,74802,74804,74807,74809,74811,74813],{"class":35,"line":34489},[33,74785,52986],{"class":59},[33,74787,112],{"class":52945},[33,74789,55468],{"class":3632},[33,74791,64],{"class":59},[33,74793,64341],{"class":117},[33,74795,16578],{"class":3632},[33,74797,64],{"class":59},[33,74799,70868],{"class":117},[33,74801,62662],{"class":3632},[33,74803,64],{"class":59},[33,74805,74806],{"class":117},"\"薪资\"",[33,74808,55131],{"class":3632},[33,74810,64],{"class":59},[33,74812,70868],{"class":117},[33,74814,52952],{"class":59},[33,74816,74817,74819,74821,74823,74825,74827,74829,74831,74833,74835,74837,74839],{"class":35,"line":34498},[33,74818,52986],{"class":59},[33,74820,70786],{"class":52945},[33,74822,16578],{"class":3632},[33,74824,64],{"class":59},[33,74826,70793],{"class":117},[33,74828,16617],{"class":3632},[33,74830,64],{"class":59},[33,74832,9312],{"class":117},[33,74834,55131],{"class":3632},[33,74836,64],{"class":59},[33,74838,70793],{"class":117},[33,74840,52952],{"class":59},[33,74842,74843,74845,74847,74849,74851,74853,74855,74857],{"class":35,"line":34504},[33,74844,56878],{"class":59},[33,74846,70808],{"class":52945},[33,74848,68293],{"class":3632},[33,74850,64],{"class":59},[33,74852,11620],{"class":117},[33,74854,70817],{"class":59},[33,74856,70808],{"class":52945},[33,74858,52952],{"class":59},[33,74860,74861,74863,74865,74867,74869,74871,74873,74875],{"class":35,"line":34513},[33,74862,56878],{"class":59},[33,74864,70808],{"class":52945},[33,74866,68293],{"class":3632},[33,74868,64],{"class":59},[33,74870,11689],{"class":117},[33,74872,70836],{"class":59},[33,74874,70808],{"class":52945},[33,74876,52952],{"class":59},[33,74878,74879,74881,74883],{"class":35,"line":34519},[33,74880,53421],{"class":59},[33,74882,70786],{"class":52945},[33,74884,52952],{"class":59},[33,74886,74887,74889,74891,74893,74895,74897,74899,74901,74903,74905,74907,74909],{"class":35,"line":34525},[33,74888,52986],{"class":59},[33,74890,70786],{"class":52945},[33,74892,16578],{"class":3632},[33,74894,64],{"class":59},[33,74896,70890],{"class":117},[33,74898,16617],{"class":3632},[33,74900,64],{"class":59},[33,74902,9312],{"class":117},[33,74904,55131],{"class":3632},[33,74906,64],{"class":59},[33,74908,70890],{"class":117},[33,74910,52952],{"class":59},[33,74912,74913,74915,74917,74919,74921,74923,74925,74927],{"class":35,"line":34534},[33,74914,56878],{"class":59},[33,74916,70808],{"class":52945},[33,74918,68293],{"class":3632},[33,74920,64],{"class":59},[33,74922,70911],{"class":117},[33,74924,70914],{"class":59},[33,74926,70808],{"class":52945},[33,74928,52952],{"class":59},[33,74930,74931,74933,74935,74937,74939,74941,74943,74945],{"class":35,"line":34540},[33,74932,56878],{"class":59},[33,74934,70808],{"class":52945},[33,74936,68293],{"class":3632},[33,74938,64],{"class":59},[33,74940,70931],{"class":117},[33,74942,70934],{"class":59},[33,74944,70808],{"class":52945},[33,74946,52952],{"class":59},[33,74948,74949,74951,74953,74955,74957,74959,74961,74963],{"class":35,"line":34551},[33,74950,56878],{"class":59},[33,74952,70808],{"class":52945},[33,74954,68293],{"class":3632},[33,74956,64],{"class":59},[33,74958,70951],{"class":117},[33,74960,70954],{"class":59},[33,74962,70808],{"class":52945},[33,74964,52952],{"class":59},[33,74966,74967,74969,74971,74973,74975,74977,74979,74981],{"class":35,"line":34557},[33,74968,56878],{"class":59},[33,74970,70808],{"class":52945},[33,74972,68293],{"class":3632},[33,74974,64],{"class":59},[33,74976,70971],{"class":117},[33,74978,70974],{"class":59},[33,74980,70808],{"class":52945},[33,74982,52952],{"class":59},[33,74984,74985,74987,74989,74991,74993,74995,74997,74999],{"class":35,"line":34576},[33,74986,56878],{"class":59},[33,74988,70808],{"class":52945},[33,74990,68293],{"class":3632},[33,74992,64],{"class":59},[33,74994,70991],{"class":117},[33,74996,70994],{"class":59},[33,74998,70808],{"class":52945},[33,75000,52952],{"class":59},[33,75002,75003,75005,75007],{"class":35,"line":34582},[33,75004,53421],{"class":59},[33,75006,70786],{"class":52945},[33,75008,52952],{"class":59},[33,75010,75011,75013,75015],{"class":35,"line":34593},[33,75012,52986],{"class":59},[33,75014,55531],{"class":52945},[33,75016,52952],{"class":59},[33,75018,75019,75021,75023,75026,75028,75031,75033],{"class":35,"line":34599},[33,75020,56878],{"class":59},[33,75022,33],{"class":52945},[33,75024,75025],{"class":59},">+\u003C\u002F",[33,75027,33],{"class":52945},[33,75029,75030],{"class":59},">添加\u003C\u002F",[33,75032,55531],{"class":52945},[33,75034,52952],{"class":59},[33,75036,75037,75039,75041],{"class":35,"line":34619},[33,75038,54062],{"class":59},[33,75040,68267],{"class":52945},[33,75042,52952],{"class":59},[33,75044,75045,75047,75049,75051,75053,75055,75058,75060,75063,75065,75068,75070],{"class":35,"line":34635},[33,75046,53789],{"class":59},[33,75048,53256],{"class":52945},[33,75050,55131],{"class":3632},[33,75052,64],{"class":59},[33,75054,64222],{"class":117},[33,75056,75057],{"class":59},">共有数据 \u003C",[33,75059,33],{"class":52945},[33,75061,75062],{"class":59},">0\u003C\u002F",[33,75064,33],{"class":52945},[33,75066,75067],{"class":59},"> 条\u003C\u002F",[33,75069,53256],{"class":52945},[33,75071,52952],{"class":59},[33,75073,75074,75076,75078],{"class":35,"line":34641},[33,75075,53789],{"class":59},[33,75077,1956],{"class":52945},[33,75079,52952],{"class":59},[33,75081,75082,75084,75086],{"class":35,"line":34655},[33,75083,52986],{"class":59},[33,75085,1959],{"class":52945},[33,75087,52952],{"class":59},[33,75089,75090,75092,75094],{"class":35,"line":34661},[33,75091,56878],{"class":59},[33,75093,1962],{"class":52945},[33,75095,52952],{"class":59},[33,75097,75098,75100,75102,75105,75107],{"class":35,"line":34667},[33,75099,56946],{"class":59},[33,75101,1965],{"class":52945},[33,75103,75104],{"class":59},">ID\u003C\u002F",[33,75106,1965],{"class":52945},[33,75108,52952],{"class":59},[33,75110,75111,75113,75115,75117,75119],{"class":35,"line":34678},[33,75112,56946],{"class":59},[33,75114,1965],{"class":52945},[33,75116,71097],{"class":59},[33,75118,1965],{"class":52945},[33,75120,52952],{"class":59},[33,75122,75123,75125,75127,75129,75131],{"class":35,"line":34684},[33,75124,56946],{"class":59},[33,75126,1965],{"class":52945},[33,75128,71110],{"class":59},[33,75130,1965],{"class":52945},[33,75132,52952],{"class":59},[33,75134,75135,75137,75139,75141,75143],{"class":35,"line":34690},[33,75136,56946],{"class":59},[33,75138,1965],{"class":52945},[33,75140,71123],{"class":59},[33,75142,1965],{"class":52945},[33,75144,52952],{"class":59},[33,75146,75147,75149,75151,75153,75155],{"class":35,"line":34700},[33,75148,56946],{"class":59},[33,75150,1965],{"class":52945},[33,75152,71136],{"class":59},[33,75154,1965],{"class":52945},[33,75156,52952],{"class":59},[33,75158,75159,75161,75163,75165,75167],{"class":35,"line":34706},[33,75160,56946],{"class":59},[33,75162,1965],{"class":52945},[33,75164,71149],{"class":59},[33,75166,1965],{"class":52945},[33,75168,52952],{"class":59},[33,75170,75171,75173,75175,75178,75180],{"class":35,"line":34717},[33,75172,56946],{"class":59},[33,75174,1965],{"class":52945},[33,75176,75177],{"class":59},">录入时间\u003C\u002F",[33,75179,1965],{"class":52945},[33,75181,52952],{"class":59},[33,75183,75184,75186,75188,75190,75192],{"class":35,"line":34723},[33,75185,56946],{"class":59},[33,75187,1965],{"class":52945},[33,75189,71162],{"class":59},[33,75191,1965],{"class":52945},[33,75193,52952],{"class":59},[33,75195,75196,75198,75200],{"class":35,"line":34733},[33,75197,57051],{"class":59},[33,75199,1962],{"class":52945},[33,75201,52952],{"class":59},[33,75203,75204,75206,75208],{"class":35,"line":34738},[33,75205,53421],{"class":59},[33,75207,1959],{"class":52945},[33,75209,52952],{"class":59},[33,75211,75212,75214,75216],{"class":35,"line":34744},[33,75213,52986],{"class":59},[33,75215,2003],{"class":52945},[33,75217,52952],{"class":59},[33,75219,75220],{"class":35,"line":34793},[33,75221,75222],{"class":87},"      \u003C!-- \u003Ctr>\n",[33,75224,75225],{"class":35,"line":34840},[33,75226,75227],{"class":87},"        \u003Ctd>1\u003C\u002Ftd>\n",[33,75229,75230],{"class":35,"line":34845},[33,75231,75227],{"class":87},[33,75233,75234],{"class":35,"line":34851},[33,75235,75227],{"class":87},[33,75237,75238],{"class":35,"line":34870},[33,75239,75227],{"class":87},[33,75241,75242],{"class":35,"line":34876},[33,75243,75227],{"class":87},[33,75245,75246],{"class":35,"line":34896},[33,75247,75227],{"class":87},[33,75249,75250],{"class":35,"line":34902},[33,75251,75227],{"class":87},[33,75253,75254],{"class":35,"line":34908},[33,75255,75256],{"class":87},"        \u003Ctd>\n",[33,75258,75259],{"class":35,"line":34918},[33,75260,75261],{"class":87},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[33,75263,75264],{"class":35,"line":34923},[33,75265,75266],{"class":87},"        \u003C\u002Ftd>\n",[33,75268,75269],{"class":35,"line":34929},[33,75270,75271],{"class":87},"      \u003C\u002Ftr> -->\n",[33,75273,75274,75276,75278],{"class":35,"line":34945},[33,75275,53421],{"class":59},[33,75277,2003],{"class":52945},[33,75279,52952],{"class":59},[33,75281,75282,75284,75286],{"class":35,"line":34990},[33,75283,54062],{"class":59},[33,75285,1956],{"class":52945},[33,75287,52952],{"class":59},[33,75289,75290,75292,75294],{"class":35,"line":34996},[33,75291,53789],{"class":59},[33,75293,53458],{"class":52945},[33,75295,52952],{"class":59},[33,75297,75298],{"class":35,"line":35002},[33,75299,75300],{"class":87},"    \u002F\u002F const initData = [{\n",[33,75302,75303],{"class":35,"line":35008},[33,75304,75305],{"class":87},"    \u002F\u002F   unameId: 1,\n",[33,75307,75308],{"class":35,"line":35019},[33,75309,75310],{"class":87},"    \u002F\u002F   uname: '华晨宇',\n",[33,75312,75313],{"class":35,"line":35025},[33,75314,75315],{"class":87},"    \u002F\u002F   age: 22,\n",[33,75317,75318],{"class":35,"line":35031},[33,75319,75320],{"class":87},"    \u002F\u002F   salary: 12000,\n",[33,75322,75323],{"class":35,"line":35037},[33,75324,75325],{"class":87},"    \u002F\u002F   gender: '男',\n",[33,75327,75328],{"class":35,"line":35055},[33,75329,75330],{"class":87},"    \u002F\u002F   city: '北京',\n",[33,75332,75333],{"class":35,"line":35069},[33,75334,75335],{"class":87},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[33,75337,75338],{"class":35,"line":35078},[33,75339,75340],{"class":87},"    \u002F\u002F }]\n",[33,75342,75343],{"class":35,"line":35087},[33,75344,75345],{"class":87},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[33,75347,75348],{"class":35,"line":35096},[33,75349,75350],{"class":87},"    \u002F\u002F 1.渲染业务\n",[33,75352,75353],{"class":35,"line":35105},[33,75354,75355],{"class":87},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[33,75357,75358],{"class":35,"line":35111},[33,75359,75360],{"class":87},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[33,75362,75363],{"class":35,"line":35117},[33,75364,75365],{"class":87},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[33,75367,75368],{"class":35,"line":35125},[33,75369,127],{"emptyLinePlaceholder":126},[33,75371,75372],{"class":35,"line":35130},[33,75373,75374],{"class":87},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[33,75376,75377],{"class":35,"line":35136},[33,75378,75379],{"class":87},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[33,75381,75382,75384,75386,75388],{"class":35,"line":35147},[33,75383,12879],{"class":63},[33,75385,59338],{"class":39},[33,75387,15222],{"class":63},[33,75389,53483],{"class":59},[33,75391,75392,75395,75397],{"class":35,"line":35153},[33,75393,75394],{"class":59},"    console.",[33,75396,59890],{"class":3632},[33,75398,54057],{"class":59},[33,75400,75401],{"class":35,"line":35173},[33,75402,127],{"emptyLinePlaceholder":126},[33,75404,75405],{"class":35,"line":35179},[33,75406,75407],{"class":87},"    \u002F\u002F 时间函数\n",[33,75409,75410,75412,75415],{"class":35,"line":35185},[33,75411,71726],{"class":63},[33,75413,75414],{"class":3632}," getTime",[33,75416,12511],{"class":59},[33,75418,75419,75421,75424,75426,75428,75431],{"class":35,"line":35191},[33,75420,59871],{"class":63},[33,75422,75423],{"class":39}," date",[33,75425,15222],{"class":63},[33,75427,13236],{"class":63},[33,75429,75430],{"class":3632}," Date",[33,75432,943],{"class":59},[33,75434,75435,75437,75439,75441,75444,75447,75449,75451,75453,75456,75459,75461,75463,75465,75467,75469,75471,75473],{"class":35,"line":35208},[33,75436,59871],{"class":63},[33,75438,17746],{"class":39},[33,75440,15222],{"class":63},[33,75442,75443],{"class":59}," date.",[33,75445,75446],{"class":3632},"getHours",[33,75448,14708],{"class":59},[33,75450,2726],{"class":63},[33,75452,3706],{"class":39},[33,75454,75455],{"class":63}," ?",[33,75457,75458],{"class":117}," '0'",[33,75460,47212],{"class":63},[33,75462,75443],{"class":59},[33,75464,75446],{"class":3632},[33,75466,14708],{"class":59},[33,75468,2676],{"class":63},[33,75470,75443],{"class":59},[33,75472,75446],{"class":3632},[33,75474,943],{"class":59},[33,75476,75477,75479,75482,75484,75486,75489,75491,75493,75495,75497,75499,75501,75503,75505,75507,75509,75511,75513],{"class":35,"line":35214},[33,75478,59871],{"class":63},[33,75480,75481],{"class":39}," m",[33,75483,15222],{"class":63},[33,75485,75443],{"class":59},[33,75487,75488],{"class":3632},"getMinutes",[33,75490,14708],{"class":59},[33,75492,2726],{"class":63},[33,75494,3706],{"class":39},[33,75496,75455],{"class":63},[33,75498,75458],{"class":117},[33,75500,47212],{"class":63},[33,75502,75443],{"class":59},[33,75504,75488],{"class":3632},[33,75506,14708],{"class":59},[33,75508,2676],{"class":63},[33,75510,75443],{"class":59},[33,75512,75488],{"class":3632},[33,75514,943],{"class":59},[33,75516,75517,75519,75521,75523,75525,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550,75552],{"class":35,"line":35220},[33,75518,59871],{"class":63},[33,75520,10088],{"class":39},[33,75522,15222],{"class":63},[33,75524,75443],{"class":59},[33,75526,75527],{"class":3632},"getSeconds",[33,75529,14708],{"class":59},[33,75531,2726],{"class":63},[33,75533,3706],{"class":39},[33,75535,75455],{"class":63},[33,75537,75458],{"class":117},[33,75539,47212],{"class":63},[33,75541,75443],{"class":59},[33,75543,75527],{"class":3632},[33,75545,14708],{"class":59},[33,75547,2676],{"class":63},[33,75549,75443],{"class":59},[33,75551,75527],{"class":3632},[33,75553,943],{"class":59},[33,75555,75556,75558,75561,75563,75565,75568,75570,75573,75575,75578,75580,75582,75585,75587,75589,75591,75593,75595,75597,75600,75602,75605,75607,75610,75612,75614,75616],{"class":35,"line":35226},[33,75557,59871],{"class":63},[33,75559,75560],{"class":39}," str",[33,75562,15222],{"class":63},[33,75564,64545],{"class":117},[33,75566,75567],{"class":59},"date",[33,75569,2375],{"class":117},[33,75571,75572],{"class":3632},"getFullYear",[33,75574,4093],{"class":117},[33,75576,75577],{"class":117},"}\u002F${",[33,75579,75567],{"class":59},[33,75581,2375],{"class":117},[33,75583,75584],{"class":3632},"getMonth",[33,75586,14708],{"class":117},[33,75588,2298],{"class":63},[33,75590,26774],{"class":39},[33,75592,75577],{"class":117},[33,75594,75567],{"class":59},[33,75596,2375],{"class":117},[33,75598,75599],{"class":3632},"getDate",[33,75601,4093],{"class":117},[33,75603,75604],{"class":117},"} ${",[33,75606,2233],{"class":59},[33,75608,75609],{"class":117},"}:${",[33,75611,2361],{"class":59},[33,75613,75609],{"class":117},[33,75615,2512],{"class":59},[33,75617,75618],{"class":117},"}`\n",[33,75620,75621,75624],{"class":35,"line":35232},[33,75622,75623],{"class":63},"      return",[33,75625,75626],{"class":59}," str\n",[33,75628,75629],{"class":35,"line":35238},[33,75630,3855],{"class":59},[33,75632,75633],{"class":35,"line":35265},[33,75634,75635],{"class":87},"    \u002F\u002F 渲染函数\n",[33,75637,75638,75640,75642,75644,75646,75648,75650,75652],{"class":35,"line":35289},[33,75639,12879],{"class":63},[33,75641,71389],{"class":39},[33,75643,15222],{"class":63},[33,75645,56040],{"class":59},[33,75647,56043],{"class":3632},[33,75649,109],{"class":59},[33,75651,71400],{"class":117},[33,75653,157],{"class":59},[33,75655,75656,75658,75660],{"class":35,"line":35295},[33,75657,71726],{"class":63},[33,75659,71729],{"class":3632},[33,75661,12511],{"class":59},[33,75663,75664],{"class":35,"line":35301},[33,75665,75666],{"class":87},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[33,75668,75669],{"class":35,"line":35307},[33,75670,75671],{"class":87},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[33,75673,75674,75676,75679,75681,75683,75686,75688,75690,75692,75695,75697,75700],{"class":35,"line":35318},[33,75675,59871],{"class":63},[33,75677,75678],{"class":39}," trArr",[33,75680,15222],{"class":63},[33,75682,53610],{"class":59},[33,75684,75685],{"class":3632},"map",[33,75687,109],{"class":59},[33,75689,56093],{"class":63},[33,75691,3332],{"class":59},[33,75693,75694],{"class":6877},"ele",[33,75696,14093],{"class":59},[33,75698,75699],{"class":6877},"index",[33,75701,14100],{"class":59},[33,75703,75704,75706],{"class":35,"line":35329},[33,75705,16410],{"class":63},[33,75707,71810],{"class":117},[33,75709,75710],{"class":35,"line":35335},[33,75711,75712],{"class":117},"      \u003Ctr>\n",[33,75714,75715,75717,75719,75721,75724],{"class":35,"line":35352},[33,75716,71815],{"class":117},[33,75718,75694],{"class":59},[33,75720,2375],{"class":117},[33,75722,75723],{"class":59},"unameId",[33,75725,71830],{"class":117},[33,75727,75728,75730,75732,75734,75736],{"class":35,"line":35375},[33,75729,71815],{"class":117},[33,75731,75694],{"class":59},[33,75733,2375],{"class":117},[33,75735,71846],{"class":59},[33,75737,71830],{"class":117},[33,75739,75740,75742,75744,75746,75748],{"class":35,"line":35398},[33,75741,71815],{"class":117},[33,75743,75694],{"class":59},[33,75745,2375],{"class":117},[33,75747,71863],{"class":59},[33,75749,71830],{"class":117},[33,75751,75752,75754,75756,75758,75760],{"class":35,"line":35404},[33,75753,71815],{"class":117},[33,75755,75694],{"class":59},[33,75757,2375],{"class":117},[33,75759,71880],{"class":59},[33,75761,71830],{"class":117},[33,75763,75764,75766,75768,75770,75772],{"class":35,"line":35409},[33,75765,71815],{"class":117},[33,75767,75694],{"class":59},[33,75769,2375],{"class":117},[33,75771,71897],{"class":59},[33,75773,71830],{"class":117},[33,75775,75776,75778,75780,75782,75784],{"class":35,"line":35418},[33,75777,71815],{"class":117},[33,75779,75694],{"class":59},[33,75781,2375],{"class":117},[33,75783,71914],{"class":59},[33,75785,71830],{"class":117},[33,75787,75788,75790,75792,75794,75796],{"class":35,"line":35428},[33,75789,71815],{"class":117},[33,75791,75694],{"class":59},[33,75793,2375],{"class":117},[33,75795,4054],{"class":59},[33,75797,71830],{"class":117},[33,75799,75800],{"class":35,"line":35434},[33,75801,75256],{"class":117},[33,75803,75804,75807,75809],{"class":35,"line":35439},[33,75805,75806],{"class":117},"          \u003Ca href=\"#\" data-id=\"${",[33,75808,75699],{"class":59},[33,75810,75811],{"class":117},"}\">删除\u003C\u002Fa>\n",[33,75813,75814],{"class":35,"line":35445},[33,75815,75266],{"class":117},[33,75817,75818],{"class":35,"line":35458},[33,75819,75820],{"class":117},"      \u003C\u002Ftr>\n",[33,75822,75823],{"class":35,"line":35464},[33,75824,75825],{"class":117},"  `\n",[33,75827,75828],{"class":35,"line":35475},[33,75829,66457],{"class":59},[33,75831,75832,75834,75836],{"class":35,"line":35486},[33,75833,59887],{"class":59},[33,75835,59890],{"class":3632},[33,75837,75838],{"class":59},"(trArr)\n",[33,75840,75841],{"class":35,"line":35505},[33,75842,127],{"emptyLinePlaceholder":126},[33,75844,75845],{"class":35,"line":51163},[33,75846,75847],{"class":87},"      \u002F\u002F (2) 把数组转换为字符串join\n",[33,75849,75850],{"class":35,"line":51168},[33,75851,75852],{"class":87},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[33,75854,75855,75857,75859,75862,75865,75867,75870],{"class":35,"line":51177},[33,75856,71741],{"class":59},[33,75858,64],{"class":63},[33,75860,75861],{"class":59}," trArr.",[33,75863,75864],{"class":3632},"join",[33,75866,109],{"class":59},[33,75868,75869],{"class":117},"''",[33,75871,157],{"class":59},[33,75873,75874],{"class":35,"line":51186},[33,75875,75876],{"class":87},"      \u002F\u002F 显示共有几条\n",[33,75878,75879,75881,75883,75885,75888,75891,75893,75895],{"class":35,"line":51191},[33,75880,57414],{"class":59},[33,75882,56043],{"class":3632},[33,75884,109],{"class":59},[33,75886,75887],{"class":117},"'.total span'",[33,75889,75890],{"class":59},").innerHTML ",[33,75892,64],{"class":63},[33,75894,53610],{"class":59},[33,75896,57474],{"class":39},[33,75898,75899],{"class":35,"line":51196},[33,75900,3855],{"class":59},[33,75902,75903],{"class":35,"line":51201},[33,75904,75905],{"class":87},"    \u002F\u002F render()\n",[33,75907,75908],{"class":35,"line":51214},[33,75909,127],{"emptyLinePlaceholder":126},[33,75911,75912],{"class":35,"line":51219},[33,75913,75914],{"class":87},"    \u002F\u002F 获取DOM对象\n",[33,75916,75917,75919,75921,75923,75925,75927,75929,75931],{"class":35,"line":51228},[33,75918,12879],{"class":63},[33,75920,71463],{"class":39},[33,75922,15222],{"class":63},[33,75924,56040],{"class":59},[33,75926,56043],{"class":3632},[33,75928,109],{"class":59},[33,75930,71474],{"class":117},[33,75932,157],{"class":59},[33,75934,75935,75937,75939,75941,75943,75945,75947,75949],{"class":35,"line":51237},[33,75936,12879],{"class":63},[33,75938,71290],{"class":39},[33,75940,15222],{"class":63},[33,75942,56040],{"class":59},[33,75944,56043],{"class":3632},[33,75946,109],{"class":59},[33,75948,71301],{"class":117},[33,75950,157],{"class":59},[33,75952,75953,75955,75957,75959,75961,75963,75965,75967],{"class":35,"line":51254},[33,75954,12879],{"class":63},[33,75956,17345],{"class":39},[33,75958,15222],{"class":63},[33,75960,56040],{"class":59},[33,75962,56043],{"class":3632},[33,75964,109],{"class":59},[33,75966,71320],{"class":117},[33,75968,157],{"class":59},[33,75970,75972,75974,75976,75978,75980,75982,75984,75986],{"class":35,"line":75971},231,[33,75973,12879],{"class":63},[33,75975,71349],{"class":39},[33,75977,15222],{"class":63},[33,75979,56040],{"class":59},[33,75981,56043],{"class":3632},[33,75983,109],{"class":59},[33,75985,71360],{"class":117},[33,75987,157],{"class":59},[33,75989,75991,75993,75995,75997,75999,76001,76003,76005],{"class":35,"line":75990},232,[33,75992,12879],{"class":63},[33,75994,71329],{"class":39},[33,75996,15222],{"class":63},[33,75998,56040],{"class":59},[33,76000,56043],{"class":3632},[33,76002,109],{"class":59},[33,76004,71340],{"class":117},[33,76006,157],{"class":59},[33,76008,76010,76012,76014,76016,76018,76020,76022,76024],{"class":35,"line":76009},233,[33,76011,12879],{"class":63},[33,76013,71369],{"class":39},[33,76015,15222],{"class":63},[33,76017,56040],{"class":59},[33,76019,56043],{"class":3632},[33,76021,109],{"class":59},[33,76023,71380],{"class":117},[33,76025,157],{"class":59},[33,76027,76029],{"class":35,"line":76028},234,[33,76030,127],{"emptyLinePlaceholder":126},[33,76032,76034],{"class":35,"line":76033},235,[33,76035,76036],{"class":87},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[33,76038,76040,76042,76044,76046,76048,76050,76052,76054,76056],{"class":35,"line":76039},236,[33,76041,71481],{"class":59},[33,76043,59456],{"class":3632},[33,76045,109],{"class":59},[33,76047,71488],{"class":117},[33,76049,14093],{"class":59},[33,76051,56093],{"class":63},[33,76053,3332],{"class":59},[33,76055,1894],{"class":6877},[33,76057,14100],{"class":59},[33,76059,76061],{"class":35,"line":76060},237,[33,76062,76063],{"class":87},"      \u002F\u002F 禁止浏览器跳转\n",[33,76065,76067,76069,76071],{"class":35,"line":76066},238,[33,76068,71508],{"class":59},[33,76070,71511],{"class":3632},[33,76072,943],{"class":59},[33,76074,76076],{"class":35,"line":76075},239,[33,76077,76078],{"class":87},"      \u002F\u002F 非空判断\n",[33,76080,76082],{"class":35,"line":76081},240,[33,76083,76084],{"class":87},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[33,76086,76088],{"class":35,"line":76087},241,[33,76089,76090],{"class":87},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[33,76092,76094,76096,76098,76100,76103,76105,76108,76111,76113,76115],{"class":35,"line":76093},242,[33,76095,56124],{"class":63},[33,76097,3332],{"class":59},[33,76099,2045],{"class":63},[33,76101,76102],{"class":59},"uname.value ",[33,76104,72998],{"class":63},[33,76106,76107],{"class":63}," !",[33,76109,76110],{"class":59},"age.value ",[33,76112,72998],{"class":63},[33,76114,76107],{"class":63},[33,76116,76117],{"class":59},"salary.value) {\n",[33,76119,76121,76123,76125,76127,76129],{"class":35,"line":76120},243,[33,76122,16410],{"class":63},[33,76124,71582],{"class":3632},[33,76126,109],{"class":59},[33,76128,71587],{"class":117},[33,76130,157],{"class":59},[33,76132,76134],{"class":35,"line":76133},244,[33,76135,54043],{"class":59},[33,76137,76139,76141,76143],{"class":35,"line":76138},245,[33,76140,59650],{"class":59},[33,76142,53529],{"class":3632},[33,76144,76145],{"class":59},"({\n",[33,76147,76149],{"class":35,"line":76148},246,[33,76150,76151],{"class":87},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[33,76153,76155],{"class":35,"line":76154},247,[33,76156,76157],{"class":87},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[33,76159,76161],{"class":35,"line":76160},248,[33,76162,76163],{"class":87},"        \u002F\u002F 对象的序号应为数组长度+1\n",[33,76165,76167],{"class":35,"line":76166},249,[33,76168,76169],{"class":87},"        \u002F\u002F unameId: arr.length + 1,\n",[33,76171,76173],{"class":35,"line":76172},250,[33,76174,127],{"emptyLinePlaceholder":126},[33,76176,76178],{"class":35,"line":76177},251,[33,76179,76180],{"class":87},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[33,76182,76184],{"class":35,"line":76183},252,[33,76185,76186],{"class":87},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[33,76188,76190],{"class":35,"line":76189},253,[33,76191,76192],{"class":87},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[33,76194,76196],{"class":35,"line":76195},254,[33,76197,76198],{"class":87},"        \u002F\u002F 0当假看\n",[33,76200,76202,76205,76207,76209,76212,76214,76216,76218,76221,76223,76225,76228,76230],{"class":35,"line":76201},255,[33,76203,76204],{"class":59},"        unameId: arr.",[33,76206,53613],{"class":39},[33,76208,75455],{"class":63},[33,76210,76211],{"class":59}," arr[arr.",[33,76213,53613],{"class":39},[33,76215,53916],{"class":63},[33,76217,26774],{"class":39},[33,76219,76220],{"class":59},"].unameId ",[33,76222,2298],{"class":63},[33,76224,26774],{"class":39},[33,76226,76227],{"class":63}," :",[33,76229,26774],{"class":39},[33,76231,33116],{"class":59},[33,76233,76235],{"class":35,"line":76234},256,[33,76236,71635],{"class":59},[33,76238,76240],{"class":35,"line":76239},257,[33,76241,71640],{"class":59},[33,76243,76245],{"class":35,"line":76244},258,[33,76246,71650],{"class":59},[33,76248,76250],{"class":35,"line":76249},259,[33,76251,71645],{"class":59},[33,76253,76255],{"class":35,"line":76254},260,[33,76256,76257],{"class":59},"        city: city.value,\n",[33,76259,76261],{"class":35,"line":76260},261,[33,76262,76263],{"class":87},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[33,76265,76267],{"class":35,"line":76266},262,[33,76268,76269],{"class":87},"        \u002F\u002F time: new Date().toDateString()\n",[33,76271,76273,76276,76279],{"class":35,"line":76272},263,[33,76274,76275],{"class":59},"        time: ",[33,76277,76278],{"class":3632},"getTime",[33,76280,943],{"class":59},[33,76282,76284],{"class":35,"line":76283},264,[33,76285,66457],{"class":59},[33,76287,76289],{"class":35,"line":76288},265,[33,76290,76291],{"class":87},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[33,76293,76295,76297],{"class":35,"line":76294},266,[33,76296,71710],{"class":3632},[33,76298,943],{"class":59},[33,76300,76302,76304,76306,76308,76310],{"class":35,"line":76301},267,[33,76303,71693],{"class":39},[33,76305,2375],{"class":59},[33,76307,71698],{"class":3632},[33,76309,14708],{"class":59},[33,76311,76312],{"class":87},"\u002F\u002F重置表单\n",[33,76314,76316],{"class":35,"line":76315},268,[33,76317,76318],{"class":87},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[33,76320,76322,76325,76327,76329,76332,76334,76336,76338,76340],{"class":35,"line":76321},269,[33,76323,76324],{"class":59},"      localStorage.",[33,76326,73295],{"class":3632},[33,76328,109],{"class":59},[33,76330,76331],{"class":117},"'data'",[33,76333,14093],{"class":59},[33,76335,73305],{"class":39},[33,76337,2375],{"class":59},[33,76339,73310],{"class":3632},[33,76341,76342],{"class":59},"(arr))\n",[33,76344,76346],{"class":35,"line":76345},270,[33,76347,35108],{"class":59},[33,76349,76351],{"class":35,"line":76350},271,[33,76352,127],{"emptyLinePlaceholder":126},[33,76354,76356],{"class":35,"line":76355},272,[33,76357,76358],{"class":87},"    \u002F\u002F 3.删除业务\n",[33,76360,76362],{"class":35,"line":76361},273,[33,76363,76364],{"class":87},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[33,76366,76368,76370,76372,76374,76376,76378,76380,76382,76384],{"class":35,"line":76367},274,[33,76369,71983],{"class":59},[33,76371,59456],{"class":3632},[33,76373,109],{"class":59},[33,76375,59461],{"class":117},[33,76377,14093],{"class":59},[33,76379,56093],{"class":63},[33,76381,3332],{"class":59},[33,76383,1894],{"class":6877},[33,76385,14100],{"class":59},[33,76387,76389],{"class":35,"line":76388},275,[33,76390,76391],{"class":87},"      \u002F\u002F 判断是否点击的是删除按钮\n",[33,76393,76395,76397,76399,76401,76403],{"class":35,"line":76394},276,[33,76396,56124],{"class":63},[33,76398,68676],{"class":59},[33,76400,56130],{"class":63},[33,76402,69898],{"class":117},[33,76404,14100],{"class":59},[33,76406,76408],{"class":35,"line":76407},277,[33,76409,76410],{"class":87},"        \u002F\u002F alert(1)\n",[33,76412,76414],{"class":35,"line":76413},278,[33,76415,76416],{"class":87},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[33,76418,76420],{"class":35,"line":76419},279,[33,76421,76422],{"class":87},"        \u002F\u002F console.log(e.target)\n",[33,76424,76426],{"class":35,"line":76425},280,[33,76427,76428],{"class":87},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[33,76430,76432],{"class":35,"line":76431},281,[33,76433,127],{"emptyLinePlaceholder":126},[33,76435,76437],{"class":35,"line":76436},282,[33,76438,76439],{"class":87},"        \u002F\u002F 确认框，确然是否真的要删除\n",[33,76441,76443],{"class":35,"line":76442},283,[33,76444,76445],{"class":87},"        \u002F\u002F confirm()为确认框\n",[33,76447,76449],{"class":35,"line":76448},284,[33,76450,76451],{"class":87},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[33,76453,76455,76457,76459,76462,76464,76467],{"class":35,"line":76454},285,[33,76456,4163],{"class":63},[33,76458,3332],{"class":59},[33,76460,76461],{"class":3632},"confirm",[33,76463,109],{"class":59},[33,76465,76466],{"class":117},"'您确定要删除这条数据吗？'",[33,76468,76469],{"class":59},")) {\n",[33,76471,76473,76476,76478,76480,76482],{"class":35,"line":76472},286,[33,76474,76475],{"class":59},"          arr.",[33,76477,59653],{"class":3632},[33,76479,72036],{"class":59},[33,76481,2036],{"class":39},[33,76483,157],{"class":59},[33,76485,76487],{"class":35,"line":76486},287,[33,76488,76489],{"class":87},"          \u002F\u002F 3.4 重新渲染页面\n",[33,76491,76493,76496],{"class":35,"line":76492},288,[33,76494,76495],{"class":3632},"          render",[33,76497,943],{"class":59},[33,76499,76501],{"class":35,"line":76500},289,[33,76502,76503],{"class":87},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[33,76505,76507,76510,76512,76514,76516,76518,76520,76522,76524],{"class":35,"line":76506},290,[33,76508,76509],{"class":59},"          localStorage.",[33,76511,73295],{"class":3632},[33,76513,109],{"class":59},[33,76515,76331],{"class":117},[33,76517,14093],{"class":59},[33,76519,73305],{"class":39},[33,76521,2375],{"class":59},[33,76523,73310],{"class":3632},[33,76525,76342],{"class":59},[33,76527,76529],{"class":35,"line":76528},291,[33,76530,4195],{"class":59},[33,76532,76534],{"class":35,"line":76533},292,[33,76535,54043],{"class":59},[33,76537,76539],{"class":35,"line":76538},293,[33,76540,127],{"emptyLinePlaceholder":126},[33,76542,76544],{"class":35,"line":76543},294,[33,76545,35108],{"class":59},[33,76547,76549],{"class":35,"line":76548},295,[33,76550,127],{"emptyLinePlaceholder":126},[33,76552,76554,76556,76558],{"class":35,"line":76553},296,[33,76555,54062],{"class":59},[33,76557,53458],{"class":52945},[33,76559,52952],{"class":59},[33,76561,76563,76565,76567],{"class":35,"line":76562},297,[33,76564,53430],{"class":59},[33,76566,53445],{"class":52945},[33,76568,52952],{"class":59},[33,76570,76572],{"class":35,"line":76571},298,[33,76573,127],{"emptyLinePlaceholder":126},[33,76575,76577,76579,76581],{"class":35,"line":76576},299,[33,76578,53430],{"class":59},[33,76580,52280],{"class":52945},[33,76582,52952],{"class":59},[14,76584,76586],{"id":76585},"_36-正则表达式","3.6 正则表达式",[19,76588,76589],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76591,76592],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76594,76595],{},"正则表达式的作用：",[2822,76597,76598,76605,76611],{},[165,76599,76600,76601,76604],{},"表单验证（ ",[1968,76602,76603],{},"匹配"," ）",[165,76606,76607,76608,76604],{},"过滤敏感词（ ",[1968,76609,76610],{},"替换",[165,76612,76613,76614,76604],{},"字符串中提取我们想要的部分（ ",[1968,76615,76616],{},"提取",[633,76618,76620],{"id":76619},"_361-语法","3.6.1 语法",[19,76622,76623],{},"正则表达式使用步骤：",[162,76625,76626,76629],{},[165,76627,76628],{},"定义规则",[165,76630,76631],{},"查找是否匹配",[19,76633,76634],{},"正则表达式里边不需要写引号",[19,76636,76637],{},[3145,76638],{"alt":28,"src":76639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76641,76642],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76644,76645],{},"reg.test(str)",[19,76647,76648],{},[3145,76649],{"alt":28,"src":76650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76652,76653],{},[3145,76654],{"alt":28,"src":76655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[633,76657,76659],{"id":76658},"_362-元字符","3.6.2 元字符",[162,76661,76662,76665,76668,76671,76678],{},[165,76663,76664],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[165,76666,76667],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[165,76669,76670],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[165,76672,76673,76674],{},"正则验证工具：",[2057,76675,76676],{"href":76676,"rel":76677},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25520],[165,76679,76680],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23653,76682,76684],{"id":76683},"_3621-边界符","3.6.2.1 边界符",[19,76686,76687],{},[3145,76688],{"alt":28,"src":76689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76691,76692],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76694,76695],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76697,76698],{},"只匹配一次",[19,76700,76701],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23653,76703,76705],{"id":76704},"_3622-量词","3.6.2.2 量词",[19,76707,76708],{},[3145,76709],{"alt":28,"src":76710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76712,76713],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23653,76715,76717],{"id":76716},"_3623-元字符","3.6.2.3 元字符",[19,76719,76720],{},[3145,76721],{"alt":28,"src":76722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76724,76725],{},"匹配的是a或b或c []只选一个",[19,76727,76728],{},[3145,76729],{"alt":28,"src":76730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76732,76733],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76735,76736],{},[3145,76737],{"alt":28,"src":76738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76740,76741],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76743,76744],{},[3145,76745],{"alt":28,"src":76746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[23,76748,76750],{"className":52278,"code":76749,"language":52280,"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,76751,76752,76762,76776,76780,76788,76802,76822,76834,76842,76846,76854,76862,76867,76898,76925,76953,76957,76962,76990,77021,77026,77031,77062,77094,77126,77130,77135,77166,77196,77226,77230,77235,77266,77297,77327,77357,77361,77366,77399,77403,77408,77439,77470,77474,77479,77510,77540,77571,77575,77580,77612,77643,77674,77701,77732,77764,77797,77828,77859,77891,77922,77930,77938,77942],{"__ignoreMap":28},[33,76753,76754,76756,76758,76760],{"class":35,"line":36},[33,76755,52942],{"class":59},[33,76757,52946],{"class":52945},[33,76759,52949],{"class":3632},[33,76761,52952],{"class":59},[33,76763,76764,76766,76768,76770,76772,76774],{"class":35,"line":43},[33,76765,2726],{"class":59},[33,76767,52280],{"class":52945},[33,76769,52961],{"class":3632},[33,76771,64],{"class":59},[33,76773,52966],{"class":117},[33,76775,52952],{"class":59},[33,76777,76778],{"class":35,"line":130},[33,76779,127],{"emptyLinePlaceholder":126},[33,76781,76782,76784,76786],{"class":35,"line":146},[33,76783,2726],{"class":59},[33,76785,52979],{"class":52945},[33,76787,52952],{"class":59},[33,76789,76790,76792,76794,76796,76798,76800],{"class":35,"line":267},[33,76791,53789],{"class":59},[33,76793,52989],{"class":52945},[33,76795,52992],{"class":3632},[33,76797,64],{"class":59},[33,76799,52997],{"class":117},[33,76801,52952],{"class":59},[33,76803,76804,76806,76808,76810,76812,76814,76816,76818,76820],{"class":35,"line":275},[33,76805,53789],{"class":59},[33,76807,52989],{"class":52945},[33,76809,16578],{"class":3632},[33,76811,64],{"class":59},[33,76813,53036],{"class":117},[33,76815,53016],{"class":3632},[33,76817,64],{"class":59},[33,76819,53043],{"class":117},[33,76821,52952],{"class":59},[33,76823,76824,76826,76828,76830,76832],{"class":35,"line":392},[33,76825,53789],{"class":59},[33,76827,53052],{"class":52945},[33,76829,53055],{"class":59},[33,76831,53052],{"class":52945},[33,76833,52952],{"class":59},[33,76835,76836,76838,76840],{"class":35,"line":406},[33,76837,53430],{"class":59},[33,76839,52979],{"class":52945},[33,76841,52952],{"class":59},[33,76843,76844],{"class":35,"line":418},[33,76845,127],{"emptyLinePlaceholder":126},[33,76847,76848,76850,76852],{"class":35,"line":425},[33,76849,2726],{"class":59},[33,76851,53445],{"class":52945},[33,76853,52952],{"class":59},[33,76855,76856,76858,76860],{"class":35,"line":1147},[33,76857,53789],{"class":59},[33,76859,53458],{"class":52945},[33,76861,52952],{"class":59},[33,76863,76864],{"class":35,"line":1329},[33,76865,76866],{"class":87},"    \u002F\u002F 元字符中\n",[33,76868,76869,76871,76873,76875,76877,76880,76882,76884,76887,76889,76892,76895],{"class":35,"line":1341},[33,76870,75394],{"class":59},[33,76872,59890],{"class":3632},[33,76874,109],{"class":59},[33,76876,2401],{"class":117},[33,76878,76879],{"class":49622},"哈",[33,76881,2401],{"class":117},[33,76883,2375],{"class":59},[33,76885,76886],{"class":3632},"test",[33,76888,109],{"class":59},[33,76890,76891],{"class":117},"'哈'",[33,76893,76894],{"class":59},"))  ",[33,76896,76897],{"class":87},"\u002F\u002Ftrue\n",[33,76899,76900,76902,76904,76906,76908,76910,76912,76914,76916,76918,76921,76923],{"class":35,"line":1348},[33,76901,75394],{"class":59},[33,76903,59890],{"class":3632},[33,76905,109],{"class":59},[33,76907,2401],{"class":117},[33,76909,76879],{"class":49622},[33,76911,2401],{"class":117},[33,76913,2375],{"class":59},[33,76915,76886],{"class":3632},[33,76917,109],{"class":59},[33,76919,76920],{"class":117},"'哈哈'",[33,76922,76894],{"class":59},[33,76924,76897],{"class":87},[33,76926,76927,76929,76931,76933,76935,76937,76939,76941,76943,76945,76948,76951],{"class":35,"line":1529},[33,76928,75394],{"class":59},[33,76930,59890],{"class":3632},[33,76932,109],{"class":59},[33,76934,2401],{"class":117},[33,76936,76879],{"class":49622},[33,76938,2401],{"class":117},[33,76940,2375],{"class":59},[33,76942,76886],{"class":3632},[33,76944,109],{"class":59},[33,76946,76947],{"class":117},"'二哈'",[33,76949,76950],{"class":59},"))   ",[33,76952,76897],{"class":87},[33,76954,76955],{"class":35,"line":1546},[33,76956,127],{"emptyLinePlaceholder":126},[33,76958,76959],{"class":35,"line":1551},[33,76960,76961],{"class":87},"    \u002F\u002F 1.边界符\n",[33,76963,76964,76966,76968,76970,76972,76974,76976,76978,76980,76982,76984,76986,76988],{"class":35,"line":1566},[33,76965,75394],{"class":59},[33,76967,59890],{"class":3632},[33,76969,109],{"class":59},[33,76971,2401],{"class":117},[33,76973,2781],{"class":63},[33,76975,76879],{"class":49622},[33,76977,2401],{"class":117},[33,76979,2375],{"class":59},[33,76981,76886],{"class":3632},[33,76983,109],{"class":59},[33,76985,76891],{"class":117},[33,76987,76894],{"class":59},[33,76989,76897],{"class":87},[33,76991,76992,76994,76996,76998,77000,77002,77004,77006,77008,77010,77012,77014,77016,77018],{"class":35,"line":1578},[33,76993,75394],{"class":59},[33,76995,59890],{"class":3632},[33,76997,109],{"class":59},[33,76999,2401],{"class":117},[33,77001,2781],{"class":63},[33,77003,76879],{"class":49622},[33,77005,2120],{"class":63},[33,77007,2401],{"class":117},[33,77009,2375],{"class":59},[33,77011,76886],{"class":3632},[33,77013,109],{"class":59},[33,77015,76920],{"class":117},[33,77017,76894],{"class":59},[33,77019,77020],{"class":87},"\u002F\u002Ffalse\n",[33,77022,77023],{"class":35,"line":1583},[33,77024,77025],{"class":87},"    \u002F\u002F 2.量词\n",[33,77027,77028],{"class":35,"line":3369},[33,77029,77030],{"class":87},"    \u002F\u002F 量词 * 类似于 >= 0\n",[33,77032,77033,77035,77037,77039,77041,77043,77045,77048,77050,77052,77054,77056,77058,77060],{"class":35,"line":3396},[33,77034,75394],{"class":59},[33,77036,59890],{"class":3632},[33,77038,109],{"class":59},[33,77040,2401],{"class":117},[33,77042,2781],{"class":63},[33,77044,76879],{"class":49622},[33,77046,77047],{"class":63},"*$",[33,77049,2401],{"class":117},[33,77051,2375],{"class":59},[33,77053,76886],{"class":3632},[33,77055,109],{"class":59},[33,77057,76920],{"class":117},[33,77059,76894],{"class":59},[33,77061,76897],{"class":87},[33,77063,77064,77066,77068,77070,77072,77074,77076,77078,77080,77082,77084,77086,77089,77091],{"class":35,"line":3401},[33,77065,75394],{"class":59},[33,77067,59890],{"class":3632},[33,77069,109],{"class":59},[33,77071,2401],{"class":117},[33,77073,2781],{"class":63},[33,77075,76879],{"class":49622},[33,77077,77047],{"class":63},[33,77079,2401],{"class":117},[33,77081,2375],{"class":59},[33,77083,76886],{"class":3632},[33,77085,109],{"class":59},[33,77087,77088],{"class":117},"'二哈好傻'",[33,77090,76894],{"class":59},[33,77092,77093],{"class":87},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[33,77095,77096,77098,77100,77102,77104,77106,77108,77110,77112,77114,77116,77118,77121,77123],{"class":35,"line":3418},[33,77097,75394],{"class":59},[33,77099,59890],{"class":3632},[33,77101,109],{"class":59},[33,77103,2401],{"class":117},[33,77105,2781],{"class":63},[33,77107,76879],{"class":49622},[33,77109,77047],{"class":63},[33,77111,2401],{"class":117},[33,77113,2375],{"class":59},[33,77115,76886],{"class":3632},[33,77117,109],{"class":59},[33,77119,77120],{"class":117},"'哈好哈'",[33,77122,76950],{"class":59},[33,77124,77125],{"class":87},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[33,77127,77128],{"class":35,"line":3423},[33,77129,127],{"emptyLinePlaceholder":126},[33,77131,77132],{"class":35,"line":3428},[33,77133,77134],{"class":87},"    \u002F\u002F +类似于>=1\n",[33,77136,77137,77139,77141,77143,77145,77147,77149,77152,77154,77156,77158,77160,77162,77164],{"class":35,"line":3433},[33,77138,75394],{"class":59},[33,77140,59890],{"class":3632},[33,77142,109],{"class":59},[33,77144,2401],{"class":117},[33,77146,2781],{"class":63},[33,77148,76879],{"class":49622},[33,77150,77151],{"class":63},"+$",[33,77153,2401],{"class":117},[33,77155,2375],{"class":59},[33,77157,76886],{"class":3632},[33,77159,109],{"class":59},[33,77161,76920],{"class":117},[33,77163,76894],{"class":59},[33,77165,76897],{"class":87},[33,77167,77168,77170,77172,77174,77176,77178,77180,77182,77184,77186,77188,77190,77192,77194],{"class":35,"line":3447},[33,77169,75394],{"class":59},[33,77171,59890],{"class":3632},[33,77173,109],{"class":59},[33,77175,2401],{"class":117},[33,77177,2781],{"class":63},[33,77179,76879],{"class":49622},[33,77181,77151],{"class":63},[33,77183,2401],{"class":117},[33,77185,2375],{"class":59},[33,77187,76886],{"class":3632},[33,77189,109],{"class":59},[33,77191,77088],{"class":117},[33,77193,76894],{"class":59},[33,77195,77093],{"class":87},[33,77197,77198,77200,77202,77204,77206,77208,77210,77212,77214,77216,77218,77220,77222,77224],{"class":35,"line":3452},[33,77199,75394],{"class":59},[33,77201,59890],{"class":3632},[33,77203,109],{"class":59},[33,77205,2401],{"class":117},[33,77207,2781],{"class":63},[33,77209,76879],{"class":49622},[33,77211,77151],{"class":63},[33,77213,2401],{"class":117},[33,77215,2375],{"class":59},[33,77217,76886],{"class":3632},[33,77219,109],{"class":59},[33,77221,77120],{"class":117},[33,77223,76950],{"class":59},[33,77225,77020],{"class":87},[33,77227,77228],{"class":35,"line":4243},[33,77229,127],{"emptyLinePlaceholder":126},[33,77231,77232],{"class":35,"line":4257},[33,77233,77234],{"class":87},"    \u002F\u002F ?类似于0次或一次\n",[33,77236,77237,77239,77241,77243,77245,77247,77250,77252,77254,77256,77258,77260,77262,77264],{"class":35,"line":4265},[33,77238,75394],{"class":59},[33,77240,59890],{"class":3632},[33,77242,109],{"class":59},[33,77244,2401],{"class":117},[33,77246,2781],{"class":63},[33,77248,77249],{"class":49622},"哈？",[33,77251,2120],{"class":63},[33,77253,2401],{"class":117},[33,77255,2375],{"class":59},[33,77257,76886],{"class":3632},[33,77259,109],{"class":59},[33,77261,75869],{"class":117},[33,77263,76950],{"class":59},[33,77265,76897],{"class":87},[33,77267,77268,77270,77272,77274,77276,77278,77280,77283,77285,77287,77289,77291,77293,77295],{"class":35,"line":4270},[33,77269,75394],{"class":59},[33,77271,59890],{"class":3632},[33,77273,109],{"class":59},[33,77275,2401],{"class":117},[33,77277,2781],{"class":63},[33,77279,76879],{"class":49622},[33,77281,77282],{"class":63},"?$",[33,77284,2401],{"class":117},[33,77286,2375],{"class":59},[33,77288,76886],{"class":3632},[33,77290,109],{"class":59},[33,77292,76920],{"class":117},[33,77294,76894],{"class":59},[33,77296,77020],{"class":87},[33,77298,77299,77301,77303,77305,77307,77309,77311,77313,77315,77317,77319,77321,77323,77325],{"class":35,"line":4276},[33,77300,75394],{"class":59},[33,77302,59890],{"class":3632},[33,77304,109],{"class":59},[33,77306,2401],{"class":117},[33,77308,2781],{"class":63},[33,77310,76879],{"class":49622},[33,77312,77282],{"class":63},[33,77314,2401],{"class":117},[33,77316,2375],{"class":59},[33,77318,76886],{"class":3632},[33,77320,109],{"class":59},[33,77322,77088],{"class":117},[33,77324,76894],{"class":59},[33,77326,77093],{"class":87},[33,77328,77329,77331,77333,77335,77337,77339,77341,77343,77345,77347,77349,77351,77353,77355],{"class":35,"line":4282},[33,77330,75394],{"class":59},[33,77332,59890],{"class":3632},[33,77334,109],{"class":59},[33,77336,2401],{"class":117},[33,77338,2781],{"class":63},[33,77340,76879],{"class":49622},[33,77342,77282],{"class":63},[33,77344,2401],{"class":117},[33,77346,2375],{"class":59},[33,77348,76886],{"class":3632},[33,77350,109],{"class":59},[33,77352,77120],{"class":117},[33,77354,76894],{"class":59},[33,77356,77020],{"class":87},[33,77358,77359],{"class":35,"line":4287},[33,77360,127],{"emptyLinePlaceholder":126},[33,77362,77363],{"class":35,"line":9608},[33,77364,77365],{"class":87},"    \u002F\u002F {n}写几，就必须出现几次\n",[33,77367,77368,77370,77372,77374,77376,77378,77380,77383,77385,77387,77389,77391,77394,77397],{"class":35,"line":9632},[33,77369,75394],{"class":59},[33,77371,59890],{"class":3632},[33,77373,109],{"class":59},[33,77375,2401],{"class":117},[33,77377,2781],{"class":63},[33,77379,76879],{"class":49622},[33,77381,77382],{"class":63},"{4}$",[33,77384,2401],{"class":117},[33,77386,2375],{"class":59},[33,77388,76886],{"class":3632},[33,77390,109],{"class":59},[33,77392,77393],{"class":117},"'哈哈哈哈'",[33,77395,77396],{"class":59},")) ",[33,77398,76897],{"class":87},[33,77400,77401],{"class":35,"line":9637},[33,77402,127],{"emptyLinePlaceholder":126},[33,77404,77405],{"class":35,"line":9643},[33,77406,77407],{"class":87},"    \u002F\u002F {n,}大于等于n次\n",[33,77409,77410,77412,77414,77416,77418,77420,77422,77425,77427,77429,77431,77433,77435,77437],{"class":35,"line":9670},[33,77411,75394],{"class":59},[33,77413,59890],{"class":3632},[33,77415,109],{"class":59},[33,77417,2401],{"class":117},[33,77419,2781],{"class":63},[33,77421,76879],{"class":49622},[33,77423,77424],{"class":63},"{4,}$",[33,77426,2401],{"class":117},[33,77428,2375],{"class":59},[33,77430,76886],{"class":3632},[33,77432,109],{"class":59},[33,77434,77393],{"class":117},[33,77436,77396],{"class":59},[33,77438,76897],{"class":87},[33,77440,77441,77443,77445,77447,77449,77451,77453,77455,77457,77459,77461,77463,77466,77468],{"class":35,"line":9675},[33,77442,75394],{"class":59},[33,77444,59890],{"class":3632},[33,77446,109],{"class":59},[33,77448,2401],{"class":117},[33,77450,2781],{"class":63},[33,77452,76879],{"class":49622},[33,77454,77424],{"class":63},[33,77456,2401],{"class":117},[33,77458,2375],{"class":59},[33,77460,76886],{"class":3632},[33,77462,109],{"class":59},[33,77464,77465],{"class":117},"'哈哈哈哈哈'",[33,77467,77396],{"class":59},[33,77469,76897],{"class":87},[33,77471,77472],{"class":35,"line":9681},[33,77473,127],{"emptyLinePlaceholder":126},[33,77475,77476],{"class":35,"line":9693},[33,77477,77478],{"class":87},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[33,77480,77481,77483,77485,77487,77489,77491,77493,77496,77498,77500,77502,77504,77506,77508],{"class":35,"line":9705},[33,77482,75394],{"class":59},[33,77484,59890],{"class":3632},[33,77486,109],{"class":59},[33,77488,2401],{"class":117},[33,77490,2781],{"class":63},[33,77492,76879],{"class":49622},[33,77494,77495],{"class":63},"{4,6}$",[33,77497,2401],{"class":117},[33,77499,2375],{"class":59},[33,77501,76886],{"class":3632},[33,77503,109],{"class":59},[33,77505,77393],{"class":117},[33,77507,77396],{"class":59},[33,77509,76897],{"class":87},[33,77511,77512,77514,77516,77518,77520,77522,77524,77526,77528,77530,77532,77534,77536,77538],{"class":35,"line":9717},[33,77513,75394],{"class":59},[33,77515,59890],{"class":3632},[33,77517,109],{"class":59},[33,77519,2401],{"class":117},[33,77521,2781],{"class":63},[33,77523,76879],{"class":49622},[33,77525,77495],{"class":63},[33,77527,2401],{"class":117},[33,77529,2375],{"class":59},[33,77531,76886],{"class":3632},[33,77533,109],{"class":59},[33,77535,77465],{"class":117},[33,77537,77396],{"class":59},[33,77539,76897],{"class":87},[33,77541,77542,77544,77546,77548,77550,77552,77554,77556,77558,77560,77562,77564,77567,77569],{"class":35,"line":11375},[33,77543,75394],{"class":59},[33,77545,59890],{"class":3632},[33,77547,109],{"class":59},[33,77549,2401],{"class":117},[33,77551,2781],{"class":63},[33,77553,76879],{"class":49622},[33,77555,77495],{"class":63},[33,77557,2401],{"class":117},[33,77559,2375],{"class":59},[33,77561,76886],{"class":3632},[33,77563,109],{"class":59},[33,77565,77566],{"class":117},"'哈哈哈哈哈哈哈'",[33,77568,77396],{"class":59},[33,77570,77020],{"class":87},[33,77572,77573],{"class":35,"line":11400},[33,77574,127],{"emptyLinePlaceholder":126},[33,77576,77577],{"class":35,"line":11423},[33,77578,77579],{"class":87},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[33,77581,77582,77584,77586,77588,77590,77592,77595,77597,77599,77601,77603,77605,77608,77610],{"class":35,"line":11447},[33,77583,75394],{"class":59},[33,77585,59890],{"class":3632},[33,77587,109],{"class":59},[33,77589,2401],{"class":117},[33,77591,2781],{"class":63},[33,77593,77594],{"class":39},"[abc]",[33,77596,2120],{"class":63},[33,77598,2401],{"class":117},[33,77600,2375],{"class":59},[33,77602,76886],{"class":3632},[33,77604,109],{"class":59},[33,77606,77607],{"class":117},"'a'",[33,77609,76894],{"class":59},[33,77611,76897],{"class":87},[33,77613,77614,77616,77618,77620,77622,77624,77626,77628,77630,77632,77634,77636,77639,77641],{"class":35,"line":11452},[33,77615,75394],{"class":59},[33,77617,59890],{"class":3632},[33,77619,109],{"class":59},[33,77621,2401],{"class":117},[33,77623,2781],{"class":63},[33,77625,77594],{"class":39},[33,77627,2120],{"class":63},[33,77629,2401],{"class":117},[33,77631,2375],{"class":59},[33,77633,76886],{"class":3632},[33,77635,109],{"class":59},[33,77637,77638],{"class":117},"'b'",[33,77640,76894],{"class":59},[33,77642,76897],{"class":87},[33,77644,77645,77647,77649,77651,77653,77655,77657,77659,77661,77663,77665,77667,77670,77672],{"class":35,"line":11457},[33,77646,75394],{"class":59},[33,77648,59890],{"class":3632},[33,77650,109],{"class":59},[33,77652,2401],{"class":117},[33,77654,2781],{"class":63},[33,77656,77594],{"class":39},[33,77658,2120],{"class":63},[33,77660,2401],{"class":117},[33,77662,2375],{"class":59},[33,77664,76886],{"class":3632},[33,77666,109],{"class":59},[33,77668,77669],{"class":117},"'c'",[33,77671,76894],{"class":59},[33,77673,76897],{"class":87},[33,77675,77676,77678,77680,77682,77684,77686,77688,77690,77692,77694,77697,77699],{"class":35,"line":11462},[33,77677,75394],{"class":59},[33,77679,59890],{"class":3632},[33,77681,109],{"class":59},[33,77683,2401],{"class":117},[33,77685,77594],{"class":39},[33,77687,2401],{"class":117},[33,77689,2375],{"class":59},[33,77691,76886],{"class":3632},[33,77693,109],{"class":59},[33,77695,77696],{"class":117},"'ab'",[33,77698,76894],{"class":59},[33,77700,76897],{"class":87},[33,77702,77703,77705,77707,77709,77711,77713,77715,77717,77719,77721,77723,77725,77727,77729],{"class":35,"line":11471},[33,77704,75394],{"class":59},[33,77706,59890],{"class":3632},[33,77708,109],{"class":59},[33,77710,2401],{"class":117},[33,77712,2781],{"class":63},[33,77714,77594],{"class":39},[33,77716,2120],{"class":63},[33,77718,2401],{"class":117},[33,77720,2375],{"class":59},[33,77722,76886],{"class":3632},[33,77724,109],{"class":59},[33,77726,77696],{"class":117},[33,77728,76894],{"class":59},[33,77730,77731],{"class":87},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[33,77733,77734,77736,77738,77740,77742,77744,77746,77749,77751,77753,77755,77757,77759,77761],{"class":35,"line":11476},[33,77735,75394],{"class":59},[33,77737,59890],{"class":3632},[33,77739,109],{"class":59},[33,77741,2401],{"class":117},[33,77743,2781],{"class":63},[33,77745,77594],{"class":39},[33,77747,77748],{"class":63},"{2}$",[33,77750,2401],{"class":117},[33,77752,2375],{"class":59},[33,77754,76886],{"class":3632},[33,77756,109],{"class":59},[33,77758,77696],{"class":117},[33,77760,76894],{"class":59},[33,77762,77763],{"class":87},"\u002F\u002Ftrue   可以选两个\n",[33,77765,77766,77768,77770,77772,77774,77776,77779,77781,77783,77785,77787,77789,77792,77794],{"class":35,"line":11482},[33,77767,75394],{"class":59},[33,77769,59890],{"class":3632},[33,77771,109],{"class":59},[33,77773,2401],{"class":117},[33,77775,2781],{"class":63},[33,77777,77778],{"class":39},"[a-z]",[33,77780,2120],{"class":63},[33,77782,2401],{"class":117},[33,77784,2375],{"class":59},[33,77786,76886],{"class":3632},[33,77788,109],{"class":59},[33,77790,77791],{"class":117},"'p'",[33,77793,76950],{"class":59},[33,77795,77796],{"class":87},"\u002F\u002Ftrue   依然只能选一个\n",[33,77798,77799,77801,77803,77805,77807,77809,77812,77814,77816,77818,77820,77822,77824,77826],{"class":35,"line":11503},[33,77800,75394],{"class":59},[33,77802,59890],{"class":3632},[33,77804,109],{"class":59},[33,77806,2401],{"class":117},[33,77808,2781],{"class":63},[33,77810,77811],{"class":39},"[A-Z]",[33,77813,2120],{"class":63},[33,77815,2401],{"class":117},[33,77817,2375],{"class":59},[33,77819,76886],{"class":3632},[33,77821,109],{"class":59},[33,77823,77791],{"class":117},[33,77825,76950],{"class":59},[33,77827,77020],{"class":87},[33,77829,77830,77832,77834,77836,77838,77840,77842,77844,77846,77848,77850,77852,77855,77857],{"class":35,"line":11509},[33,77831,75394],{"class":59},[33,77833,59890],{"class":3632},[33,77835,109],{"class":59},[33,77837,2401],{"class":117},[33,77839,2781],{"class":63},[33,77841,77811],{"class":39},[33,77843,2120],{"class":63},[33,77845,2401],{"class":117},[33,77847,2375],{"class":59},[33,77849,76886],{"class":3632},[33,77851,109],{"class":59},[33,77853,77854],{"class":117},"'P'",[33,77856,76950],{"class":59},[33,77858,76897],{"class":87},[33,77860,77861,77863,77865,77867,77869,77871,77874,77876,77878,77880,77882,77884,77887,77889],{"class":35,"line":11523},[33,77862,75394],{"class":59},[33,77864,59890],{"class":3632},[33,77866,109],{"class":59},[33,77868,2401],{"class":117},[33,77870,2781],{"class":63},[33,77872,77873],{"class":39},"[0-9]",[33,77875,2120],{"class":63},[33,77877,2401],{"class":117},[33,77879,2375],{"class":59},[33,77881,76886],{"class":3632},[33,77883,109],{"class":59},[33,77885,77886],{"class":117},"'0'",[33,77888,76950],{"class":59},[33,77890,76897],{"class":87},[33,77892,77893,77895,77897,77899,77901,77903,77906,77908,77910,77912,77914,77916,77918,77920],{"class":35,"line":11529},[33,77894,75394],{"class":59},[33,77896,59890],{"class":3632},[33,77898,109],{"class":59},[33,77900,2401],{"class":117},[33,77902,2781],{"class":63},[33,77904,77905],{"class":39},"[a-zA-Z0-9]",[33,77907,2120],{"class":63},[33,77909,2401],{"class":117},[33,77911,2375],{"class":59},[33,77913,76886],{"class":3632},[33,77915,109],{"class":59},[33,77917,77791],{"class":117},[33,77919,76894],{"class":59},[33,77921,76897],{"class":87},[33,77923,77924,77926,77928],{"class":35,"line":11556},[33,77925,54062],{"class":59},[33,77927,53458],{"class":52945},[33,77929,52952],{"class":59},[33,77931,77932,77934,77936],{"class":35,"line":11565},[33,77933,53430],{"class":59},[33,77935,53445],{"class":52945},[33,77937,52952],{"class":59},[33,77939,77940],{"class":35,"line":11571},[33,77941,127],{"emptyLinePlaceholder":126},[33,77943,77944,77946,77948],{"class":35,"line":11579},[33,77945,53430],{"class":59},[33,77947,52280],{"class":52945},[33,77949,52952],{"class":59},[23653,77951,77953],{"id":77952},"_3624-修饰符","3.6.2.4 修饰符",[19,77955,77956],{},[3145,77957],{"alt":28,"src":77958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77960,77961],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77963,77964],{},[3145,77965],{"alt":28,"src":77966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[23,77968,77970],{"className":52278,"code":77969,"language":52280,"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,77971,77972,77982,77996,78004,78018,78038,78050,78058,78066,78074,78106,78137,78142,78174,78185,78218,78227,78235,78243],{"__ignoreMap":28},[33,77973,77974,77976,77978,77980],{"class":35,"line":36},[33,77975,52942],{"class":59},[33,77977,52946],{"class":52945},[33,77979,52949],{"class":3632},[33,77981,52952],{"class":59},[33,77983,77984,77986,77988,77990,77992,77994],{"class":35,"line":43},[33,77985,2726],{"class":59},[33,77987,52280],{"class":52945},[33,77989,52961],{"class":3632},[33,77991,64],{"class":59},[33,77993,52966],{"class":117},[33,77995,52952],{"class":59},[33,77997,77998,78000,78002],{"class":35,"line":130},[33,77999,2726],{"class":59},[33,78001,52979],{"class":52945},[33,78003,52952],{"class":59},[33,78005,78006,78008,78010,78012,78014,78016],{"class":35,"line":146},[33,78007,53789],{"class":59},[33,78009,52989],{"class":52945},[33,78011,52992],{"class":3632},[33,78013,64],{"class":59},[33,78015,52997],{"class":117},[33,78017,52952],{"class":59},[33,78019,78020,78022,78024,78026,78028,78030,78032,78034,78036],{"class":35,"line":267},[33,78021,53789],{"class":59},[33,78023,52989],{"class":52945},[33,78025,16578],{"class":3632},[33,78027,64],{"class":59},[33,78029,53036],{"class":117},[33,78031,53016],{"class":3632},[33,78033,64],{"class":59},[33,78035,53043],{"class":117},[33,78037,52952],{"class":59},[33,78039,78040,78042,78044,78046,78048],{"class":35,"line":275},[33,78041,53789],{"class":59},[33,78043,53052],{"class":52945},[33,78045,53055],{"class":59},[33,78047,53052],{"class":52945},[33,78049,52952],{"class":59},[33,78051,78052,78054,78056],{"class":35,"line":392},[33,78053,53430],{"class":59},[33,78055,52979],{"class":52945},[33,78057,52952],{"class":59},[33,78059,78060,78062,78064],{"class":35,"line":406},[33,78061,2726],{"class":59},[33,78063,53445],{"class":52945},[33,78065,52952],{"class":59},[33,78067,78068,78070,78072],{"class":35,"line":418},[33,78069,53789],{"class":59},[33,78071,53458],{"class":52945},[33,78073,52952],{"class":59},[33,78075,78076,78078,78080,78082,78084,78086,78089,78091,78093,78095,78097,78099,78102,78104],{"class":35,"line":425},[33,78077,75394],{"class":59},[33,78079,59890],{"class":3632},[33,78081,109],{"class":59},[33,78083,2401],{"class":117},[33,78085,2781],{"class":63},[33,78087,78088],{"class":49622},"java",[33,78090,2120],{"class":63},[33,78092,2401],{"class":117},[33,78094,2375],{"class":59},[33,78096,76886],{"class":3632},[33,78098,109],{"class":59},[33,78100,78101],{"class":117},"'java'",[33,78103,77396],{"class":59},[33,78105,76897],{"class":87},[33,78107,78108,78110,78112,78114,78116,78118,78120,78122,78124,78126,78128,78130,78133,78135],{"class":35,"line":1147},[33,78109,75394],{"class":59},[33,78111,59890],{"class":3632},[33,78113,109],{"class":59},[33,78115,2401],{"class":117},[33,78117,2781],{"class":63},[33,78119,78088],{"class":49622},[33,78121,2120],{"class":63},[33,78123,2401],{"class":117},[33,78125,2375],{"class":59},[33,78127,76886],{"class":3632},[33,78129,109],{"class":59},[33,78131,78132],{"class":117},"'Java'",[33,78134,77396],{"class":59},[33,78136,77020],{"class":87},[33,78138,78139],{"class":35,"line":1329},[33,78140,78141],{"class":87},"    \u002F\u002F 不区分大小写、\n",[33,78143,78144,78146,78148,78150,78152,78154,78156,78158,78160,78162,78164,78166,78168,78170,78172],{"class":35,"line":1341},[33,78145,75394],{"class":59},[33,78147,59890],{"class":3632},[33,78149,109],{"class":59},[33,78151,2401],{"class":117},[33,78153,2781],{"class":63},[33,78155,78088],{"class":49622},[33,78157,2120],{"class":63},[33,78159,2401],{"class":117},[33,78161,2259],{"class":63},[33,78163,2375],{"class":59},[33,78165,76886],{"class":3632},[33,78167,109],{"class":59},[33,78169,78132],{"class":117},[33,78171,77396],{"class":59},[33,78173,76897],{"class":87},[33,78175,78176,78178,78180,78182],{"class":35,"line":1348},[33,78177,12879],{"class":63},[33,78179,75560],{"class":39},[33,78181,15222],{"class":63},[33,78183,78184],{"class":117}," 'java是一门编程语言，学完java工资很高'\n",[33,78186,78187,78189,78192,78194,78197,78200,78202,78204,78206,78208,78211,78213,78216],{"class":35,"line":1529},[33,78188,12879],{"class":63},[33,78190,78191],{"class":39}," result",[33,78193,15222],{"class":63},[33,78195,78196],{"class":59}," str.",[33,78198,78199],{"class":3632},"replace",[33,78201,109],{"class":59},[33,78203,2401],{"class":117},[33,78205,78088],{"class":49622},[33,78207,2401],{"class":117},[33,78209,78210],{"class":63},"ig",[33,78212,14093],{"class":59},[33,78214,78215],{"class":117},"'前端'",[33,78217,157],{"class":59},[33,78219,78220,78222,78224],{"class":35,"line":1546},[33,78221,75394],{"class":59},[33,78223,59890],{"class":3632},[33,78225,78226],{"class":59},"(result)\n",[33,78228,78229,78231,78233],{"class":35,"line":1551},[33,78230,54062],{"class":59},[33,78232,53458],{"class":52945},[33,78234,52952],{"class":59},[33,78236,78237,78239,78241],{"class":35,"line":1566},[33,78238,53430],{"class":59},[33,78240,53445],{"class":52945},[33,78242,52952],{"class":59},[33,78244,78245,78247,78249],{"class":35,"line":1578},[33,78246,53430],{"class":59},[33,78248,52280],{"class":52945},[33,78250,52952],{"class":59},[1729,78252,78253],{},"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":43,"depth":43,"links":78255},[78256,78266,78278,78295,78302,78310],{"id":55005,"depth":43,"text":55006,"children":78257},[78258,78259,78260,78261,78262,78263,78264,78265],{"id":55009,"depth":130,"text":55010},{"id":55042,"depth":130,"text":55043},{"id":55081,"depth":130,"text":55082},{"id":55239,"depth":130,"text":55240},{"id":55287,"depth":130,"text":55288},{"id":55424,"depth":130,"text":55425},{"id":55745,"depth":130,"text":55746},{"id":58732,"depth":130,"text":58733},{"id":58760,"depth":43,"text":58761,"children":78267},[78268,78269,78270,78271,78272,78273,78274,78275,78276,78277],{"id":58764,"depth":130,"text":58765},{"id":58787,"depth":130,"text":58788},{"id":59702,"depth":130,"text":59703},{"id":60392,"depth":130,"text":60393},{"id":60674,"depth":130,"text":60675},{"id":64834,"depth":130,"text":64835},{"id":65004,"depth":130,"text":65005},{"id":65132,"depth":130,"text":65133},{"id":65157,"depth":130,"text":65158},{"id":66546,"depth":130,"text":66547},{"id":67699,"depth":43,"text":67700,"children":78279},[78280,78281,78282,78283,78284,78285,78286,78287,78288,78289,78290,78291,78292,78293,78294],{"id":67703,"depth":130,"text":67704},{"id":68357,"depth":130,"text":68358},{"id":70052,"depth":130,"text":70053},{"id":70093,"depth":130,"text":70094},{"id":70135,"depth":130,"text":70136},{"id":70149,"depth":130,"text":70150},{"id":70198,"depth":130,"text":70199},{"id":70210,"depth":130,"text":70211},{"id":70225,"depth":130,"text":70226},{"id":70261,"depth":130,"text":70262},{"id":70342,"depth":130,"text":70343},{"id":70470,"depth":130,"text":70471},{"id":70482,"depth":130,"text":70483},{"id":70501,"depth":130,"text":70502},{"id":72612,"depth":130,"text":72613},{"id":72631,"depth":43,"text":72632,"children":78296},[78297,78298,78299,78300,78301],{"id":72652,"depth":130,"text":72653},{"id":72672,"depth":130,"text":72673},{"id":72721,"depth":130,"text":72722},{"id":72846,"depth":130,"text":72847},{"id":73026,"depth":130,"text":73027},{"id":73044,"depth":43,"text":73045,"children":78303},[78304,78305,78306,78307,78308,78309],{"id":73059,"depth":130,"text":73060},{"id":73118,"depth":130,"text":73119},{"id":73142,"depth":130,"text":73143},{"id":73462,"depth":130,"text":73463},{"id":73494,"depth":130,"text":73495},{"id":73517,"depth":130,"text":73518},{"id":76585,"depth":43,"text":76586,"children":78311},[78312,78313],{"id":76619,"depth":130,"text":76620},{"id":76658,"depth":130,"text":76659},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54977,"description":1751},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78320,"title":78321,"body":78322,"description":1751,"extension":1752,"meta":94457,"navigation":126,"path":94458,"seo":94459,"stem":94460,"__hash__":94461},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78323,"toc":94393},[78324,78327,78330,78334,78338,78343,78348,78359,78363,78368,78371,78375,78378,78383,78387,78391,78394,78399,78402,78406,78409,78417,78420,78424,78429,78434,78437,78441,78446,78451,78454,78458,78463,78466,78471,78474,78479,78482,78487,78492,78495,78498,78502,78507,78512,78515,78519,78523,78526,78529,78532,78536,78540,78545,78550,78553,78557,78562,78567,78570,78573,78576,78579,78582,78585,78588,78591,78594,78599,78603,78608,78613,78616,78619,78622,78625,78628,78631,78634,78637,78641,78645,78648,78651,78654,78659,78661,78664,78667,78670,78673,78676,78679,78682,78685,78688,78691,78694,78697,78700,78705,78710,78715,78718,78722,78725,78730,78734,78736,78747,78752,78853,78856,78859,78862,78865,78868,78871,78874,78877,78879,78882,78885,78888,78891,78894,78896,78899,78902,78905,78908,78911,78914,78916,78919,78921,78923,78926,78930,78934,78937,78940,78943,78946,78949,78952,78955,78958,78961,78966,79086,79089,79092,79097,79100,79103,79106,79109,79114,79117,79120,79123,79126,79131,79134,79234,79299,79373,79377,79380,79383,79387,79390,79404,79433,79436,79439,79442,79445,79448,79451,79454,79456,79459,79462,79465,79468,79472,79477,79481,79486,79561,79564,79747,79750,79753,79756,79759,79762,79764,79767,79770,79773,79776,79779,79782,79784,79788,79791,79796,79799,79802,79805,79808,79810,79815,79818,79821,79824,79827,79829,79834,79837,79840,79842,79844,79847,79851,79854,79857,79862,79865,79868,79871,79921,79926,79930,79935,79938,80007,80010,80019,80023,80028,80031,80034,80042,80045,80062,81863,81867,81871,81876,81879,81883,81889,81895,82047,82052,82057,82060,82063,82066,82069,82072,82075,82078,82081,82084,82087,82090,82093,82098,82102,82105,82116,82120,82125,82128,82131,82134,82137,82140,82142,82145,82148,82151,82154,82156,82173,82176,82180,82183,82188,82193,82196,82199,82203,82206,82209,82218,82221,82225,82228,82233,82238,82305,82309,82312,82315,82320,82325,82411,82416,82420,82423,82426,82441,82444,82449,82453,82458,82567,82570,82581,82731,82735,82740,82849,82853,82858,82863,82868,82871,82878,82898,82934,83098,83103,83106,83111,83118,83121,83124,83127,83186,83242,83298,83302,83307,83622,83625,83629,83632,83637,83746,83751,83755,83760,83764,83835,83839,83841,83844,83847,83885,84161,84165,84182,84248,84282,84286,84289,84294,84323,84330,84339,84344,84359,84364,84373,84376,84513,84517,84579,84583,84588,84833,84837,84842,84845,84848,84851,84854,84858,84863,86444,86448,86452,86458,86461,86466,86470,86473,86478,86481,86492,86496,86501,86505,86510,86515,86518,86523,86527,86531,86534,86539,86544,86547,86550,86553,86675,86680,86782,86785,86788,86792,86797,86969,86974,86978,86981,86986,87052,87057,87060,87191,87194,87199,87202,87205,87296,87301,87304,87307,87310,87313,87318,87323,87326,87331,87336,87341,87345,87348,87351,87356,87361,87366,87371,87425,87428,87431,87436,87439,87442,87447,87452,87457,87461,87466,87480,87485,87488,87493,87497,87502,87507,87512,87517,87522,87527,87532,87537,87540,87544,87549,87552,87555,87558,87563,87568,87571,87574,87578,87581,87584,87589,87594,87599,87604,87607,87612,87617,87678,87683,87686,87691,88932,88937,88941,88945,88950,88953,88958,88963,88966,88971,88973,88978,88982,88985,88988,88999,89003,89008,89013,89068,89073,89078,89083,89294,89299,89303,89308,89311,89313,89316,89319,89765,89770,89777,89783,89786,89789,90053,90058,90062,90327,90332,90336,90341,90346,90351,90356,90687,90690,90695,90700,90703,90707,90711,90716,90721,90726,90731,90736,90741,90745,90748,90753,90758,90761,90835,90840,90845,90850,90852,90855,91225,91230,91235,91240,91243,91246,91348,91353,91358,91461,91465,91470,91474,91478,91483,91488,91491,91496,91499,91502,91895,91900,91903,91906,91909,91912,92432,92436,92441,92446,92451,92454,92459,92462,92465,92847,92852,92854,92856,92859,92862,93374,93378,93439,93442,93445,93448,93452,93455,93460,93465,94390],[10,78325,78321],{"id":78326},"_4js进阶",[19,78328,78329],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78331,78333],{"id":78332},"_41-作用域","4.1 作用域",[633,78335,78337],{"id":78336},"_411-局部作用域","4.1.1 局部作用域",[19,78339,78340],{},[3145,78341],{"alt":28,"src":78342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78344,78345],{},[3145,78346],{"alt":28,"src":78347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2822,78349,78350,78353,78356],{},[165,78351,78352],{},"函数作用域在函数内部",[165,78354,78355],{},"块级作用域在{}",[165,78357,78358],{},"对象的那个{}不是作用域，不是块作用域",[633,78360,78362],{"id":78361},"_412-全局作用域","4.1.2 全局作用域",[19,78364,78365],{},[3145,78366],{"alt":28,"src":78367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78369,78370],{},"window.a=10不要这样写",[633,78372,78374],{"id":78373},"_413-作用域链","4.1.3 作用域链",[19,78376,78377],{},"变量查找机制",[19,78379,78380],{},[3145,78381],{"alt":28,"src":78382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78384,78386],{"id":78385},"_42-垃圾回收机制","4.2 垃圾回收机制",[633,78388,78390],{"id":78389},"_421-大体介绍","4.2.1 大体介绍",[19,78392,78393],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78395,78396],{},[3145,78397],{"alt":28,"src":78398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78400,78401],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[633,78403,78405],{"id":78404},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78407,78408],{},"堆栈空间分配区别：",[162,78410,78411,78414],{},[165,78412,78413],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[165,78415,78416],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78418,78419],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23653,78421,78423],{"id":78422},"_4221-引用计数","4.2.2.1 引用计数",[19,78425,78426],{},[3145,78427],{"alt":28,"src":78428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78430,78431],{},[3145,78432],{"alt":28,"src":78433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78435,78436],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23653,78438,78440],{"id":78439},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78442,78443],{},[3145,78444],{"alt":28,"src":78445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78447,78448],{},[3145,78449],{"alt":28,"src":78450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78452,78453],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78455,78457],{"id":78456},"_43-闭包","4.3 闭包",[19,78459,78460],{},[3145,78461],{"alt":28,"src":78462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78464,78465],{},"闭包：内层函数+外层函数的变量",[19,78467,78468],{},[3145,78469],{"alt":28,"src":78470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78472,78473],{},"closure就是闭包",[19,78475,78476],{},[3145,78477],{"alt":28,"src":78478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78480,78481],{},"内层函数必须包含外层函数的变量才是闭包",[19,78483,78484],{},[3145,78485],{"alt":28,"src":78486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78488,78489],{},[3145,78490],{"alt":28,"src":78491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78493,78494],{},"闭包可能会引起内存泄漏",[19,78496,78497],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78499,78501],{"id":78500},"_44-变量提升","4.4 变量提升",[19,78503,78504],{},[3145,78505],{"alt":28,"src":78506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78508,78509],{},[3145,78510],{"alt":28,"src":78511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78513,78514],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78516,78518],{"id":78517},"_45-函数进阶","4.5 函数进阶",[633,78520,78522],{"id":78521},"_451-函数提升","4.5.1 函数提升",[19,78524,78525],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78527,78528],{},"只提升函数声明，不提升函数调用",[53458,78530,78531],{},"\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",[633,78533,78535],{"id":78534},"_452-函数参数","4.5.2 函数参数",[23653,78537,78539],{"id":78538},"_4521-动态参数","4.5.2.1 动态参数",[19,78541,78542],{},[3145,78543],{"alt":28,"src":78544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78546,78547],{},[3145,78548],{"alt":28,"src":78549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78551,78552],{},"箭头函数里边没有arguments",[23653,78554,78556],{"id":78555},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78558,78559],{},[3145,78560],{"alt":28,"src":78561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78563,78564],{},[3145,78565],{"alt":28,"src":78566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78568,78569],{},"剩余参数使用的时候不需要写...",[19,78571,78572],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78574,78575],{},"  function getSum(a,b,...arr) {",[19,78577,78578],{},"  console.log(11)",[19,78580,78581],{},"  }",[19,78583,78584],{},"  getSum(1,2,3,4)",[19,78586,78587],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78589,78590],{},"  getSum(1,2)",[19,78592,78593],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78595,78596],{},[3145,78597],{"alt":28,"src":78598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23653,78600,78602],{"id":78601},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78604,78605],{},[3145,78606],{"alt":28,"src":78607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78609,78610],{},[3145,78611],{"alt":28,"src":78612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78614,78615],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78617,78618],{},"展开运算符可以用于数组之间的合并：",[19,78620,78621],{},"const arr1 = [1, 2, 3]",[19,78623,78624],{},"const arr2 = [3, 4, 5]",[19,78626,78627],{},"const arr = [...arr1, ...arr2]",[19,78629,78630],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78632,78633],{},"剩余参数：函数参数使用，得到真数组",[19,78635,78636],{},"展开运算符：数组中使用，数组展开",[633,78638,78640],{"id":78639},"_453-箭头函数","4.5.3 箭头函数",[23653,78642,78644],{"id":78643},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78646,78647],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78649,78650],{},"它不是万能的！！！",[19,78652,78653],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78655,78656],{},[3145,78657],{"alt":28,"src":78658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78660,1853],{},[19,78662,78663],{},"① 只有一个形参的时候，可以省略小括号：",[19,78665,78666],{},"const fn=x=>{console.log(x)}",[19,78668,78669],{},"② 只有一行代码时可以省略大括号：",[19,78671,78672],{},"const fn=x=>console.log(11)",[19,78674,78675],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78677,78678],{},"const fn=x=>x+x",[19,78680,78681],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78683,78684],{},"⑤ 阻止表单默认提交：",[19,78686,78687],{},"const form = document.querySelector('form')",[19,78689,78690],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78692,78693],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78695,78696],{},"const fn=uname=>({uname:uname})",[19,78698,78699],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78701,78702],{},[3145,78703],{"alt":28,"src":78704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78706,78707],{},[3145,78708],{"alt":28,"src":78709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78711,78712],{},[3145,78713],{"alt":28,"src":78714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78716,78717],{},"一定不要忘记用()，有()就理解为自带return",[23653,78719,78721],{"id":78720},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78723,78724],{},"箭头函数是没有动态参数的arguments",[19,78726,78727],{},[3145,78728],{"alt":28,"src":78729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23653,78731,78733],{"id":78732},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78735,12990],{},[162,78737,78738,78741,78744],{},[165,78739,78740],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[165,78742,78743],{},"事件回调函数使用箭头函数时，this 为全局的 window",[165,78745,78746],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78748,78749],{},[3145,78750],{"alt":28,"src":78751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[23,78753,78755],{"className":54712,"code":78754,"language":54714,"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,78756,78757,78765,78770,78775,78780,78785,78790,78794,78799,78803,78807,78812,78817,78822,78826,78830,78835,78840,78845],{"__ignoreMap":28},[33,78758,78759,78761,78763],{"class":35,"line":36},[33,78760,53789],{"class":59},[33,78762,53458],{"class":52945},[33,78764,52952],{"class":59},[33,78766,78767],{"class":35,"line":43},[33,78768,78769],{"class":59},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[33,78771,78772],{"class":35,"line":130},[33,78773,78774],{"class":59},"    console.log(this) \u002F\u002F指向window\n",[33,78776,78777],{"class":35,"line":146},[33,78778,78779],{"class":59},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[33,78781,78782],{"class":35,"line":267},[33,78783,78784],{"class":59},"    function fn() {\n",[33,78786,78787],{"class":35,"line":275},[33,78788,78789],{"class":59},"      console.log(this)  \u002F\u002F指向window\n",[33,78791,78792],{"class":35,"line":392},[33,78793,3855],{"class":59},[33,78795,78796],{"class":35,"line":406},[33,78797,78798],{"class":59},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[33,78800,78801],{"class":35,"line":418},[33,78802,127],{"emptyLinePlaceholder":126},[33,78804,78805],{"class":35,"line":425},[33,78806,73164],{"class":59},[33,78808,78809],{"class":35,"line":1147},[33,78810,78811],{"class":59},"      name: 'andy',\n",[33,78813,78814],{"class":35,"line":1329},[33,78815,78816],{"class":59},"      sayHai: function () {\n",[33,78818,78819],{"class":35,"line":1341},[33,78820,78821],{"class":59},"        console.log(this)\n",[33,78823,78824],{"class":35,"line":1348},[33,78825,54043],{"class":59},[33,78827,78828],{"class":35,"line":1529},[33,78829,3855],{"class":59},[33,78831,78832],{"class":35,"line":1546},[33,78833,78834],{"class":59},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[33,78836,78837],{"class":35,"line":1551},[33,78838,78839],{"class":59},"    \u002F\u002F 2.箭头函数的this\n",[33,78841,78842],{"class":35,"line":1566},[33,78843,78844],{"class":59},"    const fn = () => console.log(this)\n",[33,78846,78847,78849,78851],{"class":35,"line":1578},[33,78848,54062],{"class":59},[33,78850,53458],{"class":52945},[33,78852,52952],{"class":59},[19,78854,78855],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78857,78858],{},"const fn = () => console.log(this)",[19,78860,78861],{},"fn() \u002F\u002F指向window",[19,78863,78864],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78866,78867],{},"①",[19,78869,78870],{},"const obj = {",[19,78872,78873],{},"uname: 'pink老师',",[19,78875,78876],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78878,1011],{},[19,78880,78881],{},"调用对象里边的函数",[19,78883,78884],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78886,78887],{},"obj.sayHai()",[19,78889,78890],{},"②",[19,78892,78893],{},"const obj1 = {",[19,78895,78873],{},[19,78897,78898],{},"sayHai: function () {",[19,78900,78901],{},"let i = 10",[19,78903,78904],{},"const count = () => {",[19,78906,78907],{},"console.log(this)",[19,78909,78910],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78912,78913],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78915,1011],{},[19,78917,78918],{},"count()",[19,78920,1011],{},[19,78922,1011],{},[19,78924,78925],{},"obj1.sayHai()",[14,78927,78929],{"id":78928},"_46-解构赋值","4.6 解构赋值",[633,78931,78933],{"id":78932},"_461-数组解构","4.6.1 数组解构",[19,78935,78936],{},"以前要是使用数组中的值的话：",[19,78938,78939],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78941,78942],{},"const arr=[100,60,80]",[19,78944,78945],{},"const max=arr[0]",[19,78947,78948],{},"const min=arr[1]",[19,78950,78951],{},"const avg=arr[2]",[19,78953,78954],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78956,78957],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78959,78960],{},"这个写法就类似于上边的那种用很多const的方法",[19,78962,78963],{},[3145,78964],{"alt":28,"src":78965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[23,78967,78969],{"className":52278,"code":78968,"language":52280,"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,78970,78971,78976,78981,78986,78991,78996,79000,79004,79009,79013,79018,79023,79027,79032,79037,79048,79058,79063,79068,79073,79077,79081],{"__ignoreMap":28},[33,78972,78973],{"class":35,"line":36},[33,78974,78975],{"class":59},"①变量之间交换值:\n",[33,78977,78978],{"class":35,"line":43},[33,78979,78980],{"class":59},"let a=1\n",[33,78982,78983],{"class":35,"line":130},[33,78984,78985],{"class":59},"let b=2;\n",[33,78987,78988],{"class":35,"line":146},[33,78989,78990],{"class":59},"必须加这行代码，不然就会报错\n",[33,78992,78993],{"class":35,"line":267},[33,78994,78995],{"class":59},"[b,a]=[a,b]\n",[33,78997,78998],{"class":35,"line":275},[33,78999,127],{"emptyLinePlaceholder":126},[33,79001,79002],{"class":35,"line":392},[33,79003,127],{"emptyLinePlaceholder":126},[33,79005,79006],{"class":35,"line":406},[33,79007,79008],{"class":59},"可以写成下面的方式：\n",[33,79010,79011],{"class":35,"line":418},[33,79012,78980],{"class":59},[33,79014,79015],{"class":35,"line":425},[33,79016,79017],{"class":59},"let b=2\n",[33,79019,79020],{"class":35,"line":1147},[33,79021,79022],{"class":59},";[b,a]=[a,b]\n",[33,79024,79025],{"class":35,"line":1329},[33,79026,127],{"emptyLinePlaceholder":126},[33,79028,79029],{"class":35,"line":1341},[33,79030,79031],{"class":59},"②排序\n",[33,79033,79034],{"class":35,"line":1348},[33,79035,79036],{"class":59},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[33,79038,79039,79042,79045],{"class":35,"line":1529},[33,79040,79041],{"class":59},"for (let i = 0; i ",[33,79043,2726],{"class":79044},"s7hpK",[33,79046,79047],{"class":59}," arr1.length; i++) {\n",[33,79049,79050,79053,79055],{"class":35,"line":1546},[33,79051,79052],{"class":59},"   for (let j = 0; j ",[33,79054,2726],{"class":79044},[33,79056,79057],{"class":59}," arr1.length - 1; j++) {\n",[33,79059,79060],{"class":35,"line":1551},[33,79061,79062],{"class":59},"      if (arr1[j] > arr1[j + 1]) {\n",[33,79064,79065],{"class":35,"line":1566},[33,79066,79067],{"class":59},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[33,79069,79070],{"class":35,"line":1578},[33,79071,79072],{"class":59},"       }\n",[33,79074,79075],{"class":35,"line":1583},[33,79076,5970],{"class":59},[33,79078,79079],{"class":35,"line":3369},[33,79080,3247],{"class":59},[33,79082,79083],{"class":35,"line":3396},[33,79084,79085],{"class":59},"console.log(arr1)\n",[19,79087,79088],{},"数组解构的细节：",[19,79090,79091],{},"①变量多，单元值少",[19,79093,79094],{},[3145,79095],{"alt":28,"src":79096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79098,79099],{},"防止出现undefined的方法：",[19,79101,79102],{},"const [a=0,b=0] =[1]",[19,79104,79105],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79107,79108],{},"②变量少，单元值多",[19,79110,79111],{},[3145,79112],{"alt":28,"src":79113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79115,79116],{},"此时可以使用剩余参数来接收多余的值",[19,79118,79119],{},"const [a,b,...c]=[1,2,3,4]",[19,79121,79122],{},"console.log(c) 输出[3,4]",[19,79124,79125],{},"③可以按需导入，忽略某些返回值",[19,79127,79128],{},[3145,79129],{"alt":28,"src":79130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79132,79133],{},"④支持多维数组的结构",[23,79135,79139],{"className":79136,"code":79137,"language":79138,"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,79140,79141,79169,79185,79200,79215],{"__ignoreMap":28},[33,79142,79143,79145,79147,79149,79151,79153,79155,79157,79160,79162,79164,79166],{"class":35,"line":36},[33,79144,8452],{"class":63},[33,79146,53478],{"class":59},[33,79148,64],{"class":63},[33,79150,53871],{"class":59},[33,79152,2036],{"class":39},[33,79154,14093],{"class":59},[33,79156,1897],{"class":39},[33,79158,79159],{"class":59},", [",[33,79161,1891],{"class":39},[33,79163,14093],{"class":59},[33,79165,2111],{"class":39},[33,79167,79168],{"class":59},"]]\n",[33,79170,79171,79174,79176,79178,79180,79182],{"class":35,"line":43},[33,79172,79173],{"class":59},"console.",[33,79175,59890],{"class":3632},[33,79177,5513],{"class":59},[33,79179,2010],{"class":39},[33,79181,5877],{"class":59},[33,79183,79184],{"class":87},"  \u002F\u002F1\n",[33,79186,79187,79189,79191,79193,79195,79197],{"class":35,"line":130},[33,79188,79173],{"class":59},[33,79190,59890],{"class":3632},[33,79192,5513],{"class":59},[33,79194,2036],{"class":39},[33,79196,5877],{"class":59},[33,79198,79199],{"class":87},"  \u002F\u002F2\n",[33,79201,79202,79204,79206,79208,79210,79212],{"class":35,"line":146},[33,79203,79173],{"class":59},[33,79205,59890],{"class":3632},[33,79207,5513],{"class":59},[33,79209,1897],{"class":39},[33,79211,5877],{"class":59},[33,79213,79214],{"class":87},"  \u002F\u002F[3,4]\n",[33,79216,79217,79219,79221,79223,79225,79227,79229,79231],{"class":35,"line":267},[33,79218,79173],{"class":59},[33,79220,59890],{"class":3632},[33,79222,5513],{"class":59},[33,79224,1897],{"class":39},[33,79226,6562],{"class":59},[33,79228,2010],{"class":39},[33,79230,5877],{"class":59},[33,79232,79233],{"class":87},"  \u002F\u002F3\n",[23,79235,79237],{"className":79136,"code":79236,"language":79138,"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,79238,79239,79266,79277,79288],{"__ignoreMap":28},[33,79240,79241,79243,79246,79248,79250,79252,79254,79256,79258,79260,79262,79264],{"class":35,"line":36},[33,79242,8452],{"class":63},[33,79244,79245],{"class":59}," [a, b, c] ",[33,79247,64],{"class":63},[33,79249,53871],{"class":59},[33,79251,2036],{"class":39},[33,79253,14093],{"class":59},[33,79255,1897],{"class":39},[33,79257,79159],{"class":59},[33,79259,1891],{"class":39},[33,79261,14093],{"class":59},[33,79263,2111],{"class":39},[33,79265,79168],{"class":59},[33,79267,79268,79270,79272,79275],{"class":35,"line":43},[33,79269,79173],{"class":59},[33,79271,59890],{"class":3632},[33,79273,79274],{"class":59},"(a)",[33,79276,79184],{"class":87},[33,79278,79279,79281,79283,79286],{"class":35,"line":130},[33,79280,79173],{"class":59},[33,79282,59890],{"class":3632},[33,79284,79285],{"class":59},"(b)",[33,79287,79199],{"class":87},[33,79289,79290,79292,79294,79297],{"class":35,"line":146},[33,79291,79173],{"class":59},[33,79293,59890],{"class":3632},[33,79295,79296],{"class":59},"(c)",[33,79298,79214],{"class":87},[23,79300,79302],{"className":79136,"code":79301,"language":79138,"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,79303,79304,79331,79341,79351,79361],{"__ignoreMap":28},[33,79305,79306,79308,79311,79313,79315,79317,79319,79321,79323,79325,79327,79329],{"class":35,"line":36},[33,79307,8452],{"class":63},[33,79309,79310],{"class":59}," [a, b, [c, d]] ",[33,79312,64],{"class":63},[33,79314,53871],{"class":59},[33,79316,2036],{"class":39},[33,79318,14093],{"class":59},[33,79320,1897],{"class":39},[33,79322,79159],{"class":59},[33,79324,1891],{"class":39},[33,79326,14093],{"class":59},[33,79328,2111],{"class":39},[33,79330,79168],{"class":59},[33,79332,79333,79335,79337,79339],{"class":35,"line":43},[33,79334,79173],{"class":59},[33,79336,59890],{"class":3632},[33,79338,79274],{"class":59},[33,79340,79184],{"class":87},[33,79342,79343,79345,79347,79349],{"class":35,"line":130},[33,79344,79173],{"class":59},[33,79346,59890],{"class":3632},[33,79348,79285],{"class":59},[33,79350,79199],{"class":87},[33,79352,79353,79355,79357,79359],{"class":35,"line":146},[33,79354,79173],{"class":59},[33,79356,59890],{"class":3632},[33,79358,79296],{"class":59},[33,79360,79233],{"class":87},[33,79362,79363,79365,79367,79370],{"class":35,"line":267},[33,79364,79173],{"class":59},[33,79366,59890],{"class":3632},[33,79368,79369],{"class":59},"(d)",[33,79371,79372],{"class":87},"  \u002F\u002F4\n",[633,79374,79376],{"id":79375},"_462-对象解构","4.6.2 对象解构",[19,79378,79379],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79381,79382],{},"用的非常非常多！！！！！！",[23653,79384,79386],{"id":79385},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79388,79389],{},"基本语法：",[162,79391,79392,79395,79398,79401],{},[165,79393,79394],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[165,79396,79397],{},"对象属性的值将被赋值给与属性名相同的变量",[165,79399,79400],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[165,79402,79403],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[23,79405,79407],{"className":52278,"code":79406,"language":52280,"meta":28,"style":28},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[30,79408,79409,79414,79419,79424,79428],{"__ignoreMap":28},[33,79410,79411],{"class":35,"line":36},[33,79412,79413],{"class":59},"const obj = {\n",[33,79415,79416],{"class":35,"line":43},[33,79417,79418],{"class":59},"   uname: 'pink老师',\n",[33,79420,79421],{"class":35,"line":130},[33,79422,79423],{"class":59},"   age: 18,\n",[33,79425,79426],{"class":35,"line":146},[33,79427,3247],{"class":59},[33,79429,79430],{"class":35,"line":267},[33,79431,79432],{"class":59},"const { uname, age } = obj\n",[19,79434,79435],{},"上方代码这样写等价于：",[19,79437,79438],{},"const uname等价于obj.uname",[19,79440,79441],{},"变量名可以重新改名：",[19,79443,79444],{},"const uname='red老师'",[19,79446,79447],{},"const user={",[19,79449,79450],{},"  uname:'pink老师',",[19,79452,79453],{},"  age:18",[19,79455,1011],{},[19,79457,79458],{},"const {uname,age}=user",[19,79460,79461],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79463,79464],{},"const {旧变量名：新变量名}=对象",[19,79466,79467],{},"const {uname:username,age}=user",[23653,79469,79471],{"id":79470},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79473,79474],{},[3145,79475],{"alt":28,"src":79476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23653,79478,79480],{"id":79479},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79482,79483],{},[3145,79484],{"alt":28,"src":79485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[23,79487,79489],{"className":54712,"code":79488,"language":54714,"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,79490,79491,79499,79504,79509,79514,79519,79524,79529,79534,79539,79543,79548,79553],{"__ignoreMap":28},[33,79492,79493,79495,79497],{"class":35,"line":36},[33,79494,53789],{"class":59},[33,79496,53458],{"class":52945},[33,79498,52952],{"class":59},[33,79500,79501],{"class":35,"line":43},[33,79502,79503],{"class":59},"    const pig = {\n",[33,79505,79506],{"class":35,"line":130},[33,79507,79508],{"class":59},"      name: '佩奇',\n",[33,79510,79511],{"class":35,"line":146},[33,79512,79513],{"class":59},"      family: {\n",[33,79515,79516],{"class":35,"line":267},[33,79517,79518],{"class":59},"        mother: '猪妈妈',\n",[33,79520,79521],{"class":35,"line":275},[33,79522,79523],{"class":59},"        father: '猪爸爸',\n",[33,79525,79526],{"class":35,"line":392},[33,79527,79528],{"class":59},"        sister: '乔治'\n",[33,79530,79531],{"class":35,"line":406},[33,79532,79533],{"class":59},"      },\n",[33,79535,79536],{"class":35,"line":418},[33,79537,79538],{"class":59},"      age: 6\n",[33,79540,79541],{"class":35,"line":425},[33,79542,3855],{"class":59},[33,79544,79545],{"class":35,"line":1147},[33,79546,79547],{"class":59},"    \u002F\u002F 多级对象解构\n",[33,79549,79550],{"class":35,"line":1329},[33,79551,79552],{"class":59},"    const { name, family: { mother, father, sister }, age } = pig\n",[33,79554,79555,79557,79559],{"class":35,"line":1341},[33,79556,54062],{"class":59},[33,79558,53458],{"class":52945},[33,79560,52952],{"class":59},[19,79562,79563],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[23,79565,79568],{"className":79566,"code":79567,"language":78088,"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,79569,79570,79575,79586,79598,79610,79619,79623,79634,79646,79656,79661,79665,79675,79686,79695,79699,79703,79714,79725,79734,79738,79743],{"__ignoreMap":28},[33,79571,79572],{"class":35,"line":36},[33,79573,79574],{"class":87},"    \u002F\u002F 这是后台传递过来的数据\n",[33,79576,79577,79579,79582,79584],{"class":35,"line":43},[33,79578,12879],{"class":63},[33,79580,79581],{"class":59}," msg ",[33,79583,64],{"class":63},[33,79585,17228],{"class":59},[33,79587,79588,79591,79593,79596],{"class":35,"line":130},[33,79589,79590],{"class":117},"      \"code\"",[33,79592,2676],{"class":63},[33,79594,79595],{"class":39}," 200",[33,79597,33116],{"class":59},[33,79599,79600,79603,79605,79608],{"class":35,"line":146},[33,79601,79602],{"class":117},"      \"msg\"",[33,79604,2676],{"class":63},[33,79606,79607],{"class":117}," \"获取新闻列表成功\"",[33,79609,33116],{"class":59},[33,79611,79612,79615,79617],{"class":35,"line":267},[33,79613,79614],{"class":117},"      \"data\"",[33,79616,2676],{"class":63},[33,79618,57091],{"class":59},[33,79620,79621],{"class":35,"line":275},[33,79622,4176],{"class":59},[33,79624,79625,79628,79630,79632],{"class":35,"line":392},[33,79626,79627],{"class":117},"          \"id\"",[33,79629,2676],{"class":63},[33,79631,26774],{"class":39},[33,79633,33116],{"class":59},[33,79635,79636,79639,79641,79644],{"class":35,"line":406},[33,79637,79638],{"class":117},"          \"title\"",[33,79640,2676],{"class":63},[33,79642,79643],{"class":117}," \"5G商用自己，三大运用商收入下降\"",[33,79645,33116],{"class":59},[33,79647,79648,79651,79653],{"class":35,"line":418},[33,79649,79650],{"class":117},"          \"count\"",[33,79652,2676],{"class":63},[33,79654,79655],{"class":39}," 58\n",[33,79657,79658],{"class":35,"line":425},[33,79659,79660],{"class":59},"        },\n",[33,79662,79663],{"class":35,"line":1147},[33,79664,4176],{"class":59},[33,79666,79667,79669,79671,79673],{"class":35,"line":1329},[33,79668,79627],{"class":117},[33,79670,2676],{"class":63},[33,79672,16413],{"class":39},[33,79674,33116],{"class":59},[33,79676,79677,79679,79681,79684],{"class":35,"line":1341},[33,79678,79638],{"class":117},[33,79680,2676],{"class":63},[33,79682,79683],{"class":117}," \"国际媒体头条速览\"",[33,79685,33116],{"class":59},[33,79687,79688,79690,79692],{"class":35,"line":1348},[33,79689,79650],{"class":117},[33,79691,2676],{"class":63},[33,79693,79694],{"class":39}," 56\n",[33,79696,79697],{"class":35,"line":1529},[33,79698,79660],{"class":59},[33,79700,79701],{"class":35,"line":1546},[33,79702,4176],{"class":59},[33,79704,79705,79707,79709,79712],{"class":35,"line":1551},[33,79706,79627],{"class":117},[33,79708,2676],{"class":63},[33,79710,79711],{"class":39}," 3",[33,79713,33116],{"class":59},[33,79715,79716,79718,79720,79723],{"class":35,"line":1566},[33,79717,79638],{"class":117},[33,79719,2676],{"class":63},[33,79721,79722],{"class":117}," \"乌克兰和俄罗斯持续冲突\"",[33,79724,33116],{"class":59},[33,79726,79727,79729,79731],{"class":35,"line":1578},[33,79728,79650],{"class":117},[33,79730,2676],{"class":63},[33,79732,79733],{"class":39}," 1669\n",[33,79735,79736],{"class":35,"line":1583},[33,79737,79660],{"class":59},[33,79739,79740],{"class":35,"line":3369},[33,79741,79742],{"class":59},"      ]\n",[33,79744,79745],{"class":35,"line":3396},[33,79746,3855],{"class":59},[19,79748,79749],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79751,79752],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79754,79755],{},"\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,79757,79758],{},"function({data}) {",[19,79760,79761],{},"console.log(data)",[19,79763,1011],{},[19,79765,79766],{},"render(msg)",[19,79768,79769],{},"实参传递给形参的时候解构了",[19,79771,79772],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79774,79775],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79777,79778],{},"function render({data:mydata}) {",[19,79780,79781],{},"  console.log(data)",[19,79783,1011],{},[633,79785,79787],{"id":79786},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79789,79790],{},"有两种情况：一个是数组结构，一个是立即执行函数",[162,79792,79793],{},[165,79794,79795],{},"如果对一个数组进行遍历，有两种方式：",[19,79797,79798],{},"①法1",[19,79800,79801],{},"const arr=[1,2,3]",[19,79803,79804],{},"arr.map(function(item,index) {",[19,79806,79807],{},"  console.log(item)",[19,79809,54109],{},[19,79811,79812],{},[3145,79813],{"alt":28,"src":79814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79816,79817],{},"②法2",[19,79819,79820],{},"const str='pink'",[19,79822,79823],{},"[1,2,3].map(function(item,index) {",[19,79825,79826],{},"console.log(item)",[19,79828,54109],{},[19,79830,79831],{},[3145,79832],{"alt":28,"src":79833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79835,79836],{},"此时会报错",[19,79838,79839],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79841,79826],{},[19,79843,54109],{},[19,79845,79846],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79848,79850],{"id":79849},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79852,79853],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79855,79856],{},"可以理解为加强版的for循环",[19,79858,79859],{},[3145,79860],{"alt":28,"src":79861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79863,79864],{},"里边不写return，不返回数组，只遍历不返回",[19,79866,79867],{},"map是返回数组",[19,79869,79870],{},"forEach主要用于遍历数组对象",[23,79872,79874],{"className":54712,"code":79873,"language":54714,"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,79875,79876,79884,79889,79894,79899,79904,79908,79913],{"__ignoreMap":28},[33,79877,79878,79880,79882],{"class":35,"line":36},[33,79879,53789],{"class":59},[33,79881,53458],{"class":52945},[33,79883,52952],{"class":59},[33,79885,79886],{"class":35,"line":43},[33,79887,79888],{"class":59},"    const arr = ['red', 'green', 'pink']\n",[33,79890,79891],{"class":35,"line":130},[33,79892,79893],{"class":59},"    const result = arr.forEach(function (item, index) {\n",[33,79895,79896],{"class":35,"line":146},[33,79897,79898],{"class":59},"      console.log(item)\n",[33,79900,79901],{"class":35,"line":267},[33,79902,79903],{"class":59},"      console.log(index)\n",[33,79905,79906],{"class":35,"line":275},[33,79907,35108],{"class":59},[33,79909,79910],{"class":35,"line":392},[33,79911,79912],{"class":59},"    console.log(result)\n",[33,79914,79915,79917,79919],{"class":35,"line":406},[33,79916,54062],{"class":59},[33,79918,53458],{"class":52945},[33,79920,52952],{"class":59},[19,79922,79923],{},[3145,79924],{"alt":28,"src":79925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79927,79929],{"id":79928},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79931,79932],{},[3145,79933],{"alt":28,"src":79934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79936,79937],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[23,79939,79941],{"className":54712,"code":79940,"language":54714,"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,79942,79943,79951,79959,79964,79969,79973,79977,79982,79986,79991,79999],{"__ignoreMap":28},[33,79944,79945,79947,79949],{"class":35,"line":36},[33,79946,2726],{"class":59},[33,79948,53445],{"class":52945},[33,79950,52952],{"class":59},[33,79952,79953,79955,79957],{"class":35,"line":43},[33,79954,53789],{"class":59},[33,79956,53458],{"class":52945},[33,79958,52952],{"class":59},[33,79960,79961],{"class":35,"line":130},[33,79962,79963],{"class":59},"    const arr = [10, 20, 30]\n",[33,79965,79966],{"class":35,"line":146},[33,79967,79968],{"class":59},"    const newArr = arr.filter(function (item, index) {\n",[33,79970,79971],{"class":35,"line":267},[33,79972,79898],{"class":59},[33,79974,79975],{"class":35,"line":275},[33,79976,79903],{"class":59},[33,79978,79979],{"class":35,"line":392},[33,79980,79981],{"class":59},"      return item >= 20\n",[33,79983,79984],{"class":35,"line":406},[33,79985,35108],{"class":59},[33,79987,79988],{"class":35,"line":418},[33,79989,79990],{"class":59},"    console.log(newArr)\n",[33,79992,79993,79995,79997],{"class":35,"line":425},[33,79994,54062],{"class":59},[33,79996,53458],{"class":52945},[33,79998,52952],{"class":59},[33,80000,80001,80003,80005],{"class":35,"line":1147},[33,80002,53430],{"class":59},[33,80004,53445],{"class":52945},[33,80006,52952],{"class":59},[19,80008,80009],{},"这个也可以写成箭头函数：",[23,80011,80013],{"className":52278,"code":80012,"language":52280,"meta":28,"style":28},"const newArr = arr.filter(item => item >= 20)\n",[30,80014,80015],{"__ignoreMap":28},[33,80016,80017],{"class":35,"line":36},[33,80018,80012],{"class":59},[14,80020,80022],{"id":80021},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80024,80025],{},[3145,80026],{"alt":28,"src":80027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80029,80030],{},"步骤：",[19,80032,80033],{},"①：渲染页面模块",[2822,80035,80036,80039],{},[165,80037,80038],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[165,80040,80041],{},"用forEach+字符串的形式",[19,80043,80044],{},"②：点击不同需求，显示不同页面内容",[2822,80046,80047,80050,80053,80056,80059],{},[165,80048,80049],{},"点击采取事件委托方式 .filter",[165,80051,80052],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[165,80054,80055],{},"筛选条件是根据点击的 data-index 来判断",[165,80057,80058],{},"可以使用对象解构，把事件对象解构",[165,80060,80061],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[23,80063,80065],{"className":52278,"code":80064,"language":52280,"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,80066,80067,80077,80091,80095,80103,80117,80137,80149,80157,80163,80173,80183,80193,80197,80201,80207,80220,80232,80242,80254,80258,80262,80269,80282,80294,80311,80329,80342,80346,80350,80362,80372,80376,80380,80387,80428,80455,80465,80469,80473,80481,80493,80497,80501,80509,80521,80533,80544,80548,80552,80561,80573,80584,80588,80592,80601,80613,80625,80629,80633,80640,80650,80662,80674,80689,80693,80697,80705,80721,80731,80741,80751,80763,80767,80771,80781,80792,80802,80806,80814,80822,80826,80834,80849,80875,80900,80925,80944,80952,80966,80971,80976,80981,80986,80991,80999,81007,81012,81023,81028,81038,81048,81058,81068,81072,81076,81085,81094,81103,81112,81116,81120,81129,81138,81147,81156,81160,81164,81173,81182,81191,81200,81204,81208,81217,81226,81235,81244,81248,81252,81261,81270,81279,81288,81292,81296,81305,81314,81323,81332,81336,81340,81349,81358,81366,81375,81379,81383,81387,81392,81404,81409,81421,81425,81442,81469,81478,81483,81493,81503,81512,81517,81522,81526,81531,81548,81552,81557,81565,81570,81597,81602,81622,81627,81639,81644,81649,81654,81665,81679,81716,81734,81767,81784,81808,81812,81817,81823,81827,81831,81835,81843,81851,81855],{"__ignoreMap":28},[33,80068,80069,80071,80073,80075],{"class":35,"line":36},[33,80070,52942],{"class":59},[33,80072,52946],{"class":52945},[33,80074,52949],{"class":3632},[33,80076,52952],{"class":59},[33,80078,80079,80081,80083,80085,80087,80089],{"class":35,"line":43},[33,80080,2726],{"class":59},[33,80082,52280],{"class":52945},[33,80084,52961],{"class":3632},[33,80086,64],{"class":59},[33,80088,52966],{"class":117},[33,80090,52952],{"class":59},[33,80092,80093],{"class":35,"line":130},[33,80094,127],{"emptyLinePlaceholder":126},[33,80096,80097,80099,80101],{"class":35,"line":146},[33,80098,2726],{"class":59},[33,80100,52979],{"class":52945},[33,80102,52952],{"class":59},[33,80104,80105,80107,80109,80111,80113,80115],{"class":35,"line":267},[33,80106,53789],{"class":59},[33,80108,52989],{"class":52945},[33,80110,52992],{"class":3632},[33,80112,64],{"class":59},[33,80114,52997],{"class":117},[33,80116,52952],{"class":59},[33,80118,80119,80121,80123,80125,80127,80129,80131,80133,80135],{"class":35,"line":275},[33,80120,53789],{"class":59},[33,80122,52989],{"class":52945},[33,80124,16578],{"class":3632},[33,80126,64],{"class":59},[33,80128,53036],{"class":117},[33,80130,53016],{"class":3632},[33,80132,64],{"class":59},[33,80134,53043],{"class":117},[33,80136,52952],{"class":59},[33,80138,80139,80141,80143,80145,80147],{"class":35,"line":392},[33,80140,53789],{"class":59},[33,80142,53052],{"class":52945},[33,80144,53055],{"class":59},[33,80146,53052],{"class":52945},[33,80148,52952],{"class":59},[33,80150,80151,80153,80155],{"class":35,"line":406},[33,80152,53789],{"class":59},[33,80154,1729],{"class":52945},[33,80156,52952],{"class":59},[33,80158,80159,80161],{"class":35,"line":418},[33,80160,8063],{"class":52945},[33,80162,17228],{"class":59},[33,80164,80165,80167,80169,80171],{"class":35,"line":425},[33,80166,56339],{"class":39},[33,80168,53082],{"class":59},[33,80170,2010],{"class":39},[33,80172,2976],{"class":59},[33,80174,80175,80177,80179,80181],{"class":35,"line":1147},[33,80176,56350],{"class":39},[33,80178,53082],{"class":59},[33,80180,2010],{"class":39},[33,80182,2976],{"class":59},[33,80184,80185,80187,80189,80191],{"class":35,"line":1329},[33,80186,74237],{"class":39},[33,80188,53082],{"class":59},[33,80190,62148],{"class":39},[33,80192,2976],{"class":59},[33,80194,80195],{"class":35,"line":1341},[33,80196,3855],{"class":59},[33,80198,80199],{"class":35,"line":1348},[33,80200,127],{"emptyLinePlaceholder":126},[33,80202,80203,80205],{"class":35,"line":1529},[33,80204,63765],{"class":3632},[33,80206,17228],{"class":59},[33,80208,80209,80211,80213,80216,80218],{"class":35,"line":1546},[33,80210,56415],{"class":39},[33,80212,53082],{"class":59},[33,80214,80215],{"class":39},"990",[33,80217,53137],{"class":63},[33,80219,2976],{"class":59},[33,80221,80222,80224,80226,80228,80230],{"class":35,"line":1551},[33,80223,56350],{"class":39},[33,80225,53082],{"class":59},[33,80227,2010],{"class":39},[33,80229,53201],{"class":39},[33,80231,2976],{"class":59},[33,80233,80234,80236,80238,80240],{"class":35,"line":1566},[33,80235,56653],{"class":39},[33,80237,53082],{"class":59},[33,80239,53122],{"class":39},[33,80241,2976],{"class":59},[33,80243,80244,80247,80249,80252],{"class":35,"line":1578},[33,80245,80246],{"class":39},"      flex-wrap",[33,80248,53082],{"class":59},[33,80250,80251],{"class":39},"wrap",[33,80253,2976],{"class":59},[33,80255,80256],{"class":35,"line":1583},[33,80257,3855],{"class":59},[33,80259,80260],{"class":35,"line":3369},[33,80261,127],{"emptyLinePlaceholder":126},[33,80263,80264,80267],{"class":35,"line":3396},[33,80265,80266],{"class":3632},"    .item",[33,80268,17228],{"class":59},[33,80270,80271,80273,80275,80278,80280],{"class":35,"line":3401},[33,80272,56415],{"class":39},[33,80274,53082],{"class":59},[33,80276,80277],{"class":39},"240",[33,80279,53137],{"class":63},[33,80281,2976],{"class":59},[33,80283,80284,80286,80288,80290,80292],{"class":35,"line":3418},[33,80285,63642],{"class":39},[33,80287,53082],{"class":59},[33,80289,2264],{"class":39},[33,80291,53137],{"class":63},[33,80293,2976],{"class":59},[33,80295,80296,80298,80300,80302,80304,80307,80309],{"class":35,"line":3423},[33,80297,56339],{"class":39},[33,80299,53082],{"class":59},[33,80301,2517],{"class":39},[33,80303,53137],{"class":63},[33,80305,80306],{"class":39}," 30",[33,80308,53137],{"class":63},[33,80310,2976],{"class":59},[33,80312,80313,80315,80317,80319,80322,80325,80327],{"class":35,"line":3428},[33,80314,63502],{"class":39},[33,80316,53082],{"class":59},[33,80318,29777],{"class":39},[33,80320,80321],{"class":39}," ease",[33,80323,80324],{"class":39}," .5",[33,80326,2512],{"class":63},[33,80328,2976],{"class":59},[33,80330,80331,80334,80336,80338,80340],{"class":35,"line":3433},[33,80332,80333],{"class":39},"      margin-bottom",[33,80335,53082],{"class":59},[33,80337,2517],{"class":39},[33,80339,53137],{"class":63},[33,80341,2976],{"class":59},[33,80343,80344],{"class":35,"line":3447},[33,80345,3855],{"class":59},[33,80347,80348],{"class":35,"line":3452},[33,80349,127],{"emptyLinePlaceholder":126},[33,80351,80352,80355,80357,80360],{"class":35,"line":4243},[33,80353,80354],{"class":3632},"    .item:nth-child",[33,80356,109],{"class":59},[33,80358,80359],{"class":39},"4n",[33,80361,14100],{"class":59},[33,80363,80364,80366,80368,80370],{"class":35,"line":4257},[33,80365,63642],{"class":39},[33,80367,53082],{"class":59},[33,80369,2010],{"class":39},[33,80371,2976],{"class":59},[33,80373,80374],{"class":35,"line":4265},[33,80375,3855],{"class":59},[33,80377,80378],{"class":35,"line":4270},[33,80379,127],{"emptyLinePlaceholder":126},[33,80381,80382,80385],{"class":35,"line":4276},[33,80383,80384],{"class":3632},"    .item:hover",[33,80386,17228],{"class":59},[33,80388,80389,80392,80394,80396,80398,80400,80402,80404,80406,80409,80411,80413,80415,80417,80419,80421,80423,80426],{"class":35,"line":4282},[33,80390,80391],{"class":39},"      box-shadow",[33,80393,53082],{"class":59},[33,80395,2010],{"class":39},[33,80397,53137],{"class":63},[33,80399,829],{"class":39},[33,80401,53137],{"class":63},[33,80403,3816],{"class":39},[33,80405,53137],{"class":63},[33,80407,80408],{"class":39}," rgba",[33,80410,109],{"class":59},[33,80412,2010],{"class":39},[33,80414,14093],{"class":59},[33,80416,2010],{"class":39},[33,80418,14093],{"class":59},[33,80420,2010],{"class":39},[33,80422,14093],{"class":59},[33,80424,80425],{"class":39},".2",[33,80427,4385],{"class":59},[33,80429,80430,80433,80435,80438,80440,80442,80444,80447,80449,80451,80453],{"class":35,"line":4287},[33,80431,80432],{"class":39},"      transform",[33,80434,53082],{"class":59},[33,80436,80437],{"class":39},"translate3d",[33,80439,109],{"class":59},[33,80441,2010],{"class":39},[33,80443,14093],{"class":59},[33,80445,80446],{"class":39},"-4",[33,80448,53137],{"class":63},[33,80450,14093],{"class":59},[33,80452,2010],{"class":39},[33,80454,4385],{"class":59},[33,80456,80457,80459,80461,80463],{"class":35,"line":9608},[33,80458,63667],{"class":39},[33,80460,53082],{"class":59},[33,80462,63672],{"class":39},[33,80464,2976],{"class":59},[33,80466,80467],{"class":35,"line":9632},[33,80468,3855],{"class":59},[33,80470,80471],{"class":35,"line":9637},[33,80472,127],{"emptyLinePlaceholder":126},[33,80474,80475,80477,80479],{"class":35,"line":9643},[33,80476,80266],{"class":3632},[33,80478,57259],{"class":52945},[33,80480,17228],{"class":59},[33,80482,80483,80485,80487,80489,80491],{"class":35,"line":9670},[33,80484,56415],{"class":39},[33,80486,53082],{"class":59},[33,80488,2129],{"class":39},[33,80490,2146],{"class":63},[33,80492,2976],{"class":59},[33,80494,80495],{"class":35,"line":9675},[33,80496,3855],{"class":59},[33,80498,80499],{"class":35,"line":9681},[33,80500,127],{"emptyLinePlaceholder":126},[33,80502,80503,80505,80507],{"class":35,"line":9693},[33,80504,80266],{"class":3632},[33,80506,63946],{"class":3632},[33,80508,17228],{"class":59},[33,80510,80511,80513,80515,80517,80519],{"class":35,"line":9705},[33,80512,56566],{"class":39},[33,80514,53082],{"class":59},[33,80516,2467],{"class":39},[33,80518,53137],{"class":63},[33,80520,2976],{"class":59},[33,80522,80523,80525,80527,80529,80531],{"class":35,"line":9717},[33,80524,80333],{"class":39},[33,80526,53082],{"class":59},[33,80528,2264],{"class":39},[33,80530,53137],{"class":63},[33,80532,2976],{"class":59},[33,80534,80535,80537,80539,80542],{"class":35,"line":11375},[33,80536,59059],{"class":39},[33,80538,53082],{"class":59},[33,80540,80541],{"class":39},"#666",[33,80543,2976],{"class":59},[33,80545,80546],{"class":35,"line":11400},[33,80547,3855],{"class":59},[33,80549,80550],{"class":35,"line":11423},[33,80551,127],{"emptyLinePlaceholder":126},[33,80553,80554,80556,80559],{"class":35,"line":11447},[33,80555,80266],{"class":3632},[33,80557,80558],{"class":3632}," .price",[33,80560,17228],{"class":59},[33,80562,80563,80565,80567,80569,80571],{"class":35,"line":11452},[33,80564,56566],{"class":39},[33,80566,53082],{"class":59},[33,80568,2567],{"class":39},[33,80570,53137],{"class":63},[33,80572,2976],{"class":59},[33,80574,80575,80577,80579,80582],{"class":35,"line":11457},[33,80576,59059],{"class":39},[33,80578,53082],{"class":59},[33,80580,80581],{"class":39},"firebrick",[33,80583,2976],{"class":59},[33,80585,80586],{"class":35,"line":11462},[33,80587,3855],{"class":59},[33,80589,80590],{"class":35,"line":11471},[33,80591,127],{"emptyLinePlaceholder":126},[33,80593,80594,80596,80599],{"class":35,"line":11476},[33,80595,80266],{"class":3632},[33,80597,80598],{"class":3632}," .price::before",[33,80600,17228],{"class":59},[33,80602,80603,80606,80608,80611],{"class":35,"line":11482},[33,80604,80605],{"class":39},"      content",[33,80607,53082],{"class":59},[33,80609,80610],{"class":117},"'￥'",[33,80612,2976],{"class":59},[33,80614,80615,80617,80619,80621,80623],{"class":35,"line":11503},[33,80616,56566],{"class":39},[33,80618,53082],{"class":59},[33,80620,2366],{"class":39},[33,80622,53137],{"class":63},[33,80624,2976],{"class":59},[33,80626,80627],{"class":35,"line":11509},[33,80628,3855],{"class":59},[33,80630,80631],{"class":35,"line":11523},[33,80632,127],{"emptyLinePlaceholder":126},[33,80634,80635,80638],{"class":35,"line":11529},[33,80636,80637],{"class":3632},"    .filter",[33,80639,17228],{"class":59},[33,80641,80642,80644,80646,80648],{"class":35,"line":11556},[33,80643,56653],{"class":39},[33,80645,53082],{"class":59},[33,80647,53122],{"class":39},[33,80649,2976],{"class":59},[33,80651,80652,80654,80656,80658,80660],{"class":35,"line":11565},[33,80653,56415],{"class":39},[33,80655,53082],{"class":59},[33,80657,80215],{"class":39},[33,80659,53137],{"class":63},[33,80661,2976],{"class":59},[33,80663,80664,80666,80668,80670,80672],{"class":35,"line":11571},[33,80665,56350],{"class":39},[33,80667,53082],{"class":59},[33,80669,2010],{"class":39},[33,80671,53201],{"class":39},[33,80673,2976],{"class":59},[33,80675,80676,80678,80680,80682,80684,80686],{"class":35,"line":11579},[33,80677,56339],{"class":39},[33,80679,53082],{"class":59},[33,80681,2473],{"class":39},[33,80683,53137],{"class":63},[33,80685,80306],{"class":39},[33,80687,80688],{"class":63},"px\n",[33,80690,80691],{"class":35,"line":11584},[33,80692,3855],{"class":59},[33,80694,80695],{"class":35,"line":18259},[33,80696,127],{"emptyLinePlaceholder":126},[33,80698,80699,80701,80703],{"class":35,"line":18265},[33,80700,80637],{"class":3632},[33,80702,3081],{"class":52945},[33,80704,17228],{"class":59},[33,80706,80707,80709,80711,80713,80715,80717,80719],{"class":35,"line":18288},[33,80708,56339],{"class":39},[33,80710,53082],{"class":59},[33,80712,2264],{"class":39},[33,80714,53137],{"class":63},[33,80716,10610],{"class":39},[33,80718,53137],{"class":63},[33,80720,2976],{"class":59},[33,80722,80723,80725,80727,80729],{"class":35,"line":18294},[33,80724,63363],{"class":39},[33,80726,53082],{"class":59},[33,80728,63460],{"class":39},[33,80730,2976],{"class":59},[33,80732,80733,80735,80737,80739],{"class":35,"line":18317},[33,80734,59059],{"class":39},[33,80736,53082],{"class":59},[33,80738,80541],{"class":39},[33,80740,2976],{"class":59},[33,80742,80743,80745,80747,80749],{"class":35,"line":18331},[33,80744,65612],{"class":39},[33,80746,53082],{"class":59},[33,80748,56381],{"class":39},[33,80750,2976],{"class":59},[33,80752,80753,80755,80757,80759,80761],{"class":35,"line":18351},[33,80754,63392],{"class":39},[33,80756,53082],{"class":59},[33,80758,2517],{"class":39},[33,80760,53137],{"class":63},[33,80762,2976],{"class":59},[33,80764,80765],{"class":35,"line":18357},[33,80766,3855],{"class":59},[33,80768,80769],{"class":35,"line":18368},[33,80770,127],{"emptyLinePlaceholder":126},[33,80772,80773,80775,80777,80779],{"class":35,"line":18391},[33,80774,80637],{"class":3632},[33,80776,3081],{"class":52945},[33,80778,63542],{"class":3632},[33,80780,17228],{"class":59},[33,80782,80783,80785,80787,80790],{"class":35,"line":18413},[33,80784,56528],{"class":39},[33,80786,53082],{"class":59},[33,80788,80789],{"class":39},"#05943c",[33,80791,2976],{"class":59},[33,80793,80794,80796,80798,80800],{"class":35,"line":18418},[33,80795,59059],{"class":39},[33,80797,53082],{"class":59},[33,80799,62484],{"class":39},[33,80801,2976],{"class":59},[33,80803,80804],{"class":35,"line":18424},[33,80805,3855],{"class":59},[33,80807,80808,80810,80812],{"class":35,"line":18438},[33,80809,54062],{"class":59},[33,80811,1729],{"class":52945},[33,80813,52952],{"class":59},[33,80815,80816,80818,80820],{"class":35,"line":18451},[33,80817,53430],{"class":59},[33,80819,52979],{"class":52945},[33,80821,52952],{"class":59},[33,80823,80824],{"class":35,"line":18456},[33,80825,127],{"emptyLinePlaceholder":126},[33,80827,80828,80830,80832],{"class":35,"line":18470},[33,80829,2726],{"class":59},[33,80831,53445],{"class":52945},[33,80833,52952],{"class":59},[33,80835,80836,80838,80840,80842,80844,80847],{"class":35,"line":18475},[33,80837,53789],{"class":59},[33,80839,53256],{"class":52945},[33,80841,55131],{"class":3632},[33,80843,64],{"class":59},[33,80845,80846],{"class":117},"\"filter\"",[33,80848,52952],{"class":59},[33,80850,80851,80853,80855,80857,80859,80861,80864,80866,80868,80871,80873],{"class":35,"line":18481},[33,80852,52986],{"class":59},[33,80854,2057],{"class":52945},[33,80856,62699],{"class":3632},[33,80858,64],{"class":59},[33,80860,62704],{"class":117},[33,80862,80863],{"class":3632}," data-index",[33,80865,64],{"class":59},[33,80867,5341],{"class":117},[33,80869,80870],{"class":59},">0-100元\u003C\u002F",[33,80872,2057],{"class":52945},[33,80874,52952],{"class":59},[33,80876,80877,80879,80881,80883,80885,80887,80889,80891,80893,80896,80898],{"class":35,"line":18486},[33,80878,52986],{"class":59},[33,80880,2057],{"class":52945},[33,80882,62699],{"class":3632},[33,80884,64],{"class":59},[33,80886,62704],{"class":117},[33,80888,80863],{"class":3632},[33,80890,64],{"class":59},[33,80892,5364],{"class":117},[33,80894,80895],{"class":59},">100-300元\u003C\u002F",[33,80897,2057],{"class":52945},[33,80899,52952],{"class":59},[33,80901,80902,80904,80906,80908,80910,80912,80914,80916,80918,80921,80923],{"class":35,"line":18500},[33,80903,52986],{"class":59},[33,80905,2057],{"class":52945},[33,80907,62699],{"class":3632},[33,80909,64],{"class":59},[33,80911,62704],{"class":117},[33,80913,80863],{"class":3632},[33,80915,64],{"class":59},[33,80917,5377],{"class":117},[33,80919,80920],{"class":59},">300元以上\u003C\u002F",[33,80922,2057],{"class":52945},[33,80924,52952],{"class":59},[33,80926,80927,80929,80931,80933,80935,80937,80940,80942],{"class":35,"line":18505},[33,80928,52986],{"class":59},[33,80930,2057],{"class":52945},[33,80932,62699],{"class":3632},[33,80934,64],{"class":59},[33,80936,62704],{"class":117},[33,80938,80939],{"class":59},">全部区间\u003C\u002F",[33,80941,2057],{"class":52945},[33,80943,52952],{"class":59},[33,80945,80946,80948,80950],{"class":35,"line":18510},[33,80947,54062],{"class":59},[33,80949,53256],{"class":52945},[33,80951,52952],{"class":59},[33,80953,80954,80956,80958,80960,80962,80964],{"class":35,"line":18524},[33,80955,53789],{"class":59},[33,80957,53256],{"class":52945},[33,80959,55131],{"class":3632},[33,80961,64],{"class":59},[33,80963,64250],{"class":117},[33,80965,52952],{"class":59},[33,80967,80968],{"class":35,"line":18536},[33,80969,80970],{"class":87},"    \u003C!-- \u003Cdiv class=\"item\">\n",[33,80972,80973],{"class":35,"line":18541},[33,80974,80975],{"class":87},"      \u003Cimg src=\"\" alt=\"\">\n",[33,80977,80978],{"class":35,"line":18554},[33,80979,80980],{"class":87},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[33,80982,80983],{"class":35,"line":18559},[33,80984,80985],{"class":87},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[33,80987,80988],{"class":35,"line":18564},[33,80989,80990],{"class":87},"    \u003C\u002Fdiv> -->\n",[33,80992,80993,80995,80997],{"class":35,"line":18569},[33,80994,54062],{"class":59},[33,80996,53256],{"class":52945},[33,80998,52952],{"class":59},[33,81000,81001,81003,81005],{"class":35,"line":18582},[33,81002,53789],{"class":59},[33,81004,53458],{"class":52945},[33,81006,52952],{"class":59},[33,81008,81009],{"class":35,"line":18587},[33,81010,81011],{"class":87},"    \u002F\u002F 2. 初始化数据\n",[33,81013,81014,81016,81019,81021],{"class":35,"line":34280},[33,81015,12879],{"class":63},[33,81017,81018],{"class":39}," goodsList",[33,81020,15222],{"class":63},[33,81022,57091],{"class":59},[33,81024,81025],{"class":35,"line":34286},[33,81026,81027],{"class":59},"      {\n",[33,81029,81030,81033,81036],{"class":35,"line":34292},[33,81031,81032],{"class":59},"        id: ",[33,81034,81035],{"class":117},"'4001172'",[33,81037,33116],{"class":59},[33,81039,81040,81043,81046],{"class":35,"line":34298},[33,81041,81042],{"class":59},"        name: ",[33,81044,81045],{"class":117},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[33,81047,33116],{"class":59},[33,81049,81050,81053,81056],{"class":35,"line":34304},[33,81051,81052],{"class":59},"        price: ",[33,81054,81055],{"class":117},"'289.00'",[33,81057,33116],{"class":59},[33,81059,81060,81063,81066],{"class":35,"line":34315},[33,81061,81062],{"class":59},"        picture: ",[33,81064,81065],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[33,81067,33116],{"class":59},[33,81069,81070],{"class":35,"line":34321},[33,81071,79533],{"class":59},[33,81073,81074],{"class":35,"line":34341},[33,81075,81027],{"class":59},[33,81077,81078,81080,81083],{"class":35,"line":34347},[33,81079,81032],{"class":59},[33,81081,81082],{"class":117},"'4001594'",[33,81084,33116],{"class":59},[33,81086,81087,81089,81092],{"class":35,"line":34358},[33,81088,81042],{"class":59},[33,81090,81091],{"class":117},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[33,81093,33116],{"class":59},[33,81095,81096,81098,81101],{"class":35,"line":34364},[33,81097,81052],{"class":59},[33,81099,81100],{"class":117},"'288.00'",[33,81102,33116],{"class":59},[33,81104,81105,81107,81110],{"class":35,"line":34370},[33,81106,81062],{"class":59},[33,81108,81109],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[33,81111,33116],{"class":59},[33,81113,81114],{"class":35,"line":34376},[33,81115,79533],{"class":59},[33,81117,81118],{"class":35,"line":34382},[33,81119,81027],{"class":59},[33,81121,81122,81124,81127],{"class":35,"line":34388},[33,81123,81032],{"class":59},[33,81125,81126],{"class":117},"'4001009'",[33,81128,33116],{"class":59},[33,81130,81131,81133,81136],{"class":35,"line":34394},[33,81132,81042],{"class":59},[33,81134,81135],{"class":117},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[33,81137,33116],{"class":59},[33,81139,81140,81142,81145],{"class":35,"line":34400},[33,81141,81052],{"class":59},[33,81143,81144],{"class":117},"'109.00'",[33,81146,33116],{"class":59},[33,81148,81149,81151,81154],{"class":35,"line":34420},[33,81150,81062],{"class":59},[33,81152,81153],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[33,81155,33116],{"class":59},[33,81157,81158],{"class":35,"line":34426},[33,81159,79533],{"class":59},[33,81161,81162],{"class":35,"line":34442},[33,81163,81027],{"class":59},[33,81165,81166,81168,81171],{"class":35,"line":34448},[33,81167,81032],{"class":59},[33,81169,81170],{"class":117},"'4001874'",[33,81172,33116],{"class":59},[33,81174,81175,81177,81180],{"class":35,"line":34462},[33,81176,81042],{"class":59},[33,81178,81179],{"class":117},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[33,81181,33116],{"class":59},[33,81183,81184,81186,81189],{"class":35,"line":34468},[33,81185,81052],{"class":59},[33,81187,81188],{"class":117},"'488.00'",[33,81190,33116],{"class":59},[33,81192,81193,81195,81198],{"class":35,"line":34483},[33,81194,81062],{"class":59},[33,81196,81197],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[33,81199,33116],{"class":59},[33,81201,81202],{"class":35,"line":34489},[33,81203,79533],{"class":59},[33,81205,81206],{"class":35,"line":34498},[33,81207,81027],{"class":59},[33,81209,81210,81212,81215],{"class":35,"line":34504},[33,81211,81032],{"class":59},[33,81213,81214],{"class":117},"'4001649'",[33,81216,33116],{"class":59},[33,81218,81219,81221,81224],{"class":35,"line":34513},[33,81220,81042],{"class":59},[33,81222,81223],{"class":117},"'大师监制龙泉青瓷茶叶罐'",[33,81225,33116],{"class":59},[33,81227,81228,81230,81233],{"class":35,"line":34519},[33,81229,81052],{"class":59},[33,81231,81232],{"class":117},"'139.00'",[33,81234,33116],{"class":59},[33,81236,81237,81239,81242],{"class":35,"line":34525},[33,81238,81062],{"class":59},[33,81240,81241],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[33,81243,33116],{"class":59},[33,81245,81246],{"class":35,"line":34534},[33,81247,79533],{"class":59},[33,81249,81250],{"class":35,"line":34540},[33,81251,81027],{"class":59},[33,81253,81254,81256,81259],{"class":35,"line":34551},[33,81255,81032],{"class":59},[33,81257,81258],{"class":117},"'3997185'",[33,81260,33116],{"class":59},[33,81262,81263,81265,81268],{"class":35,"line":34557},[33,81264,81042],{"class":59},[33,81266,81267],{"class":117},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[33,81269,33116],{"class":59},[33,81271,81272,81274,81277],{"class":35,"line":34576},[33,81273,81052],{"class":59},[33,81275,81276],{"class":117},"'108.00'",[33,81278,33116],{"class":59},[33,81280,81281,81283,81286],{"class":35,"line":34582},[33,81282,81062],{"class":59},[33,81284,81285],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[33,81287,33116],{"class":59},[33,81289,81290],{"class":35,"line":34593},[33,81291,79533],{"class":59},[33,81293,81294],{"class":35,"line":34599},[33,81295,81027],{"class":59},[33,81297,81298,81300,81303],{"class":35,"line":34619},[33,81299,81032],{"class":59},[33,81301,81302],{"class":117},"'3997403'",[33,81304,33116],{"class":59},[33,81306,81307,81309,81312],{"class":35,"line":34635},[33,81308,81042],{"class":59},[33,81310,81311],{"class":117},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[33,81313,33116],{"class":59},[33,81315,81316,81318,81321],{"class":35,"line":34641},[33,81317,81052],{"class":59},[33,81319,81320],{"class":117},"'100.00'",[33,81322,33116],{"class":59},[33,81324,81325,81327,81330],{"class":35,"line":34655},[33,81326,81062],{"class":59},[33,81328,81329],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[33,81331,33116],{"class":59},[33,81333,81334],{"class":35,"line":34661},[33,81335,79533],{"class":59},[33,81337,81338],{"class":35,"line":34667},[33,81339,81027],{"class":59},[33,81341,81342,81344,81347],{"class":35,"line":34678},[33,81343,81032],{"class":59},[33,81345,81346],{"class":117},"'3998274'",[33,81348,33116],{"class":59},[33,81350,81351,81353,81356],{"class":35,"line":34684},[33,81352,81042],{"class":59},[33,81354,81355],{"class":117},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[33,81357,33116],{"class":59},[33,81359,81360,81362,81364],{"class":35,"line":34690},[33,81361,81052],{"class":59},[33,81363,81232],{"class":117},[33,81365,33116],{"class":59},[33,81367,81368,81370,81373],{"class":35,"line":34700},[33,81369,81062],{"class":59},[33,81371,81372],{"class":117},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[33,81374,33116],{"class":59},[33,81376,81377],{"class":35,"line":34706},[33,81378,79533],{"class":59},[33,81380,81381],{"class":35,"line":34717},[33,81382,54754],{"class":59},[33,81384,81385],{"class":35,"line":34723},[33,81386,127],{"emptyLinePlaceholder":126},[33,81388,81389],{"class":35,"line":34733},[33,81390,81391],{"class":87},"    \u002F\u002F 1.渲染函数\n",[33,81393,81394,81396,81398,81400,81402],{"class":35,"line":34738},[33,81395,71726],{"class":63},[33,81397,71729],{"class":3632},[33,81399,109],{"class":59},[33,81401,5542],{"class":6877},[33,81403,14100],{"class":59},[33,81405,81406],{"class":35,"line":34744},[33,81407,81408],{"class":87},"      \u002F\u002F 声明空字符串\n",[33,81410,81411,81414,81417,81419],{"class":35,"line":34793},[33,81412,81413],{"class":63},"      let",[33,81415,81416],{"class":59}," str ",[33,81418,64],{"class":63},[33,81420,71746],{"class":117},[33,81422,81423],{"class":35,"line":34840},[33,81424,71751],{"class":87},[33,81426,81427,81429,81432,81434,81437,81440],{"class":35,"line":34845},[33,81428,59650],{"class":59},[33,81430,81431],{"class":3632},"forEach",[33,81433,109],{"class":59},[33,81435,81436],{"class":6877},"item",[33,81438,81439],{"class":63}," =>",[33,81441,17228],{"class":59},[33,81443,81444,81446,81449,81451,81453,81456,81458,81461,81464,81466],{"class":35,"line":34851},[33,81445,62912],{"class":63},[33,81447,81448],{"class":59}," { ",[33,81450,1008],{"class":39},[33,81452,14093],{"class":59},[33,81454,81455],{"class":39},"price",[33,81457,14093],{"class":59},[33,81459,81460],{"class":39},"picture",[33,81462,81463],{"class":59}," } ",[33,81465,64],{"class":63},[33,81467,81468],{"class":59}," item\n",[33,81470,81471,81474,81476],{"class":35,"line":34870},[33,81472,81473],{"class":59},"        str ",[33,81475,11136],{"class":63},[33,81477,71810],{"class":117},[33,81479,81480],{"class":35,"line":34876},[33,81481,81482],{"class":117},"          \u003Cdiv class=\"item\">\n",[33,81484,81485,81488,81490],{"class":35,"line":34896},[33,81486,81487],{"class":117},"            \u003Cimg src=\"${",[33,81489,81460],{"class":59},[33,81491,81492],{"class":117},"}\" alt=\"\">\n",[33,81494,81495,81498,81500],{"class":35,"line":34902},[33,81496,81497],{"class":117},"            \u003Cp class=\"name\">${",[33,81499,1008],{"class":59},[33,81501,81502],{"class":117},"}\u003C\u002Fp>\n",[33,81504,81505,81508,81510],{"class":35,"line":34908},[33,81506,81507],{"class":117},"            \u003Cp class=\"price\">${",[33,81509,81455],{"class":59},[33,81511,81502],{"class":117},[33,81513,81514],{"class":35,"line":34918},[33,81515,81516],{"class":117},"          \u003C\u002Fdiv>\n",[33,81518,81519],{"class":35,"line":34923},[33,81520,81521],{"class":117},"        `\n",[33,81523,81524],{"class":35,"line":34929},[33,81525,66457],{"class":59},[33,81527,81528],{"class":35,"line":34945},[33,81529,81530],{"class":87},"      \u002F\u002F 追加给List\n",[33,81532,81533,81535,81537,81539,81542,81544,81546],{"class":35,"line":34990},[33,81534,57414],{"class":59},[33,81536,56043],{"class":3632},[33,81538,109],{"class":59},[33,81540,81541],{"class":117},"'.list'",[33,81543,75890],{"class":59},[33,81545,64],{"class":63},[33,81547,75626],{"class":59},[33,81549,81550],{"class":35,"line":34996},[33,81551,3855],{"class":59},[33,81553,81554],{"class":35,"line":35002},[33,81555,81556],{"class":87},"    \u002F\u002F 页面一打开就需要渲染\n",[33,81558,81559,81562],{"class":35,"line":35008},[33,81560,81561],{"class":3632},"    render",[33,81563,81564],{"class":59},"(goodsList)\n",[33,81566,81567],{"class":35,"line":35019},[33,81568,81569],{"class":87},"    \u002F\u002F 2.过滤筛选\n",[33,81571,81572,81574,81576,81578,81581,81583,81585,81587,81589,81591,81593,81595],{"class":35,"line":35025},[33,81573,54052],{"class":59},[33,81575,56043],{"class":3632},[33,81577,109],{"class":59},[33,81579,81580],{"class":117},"'.filter'",[33,81582,32477],{"class":59},[33,81584,59456],{"class":3632},[33,81586,109],{"class":59},[33,81588,59461],{"class":117},[33,81590,14093],{"class":59},[33,81592,1894],{"class":6877},[33,81594,81439],{"class":63},[33,81596,17228],{"class":59},[33,81598,81599],{"class":35,"line":35031},[33,81600,81601],{"class":87},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[33,81603,81604,81606,81608,81611,81613,81615,81617,81619],{"class":35,"line":35037},[33,81605,59871],{"class":63},[33,81607,81448],{"class":59},[33,81609,81610],{"class":39},"tagName",[33,81612,14093],{"class":59},[33,81614,33187],{"class":39},[33,81616,81463],{"class":59},[33,81618,64],{"class":63},[33,81620,81621],{"class":59}," e.target\n",[33,81623,81624],{"class":35,"line":35055},[33,81625,81626],{"class":87},"      \u002F\u002F 判断\n",[33,81628,81629,81631,81633,81635,81637],{"class":35,"line":35069},[33,81630,56124],{"class":63},[33,81632,68676],{"class":59},[33,81634,56130],{"class":63},[33,81636,69898],{"class":117},[33,81638,14100],{"class":59},[33,81640,81641],{"class":35,"line":35078},[33,81642,81643],{"class":87},"        \u002F\u002F console.log(11)\n",[33,81645,81646],{"class":35,"line":35087},[33,81647,81648],{"class":87},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[33,81650,81651],{"class":35,"line":35096},[33,81652,81653],{"class":87},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[33,81655,81656,81658,81660,81662],{"class":35,"line":35105},[33,81657,53475],{"class":63},[33,81659,53478],{"class":59},[33,81661,64],{"class":63},[33,81663,81664],{"class":59}," goodsList\n",[33,81666,81667,81669,81672,81674,81677],{"class":35,"line":35111},[33,81668,4163],{"class":63},[33,81670,81671],{"class":59}," (dataset.index ",[33,81673,56130],{"class":63},[33,81675,81676],{"class":117}," '1'",[33,81678,14100],{"class":59},[33,81680,81681,81684,81686,81689,81692,81694,81696,81698,81701,81703,81705,81708,81710,81712,81714],{"class":35,"line":35117},[33,81682,81683],{"class":59},"          arr ",[33,81685,64],{"class":63},[33,81687,81688],{"class":59}," goodsList.",[33,81690,81691],{"class":3632},"filter",[33,81693,109],{"class":59},[33,81695,81436],{"class":6877},[33,81697,81439],{"class":63},[33,81699,81700],{"class":59}," item.price ",[33,81702,78],{"class":63},[33,81704,829],{"class":39},[33,81706,81707],{"class":63}," &&",[33,81709,81700],{"class":59},[33,81711,837],{"class":63},[33,81713,840],{"class":39},[33,81715,157],{"class":59},[33,81717,81718,81721,81723,81725,81727,81729,81732],{"class":35,"line":35125},[33,81719,81720],{"class":59},"        } ",[33,81722,270],{"class":63},[33,81724,3374],{"class":63},[33,81726,81671],{"class":59},[33,81728,56130],{"class":63},[33,81730,81731],{"class":117}," '2'",[33,81733,14100],{"class":59},[33,81735,81736,81738,81740,81742,81744,81746,81748,81750,81752,81754,81756,81758,81760,81762,81765],{"class":35,"line":35130},[33,81737,81683],{"class":59},[33,81739,64],{"class":63},[33,81741,81688],{"class":59},[33,81743,81691],{"class":3632},[33,81745,109],{"class":59},[33,81747,81436],{"class":6877},[33,81749,81439],{"class":63},[33,81751,81700],{"class":59},[33,81753,78],{"class":63},[33,81755,840],{"class":39},[33,81757,81707],{"class":63},[33,81759,81700],{"class":59},[33,81761,837],{"class":63},[33,81763,81764],{"class":39}," 300",[33,81766,157],{"class":59},[33,81768,81769,81771,81773,81775,81777,81779,81782],{"class":35,"line":35136},[33,81770,81720],{"class":59},[33,81772,270],{"class":63},[33,81774,3374],{"class":63},[33,81776,81671],{"class":59},[33,81778,56130],{"class":63},[33,81780,81781],{"class":117}," '3'",[33,81783,14100],{"class":59},[33,81785,81786,81788,81790,81792,81794,81796,81798,81800,81802,81804,81806],{"class":35,"line":35147},[33,81787,81683],{"class":59},[33,81789,64],{"class":63},[33,81791,81688],{"class":59},[33,81793,81691],{"class":3632},[33,81795,109],{"class":59},[33,81797,81436],{"class":6877},[33,81799,81439],{"class":63},[33,81801,81700],{"class":59},[33,81803,78],{"class":63},[33,81805,81764],{"class":39},[33,81807,157],{"class":59},[33,81809,81810],{"class":35,"line":35153},[33,81811,4195],{"class":59},[33,81813,81814],{"class":35,"line":35173},[33,81815,81816],{"class":87},"        \u002F\u002F 渲染函数\n",[33,81818,81819,81821],{"class":35,"line":35179},[33,81820,72050],{"class":3632},[33,81822,54057],{"class":59},[33,81824,81825],{"class":35,"line":35185},[33,81826,54043],{"class":59},[33,81828,81829],{"class":35,"line":35191},[33,81830,127],{"emptyLinePlaceholder":126},[33,81832,81833],{"class":35,"line":35208},[33,81834,35108],{"class":59},[33,81836,81837,81839,81841],{"class":35,"line":35214},[33,81838,54062],{"class":59},[33,81840,53458],{"class":52945},[33,81842,52952],{"class":59},[33,81844,81845,81847,81849],{"class":35,"line":35220},[33,81846,53430],{"class":59},[33,81848,53445],{"class":52945},[33,81850,52952],{"class":59},[33,81852,81853],{"class":35,"line":35226},[33,81854,127],{"emptyLinePlaceholder":126},[33,81856,81857,81859,81861],{"class":35,"line":35232},[33,81858,53430],{"class":59},[33,81860,52280],{"class":52945},[33,81862,52952],{"class":59},[14,81864,81866],{"id":81865},"_410-深入了解对象","4.10 深入了解对象",[633,81868,81870],{"id":81869},"_4101-创建对象","4.10.1 创建对象",[19,81872,81873],{},[3145,81874],{"alt":28,"src":81875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81877,81878],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[633,81880,81882],{"id":81881},"_4102-构造函数","4.10.2 构造函数",[19,81884,81885,81888],{},[1968,81886,81887],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81890,81891,81894],{},[1968,81892,81893],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[23,81896,81898],{"className":52278,"code":81897,"language":52280,"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,81899,81900,81908,81913,81934,81947,81959,81971,81975,81980,82007,82012,82039],{"__ignoreMap":28},[33,81901,81902,81904,81906],{"class":35,"line":36},[33,81903,2726],{"class":59},[33,81905,53458],{"class":52945},[33,81907,52952],{"class":59},[33,81909,81910],{"class":35,"line":43},[33,81911,81912],{"class":87},"\u002F\u002F例：\n",[33,81914,81915,81917,81920,81922,81924,81926,81928,81930,81932],{"class":35,"line":130},[33,81916,56093],{"class":63},[33,81918,81919],{"class":3632}," Pig",[33,81921,109],{"class":59},[33,81923,1008],{"class":6877},[33,81925,2196],{"class":59},[33,81927,71863],{"class":6877},[33,81929,2196],{"class":59},[33,81931,71880],{"class":6877},[33,81933,14100],{"class":59},[33,81935,81936,81939,81942,81944],{"class":35,"line":146},[33,81937,81938],{"class":39},"    this",[33,81940,81941],{"class":59},".name",[33,81943,64],{"class":63},[33,81945,81946],{"class":59},"name\n",[33,81948,81949,81951,81954,81956],{"class":35,"line":267},[33,81950,81938],{"class":39},[33,81952,81953],{"class":59},".age",[33,81955,64],{"class":63},[33,81957,81958],{"class":59},"age\n",[33,81960,81961,81963,81966,81968],{"class":35,"line":275},[33,81962,81938],{"class":39},[33,81964,81965],{"class":59},".gender",[33,81967,64],{"class":63},[33,81969,81970],{"class":59},"gender    \n",[33,81972,81973],{"class":35,"line":392},[33,81974,3247],{"class":59},[33,81976,81977],{"class":35,"line":406},[33,81978,81979],{"class":87},"\u002F\u002F创建佩奇对象\n",[33,81981,81982,81984,81987,81989,81991,81993,81996,81998,82000,82002,82005],{"class":35,"line":418},[33,81983,8452],{"class":63},[33,81985,81986],{"class":39}," Peppa",[33,81988,13375],{"class":63},[33,81990,81919],{"class":3632},[33,81992,109],{"class":59},[33,81994,81995],{"class":117},"'佩奇'",[33,81997,2196],{"class":59},[33,81999,2162],{"class":39},[33,82001,2196],{"class":59},[33,82003,82004],{"class":117},"'女'",[33,82006,157],{"class":59},[33,82008,82009],{"class":35,"line":425},[33,82010,82011],{"class":87},"\u002F\u002F创建乔治对象\n",[33,82013,82014,82016,82019,82021,82023,82025,82028,82030,82032,82034,82037],{"class":35,"line":1147},[33,82015,8452],{"class":63},[33,82017,82018],{"class":39}," George",[33,82020,13375],{"class":63},[33,82022,81919],{"class":3632},[33,82024,109],{"class":59},[33,82026,82027],{"class":117},"'乔治'",[33,82029,2196],{"class":59},[33,82031,1891],{"class":39},[33,82033,2196],{"class":59},[33,82035,82036],{"class":117},"'男'",[33,82038,157],{"class":59},[33,82040,82041,82043,82045],{"class":35,"line":1329},[33,82042,53430],{"class":59},[33,82044,53458],{"class":52945},[33,82046,52952],{"class":59},[19,82048,82049],{},[3145,82050],{"alt":28,"src":82051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82053,82054],{},[3145,82055],{"alt":28,"src":82056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82058,82059],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82061,82062],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82064,82065],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82067,82068],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82070,82071],{},"这里用等号是因为：对象.属性=值",[19,82073,82074],{},"①利用对象字面量创建对象",[19,82076,82077],{},"const o={",[19,82079,82080],{},"name:'pink'",[19,82082,82083],{},"} ②利用new Object创建对象",[19,82085,82086],{},"const o=new Object({name:'pink'})",[19,82088,82089],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82091,82092],{},"构造函数创建对象的执行过程：",[19,82094,82095],{},[3145,82096],{"alt":28,"src":82097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[633,82099,82101],{"id":82100},"_4103-实例成员","4.10.3 实例成员",[19,82103,82104],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[162,82106,82107,82110,82113],{},[165,82108,82109],{},"实例对象的属性和方法即为实例成员",[165,82111,82112],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[165,82114,82115],{},"构造函数创建的实例对象彼此独立互不影响",[633,82117,82119],{"id":82118},"_4104-静态成员","4.10.4 静态成员",[19,82121,82122],{},[3145,82123],{"alt":28,"src":82124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82126,82127],{},"静态成员有Date.now() Math.PI Math.random()",[19,82129,82130],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82132,82133],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82135,82136],{},"function Pig(name) n {",[19,82138,82139],{},"this.name=name",[19,82141,1011],{},[19,82143,82144],{},"Pig.eyes=2",[19,82146,82147],{},"Pig.sayHai=function () { console.log(this) }",[19,82149,82150],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82152,82153],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82155,12990],{},[162,82157,82158,82161,82164,82167,82170],{},[165,82159,82160],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[165,82162,82163],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[165,82165,82166],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[165,82168,82169],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[165,82171,82172],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82174,82175],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[633,82177,82179],{"id":82178},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82181,82182],{},"内置构造函数包含：",[19,82184,82185],{},[3145,82186],{"alt":28,"src":82187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82189,82190],{},[3145,82191],{"alt":28,"src":82192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82194,82195],{},"这些基本数据类型，js对他们进行了包装",[53458,82197,82198],{},"\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",[23653,82200,82202],{"id":82201},"_41051-object","4.10.5.1 Object",[19,82204,82205],{},"Object 是内置的构造函数，用于创建普通对象",[19,82207,82208],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[23,82210,82212],{"className":52278,"code":82211,"language":52280,"meta":28,"style":28},"const user=new Object({name:'小明',age:15})\n",[30,82213,82214],{"__ignoreMap":28},[33,82215,82216],{"class":35,"line":36},[33,82217,82211],{"class":59},[19,82219,82220],{},"三个常用的静态方法：",[24565,82222,82224],{"id":82223},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82226,82227],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82229,82230],{},[3145,82231],{"alt":28,"src":82232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82234,82235],{},[3145,82236],{"alt":28,"src":82237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[23,82239,82241],{"className":54712,"code":82240,"language":54714,"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,82242,82243,82251,82259,82264,82269,82274,82279,82284,82289,82297],{"__ignoreMap":28},[33,82244,82245,82247,82249],{"class":35,"line":36},[33,82246,2726],{"class":59},[33,82248,53445],{"class":52945},[33,82250,52952],{"class":59},[33,82252,82253,82255,82257],{"class":35,"line":43},[33,82254,53789],{"class":59},[33,82256,53458],{"class":52945},[33,82258,52952],{"class":59},[33,82260,82261],{"class":35,"line":130},[33,82262,82263],{"class":59},"    const o = { name: 'pink', age: 6 }\n",[33,82265,82266],{"class":35,"line":146},[33,82267,82268],{"class":59},"    \u002F\u002F 获得所有属性名\n",[33,82270,82271],{"class":35,"line":267},[33,82272,82273],{"class":59},"    const arr = Object.keys(o)\n",[33,82275,82276],{"class":35,"line":275},[33,82277,82278],{"class":59},"    console.log(arr)\n",[33,82280,82281],{"class":35,"line":392},[33,82282,82283],{"class":59},"    \u002F\u002F 获得所有属性值\n",[33,82285,82286],{"class":35,"line":406},[33,82287,82288],{"class":59},"    console.log(Object.values(o))\n",[33,82290,82291,82293,82295],{"class":35,"line":418},[33,82292,54062],{"class":59},[33,82294,53458],{"class":52945},[33,82296,52952],{"class":59},[33,82298,82299,82301,82303],{"class":35,"line":425},[33,82300,53430],{"class":59},[33,82302,53445],{"class":52945},[33,82304,52952],{"class":59},[24565,82306,82308],{"id":82307},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82310,82311],{},"Object.assign(oo,o)",[19,82313,82314],{},"后的东西添加给前 是追加",[19,82316,82317],{},[3145,82318],{"alt":28,"src":82319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82321,82322],{},[3145,82323],{"alt":28,"src":82324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[23,82326,82328],{"className":54712,"code":82327,"language":54714,"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,82329,82330,82338,82346,82350,82354,82358,82362,82366,82370,82375,82380,82385,82390,82395,82403],{"__ignoreMap":28},[33,82331,82332,82334,82336],{"class":35,"line":36},[33,82333,2726],{"class":59},[33,82335,53445],{"class":52945},[33,82337,52952],{"class":59},[33,82339,82340,82342,82344],{"class":35,"line":43},[33,82341,53789],{"class":59},[33,82343,53458],{"class":52945},[33,82345,52952],{"class":59},[33,82347,82348],{"class":35,"line":130},[33,82349,82263],{"class":59},[33,82351,82352],{"class":35,"line":146},[33,82353,82268],{"class":59},[33,82355,82356],{"class":35,"line":267},[33,82357,82273],{"class":59},[33,82359,82360],{"class":35,"line":275},[33,82361,82278],{"class":59},[33,82363,82364],{"class":35,"line":392},[33,82365,82283],{"class":59},[33,82367,82368],{"class":35,"line":406},[33,82369,82288],{"class":59},[33,82371,82372],{"class":35,"line":418},[33,82373,82374],{"class":59},"    const oo = {}\n",[33,82376,82377],{"class":35,"line":425},[33,82378,82379],{"class":59},"    Object.assign(oo, o)\n",[33,82381,82382],{"class":35,"line":1147},[33,82383,82384],{"class":59},"    console.log(oo)\n",[33,82386,82387],{"class":35,"line":1329},[33,82388,82389],{"class":59},"    Object.assign(o, { gender: '女' })\n",[33,82391,82392],{"class":35,"line":1341},[33,82393,82394],{"class":59},"    console.log(o)\n",[33,82396,82397,82399,82401],{"class":35,"line":1348},[33,82398,54062],{"class":59},[33,82400,53458],{"class":52945},[33,82402,52952],{"class":59},[33,82404,82405,82407,82409],{"class":35,"line":1529},[33,82406,53430],{"class":59},[33,82408,53445],{"class":52945},[33,82410,52952],{"class":59},[19,82412,82413],{},[3145,82414],{"alt":28,"src":82415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23653,82417,82419],{"id":82418},"_41052-array","4.10.5.2 Array",[19,82421,82422],{},"Array 是内置的构造函数，用于创建数组",[19,82424,82425],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[23,82427,82429],{"className":52278,"code":82428,"language":52280,"meta":28,"style":28},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[30,82430,82431,82436],{"__ignoreMap":28},[33,82432,82433],{"class":35,"line":36},[33,82434,82435],{"class":59},"const arr=new Array(3,5)\n",[33,82437,82438],{"class":35,"line":43},[33,82439,82440],{"class":59},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82442,82443],{},"Array的实例方法，这个方法是实例成员",[19,82445,82446],{},[3145,82447],{"alt":28,"src":82448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24565,82450,82452],{"id":82451},"_410521-reduce","4.10.5.2.1 reduce",[19,82454,82455],{},[3145,82456],{"alt":28,"src":82457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[23,82459,82461],{"className":54712,"code":82460,"language":54714,"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,82462,82463,82471,82479,82484,82489,82494,82499,82503,82508,82513,82518,82522,82527,82532,82536,82541,82546,82551,82559],{"__ignoreMap":28},[33,82464,82465,82467,82469],{"class":35,"line":36},[33,82466,2726],{"class":59},[33,82468,53445],{"class":52945},[33,82470,52952],{"class":59},[33,82472,82473,82475,82477],{"class":35,"line":43},[33,82474,53789],{"class":59},[33,82476,53458],{"class":52945},[33,82478,52952],{"class":59},[33,82480,82481],{"class":35,"line":130},[33,82482,82483],{"class":59},"    const arr = [1, 5, 8]\n",[33,82485,82486],{"class":35,"line":146},[33,82487,82488],{"class":59},"    \u002F\u002F 1.没有初始值\n",[33,82490,82491],{"class":35,"line":267},[33,82492,82493],{"class":59},"    const total = arr.reduce(function (prev, current) {\n",[33,82495,82496],{"class":35,"line":275},[33,82497,82498],{"class":59},"      return prev + current\n",[33,82500,82501],{"class":35,"line":392},[33,82502,35108],{"class":59},[33,82504,82505],{"class":35,"line":406},[33,82506,82507],{"class":59},"    console.log(total)   \u002F\u002F14\n",[33,82509,82510],{"class":35,"line":418},[33,82511,82512],{"class":59},"    \u002F\u002F 2.有初始值\n",[33,82514,82515],{"class":35,"line":425},[33,82516,82517],{"class":59},"    const total1 = arr.reduce(function (prev, current) {\n",[33,82519,82520],{"class":35,"line":1147},[33,82521,82498],{"class":59},[33,82523,82524],{"class":35,"line":1329},[33,82525,82526],{"class":59},"    }, 10)\n",[33,82528,82529],{"class":35,"line":1341},[33,82530,82531],{"class":59},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[33,82533,82534],{"class":35,"line":1348},[33,82535,127],{"emptyLinePlaceholder":126},[33,82537,82538],{"class":35,"line":1529},[33,82539,82540],{"class":59},"    \u002F\u002F 3.箭头函数写法\n",[33,82542,82543],{"class":35,"line":1546},[33,82544,82545],{"class":59},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[33,82547,82548],{"class":35,"line":1551},[33,82549,82550],{"class":59},"    console.log(total2)   \u002F\u002F24\n",[33,82552,82553,82555,82557],{"class":35,"line":1566},[33,82554,54062],{"class":59},[33,82556,53458],{"class":52945},[33,82558,52952],{"class":59},[33,82560,82561,82563,82565],{"class":35,"line":1578},[33,82562,53430],{"class":59},[33,82564,53445],{"class":52945},[33,82566,52952],{"class":59},[19,82568,82569],{},"执行过程：",[162,82571,82572,82575,82578],{},[165,82573,82574],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[165,82576,82577],{},"每一次循环，把返回值给作为下一次循环的上一次值",[165,82579,82580],{},"如果有起始值，则起始值作为上一次值",[23,82582,82584],{"className":54712,"code":82583,"language":54714,"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,82585,82586,82594,82602,82606,82610,82614,82618,82622,82626,82631,82636,82641,82646,82651,82655,82659,82663,82667,82671,82675,82680,82684,82689,82693,82698,82703,82707,82711,82715,82723],{"__ignoreMap":28},[33,82587,82588,82590,82592],{"class":35,"line":36},[33,82589,2726],{"class":59},[33,82591,53445],{"class":52945},[33,82593,52952],{"class":59},[33,82595,82596,82598,82600],{"class":35,"line":43},[33,82597,53789],{"class":59},[33,82599,53458],{"class":52945},[33,82601,52952],{"class":59},[33,82603,82604],{"class":35,"line":130},[33,82605,82483],{"class":59},[33,82607,82608],{"class":35,"line":146},[33,82609,82488],{"class":59},[33,82611,82612],{"class":35,"line":267},[33,82613,82493],{"class":59},[33,82615,82616],{"class":35,"line":275},[33,82617,82498],{"class":59},[33,82619,82620],{"class":35,"line":392},[33,82621,35108],{"class":59},[33,82623,82624],{"class":35,"line":406},[33,82625,82507],{"class":59},[33,82627,82628],{"class":35,"line":418},[33,82629,82630],{"class":59},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[33,82632,82633],{"class":35,"line":425},[33,82634,82635],{"class":59},"    \u002F\u002F     1              5                    6\n",[33,82637,82638],{"class":35,"line":1147},[33,82639,82640],{"class":59},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[33,82642,82643],{"class":35,"line":1329},[33,82644,82645],{"class":59},"    \u002F\u002F     6              8                    14\n",[33,82647,82648],{"class":35,"line":1341},[33,82649,82650],{"class":59},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[33,82652,82653],{"class":35,"line":1348},[33,82654,82512],{"class":59},[33,82656,82657],{"class":35,"line":1529},[33,82658,82517],{"class":59},[33,82660,82661],{"class":35,"line":1546},[33,82662,82498],{"class":59},[33,82664,82665],{"class":35,"line":1551},[33,82666,82526],{"class":59},[33,82668,82669],{"class":35,"line":1566},[33,82670,82531],{"class":59},[33,82672,82673],{"class":35,"line":1578},[33,82674,82630],{"class":59},[33,82676,82677],{"class":35,"line":1583},[33,82678,82679],{"class":59},"    \u002F\u002F     10             1                     11\n",[33,82681,82682],{"class":35,"line":3369},[33,82683,82640],{"class":59},[33,82685,82686],{"class":35,"line":3396},[33,82687,82688],{"class":59},"    \u002F\u002F     11             5                    16\n",[33,82690,82691],{"class":35,"line":3401},[33,82692,82640],{"class":59},[33,82694,82695],{"class":35,"line":3418},[33,82696,82697],{"class":59},"    \u002F\u002F     16             8                    24\n",[33,82699,82700],{"class":35,"line":3423},[33,82701,82702],{"class":59},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[33,82704,82705],{"class":35,"line":3428},[33,82706,82540],{"class":59},[33,82708,82709],{"class":35,"line":3433},[33,82710,82545],{"class":59},[33,82712,82713],{"class":35,"line":3447},[33,82714,82550],{"class":59},[33,82716,82717,82719,82721],{"class":35,"line":3452},[33,82718,54062],{"class":59},[33,82720,53458],{"class":52945},[33,82722,52952],{"class":59},[33,82724,82725,82727,82729],{"class":35,"line":4243},[33,82726,53430],{"class":59},[33,82728,53445],{"class":52945},[33,82730,52952],{"class":59},[24565,82732,82734],{"id":82733},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82736,82737],{},[3145,82738],{"alt":28,"src":82739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[23,82741,82743],{"className":54712,"code":82742,"language":54714,"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,82744,82745,82753,82761,82766,82771,82776,82781,82785,82790,82795,82800,82805,82810,82815,82819,82824,82828,82833,82841],{"__ignoreMap":28},[33,82746,82747,82749,82751],{"class":35,"line":36},[33,82748,2726],{"class":59},[33,82750,53445],{"class":52945},[33,82752,52952],{"class":59},[33,82754,82755,82757,82759],{"class":35,"line":43},[33,82756,53789],{"class":59},[33,82758,53458],{"class":52945},[33,82760,52952],{"class":59},[33,82762,82763],{"class":35,"line":130},[33,82764,82765],{"class":59},"    const arr = [\n",[33,82767,82768],{"class":35,"line":146},[33,82769,82770],{"class":59},"      { name: '张三', salary: 10000 },\n",[33,82772,82773],{"class":35,"line":267},[33,82774,82775],{"class":59},"      { name: '李四', salary: 10000 },\n",[33,82777,82778],{"class":35,"line":275},[33,82779,82780],{"class":59},"      { name: '王五', salary: 10000 }\n",[33,82782,82783],{"class":35,"line":392},[33,82784,54754],{"class":59},[33,82786,82787],{"class":35,"line":406},[33,82788,82789],{"class":59},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[33,82791,82792],{"class":35,"line":418},[33,82793,82794],{"class":59},"    \u002F\u002F prev是累计值\n",[33,82796,82797],{"class":35,"line":425},[33,82798,82799],{"class":59},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[33,82801,82802],{"class":35,"line":1147},[33,82803,82804],{"class":59},"    console.log(total)\n",[33,82806,82807],{"class":35,"line":1329},[33,82808,82809],{"class":59},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[33,82811,82812],{"class":35,"line":1341},[33,82813,82814],{"class":59},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[33,82816,82817],{"class":35,"line":1348},[33,82818,82809],{"class":59},[33,82820,82821],{"class":35,"line":1529},[33,82822,82823],{"class":59},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[33,82825,82826],{"class":35,"line":1546},[33,82827,82809],{"class":59},[33,82829,82830],{"class":35,"line":1551},[33,82831,82832],{"class":59},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[33,82834,82835,82837,82839],{"class":35,"line":1566},[33,82836,54062],{"class":59},[33,82838,53458],{"class":52945},[33,82840,52952],{"class":59},[33,82842,82843,82845,82847],{"class":35,"line":1578},[33,82844,53430],{"class":59},[33,82846,53445],{"class":52945},[33,82848,52952],{"class":59},[24565,82850,82852],{"id":82851},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82854,82855],{},[3145,82856],{"alt":28,"src":82857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82859,82860],{},[3145,82861],{"alt":28,"src":82862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[162,82864,82865],{},[165,82866,82867],{},"find()",[19,82869,82870],{},"循环查找，找到第一个就ok",[19,82872,82873],{},[2057,82874,82877],{"href":82875,"rel":82876},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25520],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[23,82879,82881],{"className":52278,"code":82880,"language":52280,"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,82882,82883,82888,82893],{"__ignoreMap":28},[33,82884,82885],{"class":35,"line":36},[33,82886,82887],{"class":59},"const array1 = [5, 12, 8, 130, 44]\n",[33,82889,82890],{"class":35,"line":43},[33,82891,82892],{"class":59},"const found = array1.find((element) => element > 10)\n",[33,82894,82895],{"class":35,"line":130},[33,82896,82897],{"class":59},"console.log(found)  \u002F\u002F12\n",[19,82899,82900,82902,82903,82908,82909,82912,82913,82915,82916,82921,82922,82924,82925,82927,82928,82930,82931],{},[30,82901,82867],{}," 方法是一个",[2057,82904,82907],{"href":82905,"rel":82906},"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",[25520],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[30,82910,82911],{},"callbackFn"," 函数，直到 ",[30,82914,82911],{}," 返回一个",[2057,82917,82920],{"href":82918,"rel":82919},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25520],"真值","。然后 ",[30,82923,82867],{}," 返回该元素并停止迭代数组。如果 ",[30,82926,82911],{}," 从未返回真值，则 ",[30,82929,82867],{}," 返回 ",[30,82932,82933],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[23,82935,82937],{"className":54712,"code":82936,"language":54714,"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,82938,82939,82947,82955,82960,82965,82970,82974,82979,82984,82988,82993,82998,83002,83006,83011,83016,83020,83024,83029,83034,83039,83044,83049,83053,83058,83063,83068,83073,83077,83082,83090],{"__ignoreMap":28},[33,82940,82941,82943,82945],{"class":35,"line":36},[33,82942,2726],{"class":59},[33,82944,53445],{"class":52945},[33,82946,52952],{"class":59},[33,82948,82949,82951,82953],{"class":35,"line":43},[33,82950,53789],{"class":59},[33,82952,53458],{"class":52945},[33,82954,52952],{"class":59},[33,82956,82957],{"class":35,"line":130},[33,82958,82959],{"class":59},"    const arr = ['red', 'blue', 'green']\n",[33,82961,82962],{"class":35,"line":146},[33,82963,82964],{"class":59},"    const found = arr.find(item => item === 'pink')\n",[33,82966,82967],{"class":35,"line":267},[33,82968,82969],{"class":59},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[33,82971,82972],{"class":35,"line":275},[33,82973,127],{"emptyLinePlaceholder":126},[33,82975,82976],{"class":35,"line":392},[33,82977,82978],{"class":59},"    \u002F\u002F 使用场景，用于查找数据\n",[33,82980,82981],{"class":35,"line":406},[33,82982,82983],{"class":59},"    const arr1 = [\n",[33,82985,82986],{"class":35,"line":418},[33,82987,81027],{"class":59},[33,82989,82990],{"class":35,"line":425},[33,82991,82992],{"class":59},"        name: '小米',\n",[33,82994,82995],{"class":35,"line":1147},[33,82996,82997],{"class":59},"        price: 1999\n",[33,82999,83000],{"class":35,"line":1329},[33,83001,79533],{"class":59},[33,83003,83004],{"class":35,"line":1341},[33,83005,81027],{"class":59},[33,83007,83008],{"class":35,"line":1348},[33,83009,83010],{"class":59},"        name: '华为',\n",[33,83012,83013],{"class":35,"line":1529},[33,83014,83015],{"class":59},"        price: 3999\n",[33,83017,83018],{"class":35,"line":1546},[33,83019,54043],{"class":59},[33,83021,83022],{"class":35,"line":1551},[33,83023,54754],{"class":59},[33,83025,83026],{"class":35,"line":1566},[33,83027,83028],{"class":59},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[33,83030,83031],{"class":35,"line":1578},[33,83032,83033],{"class":59},"    \u002F\u002F const found1 = arr1.find(item => {\n",[33,83035,83036],{"class":35,"line":1583},[33,83037,83038],{"class":59},"    \u002F\u002F   if (item.name === '小米') {\n",[33,83040,83041],{"class":35,"line":3369},[33,83042,83043],{"class":59},"    \u002F\u002F     return item\n",[33,83045,83046],{"class":35,"line":3396},[33,83047,83048],{"class":59},"    \u002F\u002F   }\n",[33,83050,83051],{"class":35,"line":3401},[33,83052,64932],{"class":59},[33,83054,83055],{"class":35,"line":3418},[33,83056,83057],{"class":59},"    \u002F\u002F 另一种写法\n",[33,83059,83060],{"class":35,"line":3423},[33,83061,83062],{"class":59},"    const found1 = arr1.find(item => {\n",[33,83064,83065],{"class":35,"line":3428},[33,83066,83067],{"class":59},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[33,83069,83070],{"class":35,"line":3433},[33,83071,83072],{"class":59},"      return item.name = '小米'\n",[33,83074,83075],{"class":35,"line":3447},[33,83076,35108],{"class":59},[33,83078,83079],{"class":35,"line":3452},[33,83080,83081],{"class":59},"    console.log(found1)\n",[33,83083,83084,83086,83088],{"class":35,"line":4243},[33,83085,54062],{"class":59},[33,83087,53458],{"class":52945},[33,83089,52952],{"class":59},[33,83091,83092,83094,83096],{"class":35,"line":4257},[33,83093,53430],{"class":59},[33,83095,53445],{"class":52945},[33,83097,52952],{"class":59},[19,83099,83100],{},[3145,83101],{"alt":28,"src":83102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83104,83105],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[162,83107,83108],{"start":43},[165,83109,83110],{},"every()返回的是布尔值",[19,83112,83113],{},[2057,83114,83117],{"href":83115,"rel":83116},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25520],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83119,83120],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83122,83123],{},"some是只有有一个就没问题",[19,83125,83126],{},"every是必须全是才行",[23,83128,83132],{"className":83129,"code":83130,"language":83131,"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,83133,83134,83150,83164,83168,83177],{"__ignoreMap":28},[33,83135,83136,83138,83141,83143,83145,83148],{"class":35,"line":36},[33,83137,56093],{"class":63},[33,83139,83140],{"class":59}," isBigEnough(element, ",[33,83142,75699],{"class":63},[33,83144,14093],{"class":59},[33,83146,83147],{"class":63},"array",[33,83149,14100],{"class":59},[33,83151,83152,83155,83158,83160,83162],{"class":35,"line":43},[33,83153,83154],{"class":63},"  return",[33,83156,83157],{"class":59}," element ",[33,83159,78],{"class":63},[33,83161,3706],{"class":39},[33,83163,2976],{"class":59},[33,83165,83166],{"class":35,"line":130},[33,83167,3247],{"class":59},[33,83169,83170,83173,83175],{"class":35,"line":146},[33,83171,83172],{"class":59},"[12, 5, 8, 130, 44].every(isBigEnough); ",[33,83174,34976],{"class":63},[33,83176,56160],{"class":59},[33,83178,83179,83182,83184],{"class":35,"line":267},[33,83180,83181],{"class":59},"[12, 54, 18, 130, 44].every(isBigEnough); ",[33,83183,34976],{"class":63},[33,83185,59583],{"class":59},[23,83187,83189],{"className":54712,"code":83188,"language":54714,"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,83190,83191,83199,83207,83212,83216,83221,83226,83234],{"__ignoreMap":28},[33,83192,83193,83195,83197],{"class":35,"line":36},[33,83194,2726],{"class":59},[33,83196,53445],{"class":52945},[33,83198,52952],{"class":59},[33,83200,83201,83203,83205],{"class":35,"line":43},[33,83202,53789],{"class":59},[33,83204,53458],{"class":52945},[33,83206,52952],{"class":59},[33,83208,83209],{"class":35,"line":130},[33,83210,83211],{"class":59},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[33,83213,83214],{"class":35,"line":146},[33,83215,79963],{"class":59},[33,83217,83218],{"class":35,"line":267},[33,83219,83220],{"class":59},"    const flag = arr.every(item => item >= 10)\n",[33,83222,83223],{"class":35,"line":275},[33,83224,83225],{"class":59},"    console.log(flag)    \u002F\u002Ftrue\n",[33,83227,83228,83230,83232],{"class":35,"line":392},[33,83229,54062],{"class":59},[33,83231,53458],{"class":52945},[33,83233,52952],{"class":59},[33,83235,83236,83238,83240],{"class":35,"line":406},[33,83237,53430],{"class":59},[33,83239,53445],{"class":52945},[33,83241,52952],{"class":59},[23,83243,83245],{"className":54712,"code":83244,"language":54714,"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,83246,83247,83255,83263,83267,83272,83277,83282,83290],{"__ignoreMap":28},[33,83248,83249,83251,83253],{"class":35,"line":36},[33,83250,2726],{"class":59},[33,83252,53445],{"class":52945},[33,83254,52952],{"class":59},[33,83256,83257,83259,83261],{"class":35,"line":43},[33,83258,53789],{"class":59},[33,83260,53458],{"class":52945},[33,83262,52952],{"class":59},[33,83264,83265],{"class":35,"line":130},[33,83266,83211],{"class":59},[33,83268,83269],{"class":35,"line":146},[33,83270,83271],{"class":59},"    const arr = [10, 0, 5]\n",[33,83273,83274],{"class":35,"line":267},[33,83275,83276],{"class":59},"    const flag = arr.some(item => item >= 10)\n",[33,83278,83279],{"class":35,"line":275},[33,83280,83281],{"class":59},"    console.log(flag)   \u002F\u002Ftrue\n",[33,83283,83284,83286,83288],{"class":35,"line":392},[33,83285,54062],{"class":59},[33,83287,53458],{"class":52945},[33,83289,52952],{"class":59},[33,83291,83292,83294,83296],{"class":35,"line":406},[33,83293,53430],{"class":59},[33,83295,53445],{"class":52945},[33,83297,52952],{"class":59},[24565,83299,83301],{"id":83300},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83303,83304],{},[3145,83305],{"alt":28,"src":83306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[23,83308,83310],{"className":52278,"code":83309,"language":52280,"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,83311,83312,83322,83336,83340,83348,83362,83382,83394,83402,83409,83421,83433,83445,83457,83467,83477,83481,83489,83497,83501,83509,83521,83529,83551,83556,83561,83594,83602,83610,83614],{"__ignoreMap":28},[33,83313,83314,83316,83318,83320],{"class":35,"line":36},[33,83315,52942],{"class":59},[33,83317,52946],{"class":52945},[33,83319,52949],{"class":3632},[33,83321,52952],{"class":59},[33,83323,83324,83326,83328,83330,83332,83334],{"class":35,"line":43},[33,83325,2726],{"class":59},[33,83327,52280],{"class":52945},[33,83329,52961],{"class":3632},[33,83331,64],{"class":59},[33,83333,52966],{"class":117},[33,83335,52952],{"class":59},[33,83337,83338],{"class":35,"line":130},[33,83339,127],{"emptyLinePlaceholder":126},[33,83341,83342,83344,83346],{"class":35,"line":146},[33,83343,2726],{"class":59},[33,83345,52979],{"class":52945},[33,83347,52952],{"class":59},[33,83349,83350,83352,83354,83356,83358,83360],{"class":35,"line":267},[33,83351,53789],{"class":59},[33,83353,52989],{"class":52945},[33,83355,52992],{"class":3632},[33,83357,64],{"class":59},[33,83359,52997],{"class":117},[33,83361,52952],{"class":59},[33,83363,83364,83366,83368,83370,83372,83374,83376,83378,83380],{"class":35,"line":275},[33,83365,53789],{"class":59},[33,83367,52989],{"class":52945},[33,83369,16578],{"class":3632},[33,83371,64],{"class":59},[33,83373,53036],{"class":117},[33,83375,53016],{"class":3632},[33,83377,64],{"class":59},[33,83379,53043],{"class":117},[33,83381,52952],{"class":59},[33,83383,83384,83386,83388,83390,83392],{"class":35,"line":392},[33,83385,53789],{"class":59},[33,83387,53052],{"class":52945},[33,83389,53055],{"class":59},[33,83391,53052],{"class":52945},[33,83393,52952],{"class":59},[33,83395,83396,83398,83400],{"class":35,"line":406},[33,83397,53789],{"class":59},[33,83399,1729],{"class":52945},[33,83401,52952],{"class":59},[33,83403,83404,83407],{"class":35,"line":418},[33,83405,83406],{"class":52945},"    div",[33,83408,17228],{"class":59},[33,83410,83411,83413,83415,83417,83419],{"class":35,"line":425},[33,83412,56415],{"class":39},[33,83414,53082],{"class":59},[33,83416,3391],{"class":39},[33,83418,53137],{"class":63},[33,83420,2976],{"class":59},[33,83422,83423,83425,83427,83429,83431],{"class":35,"line":1147},[33,83424,56429],{"class":39},[33,83426,53082],{"class":59},[33,83428,2219],{"class":39},[33,83430,53137],{"class":63},[33,83432,2976],{"class":59},[33,83434,83435,83437,83439,83441,83443],{"class":35,"line":1329},[33,83436,59002],{"class":39},[33,83438,53082],{"class":59},[33,83440,2219],{"class":39},[33,83442,53137],{"class":63},[33,83444,2976],{"class":59},[33,83446,83447,83449,83451,83453,83455],{"class":35,"line":1341},[33,83448,66775],{"class":39},[33,83450,53082],{"class":59},[33,83452,2315],{"class":39},[33,83454,53137],{"class":63},[33,83456,2976],{"class":59},[33,83458,83459,83461,83463,83465],{"class":35,"line":1348},[33,83460,58929],{"class":39},[33,83462,53082],{"class":59},[33,83464,53237],{"class":39},[33,83466,2976],{"class":59},[33,83468,83469,83471,83473,83475],{"class":35,"line":1529},[33,83470,56528],{"class":39},[33,83472,53082],{"class":59},[33,83474,53290],{"class":39},[33,83476,2976],{"class":59},[33,83478,83479],{"class":35,"line":1546},[33,83480,3855],{"class":59},[33,83482,83483,83485,83487],{"class":35,"line":1551},[33,83484,54062],{"class":59},[33,83486,1729],{"class":52945},[33,83488,52952],{"class":59},[33,83490,83491,83493,83495],{"class":35,"line":1566},[33,83492,53430],{"class":59},[33,83494,52979],{"class":52945},[33,83496,52952],{"class":59},[33,83498,83499],{"class":35,"line":1578},[33,83500,127],{"emptyLinePlaceholder":126},[33,83502,83503,83505,83507],{"class":35,"line":1583},[33,83504,2726],{"class":59},[33,83506,53445],{"class":52945},[33,83508,52952],{"class":59},[33,83510,83511,83513,83515,83517,83519],{"class":35,"line":3369},[33,83512,53789],{"class":59},[33,83514,53256],{"class":52945},[33,83516,56958],{"class":59},[33,83518,53256],{"class":52945},[33,83520,52952],{"class":59},[33,83522,83523,83525,83527],{"class":35,"line":3396},[33,83524,53789],{"class":59},[33,83526,53458],{"class":52945},[33,83528,52952],{"class":59},[33,83530,83531,83533,83536,83538,83541,83544,83546,83549],{"class":35,"line":3401},[33,83532,12879],{"class":63},[33,83534,83535],{"class":39}," spec",[33,83537,15222],{"class":63},[33,83539,83540],{"class":59}," { size: ",[33,83542,83543],{"class":117},"'40cm*40cm'",[33,83545,57108],{"class":59},[33,83547,83548],{"class":117},"'黑色'",[33,83550,57248],{"class":59},[33,83552,83553],{"class":35,"line":3418},[33,83554,83555],{"class":87},"    \u002F\u002F const arr = Object.values(spec)\n",[33,83557,83558],{"class":35,"line":3423},[33,83559,83560],{"class":87},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[33,83562,83563,83565,83567,83569,83572,83574,83576,83579,83582,83585,83587,83589,83592],{"class":35,"line":3428},[33,83564,54052],{"class":59},[33,83566,56043],{"class":3632},[33,83568,109],{"class":59},[33,83570,83571],{"class":117},"'div'",[33,83573,75890],{"class":59},[33,83575,64],{"class":63},[33,83577,83578],{"class":59}," Object.",[33,83580,83581],{"class":3632},"values",[33,83583,83584],{"class":59},"(spec).",[33,83586,75864],{"class":3632},[33,83588,109],{"class":59},[33,83590,83591],{"class":117},"'\u002F'",[33,83593,157],{"class":59},[33,83595,83596,83598,83600],{"class":35,"line":3433},[33,83597,54062],{"class":59},[33,83599,53458],{"class":52945},[33,83601,52952],{"class":59},[33,83603,83604,83606,83608],{"class":35,"line":3447},[33,83605,53430],{"class":59},[33,83607,53445],{"class":52945},[33,83609,52952],{"class":59},[33,83611,83612],{"class":35,"line":3452},[33,83613,127],{"emptyLinePlaceholder":126},[33,83615,83616,83618,83620],{"class":35,"line":4243},[33,83617,53430],{"class":59},[33,83619,52280],{"class":52945},[33,83621,52952],{"class":59},[19,83623,83624],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24565,83626,83628],{"id":83627},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83630,83631],{},"静态方法，将伪数组转换为真数组",[19,83633,83634],{},[3145,83635],{"alt":28,"src":83636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[23,83638,83640],{"className":54712,"code":83639,"language":54714,"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,83641,83642,83650,83658,83670,83682,83694,83702,83710,83715,83720,83725,83730,83738],{"__ignoreMap":28},[33,83643,83644,83646,83648],{"class":35,"line":36},[33,83645,2726],{"class":59},[33,83647,53445],{"class":52945},[33,83649,52952],{"class":59},[33,83651,83652,83654,83656],{"class":35,"line":43},[33,83653,53789],{"class":59},[33,83655,2822],{"class":52945},[33,83657,52952],{"class":59},[33,83659,83660,83662,83664,83666,83668],{"class":35,"line":130},[33,83661,52986],{"class":59},[33,83663,165],{"class":52945},[33,83665,56958],{"class":59},[33,83667,165],{"class":52945},[33,83669,52952],{"class":59},[33,83671,83672,83674,83676,83678,83680],{"class":35,"line":146},[33,83673,52986],{"class":59},[33,83675,165],{"class":52945},[33,83677,56958],{"class":59},[33,83679,165],{"class":52945},[33,83681,52952],{"class":59},[33,83683,83684,83686,83688,83690,83692],{"class":35,"line":267},[33,83685,52986],{"class":59},[33,83687,165],{"class":52945},[33,83689,56958],{"class":59},[33,83691,165],{"class":52945},[33,83693,52952],{"class":59},[33,83695,83696,83698,83700],{"class":35,"line":275},[33,83697,54062],{"class":59},[33,83699,2822],{"class":52945},[33,83701,52952],{"class":59},[33,83703,83704,83706,83708],{"class":35,"line":392},[33,83705,53789],{"class":59},[33,83707,53458],{"class":52945},[33,83709,52952],{"class":59},[33,83711,83712],{"class":35,"line":406},[33,83713,83714],{"class":59},"    const lis = document.querySelectorAll('li')\n",[33,83716,83717],{"class":35,"line":418},[33,83718,83719],{"class":59},"    const liss = Array.from(lis)\n",[33,83721,83722],{"class":35,"line":425},[33,83723,83724],{"class":59},"    liss.pop()\n",[33,83726,83727],{"class":35,"line":1147},[33,83728,83729],{"class":59},"    console.log(liss)\n",[33,83731,83732,83734,83736],{"class":35,"line":1329},[33,83733,54062],{"class":59},[33,83735,53458],{"class":52945},[33,83737,52952],{"class":59},[33,83739,83740,83742,83744],{"class":35,"line":1341},[33,83741,53430],{"class":59},[33,83743,53445],{"class":52945},[33,83745,52952],{"class":59},[19,83747,83748],{},[3145,83749],{"alt":28,"src":83750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23653,83752,83754],{"id":83753},"_41053-string","4.10.5.3 String",[19,83756,83757],{},[3145,83758],{"alt":28,"src":83759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24565,83761,83763],{"id":83762},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[23,83765,83767],{"className":54712,"code":83766,"language":54714,"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,83768,83769,83777,83785,83790,83795,83800,83804,83809,83814,83819,83827],{"__ignoreMap":28},[33,83770,83771,83773,83775],{"class":35,"line":36},[33,83772,2726],{"class":59},[33,83774,53445],{"class":52945},[33,83776,52952],{"class":59},[33,83778,83779,83781,83783],{"class":35,"line":43},[33,83780,53789],{"class":59},[33,83782,53458],{"class":52945},[33,83784,52952],{"class":59},[33,83786,83787],{"class":35,"line":130},[33,83788,83789],{"class":59},"    \u002F\u002F 把字符串转化为数组\n",[33,83791,83792],{"class":35,"line":146},[33,83793,83794],{"class":59},"    const str = 'pink,red'\n",[33,83796,83797],{"class":35,"line":267},[33,83798,83799],{"class":59},"    const arr = str.split(',')\n",[33,83801,83802],{"class":35,"line":275},[33,83803,82278],{"class":59},[33,83805,83806],{"class":35,"line":392},[33,83807,83808],{"class":59},"    const str1 = '2025-8-25'\n",[33,83810,83811],{"class":35,"line":406},[33,83812,83813],{"class":59},"    const arr1 = str1.split('-')\n",[33,83815,83816],{"class":35,"line":418},[33,83817,83818],{"class":59},"    console.log(arr1)\n",[33,83820,83821,83823,83825],{"class":35,"line":425},[33,83822,54062],{"class":59},[33,83824,53458],{"class":52945},[33,83826,52952],{"class":59},[33,83828,83829,83831,83833],{"class":35,"line":1147},[33,83830,53430],{"class":59},[33,83832,53445],{"class":52945},[33,83834,52952],{"class":59},[24565,83836,83838],{"id":83837},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83840,6842],{},[19,83842,83843],{},"substring(indexStart)",[19,83845,83846],{},"substring(indexStart, indexEnd)",[2822,83848,83849,83860,83872,83882],{},[165,83850,83851,83852,83855,83856,83859],{},"如果省略了 ",[30,83853,83854],{},"indexEnd","，则 ",[30,83857,83858],{},"substring()"," 提取字符直到字符串的末尾",[165,83861,83862,83863,83866,83867,83855,83869,83871],{},"如果 ",[30,83864,83865],{},"indexStart"," 等于 ",[30,83868,83854],{},[30,83870,83858],{}," 返回一个空字符串",[165,83873,83862,83874,83876,83877,83855,83879,83881],{},[30,83875,83865],{}," 大于 ",[30,83878,83854],{},[30,83880,83858],{}," 的效果就像交换了这两个参数一样",[165,83883,83884],{},"结束的索引号不包含想要截取的部分",[23,83886,83888],{"className":83129,"code":83887,"language":83131,"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,83889,83890,83902,83906,83940,83970,83974,84005,84009,84036,84066,84096,84100,84131],{"__ignoreMap":28},[33,83891,83892,83895,83897,83900],{"class":35,"line":36},[33,83893,83894],{"class":59},"const anyString ",[33,83896,64],{"class":63},[33,83898,83899],{"class":117}," \"Mozilla\"",[33,83901,2976],{"class":59},[33,83903,83904],{"class":35,"line":43},[33,83905,127],{"emptyLinePlaceholder":126},[33,83907,83908,83911,83913,83915,83917,83920,83922,83925,83927,83929,83931,83933,83935,83937],{"class":35,"line":130},[33,83909,83910],{"class":39},"console",[33,83912,2375],{"class":59},[33,83914,59890],{"class":39},[33,83916,109],{"class":59},[33,83918,83919],{"class":39},"anyString",[33,83921,2375],{"class":59},[33,83923,83924],{"class":39},"substring",[33,83926,109],{"class":59},[33,83928,2010],{"class":39},[33,83930,14093],{"class":59},[33,83932,2036],{"class":39},[33,83934,76894],{"class":59},[33,83936,34976],{"class":63},[33,83938,83939],{"class":117}," 'M'\n",[33,83941,83942,83944,83946,83948,83950,83952,83954,83956,83958,83960,83962,83964,83966,83968],{"class":35,"line":146},[33,83943,83910],{"class":39},[33,83945,2375],{"class":59},[33,83947,59890],{"class":39},[33,83949,109],{"class":59},[33,83951,83919],{"class":39},[33,83953,2375],{"class":59},[33,83955,83924],{"class":39},[33,83957,109],{"class":59},[33,83959,2036],{"class":39},[33,83961,14093],{"class":59},[33,83963,2010],{"class":39},[33,83965,76894],{"class":59},[33,83967,34976],{"class":63},[33,83969,83939],{"class":117},[33,83971,83972],{"class":35,"line":267},[33,83973,127],{"emptyLinePlaceholder":126},[33,83975,83976,83978,83980,83982,83984,83986,83988,83990,83992,83994,83996,83998,84000,84002],{"class":35,"line":275},[33,83977,83910],{"class":39},[33,83979,2375],{"class":59},[33,83981,59890],{"class":39},[33,83983,109],{"class":59},[33,83985,83919],{"class":39},[33,83987,2375],{"class":59},[33,83989,83924],{"class":39},[33,83991,109],{"class":59},[33,83993,2010],{"class":39},[33,83995,14093],{"class":59},[33,83997,2162],{"class":39},[33,83999,76894],{"class":59},[33,84001,34976],{"class":63},[33,84003,84004],{"class":117}," 'Mozill'\n",[33,84006,84007],{"class":35,"line":392},[33,84008,127],{"emptyLinePlaceholder":126},[33,84010,84011,84013,84015,84017,84019,84021,84023,84025,84027,84029,84031,84033],{"class":35,"line":406},[33,84012,83910],{"class":39},[33,84014,2375],{"class":59},[33,84016,59890],{"class":39},[33,84018,109],{"class":59},[33,84020,83919],{"class":39},[33,84022,2375],{"class":59},[33,84024,83924],{"class":39},[33,84026,109],{"class":59},[33,84028,2111],{"class":39},[33,84030,76894],{"class":59},[33,84032,34976],{"class":63},[33,84034,84035],{"class":117}," 'lla'\n",[33,84037,84038,84040,84042,84044,84046,84048,84050,84052,84054,84056,84058,84060,84062,84064],{"class":35,"line":418},[33,84039,83910],{"class":39},[33,84041,2375],{"class":59},[33,84043,59890],{"class":39},[33,84045,109],{"class":59},[33,84047,83919],{"class":39},[33,84049,2375],{"class":59},[33,84051,83924],{"class":39},[33,84053,109],{"class":59},[33,84055,2111],{"class":39},[33,84057,14093],{"class":59},[33,84059,2187],{"class":39},[33,84061,76950],{"class":59},[33,84063,34976],{"class":63},[33,84065,84035],{"class":117},[33,84067,84068,84070,84072,84074,84076,84078,84080,84082,84084,84086,84088,84090,84092,84094],{"class":35,"line":425},[33,84069,83910],{"class":39},[33,84071,2375],{"class":59},[33,84073,59890],{"class":39},[33,84075,109],{"class":59},[33,84077,83919],{"class":39},[33,84079,2375],{"class":59},[33,84081,83924],{"class":39},[33,84083,109],{"class":59},[33,84085,2187],{"class":39},[33,84087,14093],{"class":59},[33,84089,2111],{"class":39},[33,84091,76894],{"class":59},[33,84093,34976],{"class":63},[33,84095,84035],{"class":117},[33,84097,84098],{"class":35,"line":1147},[33,84099,127],{"emptyLinePlaceholder":126},[33,84101,84102,84104,84106,84108,84110,84112,84114,84116,84118,84120,84122,84124,84126,84128],{"class":35,"line":1329},[33,84103,83910],{"class":39},[33,84105,2375],{"class":59},[33,84107,59890],{"class":39},[33,84109,109],{"class":59},[33,84111,83919],{"class":39},[33,84113,2375],{"class":59},[33,84115,83924],{"class":39},[33,84117,109],{"class":59},[33,84119,2010],{"class":39},[33,84121,14093],{"class":59},[33,84123,2187],{"class":39},[33,84125,76894],{"class":59},[33,84127,34976],{"class":63},[33,84129,84130],{"class":117}," 'Mozilla'\n",[33,84132,84133,84135,84137,84139,84141,84143,84145,84147,84149,84151,84153,84155,84157,84159],{"class":35,"line":1341},[33,84134,83910],{"class":39},[33,84136,2375],{"class":59},[33,84138,59890],{"class":39},[33,84140,109],{"class":59},[33,84142,83919],{"class":39},[33,84144,2375],{"class":59},[33,84146,83924],{"class":39},[33,84148,109],{"class":59},[33,84150,2010],{"class":39},[33,84152,14093],{"class":59},[33,84154,2264],{"class":39},[33,84156,76894],{"class":59},[33,84158,34976],{"class":63},[33,84160,84130],{"class":117},[24565,84162,84164],{"id":84163},"_410533-startswith","4.10.5.3.3 startsWith",[19,84166,84167,84170,84171,84176,84177,84179,84180],{},[30,84168,84169],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[1968,84172,84173],{},[30,84174,84175],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[30,84178,3045],{}," 或 ",[30,84181,67662],{},[23,84183,84185],{"className":79136,"code":84184,"language":79138,"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,84186,84187,84199,84218,84223,84243],{"__ignoreMap":28},[33,84188,84189,84191,84194,84196],{"class":35,"line":36},[33,84190,8452],{"class":63},[33,84192,84193],{"class":59}," str1 ",[33,84195,64],{"class":63},[33,84197,84198],{"class":117}," \"Saturday night plans\"\n",[33,84200,84201,84203,84205,84208,84211,84213,84216],{"class":35,"line":43},[33,84202,79173],{"class":59},[33,84204,59890],{"class":3632},[33,84206,84207],{"class":59},"(str1.",[33,84209,84210],{"class":3632},"startsWith",[33,84212,109],{"class":59},[33,84214,84215],{"class":117},"\"Sat\"",[33,84217,121],{"class":59},[33,84219,84220],{"class":35,"line":130},[33,84221,84222],{"class":87},"\u002F\u002F Expected output: true\n",[33,84224,84225,84227,84229,84231,84233,84235,84237,84239,84241],{"class":35,"line":146},[33,84226,79173],{"class":59},[33,84228,59890],{"class":3632},[33,84230,84207],{"class":59},[33,84232,84210],{"class":3632},[33,84234,109],{"class":59},[33,84236,84215],{"class":117},[33,84238,14093],{"class":59},[33,84240,1891],{"class":39},[33,84242,121],{"class":59},[33,84244,84245],{"class":35,"line":267},[33,84246,84247],{"class":87},"\u002F\u002F Expected output: false\n",[23,84249,84251],{"className":52278,"code":84250,"language":52280,"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,84252,84253,84258,84263,84267,84272,84277],{"__ignoreMap":28},[33,84254,84255],{"class":35,"line":36},[33,84256,84257],{"class":59},"startsWith(searchString)\n",[33,84259,84260],{"class":35,"line":43},[33,84261,84262],{"class":59},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[33,84264,84265],{"class":35,"line":130},[33,84266,127],{"emptyLinePlaceholder":126},[33,84268,84269],{"class":35,"line":146},[33,84270,84271],{"class":59},"const str3 = 'pink老师上课中'\n",[33,84273,84274],{"class":35,"line":267},[33,84275,84276],{"class":59},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[33,84278,84279],{"class":35,"line":275},[33,84280,84281],{"class":59},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24565,84283,84285],{"id":84284},"_410534-includes","4.10.5.3.4 includes",[19,84287,84288],{},"includes(searchString) includes(searchString, position)",[162,84290,84291],{},[165,84292,84293],{},"searchString:",[19,84295,84296,84297,84299,84300,84305,84306,84311,84312,23155,84315,84318,84319,84322],{},"一个要在 ",[30,84298,2985],{}," 中查找的字符串。",[2057,84301,84304],{"href":84302,"rel":84303},"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",[25520],"不能是正则表达式","。所有非正则表达式的值都会被",[2057,84307,84310],{"href":84308,"rel":84309},"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",[25520],"强制转换为字符串","，因此如果该参数被省略或传入 ",[30,84313,84314],{},"undefined",[30,84316,84317],{},"includes()"," 方法会在字符串中搜索 ",[30,84320,84321],{},"\"undefined\"","，这通常不是你想要的",[162,84324,84325],{"start":43},[165,84326,84327,2676],{},[30,84328,84329],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84331,84332,84333,84336,84337],{},"在字符串中开始搜索 ",[30,84334,84335],{},"searchString"," 的位置。默认值为 ",[30,84338,2010],{},[162,84340,84341],{"start":130},[165,84342,84343],{},"返回值：",[19,84345,84346,84347,84349,84350,84354,84355],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[30,84348,84335],{}," 为空字符串的情况），则返回 ",[1968,84351,84352],{},[30,84353,3045],{}," ，否则返回 ",[1968,84356,84357],{},[30,84358,67662],{},[162,84360,84361],{"start":146},[165,84362,84363],{},"异常：",[19,84365,83862,84366,15453,84368,84372],{},[30,84367,84335],{},[2057,84369,84371],{"href":84302,"rel":84370},[25520],"是一个正则表达式","，则会抛出",[19,84374,84375],{},"只要是有就是true，不需要非得以谁开头结尾",[23,84377,84379],{"className":79136,"code":84378,"language":79138,"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,84380,84381,84392,84415,84434,84454,84476,84495],{"__ignoreMap":28},[33,84382,84383,84385,84387,84389],{"class":35,"line":36},[33,84384,8452],{"class":63},[33,84386,81416],{"class":59},[33,84388,64],{"class":63},[33,84390,84391],{"class":117}," \"To be, or not to be, that is the question.\"\n",[33,84393,84394,84396,84398,84401,84404,84406,84409,84412],{"class":35,"line":43},[33,84395,79173],{"class":59},[33,84397,59890],{"class":3632},[33,84399,84400],{"class":59},"(str.",[33,84402,84403],{"class":3632},"includes",[33,84405,109],{"class":59},[33,84407,84408],{"class":117},"\"To be\"",[33,84410,84411],{"class":59},"))",[33,84413,84414],{"class":87},"  \u002F\u002F true\n",[33,84416,84417,84419,84421,84423,84425,84427,84430,84432],{"class":35,"line":130},[33,84418,79173],{"class":59},[33,84420,59890],{"class":3632},[33,84422,84400],{"class":59},[33,84424,84403],{"class":3632},[33,84426,109],{"class":59},[33,84428,84429],{"class":117},"\"question\"",[33,84431,84411],{"class":59},[33,84433,84414],{"class":87},[33,84435,84436,84438,84440,84442,84444,84446,84449,84451],{"class":35,"line":146},[33,84437,79173],{"class":59},[33,84439,59890],{"class":3632},[33,84441,84400],{"class":59},[33,84443,84403],{"class":3632},[33,84445,109],{"class":59},[33,84447,84448],{"class":117},"\"nonexistent\"",[33,84450,84411],{"class":59},[33,84452,84453],{"class":87},"  \u002F\u002F false\n",[33,84455,84456,84458,84460,84462,84464,84466,84468,84470,84472,84474],{"class":35,"line":267},[33,84457,79173],{"class":59},[33,84459,59890],{"class":3632},[33,84461,84400],{"class":59},[33,84463,84403],{"class":3632},[33,84465,109],{"class":59},[33,84467,84408],{"class":117},[33,84469,14093],{"class":59},[33,84471,2036],{"class":39},[33,84473,84411],{"class":59},[33,84475,84453],{"class":87},[33,84477,84478,84480,84482,84484,84486,84488,84491,84493],{"class":35,"line":275},[33,84479,79173],{"class":59},[33,84481,59890],{"class":3632},[33,84483,84400],{"class":59},[33,84485,84403],{"class":3632},[33,84487,109],{"class":59},[33,84489,84490],{"class":117},"\"TO BE\"",[33,84492,84411],{"class":59},[33,84494,84453],{"class":87},[33,84496,84497,84499,84501,84503,84505,84507,84509,84511],{"class":35,"line":392},[33,84498,79173],{"class":59},[33,84500,59890],{"class":3632},[33,84502,84400],{"class":59},[33,84504,84403],{"class":3632},[33,84506,109],{"class":59},[33,84508,9312],{"class":117},[33,84510,84411],{"class":59},[33,84512,84414],{"class":87},[24565,84514,84516],{"id":84515},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[23,84518,84520],{"className":54712,"code":84519,"language":54714,"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,84521,84522,84530,84538,84543,84548,84553,84558,84563,84571],{"__ignoreMap":28},[33,84523,84524,84526,84528],{"class":35,"line":36},[33,84525,2726],{"class":59},[33,84527,53445],{"class":52945},[33,84529,52952],{"class":59},[33,84531,84532,84534,84536],{"class":35,"line":43},[33,84533,53789],{"class":59},[33,84535,53458],{"class":52945},[33,84537,52952],{"class":59},[33,84539,84540],{"class":35,"line":130},[33,84541,84542],{"class":59},"    const num = 10\n",[33,84544,84545],{"class":35,"line":146},[33,84546,84547],{"class":59},"    \u002F\u002F 强制转换\n",[33,84549,84550],{"class":35,"line":267},[33,84551,84552],{"class":59},"    console.log(String(num))\n",[33,84554,84555],{"class":35,"line":275},[33,84556,84557],{"class":59},"    \u002F\u002F toString()方法转换\n",[33,84559,84560],{"class":35,"line":392},[33,84561,84562],{"class":59},"    console.log(num.toString())\n",[33,84564,84565,84567,84569],{"class":35,"line":406},[33,84566,54062],{"class":59},[33,84568,53458],{"class":52945},[33,84570,52952],{"class":59},[33,84572,84573,84575,84577],{"class":35,"line":418},[33,84574,53430],{"class":59},[33,84576,53445],{"class":52945},[33,84578,52952],{"class":59},[24565,84580,84582],{"id":84581},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84584,84585],{},[3145,84586],{"alt":28,"src":84587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[23,84589,84591],{"className":52278,"code":84590,"language":52280,"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,84592,84593,84603,84617,84621,84629,84643,84663,84675,84683,84687,84695,84707,84715,84727,84732,84737,84742,84789,84805,84813,84821,84825],{"__ignoreMap":28},[33,84594,84595,84597,84599,84601],{"class":35,"line":36},[33,84596,52942],{"class":59},[33,84598,52946],{"class":52945},[33,84600,52949],{"class":3632},[33,84602,52952],{"class":59},[33,84604,84605,84607,84609,84611,84613,84615],{"class":35,"line":43},[33,84606,2726],{"class":59},[33,84608,52280],{"class":52945},[33,84610,52961],{"class":3632},[33,84612,64],{"class":59},[33,84614,52966],{"class":117},[33,84616,52952],{"class":59},[33,84618,84619],{"class":35,"line":130},[33,84620,127],{"emptyLinePlaceholder":126},[33,84622,84623,84625,84627],{"class":35,"line":146},[33,84624,2726],{"class":59},[33,84626,52979],{"class":52945},[33,84628,52952],{"class":59},[33,84630,84631,84633,84635,84637,84639,84641],{"class":35,"line":267},[33,84632,53789],{"class":59},[33,84634,52989],{"class":52945},[33,84636,52992],{"class":3632},[33,84638,64],{"class":59},[33,84640,52997],{"class":117},[33,84642,52952],{"class":59},[33,84644,84645,84647,84649,84651,84653,84655,84657,84659,84661],{"class":35,"line":275},[33,84646,53789],{"class":59},[33,84648,52989],{"class":52945},[33,84650,16578],{"class":3632},[33,84652,64],{"class":59},[33,84654,53036],{"class":117},[33,84656,53016],{"class":3632},[33,84658,64],{"class":59},[33,84660,53043],{"class":117},[33,84662,52952],{"class":59},[33,84664,84665,84667,84669,84671,84673],{"class":35,"line":392},[33,84666,53789],{"class":59},[33,84668,53052],{"class":52945},[33,84670,53055],{"class":59},[33,84672,53052],{"class":52945},[33,84674,52952],{"class":59},[33,84676,84677,84679,84681],{"class":35,"line":406},[33,84678,53430],{"class":59},[33,84680,52979],{"class":52945},[33,84682,52952],{"class":59},[33,84684,84685],{"class":35,"line":418},[33,84686,127],{"emptyLinePlaceholder":126},[33,84688,84689,84691,84693],{"class":35,"line":425},[33,84690,2726],{"class":59},[33,84692,53445],{"class":52945},[33,84694,52952],{"class":59},[33,84696,84697,84699,84701,84703,84705],{"class":35,"line":1147},[33,84698,53789],{"class":59},[33,84700,53256],{"class":52945},[33,84702,56958],{"class":59},[33,84704,53256],{"class":52945},[33,84706,52952],{"class":59},[33,84708,84709,84711,84713],{"class":35,"line":1329},[33,84710,53789],{"class":59},[33,84712,53458],{"class":52945},[33,84714,52952],{"class":59},[33,84716,84717,84719,84722,84724],{"class":35,"line":1341},[33,84718,12879],{"class":63},[33,84720,84721],{"class":39}," gift",[33,84723,15222],{"class":63},[33,84725,84726],{"class":117}," '50g的茶叶，清洗球'\n",[33,84728,84729],{"class":35,"line":1348},[33,84730,84731],{"class":87},"    \u002F\u002F 1.把字符串拆分为数组\n",[33,84733,84734],{"class":35,"line":1529},[33,84735,84736],{"class":87},"    \u002F\u002F console.log(gift.split(','))\n",[33,84738,84739],{"class":35,"line":1546},[33,84740,84741],{"class":87},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[33,84743,84744,84746,84748,84750,84753,84756,84758,84761,84763,84765,84767,84769,84771,84774,84776,84779,84781,84783,84785,84787],{"class":35,"line":1551},[33,84745,12879],{"class":63},[33,84747,75560],{"class":39},[33,84749,15222],{"class":63},[33,84751,84752],{"class":59}," gift.",[33,84754,84755],{"class":3632},"split",[33,84757,109],{"class":59},[33,84759,84760],{"class":117},"'，'",[33,84762,32477],{"class":59},[33,84764,75685],{"class":3632},[33,84766,109],{"class":59},[33,84768,81436],{"class":6877},[33,84770,81439],{"class":63},[33,84772,84773],{"class":117}," `\u003Cspan>【赠品】${",[33,84775,81436],{"class":59},[33,84777,84778],{"class":117},"}\u003C\u002Fspan>\u003Cbr>`",[33,84780,32477],{"class":59},[33,84782,75864],{"class":3632},[33,84784,109],{"class":59},[33,84786,75869],{"class":117},[33,84788,157],{"class":59},[33,84790,84791,84793,84795,84797,84799,84801,84803],{"class":35,"line":1566},[33,84792,54052],{"class":59},[33,84794,56043],{"class":3632},[33,84796,109],{"class":59},[33,84798,83571],{"class":117},[33,84800,75890],{"class":59},[33,84802,64],{"class":63},[33,84804,75626],{"class":59},[33,84806,84807,84809,84811],{"class":35,"line":1578},[33,84808,54062],{"class":59},[33,84810,53458],{"class":52945},[33,84812,52952],{"class":59},[33,84814,84815,84817,84819],{"class":35,"line":1583},[33,84816,53430],{"class":59},[33,84818,53445],{"class":52945},[33,84820,52952],{"class":59},[33,84822,84823],{"class":35,"line":3369},[33,84824,127],{"emptyLinePlaceholder":126},[33,84826,84827,84829,84831],{"class":35,"line":3396},[33,84828,53430],{"class":59},[33,84830,52280],{"class":52945},[33,84832,52952],{"class":59},[23653,84834,84836],{"id":84835},"_41054-number","4.10.5.4 Number",[19,84838,84839],{},[3145,84840],{"alt":28,"src":84841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84843,84844],{},"整数也可以进行toFixed来保留小数",[19,84846,84847],{},"比如：",[19,84849,84850],{},"const price=10",[19,84852,84853],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23653,84855,84857],{"id":84856},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84859,84860],{},[3145,84861],{"alt":28,"src":84862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[23,84864,84866],{"className":52278,"code":84865,"language":52280,"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,84867,84868,84878,84892,84896,84904,84918,84938,84950,84958,84964,84974,84984,84994,84998,85002,85008,85020,85034,85038,85042,85048,85060,85076,85086,85102,85106,85110,85116,85126,85136,85140,85144,85152,85164,85176,85188,85192,85196,85204,85216,85220,85224,85235,85245,85257,85269,85279,85283,85287,85295,85304,85316,85326,85336,85340,85344,85352,85361,85368,85378,85390,85394,85398,85407,85417,85428,85440,85452,85456,85460,85469,85479,85490,85494,85498,85504,85516,85528,85538,85548,85566,85578,85582,85586,85595,85607,85617,85627,85639,85643,85651,85659,85663,85671,85685,85693,85707,85735,85743,85751,85761,85765,85773,85781,85790,85798,85807,85817,85821,85825,85833,85841,85850,85858,85866,85879,85883,85887,85895,85903,85912,85920,85928,85943,85947,85951,85959,85967,85976,85984,85992,86006,86014,86018,86022,86027,86053,86058,86095,86100,86123,86128,86182,86187,86223,86227,86233,86238,86247,86261,86270,86289,86298,86308,86313,86318,86331,86336,86390,86416,86424,86432,86436],{"__ignoreMap":28},[33,84869,84870,84872,84874,84876],{"class":35,"line":36},[33,84871,52942],{"class":59},[33,84873,52946],{"class":52945},[33,84875,52949],{"class":3632},[33,84877,52952],{"class":59},[33,84879,84880,84882,84884,84886,84888,84890],{"class":35,"line":43},[33,84881,2726],{"class":59},[33,84883,52280],{"class":52945},[33,84885,52961],{"class":3632},[33,84887,64],{"class":59},[33,84889,52966],{"class":117},[33,84891,52952],{"class":59},[33,84893,84894],{"class":35,"line":130},[33,84895,127],{"emptyLinePlaceholder":126},[33,84897,84898,84900,84902],{"class":35,"line":146},[33,84899,2726],{"class":59},[33,84901,52979],{"class":52945},[33,84903,52952],{"class":59},[33,84905,84906,84908,84910,84912,84914,84916],{"class":35,"line":267},[33,84907,53789],{"class":59},[33,84909,52989],{"class":52945},[33,84911,52992],{"class":3632},[33,84913,64],{"class":59},[33,84915,52997],{"class":117},[33,84917,52952],{"class":59},[33,84919,84920,84922,84924,84926,84928,84930,84932,84934,84936],{"class":35,"line":275},[33,84921,53789],{"class":59},[33,84923,52989],{"class":52945},[33,84925,16578],{"class":3632},[33,84927,64],{"class":59},[33,84929,53036],{"class":117},[33,84931,53016],{"class":3632},[33,84933,64],{"class":59},[33,84935,53043],{"class":117},[33,84937,52952],{"class":59},[33,84939,84940,84942,84944,84946,84948],{"class":35,"line":392},[33,84941,53789],{"class":59},[33,84943,53052],{"class":52945},[33,84945,53055],{"class":59},[33,84947,53052],{"class":52945},[33,84949,52952],{"class":59},[33,84951,84952,84954,84956],{"class":35,"line":406},[33,84953,53789],{"class":59},[33,84955,1729],{"class":52945},[33,84957,52952],{"class":59},[33,84959,84960,84962],{"class":35,"line":418},[33,84961,8063],{"class":52945},[33,84963,17228],{"class":59},[33,84965,84966,84968,84970,84972],{"class":35,"line":425},[33,84967,56339],{"class":39},[33,84969,53082],{"class":59},[33,84971,2010],{"class":39},[33,84973,2976],{"class":59},[33,84975,84976,84978,84980,84982],{"class":35,"line":1147},[33,84977,56350],{"class":39},[33,84979,53082],{"class":59},[33,84981,2010],{"class":39},[33,84983,2976],{"class":59},[33,84985,84986,84988,84990,84992],{"class":35,"line":1329},[33,84987,74237],{"class":39},[33,84989,53082],{"class":59},[33,84991,62148],{"class":39},[33,84993,2976],{"class":59},[33,84995,84996],{"class":35,"line":1341},[33,84997,3855],{"class":59},[33,84999,85000],{"class":35,"line":1348},[33,85001,127],{"emptyLinePlaceholder":126},[33,85003,85004,85006],{"class":35,"line":1529},[33,85005,63765],{"class":3632},[33,85007,17228],{"class":59},[33,85009,85010,85012,85014,85016,85018],{"class":35,"line":1546},[33,85011,56415],{"class":39},[33,85013,53082],{"class":59},[33,85015,80215],{"class":39},[33,85017,53137],{"class":63},[33,85019,2976],{"class":59},[33,85021,85022,85024,85026,85028,85030,85032],{"class":35,"line":1551},[33,85023,56350],{"class":39},[33,85025,53082],{"class":59},[33,85027,2129],{"class":39},[33,85029,53137],{"class":63},[33,85031,53201],{"class":39},[33,85033,2976],{"class":59},[33,85035,85036],{"class":35,"line":1566},[33,85037,3855],{"class":59},[33,85039,85040],{"class":35,"line":1578},[33,85041,127],{"emptyLinePlaceholder":126},[33,85043,85044,85046],{"class":35,"line":1583},[33,85045,80266],{"class":3632},[33,85047,17228],{"class":59},[33,85049,85050,85052,85054,85056,85058],{"class":35,"line":3369},[33,85051,56339],{"class":39},[33,85053,53082],{"class":59},[33,85055,2392],{"class":39},[33,85057,53137],{"class":63},[33,85059,2976],{"class":59},[33,85061,85062,85064,85066,85068,85070,85072,85074],{"class":35,"line":3396},[33,85063,63502],{"class":39},[33,85065,53082],{"class":59},[33,85067,29777],{"class":39},[33,85069,80321],{"class":39},[33,85071,80324],{"class":39},[33,85073,2512],{"class":63},[33,85075,2976],{"class":59},[33,85077,85078,85080,85082,85084],{"class":35,"line":3401},[33,85079,56653],{"class":39},[33,85081,53082],{"class":59},[33,85083,53122],{"class":39},[33,85085,2976],{"class":59},[33,85087,85088,85090,85092,85094,85096,85098,85100],{"class":35,"line":3418},[33,85089,63619],{"class":39},[33,85091,53082],{"class":59},[33,85093,2036],{"class":39},[33,85095,53137],{"class":63},[33,85097,53166],{"class":39},[33,85099,63886],{"class":39},[33,85101,2976],{"class":59},[33,85103,85104],{"class":35,"line":3423},[33,85105,3855],{"class":59},[33,85107,85108],{"class":35,"line":3428},[33,85109,127],{"emptyLinePlaceholder":126},[33,85111,85112,85114],{"class":35,"line":3433},[33,85113,80384],{"class":3632},[33,85115,17228],{"class":59},[33,85117,85118,85120,85122,85124],{"class":35,"line":3447},[33,85119,63667],{"class":39},[33,85121,53082],{"class":59},[33,85123,63672],{"class":39},[33,85125,2976],{"class":59},[33,85127,85128,85130,85132,85134],{"class":35,"line":3452},[33,85129,56528],{"class":39},[33,85131,53082],{"class":59},[33,85133,63460],{"class":39},[33,85135,2976],{"class":59},[33,85137,85138],{"class":35,"line":4243},[33,85139,3855],{"class":59},[33,85141,85142],{"class":35,"line":4257},[33,85143,127],{"emptyLinePlaceholder":126},[33,85145,85146,85148,85150],{"class":35,"line":4265},[33,85147,80266],{"class":3632},[33,85149,57259],{"class":52945},[33,85151,17228],{"class":59},[33,85153,85154,85156,85158,85160,85162],{"class":35,"line":4270},[33,85155,56415],{"class":39},[33,85157,53082],{"class":59},[33,85159,2429],{"class":39},[33,85161,53137],{"class":63},[33,85163,2976],{"class":59},[33,85165,85166,85168,85170,85172,85174],{"class":35,"line":4276},[33,85167,56429],{"class":39},[33,85169,53082],{"class":59},[33,85171,2429],{"class":39},[33,85173,53137],{"class":63},[33,85175,2976],{"class":59},[33,85177,85178,85180,85182,85184,85186],{"class":35,"line":4282},[33,85179,63392],{"class":39},[33,85181,53082],{"class":59},[33,85183,2137],{"class":39},[33,85185,53137],{"class":63},[33,85187,2976],{"class":59},[33,85189,85190],{"class":35,"line":4287},[33,85191,3855],{"class":59},[33,85193,85194],{"class":35,"line":9608},[33,85195,127],{"emptyLinePlaceholder":126},[33,85197,85198,85200,85202],{"class":35,"line":9632},[33,85199,80266],{"class":3632},[33,85201,63946],{"class":3632},[33,85203,17228],{"class":59},[33,85205,85206,85208,85210,85212,85214],{"class":35,"line":9637},[33,85207,56415],{"class":39},[33,85209,53082],{"class":59},[33,85211,3391],{"class":39},[33,85213,53137],{"class":63},[33,85215,2976],{"class":59},[33,85217,85218],{"class":35,"line":9643},[33,85219,3855],{"class":59},[33,85221,85222],{"class":35,"line":9670},[33,85223,127],{"emptyLinePlaceholder":126},[33,85225,85226,85228,85230,85233],{"class":35,"line":9675},[33,85227,80266],{"class":3632},[33,85229,63946],{"class":3632},[33,85231,85232],{"class":3632}," .tag",[33,85234,17228],{"class":59},[33,85236,85237,85239,85241,85243],{"class":35,"line":9681},[33,85238,56653],{"class":39},[33,85240,53082],{"class":59},[33,85242,62511],{"class":39},[33,85244,2976],{"class":59},[33,85246,85247,85249,85251,85253,85255],{"class":35,"line":9693},[33,85248,56339],{"class":39},[33,85250,53082],{"class":59},[33,85252,1897],{"class":39},[33,85254,53137],{"class":63},[33,85256,2976],{"class":59},[33,85258,85259,85261,85263,85265,85267],{"class":35,"line":9705},[33,85260,56566],{"class":39},[33,85262,53082],{"class":59},[33,85264,2315],{"class":39},[33,85266,53137],{"class":63},[33,85268,2976],{"class":59},[33,85270,85271,85273,85275,85277],{"class":35,"line":9717},[33,85272,59059],{"class":39},[33,85274,53082],{"class":59},[33,85276,63712],{"class":39},[33,85278,2976],{"class":59},[33,85280,85281],{"class":35,"line":11375},[33,85282,3855],{"class":59},[33,85284,85285],{"class":35,"line":11400},[33,85286,127],{"emptyLinePlaceholder":126},[33,85288,85289,85291,85293],{"class":35,"line":11423},[33,85290,80266],{"class":3632},[33,85292,80558],{"class":3632},[33,85294,33116],{"class":59},[33,85296,85297,85299,85302],{"class":35,"line":11447},[33,85298,80266],{"class":3632},[33,85300,85301],{"class":3632}," .sub-total",[33,85303,17228],{"class":59},[33,85305,85306,85308,85310,85312,85314],{"class":35,"line":11452},[33,85307,56566],{"class":39},[33,85309,53082],{"class":59},[33,85311,2467],{"class":39},[33,85313,53137],{"class":63},[33,85315,2976],{"class":59},[33,85317,85318,85320,85322,85324],{"class":35,"line":11457},[33,85319,59059],{"class":39},[33,85321,53082],{"class":59},[33,85323,80581],{"class":39},[33,85325,2976],{"class":59},[33,85327,85328,85330,85332,85334],{"class":35,"line":11462},[33,85329,63479],{"class":39},[33,85331,53082],{"class":59},[33,85333,2036],{"class":39},[33,85335,2976],{"class":59},[33,85337,85338],{"class":35,"line":11471},[33,85339,3855],{"class":59},[33,85341,85342],{"class":35,"line":11476},[33,85343,127],{"emptyLinePlaceholder":126},[33,85345,85346,85348,85350],{"class":35,"line":11482},[33,85347,80266],{"class":3632},[33,85349,80598],{"class":3632},[33,85351,33116],{"class":59},[33,85353,85354,85356,85359],{"class":35,"line":11503},[33,85355,80266],{"class":3632},[33,85357,85358],{"class":3632}," .sub-total::before",[33,85360,33116],{"class":59},[33,85362,85363,85366],{"class":35,"line":11509},[33,85364,85365],{"class":3632},"    .amount::before",[33,85367,17228],{"class":59},[33,85369,85370,85372,85374,85376],{"class":35,"line":11523},[33,85371,80605],{"class":39},[33,85373,53082],{"class":59},[33,85375,80610],{"class":117},[33,85377,2976],{"class":59},[33,85379,85380,85382,85384,85386,85388],{"class":35,"line":11529},[33,85381,56566],{"class":39},[33,85383,53082],{"class":59},[33,85385,2315],{"class":39},[33,85387,53137],{"class":63},[33,85389,2976],{"class":59},[33,85391,85392],{"class":35,"line":11556},[33,85393,3855],{"class":59},[33,85395,85396],{"class":35,"line":11565},[33,85397,127],{"emptyLinePlaceholder":126},[33,85399,85400,85402,85405],{"class":35,"line":11571},[33,85401,80266],{"class":3632},[33,85403,85404],{"class":3632}," .spec",[33,85406,17228],{"class":59},[33,85408,85409,85411,85413,85415],{"class":35,"line":11579},[33,85410,63479],{"class":39},[33,85412,53082],{"class":59},[33,85414,1897],{"class":39},[33,85416,2976],{"class":59},[33,85418,85419,85421,85423,85426],{"class":35,"line":11584},[33,85420,59059],{"class":39},[33,85422,53082],{"class":59},[33,85424,85425],{"class":39},"#888",[33,85427,2976],{"class":59},[33,85429,85430,85432,85434,85436,85438],{"class":35,"line":18259},[33,85431,56566],{"class":39},[33,85433,53082],{"class":59},[33,85435,2366],{"class":39},[33,85437,53137],{"class":63},[33,85439,2976],{"class":59},[33,85441,85442,85444,85446,85448,85450],{"class":35,"line":18265},[33,85443,63642],{"class":39},[33,85445,53082],{"class":59},[33,85447,2517],{"class":39},[33,85449,53137],{"class":63},[33,85451,2976],{"class":59},[33,85453,85454],{"class":35,"line":18288},[33,85455,3855],{"class":59},[33,85457,85458],{"class":35,"line":18294},[33,85459,127],{"emptyLinePlaceholder":126},[33,85461,85462,85464,85467],{"class":35,"line":18317},[33,85463,80266],{"class":3632},[33,85465,85466],{"class":3632}," .count",[33,85468,17228],{"class":59},[33,85470,85471,85473,85475,85477],{"class":35,"line":18331},[33,85472,63479],{"class":39},[33,85474,53082],{"class":59},[33,85476,2036],{"class":39},[33,85478,2976],{"class":59},[33,85480,85481,85483,85485,85488],{"class":35,"line":18351},[33,85482,59059],{"class":39},[33,85484,53082],{"class":59},[33,85486,85487],{"class":39},"#aaa",[33,85489,2976],{"class":59},[33,85491,85492],{"class":35,"line":18357},[33,85493,3855],{"class":59},[33,85495,85496],{"class":35,"line":18368},[33,85497,127],{"emptyLinePlaceholder":126},[33,85499,85500,85502],{"class":35,"line":18391},[33,85501,74116],{"class":3632},[33,85503,17228],{"class":59},[33,85505,85506,85508,85510,85512,85514],{"class":35,"line":18413},[33,85507,56415],{"class":39},[33,85509,53082],{"class":59},[33,85511,80215],{"class":39},[33,85513,53137],{"class":63},[33,85515,2976],{"class":59},[33,85517,85518,85520,85522,85524,85526],{"class":35,"line":18418},[33,85519,56350],{"class":39},[33,85521,53082],{"class":59},[33,85523,2010],{"class":39},[33,85525,53201],{"class":39},[33,85527,2976],{"class":59},[33,85529,85530,85532,85534,85536],{"class":35,"line":18424},[33,85531,56653],{"class":39},[33,85533,53082],{"class":59},[33,85535,53122],{"class":39},[33,85537,2976],{"class":59},[33,85539,85540,85542,85544,85546],{"class":35,"line":18438},[33,85541,56664],{"class":39},[33,85543,53082],{"class":59},[33,85545,53225],{"class":39},[33,85547,2976],{"class":59},[33,85549,85550,85553,85555,85557,85559,85561,85564],{"class":35,"line":18451},[33,85551,85552],{"class":39},"      border-top",[33,85554,53082],{"class":59},[33,85556,2036],{"class":39},[33,85558,53137],{"class":63},[33,85560,53166],{"class":39},[33,85562,85563],{"class":39}," #4e4e4e",[33,85565,2976],{"class":59},[33,85567,85568,85570,85572,85574,85576],{"class":35,"line":18456},[33,85569,56339],{"class":39},[33,85571,53082],{"class":59},[33,85573,2517],{"class":39},[33,85575,53137],{"class":63},[33,85577,2976],{"class":59},[33,85579,85580],{"class":35,"line":18470},[33,85581,3855],{"class":59},[33,85583,85584],{"class":35,"line":18475},[33,85585,127],{"emptyLinePlaceholder":126},[33,85587,85588,85590,85593],{"class":35,"line":18481},[33,85589,74116],{"class":3632},[33,85591,85592],{"class":3632}," .amount",[33,85594,17228],{"class":59},[33,85596,85597,85599,85601,85603,85605],{"class":35,"line":18486},[33,85598,56566],{"class":39},[33,85600,53082],{"class":59},[33,85602,2467],{"class":39},[33,85604,53137],{"class":63},[33,85606,2976],{"class":59},[33,85608,85609,85611,85613,85615],{"class":35,"line":18500},[33,85610,59059],{"class":39},[33,85612,53082],{"class":59},[33,85614,80581],{"class":39},[33,85616,2976],{"class":59},[33,85618,85619,85621,85623,85625],{"class":35,"line":18505},[33,85620,63976],{"class":39},[33,85622,53082],{"class":59},[33,85624,53134],{"class":39},[33,85626,2976],{"class":59},[33,85628,85629,85631,85633,85635,85637],{"class":35,"line":18510},[33,85630,63392],{"class":39},[33,85632,53082],{"class":59},[33,85634,2473],{"class":39},[33,85636,53137],{"class":63},[33,85638,2976],{"class":59},[33,85640,85641],{"class":35,"line":18524},[33,85642,3855],{"class":59},[33,85644,85645,85647,85649],{"class":35,"line":18536},[33,85646,54062],{"class":59},[33,85648,1729],{"class":52945},[33,85650,52952],{"class":59},[33,85652,85653,85655,85657],{"class":35,"line":18541},[33,85654,53430],{"class":59},[33,85656,52979],{"class":52945},[33,85658,52952],{"class":59},[33,85660,85661],{"class":35,"line":18554},[33,85662,127],{"emptyLinePlaceholder":126},[33,85664,85665,85667,85669],{"class":35,"line":18559},[33,85666,2726],{"class":59},[33,85668,53445],{"class":52945},[33,85670,52952],{"class":59},[33,85672,85673,85675,85677,85679,85681,85683],{"class":35,"line":18564},[33,85674,53789],{"class":59},[33,85676,53256],{"class":52945},[33,85678,55131],{"class":3632},[33,85680,64],{"class":59},[33,85682,64250],{"class":117},[33,85684,52952],{"class":59},[33,85686,85687,85689,85691],{"class":35,"line":18569},[33,85688,54062],{"class":59},[33,85690,53256],{"class":52945},[33,85692,52952],{"class":59},[33,85694,85695,85697,85699,85701,85703,85705],{"class":35,"line":18582},[33,85696,53789],{"class":59},[33,85698,53256],{"class":52945},[33,85700,55131],{"class":3632},[33,85702,64],{"class":59},[33,85704,64222],{"class":117},[33,85706,52952],{"class":59},[33,85708,85709,85711,85713,85716,85718,85720,85722,85725,85727,85729,85731,85733],{"class":35,"line":18587},[33,85710,52986],{"class":59},[33,85712,53256],{"class":52945},[33,85714,85715],{"class":59},">合计：\u003C",[33,85717,33],{"class":52945},[33,85719,55131],{"class":3632},[33,85721,64],{"class":59},[33,85723,85724],{"class":117},"\"amount\"",[33,85726,56958],{"class":59},[33,85728,33],{"class":52945},[33,85730,56958],{"class":59},[33,85732,53256],{"class":52945},[33,85734,52952],{"class":59},[33,85736,85737,85739,85741],{"class":35,"line":34280},[33,85738,54062],{"class":59},[33,85740,53256],{"class":52945},[33,85742,52952],{"class":59},[33,85744,85745,85747,85749],{"class":35,"line":34286},[33,85746,53789],{"class":59},[33,85748,53458],{"class":52945},[33,85750,52952],{"class":59},[33,85752,85753,85755,85757,85759],{"class":35,"line":34292},[33,85754,12879],{"class":63},[33,85756,81018],{"class":39},[33,85758,15222],{"class":63},[33,85760,57091],{"class":59},[33,85762,85763],{"class":35,"line":34298},[33,85764,81027],{"class":59},[33,85766,85767,85769,85771],{"class":35,"line":34304},[33,85768,81032],{"class":59},[33,85770,81035],{"class":117},[33,85772,33116],{"class":59},[33,85774,85775,85777,85779],{"class":35,"line":34315},[33,85776,81042],{"class":59},[33,85778,81045],{"class":117},[33,85780,33116],{"class":59},[33,85782,85783,85785,85788],{"class":35,"line":34321},[33,85784,81052],{"class":59},[33,85786,85787],{"class":39},"289.9",[33,85789,33116],{"class":59},[33,85791,85792,85794,85796],{"class":35,"line":34341},[33,85793,81062],{"class":59},[33,85795,81065],{"class":117},[33,85797,33116],{"class":59},[33,85799,85800,85803,85805],{"class":35,"line":34347},[33,85801,85802],{"class":59},"        count: ",[33,85804,1897],{"class":39},[33,85806,33116],{"class":59},[33,85808,85809,85812,85815],{"class":35,"line":34358},[33,85810,85811],{"class":59},"        spec: { color: ",[33,85813,85814],{"class":117},"'白色'",[33,85816,57248],{"class":59},[33,85818,85819],{"class":35,"line":34364},[33,85820,79533],{"class":59},[33,85822,85823],{"class":35,"line":34370},[33,85824,81027],{"class":59},[33,85826,85827,85829,85831],{"class":35,"line":34376},[33,85828,81032],{"class":59},[33,85830,81126],{"class":117},[33,85832,33116],{"class":59},[33,85834,85835,85837,85839],{"class":35,"line":34382},[33,85836,81042],{"class":59},[33,85838,81135],{"class":117},[33,85840,33116],{"class":59},[33,85842,85843,85845,85848],{"class":35,"line":34388},[33,85844,81052],{"class":59},[33,85846,85847],{"class":39},"109.8",[33,85849,33116],{"class":59},[33,85851,85852,85854,85856],{"class":35,"line":34394},[33,85853,81062],{"class":59},[33,85855,81153],{"class":117},[33,85857,33116],{"class":59},[33,85859,85860,85862,85864],{"class":35,"line":34400},[33,85861,85802],{"class":59},[33,85863,1891],{"class":39},[33,85865,33116],{"class":59},[33,85867,85868,85871,85873,85875,85877],{"class":35,"line":34420},[33,85869,85870],{"class":59},"        spec: { size: ",[33,85872,83543],{"class":117},[33,85874,57108],{"class":59},[33,85876,83548],{"class":117},[33,85878,57248],{"class":59},[33,85880,85881],{"class":35,"line":34426},[33,85882,79533],{"class":59},[33,85884,85885],{"class":35,"line":34442},[33,85886,81027],{"class":59},[33,85888,85889,85891,85893],{"class":35,"line":34448},[33,85890,81032],{"class":59},[33,85892,81170],{"class":117},[33,85894,33116],{"class":59},[33,85896,85897,85899,85901],{"class":35,"line":34462},[33,85898,81042],{"class":59},[33,85900,81179],{"class":117},[33,85902,33116],{"class":59},[33,85904,85905,85907,85910],{"class":35,"line":34468},[33,85906,81052],{"class":59},[33,85908,85909],{"class":39},"488",[33,85911,33116],{"class":59},[33,85913,85914,85916,85918],{"class":35,"line":34483},[33,85915,81062],{"class":59},[33,85917,81197],{"class":117},[33,85919,33116],{"class":59},[33,85921,85922,85924,85926],{"class":35,"line":34489},[33,85923,85802],{"class":59},[33,85925,2036],{"class":39},[33,85927,33116],{"class":59},[33,85929,85930,85932,85935,85938,85941],{"class":35,"line":34498},[33,85931,85811],{"class":59},[33,85933,85934],{"class":117},"'青色'",[33,85936,85937],{"class":59},", sum: ",[33,85939,85940],{"class":117},"'一大四小'",[33,85942,57248],{"class":59},[33,85944,85945],{"class":35,"line":34504},[33,85946,79533],{"class":59},[33,85948,85949],{"class":35,"line":34513},[33,85950,81027],{"class":59},[33,85952,85953,85955,85957],{"class":35,"line":34519},[33,85954,81032],{"class":59},[33,85956,81214],{"class":117},[33,85958,33116],{"class":59},[33,85960,85961,85963,85965],{"class":35,"line":34525},[33,85962,81042],{"class":59},[33,85964,81223],{"class":117},[33,85966,33116],{"class":59},[33,85968,85969,85971,85974],{"class":35,"line":34534},[33,85970,81052],{"class":59},[33,85972,85973],{"class":39},"139",[33,85975,33116],{"class":59},[33,85977,85978,85980,85982],{"class":35,"line":34540},[33,85979,81062],{"class":59},[33,85981,81241],{"class":117},[33,85983,33116],{"class":59},[33,85985,85986,85988,85990],{"class":35,"line":34551},[33,85987,85802],{"class":59},[33,85989,2036],{"class":39},[33,85991,33116],{"class":59},[33,85993,85994,85996,85999,86001,86004],{"class":35,"line":34557},[33,85995,85870],{"class":59},[33,85997,85998],{"class":117},"'小号'",[33,86000,57108],{"class":59},[33,86002,86003],{"class":117},"'紫色'",[33,86005,57114],{"class":59},[33,86007,86008,86011],{"class":35,"line":34576},[33,86009,86010],{"class":59},"        gift: ",[33,86012,86013],{"class":117},"'50g茶叶,清洗球'\n",[33,86015,86016],{"class":35,"line":34582},[33,86017,54043],{"class":59},[33,86019,86020],{"class":35,"line":34593},[33,86021,54754],{"class":59},[33,86023,86024],{"class":35,"line":34599},[33,86025,86026],{"class":87},"    \u002F\u002F  1.根据数据渲染页面\n",[33,86028,86029,86031,86033,86035,86037,86039,86041,86043,86045,86047,86049,86051],{"class":35,"line":34619},[33,86030,54052],{"class":59},[33,86032,56043],{"class":3632},[33,86034,109],{"class":59},[33,86036,81541],{"class":117},[33,86038,75890],{"class":59},[33,86040,64],{"class":63},[33,86042,81688],{"class":59},[33,86044,75685],{"class":3632},[33,86046,109],{"class":59},[33,86048,81436],{"class":6877},[33,86050,81439],{"class":63},[33,86052,17228],{"class":59},[33,86054,86055],{"class":35,"line":34635},[33,86056,86057],{"class":87},"      \u002F\u002F 对象解构\n",[33,86059,86060,86062,86064,86066,86068,86070,86072,86075,86077,86079,86081,86084,86086,86089,86091,86093],{"class":35,"line":34641},[33,86061,59871],{"class":63},[33,86063,81448],{"class":59},[33,86065,81460],{"class":39},[33,86067,14093],{"class":59},[33,86069,1008],{"class":39},[33,86071,14093],{"class":59},[33,86073,86074],{"class":39},"count",[33,86076,14093],{"class":59},[33,86078,81455],{"class":39},[33,86080,14093],{"class":59},[33,86082,86083],{"class":39},"spec",[33,86085,14093],{"class":59},[33,86087,86088],{"class":39},"gift",[33,86090,81463],{"class":59},[33,86092,64],{"class":63},[33,86094,81468],{"class":59},[33,86096,86097],{"class":35,"line":34655},[33,86098,86099],{"class":87},"      \u002F\u002F 规格文字模块处理\n",[33,86101,86102,86104,86107,86109,86111,86113,86115,86117,86119,86121],{"class":35,"line":34661},[33,86103,59871],{"class":63},[33,86105,86106],{"class":39}," text",[33,86108,15222],{"class":63},[33,86110,83578],{"class":59},[33,86112,83581],{"class":3632},[33,86114,83584],{"class":59},[33,86116,75864],{"class":3632},[33,86118,109],{"class":59},[33,86120,83591],{"class":117},[33,86122,157],{"class":59},[33,86124,86125],{"class":35,"line":34667},[33,86126,86127],{"class":87},"      \u002F\u002F 处理赠品模块\n",[33,86129,86130,86132,86134,86136,86139,86141,86143,86145,86147,86150,86152,86154,86156,86158,86160,86163,86165,86168,86170,86172,86174,86176,86178,86180],{"class":35,"line":34678},[33,86131,59871],{"class":63},[33,86133,75560],{"class":39},[33,86135,15222],{"class":63},[33,86137,86138],{"class":59}," gift ",[33,86140,2801],{"class":63},[33,86142,84752],{"class":59},[33,86144,84755],{"class":3632},[33,86146,109],{"class":59},[33,86148,86149],{"class":117},"','",[33,86151,32477],{"class":59},[33,86153,75685],{"class":3632},[33,86155,109],{"class":59},[33,86157,81436],{"class":6877},[33,86159,81439],{"class":63},[33,86161,86162],{"class":117}," `\u003Cspan class=\"tag\">【赠品】${",[33,86164,81436],{"class":59},[33,86166,86167],{"class":117},"}\u003C\u002Fspan>`",[33,86169,32477],{"class":59},[33,86171,75864],{"class":3632},[33,86173,109],{"class":59},[33,86175,75869],{"class":117},[33,86177,15372],{"class":59},[33,86179,2676],{"class":63},[33,86181,71746],{"class":117},[33,86183,86184],{"class":35,"line":34684},[33,86185,86186],{"class":87},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[33,86188,86189,86191,86194,86196,86199,86201,86203,86205,86208,86210,86212,86214,86217,86219,86221],{"class":35,"line":34690},[33,86190,59871],{"class":63},[33,86192,86193],{"class":39}," subtotal",[33,86195,15222],{"class":63},[33,86197,86198],{"class":59}," ((price ",[33,86200,1540],{"class":63},[33,86202,840],{"class":39},[33,86204,8178],{"class":63},[33,86206,86207],{"class":59}," count) ",[33,86209,2401],{"class":63},[33,86211,840],{"class":39},[33,86213,32477],{"class":59},[33,86215,86216],{"class":3632},"toFixed",[33,86218,109],{"class":59},[33,86220,1897],{"class":39},[33,86222,157],{"class":59},[33,86224,86225],{"class":35,"line":34700},[33,86226,127],{"emptyLinePlaceholder":126},[33,86228,86229,86231],{"class":35,"line":34706},[33,86230,75623],{"class":63},[33,86232,71810],{"class":117},[33,86234,86235],{"class":35,"line":34717},[33,86236,86237],{"class":117},"        \u003Cdiv class=\"item\">\n",[33,86239,86240,86243,86245],{"class":35,"line":34723},[33,86241,86242],{"class":117},"          \u003Cimg src=\"${",[33,86244,81460],{"class":59},[33,86246,81492],{"class":117},[33,86248,86249,86252,86254,86257,86259],{"class":35,"line":34733},[33,86250,86251],{"class":117},"          \u003Cp class=\"name\">${",[33,86253,1008],{"class":59},[33,86255,86256],{"class":117},"}${",[33,86258,2985],{"class":59},[33,86260,81502],{"class":117},[33,86262,86263,86266,86268],{"class":35,"line":34738},[33,86264,86265],{"class":117},"          \u003Cp class=\"spec\">${",[33,86267,6848],{"class":59},[33,86269,81502],{"class":117},[33,86271,86272,86275,86277,86279,86281,86283,86285,86287],{"class":35,"line":34744},[33,86273,86274],{"class":117},"          \u003Cp class=\"price\">${",[33,86276,81455],{"class":59},[33,86278,2375],{"class":117},[33,86280,86216],{"class":3632},[33,86282,109],{"class":117},[33,86284,1897],{"class":39},[33,86286,2247],{"class":117},[33,86288,81502],{"class":117},[33,86290,86291,86294,86296],{"class":35,"line":34793},[33,86292,86293],{"class":117},"          \u003Cp class=\"count\">x${",[33,86295,86074],{"class":59},[33,86297,81502],{"class":117},[33,86299,86300,86303,86306],{"class":35,"line":34840},[33,86301,86302],{"class":117},"          \u003Cp class=\"sub-total\">${",[33,86304,86305],{"class":59},"subtotal",[33,86307,81502],{"class":117},[33,86309,86310],{"class":35,"line":34845},[33,86311,86312],{"class":117},"        \u003C\u002Fdiv> \n",[33,86314,86315],{"class":35,"line":34851},[33,86316,86317],{"class":117},"             `\n",[33,86319,86320,86323,86325,86327,86329],{"class":35,"line":34870},[33,86321,86322],{"class":59},"    }).",[33,86324,75864],{"class":3632},[33,86326,109],{"class":59},[33,86328,75869],{"class":117},[33,86330,157],{"class":59},[33,86332,86333],{"class":35,"line":34876},[33,86334,86335],{"class":87},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[33,86337,86338,86340,86342,86344,86346,86349,86351,86354,86356,86358,86360,86363,86366,86368,86371,86373,86375,86377,86380,86382,86384,86386,86388],{"class":35,"line":34896},[33,86339,12879],{"class":63},[33,86341,64427],{"class":39},[33,86343,15222],{"class":63},[33,86345,81688],{"class":59},[33,86347,86348],{"class":3632},"reduce",[33,86350,4044],{"class":59},[33,86352,86353],{"class":6877},"prev",[33,86355,14093],{"class":59},[33,86357,81436],{"class":6877},[33,86359,15372],{"class":59},[33,86361,86362],{"class":63},"=>",[33,86364,86365],{"class":59}," prev ",[33,86367,2298],{"class":63},[33,86369,86370],{"class":59}," (item.price ",[33,86372,1540],{"class":63},[33,86374,840],{"class":39},[33,86376,8178],{"class":63},[33,86378,86379],{"class":59}," item.count) ",[33,86381,2401],{"class":63},[33,86383,840],{"class":39},[33,86385,14093],{"class":59},[33,86387,2010],{"class":39},[33,86389,157],{"class":59},[33,86391,86392,86394,86396,86398,86401,86403,86405,86408,86410,86412,86414],{"class":35,"line":34902},[33,86393,54052],{"class":59},[33,86395,56043],{"class":3632},[33,86397,109],{"class":59},[33,86399,86400],{"class":117},"'.amount'",[33,86402,75890],{"class":59},[33,86404,64],{"class":63},[33,86406,86407],{"class":59}," total.",[33,86409,86216],{"class":3632},[33,86411,109],{"class":59},[33,86413,1897],{"class":39},[33,86415,157],{"class":59},[33,86417,86418,86420,86422],{"class":35,"line":34908},[33,86419,54062],{"class":59},[33,86421,53458],{"class":52945},[33,86423,52952],{"class":59},[33,86425,86426,86428,86430],{"class":35,"line":34918},[33,86427,53430],{"class":59},[33,86429,53445],{"class":52945},[33,86431,52952],{"class":59},[33,86433,86434],{"class":35,"line":34923},[33,86435,127],{"emptyLinePlaceholder":126},[33,86437,86438,86440,86442],{"class":35,"line":34929},[33,86439,53430],{"class":59},[33,86441,52280],{"class":52945},[33,86443,52952],{"class":59},[14,86445,86447],{"id":86446},"_411-编程思想","4.11 编程思想",[633,86449,86451],{"id":86450},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86453,86454,86457],{},[1968,86455,86456],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86459,86460],{},"调用就可以了",[19,86462,86463],{},[3145,86464],{"alt":28,"src":86465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[633,86467,86469],{"id":86468},"_4112-面向对象","4.11.2 面向对象",[19,86471,86472],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86474,86475],{},[3145,86476],{"alt":28,"src":86477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86479,86480],{},"面向对象的特性：",[2822,86482,86483,86486,86489],{},[165,86484,86485],{},"封装性",[165,86487,86488],{},"继承性",[165,86490,86491],{},"多态性",[633,86493,86495],{"id":86494},"_4113-两者比较","4.11.3 两者比较",[19,86497,86498],{},[3145,86499],{"alt":28,"src":86500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86502,86504],{"id":86503},"_412-构造函数回顾","4.12 构造函数回顾",[19,86506,86507],{},[3145,86508],{"alt":28,"src":86509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86511,86512],{},[3145,86513],{"alt":28,"src":86514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86516,86517],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86519,86520],{},[3145,86521],{"alt":28,"src":86522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86524,86526],{"id":86525},"_413-原型","4.13 原型",[633,86528,86530],{"id":86529},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86532,86533],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86535,86536],{},[3145,86537],{"alt":28,"src":86538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86540,86541],{},[3145,86542],{"alt":28,"src":86543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86545,86546],{},"原型是构造函数的属性，它也是一个对象",[19,86548,86549],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86551,86552],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[23,86554,86556],{"className":54712,"code":86555,"language":54714,"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,86557,86558,86566,86571,86579,86584,86589,86594,86599,86604,86608,86612,86616,86621,86626,86630,86635,86640,86645,86650,86655,86659,86667],{"__ignoreMap":28},[33,86559,86560,86562,86564],{"class":35,"line":36},[33,86561,2726],{"class":59},[33,86563,53445],{"class":52945},[33,86565,52952],{"class":59},[33,86567,86568],{"class":35,"line":43},[33,86569,86570],{"class":87},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[33,86572,86573,86575,86577],{"class":35,"line":130},[33,86574,53789],{"class":59},[33,86576,53458],{"class":52945},[33,86578,52952],{"class":59},[33,86580,86581],{"class":35,"line":146},[33,86582,86583],{"class":59},"    function Star(uname, age) {\n",[33,86585,86586],{"class":35,"line":267},[33,86587,86588],{"class":59},"      this.uname = uname,\n",[33,86590,86591],{"class":35,"line":275},[33,86592,86593],{"class":59},"        this.age = age\n",[33,86595,86596],{"class":35,"line":392},[33,86597,86598],{"class":59},"      \u002F\u002F this.sing = function () {\n",[33,86600,86601],{"class":35,"line":406},[33,86602,86603],{"class":59},"      \u002F\u002F   console.log('唱歌')\n",[33,86605,86606],{"class":35,"line":418},[33,86607,127],{"emptyLinePlaceholder":126},[33,86609,86610],{"class":35,"line":425},[33,86611,61680],{"class":59},[33,86613,86614],{"class":35,"line":1147},[33,86615,3855],{"class":59},[33,86617,86618],{"class":35,"line":1329},[33,86619,86620],{"class":59},"    Star.prototype.sing = function () {\n",[33,86622,86623],{"class":35,"line":1341},[33,86624,86625],{"class":59},"      console.log('唱歌')\n",[33,86627,86628],{"class":35,"line":1348},[33,86629,3855],{"class":59},[33,86631,86632],{"class":35,"line":1529},[33,86633,86634],{"class":59},"    \u002F\u002F console.dir(Star.prototype)\n",[33,86636,86637],{"class":35,"line":1546},[33,86638,86639],{"class":59},"    const pink = new Star('pink', 18)\n",[33,86641,86642],{"class":35,"line":1551},[33,86643,86644],{"class":59},"    const red = new Star('red', 20)\n",[33,86646,86647],{"class":35,"line":1566},[33,86648,86649],{"class":59},"    pink.sing()\n",[33,86651,86652],{"class":35,"line":1578},[33,86653,86654],{"class":59},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[33,86656,86657],{"class":35,"line":1583},[33,86658,127],{"emptyLinePlaceholder":126},[33,86660,86661,86663,86665],{"class":35,"line":3369},[33,86662,54062],{"class":59},[33,86664,53458],{"class":52945},[33,86666,52952],{"class":59},[33,86668,86669,86671,86673],{"class":35,"line":3396},[33,86670,53430],{"class":59},[33,86672,53445],{"class":52945},[33,86674,52952],{"class":59},[19,86676,86677],{},[3145,86678],{"alt":28,"src":86679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[23,86681,86683],{"className":54712,"code":86682,"language":54714,"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,86684,86685,86693,86701,86706,86711,86716,86721,86725,86730,86735,86740,86744,86749,86753,86757,86762,86766,86774],{"__ignoreMap":28},[33,86686,86687,86689,86691],{"class":35,"line":36},[33,86688,2726],{"class":59},[33,86690,53445],{"class":52945},[33,86692,52952],{"class":59},[33,86694,86695,86697,86699],{"class":35,"line":43},[33,86696,53789],{"class":59},[33,86698,53458],{"class":52945},[33,86700,52952],{"class":59},[33,86702,86703],{"class":35,"line":130},[33,86704,86705],{"class":59},"    let that\n",[33,86707,86708],{"class":35,"line":146},[33,86709,86710],{"class":59},"    function Star(uname) {\n",[33,86712,86713],{"class":35,"line":267},[33,86714,86715],{"class":59},"      this.uname = uname\n",[33,86717,86718],{"class":35,"line":275},[33,86719,86720],{"class":59},"      that = this\n",[33,86722,86723],{"class":35,"line":392},[33,86724,3855],{"class":59},[33,86726,86727],{"class":35,"line":406},[33,86728,86729],{"class":59},"    \u002F\u002F 实例对象是 ldh\n",[33,86731,86732],{"class":35,"line":418},[33,86733,86734],{"class":59},"    const ldh = new Star('刘德华')\n",[33,86736,86737],{"class":35,"line":425},[33,86738,86739],{"class":59},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[33,86741,86742],{"class":35,"line":1147},[33,86743,127],{"emptyLinePlaceholder":126},[33,86745,86746],{"class":35,"line":1329},[33,86747,86748],{"class":59},"    Star.sing = function () {\n",[33,86750,86751],{"class":35,"line":1341},[33,86752,86625],{"class":59},[33,86754,86755],{"class":35,"line":1348},[33,86756,3855],{"class":59},[33,86758,86759],{"class":35,"line":1529},[33,86760,86761],{"class":59},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[33,86763,86764],{"class":35,"line":1546},[33,86765,127],{"emptyLinePlaceholder":126},[33,86767,86768,86770,86772],{"class":35,"line":1551},[33,86769,54062],{"class":59},[33,86771,53458],{"class":52945},[33,86773,52952],{"class":59},[33,86775,86776,86778,86780],{"class":35,"line":1566},[33,86777,53430],{"class":59},[33,86779,53445],{"class":52945},[33,86781,52952],{"class":59},[19,86783,86784],{},"构造函数的this指向的是实例对象；",[19,86786,86787],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[633,86789,86791],{"id":86790},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86793,86794],{},[3145,86795],{"alt":28,"src":86796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[23,86798,86800],{"className":54712,"code":86799,"language":54714,"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,86801,86802,86810,86818,86823,86828,86833,86838,86843,86848,86853,86858,86863,86868,86872,86877,86882,86887,86892,86896,86901,86906,86911,86916,86920,86925,86930,86935,86940,86944,86949,86953,86961],{"__ignoreMap":28},[33,86803,86804,86806,86808],{"class":35,"line":36},[33,86805,2726],{"class":59},[33,86807,53445],{"class":52945},[33,86809,52952],{"class":59},[33,86811,86812,86814,86816],{"class":35,"line":43},[33,86813,53789],{"class":59},[33,86815,53458],{"class":52945},[33,86817,52952],{"class":59},[33,86819,86820],{"class":35,"line":130},[33,86821,86822],{"class":59},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[33,86824,86825],{"class":35,"line":146},[33,86826,86827],{"class":59},"    const arr = [1, 2, 3]\n",[33,86829,86830],{"class":35,"line":267},[33,86831,86832],{"class":59},"    \u002F\u002F 自己定义数组的扩展方法\n",[33,86834,86835],{"class":35,"line":275},[33,86836,86837],{"class":59},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[33,86839,86840],{"class":35,"line":392},[33,86841,86842],{"class":59},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[33,86844,86845],{"class":35,"line":406},[33,86846,86847],{"class":59},"    \u002F\u002F ①.最大值\n",[33,86849,86850],{"class":35,"line":418},[33,86851,86852],{"class":59},"    Array.prototype.max = function () {\n",[33,86854,86855],{"class":35,"line":425},[33,86856,86857],{"class":59},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[33,86859,86860],{"class":35,"line":1147},[33,86861,86862],{"class":59},"      return Math.max(...this)\n",[33,86864,86865],{"class":35,"line":1329},[33,86866,86867],{"class":59},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[33,86869,86870],{"class":35,"line":1341},[33,86871,3855],{"class":59},[33,86873,86874],{"class":35,"line":1348},[33,86875,86876],{"class":59},"    console.log(arr.max())\n",[33,86878,86879],{"class":35,"line":1529},[33,86880,86881],{"class":59},"    \u002F\u002F ②最小值\n",[33,86883,86884],{"class":35,"line":1546},[33,86885,86886],{"class":59},"    Array.prototype.min = function () {\n",[33,86888,86889],{"class":35,"line":1551},[33,86890,86891],{"class":59},"      return Math.min(...this)\n",[33,86893,86894],{"class":35,"line":1566},[33,86895,3855],{"class":59},[33,86897,86898],{"class":35,"line":1578},[33,86899,86900],{"class":59},"    console.log(arr.min())\n",[33,86902,86903],{"class":35,"line":1583},[33,86904,86905],{"class":59},"    \u002F\u002F③求和\n",[33,86907,86908],{"class":35,"line":3369},[33,86909,86910],{"class":59},"    Array.prototype.sum = function () {\n",[33,86912,86913],{"class":35,"line":3396},[33,86914,86915],{"class":59},"      return this.reduce((prev, current) => prev + current, 0)\n",[33,86917,86918],{"class":35,"line":3401},[33,86919,3855],{"class":59},[33,86921,86922],{"class":35,"line":3418},[33,86923,86924],{"class":59},"    console.log(arr.sum())\n",[33,86926,86927],{"class":35,"line":3423},[33,86928,86929],{"class":59},"    \u002F\u002F ③排序\n",[33,86931,86932],{"class":35,"line":3428},[33,86933,86934],{"class":59},"    Array.prototype.rever = function () {\n",[33,86936,86937],{"class":35,"line":3433},[33,86938,86939],{"class":59},"      return this.reverse()\n",[33,86941,86942],{"class":35,"line":3447},[33,86943,3855],{"class":59},[33,86945,86946],{"class":35,"line":3452},[33,86947,86948],{"class":59},"    console.log(arr.rever())\n",[33,86950,86951],{"class":35,"line":4243},[33,86952,127],{"emptyLinePlaceholder":126},[33,86954,86955,86957,86959],{"class":35,"line":4257},[33,86956,54062],{"class":59},[33,86958,53458],{"class":52945},[33,86960,52952],{"class":59},[33,86962,86963,86965,86967],{"class":35,"line":4265},[33,86964,53430],{"class":59},[33,86966,53445],{"class":52945},[33,86968,52952],{"class":59},[19,86970,86971],{},[3145,86972],{"alt":28,"src":86973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[633,86975,86977],{"id":86976},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86979,86980],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86982,86983],{},[3145,86984],{"alt":28,"src":86985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[23,86987,86989],{"className":54712,"code":86988,"language":54714,"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,86990,86991,86999,87007,87012,87017,87021,87026,87031,87036,87044],{"__ignoreMap":28},[33,86992,86993,86995,86997],{"class":35,"line":36},[33,86994,2726],{"class":59},[33,86996,53445],{"class":52945},[33,86998,52952],{"class":59},[33,87000,87001,87003,87005],{"class":35,"line":43},[33,87002,53789],{"class":59},[33,87004,53458],{"class":52945},[33,87006,52952],{"class":59},[33,87008,87009],{"class":35,"line":130},[33,87010,87011],{"class":59},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[33,87013,87014],{"class":35,"line":146},[33,87015,87016],{"class":59},"    function Star() {\n",[33,87018,87019],{"class":35,"line":267},[33,87020,3855],{"class":59},[33,87022,87023],{"class":35,"line":275},[33,87024,87025],{"class":59},"    const ldh = new Star()\n",[33,87027,87028],{"class":35,"line":392},[33,87029,87030],{"class":59},"    console.log(Star.prototype)\n",[33,87032,87033],{"class":35,"line":406},[33,87034,87035],{"class":59},"    console.log(Star.prototype.constructor === Star)\n",[33,87037,87038,87040,87042],{"class":35,"line":418},[33,87039,54062],{"class":59},[33,87041,53458],{"class":52945},[33,87043,52952],{"class":59},[33,87045,87046,87048,87050],{"class":35,"line":425},[33,87047,53430],{"class":59},[33,87049,53445],{"class":52945},[33,87051,52952],{"class":59},[19,87053,87054],{},[3145,87055],{"alt":28,"src":87056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87058,87059],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[23,87061,87063],{"className":54712,"code":87062,"language":54714,"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,87064,87065,87073,87077,87081,87085,87090,87095,87100,87104,87109,87114,87119,87124,87129,87134,87138,87142,87147,87152,87157,87161,87166,87171,87175,87179,87183],{"__ignoreMap":28},[33,87066,87067,87069,87071],{"class":35,"line":36},[33,87068,53789],{"class":59},[33,87070,53458],{"class":52945},[33,87072,52952],{"class":59},[33,87074,87075],{"class":35,"line":43},[33,87076,87011],{"class":59},[33,87078,87079],{"class":35,"line":130},[33,87080,87016],{"class":59},[33,87082,87083],{"class":35,"line":146},[33,87084,3855],{"class":59},[33,87086,87087],{"class":35,"line":267},[33,87088,87089],{"class":59},"    \u002F\u002F const ldh = new Star()\n",[33,87091,87092],{"class":35,"line":275},[33,87093,87094],{"class":59},"    \u002F\u002F console.log(Star.prototype)\n",[33,87096,87097],{"class":35,"line":392},[33,87098,87099],{"class":59},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[33,87101,87102],{"class":35,"line":406},[33,87103,127],{"emptyLinePlaceholder":126},[33,87105,87106],{"class":35,"line":418},[33,87107,87108],{"class":59},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[33,87110,87111],{"class":35,"line":425},[33,87112,87113],{"class":59},"    \u002F\u002F Star.prototype.sing = function () {\n",[33,87115,87116],{"class":35,"line":1147},[33,87117,87118],{"class":59},"    \u002F\u002F   console.log('唱歌')\n",[33,87120,87121],{"class":35,"line":1329},[33,87122,87123],{"class":59},"    \u002F\u002F }\n",[33,87125,87126],{"class":35,"line":1341},[33,87127,87128],{"class":59},"    \u002F\u002F Star.prototype.dance = function () {\n",[33,87130,87131],{"class":35,"line":1348},[33,87132,87133],{"class":59},"    \u002F\u002F   console.log('跳舞')\n",[33,87135,87136],{"class":35,"line":1529},[33,87137,87123],{"class":59},[33,87139,87140],{"class":35,"line":1546},[33,87141,87030],{"class":59},[33,87143,87144],{"class":35,"line":1551},[33,87145,87146],{"class":59},"    Star.prototype = {\n",[33,87148,87149],{"class":35,"line":1566},[33,87150,87151],{"class":59},"      sing: function () {\n",[33,87153,87154],{"class":35,"line":1578},[33,87155,87156],{"class":59},"        console.log('唱歌')\n",[33,87158,87159],{"class":35,"line":1583},[33,87160,79533],{"class":59},[33,87162,87163],{"class":35,"line":3369},[33,87164,87165],{"class":59},"      dance: function () {\n",[33,87167,87168],{"class":35,"line":3396},[33,87169,87170],{"class":59},"        console.log('跳舞')\n",[33,87172,87173],{"class":35,"line":3401},[33,87174,54043],{"class":59},[33,87176,87177],{"class":35,"line":3418},[33,87178,3855],{"class":59},[33,87180,87181],{"class":35,"line":3423},[33,87182,87030],{"class":59},[33,87184,87185,87187,87189],{"class":35,"line":3428},[33,87186,54062],{"class":59},[33,87188,53458],{"class":52945},[33,87190,52952],{"class":59},[19,87192,87193],{},"进行输出结果后会发现：",[19,87195,87196],{},[3145,87197],{"alt":28,"src":87198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87200,87201],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87203,87204],{},"所以，要重新指回创造这个原型对象的构造函数",[23,87206,87208],{"className":72855,"code":87207,"language":72857,"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,87209,87210,87224,87229,87234,87245,87258,87263,87274,87288,87292],{"__ignoreMap":28},[33,87211,87212,87215,87217,87220,87222],{"class":35,"line":36},[33,87213,87214],{"class":39},"Star",[33,87216,2375],{"class":59},[33,87218,87219],{"class":39},"prototype",[33,87221,15222],{"class":63},[33,87223,17228],{"class":59},[33,87225,87226],{"class":35,"line":43},[33,87227,87228],{"class":87},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[33,87230,87231],{"class":35,"line":130},[33,87232,87233],{"class":59},"  constructor: Star,\n",[33,87235,87236,87239,87241,87243],{"class":35,"line":146},[33,87237,87238],{"class":3632},"  sing",[33,87240,53082],{"class":59},[33,87242,56093],{"class":63},[33,87244,56096],{"class":59},[33,87246,87247,87249,87251,87253,87256],{"class":35,"line":267},[33,87248,75394],{"class":59},[33,87250,59890],{"class":3632},[33,87252,109],{"class":59},[33,87254,87255],{"class":117},"'唱歌'",[33,87257,157],{"class":59},[33,87259,87260],{"class":35,"line":275},[33,87261,87262],{"class":59},"   },\n",[33,87264,87265,87268,87270,87272],{"class":35,"line":392},[33,87266,87267],{"class":3632},"   dance",[33,87269,53082],{"class":59},[33,87271,56093],{"class":63},[33,87273,56096],{"class":59},[33,87275,87276,87279,87281,87283,87286],{"class":35,"line":406},[33,87277,87278],{"class":59},"     console.",[33,87280,59890],{"class":3632},[33,87282,109],{"class":59},[33,87284,87285],{"class":117},"'跳舞'",[33,87287,157],{"class":59},[33,87289,87290],{"class":35,"line":418},[33,87291,5970],{"class":59},[33,87293,87294],{"class":35,"line":425},[33,87295,3247],{"class":59},[19,87297,87298],{},[3145,87299],{"alt":28,"src":87300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87302,87303],{},"总结1：",[19,87305,87306],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87308,87309],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87311,87312],{},"constructor指的是他的来源",[19,87314,87315],{},[3145,87316],{"alt":28,"src":87317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87319,87320],{},[3145,87321],{"alt":28,"src":87322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87324,87325],{},"总结2：",[19,87327,87328],{},[3145,87329],{"alt":28,"src":87330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87332,87333],{},[3145,87334],{"alt":28,"src":87335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87337,87338],{},[3145,87339],{"alt":28,"src":87340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[633,87342,87344],{"id":87343},"_4134-对象原型","4.13.4 对象原型",[19,87346,87347],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87349,87350],{},"对象原型就是__proto__这个属性",[19,87352,87353],{},[3145,87354],{"alt":28,"src":87355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87357,87358],{},[3145,87359],{"alt":28,"src":87360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87362,87363],{},[3145,87364],{"alt":28,"src":87365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87367,87368],{},[3145,87369],{"alt":28,"src":87370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[23,87372,87374],{"className":54712,"code":87373,"language":54714,"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,87375,87376,87384,87392,87396,87400,87404,87409,87417],{"__ignoreMap":28},[33,87377,87378,87380,87382],{"class":35,"line":36},[33,87379,2726],{"class":59},[33,87381,53445],{"class":52945},[33,87383,52952],{"class":59},[33,87385,87386,87388,87390],{"class":35,"line":43},[33,87387,53789],{"class":59},[33,87389,53458],{"class":52945},[33,87391,52952],{"class":59},[33,87393,87394],{"class":35,"line":130},[33,87395,87016],{"class":59},[33,87397,87398],{"class":35,"line":146},[33,87399,3855],{"class":59},[33,87401,87402],{"class":35,"line":267},[33,87403,87025],{"class":59},[33,87405,87406],{"class":35,"line":275},[33,87407,87408],{"class":59},"    console.log(ldh)\n",[33,87410,87411,87413,87415],{"class":35,"line":392},[33,87412,54062],{"class":59},[33,87414,53458],{"class":52945},[33,87416,52952],{"class":59},[33,87418,87419,87421,87423],{"class":35,"line":406},[33,87420,53430],{"class":59},[33,87422,53445],{"class":52945},[33,87424,52952],{"class":59},[19,87426,87427],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87429,87430],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87432,87433],{},[3145,87434],{"alt":28,"src":87435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87437,87438],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87440,87441],{},"对象原型指向原型对象",[19,87443,87444],{},[3145,87445],{"alt":28,"src":87446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87448,87449],{},[3145,87450],{"alt":28,"src":87451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87453,87454],{},[3145,87455],{"alt":28,"src":87456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[633,87458,87460],{"id":87459},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87462,87463],{},[3145,87464],{"alt":28,"src":87465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[162,87467,87468,87471,87474,87477],{},[165,87469,87470],{},"构造函数通过new的形式实例化得到实例对象",[165,87472,87473],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[165,87475,87476],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[165,87478,87479],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87481,87482],{},[3145,87483],{"alt":28,"src":87484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87486,87487],{},"题目梳理：",[19,87489,87490],{},[3145,87491],{"alt":28,"src":87492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[633,87494,87496],{"id":87495},"_4136-原型继承","4.13.6 原型继承",[19,87498,87499],{},[3145,87500],{"alt":28,"src":87501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87503,87504],{},[3145,87505],{"alt":28,"src":87506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87508,87509],{},[3145,87510],{"alt":28,"src":87511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87513,87514],{},[3145,87515],{"alt":28,"src":87516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87518,87519],{},[3145,87520],{"alt":28,"src":87521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87523,87524],{},[3145,87525],{"alt":28,"src":87526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87528,87529],{},[3145,87530],{"alt":28,"src":87531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87533,87534],{},[3145,87535],{"alt":28,"src":87536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87538,87539],{},"回顾：构造函数每次new得到对象都是不同的",[633,87541,87543],{"id":87542},"_4137-原型链","4.13.7 原型链",[19,87545,87546],{},[3145,87547],{"alt":28,"src":87548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87550,87551],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87553,87554],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87556,87557],{},"大哥是Object",[19,87559,87560],{},[3145,87561],{"alt":28,"src":87562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87564,87565],{},[3145,87566],{"alt":28,"src":87567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87569,87570],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87572,87573],{},"万物皆对象",[633,87575,87577],{"id":87576},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87579,87580],{},"模态框",[19,87582,87583],{},"以后遇见这个效果直接使用这个就行",[19,87585,87586],{},[3145,87587],{"alt":28,"src":87588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87590,87591],{},[3145,87592],{"alt":28,"src":87593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87595,87596],{},[3145,87597],{"alt":28,"src":87598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87600,87601],{},[3145,87602],{"alt":28,"src":87603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87605,87606],{},"补充知识点：",[162,87608,87609],{},[165,87610,87611],{},"append()",[19,87613,87614],{},[3145,87615],{"alt":28,"src":87616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[23,87618,87620],{"className":52278,"code":87619,"language":52280,"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,87621,87622,87627,87632,87637,87641,87645,87649,87654,87659,87664,87668],{"__ignoreMap":28},[33,87623,87624],{"class":35,"line":36},[33,87625,87626],{"class":59},"append(param1)\n",[33,87628,87629],{"class":35,"line":43},[33,87630,87631],{"class":59},"append(param1, param2)\n",[33,87633,87634],{"class":35,"line":130},[33,87635,87636],{"class":59},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[33,87638,87639],{"class":35,"line":146},[33,87640,127],{"emptyLinePlaceholder":126},[33,87642,87643],{"class":35,"line":267},[33,87644,127],{"emptyLinePlaceholder":126},[33,87646,87647],{"class":35,"line":275},[33,87648,127],{"emptyLinePlaceholder":126},[33,87650,87651],{"class":35,"line":392},[33,87652,87653],{"class":59},"let div = document.createElement(\"div\");\n",[33,87655,87656],{"class":35,"line":406},[33,87657,87658],{"class":59},"let p = document.createElement(\"p\");\n",[33,87660,87661],{"class":35,"line":418},[33,87662,87663],{"class":59},"div.append(p);\n",[33,87665,87666],{"class":35,"line":425},[33,87667,127],{"emptyLinePlaceholder":126},[33,87669,87670,87673,87675],{"class":35,"line":1147},[33,87671,87672],{"class":59},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[33,87674,19],{"class":52945},[33,87676,87677],{"class":59},"> ]\n",[162,87679,87680],{"start":43},[165,87681,87682],{},"remove()",[19,87684,87685],{},"自己删自己",[19,87687,87688],{},[3145,87689],{"alt":28,"src":87690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[23,87692,87694],{"className":52278,"code":87693,"language":52280,"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,87695,87696,87706,87720,87724,87732,87746,87766,87778,87786,87793,87805,87818,87853,87865,87876,87888,87900,87912,87939,87949,87953,87957,87966,87978,87992,88002,88014,88018,88022,88032,88043,88053,88063,88076,88089,88099,88103,88107,88116,88126,88138,88142,88146,88155,88165,88175,88187,88191,88195,88205,88221,88232,88242,88252,88264,88276,88288,88292,88296,88309,88320,88324,88332,88340,88344,88352,88372,88392,88400,88405,88431,88436,88441,88460,88465,88477,88482,88493,88503,88513,88518,88523,88527,88532,88537,88542,88562,88567,88587,88592,88606,88611,88616,88621,88637,88641,88646,88675,88680,88685,88690,88701,88705,88709,88713,88718,88743,88748,88773,88778,88787,88791,88796,88821,88825,88850,88854,88863,88867,88872,88890,88900,88904,88912,88920,88924],{"__ignoreMap":28},[33,87697,87698,87700,87702,87704],{"class":35,"line":36},[33,87699,52942],{"class":59},[33,87701,52946],{"class":52945},[33,87703,52949],{"class":3632},[33,87705,52952],{"class":59},[33,87707,87708,87710,87712,87714,87716,87718],{"class":35,"line":43},[33,87709,2726],{"class":59},[33,87711,52280],{"class":52945},[33,87713,52961],{"class":3632},[33,87715,64],{"class":59},[33,87717,52966],{"class":117},[33,87719,52952],{"class":59},[33,87721,87722],{"class":35,"line":130},[33,87723,127],{"emptyLinePlaceholder":126},[33,87725,87726,87728,87730],{"class":35,"line":146},[33,87727,2726],{"class":59},[33,87729,52979],{"class":52945},[33,87731,52952],{"class":59},[33,87733,87734,87736,87738,87740,87742,87744],{"class":35,"line":267},[33,87735,53789],{"class":59},[33,87737,52989],{"class":52945},[33,87739,52992],{"class":3632},[33,87741,64],{"class":59},[33,87743,52997],{"class":117},[33,87745,52952],{"class":59},[33,87747,87748,87750,87752,87754,87756,87758,87760,87762,87764],{"class":35,"line":275},[33,87749,53789],{"class":59},[33,87751,52989],{"class":52945},[33,87753,16578],{"class":3632},[33,87755,64],{"class":59},[33,87757,53036],{"class":117},[33,87759,53016],{"class":3632},[33,87761,64],{"class":59},[33,87763,53043],{"class":117},[33,87765,52952],{"class":59},[33,87767,87768,87770,87772,87774,87776],{"class":35,"line":392},[33,87769,53789],{"class":59},[33,87771,53052],{"class":52945},[33,87773,53055],{"class":59},[33,87775,53052],{"class":52945},[33,87777,52952],{"class":59},[33,87779,87780,87782,87784],{"class":35,"line":406},[33,87781,53789],{"class":59},[33,87783,1729],{"class":52945},[33,87785,52952],{"class":59},[33,87787,87788,87791],{"class":35,"line":418},[33,87789,87790],{"class":3632},"    .modal",[33,87792,17228],{"class":59},[33,87794,87795,87797,87799,87801,87803],{"class":35,"line":425},[33,87796,56415],{"class":39},[33,87798,53082],{"class":59},[33,87800,5635],{"class":39},[33,87802,53137],{"class":63},[33,87804,2976],{"class":59},[33,87806,87807,87810,87812,87814,87816],{"class":35,"line":1147},[33,87808,87809],{"class":39},"      min-height",[33,87811,53082],{"class":59},[33,87813,2129],{"class":39},[33,87815,53137],{"class":63},[33,87817,2976],{"class":59},[33,87819,87820,87822,87824,87826,87828,87830,87832,87834,87836,87838,87840,87842,87844,87846,87848,87851],{"class":35,"line":1329},[33,87821,80391],{"class":39},[33,87823,53082],{"class":59},[33,87825,2010],{"class":39},[33,87827,829],{"class":39},[33,87829,3706],{"class":39},[33,87831,53137],{"class":63},[33,87833,80408],{"class":39},[33,87835,109],{"class":59},[33,87837,2010],{"class":39},[33,87839,14093],{"class":59},[33,87841,2010],{"class":39},[33,87843,14093],{"class":59},[33,87845,2010],{"class":39},[33,87847,14093],{"class":59},[33,87849,87850],{"class":39},"0.1",[33,87852,4385],{"class":59},[33,87854,87855,87857,87859,87861,87863],{"class":35,"line":1341},[33,87856,56778],{"class":39},[33,87858,53082],{"class":59},[33,87860,2111],{"class":39},[33,87862,53137],{"class":63},[33,87864,2976],{"class":59},[33,87866,87867,87869,87871,87874],{"class":35,"line":1348},[33,87868,56403],{"class":39},[33,87870,53082],{"class":59},[33,87872,87873],{"class":39},"fixed",[33,87875,2976],{"class":59},[33,87877,87878,87881,87883,87886],{"class":35,"line":1529},[33,87879,87880],{"class":39},"      z-index",[33,87882,53082],{"class":59},[33,87884,87885],{"class":39},"999",[33,87887,2976],{"class":59},[33,87889,87890,87892,87894,87896,87898],{"class":35,"line":1546},[33,87891,56482],{"class":39},[33,87893,53082],{"class":59},[33,87895,2473],{"class":39},[33,87897,2146],{"class":63},[33,87899,2976],{"class":59},[33,87901,87902,87904,87906,87908,87910],{"class":35,"line":1551},[33,87903,56591],{"class":39},[33,87905,53082],{"class":59},[33,87907,2473],{"class":39},[33,87909,2146],{"class":63},[33,87911,2976],{"class":59},[33,87913,87914,87916,87918,87920,87922,87925,87927,87929,87931,87933,87935,87937],{"class":35,"line":1566},[33,87915,80432],{"class":39},[33,87917,53082],{"class":59},[33,87919,80437],{"class":39},[33,87921,109],{"class":59},[33,87923,87924],{"class":39},"-50",[33,87926,2146],{"class":63},[33,87928,14093],{"class":59},[33,87930,87924],{"class":39},[33,87932,2146],{"class":63},[33,87934,14093],{"class":59},[33,87936,2010],{"class":39},[33,87938,4385],{"class":59},[33,87940,87941,87943,87945,87947],{"class":35,"line":1578},[33,87942,56528],{"class":39},[33,87944,53082],{"class":59},[33,87946,62484],{"class":39},[33,87948,2976],{"class":59},[33,87950,87951],{"class":35,"line":1583},[33,87952,3855],{"class":59},[33,87954,87955],{"class":35,"line":3369},[33,87956,127],{"emptyLinePlaceholder":126},[33,87958,87959,87961,87964],{"class":35,"line":3396},[33,87960,87790],{"class":3632},[33,87962,87963],{"class":3632}," .header",[33,87965,17228],{"class":59},[33,87967,87968,87970,87972,87974,87976],{"class":35,"line":3401},[33,87969,59002],{"class":39},[33,87971,53082],{"class":59},[33,87973,2219],{"class":39},[33,87975,53137],{"class":63},[33,87977,2976],{"class":59},[33,87979,87980,87982,87984,87986,87988,87990],{"class":35,"line":3418},[33,87981,56339],{"class":39},[33,87983,53082],{"class":59},[33,87985,2010],{"class":39},[33,87987,3706],{"class":39},[33,87989,53137],{"class":63},[33,87991,2976],{"class":59},[33,87993,87994,87996,87998,88000],{"class":35,"line":3423},[33,87995,56403],{"class":39},[33,87997,53082],{"class":59},[33,87999,56408],{"class":39},[33,88001,2976],{"class":59},[33,88003,88004,88006,88008,88010,88012],{"class":35,"line":3428},[33,88005,56566],{"class":39},[33,88007,53082],{"class":59},[33,88009,2517],{"class":39},[33,88011,53137],{"class":63},[33,88013,2976],{"class":59},[33,88015,88016],{"class":35,"line":3433},[33,88017,3855],{"class":59},[33,88019,88020],{"class":35,"line":3447},[33,88021,127],{"emptyLinePlaceholder":126},[33,88023,88024,88026,88028,88030],{"class":35,"line":3452},[33,88025,87790],{"class":3632},[33,88027,87963],{"class":3632},[33,88029,4697],{"class":52945},[33,88031,17228],{"class":59},[33,88033,88034,88037,88039,88041],{"class":35,"line":4243},[33,88035,88036],{"class":39},"      font-style",[33,88038,53082],{"class":59},[33,88040,65483],{"class":39},[33,88042,2976],{"class":59},[33,88044,88045,88047,88049,88051],{"class":35,"line":4257},[33,88046,59059],{"class":39},[33,88048,53082],{"class":59},[33,88050,63712],{"class":39},[33,88052,2976],{"class":59},[33,88054,88055,88057,88059,88061],{"class":35,"line":4265},[33,88056,56403],{"class":39},[33,88058,53082],{"class":59},[33,88060,56475],{"class":39},[33,88062,2976],{"class":59},[33,88064,88065,88068,88070,88072,88074],{"class":35,"line":4270},[33,88066,88067],{"class":39},"      right",[33,88069,53082],{"class":59},[33,88071,2392],{"class":39},[33,88073,53137],{"class":63},[33,88075,2976],{"class":59},[33,88077,88078,88080,88082,88085,88087],{"class":35,"line":4276},[33,88079,56591],{"class":39},[33,88081,53082],{"class":59},[33,88083,88084],{"class":39},"-2",[33,88086,53137],{"class":63},[33,88088,2976],{"class":59},[33,88090,88091,88093,88095,88097],{"class":35,"line":4282},[33,88092,63667],{"class":39},[33,88094,53082],{"class":59},[33,88096,63672],{"class":39},[33,88098,2976],{"class":59},[33,88100,88101],{"class":35,"line":4287},[33,88102,3855],{"class":59},[33,88104,88105],{"class":35,"line":9608},[33,88106,127],{"emptyLinePlaceholder":126},[33,88108,88109,88111,88114],{"class":35,"line":9632},[33,88110,87790],{"class":3632},[33,88112,88113],{"class":3632}," .body",[33,88115,17228],{"class":59},[33,88117,88118,88120,88122,88124],{"class":35,"line":9637},[33,88119,58929],{"class":39},[33,88121,53082],{"class":59},[33,88123,53237],{"class":39},[33,88125,2976],{"class":59},[33,88127,88128,88130,88132,88134,88136],{"class":35,"line":9643},[33,88129,56339],{"class":39},[33,88131,53082],{"class":59},[33,88133,2264],{"class":39},[33,88135,53137],{"class":63},[33,88137,2976],{"class":59},[33,88139,88140],{"class":35,"line":9670},[33,88141,3855],{"class":59},[33,88143,88144],{"class":35,"line":9675},[33,88145,127],{"emptyLinePlaceholder":126},[33,88147,88148,88150,88153],{"class":35,"line":9681},[33,88149,87790],{"class":3632},[33,88151,88152],{"class":3632}," .footer",[33,88154,17228],{"class":59},[33,88156,88157,88159,88161,88163],{"class":35,"line":9693},[33,88158,56653],{"class":39},[33,88160,53082],{"class":59},[33,88162,53122],{"class":39},[33,88164,2976],{"class":59},[33,88166,88167,88169,88171,88173],{"class":35,"line":9705},[33,88168,56664],{"class":39},[33,88170,53082],{"class":59},[33,88172,53225],{"class":39},[33,88174,2976],{"class":59},[33,88176,88177,88179,88181,88183,88185],{"class":35,"line":9717},[33,88178,56339],{"class":39},[33,88180,53082],{"class":59},[33,88182,2264],{"class":39},[33,88184,53137],{"class":63},[33,88186,2976],{"class":59},[33,88188,88189],{"class":35,"line":11375},[33,88190,3855],{"class":59},[33,88192,88193],{"class":35,"line":11400},[33,88194,127],{"emptyLinePlaceholder":126},[33,88196,88197,88199,88201,88203],{"class":35,"line":11423},[33,88198,87790],{"class":3632},[33,88200,88152],{"class":3632},[33,88202,3081],{"class":52945},[33,88204,17228],{"class":59},[33,88206,88207,88209,88211,88213,88215,88217,88219],{"class":35,"line":11447},[33,88208,56339],{"class":39},[33,88210,53082],{"class":59},[33,88212,1891],{"class":39},[33,88214,53137],{"class":63},[33,88216,3751],{"class":39},[33,88218,53137],{"class":63},[33,88220,2976],{"class":59},[33,88222,88223,88225,88227,88230],{"class":35,"line":11452},[33,88224,63363],{"class":39},[33,88226,53082],{"class":59},[33,88228,88229],{"class":39},"#ccc",[33,88231,2976],{"class":59},[33,88233,88234,88236,88238,88240],{"class":35,"line":11457},[33,88235,65612],{"class":39},[33,88237,53082],{"class":59},[33,88239,56381],{"class":39},[33,88241,2976],{"class":59},[33,88243,88244,88246,88248,88250],{"class":35,"line":11462},[33,88245,59059],{"class":39},[33,88247,53082],{"class":59},[33,88249,62484],{"class":39},[33,88251,2976],{"class":59},[33,88253,88254,88256,88258,88260,88262],{"class":35,"line":11471},[33,88255,56778],{"class":39},[33,88257,53082],{"class":59},[33,88259,1897],{"class":39},[33,88261,53137],{"class":63},[33,88263,2976],{"class":59},[33,88265,88266,88268,88270,88272,88274],{"class":35,"line":11476},[33,88267,63392],{"class":39},[33,88269,53082],{"class":59},[33,88271,2264],{"class":39},[33,88273,53137],{"class":63},[33,88275,2976],{"class":59},[33,88277,88278,88280,88282,88284,88286],{"class":35,"line":11482},[33,88279,56566],{"class":39},[33,88281,53082],{"class":59},[33,88283,2366],{"class":39},[33,88285,53137],{"class":63},[33,88287,2976],{"class":59},[33,88289,88290],{"class":35,"line":11503},[33,88291,3855],{"class":59},[33,88293,88294],{"class":35,"line":11509},[33,88295,127],{"emptyLinePlaceholder":126},[33,88297,88298,88300,88302,88304,88307],{"class":35,"line":11523},[33,88299,87790],{"class":3632},[33,88301,88152],{"class":3632},[33,88303,3081],{"class":52945},[33,88305,88306],{"class":3632},".submit",[33,88308,17228],{"class":59},[33,88310,88311,88313,88315,88318],{"class":35,"line":11529},[33,88312,56528],{"class":39},[33,88314,53082],{"class":59},[33,88316,88317],{"class":39},"#369",[33,88319,2976],{"class":59},[33,88321,88322],{"class":35,"line":11556},[33,88323,3855],{"class":59},[33,88325,88326,88328,88330],{"class":35,"line":11565},[33,88327,54062],{"class":59},[33,88329,1729],{"class":52945},[33,88331,52952],{"class":59},[33,88333,88334,88336,88338],{"class":35,"line":11571},[33,88335,53430],{"class":59},[33,88337,52979],{"class":52945},[33,88339,52952],{"class":59},[33,88341,88342],{"class":35,"line":11579},[33,88343,127],{"emptyLinePlaceholder":126},[33,88345,88346,88348,88350],{"class":35,"line":11584},[33,88347,2726],{"class":59},[33,88349,53445],{"class":52945},[33,88351,52952],{"class":59},[33,88353,88354,88356,88358,88360,88362,88365,88368,88370],{"class":35,"line":18259},[33,88355,53789],{"class":59},[33,88357,55531],{"class":52945},[33,88359,16617],{"class":3632},[33,88361,64],{"class":59},[33,88363,88364],{"class":117},"\"delete\"",[33,88366,88367],{"class":59},">删除\u003C\u002F",[33,88369,55531],{"class":52945},[33,88371,52952],{"class":59},[33,88373,88374,88376,88378,88380,88382,88385,88388,88390],{"class":35,"line":18265},[33,88375,53789],{"class":59},[33,88377,55531],{"class":52945},[33,88379,16617],{"class":3632},[33,88381,64],{"class":59},[33,88383,88384],{"class":117},"\"login\"",[33,88386,88387],{"class":59},">登录\u003C\u002F",[33,88389,55531],{"class":52945},[33,88391,52952],{"class":59},[33,88393,88394,88396,88398],{"class":35,"line":18288},[33,88395,53789],{"class":59},[33,88397,53458],{"class":52945},[33,88399,52952],{"class":59},[33,88401,88402],{"class":35,"line":18294},[33,88403,88404],{"class":87},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[33,88406,88407,88409,88412,88414,88416,88418,88420,88422,88425,88427,88429],{"class":35,"line":18317},[33,88408,71726],{"class":63},[33,88410,88411],{"class":3632}," Modal",[33,88413,109],{"class":59},[33,88415,53052],{"class":6877},[33,88417,15222],{"class":63},[33,88419,71572],{"class":117},[33,88421,14093],{"class":59},[33,88423,88424],{"class":6877},"message",[33,88426,15222],{"class":63},[33,88428,71572],{"class":117},[33,88430,14100],{"class":59},[33,88432,88433],{"class":35,"line":18331},[33,88434,88435],{"class":87},"      \u002F\u002F 创建Model 模态框盒子\n",[33,88437,88438],{"class":35,"line":18351},[33,88439,88440],{"class":87},"      \u002F\u002F 1.1 创建div标签\n",[33,88442,88443,88445,88448,88450,88452,88454,88456,88458],{"class":35,"line":18357},[33,88444,71693],{"class":39},[33,88446,88447],{"class":59},".modalBox ",[33,88449,64],{"class":63},[33,88451,56040],{"class":59},[33,88453,71793],{"class":3632},[33,88455,109],{"class":59},[33,88457,83571],{"class":117},[33,88459,157],{"class":59},[33,88461,88462],{"class":35,"line":18368},[33,88463,88464],{"class":87},"      \u002F\u002F 1.2 给div 添加类名为model\n",[33,88466,88467,88469,88472,88474],{"class":35,"line":18391},[33,88468,71693],{"class":39},[33,88470,88471],{"class":59},".modalBox.className ",[33,88473,64],{"class":63},[33,88475,88476],{"class":117}," 'modal'\n",[33,88478,88479],{"class":35,"line":18413},[33,88480,88481],{"class":87},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[33,88483,88484,88486,88489,88491],{"class":35,"line":18418},[33,88485,71693],{"class":39},[33,88487,88488],{"class":59},".modalBox.innerHTML ",[33,88490,64],{"class":63},[33,88492,71810],{"class":117},[33,88494,88495,88498,88500],{"class":35,"line":18424},[33,88496,88497],{"class":117},"        \u003Cdiv class=\"header\">${",[33,88499,53052],{"class":59},[33,88501,88502],{"class":117},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[33,88504,88505,88508,88510],{"class":35,"line":18438},[33,88506,88507],{"class":117},"        \u003Cdiv class=\"body\">${",[33,88509,88424],{"class":59},[33,88511,88512],{"class":117},"}\u003C\u002Fdiv>\n",[33,88514,88515],{"class":35,"line":18451},[33,88516,88517],{"class":117},"      `\n",[33,88519,88520],{"class":35,"line":18456},[33,88521,88522],{"class":87},"      \u002F\u002F console.log(this.modalBox)\n",[33,88524,88525],{"class":35,"line":18470},[33,88526,3855],{"class":59},[33,88528,88529],{"class":35,"line":18475},[33,88530,88531],{"class":87},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[33,88533,88534],{"class":35,"line":18481},[33,88535,88536],{"class":87},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[33,88538,88539],{"class":35,"line":18486},[33,88540,88541],{"class":87},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[33,88543,88544,88547,88549,88551,88553,88556,88558,88560],{"class":35,"line":18500},[33,88545,88546],{"class":39},"    Modal",[33,88548,2375],{"class":59},[33,88550,87219],{"class":39},[33,88552,2375],{"class":59},[33,88554,88555],{"class":3632},"open",[33,88557,15222],{"class":63},[33,88559,60561],{"class":63},[33,88561,56096],{"class":59},[33,88563,88564],{"class":35,"line":18505},[33,88565,88566],{"class":87},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[33,88568,88569,88571,88574,88576,88578,88580,88582,88585],{"class":35,"line":18510},[33,88570,59871],{"class":63},[33,88572,88573],{"class":39}," box",[33,88575,15222],{"class":63},[33,88577,56040],{"class":59},[33,88579,56043],{"class":3632},[33,88581,109],{"class":59},[33,88583,88584],{"class":117},"'.modal'",[33,88586,157],{"class":59},[33,88588,88589],{"class":35,"line":18524},[33,88590,88591],{"class":87},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[33,88593,88594,88597,88599,88602,88604],{"class":35,"line":18536},[33,88595,88596],{"class":59},"      box ",[33,88598,3384],{"class":63},[33,88600,88601],{"class":59}," box.",[33,88603,58649],{"class":3632},[33,88605,943],{"class":59},[33,88607,88608],{"class":35,"line":18541},[33,88609,88610],{"class":87},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[33,88612,88613],{"class":35,"line":18554},[33,88614,88615],{"class":87},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[33,88617,88618],{"class":35,"line":18559},[33,88619,88620],{"class":87},"      \u002F\u002F append可以增加对象\n",[33,88622,88623,88626,88629,88631,88634],{"class":35,"line":18564},[33,88624,88625],{"class":59},"      document.body.",[33,88627,88628],{"class":3632},"append",[33,88630,109],{"class":59},[33,88632,88633],{"class":39},"this",[33,88635,88636],{"class":59},".modalBox)\n",[33,88638,88639],{"class":35,"line":18569},[33,88640,127],{"emptyLinePlaceholder":126},[33,88642,88643],{"class":35,"line":18582},[33,88644,88645],{"class":87},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[33,88647,88648,88650,88653,88655,88657,88660,88662,88664,88666,88668,88671,88673],{"class":35,"line":18587},[33,88649,71693],{"class":39},[33,88651,88652],{"class":59},".modalBox.",[33,88654,56043],{"class":3632},[33,88656,109],{"class":59},[33,88658,88659],{"class":117},"'i'",[33,88661,32477],{"class":59},[33,88663,59456],{"class":3632},[33,88665,109],{"class":59},[33,88667,59461],{"class":117},[33,88669,88670],{"class":59},", () ",[33,88672,86362],{"class":63},[33,88674,17228],{"class":59},[33,88676,88677],{"class":35,"line":34280},[33,88678,88679],{"class":87},"        \u002F\u002F 这个地方需要用到箭头函数\n",[33,88681,88682],{"class":35,"line":34286},[33,88683,88684],{"class":87},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[33,88686,88687],{"class":35,"line":34292},[33,88688,88689],{"class":87},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[33,88691,88692,88694,88696,88699],{"class":35,"line":34298},[33,88693,66368],{"class":39},[33,88695,2375],{"class":59},[33,88697,88698],{"class":3632},"close",[33,88700,943],{"class":59},[33,88702,88703],{"class":35,"line":34304},[33,88704,66457],{"class":59},[33,88706,88707],{"class":35,"line":34315},[33,88708,3855],{"class":59},[33,88710,88711],{"class":35,"line":34321},[33,88712,127],{"emptyLinePlaceholder":126},[33,88714,88715],{"class":35,"line":34341},[33,88716,88717],{"class":87},"    \u002F\u002F 测试一下 点击 删除按钮\n",[33,88719,88720,88722,88724,88726,88729,88731,88733,88735,88737,88739,88741],{"class":35,"line":34347},[33,88721,54052],{"class":59},[33,88723,56043],{"class":3632},[33,88725,109],{"class":59},[33,88727,88728],{"class":117},"'#delete'",[33,88730,32477],{"class":59},[33,88732,59456],{"class":3632},[33,88734,109],{"class":59},[33,88736,59461],{"class":117},[33,88738,88670],{"class":59},[33,88740,86362],{"class":63},[33,88742,17228],{"class":59},[33,88744,88745],{"class":35,"line":34358},[33,88746,88747],{"class":87},"      \u002F\u002F 先调用Model构造函数\n",[33,88749,88750,88752,88755,88757,88759,88761,88763,88766,88768,88771],{"class":35,"line":34364},[33,88751,59871],{"class":63},[33,88753,88754],{"class":39}," del",[33,88756,15222],{"class":63},[33,88758,13236],{"class":63},[33,88760,88411],{"class":3632},[33,88762,109],{"class":59},[33,88764,88765],{"class":117},"'温馨的提示'",[33,88767,14093],{"class":59},[33,88769,88770],{"class":117},"'您没有删除权限操作'",[33,88772,157],{"class":59},[33,88774,88775],{"class":35,"line":34370},[33,88776,88777],{"class":87},"      \u002F\u002F 实例对象调用open方法\n",[33,88779,88780,88783,88785],{"class":35,"line":34376},[33,88781,88782],{"class":59},"      del.",[33,88784,88555],{"class":3632},[33,88786,943],{"class":59},[33,88788,88789],{"class":35,"line":34382},[33,88790,35108],{"class":59},[33,88792,88793],{"class":35,"line":34388},[33,88794,88795],{"class":87},"    \u002F\u002F 测试一下 点击 登录按钮\n",[33,88797,88798,88800,88802,88804,88807,88809,88811,88813,88815,88817,88819],{"class":35,"line":34394},[33,88799,54052],{"class":59},[33,88801,56043],{"class":3632},[33,88803,109],{"class":59},[33,88805,88806],{"class":117},"'#login'",[33,88808,32477],{"class":59},[33,88810,59456],{"class":3632},[33,88812,109],{"class":59},[33,88814,59461],{"class":117},[33,88816,88670],{"class":59},[33,88818,86362],{"class":63},[33,88820,17228],{"class":59},[33,88822,88823],{"class":35,"line":34400},[33,88824,88747],{"class":87},[33,88826,88827,88829,88832,88834,88836,88838,88840,88843,88845,88848],{"class":35,"line":34420},[33,88828,59871],{"class":63},[33,88830,88831],{"class":39}," log",[33,88833,15222],{"class":63},[33,88835,13236],{"class":63},[33,88837,88411],{"class":3632},[33,88839,109],{"class":59},[33,88841,88842],{"class":117},"'友情提示'",[33,88844,14093],{"class":59},[33,88846,88847],{"class":117},"'您还没有登录呢'",[33,88849,157],{"class":59},[33,88851,88852],{"class":35,"line":34426},[33,88853,88777],{"class":87},[33,88855,88856,88859,88861],{"class":35,"line":34442},[33,88857,88858],{"class":59},"      log.",[33,88860,88555],{"class":3632},[33,88862,943],{"class":59},[33,88864,88865],{"class":35,"line":34448},[33,88866,35108],{"class":59},[33,88868,88869],{"class":35,"line":34462},[33,88870,88871],{"class":87},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[33,88873,88874,88876,88878,88880,88882,88884,88886,88888],{"class":35,"line":34468},[33,88875,88546],{"class":39},[33,88877,2375],{"class":59},[33,88879,87219],{"class":39},[33,88881,2375],{"class":59},[33,88883,88698],{"class":3632},[33,88885,15222],{"class":63},[33,88887,60561],{"class":63},[33,88889,56096],{"class":59},[33,88891,88892,88894,88896,88898],{"class":35,"line":34483},[33,88893,71693],{"class":39},[33,88895,88652],{"class":59},[33,88897,58649],{"class":3632},[33,88899,943],{"class":59},[33,88901,88902],{"class":35,"line":34489},[33,88903,3855],{"class":59},[33,88905,88906,88908,88910],{"class":35,"line":34498},[33,88907,54062],{"class":59},[33,88909,53458],{"class":52945},[33,88911,52952],{"class":59},[33,88913,88914,88916,88918],{"class":35,"line":34504},[33,88915,53430],{"class":59},[33,88917,53445],{"class":52945},[33,88919,52952],{"class":59},[33,88921,88922],{"class":35,"line":34513},[33,88923,127],{"emptyLinePlaceholder":126},[33,88925,88926,88928,88930],{"class":35,"line":34519},[33,88927,53430],{"class":59},[33,88929,52280],{"class":52945},[33,88931,52952],{"class":59},[19,88933,88934],{},[3145,88935],{"alt":28,"src":88936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88938,88940],{"id":88939},"_414-深浅拷贝","4.14 深浅拷贝",[633,88942,88944],{"id":88943},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88946,88947],{},[3145,88948],{"alt":28,"src":88949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88951,88952],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88954,88955],{},[3145,88956],{"alt":28,"src":88957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88959,88960],{},[3145,88961],{"alt":28,"src":88962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88964,88965],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88967,88968],{},[3145,88969],{"alt":28,"src":88970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88972,12990],{},[19,88974,88975],{},[3145,88976],{"alt":28,"src":88977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[633,88979,88981],{"id":88980},"_4142-深拷贝","4.14.2 深拷贝",[19,88983,88984],{},"深拷贝：拷贝的是对象，不是地址",[19,88986,88987],{},"常用的三种方法：",[162,88989,88990,88993,88996],{},[165,88991,88992],{},"通过递归实现深拷贝",[165,88994,88995],{},"lodash\u002FcloneDeep",[165,88997,88998],{},"通过JSON.stringify()实现",[23653,89000,89002],{"id":89001},"_41421-递归函数","4.14.2.1 递归函数",[19,89004,89005],{},[3145,89006],{"alt":28,"src":89007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[162,89009,89010],{},[165,89011,89012],{},"死递归占溢出：",[23,89014,89016],{"className":54712,"code":89015,"language":54714,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,89017,89018,89026,89034,89038,89043,89047,89052,89060],{"__ignoreMap":28},[33,89019,89020,89022,89024],{"class":35,"line":36},[33,89021,2726],{"class":59},[33,89023,53445],{"class":52945},[33,89025,52952],{"class":59},[33,89027,89028,89030,89032],{"class":35,"line":43},[33,89029,53789],{"class":59},[33,89031,53458],{"class":52945},[33,89033,52952],{"class":59},[33,89035,89036],{"class":35,"line":130},[33,89037,78784],{"class":59},[33,89039,89040],{"class":35,"line":146},[33,89041,89042],{"class":59},"      fn()\n",[33,89044,89045],{"class":35,"line":267},[33,89046,3855],{"class":59},[33,89048,89049],{"class":35,"line":275},[33,89050,89051],{"class":59},"    fn()\n",[33,89053,89054,89056,89058],{"class":35,"line":392},[33,89055,54062],{"class":59},[33,89057,53458],{"class":52945},[33,89059,52952],{"class":59},[33,89061,89062,89064,89066],{"class":35,"line":406},[33,89063,53430],{"class":59},[33,89065,53445],{"class":52945},[33,89067,52952],{"class":59},[162,89069,89070],{"start":43},[165,89071,89072],{},"递归函数要加判断条件：",[19,89074,89075],{},[3145,89076],{"alt":28,"src":89077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[162,89079,89080],{"start":130},[165,89081,89082],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[23,89084,89086],{"className":52278,"code":89085,"language":52280,"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,89087,89088,89098,89112,89116,89124,89138,89158,89170,89178,89182,89190,89202,89210,89218,89243,89255,89259,89266,89274,89282,89286],{"__ignoreMap":28},[33,89089,89090,89092,89094,89096],{"class":35,"line":36},[33,89091,52942],{"class":59},[33,89093,52946],{"class":52945},[33,89095,52949],{"class":3632},[33,89097,52952],{"class":59},[33,89099,89100,89102,89104,89106,89108,89110],{"class":35,"line":43},[33,89101,2726],{"class":59},[33,89103,52280],{"class":52945},[33,89105,52961],{"class":3632},[33,89107,64],{"class":59},[33,89109,52966],{"class":117},[33,89111,52952],{"class":59},[33,89113,89114],{"class":35,"line":130},[33,89115,127],{"emptyLinePlaceholder":126},[33,89117,89118,89120,89122],{"class":35,"line":146},[33,89119,2726],{"class":59},[33,89121,52979],{"class":52945},[33,89123,52952],{"class":59},[33,89125,89126,89128,89130,89132,89134,89136],{"class":35,"line":267},[33,89127,53789],{"class":59},[33,89129,52989],{"class":52945},[33,89131,52992],{"class":3632},[33,89133,64],{"class":59},[33,89135,52997],{"class":117},[33,89137,52952],{"class":59},[33,89139,89140,89142,89144,89146,89148,89150,89152,89154,89156],{"class":35,"line":275},[33,89141,53789],{"class":59},[33,89143,52989],{"class":52945},[33,89145,16578],{"class":3632},[33,89147,64],{"class":59},[33,89149,53036],{"class":117},[33,89151,53016],{"class":3632},[33,89153,64],{"class":59},[33,89155,53043],{"class":117},[33,89157,52952],{"class":59},[33,89159,89160,89162,89164,89166,89168],{"class":35,"line":392},[33,89161,53789],{"class":59},[33,89163,53052],{"class":52945},[33,89165,53055],{"class":59},[33,89167,53052],{"class":52945},[33,89169,52952],{"class":59},[33,89171,89172,89174,89176],{"class":35,"line":406},[33,89173,53430],{"class":59},[33,89175,52979],{"class":52945},[33,89177,52952],{"class":59},[33,89179,89180],{"class":35,"line":418},[33,89181,127],{"emptyLinePlaceholder":126},[33,89183,89184,89186,89188],{"class":35,"line":425},[33,89185,2726],{"class":59},[33,89187,53445],{"class":52945},[33,89189,52952],{"class":59},[33,89191,89192,89194,89196,89198,89200],{"class":35,"line":1147},[33,89193,53789],{"class":59},[33,89195,53256],{"class":52945},[33,89197,56958],{"class":59},[33,89199,53256],{"class":52945},[33,89201,52952],{"class":59},[33,89203,89204,89206,89208],{"class":35,"line":1329},[33,89205,53789],{"class":59},[33,89207,53458],{"class":52945},[33,89209,52952],{"class":59},[33,89211,89212,89214,89216],{"class":35,"line":1341},[33,89213,71726],{"class":63},[33,89215,75414],{"class":3632},[33,89217,12511],{"class":59},[33,89219,89220,89222,89224,89226,89228,89230,89232,89234,89236,89238,89241],{"class":35,"line":1348},[33,89221,57414],{"class":59},[33,89223,56043],{"class":3632},[33,89225,109],{"class":59},[33,89227,83571],{"class":117},[33,89229,75890],{"class":59},[33,89231,64],{"class":63},[33,89233,13236],{"class":63},[33,89235,75430],{"class":3632},[33,89237,18916],{"class":59},[33,89239,89240],{"class":3632},"toLocaleString",[33,89242,943],{"class":59},[33,89244,89245,89248,89251,89253],{"class":35,"line":1529},[33,89246,89247],{"class":3632},"      setTimeout",[33,89249,89250],{"class":59},"(getTime, ",[33,89252,8070],{"class":39},[33,89254,157],{"class":59},[33,89256,89257],{"class":35,"line":1546},[33,89258,3855],{"class":59},[33,89260,89261,89264],{"class":35,"line":1551},[33,89262,89263],{"class":3632},"    getTime",[33,89265,943],{"class":59},[33,89267,89268,89270,89272],{"class":35,"line":1566},[33,89269,54062],{"class":59},[33,89271,53458],{"class":52945},[33,89273,52952],{"class":59},[33,89275,89276,89278,89280],{"class":35,"line":1578},[33,89277,53430],{"class":59},[33,89279,53445],{"class":52945},[33,89281,52952],{"class":59},[33,89283,89284],{"class":35,"line":1583},[33,89285,127],{"emptyLinePlaceholder":126},[33,89287,89288,89290,89292],{"class":35,"line":3369},[33,89289,53430],{"class":59},[33,89291,52280],{"class":52945},[33,89293,52952],{"class":59},[19,89295,89296],{},[3145,89297],{"alt":28,"src":89298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[162,89300,89301],{"start":146},[165,89302,88992],{},[19,89304,89305],{},[3145,89306],{"alt":28,"src":89307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89309,89310],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89312,40835],{},[19,89314,89315],{},"这个是简易版的递归函数深拷贝",[19,89317,89318],{},"一定要注意先数组再对象，因为万物皆可对象",[23,89320,89322],{"className":52278,"code":89321,"language":52280,"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,89323,89324,89334,89348,89352,89360,89374,89394,89406,89414,89418,89426,89434,89444,89453,89461,89477,89481,89489,89493,89497,89509,89514,89533,89549,89554,89559,89564,89579,89584,89589,89598,89606,89623,89631,89637,89645,89650,89655,89664,89668,89672,89676,89687,89696,89705,89719,89729,89737,89745,89753,89757],{"__ignoreMap":28},[33,89325,89326,89328,89330,89332],{"class":35,"line":36},[33,89327,52942],{"class":59},[33,89329,52946],{"class":52945},[33,89331,52949],{"class":3632},[33,89333,52952],{"class":59},[33,89335,89336,89338,89340,89342,89344,89346],{"class":35,"line":43},[33,89337,2726],{"class":59},[33,89339,52280],{"class":52945},[33,89341,52961],{"class":3632},[33,89343,64],{"class":59},[33,89345,52966],{"class":117},[33,89347,52952],{"class":59},[33,89349,89350],{"class":35,"line":130},[33,89351,127],{"emptyLinePlaceholder":126},[33,89353,89354,89356,89358],{"class":35,"line":146},[33,89355,2726],{"class":59},[33,89357,52979],{"class":52945},[33,89359,52952],{"class":59},[33,89361,89362,89364,89366,89368,89370,89372],{"class":35,"line":267},[33,89363,53789],{"class":59},[33,89365,52989],{"class":52945},[33,89367,52992],{"class":3632},[33,89369,64],{"class":59},[33,89371,52997],{"class":117},[33,89373,52952],{"class":59},[33,89375,89376,89378,89380,89382,89384,89386,89388,89390,89392],{"class":35,"line":275},[33,89377,53789],{"class":59},[33,89379,52989],{"class":52945},[33,89381,16578],{"class":3632},[33,89383,64],{"class":59},[33,89385,53036],{"class":117},[33,89387,53016],{"class":3632},[33,89389,64],{"class":59},[33,89391,53043],{"class":117},[33,89393,52952],{"class":59},[33,89395,89396,89398,89400,89402,89404],{"class":35,"line":392},[33,89397,53789],{"class":59},[33,89399,53052],{"class":52945},[33,89401,53055],{"class":59},[33,89403,53052],{"class":52945},[33,89405,52952],{"class":59},[33,89407,89408,89410,89412],{"class":35,"line":406},[33,89409,53430],{"class":59},[33,89411,52979],{"class":52945},[33,89413,52952],{"class":59},[33,89415,89416],{"class":35,"line":418},[33,89417,127],{"emptyLinePlaceholder":126},[33,89419,89420,89422,89424],{"class":35,"line":425},[33,89421,2726],{"class":59},[33,89423,53445],{"class":52945},[33,89425,52952],{"class":59},[33,89427,89428,89430,89432],{"class":35,"line":1147},[33,89429,53789],{"class":59},[33,89431,53458],{"class":52945},[33,89433,52952],{"class":59},[33,89435,89436,89438,89440,89442],{"class":35,"line":1329},[33,89437,12879],{"class":63},[33,89439,71613],{"class":39},[33,89441,15222],{"class":63},[33,89443,17228],{"class":59},[33,89445,89446,89448,89451],{"class":35,"line":1341},[33,89447,73257],{"class":59},[33,89449,89450],{"class":117},"'pink'",[33,89452,33116],{"class":59},[33,89454,89455,89457,89459],{"class":35,"line":1348},[33,89456,73267],{"class":59},[33,89458,2467],{"class":39},[33,89460,33116],{"class":59},[33,89462,89463,89466,89469,89471,89474],{"class":35,"line":1529},[33,89464,89465],{"class":59},"      hobby: [",[33,89467,89468],{"class":117},"'乒乓球'",[33,89470,14093],{"class":59},[33,89472,89473],{"class":117},"'足球'",[33,89475,89476],{"class":59},"],\n",[33,89478,89479],{"class":35,"line":1546},[33,89480,79513],{"class":59},[33,89482,89483,89486],{"class":35,"line":1551},[33,89484,89485],{"class":59},"        baby: ",[33,89487,89488],{"class":117},"'小pink'\n",[33,89490,89491],{"class":35,"line":1566},[33,89492,54043],{"class":59},[33,89494,89495],{"class":35,"line":1578},[33,89496,3855],{"class":59},[33,89498,89499,89501,89504,89506],{"class":35,"line":1583},[33,89500,12879],{"class":63},[33,89502,89503],{"class":39}," o",[33,89505,15222],{"class":63},[33,89507,89508],{"class":59}," {}\n",[33,89510,89511],{"class":35,"line":3369},[33,89512,89513],{"class":87},"    \u002F\u002F 拷贝函数\n",[33,89515,89516,89518,89521,89523,89526,89528,89531],{"class":35,"line":3396},[33,89517,71726],{"class":63},[33,89519,89520],{"class":3632}," deepCopy",[33,89522,109],{"class":59},[33,89524,89525],{"class":6877},"newObj",[33,89527,14093],{"class":59},[33,89529,89530],{"class":6877},"oldObj",[33,89532,14100],{"class":59},[33,89534,89535,89537,89539,89541,89544,89546],{"class":35,"line":3401},[33,89536,53929],{"class":63},[33,89538,3332],{"class":59},[33,89540,53492],{"class":63},[33,89542,89543],{"class":59}," k ",[33,89545,27699],{"class":63},[33,89547,89548],{"class":59}," oldObj) {\n",[33,89550,89551],{"class":35,"line":3418},[33,89552,89553],{"class":87},"        \u002F\u002F 处理数组的问题\n",[33,89555,89556],{"class":35,"line":3423},[33,89557,89558],{"class":87},"        \u002F\u002F 判断是否属于数组\n",[33,89560,89561],{"class":35,"line":3428},[33,89562,89563],{"class":87},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[33,89565,89566,89568,89571,89574,89577],{"class":35,"line":3433},[33,89567,4163],{"class":63},[33,89569,89570],{"class":59}," (oldObj[k] ",[33,89572,89573],{"class":63},"instanceof",[33,89575,89576],{"class":3632}," Array",[33,89578,14100],{"class":59},[33,89580,89581],{"class":35,"line":3447},[33,89582,89583],{"class":87},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[33,89585,89586],{"class":35,"line":3452},[33,89587,89588],{"class":87},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[33,89590,89591,89594,89596],{"class":35,"line":4243},[33,89592,89593],{"class":59},"          newObj[k] ",[33,89595,64],{"class":63},[33,89597,53483],{"class":59},[33,89599,89600,89603],{"class":35,"line":4257},[33,89601,89602],{"class":3632},"          deepCopy",[33,89604,89605],{"class":59},"(newObj[k], oldObj[k])\n",[33,89607,89608,89610,89612,89614,89616,89618,89621],{"class":35,"line":4265},[33,89609,81720],{"class":59},[33,89611,270],{"class":63},[33,89613,3374],{"class":63},[33,89615,89570],{"class":59},[33,89617,89573],{"class":63},[33,89619,89620],{"class":3632}," Object",[33,89622,14100],{"class":59},[33,89624,89625,89627,89629],{"class":35,"line":4270},[33,89626,89593],{"class":59},[33,89628,64],{"class":63},[33,89630,89508],{"class":59},[33,89632,89633,89635],{"class":35,"line":4276},[33,89634,89602],{"class":3632},[33,89636,89605],{"class":59},[33,89638,89639,89641,89643],{"class":35,"line":4282},[33,89640,81720],{"class":59},[33,89642,270],{"class":63},[33,89644,17228],{"class":59},[33,89646,89647],{"class":35,"line":4287},[33,89648,89649],{"class":87},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[33,89651,89652],{"class":35,"line":9608},[33,89653,89654],{"class":87},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[33,89656,89657,89659,89661],{"class":35,"line":9632},[33,89658,89593],{"class":59},[33,89660,64],{"class":63},[33,89662,89663],{"class":59}," oldObj[k]\n",[33,89665,89666],{"class":35,"line":9637},[33,89667,4195],{"class":59},[33,89669,89670],{"class":35,"line":9643},[33,89671,54043],{"class":59},[33,89673,89674],{"class":35,"line":9670},[33,89675,3855],{"class":59},[33,89677,89678,89681,89684],{"class":35,"line":9675},[33,89679,89680],{"class":3632},"    deepCopy",[33,89682,89683],{"class":59},"(o, obj) ",[33,89685,89686],{"class":87},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[33,89688,89689,89691,89693],{"class":35,"line":9681},[33,89690,75394],{"class":59},[33,89692,59890],{"class":3632},[33,89694,89695],{"class":59},"(o)\n",[33,89697,89698,89701,89703],{"class":35,"line":9693},[33,89699,89700],{"class":59},"    o.age ",[33,89702,64],{"class":63},[33,89704,653],{"class":39},[33,89706,89707,89710,89712,89714,89716],{"class":35,"line":9705},[33,89708,89709],{"class":59},"    o.hobby[",[33,89711,2010],{"class":39},[33,89713,6104],{"class":59},[33,89715,64],{"class":63},[33,89717,89718],{"class":117}," '篮球'\n",[33,89720,89721,89724,89726],{"class":35,"line":9717},[33,89722,89723],{"class":59},"    o.family ",[33,89725,64],{"class":63},[33,89727,89728],{"class":117}," '老pink'\n",[33,89730,89731,89733,89735],{"class":35,"line":11375},[33,89732,75394],{"class":59},[33,89734,59890],{"class":3632},[33,89736,71678],{"class":59},[33,89738,89739,89741,89743],{"class":35,"line":11400},[33,89740,54062],{"class":59},[33,89742,53458],{"class":52945},[33,89744,52952],{"class":59},[33,89746,89747,89749,89751],{"class":35,"line":11423},[33,89748,53430],{"class":59},[33,89750,53445],{"class":52945},[33,89752,52952],{"class":59},[33,89754,89755],{"class":35,"line":11447},[33,89756,127],{"emptyLinePlaceholder":126},[33,89758,89759,89761,89763],{"class":35,"line":11452},[33,89760,53430],{"class":59},[33,89762,52280],{"class":52945},[33,89764,52952],{"class":59},[19,89766,89767],{},[3145,89768],{"alt":28,"src":89769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23653,89771,89773,89774],{"id":89772},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[1968,89775,89776],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89778,89779],{},[2057,89780,89781],{"href":89781,"rel":89782},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25520],[19,89784,89785],{},"lodash里边的方法都要加上一个下划线_",[19,89787,89788],{},"_.cloneDeep()",[23,89790,89792],{"className":52278,"code":89791,"language":52280,"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,89793,89794,89804,89818,89822,89830,89844,89864,89876,89884,89888,89896,89901,89920,89928,89938,89946,89954,89966,89970,89976,89980,89984,90000,90008,90017,90025,90033,90041,90045],{"__ignoreMap":28},[33,89795,89796,89798,89800,89802],{"class":35,"line":36},[33,89797,52942],{"class":59},[33,89799,52946],{"class":52945},[33,89801,52949],{"class":3632},[33,89803,52952],{"class":59},[33,89805,89806,89808,89810,89812,89814,89816],{"class":35,"line":43},[33,89807,2726],{"class":59},[33,89809,52280],{"class":52945},[33,89811,52961],{"class":3632},[33,89813,64],{"class":59},[33,89815,52966],{"class":117},[33,89817,52952],{"class":59},[33,89819,89820],{"class":35,"line":130},[33,89821,127],{"emptyLinePlaceholder":126},[33,89823,89824,89826,89828],{"class":35,"line":146},[33,89825,2726],{"class":59},[33,89827,52979],{"class":52945},[33,89829,52952],{"class":59},[33,89831,89832,89834,89836,89838,89840,89842],{"class":35,"line":267},[33,89833,53789],{"class":59},[33,89835,52989],{"class":52945},[33,89837,52992],{"class":3632},[33,89839,64],{"class":59},[33,89841,52997],{"class":117},[33,89843,52952],{"class":59},[33,89845,89846,89848,89850,89852,89854,89856,89858,89860,89862],{"class":35,"line":275},[33,89847,53789],{"class":59},[33,89849,52989],{"class":52945},[33,89851,16578],{"class":3632},[33,89853,64],{"class":59},[33,89855,53036],{"class":117},[33,89857,53016],{"class":3632},[33,89859,64],{"class":59},[33,89861,53043],{"class":117},[33,89863,52952],{"class":59},[33,89865,89866,89868,89870,89872,89874],{"class":35,"line":392},[33,89867,53789],{"class":59},[33,89869,53052],{"class":52945},[33,89871,53055],{"class":59},[33,89873,53052],{"class":52945},[33,89875,52952],{"class":59},[33,89877,89878,89880,89882],{"class":35,"line":406},[33,89879,53430],{"class":59},[33,89881,52979],{"class":52945},[33,89883,52952],{"class":59},[33,89885,89886],{"class":35,"line":418},[33,89887,127],{"emptyLinePlaceholder":126},[33,89889,89890,89892,89894],{"class":35,"line":425},[33,89891,2726],{"class":59},[33,89893,53445],{"class":52945},[33,89895,52952],{"class":59},[33,89897,89898],{"class":35,"line":1147},[33,89899,89900],{"class":87},"  \u003C!-- 先引用这个库 -->\n",[33,89902,89903,89905,89907,89909,89911,89914,89916,89918],{"class":35,"line":1329},[33,89904,53789],{"class":59},[33,89906,53458],{"class":52945},[33,89908,56883],{"class":3632},[33,89910,64],{"class":59},[33,89912,89913],{"class":117},"\"lodash.min.js\"",[33,89915,56958],{"class":59},[33,89917,53458],{"class":52945},[33,89919,52952],{"class":59},[33,89921,89922,89924,89926],{"class":35,"line":1341},[33,89923,53789],{"class":59},[33,89925,53458],{"class":52945},[33,89927,52952],{"class":59},[33,89929,89930,89932,89934,89936],{"class":35,"line":1348},[33,89931,12879],{"class":63},[33,89933,71613],{"class":39},[33,89935,15222],{"class":63},[33,89937,17228],{"class":59},[33,89939,89940,89942,89944],{"class":35,"line":1529},[33,89941,73257],{"class":59},[33,89943,89450],{"class":117},[33,89945,33116],{"class":59},[33,89947,89948,89950,89952],{"class":35,"line":1546},[33,89949,73267],{"class":59},[33,89951,2467],{"class":39},[33,89953,33116],{"class":59},[33,89955,89956,89958,89960,89962,89964],{"class":35,"line":1551},[33,89957,89465],{"class":59},[33,89959,89468],{"class":117},[33,89961,14093],{"class":59},[33,89963,89473],{"class":117},[33,89965,89476],{"class":59},[33,89967,89968],{"class":35,"line":1566},[33,89969,79513],{"class":59},[33,89971,89972,89974],{"class":35,"line":1578},[33,89973,89485],{"class":59},[33,89975,89488],{"class":117},[33,89977,89978],{"class":35,"line":1583},[33,89979,54043],{"class":59},[33,89981,89982],{"class":35,"line":3369},[33,89983,3855],{"class":59},[33,89985,89986,89988,89990,89992,89995,89998],{"class":35,"line":3396},[33,89987,12879],{"class":63},[33,89989,89503],{"class":39},[33,89991,15222],{"class":63},[33,89993,89994],{"class":59}," _.",[33,89996,89997],{"class":3632},"cloneDeep",[33,89999,71678],{"class":59},[33,90001,90002,90004,90006],{"class":35,"line":3401},[33,90003,75394],{"class":59},[33,90005,59890],{"class":3632},[33,90007,89695],{"class":59},[33,90009,90010,90013,90015],{"class":35,"line":3418},[33,90011,90012],{"class":59},"    o.family.baby ",[33,90014,64],{"class":63},[33,90016,89728],{"class":117},[33,90018,90019,90021,90023],{"class":35,"line":3423},[33,90020,75394],{"class":59},[33,90022,59890],{"class":3632},[33,90024,71678],{"class":59},[33,90026,90027,90029,90031],{"class":35,"line":3428},[33,90028,54062],{"class":59},[33,90030,53458],{"class":52945},[33,90032,52952],{"class":59},[33,90034,90035,90037,90039],{"class":35,"line":3433},[33,90036,53430],{"class":59},[33,90038,53445],{"class":52945},[33,90040,52952],{"class":59},[33,90042,90043],{"class":35,"line":3447},[33,90044,127],{"emptyLinePlaceholder":126},[33,90046,90047,90049,90051],{"class":35,"line":3452},[33,90048,53430],{"class":59},[33,90050,52280],{"class":52945},[33,90052,52952],{"class":59},[19,90054,90055],{},[3145,90056],{"alt":28,"src":90057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23653,90059,90061],{"id":90060},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[23,90063,90065],{"className":52278,"code":90064,"language":52280,"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,90066,90067,90077,90091,90095,90103,90117,90137,90149,90157,90161,90169,90177,90187,90195,90203,90215,90219,90225,90229,90233,90238,90243,90248,90274,90282,90291,90299,90307,90315,90319],{"__ignoreMap":28},[33,90068,90069,90071,90073,90075],{"class":35,"line":36},[33,90070,52942],{"class":59},[33,90072,52946],{"class":52945},[33,90074,52949],{"class":3632},[33,90076,52952],{"class":59},[33,90078,90079,90081,90083,90085,90087,90089],{"class":35,"line":43},[33,90080,2726],{"class":59},[33,90082,52280],{"class":52945},[33,90084,52961],{"class":3632},[33,90086,64],{"class":59},[33,90088,52966],{"class":117},[33,90090,52952],{"class":59},[33,90092,90093],{"class":35,"line":130},[33,90094,127],{"emptyLinePlaceholder":126},[33,90096,90097,90099,90101],{"class":35,"line":146},[33,90098,2726],{"class":59},[33,90100,52979],{"class":52945},[33,90102,52952],{"class":59},[33,90104,90105,90107,90109,90111,90113,90115],{"class":35,"line":267},[33,90106,53789],{"class":59},[33,90108,52989],{"class":52945},[33,90110,52992],{"class":3632},[33,90112,64],{"class":59},[33,90114,52997],{"class":117},[33,90116,52952],{"class":59},[33,90118,90119,90121,90123,90125,90127,90129,90131,90133,90135],{"class":35,"line":275},[33,90120,53789],{"class":59},[33,90122,52989],{"class":52945},[33,90124,16578],{"class":3632},[33,90126,64],{"class":59},[33,90128,53036],{"class":117},[33,90130,53016],{"class":3632},[33,90132,64],{"class":59},[33,90134,53043],{"class":117},[33,90136,52952],{"class":59},[33,90138,90139,90141,90143,90145,90147],{"class":35,"line":392},[33,90140,53789],{"class":59},[33,90142,53052],{"class":52945},[33,90144,53055],{"class":59},[33,90146,53052],{"class":52945},[33,90148,52952],{"class":59},[33,90150,90151,90153,90155],{"class":35,"line":406},[33,90152,53430],{"class":59},[33,90154,52979],{"class":52945},[33,90156,52952],{"class":59},[33,90158,90159],{"class":35,"line":418},[33,90160,127],{"emptyLinePlaceholder":126},[33,90162,90163,90165,90167],{"class":35,"line":425},[33,90164,2726],{"class":59},[33,90166,53445],{"class":52945},[33,90168,52952],{"class":59},[33,90170,90171,90173,90175],{"class":35,"line":1147},[33,90172,53789],{"class":59},[33,90174,53458],{"class":52945},[33,90176,52952],{"class":59},[33,90178,90179,90181,90183,90185],{"class":35,"line":1329},[33,90180,12879],{"class":63},[33,90182,71613],{"class":39},[33,90184,15222],{"class":63},[33,90186,17228],{"class":59},[33,90188,90189,90191,90193],{"class":35,"line":1341},[33,90190,73257],{"class":59},[33,90192,89450],{"class":117},[33,90194,33116],{"class":59},[33,90196,90197,90199,90201],{"class":35,"line":1348},[33,90198,73267],{"class":59},[33,90200,2467],{"class":39},[33,90202,33116],{"class":59},[33,90204,90205,90207,90209,90211,90213],{"class":35,"line":1529},[33,90206,89465],{"class":59},[33,90208,89468],{"class":117},[33,90210,14093],{"class":59},[33,90212,89473],{"class":117},[33,90214,89476],{"class":59},[33,90216,90217],{"class":35,"line":1546},[33,90218,79513],{"class":59},[33,90220,90221,90223],{"class":35,"line":1551},[33,90222,89485],{"class":59},[33,90224,89488],{"class":117},[33,90226,90227],{"class":35,"line":1566},[33,90228,54043],{"class":59},[33,90230,90231],{"class":35,"line":1578},[33,90232,3855],{"class":59},[33,90234,90235],{"class":35,"line":1583},[33,90236,90237],{"class":87},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[33,90239,90240],{"class":35,"line":3369},[33,90241,90242],{"class":87},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[33,90244,90245],{"class":35,"line":3396},[33,90246,90247],{"class":87},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[33,90249,90250,90252,90254,90256,90259,90261,90264,90266,90268,90270,90272],{"class":35,"line":3401},[33,90251,12879],{"class":63},[33,90253,89503],{"class":39},[33,90255,15222],{"class":63},[33,90257,90258],{"class":39}," JSON",[33,90260,2375],{"class":59},[33,90262,90263],{"class":3632},"parse",[33,90265,109],{"class":59},[33,90267,73305],{"class":39},[33,90269,2375],{"class":59},[33,90271,73310],{"class":3632},[33,90273,73313],{"class":59},[33,90275,90276,90278,90280],{"class":35,"line":3418},[33,90277,75394],{"class":59},[33,90279,59890],{"class":3632},[33,90281,89695],{"class":59},[33,90283,90284,90286,90288],{"class":35,"line":3423},[33,90285,90012],{"class":59},[33,90287,64],{"class":63},[33,90289,90290],{"class":117}," '123'\n",[33,90292,90293,90295,90297],{"class":35,"line":3428},[33,90294,75394],{"class":59},[33,90296,59890],{"class":3632},[33,90298,71678],{"class":59},[33,90300,90301,90303,90305],{"class":35,"line":3433},[33,90302,54062],{"class":59},[33,90304,53458],{"class":52945},[33,90306,52952],{"class":59},[33,90308,90309,90311,90313],{"class":35,"line":3447},[33,90310,53430],{"class":59},[33,90312,53445],{"class":52945},[33,90314,52952],{"class":59},[33,90316,90317],{"class":35,"line":3452},[33,90318,127],{"emptyLinePlaceholder":126},[33,90320,90321,90323,90325],{"class":35,"line":4243},[33,90322,53430],{"class":59},[33,90324,52280],{"class":52945},[33,90326,52952],{"class":59},[19,90328,90329],{},[3145,90330],{"alt":28,"src":90331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90333,90335],{"id":90334},"_415-异常处理","4.15 异常处理",[162,90337,90338],{},[165,90339,90340],{},"throw抛异常",[19,90342,90343],{},[3145,90344],{"alt":28,"src":90345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[162,90347,90348],{"start":43},[165,90349,90350],{},"try\u002Fcatch 捕获错误信息",[19,90352,90353],{},[3145,90354],{"alt":28,"src":90355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[23,90357,90359],{"className":52278,"code":90358,"language":52280,"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,90360,90361,90371,90385,90389,90397,90411,90431,90443,90451,90455,90463,90475,90483,90492,90499,90504,90523,90532,90543,90548,90558,90563,90568,90573,90590,90594,90599,90606,90618,90622,90634,90638,90642,90647,90652,90659,90667,90675,90679],{"__ignoreMap":28},[33,90362,90363,90365,90367,90369],{"class":35,"line":36},[33,90364,52942],{"class":59},[33,90366,52946],{"class":52945},[33,90368,52949],{"class":3632},[33,90370,52952],{"class":59},[33,90372,90373,90375,90377,90379,90381,90383],{"class":35,"line":43},[33,90374,2726],{"class":59},[33,90376,52280],{"class":52945},[33,90378,52961],{"class":3632},[33,90380,64],{"class":59},[33,90382,52966],{"class":117},[33,90384,52952],{"class":59},[33,90386,90387],{"class":35,"line":130},[33,90388,127],{"emptyLinePlaceholder":126},[33,90390,90391,90393,90395],{"class":35,"line":146},[33,90392,2726],{"class":59},[33,90394,52979],{"class":52945},[33,90396,52952],{"class":59},[33,90398,90399,90401,90403,90405,90407,90409],{"class":35,"line":267},[33,90400,53789],{"class":59},[33,90402,52989],{"class":52945},[33,90404,52992],{"class":3632},[33,90406,64],{"class":59},[33,90408,52997],{"class":117},[33,90410,52952],{"class":59},[33,90412,90413,90415,90417,90419,90421,90423,90425,90427,90429],{"class":35,"line":275},[33,90414,53789],{"class":59},[33,90416,52989],{"class":52945},[33,90418,16578],{"class":3632},[33,90420,64],{"class":59},[33,90422,53036],{"class":117},[33,90424,53016],{"class":3632},[33,90426,64],{"class":59},[33,90428,53043],{"class":117},[33,90430,52952],{"class":59},[33,90432,90433,90435,90437,90439,90441],{"class":35,"line":392},[33,90434,53789],{"class":59},[33,90436,53052],{"class":52945},[33,90438,53055],{"class":59},[33,90440,53052],{"class":52945},[33,90442,52952],{"class":59},[33,90444,90445,90447,90449],{"class":35,"line":406},[33,90446,53430],{"class":59},[33,90448,52979],{"class":52945},[33,90450,52952],{"class":59},[33,90452,90453],{"class":35,"line":418},[33,90454,127],{"emptyLinePlaceholder":126},[33,90456,90457,90459,90461],{"class":35,"line":425},[33,90458,2726],{"class":59},[33,90460,53445],{"class":52945},[33,90462,52952],{"class":59},[33,90464,90465,90467,90469,90471,90473],{"class":35,"line":1147},[33,90466,53789],{"class":59},[33,90468,19],{"class":52945},[33,90470,55139],{"class":59},[33,90472,19],{"class":52945},[33,90474,52952],{"class":59},[33,90476,90477,90479,90481],{"class":35,"line":1329},[33,90478,53789],{"class":59},[33,90480,53458],{"class":52945},[33,90482,52952],{"class":59},[33,90484,90485,90487,90490],{"class":35,"line":1341},[33,90486,71726],{"class":63},[33,90488,90489],{"class":3632}," fn",[33,90491,12511],{"class":59},[33,90493,90494,90497],{"class":35,"line":1348},[33,90495,90496],{"class":63},"      try",[33,90498,17228],{"class":59},[33,90500,90501],{"class":35,"line":1529},[33,90502,90503],{"class":87},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[33,90505,90506,90508,90510,90512,90514,90516,90518,90521],{"class":35,"line":1546},[33,90507,62912],{"class":63},[33,90509,8485],{"class":39},[33,90511,15222],{"class":63},[33,90513,56040],{"class":59},[33,90515,56043],{"class":3632},[33,90517,109],{"class":59},[33,90519,90520],{"class":117},"'.p'",[33,90522,157],{"class":59},[33,90524,90525,90528,90530],{"class":35,"line":1551},[33,90526,90527],{"class":59},"        p.style.color ",[33,90529,64],{"class":63},[33,90531,68693],{"class":117},[33,90533,90534,90537,90540],{"class":35,"line":1566},[33,90535,90536],{"class":59},"      } ",[33,90538,90539],{"class":63},"catch",[33,90541,90542],{"class":59}," (err) {\n",[33,90544,90545],{"class":35,"line":1578},[33,90546,90547],{"class":87},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[33,90549,90550,90553,90555],{"class":35,"line":1583},[33,90551,90552],{"class":59},"        console.",[33,90554,59890],{"class":3632},[33,90556,90557],{"class":59},"(err.message)\n",[33,90559,90560],{"class":35,"line":3369},[33,90561,90562],{"class":87},"        \u002F\u002F 想要中断程序，需要加return\n",[33,90564,90565],{"class":35,"line":3396},[33,90566,90567],{"class":87},"        \u002F\u002F return\n",[33,90569,90570],{"class":35,"line":3401},[33,90571,90572],{"class":87},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[33,90574,90575,90578,90580,90583,90585,90588],{"class":35,"line":3418},[33,90576,90577],{"class":63},"        throw",[33,90579,13236],{"class":63},[33,90581,90582],{"class":3632}," Error",[33,90584,109],{"class":59},[33,90586,90587],{"class":117},"'你看看，选择器错误了吧'",[33,90589,157],{"class":59},[33,90591,90592],{"class":35,"line":3423},[33,90593,54043],{"class":59},[33,90595,90596],{"class":35,"line":3428},[33,90597,90598],{"class":87},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[33,90600,90601,90604],{"class":35,"line":3433},[33,90602,90603],{"class":63},"      finally",[33,90605,17228],{"class":59},[33,90607,90608,90611,90613,90616],{"class":35,"line":3447},[33,90609,90610],{"class":3632},"        alert",[33,90612,109],{"class":59},[33,90614,90615],{"class":117},"'弹出对话框'",[33,90617,157],{"class":59},[33,90619,90620],{"class":35,"line":3452},[33,90621,54043],{"class":59},[33,90623,90624,90626,90628,90630,90632],{"class":35,"line":4243},[33,90625,59887],{"class":59},[33,90627,59890],{"class":3632},[33,90629,109],{"class":59},[33,90631,2289],{"class":39},[33,90633,157],{"class":59},[33,90635,90636],{"class":35,"line":4257},[33,90637,127],{"emptyLinePlaceholder":126},[33,90639,90640],{"class":35,"line":4265},[33,90641,3855],{"class":59},[33,90643,90644],{"class":35,"line":4270},[33,90645,90646],{"class":87},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[33,90648,90649],{"class":35,"line":4276},[33,90650,90651],{"class":87},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[33,90653,90654,90657],{"class":35,"line":4282},[33,90655,90656],{"class":3632},"    fn",[33,90658,943],{"class":59},[33,90660,90661,90663,90665],{"class":35,"line":4287},[33,90662,54062],{"class":59},[33,90664,53458],{"class":52945},[33,90666,52952],{"class":59},[33,90668,90669,90671,90673],{"class":35,"line":9608},[33,90670,53430],{"class":59},[33,90672,53445],{"class":52945},[33,90674,52952],{"class":59},[33,90676,90677],{"class":35,"line":9632},[33,90678,127],{"emptyLinePlaceholder":126},[33,90680,90681,90683,90685],{"class":35,"line":9637},[33,90682,53430],{"class":59},[33,90684,52280],{"class":52945},[33,90686,52952],{"class":59},[19,90688,90689],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[162,90691,90692],{"start":130},[165,90693,90694],{},"debugger",[19,90696,90697],{},[3145,90698],{"alt":28,"src":90699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90701,90702],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90704,90706],{"id":90705},"_416-处理this","4.16 处理this",[633,90708,90710],{"id":90709},"_4161-this的指向","4.16.1 this的指向",[162,90712,90713],{},[165,90714,90715],{},"普通函数的this",[19,90717,90718],{},[3145,90719],{"alt":28,"src":90720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[162,90722,90723],{"start":43},[165,90724,90725],{},"箭头函数的this",[19,90727,90728],{},[3145,90729],{"alt":28,"src":90730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90732,90733],{},[3145,90734],{"alt":28,"src":90735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90737,90738],{},[3145,90739],{"alt":28,"src":90740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[633,90742,90744],{"id":90743},"_4162-this的改变","4.16.2 this的改变",[19,90746,90747],{},"call() apply() bind()",[162,90749,90750],{},[165,90751,90752],{},"call()",[19,90754,90755],{},[3145,90756],{"alt":28,"src":90757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90759,90760],{},"两个作用：①调用函数；②改变this指向",[23,90762,90764],{"className":54712,"code":90763,"language":54714,"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,90765,90766,90774,90782,90786,90791,90795,90800,90805,90810,90814,90819,90827],{"__ignoreMap":28},[33,90767,90768,90770,90772],{"class":35,"line":36},[33,90769,2726],{"class":59},[33,90771,53445],{"class":52945},[33,90773,52952],{"class":59},[33,90775,90776,90778,90780],{"class":35,"line":43},[33,90777,53789],{"class":59},[33,90779,53458],{"class":52945},[33,90781,52952],{"class":59},[33,90783,90784],{"class":35,"line":130},[33,90785,73164],{"class":59},[33,90787,90788],{"class":35,"line":146},[33,90789,90790],{"class":59},"      uname: 'pink'\n",[33,90792,90793],{"class":35,"line":267},[33,90794,3855],{"class":59},[33,90796,90797],{"class":35,"line":275},[33,90798,90799],{"class":59},"    function fn(x, y) {\n",[33,90801,90802],{"class":35,"line":392},[33,90803,90804],{"class":59},"      console.log(this)  \u002F\u002Fwindow\n",[33,90806,90807],{"class":35,"line":406},[33,90808,90809],{"class":59},"      console.log(x + y)\n",[33,90811,90812],{"class":35,"line":418},[33,90813,3855],{"class":59},[33,90815,90816],{"class":35,"line":425},[33,90817,90818],{"class":59},"    fn.call(obj, 1, 2)\n",[33,90820,90821,90823,90825],{"class":35,"line":1147},[33,90822,54062],{"class":59},[33,90824,53458],{"class":52945},[33,90826,52952],{"class":59},[33,90828,90829,90831,90833],{"class":35,"line":1329},[33,90830,53430],{"class":59},[33,90832,53445],{"class":52945},[33,90834,52952],{"class":59},[19,90836,90837],{},[3145,90838],{"alt":28,"src":90839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[162,90841,90842],{"start":43},[165,90843,90844],{},"apply()",[19,90846,90847],{},[3145,90848],{"alt":28,"src":90849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90851,90760],{},[19,90853,90854],{},"call传递的是普通参数，而apply必须传递的是数组",[23,90856,90858],{"className":52278,"code":90857,"language":52280,"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,90859,90860,90870,90884,90888,90896,90910,90930,90942,90950,90954,90962,90970,90980,90987,90991,90996,91012,91024,91038,91042,91047,91066,91071,91075,91080,91085,91093,91098,91120,91125,91141,91157,91169,91173,91178,91197,91205,91213,91217],{"__ignoreMap":28},[33,90861,90862,90864,90866,90868],{"class":35,"line":36},[33,90863,52942],{"class":59},[33,90865,52946],{"class":52945},[33,90867,52949],{"class":3632},[33,90869,52952],{"class":59},[33,90871,90872,90874,90876,90878,90880,90882],{"class":35,"line":43},[33,90873,2726],{"class":59},[33,90875,52280],{"class":52945},[33,90877,52961],{"class":3632},[33,90879,64],{"class":59},[33,90881,52966],{"class":117},[33,90883,52952],{"class":59},[33,90885,90886],{"class":35,"line":130},[33,90887,127],{"emptyLinePlaceholder":126},[33,90889,90890,90892,90894],{"class":35,"line":146},[33,90891,2726],{"class":59},[33,90893,52979],{"class":52945},[33,90895,52952],{"class":59},[33,90897,90898,90900,90902,90904,90906,90908],{"class":35,"line":267},[33,90899,53789],{"class":59},[33,90901,52989],{"class":52945},[33,90903,52992],{"class":3632},[33,90905,64],{"class":59},[33,90907,52997],{"class":117},[33,90909,52952],{"class":59},[33,90911,90912,90914,90916,90918,90920,90922,90924,90926,90928],{"class":35,"line":275},[33,90913,53789],{"class":59},[33,90915,52989],{"class":52945},[33,90917,16578],{"class":3632},[33,90919,64],{"class":59},[33,90921,53036],{"class":117},[33,90923,53016],{"class":3632},[33,90925,64],{"class":59},[33,90927,53043],{"class":117},[33,90929,52952],{"class":59},[33,90931,90932,90934,90936,90938,90940],{"class":35,"line":392},[33,90933,53789],{"class":59},[33,90935,53052],{"class":52945},[33,90937,53055],{"class":59},[33,90939,53052],{"class":52945},[33,90941,52952],{"class":59},[33,90943,90944,90946,90948],{"class":35,"line":406},[33,90945,53430],{"class":59},[33,90947,52979],{"class":52945},[33,90949,52952],{"class":59},[33,90951,90952],{"class":35,"line":418},[33,90953,127],{"emptyLinePlaceholder":126},[33,90955,90956,90958,90960],{"class":35,"line":425},[33,90957,2726],{"class":59},[33,90959,53445],{"class":52945},[33,90961,52952],{"class":59},[33,90963,90964,90966,90968],{"class":35,"line":1147},[33,90965,53789],{"class":59},[33,90967,53458],{"class":52945},[33,90969,52952],{"class":59},[33,90971,90972,90974,90976,90978],{"class":35,"line":1329},[33,90973,12879],{"class":63},[33,90975,71613],{"class":39},[33,90977,15222],{"class":63},[33,90979,17228],{"class":59},[33,90981,90982,90984],{"class":35,"line":1341},[33,90983,73267],{"class":59},[33,90985,90986],{"class":39},"18\n",[33,90988,90989],{"class":35,"line":1348},[33,90990,3855],{"class":59},[33,90992,90993],{"class":35,"line":1529},[33,90994,90995],{"class":87},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[33,90997,90998,91000,91002,91004,91006,91008,91010],{"class":35,"line":1546},[33,90999,71726],{"class":63},[33,91001,90489],{"class":3632},[33,91003,109],{"class":59},[33,91005,2637],{"class":6877},[33,91007,14093],{"class":59},[33,91009,2662],{"class":6877},[33,91011,14100],{"class":59},[33,91013,91014,91016,91018,91020,91022],{"class":35,"line":1551},[33,91015,59887],{"class":59},[33,91017,59890],{"class":3632},[33,91019,109],{"class":59},[33,91021,88633],{"class":39},[33,91023,157],{"class":59},[33,91025,91026,91028,91030,91033,91035],{"class":35,"line":1566},[33,91027,59887],{"class":59},[33,91029,59890],{"class":3632},[33,91031,91032],{"class":59},"(x ",[33,91034,2298],{"class":63},[33,91036,91037],{"class":59}," y)\n",[33,91039,91040],{"class":35,"line":1578},[33,91041,3855],{"class":59},[33,91043,91044],{"class":35,"line":1583},[33,91045,91046],{"class":87},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[33,91048,91049,91052,91055,91058,91060,91062,91064],{"class":35,"line":3369},[33,91050,91051],{"class":59},"    fn.",[33,91053,91054],{"class":3632},"apply",[33,91056,91057],{"class":59},"(obj, [",[33,91059,2036],{"class":39},[33,91061,14093],{"class":59},[33,91063,1897],{"class":39},[33,91065,6318],{"class":59},[33,91067,91068],{"class":35,"line":3396},[33,91069,91070],{"class":87},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[33,91072,91073],{"class":35,"line":3401},[33,91074,127],{"emptyLinePlaceholder":126},[33,91076,91077],{"class":35,"line":3418},[33,91078,91079],{"class":87},"    \u002F\u002F 使用场景：求数组最大值\n",[33,91081,91082],{"class":35,"line":3423},[33,91083,91084],{"class":87},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[33,91086,91087,91090],{"class":35,"line":3428},[33,91088,91089],{"class":87},"    \u002F\u002F console.log(max)",[33,91091,91092],{"class":87},"   \u002F\u002F3\n",[33,91094,91095],{"class":35,"line":3433},[33,91096,91097],{"class":87},"    \u002F\u002F 指向空或者Math都是可以的\n",[33,91099,91100,91102,91104,91106,91108,91110,91112,91114,91116,91118],{"class":35,"line":3447},[33,91101,12879],{"class":63},[33,91103,59338],{"class":39},[33,91105,15222],{"class":63},[33,91107,53871],{"class":59},[33,91109,2129],{"class":39},[33,91111,14093],{"class":59},[33,91113,2321],{"class":39},[33,91115,14093],{"class":59},[33,91117,2352],{"class":39},[33,91119,34893],{"class":59},[33,91121,91122],{"class":35,"line":3452},[33,91123,91124],{"class":87},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[33,91126,91127,91129,91131,91133,91136,91138],{"class":35,"line":4243},[33,91128,12879],{"class":63},[33,91130,7611],{"class":39},[33,91132,15222],{"class":63},[33,91134,91135],{"class":59}," Math.max.",[33,91137,91054],{"class":3632},[33,91139,91140],{"class":59},"(Math, arr)\n",[33,91142,91143,91145,91148,91150,91153,91155],{"class":35,"line":4257},[33,91144,12879],{"class":63},[33,91146,91147],{"class":39}," min",[33,91149,15222],{"class":63},[33,91151,91152],{"class":59}," Math.min.",[33,91154,91054],{"class":3632},[33,91156,91140],{"class":59},[33,91158,91159,91161,91163,91166],{"class":35,"line":4265},[33,91160,75394],{"class":59},[33,91162,59890],{"class":3632},[33,91164,91165],{"class":59},"(max, min)     ",[33,91167,91168],{"class":87},"\u002F\u002F100,4\n",[33,91170,91171],{"class":35,"line":4270},[33,91172,127],{"emptyLinePlaceholder":126},[33,91174,91175],{"class":35,"line":4276},[33,91176,91177],{"class":87},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[33,91179,91180,91182,91184,91187,91189,91191,91194],{"class":35,"line":4282},[33,91181,75394],{"class":59},[33,91183,59890],{"class":3632},[33,91185,91186],{"class":59},"(Max.",[33,91188,7675],{"class":3632},[33,91190,109],{"class":59},[33,91192,91193],{"class":63},"...",[33,91195,91196],{"class":59},"arr))\n",[33,91198,91199,91201,91203],{"class":35,"line":4287},[33,91200,54062],{"class":59},[33,91202,53458],{"class":52945},[33,91204,52952],{"class":59},[33,91206,91207,91209,91211],{"class":35,"line":9608},[33,91208,53430],{"class":59},[33,91210,53445],{"class":52945},[33,91212,52952],{"class":59},[33,91214,91215],{"class":35,"line":9632},[33,91216,127],{"emptyLinePlaceholder":126},[33,91218,91219,91221,91223],{"class":35,"line":9637},[33,91220,53430],{"class":59},[33,91222,52280],{"class":52945},[33,91224,52952],{"class":59},[19,91226,91227],{},[3145,91228],{"alt":28,"src":91229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[162,91231,91232],{"start":130},[165,91233,91234],{},"bind()",[19,91236,91237],{},[3145,91238],{"alt":28,"src":91239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91241,91242],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91244,91245],{},"bind的语法跟call很相似",[23,91247,91249],{"className":54712,"code":91248,"language":54714,"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,91250,91251,91259,91267,91271,91276,91280,91284,91289,91293,91298,91303,91308,91313,91318,91323,91328,91332,91340],{"__ignoreMap":28},[33,91252,91253,91255,91257],{"class":35,"line":36},[33,91254,2726],{"class":59},[33,91256,53445],{"class":52945},[33,91258,52952],{"class":59},[33,91260,91261,91263,91265],{"class":35,"line":43},[33,91262,53789],{"class":59},[33,91264,53458],{"class":52945},[33,91266,52952],{"class":59},[33,91268,91269],{"class":35,"line":130},[33,91270,73164],{"class":59},[33,91272,91273],{"class":35,"line":146},[33,91274,91275],{"class":59},"      age: 18\n",[33,91277,91278],{"class":35,"line":267},[33,91279,3855],{"class":59},[33,91281,91282],{"class":35,"line":275},[33,91283,78784],{"class":59},[33,91285,91286],{"class":35,"line":392},[33,91287,91288],{"class":59},"      console.log(this)\n",[33,91290,91291],{"class":35,"line":406},[33,91292,3855],{"class":59},[33,91294,91295],{"class":35,"line":418},[33,91296,91297],{"class":59},"    \u002F\u002F 1.bind 不会调用函数\n",[33,91299,91300],{"class":35,"line":425},[33,91301,91302],{"class":59},"    \u002F\u002F 2.bind能改变this的指向\n",[33,91304,91305],{"class":35,"line":1147},[33,91306,91307],{"class":59},"    fn.bind()\n",[33,91309,91310],{"class":35,"line":1329},[33,91311,91312],{"class":59},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[33,91314,91315],{"class":35,"line":1341},[33,91316,91317],{"class":59},"    const fun = fn.bind(obj)\n",[33,91319,91320],{"class":35,"line":1348},[33,91321,91322],{"class":59},"    \u002F\u002F console.log(fun)\n",[33,91324,91325],{"class":35,"line":1529},[33,91326,91327],{"class":59},"    \u002F\u002F 调用,查看this的指向\n",[33,91329,91330],{"class":35,"line":1546},[33,91331,54296],{"class":59},[33,91333,91334,91336,91338],{"class":35,"line":1551},[33,91335,54062],{"class":59},[33,91337,53458],{"class":52945},[33,91339,52952],{"class":59},[33,91341,91342,91344,91346],{"class":35,"line":1566},[33,91343,53430],{"class":59},[33,91345,53445],{"class":52945},[33,91347,52952],{"class":59},[19,91349,91350],{},[3145,91351],{"alt":28,"src":91352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[162,91354,91355],{"start":146},[165,91356,91357],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[23,91359,91361],{"className":54712,"code":91360,"language":54714,"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,91362,91363,91371,91384,91392,91397,91401,91406,91411,91416,91421,91426,91431,91436,91441,91445,91453],{"__ignoreMap":28},[33,91364,91365,91367,91369],{"class":35,"line":36},[33,91366,2726],{"class":59},[33,91368,53445],{"class":52945},[33,91370,52952],{"class":59},[33,91372,91373,91375,91377,91380,91382],{"class":35,"line":43},[33,91374,53789],{"class":59},[33,91376,55531],{"class":52945},[33,91378,91379],{"class":59},">禁用\u003C\u002F",[33,91381,55531],{"class":52945},[33,91383,52952],{"class":59},[33,91385,91386,91388,91390],{"class":35,"line":130},[33,91387,53789],{"class":59},[33,91389,53458],{"class":52945},[33,91391,52952],{"class":59},[33,91393,91394],{"class":35,"line":146},[33,91395,91396],{"class":59},"    const btn = document.querySelector('button')\n",[33,91398,91399],{"class":35,"line":267},[33,91400,60659],{"class":59},[33,91402,91403],{"class":35,"line":275},[33,91404,91405],{"class":59},"      this.disabled = true\n",[33,91407,91408],{"class":35,"line":392},[33,91409,91410],{"class":59},"      \u002F\u002F 定时器是window进行调用的\n",[33,91412,91413],{"class":35,"line":406},[33,91414,91415],{"class":59},"      setTimeout(function () {\n",[33,91417,91418],{"class":35,"line":418},[33,91419,91420],{"class":59},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[33,91422,91423],{"class":35,"line":425},[33,91424,91425],{"class":59},"        this.disabled = false\n",[33,91427,91428],{"class":35,"line":1147},[33,91429,91430],{"class":59},"      }.bind(this), 2000)\n",[33,91432,91433],{"class":35,"line":1329},[33,91434,91435],{"class":59},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[33,91437,91438],{"class":35,"line":1341},[33,91439,91440],{"class":59},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[33,91442,91443],{"class":35,"line":1348},[33,91444,35108],{"class":59},[33,91446,91447,91449,91451],{"class":35,"line":1529},[33,91448,54062],{"class":59},[33,91450,53458],{"class":52945},[33,91452,52952],{"class":59},[33,91454,91455,91457,91459],{"class":35,"line":1546},[33,91456,53430],{"class":59},[33,91458,53445],{"class":52945},[33,91460,52952],{"class":59},[162,91462,91463],{"start":267},[165,91464,23608],{},[19,91466,91467],{},[3145,91468],{"alt":28,"src":91469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91471,91473],{"id":91472},"_417-性能优化","4.17 性能优化",[633,91475,91477],{"id":91476},"_4171-防抖","4.17.1 防抖",[19,91479,91480],{},[3145,91481],{"alt":28,"src":91482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91484,91485],{},[1968,91486,91487],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91489,91490],{},"防抖实现方式：",[2822,91492,91493],{},[165,91494,91495],{},"lodash 提供了防抖处理",[19,91497,91498],{},"_.debounce(func,[wait=0],[options={}])",[19,91500,91501],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[23,91503,91505],{"className":52278,"code":91504,"language":52280,"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,91506,91507,91517,91531,91535,91543,91557,91577,91589,91597,91603,91613,91625,91637,91648,91660,91670,91680,91693,91697,91705,91713,91717,91725,91743,91761,91769,91788,91798,91807,91818,91823,91827,91832,91837,91842,91867,91875,91883,91887],{"__ignoreMap":28},[33,91508,91509,91511,91513,91515],{"class":35,"line":36},[33,91510,52942],{"class":59},[33,91512,52946],{"class":52945},[33,91514,52949],{"class":3632},[33,91516,52952],{"class":59},[33,91518,91519,91521,91523,91525,91527,91529],{"class":35,"line":43},[33,91520,2726],{"class":59},[33,91522,52280],{"class":52945},[33,91524,52961],{"class":3632},[33,91526,64],{"class":59},[33,91528,52966],{"class":117},[33,91530,52952],{"class":59},[33,91532,91533],{"class":35,"line":130},[33,91534,127],{"emptyLinePlaceholder":126},[33,91536,91537,91539,91541],{"class":35,"line":146},[33,91538,2726],{"class":59},[33,91540,52979],{"class":52945},[33,91542,52952],{"class":59},[33,91544,91545,91547,91549,91551,91553,91555],{"class":35,"line":267},[33,91546,53789],{"class":59},[33,91548,52989],{"class":52945},[33,91550,52992],{"class":3632},[33,91552,64],{"class":59},[33,91554,52997],{"class":117},[33,91556,52952],{"class":59},[33,91558,91559,91561,91563,91565,91567,91569,91571,91573,91575],{"class":35,"line":275},[33,91560,53789],{"class":59},[33,91562,52989],{"class":52945},[33,91564,16578],{"class":3632},[33,91566,64],{"class":59},[33,91568,53036],{"class":117},[33,91570,53016],{"class":3632},[33,91572,64],{"class":59},[33,91574,53043],{"class":117},[33,91576,52952],{"class":59},[33,91578,91579,91581,91583,91585,91587],{"class":35,"line":392},[33,91580,53789],{"class":59},[33,91582,53052],{"class":52945},[33,91584,53055],{"class":59},[33,91586,53052],{"class":52945},[33,91588,52952],{"class":59},[33,91590,91591,91593,91595],{"class":35,"line":406},[33,91592,53789],{"class":59},[33,91594,1729],{"class":52945},[33,91596,52952],{"class":59},[33,91598,91599,91601],{"class":35,"line":418},[33,91600,56396],{"class":3632},[33,91602,17228],{"class":59},[33,91604,91605,91607,91609,91611],{"class":35,"line":425},[33,91606,74237],{"class":39},[33,91608,53082],{"class":59},[33,91610,62148],{"class":39},[33,91612,2976],{"class":59},[33,91614,91615,91617,91619,91621,91623],{"class":35,"line":1147},[33,91616,56415],{"class":39},[33,91618,53082],{"class":59},[33,91620,3391],{"class":39},[33,91622,53137],{"class":63},[33,91624,2976],{"class":59},[33,91626,91627,91629,91631,91633,91635],{"class":35,"line":1329},[33,91628,56429],{"class":39},[33,91630,53082],{"class":59},[33,91632,3391],{"class":39},[33,91634,53137],{"class":63},[33,91636,2976],{"class":59},[33,91638,91639,91641,91643,91646],{"class":35,"line":1341},[33,91640,56528],{"class":39},[33,91642,53082],{"class":59},[33,91644,91645],{"class":39},"gray",[33,91647,2976],{"class":59},[33,91649,91650,91652,91654,91656,91658],{"class":35,"line":1348},[33,91651,56566],{"class":39},[33,91653,53082],{"class":59},[33,91655,2642],{"class":39},[33,91657,53137],{"class":63},[33,91659,2976],{"class":59},[33,91661,91662,91664,91666,91668],{"class":35,"line":1529},[33,91663,59059],{"class":39},[33,91665,53082],{"class":59},[33,91667,62484],{"class":39},[33,91669,2976],{"class":59},[33,91671,91672,91674,91676,91678],{"class":35,"line":1546},[33,91673,58929],{"class":39},[33,91675,53082],{"class":59},[33,91677,53237],{"class":39},[33,91679,2976],{"class":59},[33,91681,91682,91685,91687,91689,91691],{"class":35,"line":1551},[33,91683,91684],{"class":39},"      padding-top",[33,91686,53082],{"class":59},[33,91688,2137],{"class":39},[33,91690,53137],{"class":63},[33,91692,2976],{"class":59},[33,91694,91695],{"class":35,"line":1566},[33,91696,3855],{"class":59},[33,91698,91699,91701,91703],{"class":35,"line":1578},[33,91700,54062],{"class":59},[33,91702,1729],{"class":52945},[33,91704,52952],{"class":59},[33,91706,91707,91709,91711],{"class":35,"line":1583},[33,91708,53430],{"class":59},[33,91710,52979],{"class":52945},[33,91712,52952],{"class":59},[33,91714,91715],{"class":35,"line":3369},[33,91716,127],{"emptyLinePlaceholder":126},[33,91718,91719,91721,91723],{"class":35,"line":3396},[33,91720,2726],{"class":59},[33,91722,53445],{"class":52945},[33,91724,52952],{"class":59},[33,91726,91727,91729,91731,91733,91735,91737,91739,91741],{"class":35,"line":3401},[33,91728,53789],{"class":59},[33,91730,53256],{"class":52945},[33,91732,55131],{"class":3632},[33,91734,64],{"class":59},[33,91736,55136],{"class":117},[33,91738,56958],{"class":59},[33,91740,53256],{"class":52945},[33,91742,52952],{"class":59},[33,91744,91745,91747,91749,91751,91753,91755,91757,91759],{"class":35,"line":3418},[33,91746,53789],{"class":59},[33,91748,53458],{"class":52945},[33,91750,56883],{"class":3632},[33,91752,64],{"class":59},[33,91754,89913],{"class":117},[33,91756,56958],{"class":59},[33,91758,53458],{"class":52945},[33,91760,52952],{"class":59},[33,91762,91763,91765,91767],{"class":35,"line":3423},[33,91764,53789],{"class":59},[33,91766,53458],{"class":52945},[33,91768,52952],{"class":59},[33,91770,91771,91773,91775,91777,91779,91781,91783,91786],{"class":35,"line":3428},[33,91772,12879],{"class":63},[33,91774,88573],{"class":39},[33,91776,15222],{"class":63},[33,91778,56040],{"class":59},[33,91780,56043],{"class":3632},[33,91782,109],{"class":59},[33,91784,91785],{"class":117},"'.box'",[33,91787,157],{"class":59},[33,91789,91790,91792,91794,91796],{"class":35,"line":3433},[33,91791,53864],{"class":63},[33,91793,11097],{"class":59},[33,91795,64],{"class":63},[33,91797,48978],{"class":39},[33,91799,91800,91802,91805],{"class":35,"line":3447},[33,91801,71726],{"class":63},[33,91803,91804],{"class":3632}," mouseMove",[33,91806,12511],{"class":59},[33,91808,91809,91812,91814,91816],{"class":35,"line":3452},[33,91810,91811],{"class":59},"      box.innerHTML ",[33,91813,64],{"class":63},[33,91815,4697],{"class":59},[33,91817,4368],{"class":63},[33,91819,91820],{"class":35,"line":4243},[33,91821,91822],{"class":87},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[33,91824,91825],{"class":35,"line":4257},[33,91826,3855],{"class":59},[33,91828,91829],{"class":35,"line":4265},[33,91830,91831],{"class":87},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[33,91833,91834],{"class":35,"line":4270},[33,91835,91836],{"class":87},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[33,91838,91839],{"class":35,"line":4276},[33,91840,91841],{"class":87},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[33,91843,91844,91847,91849,91851,91854,91857,91860,91863,91865],{"class":35,"line":4282},[33,91845,91846],{"class":59},"    box.",[33,91848,59456],{"class":3632},[33,91850,109],{"class":59},[33,91852,91853],{"class":117},"'mousemove'",[33,91855,91856],{"class":59},", _.",[33,91858,91859],{"class":3632},"debounce",[33,91861,91862],{"class":59},"(mouseMove, ",[33,91864,66716],{"class":39},[33,91866,121],{"class":59},[33,91868,91869,91871,91873],{"class":35,"line":4287},[33,91870,54062],{"class":59},[33,91872,53458],{"class":52945},[33,91874,52952],{"class":59},[33,91876,91877,91879,91881],{"class":35,"line":9608},[33,91878,53430],{"class":59},[33,91880,53445],{"class":52945},[33,91882,52952],{"class":59},[33,91884,91885],{"class":35,"line":9632},[33,91886,127],{"emptyLinePlaceholder":126},[33,91888,91889,91891,91893],{"class":35,"line":9637},[33,91890,53430],{"class":59},[33,91892,52280],{"class":52945},[33,91894,52952],{"class":59},[2822,91896,91897],{},[165,91898,91899],{},"手写一个防抖函数来处理",[19,91901,91902],{},"防抖的核心就是利用定时器来实现的：",[19,91904,91905],{},"①声明一个定时器变量",[19,91907,91908],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91910,91911],{},"③如果没有定时器则开启定时器，记得存到变量里面",[23,91913,91915],{"className":52278,"code":91914,"language":52280,"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,91916,91917,91927,91941,91945,91953,91967,91987,91999,92007,92013,92023,92035,92047,92057,92069,92079,92089,92101,92105,92113,92121,92125,92133,92151,92169,92177,92195,92205,92213,92223,92227,92231,92235,92240,92245,92250,92255,92260,92265,92283,92290,92295,92303,92308,92321,92337,92347,92352,92356,92360,92380,92384,92389,92394,92399,92404,92412,92420,92424],{"__ignoreMap":28},[33,91918,91919,91921,91923,91925],{"class":35,"line":36},[33,91920,52942],{"class":59},[33,91922,52946],{"class":52945},[33,91924,52949],{"class":3632},[33,91926,52952],{"class":59},[33,91928,91929,91931,91933,91935,91937,91939],{"class":35,"line":43},[33,91930,2726],{"class":59},[33,91932,52280],{"class":52945},[33,91934,52961],{"class":3632},[33,91936,64],{"class":59},[33,91938,52966],{"class":117},[33,91940,52952],{"class":59},[33,91942,91943],{"class":35,"line":130},[33,91944,127],{"emptyLinePlaceholder":126},[33,91946,91947,91949,91951],{"class":35,"line":146},[33,91948,2726],{"class":59},[33,91950,52979],{"class":52945},[33,91952,52952],{"class":59},[33,91954,91955,91957,91959,91961,91963,91965],{"class":35,"line":267},[33,91956,53789],{"class":59},[33,91958,52989],{"class":52945},[33,91960,52992],{"class":3632},[33,91962,64],{"class":59},[33,91964,52997],{"class":117},[33,91966,52952],{"class":59},[33,91968,91969,91971,91973,91975,91977,91979,91981,91983,91985],{"class":35,"line":275},[33,91970,53789],{"class":59},[33,91972,52989],{"class":52945},[33,91974,16578],{"class":3632},[33,91976,64],{"class":59},[33,91978,53036],{"class":117},[33,91980,53016],{"class":3632},[33,91982,64],{"class":59},[33,91984,53043],{"class":117},[33,91986,52952],{"class":59},[33,91988,91989,91991,91993,91995,91997],{"class":35,"line":392},[33,91990,53789],{"class":59},[33,91992,53052],{"class":52945},[33,91994,53055],{"class":59},[33,91996,53052],{"class":52945},[33,91998,52952],{"class":59},[33,92000,92001,92003,92005],{"class":35,"line":406},[33,92002,53789],{"class":59},[33,92004,1729],{"class":52945},[33,92006,52952],{"class":59},[33,92008,92009,92011],{"class":35,"line":418},[33,92010,56396],{"class":3632},[33,92012,17228],{"class":59},[33,92014,92015,92017,92019,92021],{"class":35,"line":425},[33,92016,74237],{"class":39},[33,92018,53082],{"class":59},[33,92020,62148],{"class":39},[33,92022,2976],{"class":59},[33,92024,92025,92027,92029,92031,92033],{"class":35,"line":1147},[33,92026,56415],{"class":39},[33,92028,53082],{"class":59},[33,92030,3391],{"class":39},[33,92032,53137],{"class":63},[33,92034,2976],{"class":59},[33,92036,92037,92039,92041,92043,92045],{"class":35,"line":1329},[33,92038,56429],{"class":39},[33,92040,53082],{"class":59},[33,92042,3391],{"class":39},[33,92044,53137],{"class":63},[33,92046,2976],{"class":59},[33,92048,92049,92051,92053,92055],{"class":35,"line":1341},[33,92050,56528],{"class":39},[33,92052,53082],{"class":59},[33,92054,91645],{"class":39},[33,92056,2976],{"class":59},[33,92058,92059,92061,92063,92065,92067],{"class":35,"line":1348},[33,92060,56566],{"class":39},[33,92062,53082],{"class":59},[33,92064,2642],{"class":39},[33,92066,53137],{"class":63},[33,92068,2976],{"class":59},[33,92070,92071,92073,92075,92077],{"class":35,"line":1529},[33,92072,59059],{"class":39},[33,92074,53082],{"class":59},[33,92076,62484],{"class":39},[33,92078,2976],{"class":59},[33,92080,92081,92083,92085,92087],{"class":35,"line":1546},[33,92082,58929],{"class":39},[33,92084,53082],{"class":59},[33,92086,53237],{"class":39},[33,92088,2976],{"class":59},[33,92090,92091,92093,92095,92097,92099],{"class":35,"line":1551},[33,92092,91684],{"class":39},[33,92094,53082],{"class":59},[33,92096,2137],{"class":39},[33,92098,53137],{"class":63},[33,92100,2976],{"class":59},[33,92102,92103],{"class":35,"line":1566},[33,92104,3855],{"class":59},[33,92106,92107,92109,92111],{"class":35,"line":1578},[33,92108,54062],{"class":59},[33,92110,1729],{"class":52945},[33,92112,52952],{"class":59},[33,92114,92115,92117,92119],{"class":35,"line":1583},[33,92116,53430],{"class":59},[33,92118,52979],{"class":52945},[33,92120,52952],{"class":59},[33,92122,92123],{"class":35,"line":3369},[33,92124,127],{"emptyLinePlaceholder":126},[33,92126,92127,92129,92131],{"class":35,"line":3396},[33,92128,2726],{"class":59},[33,92130,53445],{"class":52945},[33,92132,52952],{"class":59},[33,92134,92135,92137,92139,92141,92143,92145,92147,92149],{"class":35,"line":3401},[33,92136,53789],{"class":59},[33,92138,53256],{"class":52945},[33,92140,55131],{"class":3632},[33,92142,64],{"class":59},[33,92144,55136],{"class":117},[33,92146,56958],{"class":59},[33,92148,53256],{"class":52945},[33,92150,52952],{"class":59},[33,92152,92153,92155,92157,92159,92161,92163,92165,92167],{"class":35,"line":3418},[33,92154,53789],{"class":59},[33,92156,53458],{"class":52945},[33,92158,56883],{"class":3632},[33,92160,64],{"class":59},[33,92162,89913],{"class":117},[33,92164,56958],{"class":59},[33,92166,53458],{"class":52945},[33,92168,52952],{"class":59},[33,92170,92171,92173,92175],{"class":35,"line":3423},[33,92172,53789],{"class":59},[33,92174,53458],{"class":52945},[33,92176,52952],{"class":59},[33,92178,92179,92181,92183,92185,92187,92189,92191,92193],{"class":35,"line":3428},[33,92180,12879],{"class":63},[33,92182,88573],{"class":39},[33,92184,15222],{"class":63},[33,92186,56040],{"class":59},[33,92188,56043],{"class":3632},[33,92190,109],{"class":59},[33,92192,91785],{"class":117},[33,92194,157],{"class":59},[33,92196,92197,92199,92201,92203],{"class":35,"line":3433},[33,92198,53864],{"class":63},[33,92200,11097],{"class":59},[33,92202,64],{"class":63},[33,92204,48978],{"class":39},[33,92206,92207,92209,92211],{"class":35,"line":3447},[33,92208,71726],{"class":63},[33,92210,91804],{"class":3632},[33,92212,12511],{"class":59},[33,92214,92215,92217,92219,92221],{"class":35,"line":3452},[33,92216,91811],{"class":59},[33,92218,64],{"class":63},[33,92220,4697],{"class":59},[33,92222,4368],{"class":63},[33,92224,92225],{"class":35,"line":4243},[33,92226,91822],{"class":87},[33,92228,92229],{"class":35,"line":4257},[33,92230,3855],{"class":59},[33,92232,92233],{"class":35,"line":4265},[33,92234,91831],{"class":87},[33,92236,92237],{"class":35,"line":4270},[33,92238,92239],{"class":87},"    \u002F\u002F 手写防抖函数\n",[33,92241,92242],{"class":35,"line":4276},[33,92243,92244],{"class":87},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[33,92246,92247],{"class":35,"line":4282},[33,92248,92249],{"class":87},"    \u002F\u002F 1.声明定时器变量\n",[33,92251,92252],{"class":35,"line":4287},[33,92253,92254],{"class":87},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[33,92256,92257],{"class":35,"line":9608},[33,92258,92259],{"class":87},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[33,92261,92262],{"class":35,"line":9632},[33,92263,92264],{"class":87},"    \u002F\u002F 4.定时器里面写函数调用\n",[33,92266,92267,92269,92272,92274,92277,92279,92281],{"class":35,"line":9637},[33,92268,71726],{"class":63},[33,92270,92271],{"class":3632}," debounce",[33,92273,109],{"class":59},[33,92275,92276],{"class":6877},"fn",[33,92278,14093],{"class":59},[33,92280,2537],{"class":6877},[33,92282,14100],{"class":59},[33,92284,92285,92287],{"class":35,"line":9643},[33,92286,81413],{"class":63},[33,92288,92289],{"class":59}," timer\n",[33,92291,92292],{"class":35,"line":9670},[33,92293,92294],{"class":87},"      \u002F\u002F return 返回一个匿名函数\n",[33,92296,92297,92299,92301],{"class":35,"line":9675},[33,92298,75623],{"class":63},[33,92300,60561],{"class":63},[33,92302,56096],{"class":59},[33,92304,92305],{"class":35,"line":9681},[33,92306,92307],{"class":87},"        \u002F\u002F 这里边写第二三四步\n",[33,92309,92310,92312,92315,92318],{"class":35,"line":9693},[33,92311,4163],{"class":63},[33,92313,92314],{"class":59}," (timer) ",[33,92316,92317],{"class":3632},"clearTimeout",[33,92319,92320],{"class":59},"(timer)\n",[33,92322,92323,92326,92328,92331,92333,92335],{"class":35,"line":9705},[33,92324,92325],{"class":59},"        timer ",[33,92327,64],{"class":63},[33,92329,92330],{"class":3632}," setTimeout",[33,92332,109],{"class":59},[33,92334,56093],{"class":63},[33,92336,56096],{"class":59},[33,92338,92339,92342,92344],{"class":35,"line":9717},[33,92340,92341],{"class":3632},"          fn",[33,92343,14708],{"class":59},[33,92345,92346],{"class":87},"\u002F\u002F加小括号调用fn }, t)\n",[33,92348,92349],{"class":35,"line":11375},[33,92350,92351],{"class":59},"        }, t)\n",[33,92353,92354],{"class":35,"line":11400},[33,92355,54043],{"class":59},[33,92357,92358],{"class":35,"line":11423},[33,92359,3855],{"class":59},[33,92361,92362,92364,92366,92368,92370,92372,92374,92376,92378],{"class":35,"line":11447},[33,92363,91846],{"class":59},[33,92365,59456],{"class":3632},[33,92367,109],{"class":59},[33,92369,91853],{"class":117},[33,92371,14093],{"class":59},[33,92373,91859],{"class":3632},[33,92375,91862],{"class":59},[33,92377,66716],{"class":39},[33,92379,121],{"class":59},[33,92381,92382],{"class":35,"line":11452},[33,92383,127],{"emptyLinePlaceholder":126},[33,92385,92386],{"class":35,"line":11457},[33,92387,92388],{"class":87},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[33,92390,92391],{"class":35,"line":11462},[33,92392,92393],{"class":87},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[33,92395,92396],{"class":35,"line":11471},[33,92397,92398],{"class":87},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[33,92400,92401],{"class":35,"line":11476},[33,92402,92403],{"class":87},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[33,92405,92406,92408,92410],{"class":35,"line":11482},[33,92407,54062],{"class":59},[33,92409,53458],{"class":52945},[33,92411,52952],{"class":59},[33,92413,92414,92416,92418],{"class":35,"line":11503},[33,92415,53430],{"class":59},[33,92417,53445],{"class":52945},[33,92419,52952],{"class":59},[33,92421,92422],{"class":35,"line":11509},[33,92423,127],{"emptyLinePlaceholder":126},[33,92425,92426,92428,92430],{"class":35,"line":11523},[33,92427,53430],{"class":59},[33,92429,52280],{"class":52945},[33,92431,52952],{"class":59},[633,92433,92435],{"id":92434},"_4172-节流","4.17.2 节流",[19,92437,92438],{},[3145,92439],{"alt":28,"src":92440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92442,92443],{},[3145,92444],{"alt":28,"src":92445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92447,92448],{},[1968,92449,92450],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92452,92453],{},"实现方式：",[2822,92455,92456],{},[165,92457,92458],{},"lodash 提供的节流函数来处理",[19,92460,92461],{},"_.throttle(func,[wait=0],[options=])",[19,92463,92464],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[23,92466,92468],{"className":52278,"code":92467,"language":52280,"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,92469,92470,92480,92494,92498,92506,92520,92540,92552,92560,92566,92576,92588,92600,92610,92622,92632,92642,92654,92658,92666,92674,92678,92686,92704,92722,92730,92748,92758,92766,92776,92780,92784,92788,92793,92798,92819,92827,92835,92839],{"__ignoreMap":28},[33,92471,92472,92474,92476,92478],{"class":35,"line":36},[33,92473,52942],{"class":59},[33,92475,52946],{"class":52945},[33,92477,52949],{"class":3632},[33,92479,52952],{"class":59},[33,92481,92482,92484,92486,92488,92490,92492],{"class":35,"line":43},[33,92483,2726],{"class":59},[33,92485,52280],{"class":52945},[33,92487,52961],{"class":3632},[33,92489,64],{"class":59},[33,92491,52966],{"class":117},[33,92493,52952],{"class":59},[33,92495,92496],{"class":35,"line":130},[33,92497,127],{"emptyLinePlaceholder":126},[33,92499,92500,92502,92504],{"class":35,"line":146},[33,92501,2726],{"class":59},[33,92503,52979],{"class":52945},[33,92505,52952],{"class":59},[33,92507,92508,92510,92512,92514,92516,92518],{"class":35,"line":267},[33,92509,53789],{"class":59},[33,92511,52989],{"class":52945},[33,92513,52992],{"class":3632},[33,92515,64],{"class":59},[33,92517,52997],{"class":117},[33,92519,52952],{"class":59},[33,92521,92522,92524,92526,92528,92530,92532,92534,92536,92538],{"class":35,"line":275},[33,92523,53789],{"class":59},[33,92525,52989],{"class":52945},[33,92527,16578],{"class":3632},[33,92529,64],{"class":59},[33,92531,53036],{"class":117},[33,92533,53016],{"class":3632},[33,92535,64],{"class":59},[33,92537,53043],{"class":117},[33,92539,52952],{"class":59},[33,92541,92542,92544,92546,92548,92550],{"class":35,"line":392},[33,92543,53789],{"class":59},[33,92545,53052],{"class":52945},[33,92547,53055],{"class":59},[33,92549,53052],{"class":52945},[33,92551,52952],{"class":59},[33,92553,92554,92556,92558],{"class":35,"line":406},[33,92555,53789],{"class":59},[33,92557,1729],{"class":52945},[33,92559,52952],{"class":59},[33,92561,92562,92564],{"class":35,"line":418},[33,92563,56396],{"class":3632},[33,92565,17228],{"class":59},[33,92567,92568,92570,92572,92574],{"class":35,"line":425},[33,92569,74237],{"class":39},[33,92571,53082],{"class":59},[33,92573,62148],{"class":39},[33,92575,2976],{"class":59},[33,92577,92578,92580,92582,92584,92586],{"class":35,"line":1147},[33,92579,56415],{"class":39},[33,92581,53082],{"class":59},[33,92583,3391],{"class":39},[33,92585,53137],{"class":63},[33,92587,2976],{"class":59},[33,92589,92590,92592,92594,92596,92598],{"class":35,"line":1329},[33,92591,56429],{"class":39},[33,92593,53082],{"class":59},[33,92595,3391],{"class":39},[33,92597,53137],{"class":63},[33,92599,2976],{"class":59},[33,92601,92602,92604,92606,92608],{"class":35,"line":1341},[33,92603,56528],{"class":39},[33,92605,53082],{"class":59},[33,92607,91645],{"class":39},[33,92609,2976],{"class":59},[33,92611,92612,92614,92616,92618,92620],{"class":35,"line":1348},[33,92613,56566],{"class":39},[33,92615,53082],{"class":59},[33,92617,2642],{"class":39},[33,92619,53137],{"class":63},[33,92621,2976],{"class":59},[33,92623,92624,92626,92628,92630],{"class":35,"line":1529},[33,92625,59059],{"class":39},[33,92627,53082],{"class":59},[33,92629,62484],{"class":39},[33,92631,2976],{"class":59},[33,92633,92634,92636,92638,92640],{"class":35,"line":1546},[33,92635,58929],{"class":39},[33,92637,53082],{"class":59},[33,92639,53237],{"class":39},[33,92641,2976],{"class":59},[33,92643,92644,92646,92648,92650,92652],{"class":35,"line":1551},[33,92645,91684],{"class":39},[33,92647,53082],{"class":59},[33,92649,2137],{"class":39},[33,92651,53137],{"class":63},[33,92653,2976],{"class":59},[33,92655,92656],{"class":35,"line":1566},[33,92657,3855],{"class":59},[33,92659,92660,92662,92664],{"class":35,"line":1578},[33,92661,54062],{"class":59},[33,92663,1729],{"class":52945},[33,92665,52952],{"class":59},[33,92667,92668,92670,92672],{"class":35,"line":1583},[33,92669,53430],{"class":59},[33,92671,52979],{"class":52945},[33,92673,52952],{"class":59},[33,92675,92676],{"class":35,"line":3369},[33,92677,127],{"emptyLinePlaceholder":126},[33,92679,92680,92682,92684],{"class":35,"line":3396},[33,92681,2726],{"class":59},[33,92683,53445],{"class":52945},[33,92685,52952],{"class":59},[33,92687,92688,92690,92692,92694,92696,92698,92700,92702],{"class":35,"line":3401},[33,92689,53789],{"class":59},[33,92691,53256],{"class":52945},[33,92693,55131],{"class":3632},[33,92695,64],{"class":59},[33,92697,55136],{"class":117},[33,92699,56958],{"class":59},[33,92701,53256],{"class":52945},[33,92703,52952],{"class":59},[33,92705,92706,92708,92710,92712,92714,92716,92718,92720],{"class":35,"line":3418},[33,92707,53789],{"class":59},[33,92709,53458],{"class":52945},[33,92711,56883],{"class":3632},[33,92713,64],{"class":59},[33,92715,89913],{"class":117},[33,92717,56958],{"class":59},[33,92719,53458],{"class":52945},[33,92721,52952],{"class":59},[33,92723,92724,92726,92728],{"class":35,"line":3423},[33,92725,53789],{"class":59},[33,92727,53458],{"class":52945},[33,92729,52952],{"class":59},[33,92731,92732,92734,92736,92738,92740,92742,92744,92746],{"class":35,"line":3428},[33,92733,12879],{"class":63},[33,92735,88573],{"class":39},[33,92737,15222],{"class":63},[33,92739,56040],{"class":59},[33,92741,56043],{"class":3632},[33,92743,109],{"class":59},[33,92745,91785],{"class":117},[33,92747,157],{"class":59},[33,92749,92750,92752,92754,92756],{"class":35,"line":3433},[33,92751,53864],{"class":63},[33,92753,11097],{"class":59},[33,92755,64],{"class":63},[33,92757,48978],{"class":39},[33,92759,92760,92762,92764],{"class":35,"line":3447},[33,92761,71726],{"class":63},[33,92763,91804],{"class":3632},[33,92765,12511],{"class":59},[33,92767,92768,92770,92772,92774],{"class":35,"line":3452},[33,92769,91811],{"class":59},[33,92771,64],{"class":63},[33,92773,4697],{"class":59},[33,92775,4368],{"class":63},[33,92777,92778],{"class":35,"line":4243},[33,92779,91822],{"class":87},[33,92781,92782],{"class":35,"line":4257},[33,92783,3855],{"class":59},[33,92785,92786],{"class":35,"line":4265},[33,92787,91831],{"class":87},[33,92789,92790],{"class":35,"line":4270},[33,92791,92792],{"class":87},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[33,92794,92795],{"class":35,"line":4276},[33,92796,92797],{"class":87},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[33,92799,92800,92802,92804,92806,92808,92810,92813,92815,92817],{"class":35,"line":4282},[33,92801,91846],{"class":59},[33,92803,59456],{"class":3632},[33,92805,109],{"class":59},[33,92807,91853],{"class":117},[33,92809,91856],{"class":59},[33,92811,92812],{"class":3632},"throttle",[33,92814,91862],{"class":59},[33,92816,66716],{"class":39},[33,92818,121],{"class":59},[33,92820,92821,92823,92825],{"class":35,"line":4287},[33,92822,54062],{"class":59},[33,92824,53458],{"class":52945},[33,92826,52952],{"class":59},[33,92828,92829,92831,92833],{"class":35,"line":9608},[33,92830,53430],{"class":59},[33,92832,53445],{"class":52945},[33,92834,52952],{"class":59},[33,92836,92837],{"class":35,"line":9632},[33,92838,127],{"emptyLinePlaceholder":126},[33,92840,92841,92843,92845],{"class":35,"line":9637},[33,92842,53430],{"class":59},[33,92844,52280],{"class":52945},[33,92846,52952],{"class":59},[2822,92848,92849],{},[165,92850,92851],{},"手写一个节流函数来处理",[19,92853,72594],{},[19,92855,91905],{},[19,92857,92858],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92860,92861],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[23,92863,92865],{"className":52278,"code":92864,"language":52280,"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,92866,92867,92877,92891,92895,92903,92917,92937,92949,92957,92963,92973,92985,92997,93007,93019,93029,93039,93051,93055,93063,93071,93075,93083,93101,93119,93127,93145,93155,93163,93173,93177,93181,93185,93190,93195,93200,93205,93210,93215,93232,93238,93246,93257,93272,93279,93284,93289,93299,93304,93309,93314,93318,93322,93326,93346,93354,93362,93366],{"__ignoreMap":28},[33,92868,92869,92871,92873,92875],{"class":35,"line":36},[33,92870,52942],{"class":59},[33,92872,52946],{"class":52945},[33,92874,52949],{"class":3632},[33,92876,52952],{"class":59},[33,92878,92879,92881,92883,92885,92887,92889],{"class":35,"line":43},[33,92880,2726],{"class":59},[33,92882,52280],{"class":52945},[33,92884,52961],{"class":3632},[33,92886,64],{"class":59},[33,92888,52966],{"class":117},[33,92890,52952],{"class":59},[33,92892,92893],{"class":35,"line":130},[33,92894,127],{"emptyLinePlaceholder":126},[33,92896,92897,92899,92901],{"class":35,"line":146},[33,92898,2726],{"class":59},[33,92900,52979],{"class":52945},[33,92902,52952],{"class":59},[33,92904,92905,92907,92909,92911,92913,92915],{"class":35,"line":267},[33,92906,53789],{"class":59},[33,92908,52989],{"class":52945},[33,92910,52992],{"class":3632},[33,92912,64],{"class":59},[33,92914,52997],{"class":117},[33,92916,52952],{"class":59},[33,92918,92919,92921,92923,92925,92927,92929,92931,92933,92935],{"class":35,"line":275},[33,92920,53789],{"class":59},[33,92922,52989],{"class":52945},[33,92924,16578],{"class":3632},[33,92926,64],{"class":59},[33,92928,53036],{"class":117},[33,92930,53016],{"class":3632},[33,92932,64],{"class":59},[33,92934,53043],{"class":117},[33,92936,52952],{"class":59},[33,92938,92939,92941,92943,92945,92947],{"class":35,"line":392},[33,92940,53789],{"class":59},[33,92942,53052],{"class":52945},[33,92944,53055],{"class":59},[33,92946,53052],{"class":52945},[33,92948,52952],{"class":59},[33,92950,92951,92953,92955],{"class":35,"line":406},[33,92952,53789],{"class":59},[33,92954,1729],{"class":52945},[33,92956,52952],{"class":59},[33,92958,92959,92961],{"class":35,"line":418},[33,92960,56396],{"class":3632},[33,92962,17228],{"class":59},[33,92964,92965,92967,92969,92971],{"class":35,"line":425},[33,92966,74237],{"class":39},[33,92968,53082],{"class":59},[33,92970,62148],{"class":39},[33,92972,2976],{"class":59},[33,92974,92975,92977,92979,92981,92983],{"class":35,"line":1147},[33,92976,56415],{"class":39},[33,92978,53082],{"class":59},[33,92980,3391],{"class":39},[33,92982,53137],{"class":63},[33,92984,2976],{"class":59},[33,92986,92987,92989,92991,92993,92995],{"class":35,"line":1329},[33,92988,56429],{"class":39},[33,92990,53082],{"class":59},[33,92992,3391],{"class":39},[33,92994,53137],{"class":63},[33,92996,2976],{"class":59},[33,92998,92999,93001,93003,93005],{"class":35,"line":1341},[33,93000,56528],{"class":39},[33,93002,53082],{"class":59},[33,93004,91645],{"class":39},[33,93006,2976],{"class":59},[33,93008,93009,93011,93013,93015,93017],{"class":35,"line":1348},[33,93010,56566],{"class":39},[33,93012,53082],{"class":59},[33,93014,2642],{"class":39},[33,93016,53137],{"class":63},[33,93018,2976],{"class":59},[33,93020,93021,93023,93025,93027],{"class":35,"line":1529},[33,93022,59059],{"class":39},[33,93024,53082],{"class":59},[33,93026,62484],{"class":39},[33,93028,2976],{"class":59},[33,93030,93031,93033,93035,93037],{"class":35,"line":1546},[33,93032,58929],{"class":39},[33,93034,53082],{"class":59},[33,93036,53237],{"class":39},[33,93038,2976],{"class":59},[33,93040,93041,93043,93045,93047,93049],{"class":35,"line":1551},[33,93042,91684],{"class":39},[33,93044,53082],{"class":59},[33,93046,2137],{"class":39},[33,93048,53137],{"class":63},[33,93050,2976],{"class":59},[33,93052,93053],{"class":35,"line":1566},[33,93054,3855],{"class":59},[33,93056,93057,93059,93061],{"class":35,"line":1578},[33,93058,54062],{"class":59},[33,93060,1729],{"class":52945},[33,93062,52952],{"class":59},[33,93064,93065,93067,93069],{"class":35,"line":1583},[33,93066,53430],{"class":59},[33,93068,52979],{"class":52945},[33,93070,52952],{"class":59},[33,93072,93073],{"class":35,"line":3369},[33,93074,127],{"emptyLinePlaceholder":126},[33,93076,93077,93079,93081],{"class":35,"line":3396},[33,93078,2726],{"class":59},[33,93080,53445],{"class":52945},[33,93082,52952],{"class":59},[33,93084,93085,93087,93089,93091,93093,93095,93097,93099],{"class":35,"line":3401},[33,93086,53789],{"class":59},[33,93088,53256],{"class":52945},[33,93090,55131],{"class":3632},[33,93092,64],{"class":59},[33,93094,55136],{"class":117},[33,93096,56958],{"class":59},[33,93098,53256],{"class":52945},[33,93100,52952],{"class":59},[33,93102,93103,93105,93107,93109,93111,93113,93115,93117],{"class":35,"line":3418},[33,93104,53789],{"class":59},[33,93106,53458],{"class":52945},[33,93108,56883],{"class":3632},[33,93110,64],{"class":59},[33,93112,89913],{"class":117},[33,93114,56958],{"class":59},[33,93116,53458],{"class":52945},[33,93118,52952],{"class":59},[33,93120,93121,93123,93125],{"class":35,"line":3423},[33,93122,53789],{"class":59},[33,93124,53458],{"class":52945},[33,93126,52952],{"class":59},[33,93128,93129,93131,93133,93135,93137,93139,93141,93143],{"class":35,"line":3428},[33,93130,12879],{"class":63},[33,93132,88573],{"class":39},[33,93134,15222],{"class":63},[33,93136,56040],{"class":59},[33,93138,56043],{"class":3632},[33,93140,109],{"class":59},[33,93142,91785],{"class":117},[33,93144,157],{"class":59},[33,93146,93147,93149,93151,93153],{"class":35,"line":3433},[33,93148,53864],{"class":63},[33,93150,11097],{"class":59},[33,93152,64],{"class":63},[33,93154,48978],{"class":39},[33,93156,93157,93159,93161],{"class":35,"line":3447},[33,93158,71726],{"class":63},[33,93160,91804],{"class":3632},[33,93162,12511],{"class":59},[33,93164,93165,93167,93169,93171],{"class":35,"line":3452},[33,93166,91811],{"class":59},[33,93168,64],{"class":63},[33,93170,4697],{"class":59},[33,93172,4368],{"class":63},[33,93174,93175],{"class":35,"line":4243},[33,93176,91822],{"class":87},[33,93178,93179],{"class":35,"line":4257},[33,93180,3855],{"class":59},[33,93182,93183],{"class":35,"line":4265},[33,93184,91831],{"class":87},[33,93186,93187],{"class":35,"line":4270},[33,93188,93189],{"class":87},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[33,93191,93192],{"class":35,"line":4276},[33,93193,93194],{"class":87},"    \u002F\u002F 1.声明一个定时器变量\n",[33,93196,93197],{"class":35,"line":4282},[33,93198,93199],{"class":87},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[33,93201,93202],{"class":35,"line":4287},[33,93203,93204],{"class":87},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[33,93206,93207],{"class":35,"line":9608},[33,93208,93209],{"class":87},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[33,93211,93212],{"class":35,"line":9632},[33,93213,93214],{"class":87},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[33,93216,93217,93219,93222,93224,93226,93228,93230],{"class":35,"line":9637},[33,93218,71726],{"class":63},[33,93220,93221],{"class":3632}," throttle",[33,93223,109],{"class":59},[33,93225,92276],{"class":6877},[33,93227,14093],{"class":59},[33,93229,2537],{"class":6877},[33,93231,14100],{"class":59},[33,93233,93234,93236],{"class":35,"line":9643},[33,93235,81413],{"class":63},[33,93237,92289],{"class":59},[33,93239,93240,93242,93244],{"class":35,"line":9670},[33,93241,75623],{"class":63},[33,93243,60561],{"class":63},[33,93245,56096],{"class":59},[33,93247,93248,93250,93252,93254],{"class":35,"line":9675},[33,93249,4163],{"class":63},[33,93251,3332],{"class":59},[33,93253,2045],{"class":63},[33,93255,93256],{"class":59},"timer) {\n",[33,93258,93259,93262,93264,93266,93268,93270],{"class":35,"line":9681},[33,93260,93261],{"class":59},"          timer ",[33,93263,64],{"class":63},[33,93265,92330],{"class":3632},[33,93267,109],{"class":59},[33,93269,56093],{"class":63},[33,93271,56096],{"class":59},[33,93273,93274,93277],{"class":35,"line":9693},[33,93275,93276],{"class":3632},"            fn",[33,93278,943],{"class":59},[33,93280,93281],{"class":35,"line":9705},[33,93282,93283],{"class":87},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[33,93285,93286],{"class":35,"line":9717},[33,93287,93288],{"class":87},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[33,93290,93291,93294,93296],{"class":35,"line":11375},[33,93292,93293],{"class":59},"            timer ",[33,93295,64],{"class":63},[33,93297,93298],{"class":39}," null\n",[33,93300,93301],{"class":35,"line":11400},[33,93302,93303],{"class":87},"            \u002F\u002F 不能用clearTimeout(timer)\n",[33,93305,93306],{"class":35,"line":11423},[33,93307,93308],{"class":87},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[33,93310,93311],{"class":35,"line":11447},[33,93312,93313],{"class":59},"          }, t)\n",[33,93315,93316],{"class":35,"line":11452},[33,93317,4195],{"class":59},[33,93319,93320],{"class":35,"line":11457},[33,93321,54043],{"class":59},[33,93323,93324],{"class":35,"line":11462},[33,93325,3855],{"class":59},[33,93327,93328,93330,93332,93334,93336,93338,93340,93342,93344],{"class":35,"line":11471},[33,93329,91846],{"class":59},[33,93331,59456],{"class":3632},[33,93333,109],{"class":59},[33,93335,91853],{"class":117},[33,93337,14093],{"class":59},[33,93339,92812],{"class":3632},[33,93341,91862],{"class":59},[33,93343,66716],{"class":39},[33,93345,121],{"class":59},[33,93347,93348,93350,93352],{"class":35,"line":11476},[33,93349,54062],{"class":59},[33,93351,53458],{"class":52945},[33,93353,52952],{"class":59},[33,93355,93356,93358,93360],{"class":35,"line":11482},[33,93357,53430],{"class":59},[33,93359,53445],{"class":52945},[33,93361,52952],{"class":59},[33,93363,93364],{"class":35,"line":11503},[33,93365,127],{"emptyLinePlaceholder":126},[33,93367,93368,93370,93372],{"class":35,"line":11509},[33,93369,53430],{"class":59},[33,93371,52280],{"class":52945},[33,93373,52952],{"class":59},[633,93375,93377],{"id":93376},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[23,93379,93381],{"className":54712,"code":93380,"language":54714,"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,93382,93383,93391,93399,93404,93409,93414,93419,93423,93431],{"__ignoreMap":28},[33,93384,93385,93387,93389],{"class":35,"line":36},[33,93386,2726],{"class":59},[33,93388,53445],{"class":52945},[33,93390,52952],{"class":59},[33,93392,93393,93395,93397],{"class":35,"line":43},[33,93394,53789],{"class":59},[33,93396,53458],{"class":52945},[33,93398,52952],{"class":59},[33,93400,93401],{"class":35,"line":130},[33,93402,93403],{"class":59},"    let timer = null\n",[33,93405,93406],{"class":35,"line":146},[33,93407,93408],{"class":59},"    timer = setTimeout(() => {\n",[33,93410,93411],{"class":35,"line":267},[33,93412,93413],{"class":59},"      clearTimeout(timer)\n",[33,93415,93416],{"class":35,"line":275},[33,93417,93418],{"class":59},"      console.log(timer)\n",[33,93420,93421],{"class":35,"line":392},[33,93422,61868],{"class":59},[33,93424,93425,93427,93429],{"class":35,"line":406},[33,93426,54062],{"class":59},[33,93428,53458],{"class":52945},[33,93430,52952],{"class":59},[33,93432,93433,93435,93437],{"class":35,"line":418},[33,93434,53430],{"class":59},[33,93436,53445],{"class":52945},[33,93438,52952],{"class":59},[19,93440,93441],{},"输出为1",[19,93443,93444],{},"在开启的定时器里边写清除定时器",[19,93446,93447],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[633,93449,93451],{"id":93450},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93453,93454],{},"页面打开，可以记录上一次的视频播放位置",[19,93456,93457],{},[3145,93458],{"alt":28,"src":93459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93461,93462],{},[3145,93463],{"alt":28,"src":93464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[23,93466,93468],{"className":52278,"code":93467,"language":52280,"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,93469,93470,93480,93494,93498,93506,93520,93540,93560,93582,93595,93603,93609,93619,93629,93639,93643,93647,93654,93667,93679,93683,93687,93697,93709,93723,93727,93731,93738,93748,93761,93773,93783,93793,93809,93821,93825,93829,93837,93847,93859,93869,93879,93889,93893,93897,93907,93918,93922,93930,93938,93942,93950,93965,93980,93995,94016,94024,94032,94047,94069,94077,94092,94118,94144,94170,94178,94186,94205,94213,94218,94237,94242,94260,94265,94270,94278,94283,94297,94305,94310,94327,94331,94336,94358,94362,94370,94378,94382],{"__ignoreMap":28},[33,93471,93472,93474,93476,93478],{"class":35,"line":36},[33,93473,52942],{"class":59},[33,93475,52946],{"class":52945},[33,93477,52949],{"class":3632},[33,93479,52952],{"class":59},[33,93481,93482,93484,93486,93488,93490,93492],{"class":35,"line":43},[33,93483,2726],{"class":59},[33,93485,52280],{"class":52945},[33,93487,52961],{"class":3632},[33,93489,64],{"class":59},[33,93491,52966],{"class":117},[33,93493,52952],{"class":59},[33,93495,93496],{"class":35,"line":130},[33,93497,127],{"emptyLinePlaceholder":126},[33,93499,93500,93502,93504],{"class":35,"line":146},[33,93501,2726],{"class":59},[33,93503,52979],{"class":52945},[33,93505,52952],{"class":59},[33,93507,93508,93510,93512,93514,93516,93518],{"class":35,"line":267},[33,93509,53789],{"class":59},[33,93511,52989],{"class":52945},[33,93513,52992],{"class":3632},[33,93515,64],{"class":59},[33,93517,52997],{"class":117},[33,93519,60770],{"class":59},[33,93521,93522,93524,93526,93528,93530,93532,93534,93536,93538],{"class":35,"line":275},[33,93523,53789],{"class":59},[33,93525,52989],{"class":52945},[33,93527,53008],{"class":3632},[33,93529,64],{"class":59},[33,93531,53013],{"class":117},[33,93533,53016],{"class":3632},[33,93535,64],{"class":59},[33,93537,53021],{"class":117},[33,93539,60770],{"class":59},[33,93541,93542,93544,93546,93548,93550,93552,93554,93556,93558],{"class":35,"line":392},[33,93543,53789],{"class":59},[33,93545,52989],{"class":52945},[33,93547,16578],{"class":3632},[33,93549,64],{"class":59},[33,93551,53036],{"class":117},[33,93553,53016],{"class":3632},[33,93555,64],{"class":59},[33,93557,53043],{"class":117},[33,93559,60770],{"class":59},[33,93561,93562,93564,93566,93568,93570,93573,93575,93577,93580],{"class":35,"line":406},[33,93563,53789],{"class":59},[33,93565,52989],{"class":52945},[33,93567,16578],{"class":3632},[33,93569,64],{"class":59},[33,93571,93572],{"class":117},"\"referrer\"",[33,93574,53016],{"class":3632},[33,93576,64],{"class":59},[33,93578,93579],{"class":117},"\"never\"",[33,93581,60770],{"class":59},[33,93583,93584,93586,93588,93591,93593],{"class":35,"line":418},[33,93585,53789],{"class":59},[33,93587,53052],{"class":52945},[33,93589,93590],{"class":59},">综合案例\u003C\u002F",[33,93592,53052],{"class":52945},[33,93594,52952],{"class":59},[33,93596,93597,93599,93601],{"class":35,"line":425},[33,93598,53789],{"class":59},[33,93600,1729],{"class":52945},[33,93602,52952],{"class":59},[33,93604,93605,93607],{"class":35,"line":1147},[33,93606,8063],{"class":52945},[33,93608,17228],{"class":59},[33,93610,93611,93613,93615,93617],{"class":35,"line":1329},[33,93612,56339],{"class":39},[33,93614,53082],{"class":59},[33,93616,2010],{"class":39},[33,93618,2976],{"class":59},[33,93620,93621,93623,93625,93627],{"class":35,"line":1341},[33,93622,56350],{"class":39},[33,93624,53082],{"class":59},[33,93626,2010],{"class":39},[33,93628,2976],{"class":59},[33,93630,93631,93633,93635,93637],{"class":35,"line":1348},[33,93632,74237],{"class":39},[33,93634,53082],{"class":59},[33,93636,62148],{"class":39},[33,93638,2976],{"class":59},[33,93640,93641],{"class":35,"line":1529},[33,93642,3855],{"class":59},[33,93644,93645],{"class":35,"line":1546},[33,93646,127],{"emptyLinePlaceholder":126},[33,93648,93649,93652],{"class":35,"line":1551},[33,93650,93651],{"class":3632},"    .container",[33,93653,17228],{"class":59},[33,93655,93656,93658,93660,93663,93665],{"class":35,"line":1566},[33,93657,56415],{"class":39},[33,93659,53082],{"class":59},[33,93661,93662],{"class":39},"1200",[33,93664,53137],{"class":63},[33,93666,2976],{"class":59},[33,93668,93669,93671,93673,93675,93677],{"class":35,"line":1578},[33,93670,56350],{"class":39},[33,93672,53082],{"class":59},[33,93674,2010],{"class":39},[33,93676,53201],{"class":39},[33,93678,2976],{"class":59},[33,93680,93681],{"class":35,"line":1583},[33,93682,3855],{"class":59},[33,93684,93685],{"class":35,"line":3369},[33,93686,127],{"emptyLinePlaceholder":126},[33,93688,93689,93692,93695],{"class":35,"line":3396},[33,93690,93691],{"class":3632},"    .video",[33,93693,93694],{"class":52945}," video",[33,93696,17228],{"class":59},[33,93698,93699,93701,93703,93705,93707],{"class":35,"line":3401},[33,93700,56415],{"class":39},[33,93702,53082],{"class":59},[33,93704,2129],{"class":39},[33,93706,2146],{"class":63},[33,93708,2976],{"class":59},[33,93710,93711,93713,93715,93717,93719,93721],{"class":35,"line":3418},[33,93712,56339],{"class":39},[33,93714,53082],{"class":59},[33,93716,2517],{"class":39},[33,93718,53137],{"class":63},[33,93720,829],{"class":39},[33,93722,2976],{"class":59},[33,93724,93725],{"class":35,"line":3423},[33,93726,3855],{"class":59},[33,93728,93729],{"class":35,"line":3428},[33,93730,127],{"emptyLinePlaceholder":126},[33,93732,93733,93736],{"class":35,"line":3433},[33,93734,93735],{"class":3632},"    .elevator",[33,93737,17228],{"class":59},[33,93739,93740,93742,93744,93746],{"class":35,"line":3447},[33,93741,56403],{"class":39},[33,93743,53082],{"class":59},[33,93745,87873],{"class":39},[33,93747,2976],{"class":59},[33,93749,93750,93752,93754,93757,93759],{"class":35,"line":3452},[33,93751,56591],{"class":39},[33,93753,53082],{"class":59},[33,93755,93756],{"class":39},"280",[33,93758,53137],{"class":63},[33,93760,2976],{"class":59},[33,93762,93763,93765,93767,93769,93771],{"class":35,"line":4243},[33,93764,88067],{"class":39},[33,93766,53082],{"class":59},[33,93768,2517],{"class":39},[33,93770,53137],{"class":63},[33,93772,2976],{"class":59},[33,93774,93775,93777,93779,93781],{"class":35,"line":4257},[33,93776,87880],{"class":39},[33,93778,53082],{"class":59},[33,93780,87885],{"class":39},[33,93782,2976],{"class":59},[33,93784,93785,93787,93789,93791],{"class":35,"line":4265},[33,93786,63363],{"class":39},[33,93788,53082],{"class":59},[33,93790,62484],{"class":39},[33,93792,2976],{"class":59},[33,93794,93795,93797,93799,93801,93803,93805,93807],{"class":35,"line":4270},[33,93796,63619],{"class":39},[33,93798,53082],{"class":59},[33,93800,2036],{"class":39},[33,93802,53137],{"class":63},[33,93804,53166],{"class":39},[33,93806,63886],{"class":39},[33,93808,2976],{"class":59},[33,93810,93811,93813,93815,93817,93819],{"class":35,"line":4276},[33,93812,56415],{"class":39},[33,93814,53082],{"class":59},[33,93816,2723],{"class":39},[33,93818,53137],{"class":63},[33,93820,2976],{"class":59},[33,93822,93823],{"class":35,"line":4282},[33,93824,3855],{"class":59},[33,93826,93827],{"class":35,"line":4287},[33,93828,127],{"emptyLinePlaceholder":126},[33,93830,93831,93833,93835],{"class":35,"line":9608},[33,93832,93735],{"class":3632},[33,93834,3081],{"class":52945},[33,93836,17228],{"class":59},[33,93838,93839,93841,93843,93845],{"class":35,"line":9632},[33,93840,56653],{"class":39},[33,93842,53082],{"class":59},[33,93844,62511],{"class":39},[33,93846,2976],{"class":59},[33,93848,93849,93851,93853,93855,93857],{"class":35,"line":9637},[33,93850,56339],{"class":39},[33,93852,53082],{"class":59},[33,93854,2264],{"class":39},[33,93856,53137],{"class":63},[33,93858,2976],{"class":59},[33,93860,93861,93863,93865,93867],{"class":35,"line":9643},[33,93862,65612],{"class":39},[33,93864,53082],{"class":59},[33,93866,56381],{"class":39},[33,93868,2976],{"class":59},[33,93870,93871,93873,93875,93877],{"class":35,"line":9670},[33,93872,58929],{"class":39},[33,93874,53082],{"class":59},[33,93876,53237],{"class":39},[33,93878,2976],{"class":59},[33,93880,93881,93883,93885,93887],{"class":35,"line":9675},[33,93882,59059],{"class":39},[33,93884,53082],{"class":59},[33,93886,63712],{"class":39},[33,93888,2976],{"class":59},[33,93890,93891],{"class":35,"line":9681},[33,93892,3855],{"class":59},[33,93894,93895],{"class":35,"line":9693},[33,93896,127],{"emptyLinePlaceholder":126},[33,93898,93899,93901,93903,93905],{"class":35,"line":9705},[33,93900,93735],{"class":3632},[33,93902,3081],{"class":52945},[33,93904,65666],{"class":3632},[33,93906,17228],{"class":59},[33,93908,93909,93911,93913,93916],{"class":35,"line":9717},[33,93910,59059],{"class":39},[33,93912,53082],{"class":59},[33,93914,93915],{"class":39},"#1286ff",[33,93917,2976],{"class":59},[33,93919,93920],{"class":35,"line":11375},[33,93921,3855],{"class":59},[33,93923,93924,93926,93928],{"class":35,"line":11400},[33,93925,54062],{"class":59},[33,93927,1729],{"class":52945},[33,93929,52952],{"class":59},[33,93931,93932,93934,93936],{"class":35,"line":11423},[33,93933,53430],{"class":59},[33,93935,52979],{"class":52945},[33,93937,52952],{"class":59},[33,93939,93940],{"class":35,"line":11447},[33,93941,127],{"emptyLinePlaceholder":126},[33,93943,93944,93946,93948],{"class":35,"line":11452},[33,93945,2726],{"class":59},[33,93947,53445],{"class":52945},[33,93949,52952],{"class":59},[33,93951,93952,93954,93956,93958,93960,93963],{"class":35,"line":11457},[33,93953,53789],{"class":59},[33,93955,53256],{"class":52945},[33,93957,55131],{"class":3632},[33,93959,64],{"class":59},[33,93961,93962],{"class":117},"\"container\"",[33,93964,52952],{"class":59},[33,93966,93967,93969,93971,93973,93975,93978],{"class":35,"line":11462},[33,93968,52986],{"class":59},[33,93970,53256],{"class":52945},[33,93972,55131],{"class":3632},[33,93974,64],{"class":59},[33,93976,93977],{"class":117},"\"header\"",[33,93979,52952],{"class":59},[33,93981,93982,93984,93986,93988,93990,93993],{"class":35,"line":11471},[33,93983,56878],{"class":59},[33,93985,2057],{"class":52945},[33,93987,62699],{"class":3632},[33,93989,64],{"class":59},[33,93991,93992],{"class":117},"\"http:\u002F\u002Fpip.itcast.cn\"",[33,93994,52952],{"class":59},[33,93996,93997,93999,94001,94003,94005,94008,94010,94012,94014],{"class":35,"line":11476},[33,93998,56946],{"class":59},[33,94000,3145],{"class":52945},[33,94002,56883],{"class":3632},[33,94004,64],{"class":59},[33,94006,94007],{"class":117},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[33,94009,56891],{"class":3632},[33,94011,64],{"class":59},[33,94013,9312],{"class":117},[33,94015,60770],{"class":59},[33,94017,94018,94020,94022],{"class":35,"line":11482},[33,94019,57051],{"class":59},[33,94021,2057],{"class":52945},[33,94023,52952],{"class":59},[33,94025,94026,94028,94030],{"class":35,"line":11503},[33,94027,53421],{"class":59},[33,94029,53256],{"class":52945},[33,94031,52952],{"class":59},[33,94033,94034,94036,94038,94040,94042,94045],{"class":35,"line":11509},[33,94035,52986],{"class":59},[33,94037,53256],{"class":52945},[33,94039,55131],{"class":3632},[33,94041,64],{"class":59},[33,94043,94044],{"class":117},"\"video\"",[33,94046,52952],{"class":59},[33,94048,94049,94051,94053,94055,94057,94060,94063,94065,94067],{"class":35,"line":11523},[33,94050,56878],{"class":59},[33,94052,29839],{"class":52945},[33,94054,56883],{"class":3632},[33,94056,64],{"class":59},[33,94058,94059],{"class":117},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[33,94061,94062],{"class":3632}," controls",[33,94064,56958],{"class":59},[33,94066,29839],{"class":52945},[33,94068,52952],{"class":59},[33,94070,94071,94073,94075],{"class":35,"line":11529},[33,94072,53421],{"class":59},[33,94074,53256],{"class":52945},[33,94076,52952],{"class":59},[33,94078,94079,94081,94083,94085,94087,94090],{"class":35,"line":11556},[33,94080,52986],{"class":59},[33,94082,53256],{"class":52945},[33,94084,55131],{"class":3632},[33,94086,64],{"class":59},[33,94088,94089],{"class":117},"\"elevator\"",[33,94091,52952],{"class":59},[33,94093,94094,94096,94098,94100,94102,94104,94107,94109,94111,94114,94116],{"class":35,"line":11565},[33,94095,56878],{"class":59},[33,94097,2057],{"class":52945},[33,94099,62699],{"class":3632},[33,94101,64],{"class":59},[33,94103,65878],{"class":117},[33,94105,94106],{"class":3632}," data-ref",[33,94108,64],{"class":59},[33,94110,94044],{"class":117},[33,94112,94113],{"class":59},">视频介绍\u003C\u002F",[33,94115,2057],{"class":52945},[33,94117,52952],{"class":59},[33,94119,94120,94122,94124,94126,94128,94130,94132,94134,94137,94140,94142],{"class":35,"line":11571},[33,94121,56878],{"class":59},[33,94123,2057],{"class":52945},[33,94125,62699],{"class":3632},[33,94127,64],{"class":59},[33,94129,65878],{"class":117},[33,94131,94106],{"class":3632},[33,94133,64],{"class":59},[33,94135,94136],{"class":117},"\"intro\"",[33,94138,94139],{"class":59},">课程简介\u003C\u002F",[33,94141,2057],{"class":52945},[33,94143,52952],{"class":59},[33,94145,94146,94148,94150,94152,94154,94156,94158,94160,94163,94166,94168],{"class":35,"line":11579},[33,94147,56878],{"class":59},[33,94149,2057],{"class":52945},[33,94151,62699],{"class":3632},[33,94153,64],{"class":59},[33,94155,65878],{"class":117},[33,94157,94106],{"class":3632},[33,94159,64],{"class":59},[33,94161,94162],{"class":117},"\"outline\"",[33,94164,94165],{"class":59},">评论列表\u003C\u002F",[33,94167,2057],{"class":52945},[33,94169,52952],{"class":59},[33,94171,94172,94174,94176],{"class":35,"line":11584},[33,94173,53421],{"class":59},[33,94175,53256],{"class":52945},[33,94177,52952],{"class":59},[33,94179,94180,94182,94184],{"class":35,"line":18259},[33,94181,54062],{"class":59},[33,94183,53256],{"class":52945},[33,94185,52952],{"class":59},[33,94187,94188,94190,94192,94194,94196,94199,94201,94203],{"class":35,"line":18265},[33,94189,53789],{"class":59},[33,94191,53458],{"class":52945},[33,94193,56883],{"class":3632},[33,94195,64],{"class":59},[33,94197,94198],{"class":117},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[33,94200,56958],{"class":59},[33,94202,53458],{"class":52945},[33,94204,52952],{"class":59},[33,94206,94207,94209,94211],{"class":35,"line":18288},[33,94208,53789],{"class":59},[33,94210,53458],{"class":52945},[33,94212,52952],{"class":59},[33,94214,94215],{"class":35,"line":18294},[33,94216,94217],{"class":87},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[33,94219,94220,94222,94224,94226,94228,94230,94232,94235],{"class":35,"line":18317},[33,94221,12879],{"class":63},[33,94223,93694],{"class":39},[33,94225,15222],{"class":63},[33,94227,56040],{"class":59},[33,94229,56043],{"class":3632},[33,94231,109],{"class":59},[33,94233,94234],{"class":117},"'video'",[33,94236,157],{"class":59},[33,94238,94239],{"class":35,"line":18331},[33,94240,94241],{"class":87},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[33,94243,94244,94247,94249,94251,94253,94256,94258],{"class":35,"line":18351},[33,94245,94246],{"class":59},"    video.ontimeupdate ",[33,94248,64],{"class":63},[33,94250,89994],{"class":59},[33,94252,92812],{"class":3632},[33,94254,94255],{"class":59},"(() ",[33,94257,86362],{"class":63},[33,94259,17228],{"class":59},[33,94261,94262],{"class":35,"line":18357},[33,94263,94264],{"class":87},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[33,94266,94267],{"class":35,"line":18368},[33,94268,94269],{"class":87},"      \u002F\u002F 控制台输出当前的时间\n",[33,94271,94272,94275],{"class":35,"line":18391},[33,94273,94274],{"class":87},"      \u002F\u002F console.log(video.currentTime)",[33,94276,94277],{"class":87},"  \u002F\u002F获得当前的视频时间\n",[33,94279,94280],{"class":35,"line":18413},[33,94281,94282],{"class":87},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[33,94284,94285,94287,94289,94291,94294],{"class":35,"line":18418},[33,94286,76324],{"class":59},[33,94288,73295],{"class":3632},[33,94290,109],{"class":59},[33,94292,94293],{"class":117},"'currentTime'",[33,94295,94296],{"class":59},", video.currentTime)\n",[33,94298,94299,94301,94303],{"class":35,"line":18424},[33,94300,56179],{"class":59},[33,94302,8070],{"class":39},[33,94304,157],{"class":59},[33,94306,94307],{"class":35,"line":18438},[33,94308,94309],{"class":87},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[33,94311,94312,94315,94318,94320,94323,94325],{"class":35,"line":18451},[33,94313,94314],{"class":59},"    video.",[33,94316,94317],{"class":3632},"onloadeddata",[33,94319,15222],{"class":63},[33,94321,94322],{"class":59}," () ",[33,94324,86362],{"class":63},[33,94326,17228],{"class":59},[33,94328,94329],{"class":35,"line":18456},[33,94330,61655],{"class":87},[33,94332,94333],{"class":35,"line":18470},[33,94334,94335],{"class":87},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[33,94337,94338,94341,94343,94346,94348,94350,94352,94354,94356],{"class":35,"line":18475},[33,94339,94340],{"class":59},"      video.currentTime ",[33,94342,64],{"class":63},[33,94344,94345],{"class":59}," localStorage.",[33,94347,73326],{"class":3632},[33,94349,109],{"class":59},[33,94351,94293],{"class":117},[33,94353,15372],{"class":59},[33,94355,72998],{"class":63},[33,94357,48978],{"class":39},[33,94359,94360],{"class":35,"line":18481},[33,94361,3855],{"class":59},[33,94363,94364,94366,94368],{"class":35,"line":18486},[33,94365,54062],{"class":59},[33,94367,53458],{"class":52945},[33,94369,52952],{"class":59},[33,94371,94372,94374,94376],{"class":35,"line":18500},[33,94373,53430],{"class":59},[33,94375,53445],{"class":52945},[33,94377,52952],{"class":59},[33,94379,94380],{"class":35,"line":18505},[33,94381,127],{"emptyLinePlaceholder":126},[33,94383,94384,94386,94388],{"class":35,"line":18510},[33,94385,53430],{"class":59},[33,94387,52280],{"class":52945},[33,94389,52952],{"class":59},[1729,94391,94392],{},"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":43,"depth":43,"links":94394},[94395,94400,94404,94405,94406,94411,94416,94417,94418,94419,94426,94431,94432,94442,94446,94447,94451],{"id":78332,"depth":43,"text":78333,"children":94396},[94397,94398,94399],{"id":78336,"depth":130,"text":78337},{"id":78361,"depth":130,"text":78362},{"id":78373,"depth":130,"text":78374},{"id":78385,"depth":43,"text":78386,"children":94401},[94402,94403],{"id":78389,"depth":130,"text":78390},{"id":78404,"depth":130,"text":78405},{"id":78456,"depth":43,"text":78457},{"id":78500,"depth":43,"text":78501},{"id":78517,"depth":43,"text":78518,"children":94407},[94408,94409,94410],{"id":78521,"depth":130,"text":78522},{"id":78534,"depth":130,"text":78535},{"id":78639,"depth":130,"text":78640},{"id":78928,"depth":43,"text":78929,"children":94412},[94413,94414,94415],{"id":78932,"depth":130,"text":78933},{"id":79375,"depth":130,"text":79376},{"id":79786,"depth":130,"text":79787},{"id":79849,"depth":43,"text":79850},{"id":79928,"depth":43,"text":79929},{"id":80021,"depth":43,"text":80022},{"id":81865,"depth":43,"text":81866,"children":94420},[94421,94422,94423,94424,94425],{"id":81869,"depth":130,"text":81870},{"id":81881,"depth":130,"text":81882},{"id":82100,"depth":130,"text":82101},{"id":82118,"depth":130,"text":82119},{"id":82178,"depth":130,"text":82179},{"id":86446,"depth":43,"text":86447,"children":94427},[94428,94429,94430],{"id":86450,"depth":130,"text":86451},{"id":86468,"depth":130,"text":86469},{"id":86494,"depth":130,"text":86495},{"id":86503,"depth":43,"text":86504},{"id":86525,"depth":43,"text":86526,"children":94433},[94434,94435,94436,94437,94438,94439,94440,94441],{"id":86529,"depth":130,"text":86530},{"id":86790,"depth":130,"text":86791},{"id":86976,"depth":130,"text":86977},{"id":87343,"depth":130,"text":87344},{"id":87459,"depth":130,"text":87460},{"id":87495,"depth":130,"text":87496},{"id":87542,"depth":130,"text":87543},{"id":87576,"depth":130,"text":87577},{"id":88939,"depth":43,"text":88940,"children":94443},[94444,94445],{"id":88943,"depth":130,"text":88944},{"id":88980,"depth":130,"text":88981},{"id":90334,"depth":43,"text":90335},{"id":90705,"depth":43,"text":90706,"children":94448},[94449,94450],{"id":90709,"depth":130,"text":90710},{"id":90743,"depth":130,"text":90744},{"id":91472,"depth":43,"text":91473,"children":94452},[94453,94454,94455,94456],{"id":91476,"depth":130,"text":91477},{"id":92434,"depth":130,"text":92435},{"id":93376,"depth":130,"text":93377},{"id":93450,"depth":130,"text":93451},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78321,"description":1751},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94463,"title":94464,"body":94465,"description":94476,"extension":1752,"meta":94477,"navigation":126,"path":94479,"seo":94480,"stem":94481,"__hash__":94482},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94466,"toc":94474},[94467],[19,94468,94469,94470],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2057,94471,94472],{"href":94472,"rel":94473},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25520],{"title":28,"searchDepth":43,"depth":43,"links":94475},[],"三件套第三套学习",{"category":94478},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94464,"description":94476},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94484,"title":94485,"body":94486,"description":1751,"extension":1752,"meta":94591,"navigation":126,"path":94592,"seo":94593,"stem":94594,"__hash__":94595},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94487,"toc":94586},[94488,94495,94498,94501,94504,94508,94517,94520,94523,94527,94536,94539,94543,94546,94566,94569,94583],[19,94489,94490],{},[2057,94491,94494],{"href":94492,"rel":94493},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25520],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94496,94485],{"id":94497},"_1安装",[19,94499,94500],{},"numpy是科学计算基础库,底层是C语言",[19,94502,94503],{},"三种方式：",[14,94505,94507],{"id":94506},"_11-通过pip安装","1.1 通过pip安装",[23,94509,94511],{"className":25,"code":94510,"language":27,"meta":28,"style":28},"pip install numpy\n",[30,94512,94513],{"__ignoreMap":28},[33,94514,94515],{"class":35,"line":36},[33,94516,94510],{"class":59},[19,94518,94519],{},"首选方式，自动处理依赖项",[19,94521,94522],{},"在提示系统命令符中使用cmd",[14,94524,94526],{"id":94525},"_12-通过anaconda安装","1.2 通过Anaconda安装",[23,94528,94530],{"className":25,"code":94529,"language":27,"meta":28,"style":28},"conda install numpy\n",[30,94531,94532],{"__ignoreMap":28},[33,94533,94534],{"class":35,"line":36},[33,94535,94529],{"class":59},[19,94537,94538],{},"自动解决环境依赖",[14,94540,94542],{"id":94541},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94544,94545],{},"对于Debian\u002FUbuntu",[23,94547,94549],{"className":25,"code":94548,"language":27,"meta":28,"style":28},"sudo apt-get install python3-numpy\n",[30,94550,94551],{"__ignoreMap":28},[33,94552,94553,94556,94558,94561,94563],{"class":35,"line":36},[33,94554,94555],{"class":59},"sudo apt",[33,94557,2349],{"class":63},[33,94559,94560],{"class":59},"get install python3",[33,94562,2349],{"class":63},[33,94564,94565],{"class":59},"numpy\n",[19,94567,94568],{},"对于Fedora:",[23,94570,94572],{"className":25,"code":94571,"language":27,"meta":28,"style":28},"sudo dnf install python3-numpy\n",[30,94573,94574],{"__ignoreMap":28},[33,94575,94576,94579,94581],{"class":35,"line":36},[33,94577,94578],{"class":59},"sudo dnf install python3",[33,94580,2349],{"class":63},[33,94582,94565],{"class":59},[1729,94584,94585],{},"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":43,"depth":43,"links":94587},[94588,94589,94590],{"id":94506,"depth":43,"text":94507},{"id":94525,"depth":43,"text":94526},{"id":94541,"depth":43,"text":94542},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94485,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94597,"title":94598,"body":94599,"description":1751,"extension":1752,"meta":94712,"navigation":126,"path":94713,"seo":94714,"stem":94715,"__hash__":94716},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94600,"toc":94710},[94601,94604,94607,94610,94613,94616,94619,94622,94625,94628,94704,94707],[10,94602,94598],{"id":94603},"_10算数函数",[19,94605,94606],{},"加减乘除运算跟python基础语法没区别",[19,94608,94609],{},"除了python那种方法外还可以使用函数",[19,94611,94612],{},"加：np.add(a,b)",[19,94614,94615],{},"减：np.subtract(a,b)",[19,94617,94618],{},"乘：np.multiply(a,b)",[19,94620,94621],{},"除：np.divide(a,b) == a\u002Fb",[19,94623,94624],{},"取余：np.mod(a,b) == a%b",[19,94626,94627],{},"必须会的用法：",[23,94629,94631],{"className":25,"code":94630,"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,94632,94633,94655,94676,94686,94699],{"__ignoreMap":28},[33,94634,94635,94637,94639,94642,94644,94647,94649,94651,94653],{"class":35,"line":36},[33,94636,2057],{"class":59},[33,94638,64],{"class":63},[33,94640,94641],{"class":59},"np.arange(",[33,94643,2238],{"class":39},[33,94645,94646],{"class":59},").reshape(",[33,94648,1891],{"class":39},[33,94650,2196],{"class":59},[33,94652,1891],{"class":39},[33,94654,157],{"class":59},[33,94656,94657,94659,94661,94664,94666,94668,94670,94672,94674],{"class":35,"line":43},[33,94658,2081],{"class":59},[33,94660,64],{"class":63},[33,94662,94663],{"class":59},"np.array([",[33,94665,2264],{"class":39},[33,94667,2196],{"class":59},[33,94669,2264],{"class":39},[33,94671,2196],{"class":59},[33,94673,2264],{"class":39},[33,94675,6318],{"class":59},[33,94677,94678,94681,94683],{"class":35,"line":130},[33,94679,94680],{"class":59},"result",[33,94682,64],{"class":63},[33,94684,94685],{"class":59},"np.empty_like(a)\n",[33,94687,94688,94691,94694,94696],{"class":35,"line":146},[33,94689,94690],{"class":59},"np.add(a,b,",[33,94692,94693],{"class":6877},"out",[33,94695,64],{"class":63},[33,94697,94698],{"class":59},"result)\n",[33,94700,94701],{"class":35,"line":267},[33,94702,94703],{"class":59},"result\n",[19,94705,94706],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1729,94708,94709],{},"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":43,"depth":43,"links":94711},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94598,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94718,"title":94719,"body":94720,"description":1751,"extension":1752,"meta":95482,"navigation":126,"path":95483,"seo":95484,"stem":95485,"__hash__":95486},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94721,"toc":95469},[94722,94725,94728,94731,94735,94774,94778,94822,94882,94886,94889,94928,94931,94976,94980,95016,95020,95089,95093,95157,95161,95164,95167,95170,95173,95209,95213,95253,95257,95329,95332,95336,95399,95403,95466],[10,94723,94719],{"id":94724},"_11统计函数",[19,94726,94727],{},"sum max min mean",[19,94729,94730],{},"这些有axis参数，可以指定方向",[14,94732,94734],{"id":94733},"_111-sum求和函数","11.1 sum()求和函数",[23,94736,94738],{"className":25,"code":94737,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[30,94739,94740,94745,94766],{"__ignoreMap":28},[33,94741,94742],{"class":35,"line":36},[33,94743,94744],{"class":87},"#创建一维数组\n",[33,94746,94747,94749,94751,94754,94756,94758,94760,94762,94764],{"class":35,"line":43},[33,94748,2057],{"class":59},[33,94750,64],{"class":63},[33,94752,94753],{"class":59},"np.random.randint(",[33,94755,2036],{"class":39},[33,94757,2196],{"class":59},[33,94759,2129],{"class":39},[33,94761,2196],{"class":59},[33,94763,2517],{"class":39},[33,94765,157],{"class":59},[33,94767,94768,94771],{"class":35,"line":130},[33,94769,94770],{"class":59},"np.sum(a)",[33,94772,94773],{"class":87},"#求和\n",[14,94775,94777],{"id":94776},"_112-max求最大值函数","11.2 max()求最大值函数",[23,94779,94781],{"className":25,"code":94780,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[30,94782,94783,94787,94807,94812,94817],{"__ignoreMap":28},[33,94784,94785],{"class":35,"line":36},[33,94786,94744],{"class":87},[33,94788,94789,94791,94793,94795,94797,94799,94801,94803,94805],{"class":35,"line":43},[33,94790,2057],{"class":59},[33,94792,64],{"class":63},[33,94794,94753],{"class":59},[33,94796,2036],{"class":39},[33,94798,2196],{"class":59},[33,94800,2129],{"class":39},[33,94802,2196],{"class":59},[33,94804,2517],{"class":39},[33,94806,157],{"class":59},[33,94808,94809],{"class":35,"line":130},[33,94810,94811],{"class":59},"np.max(a)\n",[33,94813,94814],{"class":35,"line":146},[33,94815,94816],{"class":87},"#最大索引(求最大元素的索引)arg\n",[33,94818,94819],{"class":35,"line":267},[33,94820,94821],{"class":59},"np.argmax(a)\n",[23,94823,94825],{"className":25,"code":94824,"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,94826,94827,94848,94868,94872],{"__ignoreMap":28},[33,94828,94829,94831,94833,94836,94838,94840,94842,94844,94846],{"class":35,"line":36},[33,94830,12577],{"class":59},[33,94832,64],{"class":63},[33,94834,94835],{"class":59}," np.array([",[33,94837,2036],{"class":39},[33,94839,14093],{"class":59},[33,94841,2137],{"class":39},[33,94843,14093],{"class":59},[33,94845,1891],{"class":39},[33,94847,6318],{"class":59},[33,94849,94850,94852,94854,94856,94858,94860,94862,94864,94866],{"class":35,"line":43},[33,94851,12603],{"class":59},[33,94853,64],{"class":63},[33,94855,94835],{"class":59},[33,94857,1891],{"class":39},[33,94859,14093],{"class":59},[33,94861,1897],{"class":39},[33,94863,14093],{"class":59},[33,94865,2111],{"class":39},[33,94867,6318],{"class":59},[33,94869,94870],{"class":35,"line":130},[33,94871,127],{"emptyLinePlaceholder":126},[33,94873,94874,94876,94879],{"class":35,"line":146},[33,94875,72],{"class":39},[33,94877,94878],{"class":59},"(np.maximum(a, b))   ",[33,94880,94881],{"class":87},"# [3 5 4]，每个位置上取较大值\n",[14,94883,94885],{"id":94884},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94887,94888],{},"①一维数组：",[23,94890,94892],{"className":25,"code":94891,"language":27,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[30,94893,94894,94898,94918,94923],{"__ignoreMap":28},[33,94895,94896],{"class":35,"line":36},[33,94897,94744],{"class":87},[33,94899,94900,94902,94904,94906,94908,94910,94912,94914,94916],{"class":35,"line":43},[33,94901,2057],{"class":59},[33,94903,64],{"class":63},[33,94905,94753],{"class":59},[33,94907,2036],{"class":39},[33,94909,2196],{"class":59},[33,94911,2129],{"class":39},[33,94913,2196],{"class":59},[33,94915,2517],{"class":39},[33,94917,157],{"class":59},[33,94919,94920],{"class":35,"line":130},[33,94921,94922],{"class":87},"#求平均值\n",[33,94924,94925],{"class":35,"line":146},[33,94926,94927],{"class":59},"np.mean(a)\n",[19,94929,94930],{},"②二维数组",[23,94932,94934],{"className":25,"code":94933,"language":27,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[30,94935,94936,94941,94966,94971],{"__ignoreMap":28},[33,94937,94938],{"class":35,"line":36},[33,94939,94940],{"class":87},"#二维数组\n",[33,94942,94943,94946,94948,94950,94952,94954,94956,94958,94960,94962,94964],{"class":35,"line":43},[33,94944,94945],{"class":59},"aa",[33,94947,64],{"class":63},[33,94949,94641],{"class":59},[33,94951,2036],{"class":39},[33,94953,2196],{"class":59},[33,94955,2340],{"class":39},[33,94957,94646],{"class":59},[33,94959,1891],{"class":39},[33,94961,2196],{"class":59},[33,94963,2111],{"class":39},[33,94965,157],{"class":59},[33,94967,94968],{"class":35,"line":130},[33,94969,94970],{"class":87},"#对数组中的所有数求平均\n",[33,94972,94973],{"class":35,"line":146},[33,94974,94975],{"class":59},"np.mean(aa)\n",[14,94977,94979],{"id":94978},"_114-median求中位数函数","11.4 median()求中位数函数",[23,94981,94983],{"className":25,"code":94982,"language":27,"meta":28,"style":28},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[30,94984,94985,94990,95006,95011],{"__ignoreMap":28},[33,94986,94987],{"class":35,"line":36},[33,94988,94989],{"class":87},"#求中位数\n",[33,94991,94992,94994,94996,94998,95000,95002,95004],{"class":35,"line":43},[33,94993,2081],{"class":59},[33,94995,64],{"class":63},[33,94997,94641],{"class":59},[33,94999,2036],{"class":39},[33,95001,2196],{"class":59},[33,95003,2264],{"class":39},[33,95005,157],{"class":59},[33,95007,95008],{"class":35,"line":130},[33,95009,95010],{"class":59},"np.median(b)\n",[33,95012,95013],{"class":35,"line":146},[33,95014,95015],{"class":87},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95017,95019],{"id":95018},"_115-power求幂运算函数","11.5 power()求幂运算函数",[23,95021,95023],{"className":25,"code":95022,"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,95024,95025,95041,95046,95051,95060,95065,95074],{"__ignoreMap":28},[33,95026,95027,95029,95031,95033,95035,95037,95039],{"class":35,"line":36},[33,95028,2081],{"class":59},[33,95030,64],{"class":63},[33,95032,94641],{"class":59},[33,95034,2036],{"class":39},[33,95036,2196],{"class":59},[33,95038,2264],{"class":39},[33,95040,157],{"class":59},[33,95042,95043],{"class":35,"line":43},[33,95044,95045],{"class":87},"#幂运算\n",[33,95047,95048],{"class":35,"line":130},[33,95049,95050],{"class":87},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[33,95052,95053,95056,95058],{"class":35,"line":146},[33,95054,95055],{"class":59},"np.power(b,",[33,95057,1897],{"class":39},[33,95059,157],{"class":59},[33,95061,95062],{"class":35,"line":267},[33,95063,95064],{"class":87},"#或者以下代码，将数据存储起来\n",[33,95066,95067,95069,95071],{"class":35,"line":275},[33,95068,2662],{"class":59},[33,95070,64],{"class":63},[33,95072,95073],{"class":59},"np.empty_like(b)\n",[33,95075,95076,95078,95080,95082,95084,95086],{"class":35,"line":392},[33,95077,95055],{"class":59},[33,95079,1897],{"class":39},[33,95081,2196],{"class":59},[33,95083,94693],{"class":6877},[33,95085,64],{"class":63},[33,95087,95088],{"class":59},"y)\n",[14,95090,95092],{"id":95091},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[23,95094,95096],{"className":25,"code":95095,"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,95097,95098,95114,95119,95124,95128,95146],{"__ignoreMap":28},[33,95099,95100,95102,95104,95106,95108,95110,95112],{"class":35,"line":36},[33,95101,2081],{"class":59},[33,95103,64],{"class":63},[33,95105,94641],{"class":59},[33,95107,2036],{"class":39},[33,95109,2196],{"class":59},[33,95111,2264],{"class":39},[33,95113,157],{"class":59},[33,95115,95116],{"class":35,"line":43},[33,95117,95118],{"class":87},"#开方\n",[33,95120,95121],{"class":35,"line":130},[33,95122,95123],{"class":59},"np.sqrt(b)\n",[33,95125,95126],{"class":35,"line":146},[33,95127,95064],{"class":87},[33,95129,95130,95132,95134,95137,95140,95142,95144],{"class":35,"line":267},[33,95131,2662],{"class":59},[33,95133,64],{"class":63},[33,95135,95136],{"class":59},"np.empty_like(b,",[33,95138,95139],{"class":6877},"dtype",[33,95141,64],{"class":63},[33,95143,1863],{"class":39},[33,95145,157],{"class":59},[33,95147,95148,95151,95153,95155],{"class":35,"line":275},[33,95149,95150],{"class":59},"np.sqrt(b,",[33,95152,94693],{"class":6877},[33,95154,64],{"class":63},[33,95156,95088],{"class":59},[14,95158,95160],{"id":95159},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95162,95163],{},"对数组中的元素累计求和，可指定轴",[19,95165,95166],{},"#累计求和的意思是：",[19,95168,95169],{},"a = np.array([1, 2, 3, 4])",[19,95171,95172],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[23,95174,95176],{"className":25,"code":95175,"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,95177,95178,95194,95199,95204],{"__ignoreMap":28},[33,95179,95180,95182,95184,95186,95188,95190,95192],{"class":35,"line":36},[33,95181,2081],{"class":59},[33,95183,64],{"class":63},[33,95185,94641],{"class":59},[33,95187,2036],{"class":39},[33,95189,2196],{"class":59},[33,95191,2264],{"class":39},[33,95193,157],{"class":59},[33,95195,95196],{"class":35,"line":43},[33,95197,95198],{"class":59},"np.cumsum(b)\n",[33,95200,95201],{"class":35,"line":130},[33,95202,95203],{"class":87},"#结果：\n",[33,95205,95206],{"class":35,"line":146},[33,95207,95208],{"class":87},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95210,95212],{"id":95211},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[23,95214,95216],{"className":25,"code":95215,"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,95217,95218,95234,95239,95244,95248],{"__ignoreMap":28},[33,95219,95220,95222,95224,95226,95228,95230,95232],{"class":35,"line":36},[33,95221,2081],{"class":59},[33,95223,64],{"class":63},[33,95225,94641],{"class":59},[33,95227,2036],{"class":39},[33,95229,2196],{"class":59},[33,95231,2264],{"class":39},[33,95233,157],{"class":59},[33,95235,95236],{"class":35,"line":43},[33,95237,95238],{"class":87},"#对数组中的元素累计求积，可指定轴\n",[33,95240,95241],{"class":35,"line":130},[33,95242,95243],{"class":59},"np.cumprod(b)\n",[33,95245,95246],{"class":35,"line":146},[33,95247,95203],{"class":87},[33,95249,95250],{"class":35,"line":267},[33,95251,95252],{"class":87},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95254,95256],{"id":95255},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[23,95258,95260],{"className":25,"code":95259,"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,95261,95262,95267,95315,95320,95324],{"__ignoreMap":28},[33,95263,95264],{"class":35,"line":36},[33,95265,95266],{"class":87},"#删除数组中的重复数据，并对数据进行排序\n",[33,95268,95269,95271,95273,95275,95277,95279,95281,95283,95285,95287,95289,95291,95293,95295,95297,95299,95301,95303,95305,95307,95309,95311,95313],{"class":35,"line":43},[33,95270,2057],{"class":59},[33,95272,64],{"class":63},[33,95274,94663],{"class":59},[33,95276,2036],{"class":39},[33,95278,2196],{"class":59},[33,95280,1897],{"class":39},[33,95282,2196],{"class":59},[33,95284,1891],{"class":39},[33,95286,2196],{"class":59},[33,95288,2315],{"class":39},[33,95290,2196],{"class":59},[33,95292,1891],{"class":39},[33,95294,2196],{"class":59},[33,95296,2264],{"class":39},[33,95298,2196],{"class":59},[33,95300,2016],{"class":39},[33,95302,2196],{"class":59},[33,95304,2010],{"class":39},[33,95306,2196],{"class":59},[33,95308,2592],{"class":39},[33,95310,2196],{"class":59},[33,95312,2111],{"class":39},[33,95314,6318],{"class":59},[33,95316,95317],{"class":35,"line":130},[33,95318,95319],{"class":59},"np.unique(a)\n",[33,95321,95322],{"class":35,"line":146},[33,95323,95203],{"class":87},[33,95325,95326],{"class":35,"line":267},[33,95327,95328],{"class":87},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95330,95331],{},"升序形式排序",[14,95333,95335],{"id":95334},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[23,95337,95339],{"className":25,"code":95338,"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,95340,95341,95389,95394],{"__ignoreMap":28},[33,95342,95343,95345,95347,95349,95351,95353,95355,95357,95359,95361,95363,95365,95367,95369,95371,95373,95375,95377,95379,95381,95383,95385,95387],{"class":35,"line":36},[33,95344,2057],{"class":59},[33,95346,64],{"class":63},[33,95348,94663],{"class":59},[33,95350,2036],{"class":39},[33,95352,2196],{"class":59},[33,95354,1897],{"class":39},[33,95356,2196],{"class":59},[33,95358,1891],{"class":39},[33,95360,2196],{"class":59},[33,95362,2315],{"class":39},[33,95364,2196],{"class":59},[33,95366,1891],{"class":39},[33,95368,2196],{"class":59},[33,95370,2264],{"class":39},[33,95372,2196],{"class":59},[33,95374,2016],{"class":39},[33,95376,2196],{"class":59},[33,95378,2010],{"class":39},[33,95380,2196],{"class":59},[33,95382,2592],{"class":39},[33,95384,2196],{"class":59},[33,95386,2111],{"class":39},[33,95388,6318],{"class":59},[33,95390,95391],{"class":35,"line":43},[33,95392,95393],{"class":87},"#返回数组中非零元素的索引\n",[33,95395,95396],{"class":35,"line":130},[33,95397,95398],{"class":59},"np.nonzero(a)\n",[14,95400,95402],{"id":95401},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[23,95404,95406],{"className":25,"code":95405,"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,95407,95408,95456,95461],{"__ignoreMap":28},[33,95409,95410,95412,95414,95416,95418,95420,95422,95424,95426,95428,95430,95432,95434,95436,95438,95440,95442,95444,95446,95448,95450,95452,95454],{"class":35,"line":36},[33,95411,2057],{"class":59},[33,95413,64],{"class":63},[33,95415,94663],{"class":59},[33,95417,2036],{"class":39},[33,95419,2196],{"class":59},[33,95421,1897],{"class":39},[33,95423,2196],{"class":59},[33,95425,1891],{"class":39},[33,95427,2196],{"class":59},[33,95429,2315],{"class":39},[33,95431,2196],{"class":59},[33,95433,1891],{"class":39},[33,95435,2196],{"class":59},[33,95437,2264],{"class":39},[33,95439,2196],{"class":59},[33,95441,2016],{"class":39},[33,95443,2196],{"class":59},[33,95445,2010],{"class":39},[33,95447,2196],{"class":59},[33,95449,2592],{"class":39},[33,95451,2196],{"class":59},[33,95453,2111],{"class":39},[33,95455,6318],{"class":59},[33,95457,95458],{"class":35,"line":43},[33,95459,95460],{"class":87},"#计算一组数中最大值与最小值的差，可指定轴\n",[33,95462,95463],{"class":35,"line":130},[33,95464,95465],{"class":59},"np.ptp(a)\n",[1729,95467,95468],{},"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":43,"depth":43,"links":95470},[95471,95472,95473,95474,95475,95476,95477,95478,95479,95480,95481],{"id":94733,"depth":43,"text":94734},{"id":94776,"depth":43,"text":94777},{"id":94884,"depth":43,"text":94885},{"id":94978,"depth":43,"text":94979},{"id":95018,"depth":43,"text":95019},{"id":95091,"depth":43,"text":95092},{"id":95159,"depth":43,"text":95160},{"id":95211,"depth":43,"text":95212},{"id":95255,"depth":43,"text":95256},{"id":95334,"depth":43,"text":95335},{"id":95401,"depth":43,"text":95402},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94719,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95488,"title":95489,"body":95490,"description":1751,"extension":1752,"meta":96145,"navigation":126,"path":96146,"seo":96147,"stem":96148,"__hash__":96149},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95491,"toc":96133},[95492,95495,95499,95502,95718,95722,95725,95934,95938,96004,96009,96013,96016,96019,96057,96061,96064,96069,96073,96076,96079,96084,96088,96091,96095,96098,96101,96106,96110,96113,96116,96121,96125,96130],[10,95493,95489],{"id":95494},"_12其他常用函数",[14,95496,95498],{"id":95497},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95500,95501],{},"将数组的数据按照行列复制扩展",[23,95503,95505],{"className":25,"code":95504,"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,95506,95507,95523,95532,95536,95541,95546,95559,95563,95568,95573,95578,95582,95587,95611,95623,95627,95631,95636,95641,95646,95651,95655,95668,95672,95676,95681,95686,95691,95696,95701,95705,95709,95714],{"__ignoreMap":28},[33,95508,95509,95511,95513,95515,95517,95519,95521],{"class":35,"line":36},[33,95510,2057],{"class":59},[33,95512,64],{"class":63},[33,95514,94641],{"class":59},[33,95516,2036],{"class":39},[33,95518,2196],{"class":59},[33,95520,2137],{"class":39},[33,95522,157],{"class":59},[33,95524,95525,95528,95530],{"class":35,"line":43},[33,95526,95527],{"class":59},"np.tile(a,",[33,95529,1897],{"class":39},[33,95531,157],{"class":59},[33,95533,95534],{"class":35,"line":130},[33,95535,95203],{"class":87},[33,95537,95538],{"class":35,"line":146},[33,95539,95540],{"class":87},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[33,95542,95543],{"class":35,"line":267},[33,95544,95545],{"class":87},"#行复制两次，列复制三次\n",[33,95547,95548,95551,95553,95555,95557],{"class":35,"line":275},[33,95549,95550],{"class":59},"np.tile(a,(",[33,95552,1897],{"class":39},[33,95554,2196],{"class":59},[33,95556,1891],{"class":39},[33,95558,121],{"class":59},[33,95560,95561],{"class":35,"line":392},[33,95562,95203],{"class":87},[33,95564,95565],{"class":35,"line":406},[33,95566,95567],{"class":117},"'''\n",[33,95569,95570],{"class":35,"line":418},[33,95571,95572],{"class":117},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[33,95574,95575],{"class":35,"line":425},[33,95576,95577],{"class":117},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[33,95579,95580],{"class":35,"line":1147},[33,95581,95567],{"class":117},[33,95583,95584],{"class":35,"line":1329},[33,95585,95586],{"class":87},"#创建二维数组\n",[33,95588,95589,95591,95593,95595,95597,95599,95601,95603,95605,95607,95609],{"class":35,"line":1341},[33,95590,94945],{"class":59},[33,95592,64],{"class":63},[33,95594,94641],{"class":59},[33,95596,2036],{"class":39},[33,95598,2196],{"class":59},[33,95600,2340],{"class":39},[33,95602,94646],{"class":59},[33,95604,2111],{"class":39},[33,95606,2196],{"class":59},[33,95608,1891],{"class":39},[33,95610,157],{"class":59},[33,95612,95613,95616,95618,95620],{"class":35,"line":1348},[33,95614,95615],{"class":59},"np.tile(aa,",[33,95617,1897],{"class":39},[33,95619,2247],{"class":59},[33,95621,95622],{"class":87},"#一个数的时候就是行\n",[33,95624,95625],{"class":35,"line":1529},[33,95626,95203],{"class":87},[33,95628,95629],{"class":35,"line":1546},[33,95630,95567],{"class":117},[33,95632,95633],{"class":35,"line":1551},[33,95634,95635],{"class":117},"array([[ 1,  2,  3,  1,  2,  3],\n",[33,95637,95638],{"class":35,"line":1566},[33,95639,95640],{"class":117},"       [ 4,  5,  6,  4,  5,  6],\n",[33,95642,95643],{"class":35,"line":1578},[33,95644,95645],{"class":117},"       [ 7,  8,  9,  7,  8,  9],\n",[33,95647,95648],{"class":35,"line":1583},[33,95649,95650],{"class":117},"       [10, 11, 12, 10, 11, 12]])\n",[33,95652,95653],{"class":35,"line":3369},[33,95654,95567],{"class":117},[33,95656,95657,95660,95662,95664,95666],{"class":35,"line":3396},[33,95658,95659],{"class":59},"np.tile(aa,(",[33,95661,1897],{"class":39},[33,95663,2196],{"class":59},[33,95665,1891],{"class":39},[33,95667,121],{"class":59},[33,95669,95670],{"class":35,"line":3401},[33,95671,95203],{"class":87},[33,95673,95674],{"class":35,"line":3418},[33,95675,95567],{"class":117},[33,95677,95678],{"class":35,"line":3423},[33,95679,95680],{"class":117},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,95682,95683],{"class":35,"line":3428},[33,95684,95685],{"class":117},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[33,95687,95688],{"class":35,"line":3433},[33,95689,95690],{"class":117},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[33,95692,95693],{"class":35,"line":3447},[33,95694,95695],{"class":117},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[33,95697,95698],{"class":35,"line":3452},[33,95699,95700],{"class":117},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,95702,95703],{"class":35,"line":4243},[33,95704,95685],{"class":117},[33,95706,95707],{"class":35,"line":4257},[33,95708,95690],{"class":117},[33,95710,95711],{"class":35,"line":4265},[33,95712,95713],{"class":117},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[33,95715,95716],{"class":35,"line":4270},[33,95717,95567],{"class":117},[14,95719,95721],{"id":95720},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95723,95724],{},"repeat()将数组中的每个元素重复若干次",[23,95726,95728],{"className":25,"code":95727,"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,95729,95730,95746,95755,95759,95764,95788,95793,95802,95806,95811,95815,95820,95836,95840,95844,95849,95854,95859,95863,95868,95872,95877,95882,95886,95902,95906,95910,95915,95920,95925,95930],{"__ignoreMap":28},[33,95731,95732,95734,95736,95738,95740,95742,95744],{"class":35,"line":36},[33,95733,2057],{"class":59},[33,95735,64],{"class":63},[33,95737,94641],{"class":59},[33,95739,2036],{"class":39},[33,95741,2196],{"class":59},[33,95743,2137],{"class":39},[33,95745,157],{"class":59},[33,95747,95748,95751,95753],{"class":35,"line":43},[33,95749,95750],{"class":59},"np.repeat(a,",[33,95752,1891],{"class":39},[33,95754,157],{"class":59},[33,95756,95757],{"class":35,"line":130},[33,95758,95203],{"class":87},[33,95760,95761],{"class":35,"line":146},[33,95762,95763],{"class":87},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[33,95765,95766,95768,95770,95772,95774,95776,95778,95780,95782,95784,95786],{"class":35,"line":267},[33,95767,94945],{"class":59},[33,95769,64],{"class":63},[33,95771,94641],{"class":59},[33,95773,2036],{"class":39},[33,95775,2196],{"class":59},[33,95777,2340],{"class":39},[33,95779,94646],{"class":59},[33,95781,2111],{"class":39},[33,95783,2196],{"class":59},[33,95785,1891],{"class":39},[33,95787,157],{"class":59},[33,95789,95790],{"class":35,"line":275},[33,95791,95792],{"class":87},"#这个重复之后二维变成一维\n",[33,95794,95795,95798,95800],{"class":35,"line":392},[33,95796,95797],{"class":59},"np.repeat(aa,",[33,95799,1897],{"class":39},[33,95801,157],{"class":59},[33,95803,95804],{"class":35,"line":406},[33,95805,95567],{"class":117},[33,95807,95808],{"class":35,"line":418},[33,95809,95810],{"class":117},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[33,95812,95813],{"class":35,"line":425},[33,95814,95567],{"class":117},[33,95816,95817],{"class":35,"line":1147},[33,95818,95819],{"class":87},"#指定axis\n",[33,95821,95822,95824,95826,95828,95830,95832,95834],{"class":35,"line":1329},[33,95823,95797],{"class":59},[33,95825,1897],{"class":39},[33,95827,2196],{"class":59},[33,95829,49159],{"class":6877},[33,95831,64],{"class":63},[33,95833,2010],{"class":39},[33,95835,157],{"class":59},[33,95837,95838],{"class":35,"line":1341},[33,95839,95203],{"class":87},[33,95841,95842],{"class":35,"line":1348},[33,95843,95567],{"class":117},[33,95845,95846],{"class":35,"line":1529},[33,95847,95848],{"class":117},"array([[ 1,  2,  3],\n",[33,95850,95851],{"class":35,"line":1546},[33,95852,95853],{"class":117},"       [ 1,  2,  3],\n",[33,95855,95856],{"class":35,"line":1551},[33,95857,95858],{"class":117},"       [ 4,  5,  6],\n",[33,95860,95861],{"class":35,"line":1566},[33,95862,95858],{"class":117},[33,95864,95865],{"class":35,"line":1578},[33,95866,95867],{"class":117},"       [ 7,  8,  9],\n",[33,95869,95870],{"class":35,"line":1583},[33,95871,95867],{"class":117},[33,95873,95874],{"class":35,"line":3369},[33,95875,95876],{"class":117},"       [10, 11, 12],\n",[33,95878,95879],{"class":35,"line":3396},[33,95880,95881],{"class":117},"       [10, 11, 12]])\n",[33,95883,95884],{"class":35,"line":3401},[33,95885,95567],{"class":117},[33,95887,95888,95890,95892,95894,95896,95898,95900],{"class":35,"line":3418},[33,95889,95797],{"class":59},[33,95891,1897],{"class":39},[33,95893,2196],{"class":59},[33,95895,49159],{"class":6877},[33,95897,64],{"class":63},[33,95899,2036],{"class":39},[33,95901,157],{"class":59},[33,95903,95904],{"class":35,"line":3423},[33,95905,95203],{"class":87},[33,95907,95908],{"class":35,"line":3428},[33,95909,95567],{"class":117},[33,95911,95912],{"class":35,"line":3433},[33,95913,95914],{"class":117},"array([[ 1,  1,  2,  2,  3,  3],\n",[33,95916,95917],{"class":35,"line":3447},[33,95918,95919],{"class":117},"       [ 4,  4,  5,  5,  6,  6],\n",[33,95921,95922],{"class":35,"line":3452},[33,95923,95924],{"class":117},"       [ 7,  7,  8,  8,  9,  9],\n",[33,95926,95927],{"class":35,"line":4243},[33,95928,95929],{"class":117},"       [10, 10, 11, 11, 12, 12]])\n",[33,95931,95932],{"class":35,"line":4257},[33,95933,95567],{"class":117},[14,95935,95937],{"id":95936},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[23,95939,95941],{"className":25,"code":95940,"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,95942,95943,95959,95964,95976,95980,95985,95995,95999],{"__ignoreMap":28},[33,95944,95945,95947,95949,95951,95953,95955,95957],{"class":35,"line":36},[33,95946,2057],{"class":59},[33,95948,64],{"class":63},[33,95950,94641],{"class":59},[33,95952,2036],{"class":39},[33,95954,2196],{"class":59},[33,95956,2137],{"class":39},[33,95958,157],{"class":59},[33,95960,95961],{"class":35,"line":43},[33,95962,95963],{"class":87},"#array([，2，3，4])\n",[33,95965,95966,95969,95971,95973],{"class":35,"line":130},[33,95967,95968],{"class":59},"np.roll(a,",[33,95970,1897],{"class":39},[33,95972,2247],{"class":59},[33,95974,95975],{"class":87},"#传正数向后调多少位，传负数向前调多少位\n",[33,95977,95978],{"class":35,"line":146},[33,95979,95203],{"class":87},[33,95981,95982],{"class":35,"line":267},[33,95983,95984],{"class":87},"#array([3, 4, 1, 2])\n",[33,95986,95987,95989,95991,95993],{"class":35,"line":275},[33,95988,95968],{"class":59},[33,95990,2349],{"class":63},[33,95992,2036],{"class":39},[33,95994,157],{"class":59},[33,95996,95997],{"class":35,"line":392},[33,95998,95203],{"class":87},[33,96000,96001],{"class":35,"line":406},[33,96002,96003],{"class":87},"#array([2, 3, 4, 1])\n",[19,96005,96006],{},[3145,96007],{"alt":28,"src":96008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96010,96012],{"id":96011},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96014,96015],{},"resize()重新调整数组的大小",[19,96017,96018],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[23,96020,96022],{"className":25,"code":96021,"language":27,"meta":28,"style":28},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[30,96023,96024,96029,96042],{"__ignoreMap":28},[33,96025,96026],{"class":35,"line":36},[33,96027,96028],{"class":87},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[33,96030,96031,96034,96036,96038,96040],{"class":35,"line":43},[33,96032,96033],{"class":59},"np.resize(aa,(",[33,96035,1897],{"class":39},[33,96037,2196],{"class":59},[33,96039,2162],{"class":39},[33,96041,121],{"class":59},[33,96043,96044,96046,96048,96050,96052,96054],{"class":35,"line":130},[33,96045,96033],{"class":59},[33,96047,1897],{"class":39},[33,96049,2196],{"class":59},[33,96051,2238],{"class":39},[33,96053,84411],{"class":59},[33,96055,96056],{"class":87},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96058,96060],{"id":96059},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96062,96063],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96065,96066],{},[3145,96067],{"alt":28,"src":96068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96070,96072],{"id":96071},"_126-保存加载文件","12.6 保存加载文件",[19,96074,96075],{},"savetxt():将数据保存到txt文件中",[19,96077,96078],{},"loadtxt():从文件加载数据",[19,96080,96081],{},[3145,96082],{"alt":28,"src":96083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96085,96087],{"id":96086},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96089,96090],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96092,96094],{"id":96093},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96096,96097],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96099,96100],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96102,96103],{},[3145,96104],{"alt":28,"src":96105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96107,96109],{"id":96108},"_129-where语句","12.9 where语句",[19,96111,96112],{},"np.where(条件,x,y)",[19,96114,96115],{},"如果条件为True,对应值为x,否则对应值为y",[19,96117,96118],{},[3145,96119],{"alt":28,"src":96120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96122,96124],{"id":96123},"_1210-dot矩阵","12.10 dot()矩阵",[19,96126,96127],{},[3145,96128],{"alt":28,"src":96129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1729,96131,96132],{},"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":43,"depth":43,"links":96134},[96135,96136,96137,96138,96139,96140,96141,96142,96143,96144],{"id":95497,"depth":43,"text":95498},{"id":95720,"depth":43,"text":95721},{"id":95936,"depth":43,"text":95937},{"id":96011,"depth":43,"text":96012},{"id":96059,"depth":43,"text":96060},{"id":96071,"depth":43,"text":96072},{"id":96086,"depth":43,"text":96087},{"id":96093,"depth":43,"text":96094},{"id":96108,"depth":43,"text":96109},{"id":96123,"depth":43,"text":96124},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95489,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96151,"title":96152,"body":96153,"description":1751,"extension":1752,"meta":96506,"navigation":126,"path":96507,"seo":96508,"stem":96509,"__hash__":96510},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96154,"toc":96504},[96155,96158,96161,96164,96167,96170,96235,96237,96501],[10,96156,96152],{"id":96157},"_13数组排序",[19,96159,96160],{},"排序主要用到的方法是np.sort和np.argsort",[19,96162,96163],{},"其中np.sort()对数组直接排序",[19,96165,96166],{},"而np.argsort()是返回排序后的原始索引",[19,96168,96169],{},"①一维数组",[23,96171,96173],{"className":25,"code":96172,"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,96174,96175,96179,96219,96227],{"__ignoreMap":28},[33,96176,96177],{"class":35,"line":36},[33,96178,94744],{"class":87},[33,96180,96181,96183,96185,96187,96189,96191,96193,96195,96197,96199,96201,96203,96205,96207,96209,96211,96213,96215,96217],{"class":35,"line":43},[33,96182,2057],{"class":59},[33,96184,64],{"class":63},[33,96186,94663],{"class":59},[33,96188,1891],{"class":39},[33,96190,2196],{"class":59},[33,96192,2315],{"class":39},[33,96194,2196],{"class":59},[33,96196,2213],{"class":39},[33,96198,2196],{"class":59},[33,96200,2592],{"class":39},[33,96202,2196],{"class":59},[33,96204,2097],{"class":39},[33,96206,2196],{"class":59},[33,96208,2710],{"class":39},[33,96210,2196],{"class":59},[33,96212,2162],{"class":39},[33,96214,2196],{"class":59},[33,96216,2264],{"class":39},[33,96218,6318],{"class":59},[33,96220,96221,96224],{"class":35,"line":130},[33,96222,96223],{"class":59},"np.sort(a)",[33,96225,96226],{"class":87},"#升序排序\n",[33,96228,96229,96232],{"class":35,"line":146},[33,96230,96231],{"class":59},"np.argsort(a)",[33,96233,96234],{"class":87},"#按照元素大小来索引排序\n",[19,96236,94930],{},[23,96238,96240],{"className":25,"code":96239,"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,96241,96242,96254,96280,96285,96289,96294,96299,96304,96309,96313,96321,96325,96330,96335,96340,96345,96349,96354,96367,96371,96376,96381,96386,96391,96395,96400,96412,96416,96420,96424,96428,96432,96436,96441,96456,96461,96470,96475,96479,96483,96488,96492,96497],{"__ignoreMap":28},[33,96243,96244,96247,96249,96251],{"class":35,"line":36},[33,96245,96246],{"class":59},"np.random.seed(",[33,96248,2010],{"class":39},[33,96250,2247],{"class":59},[33,96252,96253],{"class":87},"#保证每次值一样\n",[33,96255,96256,96258,96260,96262,96264,96266,96268,96270,96272,96274,96276,96278],{"class":35,"line":43},[33,96257,94945],{"class":59},[33,96259,64],{"class":63},[33,96261,94753],{"class":59},[33,96263,2129],{"class":39},[33,96265,2196],{"class":59},[33,96267,33146],{"class":6877},[33,96269,64],{"class":63},[33,96271,109],{"class":59},[33,96273,2111],{"class":39},[33,96275,2196],{"class":59},[33,96277,2162],{"class":39},[33,96279,121],{"class":59},[33,96281,96282],{"class":35,"line":130},[33,96283,96284],{"class":87},"#原数组：\n",[33,96286,96287],{"class":35,"line":146},[33,96288,95567],{"class":117},[33,96290,96291],{"class":35,"line":267},[33,96292,96293],{"class":117},"array([[44, 47, 64, 67, 67,  9],\n",[33,96295,96296],{"class":35,"line":275},[33,96297,96298],{"class":117},"       [83, 21, 36, 87, 70, 88],\n",[33,96300,96301],{"class":35,"line":392},[33,96302,96303],{"class":117},"       [88, 12, 58, 65, 39, 87],\n",[33,96305,96306],{"class":35,"line":406},[33,96307,96308],{"class":117},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[33,96310,96311],{"class":35,"line":418},[33,96312,95567],{"class":117},[33,96314,96315,96318],{"class":35,"line":425},[33,96316,96317],{"class":59},"np.sort(aa)",[33,96319,96320],{"class":87},"#每行进行了排序\n",[33,96322,96323],{"class":35,"line":1147},[33,96324,95567],{"class":117},[33,96326,96327],{"class":35,"line":1329},[33,96328,96329],{"class":117},"array([[ 9, 44, 47, 64, 67, 67],\n",[33,96331,96332],{"class":35,"line":1341},[33,96333,96334],{"class":117},"       [21, 36, 70, 83, 87, 88],\n",[33,96336,96337],{"class":35,"line":1348},[33,96338,96339],{"class":117},"       [12, 39, 58, 65, 87, 88],\n",[33,96341,96342],{"class":35,"line":1529},[33,96343,96344],{"class":117},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[33,96346,96347],{"class":35,"line":1546},[33,96348,95567],{"class":117},[33,96350,96351],{"class":35,"line":1551},[33,96352,96353],{"class":87},"#axis=0时\n",[33,96355,96356,96359,96361,96363,96365],{"class":35,"line":1566},[33,96357,96358],{"class":59},"np.sort(aa,",[33,96360,49159],{"class":6877},[33,96362,64],{"class":63},[33,96364,2010],{"class":39},[33,96366,157],{"class":59},[33,96368,96369],{"class":35,"line":1578},[33,96370,95567],{"class":117},[33,96372,96373],{"class":35,"line":1583},[33,96374,96375],{"class":117},"array([[44, 12, 36, 37, 25,  9],\n",[33,96377,96378],{"class":35,"line":3369},[33,96379,96380],{"class":117},"       [46, 21, 58, 65, 39, 77],\n",[33,96382,96383],{"class":35,"line":3396},[33,96384,96385],{"class":117},"       [83, 47, 64, 67, 67, 87],\n",[33,96387,96388],{"class":35,"line":3401},[33,96389,96390],{"class":117},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[33,96392,96393],{"class":35,"line":3418},[33,96394,95567],{"class":117},[33,96396,96397],{"class":35,"line":3423},[33,96398,96399],{"class":87},"#axis=1时,为默认值\n",[33,96401,96402,96404,96406,96408,96410],{"class":35,"line":3428},[33,96403,96358],{"class":59},[33,96405,49159],{"class":6877},[33,96407,64],{"class":63},[33,96409,2036],{"class":39},[33,96411,157],{"class":59},[33,96413,96414],{"class":35,"line":3433},[33,96415,95567],{"class":117},[33,96417,96418],{"class":35,"line":3447},[33,96419,96329],{"class":117},[33,96421,96422],{"class":35,"line":3452},[33,96423,96334],{"class":117},[33,96425,96426],{"class":35,"line":4243},[33,96427,96339],{"class":117},[33,96429,96430],{"class":35,"line":4257},[33,96431,96344],{"class":117},[33,96433,96434],{"class":35,"line":4265},[33,96435,95567],{"class":117},[33,96437,96438],{"class":35,"line":4270},[33,96439,96440],{"class":87},"#按最后一列排序\n",[33,96442,96443,96445,96447,96450,96452,96454],{"class":35,"line":4276},[33,96444,2081],{"class":59},[33,96446,64],{"class":63},[33,96448,96449],{"class":59},"aa[:,",[33,96451,2349],{"class":63},[33,96453,2036],{"class":39},[33,96455,34893],{"class":59},[33,96457,96458],{"class":35,"line":4282},[33,96459,96460],{"class":87},"#获取最后一列排好序的索引\n",[33,96462,96463,96465,96467],{"class":35,"line":4287},[33,96464,75699],{"class":59},[33,96466,64],{"class":63},[33,96468,96469],{"class":59},"np.argsort(b)\n",[33,96471,96472],{"class":35,"line":9608},[33,96473,96474],{"class":59},"aa[index]\n",[33,96476,96477],{"class":35,"line":9632},[33,96478,95567],{"class":117},[33,96480,96481],{"class":35,"line":9637},[33,96482,96293],{"class":117},[33,96484,96485],{"class":35,"line":9643},[33,96486,96487],{"class":117},"       [46, 88, 81, 37, 25, 77],\n",[33,96489,96490],{"class":35,"line":9670},[33,96491,96303],{"class":117},[33,96493,96494],{"class":35,"line":9675},[33,96495,96496],{"class":117},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[33,96498,96499],{"class":35,"line":9681},[33,96500,95567],{"class":117},[1729,96502,96503],{},"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":43,"depth":43,"links":96505},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96152,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96512,"title":96513,"body":96514,"description":1751,"extension":1752,"meta":96544,"navigation":126,"path":96545,"seo":96546,"stem":96547,"__hash__":96548},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96515,"toc":96542},[96516,96519,96522,96525,96528,96531,96534,96537],[10,96517,96513],{"id":96518},"_14广播机制",[19,96520,96521],{},"广播的规则：",[19,96523,96524],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96526,96527],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96529,96530],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96532,96533],{},"3.如果没有维度形状为1，则会引发异常",[19,96535,96536],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96538,96539],{},[3145,96540],{"alt":28,"src":96541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":28,"searchDepth":43,"depth":43,"links":96543},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96513,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96550,"title":96551,"body":96552,"description":1751,"extension":1752,"meta":96650,"navigation":126,"path":96651,"seo":96652,"stem":96653,"__hash__":96654},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96553,"toc":96648},[96554,96557,96560,96645],[10,96555,96551],{"id":96556},"_15比较掩码",[19,96558,96559],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[23,96561,96563],{"className":25,"code":96562,"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,96564,96565,96611,96622,96636,96640],{"__ignoreMap":28},[33,96566,96567,96569,96571,96574,96576,96578,96580,96582,96584,96586,96588,96590,96592,96594,96596,96598,96600,96602,96604,96606,96608],{"class":35,"line":36},[33,96568,2057],{"class":59},[33,96570,64],{"class":63},[33,96572,96573],{"class":59},"np.array([[",[33,96575,2036],{"class":39},[33,96577,2196],{"class":59},[33,96579,1897],{"class":39},[33,96581,2196],{"class":59},[33,96583,1891],{"class":39},[33,96585,49675],{"class":59},[33,96587,2289],{"class":39},[33,96589,2196],{"class":59},[33,96591,2315],{"class":39},[33,96593,2196],{"class":59},[33,96595,2340],{"class":39},[33,96597,49675],{"class":59},[33,96599,2542],{"class":39},[33,96601,2196],{"class":59},[33,96603,2567],{"class":39},[33,96605,2196],{"class":59},[33,96607,2592],{"class":39},[33,96609,96610],{"class":59},"]])\n",[33,96612,96613,96615,96617,96619],{"class":35,"line":43},[33,96614,2057],{"class":59},[33,96616,2726],{"class":63},[33,96618,2517],{"class":39},[33,96620,96621],{"class":87},"#结果是一个由True,False组成的数组\n",[33,96623,96624,96627,96629,96631,96633],{"class":35,"line":130},[33,96625,96626],{"class":59},"a[a",[33,96628,2726],{"class":63},[33,96630,2517],{"class":39},[33,96632,2756],{"class":59},[33,96634,96635],{"class":87},"#小于20的元素会存到这个数组中\n",[33,96637,96638],{"class":35,"line":146},[33,96639,95203],{"class":87},[33,96641,96642],{"class":35,"line":267},[33,96643,96644],{"class":87},"#array([ 1,  2,  3, 11, 12, 13])\n",[1729,96646,96647],{},"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":43,"depth":43,"links":96649},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96551,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96656,"title":96657,"body":96658,"description":1751,"extension":1752,"meta":96750,"navigation":126,"path":96751,"seo":96752,"stem":96753,"__hash__":96754},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96659,"toc":96748},[96660,96663,96666,96669,96672,96675,96740,96745],[10,96661,96657],{"id":96662},"_16魔法命令time",[19,96664,96665],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96667,96668],{},"%:行模式",[19,96670,96671],{},"%%:单元格模式",[19,96673,96674],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[23,96676,96678],{"className":25,"code":96677,"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,96679,96680,96685,96692,96697,96706,96719,96723,96731],{"__ignoreMap":28},[33,96681,96682],{"class":35,"line":36},[33,96683,96684],{"class":87},"#程序执行时间\n",[33,96686,96687,96689],{"class":35,"line":43},[33,96688,32045],{"class":63},[33,96690,96691],{"class":59}," time \n",[33,96693,96694],{"class":35,"line":130},[33,96695,96696],{"class":87},"#获取时间\n",[33,96698,96699,96702,96704],{"class":35,"line":146},[33,96700,96701],{"class":59},"start",[33,96703,64],{"class":63},[33,96705,34066],{"class":59},[33,96707,96708,96711,96714,96716],{"class":35,"line":267},[33,96709,96710],{"class":59},"time.sleep(",[33,96712,96713],{"class":39},"0.4",[33,96715,2247],{"class":59},[33,96717,96718],{"class":87},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[33,96720,96721],{"class":35,"line":275},[33,96722,96696],{"class":87},[33,96724,96725,96727,96729],{"class":35,"line":392},[33,96726,47447],{"class":59},[33,96728,64],{"class":63},[33,96730,34066],{"class":59},[33,96732,96733,96735,96737],{"class":35,"line":406},[33,96734,47447],{"class":59},[33,96736,2349],{"class":63},[33,96738,96739],{"class":59},"start\n",[19,96741,96742],{},[3145,96743],{"alt":28,"src":96744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1729,96746,96747],{},"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":43,"depth":43,"links":96749},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96657,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96756,"title":96757,"body":96758,"description":1751,"extension":1752,"meta":96793,"navigation":126,"path":96794,"seo":96795,"stem":96796,"__hash__":96797},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96759,"toc":96791},[96760,96763,96766,96769,96772,96775,96778,96781,96786],[10,96761,96757],{"id":96762},"_17魔法命令timeit",[19,96764,96765],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96767,96768],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96770,96771],{},"单元格模式：",[19,96773,96774],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96776,96777],{},"初始化语句执行次数由轮数来决定",[19,96779,96780],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96782,96783],{},[3145,96784],{"alt":28,"src":96785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96787,96788],{},[3145,96789],{"alt":28,"src":96790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":28,"searchDepth":43,"depth":43,"links":96792},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96757,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96799,"title":96800,"body":96801,"description":1751,"extension":1752,"meta":96819,"navigation":126,"path":96820,"seo":96821,"stem":96822,"__hash__":96823},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96802,"toc":96817},[96803,96806,96809,96812],[10,96804,96800],{"id":96805},"_18魔法命令writefile和run",[19,96807,96808],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96810,96811],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96813,96814],{},[3145,96815],{"alt":28,"src":96816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":28,"searchDepth":43,"depth":43,"links":96818},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96800,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96825,"title":96826,"body":96827,"description":1751,"extension":1752,"meta":96880,"navigation":126,"path":96881,"seo":96882,"stem":96883,"__hash__":96884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96828,"toc":96878},[96829,96832,96835,96837,96840,96843,96848,96851,96854,96857,96860,96863,96866,96869,96872,96875],[10,96830,96826],{"id":96831},"_19魔法命令memit",[19,96833,96834],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96836,26255],{},[19,96838,96839],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96841,96842],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96844,96845],{},[3145,96846],{"alt":28,"src":96847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96849,96850],{},"补充：",[19,96852,96853],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96855,96856],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96858,96859],{},"解决方法：",[19,96861,96862],{},"1.cmd",[19,96864,96865],{},"2.依次输入以下代码：",[19,96867,96868],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96870,96871],{},"pip install --upgrade ipython",[19,96873,96874],{},"#升级 memory_profiler 和 setuptools",[19,96876,96877],{},"pip install --upgrade memory_profiler setuptools",{"title":28,"searchDepth":43,"depth":43,"links":96879},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96826,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96886,"title":96887,"body":96888,"description":1751,"extension":1752,"meta":98534,"navigation":126,"path":98535,"seo":98536,"stem":98537,"__hash__":98538},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96889,"toc":98504},[96890,96893,96897,96901,96962,96965,96970,96974,96979,96984,96989,96994,96997,97002,97006,97010,97043,97046,97049,97052,97104,97107,97143,97146,97188,97192,97213,97215,97252,97254,97259,97261,97266,97270,97273,97301,97305,97309,97362,97366,97458,97462,97466,97469,97474,97478,97503,97508,97512,97515,97518,97521,97524,97527,97530,97533,97545,97549,97553,97556,97588,97591,97614,97617,97643,97646,97672,97675,97709,97712,97774,97778,97781,97785,97788,97814,97817,97820,97825,97828,97897,97899,97904,97965,97968,97979,97985,97990,97994,97997,98010,98014,98029,98031,98054,98056,98082,98085,98088,98091,98139,98141,98146,98150,98154,98181,98185,98212,98215,98220,98225,98315,98319,98377,98382,98385,98388,98430,98434,98490,98495,98498,98501],[10,96891,96887],{"id":96892},"_2创建数组",[14,96894,96896],{"id":96895},"_21-array函数创建数组","2.1 array()函数创建数组",[633,96898,96900],{"id":96899},"_221-函数语句","2.2.1 函数语句",[23,96902,96904],{"className":25,"code":96903,"language":27,"meta":28,"style":28},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[30,96905,96906],{"__ignoreMap":28},[33,96907,96908,96911,96914,96916,96918,96920,96922,96924,96927,96929,96932,96934,96937,96939,96941,96943,96946,96948,96951,96953,96956,96958,96960],{"class":35,"line":36},[33,96909,96910],{"class":59},"numpy.array(",[33,96912,96913],{"class":39},"object",[33,96915,14093],{"class":59},[33,96917,95139],{"class":6877},[33,96919,15222],{"class":63},[33,96921,40579],{"class":39},[33,96923,14093],{"class":59},[33,96925,96926],{"class":6877},"copy",[33,96928,15222],{"class":63},[33,96930,96931],{"class":39}," True",[33,96933,14093],{"class":59},[33,96935,96936],{"class":6877},"order",[33,96938,15222],{"class":63},[33,96940,40579],{"class":39},[33,96942,14093],{"class":59},[33,96944,96945],{"class":6877},"subok",[33,96947,15222],{"class":63},[33,96949,96950],{"class":39}," False",[33,96952,14093],{"class":59},[33,96954,96955],{"class":6877},"ndmin",[33,96957,15222],{"class":63},[33,96959,829],{"class":39},[33,96961,157],{"class":59},[19,96963,96964],{},"参数：",[19,96966,96967],{},[3145,96968],{"alt":28,"src":96969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[633,96971,96973],{"id":96972},"_222-实例","2.2.2 实例",[19,96975,96976],{},[3145,96977],{"alt":28,"src":96978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96980,96981],{},[3145,96982],{"alt":28,"src":96983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96985,96986],{},[3145,96987],{"alt":28,"src":96988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96990,96991],{},[3145,96992],{"alt":28,"src":96993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96995,96996],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96998,96999],{},[3145,97000],{"alt":28,"src":97001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97003,97005],{"id":97004},"_22-随机数创建数组","2.2 随机数创建数组",[633,97007,97009],{"id":97008},"_221-random语句","2.2.1 random语句",[23,97011,97013],{"className":25,"code":97012,"language":27,"meta":28,"style":28},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[30,97014,97015,97020,97025,97033,97038],{"__ignoreMap":28},[33,97016,97017],{"class":35,"line":36},[33,97018,97019],{"class":87},"#random.random()\n",[33,97021,97022],{"class":35,"line":43},[33,97023,97024],{"class":87},"#确定随机种子,就是每次运行结果是相同的\n",[33,97026,97027,97029,97031],{"class":35,"line":130},[33,97028,96246],{"class":59},[33,97030,2010],{"class":39},[33,97032,157],{"class":59},[33,97034,97035],{"class":35,"line":146},[33,97036,97037],{"class":59},"np.random.random()\n",[33,97039,97040],{"class":35,"line":267},[33,97041,97042],{"class":87},"#生成一个随机的数目\n",[19,97044,97045],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97047,97048],{},"可以指定数组形状 size",[19,97050,97051],{},"①生成一维数组",[23,97053,97055],{"className":25,"code":97054,"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,97056,97057,97062,97075,97080,97096],{"__ignoreMap":28},[33,97058,97059],{"class":35,"line":36},[33,97060,97061],{"class":87},"#random.random(size())\n",[33,97063,97064,97067,97069,97071,97073],{"class":35,"line":43},[33,97065,97066],{"class":59},"np.random.random(",[33,97068,33146],{"class":6877},[33,97070,64],{"class":63},[33,97072,2137],{"class":39},[33,97074,157],{"class":59},[33,97076,97077],{"class":35,"line":130},[33,97078,97079],{"class":87},"#生成一位的五个元素\n",[33,97081,97082,97084,97086,97088,97090,97092,97094],{"class":35,"line":146},[33,97083,2057],{"class":59},[33,97085,64],{"class":63},[33,97087,97066],{"class":59},[33,97089,33146],{"class":6877},[33,97091,64],{"class":63},[33,97093,2111],{"class":39},[33,97095,157],{"class":59},[33,97097,97098,97101],{"class":35,"line":267},[33,97099,97100],{"class":59},"a.shape ",[33,97102,97103],{"class":87},"#输出数组形状\n",[19,97105,97106],{},"②生成二维数组",[23,97108,97110],{"className":25,"code":97109,"language":27,"meta":28,"style":28},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[30,97111,97112,97116,97138],{"__ignoreMap":28},[33,97113,97114],{"class":35,"line":36},[33,97115,94940],{"class":87},[33,97117,97118,97120,97122,97124,97126,97128,97130,97132,97134,97136],{"class":35,"line":43},[33,97119,94945],{"class":59},[33,97121,64],{"class":63},[33,97123,97066],{"class":59},[33,97125,33146],{"class":6877},[33,97127,64],{"class":63},[33,97129,109],{"class":59},[33,97131,2111],{"class":39},[33,97133,2196],{"class":59},[33,97135,2137],{"class":39},[33,97137,121],{"class":59},[33,97139,97140],{"class":35,"line":130},[33,97141,97142],{"class":87},"#生成四行五列的数组\n",[19,97144,97145],{},"③生成三维数组",[23,97147,97149],{"className":25,"code":97148,"language":27,"meta":28,"style":28},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[30,97150,97151,97156,97183],{"__ignoreMap":28},[33,97152,97153],{"class":35,"line":36},[33,97154,97155],{"class":87},"#三维数组\n",[33,97157,97158,97161,97163,97165,97167,97169,97171,97173,97175,97177,97179,97181],{"class":35,"line":43},[33,97159,97160],{"class":59},"aaa",[33,97162,64],{"class":63},[33,97164,97066],{"class":59},[33,97166,33146],{"class":6877},[33,97168,64],{"class":63},[33,97170,109],{"class":59},[33,97172,1897],{"class":39},[33,97174,2196],{"class":59},[33,97176,1891],{"class":39},[33,97178,2196],{"class":59},[33,97180,2111],{"class":39},[33,97182,121],{"class":59},[33,97184,97185],{"class":35,"line":130},[33,97186,97187],{"class":59},"aaa.shape\n",[633,97189,97191],{"id":97190},"_222-randint语句","2.2.2 randint语句",[23,97193,97195],{"className":25,"code":97194,"language":27,"meta":28,"style":28},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[30,97196,97197,97202],{"__ignoreMap":28},[33,97198,97199],{"class":35,"line":36},[33,97200,97201],{"class":87},"#生成随机的整数 random.randint(low,high,size)\n",[33,97203,97204,97206,97208,97210],{"class":35,"line":43},[33,97205,94753],{"class":59},[33,97207,2137],{"class":39},[33,97209,15372],{"class":59},[33,97211,97212],{"class":87},"#0~5中的随机一个数\n",[19,97214,97051],{},[23,97216,97218],{"className":25,"code":97217,"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,97219,97220,97225,97247],{"__ignoreMap":28},[33,97221,97222],{"class":35,"line":36},[33,97223,97224],{"class":87},"#一维\n",[33,97226,97227,97229,97231,97233,97235,97237,97239,97241,97243,97245],{"class":35,"line":43},[33,97228,94753],{"class":59},[33,97230,2036],{"class":39},[33,97232,2196],{"class":59},[33,97234,2289],{"class":39},[33,97236,2196],{"class":59},[33,97238,33146],{"class":6877},[33,97240,64],{"class":63},[33,97242,109],{"class":59},[33,97244,2264],{"class":39},[33,97246,121],{"class":59},[33,97248,97249],{"class":35,"line":130},[33,97250,97251],{"class":87},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97253,97106],{},[19,97255,97256],{},[3145,97257],{"alt":28,"src":97258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97260,97145],{},[19,97262,97263],{},[3145,97264],{"alt":28,"src":97265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[633,97267,97269],{"id":97268},"_222-rand语句","2.2.2 rand语句",[19,97271,97272],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[23,97274,97276],{"className":25,"code":97275,"language":27,"meta":28,"style":28},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[30,97277,97278,97291,97296],{"__ignoreMap":28},[33,97279,97280,97283,97285,97287,97289],{"class":35,"line":36},[33,97281,97282],{"class":59},"np.random.rand(",[33,97284,2129],{"class":39},[33,97286,2196],{"class":59},[33,97288,2264],{"class":39},[33,97290,157],{"class":59},[33,97292,97293],{"class":35,"line":43},[33,97294,97295],{"class":87},"#第一个参数100：行数，表示有100个样本\n",[33,97297,97298],{"class":35,"line":130},[33,97299,97300],{"class":87},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97302,97304],{"id":97303},"_23-arange创建数组","2.3 arange()创建数组",[633,97306,97308],{"id":97307},"_231-函数语句","2.3.1 函数语句",[23,97310,97312],{"className":25,"code":97311,"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,97313,97314,97328,97333,97338,97343,97348,97353,97358],{"__ignoreMap":28},[33,97315,97316,97319,97321,97323,97326],{"class":35,"line":36},[33,97317,97318],{"class":59},"numpy.arange([start,] stop[, step], ",[33,97320,95139],{"class":6877},[33,97322,64],{"class":63},[33,97324,97325],{"class":39},"None",[33,97327,157],{"class":59},[33,97329,97330],{"class":35,"line":43},[33,97331,97332],{"class":87},"#参数\n",[33,97334,97335],{"class":35,"line":130},[33,97336,97337],{"class":117},"\"\"\"\n",[33,97339,97340],{"class":35,"line":146},[33,97341,97342],{"class":117},"start:起始值，可选，默认从 0 开始。\n",[33,97344,97345],{"class":35,"line":267},[33,97346,97347],{"class":117},"stop:结束值（不包含该值）。\n",[33,97349,97350],{"class":35,"line":275},[33,97351,97352],{"class":117},"step:步长，可选，默认是 1。可以为浮点数。\n",[33,97354,97355],{"class":35,"line":392},[33,97356,97357],{"class":117},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[33,97359,97360],{"class":35,"line":406},[33,97361,97337],{"class":117},[633,97363,97365],{"id":97364},"_232-实例","2.3.2 实例",[23,97367,97369],{"className":25,"code":97368,"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,97370,97371,97375,97399,97404,97409,97413,97436,97440,97444,97449,97454],{"__ignoreMap":28},[33,97372,97373],{"class":35,"line":36},[33,97374,94744],{"class":87},[33,97376,97377,97379,97381,97383,97385,97387,97389,97391,97393,97395,97397],{"class":35,"line":43},[33,97378,94641],{"class":59},[33,97380,2036],{"class":39},[33,97382,2196],{"class":59},[33,97384,2542],{"class":39},[33,97386,2196],{"class":59},[33,97388,2036],{"class":39},[33,97390,2196],{"class":59},[33,97392,95139],{"class":6877},[33,97394,64],{"class":63},[33,97396,1828],{"class":39},[33,97398,157],{"class":59},[33,97400,97401],{"class":35,"line":130},[33,97402,97403],{"class":87},"#输出结果：\n",[33,97405,97406],{"class":35,"line":146},[33,97407,97408],{"class":87},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[33,97410,97411],{"class":35,"line":267},[33,97412,95586],{"class":87},[33,97414,97415,97418,97420,97422,97424,97427,97429,97431,97433],{"class":35,"line":275},[33,97416,97417],{"class":59},"np.array([np.arange(",[33,97419,2036],{"class":39},[33,97421,2196],{"class":59},[33,97423,2111],{"class":39},[33,97425,97426],{"class":59},"),np.arange(",[33,97428,2111],{"class":39},[33,97430,2196],{"class":59},[33,97432,2187],{"class":39},[33,97434,97435],{"class":59},")])\n",[33,97437,97438],{"class":35,"line":392},[33,97439,95203],{"class":87},[33,97441,97442],{"class":35,"line":406},[33,97443,97337],{"class":117},[33,97445,97446],{"class":35,"line":418},[33,97447,97448],{"class":117},"array([[1, 2, 3],\n",[33,97450,97451],{"class":35,"line":425},[33,97452,97453],{"class":117},"       [4, 5, 6]])\n",[33,97455,97456],{"class":35,"line":1147},[33,97457,97337],{"class":117},[14,97459,97461],{"id":97460},"_24-生态分布","2.4 生态分布",[633,97463,97465],{"id":97464},"_241-标准正态分布","2.4.1 标准正态分布",[19,97467,97468],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97470,97471],{},[3145,97472],{"alt":28,"src":97473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[633,97475,97477],{"id":97476},"_242-常规正态分布","2.4.2 常规正态分布",[23,97479,97481],{"className":25,"code":97480,"language":27,"meta":28,"style":28},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[30,97482,97483,97488,97493,97498],{"__ignoreMap":28},[33,97484,97485],{"class":35,"line":36},[33,97486,97487],{"class":59},"random.normal(loc,scale,size)也可以生成正态分布\n",[33,97489,97490],{"class":35,"line":43},[33,97491,97492],{"class":87},"#loc:期望\n",[33,97494,97495],{"class":35,"line":130},[33,97496,97497],{"class":87},"#scale:方差\n",[33,97499,97500],{"class":35,"line":146},[33,97501,97502],{"class":87},"#size:用于确定是几维的数列\n",[19,97504,97505],{},[3145,97506],{"alt":28,"src":97507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97509,97511],{"id":97510},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97513,97514],{},"ndim:秩，维度个数",[19,97516,97517],{},"size:数组元素的个数",[19,97519,97520],{},"shape:数组的形状",[19,97522,97523],{},"dtype:数组元素的类型",[19,97525,97526],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97528,97529],{},"他们都是属性，通过数组.属性的形式来确定",[19,97531,97532],{},"如果需要输出多个可以通过以下方式：",[23,97534,97536],{"className":25,"code":97535,"language":27,"meta":28,"style":28},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[30,97537,97538],{"__ignoreMap":28},[33,97539,97540,97542],{"class":35,"line":36},[33,97541,72],{"class":39},[33,97543,97544],{"class":59},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97546,97548],{"id":97547},"_26-其他方式创建数组","2.6 其他方式创建数组",[633,97550,97552],{"id":97551},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97554,97555],{},"①创建一维数组",[23,97557,97559],{"className":25,"code":97558,"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,97560,97561,97570,97574,97579,97584],{"__ignoreMap":28},[33,97562,97563,97566,97568],{"class":35,"line":36},[33,97564,97565],{"class":59},"np.zeros(",[33,97567,2264],{"class":39},[33,97569,157],{"class":59},[33,97571,97572],{"class":35,"line":43},[33,97573,97337],{"class":117},[33,97575,97576],{"class":35,"line":130},[33,97577,97578],{"class":117},"输出结果：\n",[33,97580,97581],{"class":35,"line":146},[33,97582,97583],{"class":117},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[33,97585,97586],{"class":35,"line":267},[33,97587,97337],{"class":117},[19,97589,97590],{},"上方代码等价于：",[23,97592,97594],{"className":25,"code":97593,"language":27,"meta":28,"style":28},"np.zeros(shape=(10))#创建10个元素的0数组\n",[30,97595,97596],{"__ignoreMap":28},[33,97597,97598,97600,97603,97605,97607,97609,97611],{"class":35,"line":36},[33,97599,97565],{"class":59},[33,97601,97602],{"class":6877},"shape",[33,97604,64],{"class":63},[33,97606,109],{"class":59},[33,97608,2264],{"class":39},[33,97610,84411],{"class":59},[33,97612,97613],{"class":87},"#创建10个元素的0数组\n",[19,97615,97616],{},"也可以指定类型",[23,97618,97620],{"className":25,"code":97619,"language":27,"meta":28,"style":28},"#指定类型\nnp.zeros(5,dtype=int)\n",[30,97621,97622,97627],{"__ignoreMap":28},[33,97623,97624],{"class":35,"line":36},[33,97625,97626],{"class":87},"#指定类型\n",[33,97628,97629,97631,97633,97635,97637,97639,97641],{"class":35,"line":43},[33,97630,97565],{"class":59},[33,97632,2137],{"class":39},[33,97634,2196],{"class":59},[33,97636,95139],{"class":6877},[33,97638,64],{"class":63},[33,97640,1828],{"class":39},[33,97642,157],{"class":59},[19,97644,97645],{},"②创建二维数组",[23,97647,97649],{"className":25,"code":97648,"language":27,"meta":28,"style":28},"np.zeros((3,4),dtype=int)\n",[30,97650,97651],{"__ignoreMap":28},[33,97652,97653,97656,97658,97660,97662,97664,97666,97668,97670],{"class":35,"line":36},[33,97654,97655],{"class":59},"np.zeros((",[33,97657,1891],{"class":39},[33,97659,2196],{"class":59},[33,97661,2111],{"class":39},[33,97663,43902],{"class":59},[33,97665,95139],{"class":6877},[33,97667,64],{"class":63},[33,97669,1828],{"class":39},[33,97671,157],{"class":59},[19,97673,97674],{},"③创建三维数组",[23,97676,97678],{"className":25,"code":97677,"language":27,"meta":28,"style":28},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[30,97679,97680,97685],{"__ignoreMap":28},[33,97681,97682],{"class":35,"line":36},[33,97683,97684],{"class":87},"#创建三维数组\n",[33,97686,97687,97689,97691,97693,97695,97697,97699,97701,97703,97705,97707],{"class":35,"line":43},[33,97688,97655],{"class":59},[33,97690,1891],{"class":39},[33,97692,2196],{"class":59},[33,97694,2111],{"class":39},[33,97696,2196],{"class":59},[33,97698,2137],{"class":39},[33,97700,43902],{"class":59},[33,97702,95139],{"class":6877},[33,97704,64],{"class":63},[33,97706,1828],{"class":39},[33,97708,157],{"class":59},[19,97710,97711],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[23,97713,97715],{"className":25,"code":97714,"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,97716,97717,97722,97737,97742,97747,97769],{"__ignoreMap":28},[33,97718,97719],{"class":35,"line":36},[33,97720,97721],{"class":87},"#使用zeros_like将创建的一维数组变成全0的数组\n",[33,97723,97724,97726,97728,97730,97732,97734],{"class":35,"line":43},[33,97725,2057],{"class":59},[33,97727,64],{"class":63},[33,97729,94641],{"class":59},[33,97731,2111],{"class":39},[33,97733,2247],{"class":59},[33,97735,97736],{"class":87},"#这个得到的结果：一维数组0，1，2，3\n",[33,97738,97739],{"class":35,"line":130},[33,97740,97741],{"class":59},"np.zeros_like(a)\n",[33,97743,97744],{"class":35,"line":146},[33,97745,97746],{"class":87},"#使用zeros_like将创建的二维数组变成全0的数组\n",[33,97748,97749,97751,97753,97755,97757,97759,97761,97763,97765,97767],{"class":35,"line":267},[33,97750,94945],{"class":59},[33,97752,64],{"class":63},[33,97754,97066],{"class":59},[33,97756,33146],{"class":6877},[33,97758,64],{"class":63},[33,97760,109],{"class":59},[33,97762,2111],{"class":39},[33,97764,2196],{"class":59},[33,97766,2137],{"class":39},[33,97768,121],{"class":59},[33,97770,97771],{"class":35,"line":275},[33,97772,97773],{"class":59},"np.zeros_like(aa)\n",[633,97775,97777],{"id":97776},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97779,97780],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[633,97782,97784],{"id":97783},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97786,97787],{},"①empty()用法",[23,97789,97791],{"className":25,"code":97790,"language":27,"meta":28,"style":28},"numpy.empty(shape,dtype=float,order='c')\n",[30,97792,97793],{"__ignoreMap":28},[33,97794,97795,97798,97800,97802,97804,97806,97808,97810,97812],{"class":35,"line":36},[33,97796,97797],{"class":59},"numpy.empty(shape,",[33,97799,95139],{"class":6877},[33,97801,64],{"class":63},[33,97803,1863],{"class":39},[33,97805,2196],{"class":59},[33,97807,96936],{"class":6877},[33,97809,64],{"class":63},[33,97811,77669],{"class":117},[33,97813,157],{"class":59},[19,97815,97816],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97818,97819],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97821,97822],{},[3145,97823],{"alt":28,"src":97824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97826,97827],{},"②empty()用法",[23,97829,97831],{"className":25,"code":97830,"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,97832,97833,97854,97866,97887,97892],{"__ignoreMap":28},[33,97834,97835,97837,97839,97842,97844,97846,97848,97850,97852],{"class":35,"line":36},[33,97836,2662],{"class":59},[33,97838,64],{"class":63},[33,97840,97841],{"class":59},"np.empty(",[33,97843,2264],{"class":39},[33,97845,2196],{"class":59},[33,97847,95139],{"class":6877},[33,97849,64],{"class":63},[33,97851,1828],{"class":39},[33,97853,157],{"class":59},[33,97855,97856,97858,97860,97862,97864],{"class":35,"line":43},[33,97857,2637],{"class":59},[33,97859,64],{"class":63},[33,97861,94641],{"class":59},[33,97863,2137],{"class":39},[33,97865,157],{"class":59},[33,97867,97868,97871,97873,97876,97878,97880,97883,97885],{"class":35,"line":130},[33,97869,97870],{"class":59},"np.add(",[33,97872,1897],{"class":39},[33,97874,97875],{"class":59},",x,",[33,97877,94693],{"class":6877},[33,97879,64],{"class":63},[33,97881,97882],{"class":59},"y[:",[33,97884,2137],{"class":39},[33,97886,6318],{"class":59},[33,97888,97889],{"class":35,"line":146},[33,97890,97891],{"class":87},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[33,97893,97894],{"class":35,"line":267},[33,97895,97896],{"class":59},"y\n",[19,97898,13172],{},[19,97900,97901],{},[3145,97902],{"alt":28,"src":97903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[23,97905,97907],{"className":25,"code":97906,"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,97908,97909,97925,97945,97960],{"__ignoreMap":28},[33,97910,97911,97913,97915,97917,97919,97921,97923],{"class":35,"line":36},[33,97912,2637],{"class":59},[33,97914,64],{"class":63},[33,97916,94641],{"class":59},[33,97918,2036],{"class":39},[33,97920,2196],{"class":59},[33,97922,2162],{"class":39},[33,97924,157],{"class":59},[33,97926,97927,97929,97931,97933,97935,97937,97939,97941,97943],{"class":35,"line":43},[33,97928,2662],{"class":59},[33,97930,64],{"class":63},[33,97932,97841],{"class":59},[33,97934,2137],{"class":39},[33,97936,2196],{"class":59},[33,97938,95139],{"class":6877},[33,97940,64],{"class":63},[33,97942,1828],{"class":39},[33,97944,157],{"class":59},[33,97946,97947,97950,97952,97954,97956,97958],{"class":35,"line":130},[33,97948,97949],{"class":59},"np.add(x,",[33,97951,1897],{"class":39},[33,97953,2196],{"class":59},[33,97955,94693],{"class":6877},[33,97957,64],{"class":63},[33,97959,95088],{"class":59},[33,97961,97962],{"class":35,"line":146},[33,97963,97964],{"class":87},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97966,97967],{},"③empty_like()",[19,97969,97970],{},[1968,97971,97972,97973,97978],{},"创建一个",[1968,97974,97975],{},[1968,97976,97977],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97980,97981,97984],{},[30,97982,97983],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97986,97987],{},[3145,97988],{"alt":28,"src":97989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[633,97991,97993],{"id":97992},"_264-用法","2.6.4 ？？用法",[19,97995,97996],{},"当想查看一个函数的参数时，可以通过？？来实现",[23,97998,98000],{"className":25,"code":97999,"language":27,"meta":28,"style":28},"np.full??\n",[30,98001,98002],{"__ignoreMap":28},[33,98003,98004,98007],{"class":35,"line":36},[33,98005,98006],{"class":59},"np.full",[33,98008,98009],{"class":79044},"??\n",[633,98011,98013],{"id":98012},"_265-full创建数组","2.6.5 full()创建数组",[23,98015,98017],{"className":25,"code":98016,"language":27,"meta":28,"style":28},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[30,98018,98019,98024],{"__ignoreMap":28},[33,98020,98021],{"class":35,"line":36},[33,98022,98023],{"class":59},"full(shape,fill_value)\n",[33,98025,98026],{"class":35,"line":43},[33,98027,98028],{"class":59},"创建全为某个指定值的数组\n",[19,98030,96169],{},[23,98032,98034],{"className":25,"code":98033,"language":27,"meta":28,"style":28},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[30,98035,98036,98041],{"__ignoreMap":28},[33,98037,98038],{"class":35,"line":36},[33,98039,98040],{"class":87},"#创建一个一维数组,以20进行填充\n",[33,98042,98043,98046,98048,98050,98052],{"class":35,"line":43},[33,98044,98045],{"class":59},"np.full(",[33,98047,2264],{"class":39},[33,98049,2196],{"class":59},[33,98051,2517],{"class":39},[33,98053,157],{"class":59},[19,98055,94930],{},[23,98057,98059],{"className":25,"code":98058,"language":27,"meta":28,"style":28},"#创建二维数组\nnp.full((3,5),11)\n",[30,98060,98061,98065],{"__ignoreMap":28},[33,98062,98063],{"class":35,"line":36},[33,98064,95586],{"class":87},[33,98066,98067,98070,98072,98074,98076,98078,98080],{"class":35,"line":43},[33,98068,98069],{"class":59},"np.full((",[33,98071,1891],{"class":39},[33,98073,2196],{"class":59},[33,98075,2137],{"class":39},[33,98077,43902],{"class":59},[33,98079,2289],{"class":39},[33,98081,157],{"class":59},[19,98083,98084],{},"③full_like用法",[19,98086,98087],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98089,98090],{},"这里是指定填充而已",[23,98092,98094],{"className":25,"code":98093,"language":27,"meta":28,"style":28},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[30,98095,98096,98101,98125,98130],{"__ignoreMap":28},[33,98097,98098],{"class":35,"line":36},[33,98099,98100],{"class":87},"#创建一个指定形状数组\n",[33,98102,98103,98105,98107,98109,98111,98113,98115,98117,98119,98121,98123],{"class":35,"line":43},[33,98104,2057],{"class":59},[33,98106,64],{"class":63},[33,98108,94641],{"class":59},[33,98110,2036],{"class":39},[33,98112,2196],{"class":59},[33,98114,2143],{"class":39},[33,98116,94646],{"class":59},[33,98118,2111],{"class":39},[33,98120,2196],{"class":59},[33,98122,2238],{"class":39},[33,98124,157],{"class":59},[33,98126,98127],{"class":35,"line":130},[33,98128,98129],{"class":87},"#进行指定填充\n",[33,98131,98132,98135,98137],{"class":35,"line":146},[33,98133,98134],{"class":59},"np.full_like(a,",[33,98136,2264],{"class":39},[33,98138,157],{"class":59},[19,98140,13172],{},[19,98142,98143],{},[3145,98144],{"alt":28,"src":98145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[633,98147,98149],{"id":98148},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23653,98151,98153],{"id":98152},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[23,98155,98157],{"className":25,"code":98156,"language":27,"meta":28,"style":28},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[30,98158,98159,98176],{"__ignoreMap":28},[33,98160,98161,98164,98166,98168,98170,98172,98174],{"class":35,"line":36},[33,98162,98163],{"class":59},"np.eye(",[33,98165,2111],{"class":39},[33,98167,2196],{"class":59},[33,98169,95139],{"class":6877},[33,98171,64],{"class":63},[33,98173,1828],{"class":39},[33,98175,157],{"class":59},[33,98177,98178],{"class":35,"line":43},[33,98179,98180],{"class":87},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23653,98182,98184],{"id":98183},"_2662-法2identity","2.6.6.2 法2：identity()",[23,98186,98188],{"className":25,"code":98187,"language":27,"meta":28,"style":28},"#identity()\nnp.identity(5,dtype=int)\n",[30,98189,98190,98195],{"__ignoreMap":28},[33,98191,98192],{"class":35,"line":36},[33,98193,98194],{"class":87},"#identity()\n",[33,98196,98197,98200,98202,98204,98206,98208,98210],{"class":35,"line":43},[33,98198,98199],{"class":59},"np.identity(",[33,98201,2137],{"class":39},[33,98203,2196],{"class":59},[33,98205,95139],{"class":6877},[33,98207,64],{"class":63},[33,98209,1828],{"class":39},[33,98211,157],{"class":59},[19,98213,98214],{},"两个函数是有区别的",[19,98216,98217],{},[3145,98218],{"alt":28,"src":98219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98221,98222],{},[3145,98223],{"alt":28,"src":98224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[23,98226,98228],{"className":25,"code":98227,"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,98229,98230,98235,98247,98252,98257,98262,98267,98271,98276,98296,98300,98305,98310],{"__ignoreMap":28},[33,98231,98232],{"class":35,"line":36},[33,98233,98234],{"class":87},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[33,98236,98237,98239,98241,98243,98245],{"class":35,"line":43},[33,98238,98163],{"class":59},[33,98240,1891],{"class":39},[33,98242,14093],{"class":59},[33,98244,2111],{"class":39},[33,98246,157],{"class":59},[33,98248,98249],{"class":35,"line":130},[33,98250,98251],{"class":87},"# 输出:\n",[33,98253,98254],{"class":35,"line":146},[33,98255,98256],{"class":87},"# [[1. 0. 0. 0.]\n",[33,98258,98259],{"class":35,"line":267},[33,98260,98261],{"class":87},"#  [0. 1. 0. 0.]\n",[33,98263,98264],{"class":35,"line":275},[33,98265,98266],{"class":87},"#  [0. 0. 1. 0.]]\n",[33,98268,98269],{"class":35,"line":392},[33,98270,127],{"emptyLinePlaceholder":126},[33,98272,98273],{"class":35,"line":406},[33,98274,98275],{"class":87},"# 对角线向上偏移1\n",[33,98277,98278,98280,98282,98284,98286,98288,98290,98292,98294],{"class":35,"line":418},[33,98279,98163],{"class":59},[33,98281,1891],{"class":39},[33,98283,14093],{"class":59},[33,98285,2111],{"class":39},[33,98287,14093],{"class":59},[33,98289,2310],{"class":6877},[33,98291,64],{"class":63},[33,98293,2036],{"class":39},[33,98295,157],{"class":59},[33,98297,98298],{"class":35,"line":425},[33,98299,98251],{"class":87},[33,98301,98302],{"class":35,"line":1147},[33,98303,98304],{"class":87},"# [[0. 1. 0. 0.]\n",[33,98306,98307],{"class":35,"line":1329},[33,98308,98309],{"class":87},"#  [0. 0. 1. 0.]\n",[33,98311,98312],{"class":35,"line":1341},[33,98313,98314],{"class":87},"#  [0. 0. 0. 1.]]\n",[633,98316,98318],{"id":98317},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[23,98320,98322],{"className":25,"code":98321,"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,98323,98324,98329,98333,98338,98343,98348,98353,98358,98363,98368,98373],{"__ignoreMap":28},[33,98325,98326],{"class":35,"line":36},[33,98327,98328],{"class":87},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[33,98330,98331],{"class":35,"line":43},[33,98332,97337],{"class":117},[33,98334,98335],{"class":35,"line":130},[33,98336,98337],{"class":117},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[33,98339,98340],{"class":35,"line":146},[33,98341,98342],{"class":117},"参数介绍：\n",[33,98344,98345],{"class":35,"line":267},[33,98346,98347],{"class":117},"start：序列的起始值\n",[33,98349,98350],{"class":35,"line":275},[33,98351,98352],{"class":117},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[33,98354,98355],{"class":35,"line":392},[33,98356,98357],{"class":117},"num：要生长的等步长的样本数量，默认为50\n",[33,98359,98360],{"class":35,"line":406},[33,98361,98362],{"class":117},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[33,98364,98365],{"class":35,"line":418},[33,98366,98367],{"class":117},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[33,98369,98370],{"class":35,"line":425},[33,98371,98372],{"class":117},"dtype：ndarry的数据类型\n",[33,98374,98375],{"class":35,"line":1147},[33,98376,97337],{"class":117},[19,98378,98379],{},[3145,98380],{"alt":28,"src":98381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98383,98384],{},"这里num=是可以省略的",[19,98386,98387],{},"也就是下方两行代码结果是一模一样的",[23,98389,98391],{"className":25,"code":98390,"language":27,"meta":28,"style":28},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[30,98392,98393,98410],{"__ignoreMap":28},[33,98394,98395,98398,98400,98402,98404,98406,98408],{"class":35,"line":36},[33,98396,98397],{"class":59},"np.linspace(",[33,98399,2036],{"class":39},[33,98401,2196],{"class":59},[33,98403,2137],{"class":39},[33,98405,2196],{"class":59},[33,98407,2137],{"class":39},[33,98409,157],{"class":59},[33,98411,98412,98414,98416,98418,98420,98422,98424,98426,98428],{"class":35,"line":43},[33,98413,98397],{"class":59},[33,98415,2036],{"class":39},[33,98417,2196],{"class":59},[33,98419,2137],{"class":39},[33,98421,2196],{"class":59},[33,98423,3339],{"class":6877},[33,98425,64],{"class":63},[33,98427,2137],{"class":39},[33,98429,157],{"class":59},[633,98431,98433],{"id":98432},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[23,98435,98437],{"className":25,"code":98436,"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,98438,98439,98444,98448,98453,98458,98463,98468,98472,98477,98482,98486],{"__ignoreMap":28},[33,98440,98441],{"class":35,"line":36},[33,98442,98443],{"class":87},"#logspace函数用于创建一个等比数列，格式如下：\n",[33,98445,98446],{"class":35,"line":43},[33,98447,97337],{"class":117},[33,98449,98450],{"class":35,"line":130},[33,98451,98452],{"class":117},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[33,98454,98455],{"class":35,"line":146},[33,98456,98457],{"class":117},"参数为：\n",[33,98459,98460],{"class":35,"line":267},[33,98461,98462],{"class":117},"start:序列的起始位置为：base**start\n",[33,98464,98465],{"class":35,"line":275},[33,98466,98467],{"class":117},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[33,98469,98470],{"class":35,"line":392},[33,98471,98357],{"class":117},[33,98473,98474],{"class":35,"line":406},[33,98475,98476],{"class":117},"endpoint：是否包含 stop 这个值，默认是 True\n",[33,98478,98479],{"class":35,"line":418},[33,98480,98481],{"class":117},"base：对数的底数，默认是 10（常见对数）\n",[33,98483,98484],{"class":35,"line":425},[33,98485,98372],{"class":117},[33,98487,98488],{"class":35,"line":1147},[33,98489,97337],{"class":117},[19,98491,98492],{},[3145,98493],{"alt":28,"src":98494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98496,98497],{},"logspace()函数中的num参数也是可以不写num=的",[19,98499,98500],{},"endpoint是不可以省略的",[1729,98502,98503],{},"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":43,"depth":43,"links":98505},[98506,98510,98515,98519,98523,98524],{"id":96895,"depth":43,"text":96896,"children":98507},[98508,98509],{"id":96899,"depth":130,"text":96900},{"id":96972,"depth":130,"text":96973},{"id":97004,"depth":43,"text":97005,"children":98511},[98512,98513,98514],{"id":97008,"depth":130,"text":97009},{"id":97190,"depth":130,"text":97191},{"id":97268,"depth":130,"text":97269},{"id":97303,"depth":43,"text":97304,"children":98516},[98517,98518],{"id":97307,"depth":130,"text":97308},{"id":97364,"depth":130,"text":97365},{"id":97460,"depth":43,"text":97461,"children":98520},[98521,98522],{"id":97464,"depth":130,"text":97465},{"id":97476,"depth":130,"text":97477},{"id":97510,"depth":43,"text":97511},{"id":97547,"depth":43,"text":97548,"children":98525},[98526,98527,98528,98529,98530,98531,98532,98533],{"id":97551,"depth":130,"text":97552},{"id":97776,"depth":130,"text":97777},{"id":97783,"depth":130,"text":97784},{"id":97992,"depth":130,"text":97993},{"id":98012,"depth":130,"text":98013},{"id":98148,"depth":130,"text":98149},{"id":98317,"depth":130,"text":98318},{"id":98432,"depth":130,"text":98433},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96887,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98540,"title":98541,"body":98542,"description":1751,"extension":1752,"meta":98635,"navigation":126,"path":98636,"seo":98637,"stem":98638,"__hash__":98639},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98543,"toc":98633},[98544,98547,98550,98553,98556,98559,98562,98565,98568,98571,98574,98577,98579,98582,98585,98590,98593,98596,98630],[10,98545,98541],{"id":98546},"_20魔法命令mprun",[19,98548,98549],{},"逐行分析数据内存的使用情况",[19,98551,98552],{},"语法格式：",[19,98554,98555],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98557,98558],{},"分析结果列如下：",[19,98560,98561],{},"Line行号",[19,98563,98564],{},"Mem usage内存使用大小",[19,98566,98567],{},"increment内存增量",[19,98569,98570],{},"Line content代码内容",[19,98572,98573],{},"补充说明：",[19,98575,98576],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98578,96842],{},[19,98580,98581],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98583,98584],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98586,98587],{},[3145,98588],{"alt":28,"src":98589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98591,98592],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98594,98595],{},"这时候需要重新加载模块",[23,98597,98599],{"className":25,"code":98598,"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,98600,98601,98606,98613,98618],{"__ignoreMap":28},[33,98602,98603],{"class":35,"line":36},[33,98604,98605],{"class":87},"#重新加载模块\n",[33,98607,98608,98610],{"class":35,"line":43},[33,98609,32045],{"class":63},[33,98611,98612],{"class":59}," importlib\n",[33,98614,98615],{"class":35,"line":130},[33,98616,98617],{"class":59},"importlib.reload(mprun_test)\n",[33,98619,98620,98622,98625,98627],{"class":35,"line":146},[33,98621,2146],{"class":63},[33,98623,98624],{"class":59},"mprun ",[33,98626,2349],{"class":63},[33,98628,98629],{"class":59},"f mprun_test.fun_test mprun_test.fun_test()\n",[1729,98631,98632],{},"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":43,"depth":43,"links":98634},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98541,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98641,"title":98642,"body":98643,"description":1751,"extension":1752,"meta":98660,"navigation":126,"path":98661,"seo":98662,"stem":98663,"__hash__":98664},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98644,"toc":98658},[98645,98648,98653],[10,98646,98642],{"id":98647},"_3一维数组的索引和切片",[19,98649,98650],{},[3145,98651],{"alt":28,"src":98652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98654,98655],{},[3145,98656],{"alt":28,"src":98657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":28,"searchDepth":43,"depth":43,"links":98659},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98642,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98666,"title":98667,"body":98668,"description":1751,"extension":1752,"meta":99151,"navigation":126,"path":99152,"seo":99153,"stem":99154,"__hash__":99155},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98669,"toc":99149},[98670,98673,98676,98681,98714,98717,98755,98758,98792,98795,98900,98903,98940,98943,99044,99047,99098,99101,99143,99146],[10,98671,98667],{"id":98672},"_4二维数组的索引与切片",[19,98674,98675],{},"①获取指定单个元素",[19,98677,98678],{},[3145,98679],{"alt":28,"src":98680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[23,98682,98684],{"className":25,"code":98683,"language":27,"meta":28,"style":28},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[30,98685,98686,98691,98696,98701],{"__ignoreMap":28},[33,98687,98688],{"class":35,"line":36},[33,98689,98690],{"class":87},"#获取元素9\n",[33,98692,98693],{"class":35,"line":43},[33,98694,98695],{"class":87},"#先获取所在行，再获取所在列\n",[33,98697,98698],{"class":35,"line":130},[33,98699,98700],{"class":87},"#数组[行索引号，列索引号]\n",[33,98702,98703,98706,98708,98710,98712],{"class":35,"line":146},[33,98704,98705],{"class":59},"a[",[33,98707,2036],{"class":39},[33,98709,2196],{"class":59},[33,98711,1897],{"class":39},[33,98713,34893],{"class":59},[19,98715,98716],{},"②获取整行元素",[23,98718,98720],{"className":25,"code":98719,"language":27,"meta":28,"style":28},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[30,98721,98722,98727,98732,98740,98745],{"__ignoreMap":28},[33,98723,98724],{"class":35,"line":36},[33,98725,98726],{"class":87},"#获取整行 数组[行索引号]\n",[33,98728,98729],{"class":35,"line":43},[33,98730,98731],{"class":87},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[33,98733,98734,98736,98738],{"class":35,"line":130},[33,98735,98705],{"class":59},[33,98737,1897],{"class":39},[33,98739,34893],{"class":59},[33,98741,98742],{"class":35,"line":146},[33,98743,98744],{"class":87},"#也可以负索引获取一行\n",[33,98746,98747,98749,98751,98753],{"class":35,"line":267},[33,98748,98705],{"class":59},[33,98750,2349],{"class":63},[33,98752,2036],{"class":39},[33,98754,34893],{"class":59},[19,98756,98757],{},"③获取整列元素",[23,98759,98761],{"className":25,"code":98760,"language":27,"meta":28,"style":28},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[30,98762,98763,98768,98777,98782],{"__ignoreMap":28},[33,98764,98765],{"class":35,"line":36},[33,98766,98767],{"class":87},"#获取整列 数组名[:,列索引]\n",[33,98769,98770,98773,98775],{"class":35,"line":43},[33,98771,98772],{"class":59},"a[:,",[33,98774,1897],{"class":39},[33,98776,34893],{"class":59},[33,98778,98779],{"class":35,"line":130},[33,98780,98781],{"class":87},"#也可以负索引获取一列\n",[33,98783,98784,98786,98788,98790],{"class":35,"line":146},[33,98785,98772],{"class":59},[33,98787,2349],{"class":63},[33,98789,2036],{"class":39},[33,98791,34893],{"class":59},[19,98793,98794],{},"④部分行部分列的元素",[23,98796,98798],{"className":25,"code":98797,"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,98799,98800,98805,98815,98819,98823,98828,98833,98837,98849,98853,98857,98862,98867,98872,98877,98881,98886],{"__ignoreMap":28},[33,98801,98802],{"class":35,"line":36},[33,98803,98804],{"class":87},"#部分行部分列 数组名[行切片，列切片]\n",[33,98806,98807,98810,98812],{"class":35,"line":43},[33,98808,98809],{"class":59},"a[:",[33,98811,1897],{"class":39},[33,98813,98814],{"class":59},",:]\n",[33,98816,98817],{"class":35,"line":130},[33,98818,95203],{"class":87},[33,98820,98821],{"class":35,"line":146},[33,98822,95567],{"class":117},[33,98824,98825],{"class":35,"line":267},[33,98826,98827],{"class":117},"array([[ 1,  2,  3,  4,  5,  6],\n",[33,98829,98830],{"class":35,"line":275},[33,98831,98832],{"class":117},"       [ 7,  8,  9, 10, 11, 12]])\n",[33,98834,98835],{"class":35,"line":392},[33,98836,95567],{"class":117},[33,98838,98839,98841,98843,98845,98847],{"class":35,"line":406},[33,98840,98772],{"class":59},[33,98842,2036],{"class":39},[33,98844,2676],{"class":59},[33,98846,2111],{"class":39},[33,98848,34893],{"class":59},[33,98850,98851],{"class":35,"line":418},[33,98852,95203],{"class":87},[33,98854,98855],{"class":35,"line":425},[33,98856,95567],{"class":117},[33,98858,98859],{"class":35,"line":1147},[33,98860,98861],{"class":117},"array([[ 2,  3,  4],\n",[33,98863,98864],{"class":35,"line":1329},[33,98865,98866],{"class":117},"       [ 8,  9, 10],\n",[33,98868,98869],{"class":35,"line":1341},[33,98870,98871],{"class":117},"       [14, 15, 16],\n",[33,98873,98874],{"class":35,"line":1348},[33,98875,98876],{"class":117},"       [20, 21, 22]])\n",[33,98878,98879],{"class":35,"line":1529},[33,98880,95567],{"class":117},[33,98882,98883],{"class":35,"line":1546},[33,98884,98885],{"class":87},"#对列行同时进行切片，使用了step参数\n",[33,98887,98888,98891,98893,98896,98898],{"class":35,"line":1551},[33,98889,98890],{"class":59},"a[::",[33,98892,1897],{"class":39},[33,98894,98895],{"class":59},",::",[33,98897,1897],{"class":39},[33,98899,34893],{"class":59},[19,98901,98902],{},"⑤同时获取两个元素",[23,98904,98906],{"className":25,"code":98905,"language":27,"meta":28,"style":28},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[30,98907,98908,98913,98918],{"__ignoreMap":28},[33,98909,98910],{"class":35,"line":36},[33,98911,98912],{"class":87},"#同时获取第三行第二列，第四行第一列\n",[33,98914,98915],{"class":35,"line":43},[33,98916,98917],{"class":87},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[33,98919,98920,98923,98925,98927,98929,98931,98933,98935,98937],{"class":35,"line":130},[33,98921,98922],{"class":59},"a[(",[33,98924,1897],{"class":39},[33,98926,2196],{"class":59},[33,98928,1891],{"class":39},[33,98930,43893],{"class":59},[33,98932,2036],{"class":39},[33,98934,2196],{"class":59},[33,98936,2010],{"class":39},[33,98938,98939],{"class":59},")]\n",[19,98941,98942],{},"⑥切片，对行进行反向获取",[23,98944,98946],{"className":25,"code":98945,"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,98947,98948,98953,98963,98967,98971,98976,98981,98986,98991,98995,99000,99016,99020,99025,99030,99035,99040],{"__ignoreMap":28},[33,98949,98950],{"class":35,"line":36},[33,98951,98952],{"class":87},"#切片 对所有行进行反向获取\n",[33,98954,98955,98957,98959,98961],{"class":35,"line":43},[33,98956,98890],{"class":59},[33,98958,2349],{"class":63},[33,98960,2036],{"class":39},[33,98962,34893],{"class":59},[33,98964,98965],{"class":35,"line":130},[33,98966,95203],{"class":87},[33,98968,98969],{"class":35,"line":146},[33,98970,95567],{"class":117},[33,98972,98973],{"class":35,"line":267},[33,98974,98975],{"class":117},"array([[19, 20, 21, 22, 23, 24],\n",[33,98977,98978],{"class":35,"line":275},[33,98979,98980],{"class":117},"       [13, 14, 15, 16, 17, 18],\n",[33,98982,98983],{"class":35,"line":392},[33,98984,98985],{"class":117},"       [ 7,  8,  9, 10, 11, 12],\n",[33,98987,98988],{"class":35,"line":406},[33,98989,98990],{"class":117},"       [ 1,  2,  3,  4,  5,  6]])\n",[33,98992,98993],{"class":35,"line":418},[33,98994,95567],{"class":117},[33,98996,98997],{"class":35,"line":425},[33,98998,98999],{"class":87},"#对行列都进行反向切片获取\n",[33,99001,99002,99004,99006,99008,99010,99012,99014],{"class":35,"line":1147},[33,99003,98890],{"class":59},[33,99005,2349],{"class":63},[33,99007,2036],{"class":39},[33,99009,98895],{"class":59},[33,99011,2349],{"class":63},[33,99013,2036],{"class":39},[33,99015,34893],{"class":59},[33,99017,99018],{"class":35,"line":1329},[33,99019,95567],{"class":117},[33,99021,99022],{"class":35,"line":1341},[33,99023,99024],{"class":117},"array([[24, 23, 22, 21, 20, 19],\n",[33,99026,99027],{"class":35,"line":1348},[33,99028,99029],{"class":117},"       [18, 17, 16, 15, 14, 13],\n",[33,99031,99032],{"class":35,"line":1529},[33,99033,99034],{"class":117},"       [12, 11, 10,  9,  8,  7],\n",[33,99036,99037],{"class":35,"line":1546},[33,99038,99039],{"class":117},"       [ 6,  5,  4,  3,  2,  1]])\n",[33,99041,99042],{"class":35,"line":1551},[33,99043,95567],{"class":117},[19,99045,99046],{},"⑦修改元素",[23,99048,99050],{"className":25,"code":99049,"language":27,"meta":28,"style":28},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[30,99051,99052,99057,99075,99080],{"__ignoreMap":28},[33,99053,99054],{"class":35,"line":36},[33,99055,99056],{"class":87},"#获取前两行和前两列\n",[33,99058,99059,99062,99064,99066,99068,99071,99073],{"class":35,"line":43},[33,99060,99061],{"class":59},"sub_a",[33,99063,64],{"class":63},[33,99065,98809],{"class":59},[33,99067,1897],{"class":39},[33,99069,99070],{"class":59},",:",[33,99072,1897],{"class":39},[33,99074,34893],{"class":59},[33,99076,99077],{"class":35,"line":130},[33,99078,99079],{"class":87},"#修改sub_a第一个元素的值\n",[33,99081,99082,99085,99087,99089,99091,99093,99095],{"class":35,"line":146},[33,99083,99084],{"class":59},"sub_a[",[33,99086,2010],{"class":39},[33,99088,2196],{"class":59},[33,99090,2010],{"class":39},[33,99092,2756],{"class":59},[33,99094,64],{"class":63},[33,99096,99097],{"class":39},"100\n",[19,99099,99100],{},"⑧数组复制copy()",[23,99102,99104],{"className":25,"code":99103,"language":27,"meta":28,"style":28},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[30,99105,99106,99111,99121,99126],{"__ignoreMap":28},[33,99107,99108],{"class":35,"line":36},[33,99109,99110],{"class":87},"#数组复制\n",[33,99112,99113,99116,99118],{"class":35,"line":43},[33,99114,99115],{"class":59},"copy_a",[33,99117,64],{"class":63},[33,99119,99120],{"class":59},"np.copy(sub_a)\n",[33,99122,99123],{"class":35,"line":130},[33,99124,99125],{"class":87},"#修改copy_a后不影响原数组\n",[33,99127,99128,99131,99133,99135,99137,99139,99141],{"class":35,"line":146},[33,99129,99130],{"class":59},"copy_a[",[33,99132,2010],{"class":39},[33,99134,2196],{"class":59},[33,99136,2010],{"class":39},[33,99138,2756],{"class":59},[33,99140,64],{"class":63},[33,99142,99097],{"class":39},[19,99144,99145],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1729,99147,99148],{},"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":43,"depth":43,"links":99150},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98667,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99157,"title":99158,"body":99159,"description":1751,"extension":1752,"meta":99651,"navigation":126,"path":99652,"seo":99653,"stem":99654,"__hash__":99655},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99160,"toc":99643},[99161,99164,99168,99171,99174,99227,99230,99255,99258,99277,99297,99300,99316,99320,99366,99370,99412,99416,99419,99422,99425,99428,99431,99493,99553,99557,99560,99617,99621,99626,99635,99640],[10,99162,99158],{"id":99163},"_5改变数组的维度",[14,99165,99167],{"id":99166},"_51-使用reshape","5.1 使用reshape()",[19,99169,99170],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99172,99173],{},"①一维数组转换为二维数组",[23,99175,99177],{"className":25,"code":99176,"language":27,"meta":28,"style":28},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[30,99178,99179,99195,99200,99205,99210],{"__ignoreMap":28},[33,99180,99181,99183,99185,99187,99189,99191,99193],{"class":35,"line":36},[33,99182,2057],{"class":59},[33,99184,64],{"class":63},[33,99186,94641],{"class":59},[33,99188,2036],{"class":39},[33,99190,2196],{"class":59},[33,99192,2340],{"class":39},[33,99194,157],{"class":59},[33,99196,99197],{"class":35,"line":43},[33,99198,99199],{"class":87},"#将一维数组进行转换\n",[33,99201,99202],{"class":35,"line":130},[33,99203,99204],{"class":87},"#注意点：元素个数不可以变\n",[33,99206,99207],{"class":35,"line":146},[33,99208,99209],{"class":87},"#转换维度要保持一致，不一致就异常！！！\n",[33,99211,99212,99214,99216,99219,99221,99223,99225],{"class":35,"line":267},[33,99213,94945],{"class":59},[33,99215,64],{"class":63},[33,99217,99218],{"class":59},"a.reshape(",[33,99220,1897],{"class":39},[33,99222,2196],{"class":59},[33,99224,2162],{"class":39},[33,99226,157],{"class":59},[19,99228,99229],{},"②一维数组转换为三维数组",[23,99231,99233],{"className":25,"code":99232,"language":27,"meta":28,"style":28},"aaa=a.reshape(2,3,2)\n",[30,99234,99235],{"__ignoreMap":28},[33,99236,99237,99239,99241,99243,99245,99247,99249,99251,99253],{"class":35,"line":36},[33,99238,97160],{"class":59},[33,99240,64],{"class":63},[33,99242,99218],{"class":59},[33,99244,1897],{"class":39},[33,99246,2196],{"class":59},[33,99248,1891],{"class":39},[33,99250,2196],{"class":59},[33,99252,1897],{"class":39},[33,99254,157],{"class":59},[19,99256,99257],{},"③二维数组转化为一维数组",[23,99259,99261],{"className":25,"code":99260,"language":27,"meta":28,"style":28},"#知道元素个数：\naa.reshape(12)\n",[30,99262,99263,99268],{"__ignoreMap":28},[33,99264,99265],{"class":35,"line":36},[33,99266,99267],{"class":87},"#知道元素个数：\n",[33,99269,99270,99273,99275],{"class":35,"line":43},[33,99271,99272],{"class":59},"aa.reshape(",[33,99274,2315],{"class":39},[33,99276,157],{"class":59},[23,99278,99280],{"className":25,"code":99279,"language":27,"meta":28,"style":28},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[30,99281,99282,99287],{"__ignoreMap":28},[33,99283,99284],{"class":35,"line":36},[33,99285,99286],{"class":87},"#不知道元素个数，参数传递-1\n",[33,99288,99289,99291,99293,99295],{"class":35,"line":43},[33,99290,99272],{"class":59},[33,99292,2349],{"class":63},[33,99294,2036],{"class":39},[33,99296,157],{"class":59},[19,99298,99299],{},"④三维数组转换为一维数组",[23,99301,99303],{"className":25,"code":99302,"language":27,"meta":28,"style":28},"aaa.reshape(-1)\n",[30,99304,99305],{"__ignoreMap":28},[33,99306,99307,99310,99312,99314],{"class":35,"line":36},[33,99308,99309],{"class":59},"aaa.reshape(",[33,99311,2349],{"class":63},[33,99313,2036],{"class":39},[33,99315,157],{"class":59},[14,99317,99319],{"id":99318},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[23,99321,99323],{"className":25,"code":99322,"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,99324,99325,99352,99357,99361],{"__ignoreMap":28},[33,99326,99327,99329,99331,99333,99335,99337,99339,99341,99343,99345,99347,99349],{"class":35,"line":36},[33,99328,94945],{"class":59},[33,99330,64],{"class":63},[33,99332,94641],{"class":59},[33,99334,2036],{"class":39},[33,99336,2196],{"class":59},[33,99338,2340],{"class":39},[33,99340,94646],{"class":59},[33,99342,1897],{"class":39},[33,99344,2196],{"class":59},[33,99346,2162],{"class":39},[33,99348,2247],{"class":59},[33,99350,99351],{"class":87},"#转换为2行6列的数组\n",[33,99353,99354],{"class":35,"line":43},[33,99355,99356],{"class":59},"aa.revel()\n",[33,99358,99359],{"class":35,"line":130},[33,99360,95203],{"class":87},[33,99362,99363],{"class":35,"line":146},[33,99364,99365],{"class":87},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99367,99369],{"id":99368},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[23,99371,99373],{"className":25,"code":99372,"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,99374,99375,99399,99404,99408],{"__ignoreMap":28},[33,99376,99377,99379,99381,99383,99385,99387,99389,99391,99393,99395,99397],{"class":35,"line":36},[33,99378,94945],{"class":59},[33,99380,64],{"class":63},[33,99382,94641],{"class":59},[33,99384,2036],{"class":39},[33,99386,2196],{"class":59},[33,99388,2340],{"class":39},[33,99390,94646],{"class":59},[33,99392,1897],{"class":39},[33,99394,2196],{"class":59},[33,99396,2162],{"class":39},[33,99398,157],{"class":59},[33,99400,99401],{"class":35,"line":43},[33,99402,99403],{"class":59},"aa.flatten()\n",[33,99405,99406],{"class":35,"line":130},[33,99407,95203],{"class":87},[33,99409,99410],{"class":35,"line":146},[33,99411,99365],{"class":87},[14,99413,99415],{"id":99414},"_54-使用resize","5.4 使用resize()",[19,99417,99418],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99420,99421],{},"通过resize方法可以改变数组的维度",[19,99423,99424],{},"#resize修改数组维度",[19,99426,99427],{},"#以元组的形式指定形状",[19,99429,99430],{},"#改变的是原数组",[23,99432,99434],{"className":25,"code":99433,"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,99435,99436,99452,99472,99485,99489],{"__ignoreMap":28},[33,99437,99438,99440,99442,99444,99446,99448,99450],{"class":35,"line":36},[33,99439,2057],{"class":59},[33,99441,64],{"class":63},[33,99443,94641],{"class":59},[33,99445,2036],{"class":39},[33,99447,2196],{"class":59},[33,99449,2340],{"class":39},[33,99451,157],{"class":59},[33,99453,99454,99457,99459,99461,99463,99465,99467,99469],{"class":35,"line":43},[33,99455,99456],{"class":59},"a.shape",[33,99458,64],{"class":63},[33,99460,109],{"class":59},[33,99462,1897],{"class":39},[33,99464,2196],{"class":59},[33,99466,2162],{"class":39},[33,99468,2247],{"class":59},[33,99470,99471],{"class":87},"#改变了原数组\n",[33,99473,99474,99476,99478,99481,99483],{"class":35,"line":130},[33,99475,2057],{"class":59},[33,99477,64],{"class":63},[33,99479,99480],{"class":59},"resize((",[33,99482,2315],{"class":39},[33,99484,121],{"class":59},[33,99486,99487],{"class":35,"line":146},[33,99488,95203],{"class":87},[33,99490,99491],{"class":35,"line":267},[33,99492,99365],{"class":87},[23,99494,99496],{"className":25,"code":99495,"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,99497,99498,99511,99515,99519,99524,99529,99534,99539,99544,99549],{"__ignoreMap":28},[33,99499,99500,99503,99505,99507,99509],{"class":35,"line":36},[33,99501,99502],{"class":59},"a.resize((",[33,99504,2162],{"class":39},[33,99506,2196],{"class":59},[33,99508,1897],{"class":39},[33,99510,121],{"class":59},[33,99512,99513],{"class":35,"line":43},[33,99514,95203],{"class":87},[33,99516,99517],{"class":35,"line":130},[33,99518,95567],{"class":117},[33,99520,99521],{"class":35,"line":146},[33,99522,99523],{"class":117},"array([[ 1,  2],\n",[33,99525,99526],{"class":35,"line":267},[33,99527,99528],{"class":117},"       [ 3,  4],\n",[33,99530,99531],{"class":35,"line":275},[33,99532,99533],{"class":117},"       [ 5,  6],\n",[33,99535,99536],{"class":35,"line":392},[33,99537,99538],{"class":117},"       [ 7,  8],\n",[33,99540,99541],{"class":35,"line":406},[33,99542,99543],{"class":117},"       [ 9, 10],\n",[33,99545,99546],{"class":35,"line":418},[33,99547,99548],{"class":117},"       [11, 12]])\n",[33,99550,99551],{"class":35,"line":425},[33,99552,95567],{"class":117},[14,99554,99556],{"id":99555},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99558,99559],{},"改变了原数组",[23,99561,99563],{"className":25,"code":99562,"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,99564,99565,99581,99597,99601,99605,99609,99613],{"__ignoreMap":28},[33,99566,99567,99569,99571,99573,99575,99577,99579],{"class":35,"line":36},[33,99568,2057],{"class":59},[33,99570,64],{"class":63},[33,99572,94641],{"class":59},[33,99574,2036],{"class":39},[33,99576,2196],{"class":59},[33,99578,2340],{"class":39},[33,99580,157],{"class":59},[33,99582,99583,99585,99587,99589,99591,99593,99595],{"class":35,"line":43},[33,99584,99456],{"class":59},[33,99586,64],{"class":63},[33,99588,109],{"class":59},[33,99590,1897],{"class":39},[33,99592,2196],{"class":59},[33,99594,2162],{"class":39},[33,99596,157],{"class":59},[33,99598,99599],{"class":35,"line":130},[33,99600,95203],{"class":87},[33,99602,99603],{"class":35,"line":146},[33,99604,95567],{"class":117},[33,99606,99607],{"class":35,"line":267},[33,99608,98827],{"class":117},[33,99610,99611],{"class":35,"line":275},[33,99612,98832],{"class":117},[33,99614,99615],{"class":35,"line":392},[33,99616,95567],{"class":117},[14,99618,99620],{"id":99619},"_56-重要比较","5.6 重要比较：",[19,99622,99623],{},[3145,99624],{"alt":28,"src":99625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99627,99628,99629,99631,99632,99634],{},"口诀：NumPy 函数要么用 ",[30,99630,97602],{},"，要么用 ",[30,99633,33146],{},"，创建结构用 shape，造数据用 size",[19,99636,99637],{},[3145,99638],{"alt":28,"src":99639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1729,99641,99642],{},"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":43,"depth":43,"links":99644},[99645,99646,99647,99648,99649,99650],{"id":99166,"depth":43,"text":99167},{"id":99318,"depth":43,"text":99319},{"id":99368,"depth":43,"text":99369},{"id":99414,"depth":43,"text":99415},{"id":99555,"depth":43,"text":99556},{"id":99619,"depth":43,"text":99620},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99158,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99657,"title":99658,"body":99659,"description":1751,"extension":1752,"meta":100731,"navigation":126,"path":100732,"seo":100733,"stem":100734,"__hash__":100735},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99660,"toc":100725},[99661,99664,99668,99671,99674,99677,99742,99745,99785,99788,99870,99873,99878,99900,99902,99907,99912,99915,99918,100073,100076,100278,100282,100285,100288,100356,100358,100363,100366,100369,100449,100453,100456,100458,100531,100533,100538,100540,100620,100624,100627,100630,100633,100636,100639,100642,100722],[10,99662,99658],{"id":99663},"_6数组的拼接",[14,99665,99667],{"id":99666},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99669,99670],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99672,99673],{},"函数内部传两个数列构成的数列或者元组",[19,99675,99676],{},"①一维数组的拼接",[23,99678,99680],{"className":25,"code":99679,"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,99681,99682,99702,99722,99727,99732,99737],{"__ignoreMap":28},[33,99683,99684,99686,99688,99690,99692,99694,99696,99698,99700],{"class":35,"line":36},[33,99685,2057],{"class":59},[33,99687,64],{"class":63},[33,99689,94663],{"class":59},[33,99691,2036],{"class":39},[33,99693,2196],{"class":59},[33,99695,1897],{"class":39},[33,99697,2196],{"class":59},[33,99699,1891],{"class":39},[33,99701,6318],{"class":59},[33,99703,99704,99706,99708,99710,99712,99714,99716,99718,99720],{"class":35,"line":43},[33,99705,2081],{"class":59},[33,99707,64],{"class":63},[33,99709,94663],{"class":59},[33,99711,2111],{"class":39},[33,99713,2196],{"class":59},[33,99715,2137],{"class":39},[33,99717,2196],{"class":59},[33,99719,2162],{"class":39},[33,99721,6318],{"class":59},[33,99723,99724],{"class":35,"line":130},[33,99725,99726],{"class":87},"#调用concatenate进行数组拼接\n",[33,99728,99729],{"class":35,"line":146},[33,99730,99731],{"class":59},"np.concatenate((a,b))\n",[33,99733,99734],{"class":35,"line":267},[33,99735,99736],{"class":87},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[33,99738,99739],{"class":35,"line":275},[33,99740,99741],{"class":87},"#np.concatenate([a,b])\n",[19,99743,99744],{},"②一维多个数组拼接",[23,99746,99748],{"className":25,"code":99747,"language":27,"meta":28,"style":28},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[30,99749,99750,99755,99775,99780],{"__ignoreMap":28},[33,99751,99752],{"class":35,"line":36},[33,99753,99754],{"class":87},"#也可以多个数组进行拼接\n",[33,99756,99757,99759,99761,99763,99765,99767,99769,99771,99773],{"class":35,"line":43},[33,99758,2106],{"class":59},[33,99760,64],{"class":63},[33,99762,94663],{"class":59},[33,99764,2264],{"class":39},[33,99766,2196],{"class":59},[33,99768,2289],{"class":39},[33,99770,2196],{"class":59},[33,99772,2340],{"class":39},[33,99774,6318],{"class":59},[33,99776,99777],{"class":35,"line":130},[33,99778,99779],{"class":59},"c\n",[33,99781,99782],{"class":35,"line":146},[33,99783,99784],{"class":59},"np.concatenate((a,b,c))\n",[19,99786,99787],{},"③二维数组拼接",[23,99789,99791],{"className":25,"code":99790,"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,99792,99793,99798,99822,99847,99852,99857],{"__ignoreMap":28},[33,99794,99795],{"class":35,"line":36},[33,99796,99797],{"class":87},"#二维数组使用concatenate进行拼接\n",[33,99799,99800,99802,99804,99806,99808,99810,99812,99814,99816,99818,99820],{"class":35,"line":43},[33,99801,94945],{"class":59},[33,99803,64],{"class":63},[33,99805,94641],{"class":59},[33,99807,2036],{"class":39},[33,99809,2196],{"class":59},[33,99811,2340],{"class":39},[33,99813,94646],{"class":59},[33,99815,1891],{"class":39},[33,99817,2196],{"class":59},[33,99819,2111],{"class":39},[33,99821,157],{"class":59},[33,99823,99824,99827,99829,99831,99833,99835,99837,99839,99841,99843,99845],{"class":35,"line":130},[33,99825,99826],{"class":59},"bb",[33,99828,64],{"class":63},[33,99830,94641],{"class":59},[33,99832,2155],{"class":39},[33,99834,2196],{"class":59},[33,99836,2459],{"class":39},[33,99838,94646],{"class":59},[33,99840,1891],{"class":39},[33,99842,2196],{"class":59},[33,99844,2111],{"class":39},[33,99846,157],{"class":59},[33,99848,99849],{"class":35,"line":146},[33,99850,99851],{"class":87},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[33,99853,99854],{"class":35,"line":267},[33,99855,99856],{"class":87},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[33,99858,99859,99862,99864,99866,99868],{"class":35,"line":275},[33,99860,99861],{"class":59},"np.concatenate((aa,bb),",[33,99863,49159],{"class":6877},[33,99865,64],{"class":63},[33,99867,2010],{"class":39},[33,99869,157],{"class":59},[19,99871,99872],{},"结果：",[19,99874,99875],{},[3145,99876],{"alt":28,"src":99877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[23,99879,99881],{"className":25,"code":99880,"language":27,"meta":28,"style":28},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[30,99882,99883,99888],{"__ignoreMap":28},[33,99884,99885],{"class":35,"line":36},[33,99886,99887],{"class":87},"#指定axis为1进行拼接\n",[33,99889,99890,99892,99894,99896,99898],{"class":35,"line":43},[33,99891,99861],{"class":59},[33,99893,49159],{"class":6877},[33,99895,64],{"class":63},[33,99897,2036],{"class":39},[33,99899,157],{"class":59},[19,99901,99872],{},[19,99903,99904],{},[3145,99905],{"alt":28,"src":99906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99908,99909],{},[1968,99910,99911],{},"二维数组总结：0竖着方向，1横着方向",[19,99913,99914],{},"④三维数组拼接",[19,99916,99917],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[23,99919,99921],{"className":25,"code":99920,"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,99922,99923,99928,99956,99986,99991,100008,100013,100018,100023,100040,100045,100050,100055,100068],{"__ignoreMap":28},[33,99924,99925],{"class":35,"line":36},[33,99926,99927],{"class":87},"#两个三行六列\n",[33,99929,99930,99932,99934,99936,99938,99940,99942,99944,99946,99948,99950,99952,99954],{"class":35,"line":43},[33,99931,97160],{"class":59},[33,99933,64],{"class":63},[33,99935,94641],{"class":59},[33,99937,2036],{"class":39},[33,99939,2196],{"class":59},[33,99941,2143],{"class":39},[33,99943,94646],{"class":59},[33,99945,1897],{"class":39},[33,99947,2196],{"class":59},[33,99949,1891],{"class":39},[33,99951,2196],{"class":59},[33,99953,2162],{"class":39},[33,99955,157],{"class":59},[33,99957,99958,99961,99963,99965,99967,99969,99972,99974,99976,99978,99980,99982,99984],{"class":35,"line":130},[33,99959,99960],{"class":59},"bbb",[33,99962,64],{"class":63},[33,99964,94641],{"class":59},[33,99966,2155],{"class":39},[33,99968,2196],{"class":59},[33,99970,99971],{"class":39},"137",[33,99973,94646],{"class":59},[33,99975,1897],{"class":39},[33,99977,2196],{"class":59},[33,99979,1891],{"class":39},[33,99981,2196],{"class":59},[33,99983,2162],{"class":39},[33,99985,157],{"class":59},[33,99987,99988],{"class":35,"line":146},[33,99989,99990],{"class":87},"#axis=0\n",[33,99992,99993,99995,99997,100000,100002,100004,100006],{"class":35,"line":267},[33,99994,2512],{"class":59},[33,99996,64],{"class":63},[33,99998,99999],{"class":59},"np.concatenate((aaa,bbb),",[33,100001,49159],{"class":6877},[33,100003,64],{"class":63},[33,100005,2010],{"class":39},[33,100007,157],{"class":59},[33,100009,100010],{"class":35,"line":275},[33,100011,100012],{"class":59},"s.shape\n",[33,100014,100015],{"class":35,"line":392},[33,100016,100017],{"class":87},"#输出：(4,3,6)\n",[33,100019,100020],{"class":35,"line":406},[33,100021,100022],{"class":87},"#axis=1\n",[33,100024,100025,100028,100030,100032,100034,100036,100038],{"class":35,"line":418},[33,100026,100027],{"class":59},"ss",[33,100029,64],{"class":63},[33,100031,99999],{"class":59},[33,100033,49159],{"class":6877},[33,100035,64],{"class":63},[33,100037,2036],{"class":39},[33,100039,157],{"class":59},[33,100041,100042],{"class":35,"line":425},[33,100043,100044],{"class":59},"ss.shape\n",[33,100046,100047],{"class":35,"line":1147},[33,100048,100049],{"class":87},"#输出：(2,6,6)\n",[33,100051,100052],{"class":35,"line":1329},[33,100053,100054],{"class":87},"#axis=2\n",[33,100056,100057,100059,100061,100063,100065],{"class":35,"line":1341},[33,100058,99999],{"class":59},[33,100060,49159],{"class":6877},[33,100062,64],{"class":63},[33,100064,1897],{"class":39},[33,100066,100067],{"class":59},").shape\n",[33,100069,100070],{"class":35,"line":1348},[33,100071,100072],{"class":87},"#输出：（2，3，12）\n",[19,100074,100075],{},"⑤四维数组拼接",[23,100077,100079],{"className":25,"code":100078,"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,100080,100081,100085,100113,100141,100166,100192,100196,100209,100214,100218,100230,100235,100239,100251,100256,100261,100273],{"__ignoreMap":28},[33,100082,100083],{"class":35,"line":36},[33,100084,99927],{"class":87},[33,100086,100087,100089,100091,100093,100095,100097,100099,100101,100103,100105,100107,100109,100111],{"class":35,"line":43},[33,100088,97160],{"class":59},[33,100090,64],{"class":63},[33,100092,94641],{"class":59},[33,100094,2036],{"class":39},[33,100096,2196],{"class":59},[33,100098,2143],{"class":39},[33,100100,94646],{"class":59},[33,100102,1897],{"class":39},[33,100104,2196],{"class":59},[33,100106,1891],{"class":39},[33,100108,2196],{"class":59},[33,100110,2162],{"class":39},[33,100112,157],{"class":59},[33,100114,100115,100117,100119,100121,100123,100125,100127,100129,100131,100133,100135,100137,100139],{"class":35,"line":130},[33,100116,99960],{"class":59},[33,100118,64],{"class":63},[33,100120,94641],{"class":59},[33,100122,2155],{"class":39},[33,100124,2196],{"class":59},[33,100126,99971],{"class":39},[33,100128,94646],{"class":59},[33,100130,1897],{"class":39},[33,100132,2196],{"class":59},[33,100134,1891],{"class":39},[33,100136,2196],{"class":59},[33,100138,2162],{"class":39},[33,100140,157],{"class":59},[33,100142,100143,100146,100148,100150,100152,100154,100156,100158,100160,100162,100164],{"class":35,"line":146},[33,100144,100145],{"class":59},"aaaa",[33,100147,64],{"class":63},[33,100149,99309],{"class":59},[33,100151,1897],{"class":39},[33,100153,2196],{"class":59},[33,100155,1891],{"class":39},[33,100157,2196],{"class":59},[33,100159,1891],{"class":39},[33,100161,2196],{"class":59},[33,100163,1897],{"class":39},[33,100165,157],{"class":59},[33,100167,100168,100171,100173,100176,100178,100180,100182,100184,100186,100188,100190],{"class":35,"line":267},[33,100169,100170],{"class":59},"bbbb",[33,100172,64],{"class":63},[33,100174,100175],{"class":59},"bbb.reshape(",[33,100177,1897],{"class":39},[33,100179,2196],{"class":59},[33,100181,1891],{"class":39},[33,100183,2196],{"class":59},[33,100185,1891],{"class":39},[33,100187,2196],{"class":59},[33,100189,1897],{"class":39},[33,100191,157],{"class":59},[33,100193,100194],{"class":35,"line":275},[33,100195,99990],{"class":87},[33,100197,100198,100201,100203,100205,100207],{"class":35,"line":392},[33,100199,100200],{"class":59},"np.concatenate((aaaa,bbbb),",[33,100202,49159],{"class":6877},[33,100204,64],{"class":63},[33,100206,2010],{"class":39},[33,100208,100067],{"class":59},[33,100210,100211],{"class":35,"line":406},[33,100212,100213],{"class":87},"#结果：（4，3，3，2）\n",[33,100215,100216],{"class":35,"line":418},[33,100217,100022],{"class":87},[33,100219,100220,100222,100224,100226,100228],{"class":35,"line":425},[33,100221,100200],{"class":59},[33,100223,49159],{"class":6877},[33,100225,64],{"class":63},[33,100227,2036],{"class":39},[33,100229,100067],{"class":59},[33,100231,100232],{"class":35,"line":1147},[33,100233,100234],{"class":87},"#结果：（2，6，3，2）\n",[33,100236,100237],{"class":35,"line":1329},[33,100238,100054],{"class":87},[33,100240,100241,100243,100245,100247,100249],{"class":35,"line":1341},[33,100242,100200],{"class":59},[33,100244,49159],{"class":6877},[33,100246,64],{"class":63},[33,100248,1897],{"class":39},[33,100250,100067],{"class":59},[33,100252,100253],{"class":35,"line":1348},[33,100254,100255],{"class":87},"#结果：（2，3，6，2）\n",[33,100257,100258],{"class":35,"line":1529},[33,100259,100260],{"class":87},"#axis=3\n",[33,100262,100263,100265,100267,100269,100271],{"class":35,"line":1546},[33,100264,100200],{"class":59},[33,100266,49159],{"class":6877},[33,100268,64],{"class":63},[33,100270,1891],{"class":39},[33,100272,100067],{"class":59},[33,100274,100275],{"class":35,"line":1551},[33,100276,100277],{"class":87},"#结果：（2，3，3，4）\n",[14,100279,100281],{"id":100280},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100283,100284],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100286,100287],{},"①二维数组",[23,100289,100291],{"className":25,"code":100290,"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,100292,100293,100317,100341,100346,100351],{"__ignoreMap":28},[33,100294,100295,100297,100299,100301,100303,100305,100307,100309,100311,100313,100315],{"class":35,"line":36},[33,100296,94945],{"class":59},[33,100298,64],{"class":63},[33,100300,94641],{"class":59},[33,100302,2036],{"class":39},[33,100304,2196],{"class":59},[33,100306,2340],{"class":39},[33,100308,94646],{"class":59},[33,100310,1891],{"class":39},[33,100312,2196],{"class":59},[33,100314,2111],{"class":39},[33,100316,157],{"class":59},[33,100318,100319,100321,100323,100325,100327,100329,100331,100333,100335,100337,100339],{"class":35,"line":43},[33,100320,99826],{"class":59},[33,100322,64],{"class":63},[33,100324,94641],{"class":59},[33,100326,2155],{"class":39},[33,100328,2196],{"class":59},[33,100330,2459],{"class":39},[33,100332,94646],{"class":59},[33,100334,1891],{"class":39},[33,100336,2196],{"class":59},[33,100338,2111],{"class":39},[33,100340,157],{"class":59},[33,100342,100343],{"class":35,"line":130},[33,100344,100345],{"class":59},"np.hstack((aa,bb))\n",[33,100347,100348],{"class":35,"line":146},[33,100349,100350],{"class":87},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[33,100352,100353],{"class":35,"line":267},[33,100354,100355],{"class":87},"#np.hstack([aa,bb])\n",[19,100357,99872],{},[19,100359,100360],{},[3145,100361],{"alt":28,"src":100362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100364,100365],{},"等效于concatenate()函数中axis=1时的情况",[19,100367,100368],{},"②三维数组",[23,100370,100372],{"className":25,"code":100371,"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,100373,100374,100378,100406,100434,100439,100444],{"__ignoreMap":28},[33,100375,100376],{"class":35,"line":36},[33,100377,99927],{"class":87},[33,100379,100380,100382,100384,100386,100388,100390,100392,100394,100396,100398,100400,100402,100404],{"class":35,"line":43},[33,100381,97160],{"class":59},[33,100383,64],{"class":63},[33,100385,94641],{"class":59},[33,100387,2036],{"class":39},[33,100389,2196],{"class":59},[33,100391,2143],{"class":39},[33,100393,94646],{"class":59},[33,100395,1897],{"class":39},[33,100397,2196],{"class":59},[33,100399,1891],{"class":39},[33,100401,2196],{"class":59},[33,100403,2162],{"class":39},[33,100405,157],{"class":59},[33,100407,100408,100410,100412,100414,100416,100418,100420,100422,100424,100426,100428,100430,100432],{"class":35,"line":130},[33,100409,99960],{"class":59},[33,100411,64],{"class":63},[33,100413,94641],{"class":59},[33,100415,2155],{"class":39},[33,100417,2196],{"class":59},[33,100419,99971],{"class":39},[33,100421,94646],{"class":59},[33,100423,1897],{"class":39},[33,100425,2196],{"class":59},[33,100427,1891],{"class":39},[33,100429,2196],{"class":59},[33,100431,2162],{"class":39},[33,100433,157],{"class":59},[33,100435,100436],{"class":35,"line":146},[33,100437,100438],{"class":87},"#使用hstack\n",[33,100440,100441],{"class":35,"line":267},[33,100442,100443],{"class":59},"np.hstack((aaa,bbb)).shape\n",[33,100445,100446],{"class":35,"line":275},[33,100447,100448],{"class":87},"#输出：（2，6，6）\n",[14,100450,100452],{"id":100451},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100454,100455],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100457,100287],{},[23,100459,100461],{"className":25,"code":100460,"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,100462,100463,100487,100511,100516,100521,100526],{"__ignoreMap":28},[33,100464,100465,100467,100469,100471,100473,100475,100477,100479,100481,100483,100485],{"class":35,"line":36},[33,100466,94945],{"class":59},[33,100468,64],{"class":63},[33,100470,94641],{"class":59},[33,100472,2036],{"class":39},[33,100474,2196],{"class":59},[33,100476,2340],{"class":39},[33,100478,94646],{"class":59},[33,100480,1891],{"class":39},[33,100482,2196],{"class":59},[33,100484,2111],{"class":39},[33,100486,157],{"class":59},[33,100488,100489,100491,100493,100495,100497,100499,100501,100503,100505,100507,100509],{"class":35,"line":43},[33,100490,99826],{"class":59},[33,100492,64],{"class":63},[33,100494,94641],{"class":59},[33,100496,2155],{"class":39},[33,100498,2196],{"class":59},[33,100500,2459],{"class":39},[33,100502,94646],{"class":59},[33,100504,1891],{"class":39},[33,100506,2196],{"class":59},[33,100508,2111],{"class":39},[33,100510,157],{"class":59},[33,100512,100513],{"class":35,"line":130},[33,100514,100515],{"class":87},"#vstack 垂直方向进行堆叠\n",[33,100517,100518],{"class":35,"line":146},[33,100519,100520],{"class":59},"np.vstack((aa,bb))\n",[33,100522,100523],{"class":35,"line":267},[33,100524,100525],{"class":87},"#与hstack传的参数类似，等价于：\n",[33,100527,100528],{"class":35,"line":275},[33,100529,100530],{"class":59},"np.vstack([aa,bb])\n",[19,100532,99872],{},[19,100534,100535],{},[3145,100536],{"alt":28,"src":100537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100539,100368],{},[23,100541,100543],{"className":25,"code":100542,"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,100544,100545,100549,100577,100605,100610,100615],{"__ignoreMap":28},[33,100546,100547],{"class":35,"line":36},[33,100548,99927],{"class":87},[33,100550,100551,100553,100555,100557,100559,100561,100563,100565,100567,100569,100571,100573,100575],{"class":35,"line":43},[33,100552,97160],{"class":59},[33,100554,64],{"class":63},[33,100556,94641],{"class":59},[33,100558,2036],{"class":39},[33,100560,2196],{"class":59},[33,100562,2143],{"class":39},[33,100564,94646],{"class":59},[33,100566,1897],{"class":39},[33,100568,2196],{"class":59},[33,100570,1891],{"class":39},[33,100572,2196],{"class":59},[33,100574,2162],{"class":39},[33,100576,157],{"class":59},[33,100578,100579,100581,100583,100585,100587,100589,100591,100593,100595,100597,100599,100601,100603],{"class":35,"line":130},[33,100580,99960],{"class":59},[33,100582,64],{"class":63},[33,100584,94641],{"class":59},[33,100586,2155],{"class":39},[33,100588,2196],{"class":59},[33,100590,99971],{"class":39},[33,100592,94646],{"class":59},[33,100594,1897],{"class":39},[33,100596,2196],{"class":59},[33,100598,1891],{"class":39},[33,100600,2196],{"class":59},[33,100602,2162],{"class":39},[33,100604,157],{"class":59},[33,100606,100607],{"class":35,"line":146},[33,100608,100609],{"class":87},"#使用vstack\n",[33,100611,100612],{"class":35,"line":267},[33,100613,100614],{"class":59},"np.vstack((aaa,bbb)).shape\n",[33,100616,100617],{"class":35,"line":275},[33,100618,100619],{"class":87},"#输出：（4，3，6）\n",[14,100621,100623],{"id":100622},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100625,100626],{},"该方法是三维数组特有的方法",[19,100628,100629],{},"也就是说",[19,100631,100632],{},"一维数组拼接方法用：concatenate()",[19,100634,100635],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100637,100638],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100640,100641],{},"四维数组及多维数组只能用concatenate进行拼接",[23,100643,100645],{"className":25,"code":100644,"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,100646,100647,100651,100679,100707,100712,100717],{"__ignoreMap":28},[33,100648,100649],{"class":35,"line":36},[33,100650,99927],{"class":87},[33,100652,100653,100655,100657,100659,100661,100663,100665,100667,100669,100671,100673,100675,100677],{"class":35,"line":43},[33,100654,97160],{"class":59},[33,100656,64],{"class":63},[33,100658,94641],{"class":59},[33,100660,2036],{"class":39},[33,100662,2196],{"class":59},[33,100664,2143],{"class":39},[33,100666,94646],{"class":59},[33,100668,1897],{"class":39},[33,100670,2196],{"class":59},[33,100672,1891],{"class":39},[33,100674,2196],{"class":59},[33,100676,2162],{"class":39},[33,100678,157],{"class":59},[33,100680,100681,100683,100685,100687,100689,100691,100693,100695,100697,100699,100701,100703,100705],{"class":35,"line":130},[33,100682,99960],{"class":59},[33,100684,64],{"class":63},[33,100686,94641],{"class":59},[33,100688,2155],{"class":39},[33,100690,2196],{"class":59},[33,100692,99971],{"class":39},[33,100694,94646],{"class":59},[33,100696,1897],{"class":39},[33,100698,2196],{"class":59},[33,100700,1891],{"class":39},[33,100702,2196],{"class":59},[33,100704,2162],{"class":39},[33,100706,157],{"class":59},[33,100708,100709],{"class":35,"line":146},[33,100710,100711],{"class":87},"#使用dstack\n",[33,100713,100714],{"class":35,"line":267},[33,100715,100716],{"class":59},"np.dstack((aaa,bbb)).shape\n",[33,100718,100719],{"class":35,"line":275},[33,100720,100721],{"class":87},"#结果：（2，3，12）\n",[1729,100723,100724],{},"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":43,"depth":43,"links":100726},[100727,100728,100729,100730],{"id":99666,"depth":43,"text":99667},{"id":100280,"depth":43,"text":100281},{"id":100451,"depth":43,"text":100452},{"id":100622,"depth":43,"text":100623},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99658,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100737,"title":100738,"body":100739,"description":1751,"extension":1752,"meta":101014,"navigation":126,"path":101015,"seo":101016,"stem":101017,"__hash__":101018},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100740,"toc":101012},[100741,100744,100747,100841,100844,100847,100850,100853,100856,100859,100862,100865,101009],[10,100742,100738],{"id":100743},"_7数组转置",[19,100745,100746],{},"使用transpose()函数",[23,100748,100750],{"className":25,"code":100749,"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,100751,100752,100762,100786,100791,100796,100801,100806,100814,100818,100822,100827,100832,100837],{"__ignoreMap":28},[33,100753,100754,100756,100758,100760],{"class":35,"line":36},[33,100755,32045],{"class":63},[33,100757,33030],{"class":59},[33,100759,33033],{"class":63},[33,100761,33036],{"class":59},[33,100763,100764,100766,100768,100770,100772,100774,100776,100778,100780,100782,100784],{"class":35,"line":43},[33,100765,2057],{"class":59},[33,100767,64],{"class":63},[33,100769,33367],{"class":59},[33,100771,2036],{"class":39},[33,100773,2196],{"class":59},[33,100775,2340],{"class":39},[33,100777,94646],{"class":59},[33,100779,2111],{"class":39},[33,100781,2196],{"class":59},[33,100783,1891],{"class":39},[33,100785,157],{"class":59},[33,100787,100788],{"class":35,"line":130},[33,100789,100790],{"class":87},"#二维数组转置\n",[33,100792,100793],{"class":35,"line":146},[33,100794,100795],{"class":87},"#调用transpose()函数\n",[33,100797,100798],{"class":35,"line":267},[33,100799,100800],{"class":59},"a.transpose()\n",[33,100802,100803],{"class":35,"line":275},[33,100804,100805],{"class":87},"#对于二维数组也可以采用.T来实现\n",[33,100807,100808,100811],{"class":35,"line":392},[33,100809,100810],{"class":59},"a.T",[33,100812,100813],{"class":87},"#与上述代码一样\n",[33,100815,100816],{"class":35,"line":406},[33,100817,95203],{"class":87},[33,100819,100820],{"class":35,"line":418},[33,100821,95567],{"class":117},[33,100823,100824],{"class":35,"line":425},[33,100825,100826],{"class":117},"array([[ 1,  4,  7, 10],\n",[33,100828,100829],{"class":35,"line":1147},[33,100830,100831],{"class":117},"       [ 2,  5,  8, 11],\n",[33,100833,100834],{"class":35,"line":1329},[33,100835,100836],{"class":117},"       [ 3,  6,  9, 12]])\n",[33,100838,100839],{"class":35,"line":1341},[33,100840,95567],{"class":117},[19,100842,100843],{},"也可以使用np.transpose()的形式",[19,100845,100846],{},"#多维数组进行转置 np.transpose()",[19,100848,100849],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100851,100852],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100854,100855],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100857,100858],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100860,100861],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100863,100864],{},"四维及以上的数组也是一样的道理",[23,100866,100868],{"className":25,"code":100867,"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,100869,100870,100898,100903,100908,100913,100931,100936,100968,100973,100978,100983,101004],{"__ignoreMap":28},[33,100871,100872,100874,100876,100878,100880,100882,100884,100886,100888,100890,100892,100894,100896],{"class":35,"line":36},[33,100873,2637],{"class":59},[33,100875,64],{"class":63},[33,100877,94641],{"class":59},[33,100879,2036],{"class":39},[33,100881,2196],{"class":59},[33,100883,2143],{"class":39},[33,100885,94646],{"class":59},[33,100887,1891],{"class":39},[33,100889,2196],{"class":59},[33,100891,2162],{"class":39},[33,100893,2196],{"class":59},[33,100895,1897],{"class":39},[33,100897,157],{"class":59},[33,100899,100900],{"class":35,"line":43},[33,100901,100902],{"class":59},"x.shape\n",[33,100904,100905],{"class":35,"line":130},[33,100906,100907],{"class":87},"#结果：（3,6,2）\n",[33,100909,100910],{"class":35,"line":146},[33,100911,100912],{"class":87},"#使用np.transpose()进行转置 变为(2,6,3)\n",[33,100914,100915,100918,100920,100922,100924,100926,100928],{"class":35,"line":267},[33,100916,100917],{"class":59},"np.transpose(x,(",[33,100919,1897],{"class":39},[33,100921,2196],{"class":59},[33,100923,2036],{"class":39},[33,100925,2196],{"class":59},[33,100927,2010],{"class":39},[33,100929,100930],{"class":59},")).shape\n",[33,100932,100933],{"class":35,"line":275},[33,100934,100935],{"class":87},"#结果：(2,6,3)\n",[33,100937,100938,100940,100942,100944,100946,100948,100950,100952,100954,100956,100958,100960,100962,100964,100966],{"class":35,"line":392},[33,100939,100145],{"class":59},[33,100941,64],{"class":63},[33,100943,94641],{"class":59},[33,100945,2036],{"class":39},[33,100947,2196],{"class":59},[33,100949,2143],{"class":39},[33,100951,94646],{"class":59},[33,100953,1891],{"class":39},[33,100955,2196],{"class":59},[33,100957,1897],{"class":39},[33,100959,2196],{"class":59},[33,100961,2036],{"class":39},[33,100963,2196],{"class":59},[33,100965,2162],{"class":39},[33,100967,157],{"class":59},[33,100969,100970],{"class":35,"line":406},[33,100971,100972],{"class":59},"aaaa.shape\n",[33,100974,100975],{"class":35,"line":418},[33,100976,100977],{"class":87},"#结果：（3，2，1，6）\n",[33,100979,100980],{"class":35,"line":425},[33,100981,100982],{"class":87},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[33,100984,100985,100988,100990,100992,100994,100996,100998,101000,101002],{"class":35,"line":1147},[33,100986,100987],{"class":59},"np.transpose(aaaa,(",[33,100989,2036],{"class":39},[33,100991,2196],{"class":59},[33,100993,1897],{"class":39},[33,100995,2196],{"class":59},[33,100997,2010],{"class":39},[33,100999,2196],{"class":59},[33,101001,1891],{"class":39},[33,101003,100930],{"class":59},[33,101005,101006],{"class":35,"line":1329},[33,101007,101008],{"class":87},"#结果：(2,1,3,6)\n",[1729,101010,101011],{},"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":43,"depth":43,"links":101013},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100738,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101020,"title":101021,"body":101022,"description":1751,"extension":1752,"meta":101756,"navigation":126,"path":101757,"seo":101758,"stem":101759,"__hash__":101760},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101023,"toc":101754},[101024,101027,101030,101033,101036,101039,101042,101045,101048,101157,101160,101163,101751],[10,101025,101021],{"id":101026},"_8数组分割",[19,101028,101029],{},"split分割",[19,101031,101032],{},"numpy.split(ary,indics_or_sections,axis)",[19,101034,101035],{},"解释：",[19,101037,101038],{},"ary:被分割的数组",[19,101040,101041],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101043,101044],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101046,101047],{},"①一维数组的分割",[23,101049,101051],{"className":25,"code":101050,"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,101052,101053,101069,101074,101083,101087,101092,101100,101104,101109,101114,101127,101131,101136,101148,101152],{"__ignoreMap":28},[33,101054,101055,101057,101059,101061,101063,101065,101067],{"class":35,"line":36},[33,101056,2057],{"class":59},[33,101058,64],{"class":63},[33,101060,94641],{"class":59},[33,101062,2036],{"class":39},[33,101064,2196],{"class":59},[33,101066,2238],{"class":39},[33,101068,157],{"class":59},[33,101070,101071],{"class":35,"line":43},[33,101072,101073],{"class":87},"#如果传入整数，必须能够平分，否则会报错\n",[33,101075,101076,101079,101081],{"class":35,"line":130},[33,101077,101078],{"class":59},"np.split(a,",[33,101080,1897],{"class":39},[33,101082,157],{"class":59},[33,101084,101085],{"class":35,"line":146},[33,101086,95203],{"class":87},[33,101088,101089],{"class":35,"line":267},[33,101090,101091],{"class":87},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[33,101093,101094,101096,101098],{"class":35,"line":275},[33,101095,101078],{"class":59},[33,101097,2111],{"class":39},[33,101099,157],{"class":59},[33,101101,101102],{"class":35,"line":392},[33,101103,95203],{"class":87},[33,101105,101106],{"class":35,"line":406},[33,101107,101108],{"class":87},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[33,101110,101111],{"class":35,"line":418},[33,101112,101113],{"class":87},"#传入数组\n",[33,101115,101116,101119,101121,101123,101125],{"class":35,"line":425},[33,101117,101118],{"class":59},"np.split(a,[",[33,101120,1891],{"class":39},[33,101122,2196],{"class":59},[33,101124,2137],{"class":39},[33,101126,6318],{"class":59},[33,101128,101129],{"class":35,"line":1147},[33,101130,95203],{"class":87},[33,101132,101133],{"class":35,"line":1329},[33,101134,101135],{"class":87},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[33,101137,101138,101140,101142,101144,101146],{"class":35,"line":1341},[33,101139,101118],{"class":59},[33,101141,2137],{"class":39},[33,101143,2196],{"class":59},[33,101145,2187],{"class":39},[33,101147,6318],{"class":59},[33,101149,101150],{"class":35,"line":1348},[33,101151,95203],{"class":87},[33,101153,101154],{"class":35,"line":1529},[33,101155,101156],{"class":87},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101158,101159],{},"②二维数组的分割",[19,101161,101162],{},"使用split()",[23,101164,101166],{"className":25,"code":101165,"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,101167,101168,101173,101197,101202,101211,101215,101219,101224,101229,101234,101239,101244,101249,101254,101258,101271,101275,101279,101283,101287,101291,101296,101301,101306,101310,101315,101331,101335,101339,101344,101349,101354,101359,101364,101369,101374,101379,101384,101389,101394,101399,101404,101409,101414,101419,101424,101429,101433,101437,101457,101461,101465,101470,101475,101480,101485,101490,101495,101500,101505,101510,101515,101520,101525,101530,101535,101540,101545,101550,101555,101559,101564,101573,101577,101581,101585,101589,101593,101597,101601,101605,101609,101618,101622,101626,101630,101634,101638,101642,101646,101650,101654,101658,101662,101666,101670,101674,101678,101682,101686,101690,101694,101698,101702,101715,101719,101723,101727,101731,101735,101739,101743,101747],{"__ignoreMap":28},[33,101169,101170],{"class":35,"line":36},[33,101171,101172],{"class":87},"#二维数组分割\n",[33,101174,101175,101177,101179,101181,101183,101185,101187,101189,101191,101193,101195],{"class":35,"line":43},[33,101176,94945],{"class":59},[33,101178,64],{"class":63},[33,101180,94641],{"class":59},[33,101182,2036],{"class":39},[33,101184,2196],{"class":59},[33,101186,2143],{"class":39},[33,101188,94646],{"class":59},[33,101190,2162],{"class":39},[33,101192,2196],{"class":59},[33,101194,2162],{"class":39},[33,101196,157],{"class":59},[33,101198,101199],{"class":35,"line":130},[33,101200,101201],{"class":87},"#默认axis=0  传入整数平均分,按行来的\n",[33,101203,101204,101207,101209],{"class":35,"line":146},[33,101205,101206],{"class":59},"np.split(aa,",[33,101208,1891],{"class":39},[33,101210,157],{"class":59},[33,101212,101213],{"class":35,"line":267},[33,101214,97403],{"class":87},[33,101216,101217],{"class":35,"line":275},[33,101218,95567],{"class":117},[33,101220,101221],{"class":35,"line":392},[33,101222,101223],{"class":117},"[array([[ 1,  2,  3,  4,  5,  6],\n",[33,101225,101226],{"class":35,"line":406},[33,101227,101228],{"class":117},"        [ 7,  8,  9, 10, 11, 12]]),\n",[33,101230,101231],{"class":35,"line":418},[33,101232,101233],{"class":117}," array([[13, 14, 15, 16, 17, 18],\n",[33,101235,101236],{"class":35,"line":425},[33,101237,101238],{"class":117},"        [19, 20, 21, 22, 23, 24]]),\n",[33,101240,101241],{"class":35,"line":1147},[33,101242,101243],{"class":117}," array([[25, 26, 27, 28, 29, 30],\n",[33,101245,101246],{"class":35,"line":1329},[33,101247,101248],{"class":117},"        [31, 32, 33, 34, 35, 36]])]\n",[33,101250,101251],{"class":35,"line":1341},[33,101252,101253],{"class":117}," '''\n",[33,101255,101256],{"class":35,"line":1348},[33,101257,101113],{"class":87},[33,101259,101260,101263,101265,101267,101269],{"class":35,"line":1529},[33,101261,101262],{"class":59},"np.split(aa,[",[33,101264,1897],{"class":39},[33,101266,2196],{"class":59},[33,101268,2137],{"class":39},[33,101270,6318],{"class":59},[33,101272,101273],{"class":35,"line":1546},[33,101274,97403],{"class":87},[33,101276,101277],{"class":35,"line":1551},[33,101278,95567],{"class":117},[33,101280,101281],{"class":35,"line":1566},[33,101282,101223],{"class":117},[33,101284,101285],{"class":35,"line":1578},[33,101286,101228],{"class":117},[33,101288,101289],{"class":35,"line":1583},[33,101290,101233],{"class":117},[33,101292,101293],{"class":35,"line":3369},[33,101294,101295],{"class":117},"        [19, 20, 21, 22, 23, 24],\n",[33,101297,101298],{"class":35,"line":3396},[33,101299,101300],{"class":117},"        [25, 26, 27, 28, 29, 30]]),\n",[33,101302,101303],{"class":35,"line":3401},[33,101304,101305],{"class":117}," array([[31, 32, 33, 34, 35, 36]])]\n",[33,101307,101308],{"class":35,"line":3418},[33,101309,95567],{"class":117},[33,101311,101312],{"class":35,"line":3423},[33,101313,101314],{"class":87},"#axis=1 按照列来分\n",[33,101316,101317,101319,101321,101323,101325,101327,101329],{"class":35,"line":3428},[33,101318,101206],{"class":59},[33,101320,1891],{"class":39},[33,101322,2196],{"class":59},[33,101324,49159],{"class":6877},[33,101326,64],{"class":63},[33,101328,2036],{"class":39},[33,101330,157],{"class":59},[33,101332,101333],{"class":35,"line":3433},[33,101334,97403],{"class":87},[33,101336,101337],{"class":35,"line":3447},[33,101338,95567],{"class":117},[33,101340,101341],{"class":35,"line":3452},[33,101342,101343],{"class":117},"[array([[ 1,  2],\n",[33,101345,101346],{"class":35,"line":4243},[33,101347,101348],{"class":117},"        [ 7,  8],\n",[33,101350,101351],{"class":35,"line":4257},[33,101352,101353],{"class":117},"        [13, 14],\n",[33,101355,101356],{"class":35,"line":4265},[33,101357,101358],{"class":117},"        [19, 20],\n",[33,101360,101361],{"class":35,"line":4270},[33,101362,101363],{"class":117},"        [25, 26],\n",[33,101365,101366],{"class":35,"line":4276},[33,101367,101368],{"class":117},"        [31, 32]]),\n",[33,101370,101371],{"class":35,"line":4282},[33,101372,101373],{"class":117}," array([[ 3,  4],\n",[33,101375,101376],{"class":35,"line":4287},[33,101377,101378],{"class":117},"        [ 9, 10],\n",[33,101380,101381],{"class":35,"line":9608},[33,101382,101383],{"class":117},"        [15, 16],\n",[33,101385,101386],{"class":35,"line":9632},[33,101387,101388],{"class":117},"        [21, 22],\n",[33,101390,101391],{"class":35,"line":9637},[33,101392,101393],{"class":117},"        [27, 28],\n",[33,101395,101396],{"class":35,"line":9643},[33,101397,101398],{"class":117},"        [33, 34]]),\n",[33,101400,101401],{"class":35,"line":9670},[33,101402,101403],{"class":117}," array([[ 5,  6],\n",[33,101405,101406],{"class":35,"line":9675},[33,101407,101408],{"class":117},"        [11, 12],\n",[33,101410,101411],{"class":35,"line":9681},[33,101412,101413],{"class":117},"        [17, 18],\n",[33,101415,101416],{"class":35,"line":9693},[33,101417,101418],{"class":117},"        [23, 24],\n",[33,101420,101421],{"class":35,"line":9705},[33,101422,101423],{"class":117},"        [29, 30],\n",[33,101425,101426],{"class":35,"line":9717},[33,101427,101428],{"class":117},"        [35, 36]])]\n",[33,101430,101431],{"class":35,"line":11375},[33,101432,101253],{"class":117},[33,101434,101435],{"class":35,"line":11400},[33,101436,101113],{"class":87},[33,101438,101439,101441,101443,101445,101447,101449,101451,101453,101455],{"class":35,"line":11423},[33,101440,101262],{"class":59},[33,101442,2036],{"class":39},[33,101444,2196],{"class":59},[33,101446,1897],{"class":39},[33,101448,43255],{"class":59},[33,101450,49159],{"class":6877},[33,101452,64],{"class":63},[33,101454,2036],{"class":39},[33,101456,157],{"class":59},[33,101458,101459],{"class":35,"line":11447},[33,101460,95203],{"class":87},[33,101462,101463],{"class":35,"line":11452},[33,101464,95567],{"class":117},[33,101466,101467],{"class":35,"line":11457},[33,101468,101469],{"class":117},"[array([[ 1],\n",[33,101471,101472],{"class":35,"line":11462},[33,101473,101474],{"class":117},"        [ 7],\n",[33,101476,101477],{"class":35,"line":11471},[33,101478,101479],{"class":117},"        [13],\n",[33,101481,101482],{"class":35,"line":11476},[33,101483,101484],{"class":117},"        [19],\n",[33,101486,101487],{"class":35,"line":11482},[33,101488,101489],{"class":117},"        [25],\n",[33,101491,101492],{"class":35,"line":11503},[33,101493,101494],{"class":117},"        [31]]),\n",[33,101496,101497],{"class":35,"line":11509},[33,101498,101499],{"class":117}," array([[ 2],\n",[33,101501,101502],{"class":35,"line":11523},[33,101503,101504],{"class":117},"        [ 8],\n",[33,101506,101507],{"class":35,"line":11529},[33,101508,101509],{"class":117},"        [14],\n",[33,101511,101512],{"class":35,"line":11556},[33,101513,101514],{"class":117},"        [20],\n",[33,101516,101517],{"class":35,"line":11565},[33,101518,101519],{"class":117},"        [26],\n",[33,101521,101522],{"class":35,"line":11571},[33,101523,101524],{"class":117},"        [32]]),\n",[33,101526,101527],{"class":35,"line":11579},[33,101528,101529],{"class":117}," array([[ 3,  4,  5,  6],\n",[33,101531,101532],{"class":35,"line":11584},[33,101533,101534],{"class":117},"        [ 9, 10, 11, 12],\n",[33,101536,101537],{"class":35,"line":18259},[33,101538,101539],{"class":117},"        [15, 16, 17, 18],\n",[33,101541,101542],{"class":35,"line":18265},[33,101543,101544],{"class":117},"        [21, 22, 23, 24],\n",[33,101546,101547],{"class":35,"line":18288},[33,101548,101549],{"class":117},"        [27, 28, 29, 30],\n",[33,101551,101552],{"class":35,"line":18294},[33,101553,101554],{"class":117},"        [33, 34, 35, 36]])]\n",[33,101556,101557],{"class":35,"line":18317},[33,101558,95567],{"class":117},[33,101560,101561],{"class":35,"line":18331},[33,101562,101563],{"class":87},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[33,101565,101566,101569,101571],{"class":35,"line":18351},[33,101567,101568],{"class":59},"np.vsplit(aa,",[33,101570,1891],{"class":39},[33,101572,157],{"class":59},[33,101574,101575],{"class":35,"line":18357},[33,101576,95203],{"class":87},[33,101578,101579],{"class":35,"line":18368},[33,101580,95567],{"class":117},[33,101582,101583],{"class":35,"line":18391},[33,101584,101223],{"class":117},[33,101586,101587],{"class":35,"line":18413},[33,101588,101228],{"class":117},[33,101590,101591],{"class":35,"line":18418},[33,101592,101233],{"class":117},[33,101594,101595],{"class":35,"line":18424},[33,101596,101238],{"class":117},[33,101598,101599],{"class":35,"line":18438},[33,101600,101243],{"class":117},[33,101602,101603],{"class":35,"line":18451},[33,101604,101248],{"class":117},[33,101606,101607],{"class":35,"line":18456},[33,101608,95567],{"class":117},[33,101610,101611,101614,101616],{"class":35,"line":18470},[33,101612,101613],{"class":59},"np.hsplit(aa,",[33,101615,1891],{"class":39},[33,101617,157],{"class":59},[33,101619,101620],{"class":35,"line":18475},[33,101621,95203],{"class":87},[33,101623,101624],{"class":35,"line":18481},[33,101625,95567],{"class":117},[33,101627,101628],{"class":35,"line":18486},[33,101629,101343],{"class":117},[33,101631,101632],{"class":35,"line":18500},[33,101633,101348],{"class":117},[33,101635,101636],{"class":35,"line":18505},[33,101637,101353],{"class":117},[33,101639,101640],{"class":35,"line":18510},[33,101641,101358],{"class":117},[33,101643,101644],{"class":35,"line":18524},[33,101645,101363],{"class":117},[33,101647,101648],{"class":35,"line":18536},[33,101649,101368],{"class":117},[33,101651,101652],{"class":35,"line":18541},[33,101653,101373],{"class":117},[33,101655,101656],{"class":35,"line":18554},[33,101657,101378],{"class":117},[33,101659,101660],{"class":35,"line":18559},[33,101661,101383],{"class":117},[33,101663,101664],{"class":35,"line":18564},[33,101665,101388],{"class":117},[33,101667,101668],{"class":35,"line":18569},[33,101669,101393],{"class":117},[33,101671,101672],{"class":35,"line":18582},[33,101673,101398],{"class":117},[33,101675,101676],{"class":35,"line":18587},[33,101677,101403],{"class":117},[33,101679,101680],{"class":35,"line":34280},[33,101681,101408],{"class":117},[33,101683,101684],{"class":35,"line":34286},[33,101685,101413],{"class":117},[33,101687,101688],{"class":35,"line":34292},[33,101689,101418],{"class":117},[33,101691,101692],{"class":35,"line":34298},[33,101693,101423],{"class":117},[33,101695,101696],{"class":35,"line":34304},[33,101697,101428],{"class":117},[33,101699,101700],{"class":35,"line":34315},[33,101701,95567],{"class":117},[33,101703,101704,101707,101709,101711,101713],{"class":35,"line":34321},[33,101705,101706],{"class":59},"np.vsplit(aa,[",[33,101708,1897],{"class":39},[33,101710,2196],{"class":59},[33,101712,2137],{"class":39},[33,101714,6318],{"class":59},[33,101716,101717],{"class":35,"line":34341},[33,101718,95203],{"class":87},[33,101720,101721],{"class":35,"line":34347},[33,101722,95567],{"class":117},[33,101724,101725],{"class":35,"line":34358},[33,101726,101223],{"class":117},[33,101728,101729],{"class":35,"line":34364},[33,101730,101228],{"class":117},[33,101732,101733],{"class":35,"line":34370},[33,101734,101233],{"class":117},[33,101736,101737],{"class":35,"line":34376},[33,101738,101295],{"class":117},[33,101740,101741],{"class":35,"line":34382},[33,101742,101300],{"class":117},[33,101744,101745],{"class":35,"line":34388},[33,101746,101305],{"class":117},[33,101748,101749],{"class":35,"line":34394},[33,101750,101253],{"class":117},[1729,101752,101753],{},"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":43,"depth":43,"links":101755},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101021,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101762,"title":101763,"body":101764,"description":1751,"extension":1752,"meta":102258,"navigation":126,"path":102259,"seo":102260,"stem":102261,"__hash__":102262},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101765,"toc":102249},[101766,101769,101772,101797,101801,101860,101912,101916,101918,101954,102008,102010,102048,102119,102123,102128,102132,102135,102168,102171,102175,102178,102181,102184,102187,102192,102196,102199,102202,102205,102208,102213,102217,102222,102225,102246],[10,101767,101763],{"id":101768},"_9数学函数",[19,101770,101771],{},"补充回顾：python的列表推导式",[23,101773,101775],{"className":25,"code":101774,"language":27,"meta":28,"style":28},"[1\u002Fi for i in a]\n",[30,101776,101777],{"__ignoreMap":28},[33,101778,101779,101781,101783,101785,101788,101790,101792,101794],{"class":35,"line":36},[33,101780,2707],{"class":59},[33,101782,2036],{"class":39},[33,101784,2401],{"class":63},[33,101786,101787],{"class":59},"i ",[33,101789,4690],{"class":63},[33,101791,11097],{"class":59},[33,101793,27699],{"class":63},[33,101795,101796],{"class":59}," a]\n",[14,101798,101800],{"id":101799},"_91-求倒数","9.1 求倒数",[23,101802,101804],{"className":25,"code":101803,"language":27,"meta":28,"style":28},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[30,101805,101806,101811,101839,101851],{"__ignoreMap":28},[33,101807,101808],{"class":35,"line":36},[33,101809,101810],{"class":87},"#数组求倒数\n",[33,101812,101813,101815,101817,101819,101821,101823,101825,101827,101829,101831,101833,101835,101837],{"class":35,"line":43},[33,101814,2057],{"class":59},[33,101816,64],{"class":63},[33,101818,2707],{"class":59},[33,101820,2036],{"class":39},[33,101822,2196],{"class":59},[33,101824,1897],{"class":39},[33,101826,2196],{"class":59},[33,101828,1891],{"class":39},[33,101830,2196],{"class":59},[33,101832,2111],{"class":39},[33,101834,2196],{"class":59},[33,101836,2137],{"class":39},[33,101838,34893],{"class":59},[33,101840,101841,101843,101845,101848],{"class":35,"line":130},[33,101842,2081],{"class":59},[33,101844,64],{"class":63},[33,101846,101847],{"class":59},"np.array(a)",[33,101849,101850],{"class":87},"#将列表转换为数组\n",[33,101852,101853,101855,101857],{"class":35,"line":146},[33,101854,2036],{"class":39},[33,101856,2401],{"class":63},[33,101858,101859],{"class":59},"b\n",[23,101861,101863],{"className":25,"code":101862,"language":27,"meta":28,"style":28},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[30,101864,101865,101893,101902,101907],{"__ignoreMap":28},[33,101866,101867,101869,101871,101873,101875,101877,101879,101881,101883,101885,101887,101889,101891],{"class":35,"line":36},[33,101868,2057],{"class":59},[33,101870,64],{"class":63},[33,101872,2707],{"class":59},[33,101874,2036],{"class":39},[33,101876,2196],{"class":59},[33,101878,1897],{"class":39},[33,101880,2196],{"class":59},[33,101882,1891],{"class":39},[33,101884,2196],{"class":59},[33,101886,2111],{"class":39},[33,101888,2196],{"class":59},[33,101890,2137],{"class":39},[33,101892,34893],{"class":59},[33,101894,101895,101897,101899],{"class":35,"line":43},[33,101896,2081],{"class":59},[33,101898,64],{"class":63},[33,101900,101901],{"class":59},"np.array(a)\n",[33,101903,101904],{"class":35,"line":130},[33,101905,101906],{"class":87},"#调用numpy中的函数reciprocal()\n",[33,101908,101909],{"class":35,"line":146},[33,101910,101911],{"class":59},"np.reciprocal(b)\n",[14,101913,101915],{"id":101914},"_92-求平方","9.2 求平方",[19,101917,96169],{},[23,101919,101921],{"className":25,"code":101920,"language":27,"meta":28,"style":28},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[30,101922,101923,101928,101933,101949],{"__ignoreMap":28},[33,101924,101925],{"class":35,"line":36},[33,101926,101927],{"class":87},"#square()，求平方\n",[33,101929,101930],{"class":35,"line":43},[33,101931,101932],{"class":87},"#一维数组\n",[33,101934,101935,101937,101939,101941,101943,101945,101947],{"class":35,"line":130},[33,101936,2057],{"class":59},[33,101938,64],{"class":63},[33,101940,94641],{"class":59},[33,101942,2036],{"class":39},[33,101944,2196],{"class":59},[33,101946,2264],{"class":39},[33,101948,157],{"class":59},[33,101950,101951],{"class":35,"line":146},[33,101952,101953],{"class":59},"np.square(a)\n",[23,101955,101957],{"className":25,"code":101956,"language":27,"meta":28,"style":28},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[30,101958,101959,101964,101969,101990],{"__ignoreMap":28},[33,101960,101961],{"class":35,"line":36},[33,101962,101963],{"class":87},"#或者通过循环遍历的形式来计算\n",[33,101965,101966],{"class":35,"line":43},[33,101967,101968],{"class":87},"#这是一个列表\n",[33,101970,101971,101974,101976,101978,101980,101982,101984,101987],{"class":35,"line":130},[33,101972,101973],{"class":59},"[i",[33,101975,1540],{"class":63},[33,101977,101787],{"class":59},[33,101979,4690],{"class":63},[33,101981,11097],{"class":59},[33,101983,27699],{"class":63},[33,101985,101986],{"class":59}," a]",[33,101988,101989],{"class":87},"#这个求完之后在数列当中\n",[33,101991,101992,101995,101997,101999,102001,102003,102005],{"class":35,"line":146},[33,101993,101994],{"class":59},"np.array([i",[33,101996,1540],{"class":63},[33,101998,101787],{"class":59},[33,102000,4690],{"class":63},[33,102002,11097],{"class":59},[33,102004,27699],{"class":63},[33,102006,102007],{"class":59}," a])\n",[19,102009,94930],{},[23,102011,102013],{"className":25,"code":102012,"language":27,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[30,102014,102015,102019,102043],{"__ignoreMap":28},[33,102016,102017],{"class":35,"line":36},[33,102018,94940],{"class":87},[33,102020,102021,102023,102025,102027,102029,102031,102033,102035,102037,102039,102041],{"class":35,"line":43},[33,102022,94945],{"class":59},[33,102024,64],{"class":63},[33,102026,94641],{"class":59},[33,102028,2036],{"class":39},[33,102030,2196],{"class":59},[33,102032,2340],{"class":39},[33,102034,94646],{"class":59},[33,102036,2111],{"class":39},[33,102038,2196],{"class":59},[33,102040,1891],{"class":39},[33,102042,157],{"class":59},[33,102044,102045],{"class":35,"line":130},[33,102046,102047],{"class":59},"np.square(aa)\n",[23,102049,102051],{"className":25,"code":102050,"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,102052,102053,102058,102067,102083,102099,102114],{"__ignoreMap":28},[33,102054,102055],{"class":35,"line":36},[33,102056,102057],{"class":87},"#传统的方式\n",[33,102059,102060,102062,102064],{"class":35,"line":43},[33,102061,99826],{"class":59},[33,102063,64],{"class":63},[33,102065,102066],{"class":59},"np.empty_like(aa)\n",[33,102068,102069,102071,102073,102075,102077,102079,102081],{"class":35,"line":130},[33,102070,4690],{"class":63},[33,102072,11097],{"class":59},[33,102074,27699],{"class":63},[33,102076,34091],{"class":39},[33,102078,109],{"class":59},[33,102080,2111],{"class":39},[33,102082,32437],{"class":59},[33,102084,102085,102087,102089,102091,102093,102095,102097],{"class":35,"line":146},[33,102086,4864],{"class":63},[33,102088,11159],{"class":59},[33,102090,27699],{"class":63},[33,102092,34091],{"class":39},[33,102094,109],{"class":59},[33,102096,1891],{"class":39},[33,102098,32437],{"class":59},[33,102100,102101,102104,102106,102109,102111],{"class":35,"line":267},[33,102102,102103],{"class":59},"        bb[i,j]",[33,102105,64],{"class":63},[33,102107,102108],{"class":59},"aa[i,j]",[33,102110,1540],{"class":63},[33,102112,102113],{"class":59},"aa[i,j]\n",[33,102115,102116],{"class":35,"line":275},[33,102117,102118],{"class":59},"bb\n",[14,102120,102122],{"id":102121},"_93-求各元素的符号","9.3 求各元素的符号",[19,102124,102125],{},[3145,102126],{"alt":28,"src":102127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102129,102131],{"id":102130},"_94-modf函数","9.4 modf函数",[19,102133,102134],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[23,102136,102138],{"className":25,"code":102137,"language":27,"meta":28,"style":28},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[30,102139,102140,102163],{"__ignoreMap":28},[33,102141,102142,102144,102146,102148,102150,102152,102154,102156,102158,102161],{"class":35,"line":36},[33,102143,2057],{"class":59},[33,102145,64],{"class":63},[33,102147,94641],{"class":59},[33,102149,2349],{"class":63},[33,102151,2264],{"class":39},[33,102153,2196],{"class":59},[33,102155,2264],{"class":39},[33,102157,2196],{"class":59},[33,102159,102160],{"class":39},"0.3",[33,102162,157],{"class":59},[33,102164,102165],{"class":35,"line":43},[33,102166,102167],{"class":59},"np.modf(a)\n",[19,102169,102170],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102172,102174],{"id":102173},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102176,102177],{},"np.cell()",[19,102179,102180],{},"np.floor()",[19,102182,102183],{},"np.rint()",[19,102185,102186],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102188,102189],{},[3145,102190],{"alt":28,"src":102191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102193,102195],{"id":102194},"_96-around函数","9.6 around()函数",[19,102197,102198],{},"around()函数也可以实现对数的小数位数进行操作",[19,102200,102201],{},"其中的参数：",[19,102203,102204],{},"1.要传的数组",[19,102206,102207],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102209,102210],{},[3145,102211],{"alt":28,"src":102212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102214,102216],{"id":102215},"_97-三角函数","9.7 三角函数",[19,102218,102219],{},[3145,102220],{"alt":28,"src":102221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102223,102224],{},"引入图像模块非常重要",[23,102226,102228],{"className":25,"code":102227,"language":27,"meta":28,"style":28},"from matplotlib import pyplot as plt\n",[30,102229,102230],{"__ignoreMap":28},[33,102231,102232,102234,102237,102239,102242,102244],{"class":35,"line":36},[33,102233,32388],{"class":63},[33,102235,102236],{"class":59}," matplotlib ",[33,102238,32045],{"class":63},[33,102240,102241],{"class":59}," pyplot ",[33,102243,33033],{"class":63},[33,102245,33087],{"class":59},[1729,102247,102248],{},"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":43,"depth":43,"links":102250},[102251,102252,102253,102254,102255,102256,102257],{"id":101799,"depth":43,"text":101800},{"id":101914,"depth":43,"text":101915},{"id":102121,"depth":43,"text":102122},{"id":102130,"depth":43,"text":102131},{"id":102173,"depth":43,"text":102174},{"id":102194,"depth":43,"text":102195},{"id":102215,"depth":43,"text":102216},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101763,"description":1751},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102264,"title":102265,"body":102266,"description":1751,"extension":1752,"meta":102270,"navigation":126,"path":102271,"seo":102272,"stem":102273,"__hash__":102274},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102267,"toc":102268},[],{"title":28,"searchDepth":43,"depth":43,"links":102269},[],{"category":52065},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102265,"description":1751},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102276,"title":102277,"body":102278,"description":28,"extension":1752,"meta":104285,"navigation":126,"path":104286,"seo":104287,"stem":104288,"__hash__":104289},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102279,"toc":104261},[102280,102283,102287,102290,102293,102299,102302,102325,102328,102362,102365,102406,102410,102413,102506,102509,102553,102556,102573,102576,102590,102593,102596,102641,102644,102681,102685,102688,102694,102699,102719,102723,102726,102792,102795,102813,102817,102820,102849,102859,102865,102869,102872,102878,102889,102893,102896,102926,102929,103208,103211,103214,103225,103228,103231,103253,103260,103263,103281,103284,103287,103301,103309,103312,103338,103344,103347,103350,103360,103372,103392,103401,103421,103431,103455,103468,103482,103487,103528,103545,103570,103582,103602,103608,103653,103672,103689,103702,103718,103725,103737,103746,103781,103802,103827,103840,103864,103879,103904,103907,103928,103937,103940,103951,103955,103958,103964,103976,103983,103987,103990,104002,104005,104019,104022,104032,104042,104045,104085,104088,104092,104098,104101,104115,104119,104122,104155,104159,104162,104185,104193,104196,104202,104208,104211,104214,104242,104246,104249,104255,104258],[10,102281,102277],{"id":102282},"_1环境安装与第一个-mujoco-程序",[14,102284,102286],{"id":102285},"_1目标说明","1.目标说明",[19,102288,102289],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102291,102292],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[23,102294,102297],{"className":102295,"code":102296,"language":6848,"meta":28},[6846],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[30,102298,102296],{"__ignoreMap":28},[19,102300,102301],{},"需要掌握:",[162,102303,102304,102307,102310,102315,102320],{},[165,102305,102306],{},"Fedora 44 下 MuJoCo 的系统依赖",[165,102308,102309],{},"Python 虚拟环境创建",[165,102311,102312],{},[30,102313,102314],{},"mujoco.MjModel",[165,102316,102317],{},[30,102318,102319],{},"mujoco.MjData",[165,102321,102322],{},[30,102323,102324],{},"mujoco.mj_step(model, data)",[19,102326,102327],{},"MuJoCo 中最重要的两个对象:",[1956,102329,102330,102340],{},[1959,102331,102332],{},[1962,102333,102334,102337],{},[1965,102335,102336],{"align":25391},"对象",[1965,102338,102339],{"align":25391},"含义",[2003,102341,102342,102352],{},[1962,102343,102344,102349],{},[2008,102345,102346],{"align":25391},[30,102347,102348],{},"MjModel",[2008,102350,102351],{"align":25391},"模型结构，来自 XML，基本不随时间变化",[1962,102353,102354,102359],{},[2008,102355,102356],{"align":25391},[30,102357,102358],{},"MjData",[2008,102360,102361],{"align":25391},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102363,102364],{},"可以先用一个类比理解：",[1956,102366,102367,102377],{},[1959,102368,102369],{},[1962,102370,102371,102374],{},[1965,102372,102373],{"align":25391},"类比",[1965,102375,102376],{"align":25391},"MuJoCo 对象",[2003,102378,102379,102388,102397],{},[1962,102380,102381,102384],{},[2008,102382,102383],{"align":25391},"游戏地图和角色配置",[2008,102385,102386],{"align":25391},[30,102387,102348],{},[1962,102389,102390,102393],{},[2008,102391,102392],{"align":25391},"游戏运行到当前帧的状态",[2008,102394,102395],{"align":25391},[30,102396,102358],{},[1962,102398,102399,102402],{},[2008,102400,102401],{"align":25391},"前进一帧",[2008,102403,102404],{"align":25391},[30,102405,102324],{},[14,102407,102409],{"id":102408},"_2环境与依赖安装","2.环境与依赖安装",[19,102411,102412],{},"Fedora 44 系统依赖:",[23,102414,102416],{"className":25477,"code":102415,"language":25479,"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,102417,102418,102430,102443,102456,102466,102476,102495],{"__ignoreMap":28},[33,102419,102420,102422,102424,102426,102428],{"class":35,"line":36},[33,102421,26232],{"class":3632},[33,102423,27971],{"class":117},[33,102425,25489],{"class":117},[33,102427,28056],{"class":39},[33,102429,26334],{"class":39},[33,102431,102432,102435,102438,102441],{"class":35,"line":43},[33,102433,102434],{"class":117},"  python3",[33,102436,102437],{"class":117}," python3-pip",[33,102439,102440],{"class":117}," python3-virtualenv",[33,102442,26334],{"class":39},[33,102444,102445,102448,102451,102454],{"class":35,"line":130},[33,102446,102447],{"class":117},"  mesa-libGL",[33,102449,102450],{"class":117}," mesa-libGLU",[33,102452,102453],{"class":117}," mesa-dri-drivers",[33,102455,26334],{"class":39},[33,102457,102458,102461,102464],{"class":35,"line":146},[33,102459,102460],{"class":117},"  libglvnd-glx",[33,102462,102463],{"class":117}," libglvnd-opengl",[33,102465,26334],{"class":39},[33,102467,102468,102471,102474],{"class":35,"line":267},[33,102469,102470],{"class":117},"  glfw",[33,102472,102473],{"class":117}," glfw-devel",[33,102475,26334],{"class":39},[33,102477,102478,102481,102484,102487,102490,102493],{"class":35,"line":275},[33,102479,102480],{"class":117},"  libX11",[33,102482,102483],{"class":117}," libXcursor",[33,102485,102486],{"class":117}," libXi",[33,102488,102489],{"class":117}," libXinerama",[33,102491,102492],{"class":117}," libXrandr",[33,102494,26334],{"class":39},[33,102496,102497,102500,102503],{"class":35,"line":392},[33,102498,102499],{"class":117},"  gcc",[33,102501,102502],{"class":117}," gcc-c++",[33,102504,102505],{"class":117}," make\n",[19,102507,102508],{},"创建 Python 环境:",[23,102510,102512],{"className":25477,"code":102511,"language":25479,"meta":28,"style":28},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[30,102513,102514,102528,102536],{"__ignoreMap":28},[33,102515,102516,102519,102522,102525],{"class":35,"line":36},[33,102517,102518],{"class":3632},"python3",[33,102520,102521],{"class":39}," -m",[33,102523,102524],{"class":117}," venv",[33,102526,102527],{"class":117}," .venv\n",[33,102529,102530,102533],{"class":35,"line":43},[33,102531,102532],{"class":39},"source",[33,102534,102535],{"class":117}," .venv\u002Fbin\u002Factivate\n",[33,102537,102538,102540,102542,102545,102547,102550],{"class":35,"line":130},[33,102539,27],{"class":3632},[33,102541,102521],{"class":39},[33,102543,102544],{"class":117}," pip",[33,102546,25489],{"class":117},[33,102548,102549],{"class":39}," --upgrade",[33,102551,102552],{"class":117}," pip\n",[19,102554,102555],{},"pip 安装:",[23,102557,102559],{"className":25477,"code":102558,"language":25479,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy\n",[30,102560,102561],{"__ignoreMap":28},[33,102562,102563,102565,102567,102570],{"class":35,"line":36},[33,102564,25486],{"class":3632},[33,102566,25489],{"class":117},[33,102568,102569],{"class":117}," \"mujoco>=2.3\"",[33,102571,102572],{"class":117}," numpy\n",[19,102574,102575],{},"安装完成后，先做最小检查：",[23,102577,102579],{"className":25477,"code":102578,"language":25479,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[30,102580,102581],{"__ignoreMap":28},[33,102582,102583,102585,102587],{"class":35,"line":36},[33,102584,27],{"class":3632},[33,102586,32013],{"class":39},[33,102588,102589],{"class":117}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102591,102592],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102594,102595],{},"conda 安装:",[23,102597,102599],{"className":25477,"code":102598,"language":25479,"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,102600,102601,102621,102631],{"__ignoreMap":28},[33,102602,102603,102605,102607,102609,102612,102615,102618],{"class":35,"line":36},[33,102604,31985],{"class":3632},[33,102606,30831],{"class":117},[33,102608,26771],{"class":39},[33,102610,102611],{"class":117}," mujoco-study",[33,102613,102614],{"class":117}," python=",[33,102616,102617],{"class":39},"3.10",[33,102619,102620],{"class":39}," -y\n",[33,102622,102623,102625,102628],{"class":35,"line":43},[33,102624,31985],{"class":3632},[33,102626,102627],{"class":117}," activate",[33,102629,102630],{"class":117}," mujoco-study\n",[33,102632,102633,102635,102637,102639],{"class":35,"line":130},[33,102634,25486],{"class":3632},[33,102636,25489],{"class":117},[33,102638,102569],{"class":117},[33,102640,102572],{"class":117},[19,102642,102643],{},"版本冲突说明:",[162,102645,102646,102652,102662,102671],{},[165,102647,102648,102649,1628],{},"不要安装 ",[30,102650,102651],{},"mujoco-py",[165,102653,102654,102655,102657,102658,102661],{},"如果旧项目里同时安装了 ",[30,102656,102651],{}," 和 ",[30,102659,102660],{},"mujoco","，建议新建干净虚拟环境。",[165,102663,102664,102667,102668,1628],{},[30,102665,102666],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[30,102669,102670],{},"~\u002F.mujoco\u002Fmujoco210",[165,102672,102673,102674,84179,102677,102680],{},"离屏渲染可能涉及 OpenGL 后端，",[30,102675,102676],{},"MUJOCO_GL=egl",[30,102678,102679],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102682,102684],{"id":102683},"_3核心概念解释","3.核心概念解释",[19,102686,102687],{},"MuJoCo 的基本执行流程:",[23,102689,102692],{"className":102690,"code":102691,"language":6848,"meta":28},[6846],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[30,102693,102691],{"__ignoreMap":28},[19,102695,102696,102698],{},[30,102697,102348],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102700,102701,102703,102704,2031,102707,2031,102710,2031,102713,2031,102716,1628],{},[30,102702,102358],{}," 存放仿真运行时状态，例如 ",[30,102705,102706],{},"data.time",[30,102708,102709],{},"data.qpos",[30,102711,102712],{},"data.qvel",[30,102714,102715],{},"data.ctrl",[30,102717,102718],{},"data.xpos",[633,102720,102722],{"id":102721},"xml-是什么","XML 是什么",[19,102724,102725],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[23,102727,102729],{"className":54712,"code":102728,"language":54714,"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,102730,102731,102753,102784],{"__ignoreMap":28},[33,102732,102733,102735,102737,102739,102741,102743,102746,102748,102751],{"class":35,"line":36},[33,102734,2726],{"class":59},[33,102736,53445],{"class":52945},[33,102738,16578],{"class":3632},[33,102740,64],{"class":59},[33,102742,55136],{"class":117},[33,102744,102745],{"class":3632}," pos",[33,102747,64],{"class":59},[33,102749,102750],{"class":117},"\"0 0 1\"",[33,102752,52952],{"class":59},[33,102754,102755,102757,102760,102762,102764,102767,102769,102771,102773,102776,102778,102781],{"class":35,"line":43},[33,102756,53789],{"class":59},[33,102758,102759],{"class":52945},"geom",[33,102761,16578],{"class":3632},[33,102763,64],{"class":59},[33,102765,102766],{"class":117},"\"box_geom\"",[33,102768,55468],{"class":3632},[33,102770,64],{"class":59},[33,102772,55136],{"class":117},[33,102774,102775],{"class":3632}," size",[33,102777,64],{"class":59},[33,102779,102780],{"class":117},"\"0.1 0.1 0.1\"",[33,102782,102783],{"class":59},"\u002F>\n",[33,102785,102786,102788,102790],{"class":35,"line":130},[33,102787,53430],{"class":59},[33,102789,53445],{"class":52945},[33,102791,52952],{"class":59},[19,102793,102794],{},"这段意思是：",[162,102796,102797,102803,102810],{},[165,102798,102799,102800,102802],{},"创建一个叫 ",[30,102801,55359],{}," 的刚体。",[165,102804,102805,102806,102809],{},"它初始放在 ",[30,102807,102808],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[165,102811,102812],{},"它里面有一个盒子形状的几何体。",[633,102814,102816],{"id":102815},"timestep-是什么","timestep 是什么",[19,102818,102819],{},"XML 里的：",[23,102821,102823],{"className":54712,"code":102822,"language":54714,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[30,102824,102825],{"__ignoreMap":28},[33,102826,102827,102829,102831,102834,102836,102839,102842,102844,102847],{"class":35,"line":36},[33,102828,2726],{"class":59},[33,102830,70808],{"class":52945},[33,102832,102833],{"class":3632}," timestep",[33,102835,64],{"class":59},[33,102837,102838],{"class":117},"\"0.01\"",[33,102840,102841],{"class":3632}," gravity",[33,102843,64],{"class":59},[33,102845,102846],{"class":117},"\"0 0 -9.81\"",[33,102848,102783],{"class":59},[19,102850,102851,102852,102855,102856,102858],{},"表示每调用一次 ",[30,102853,102854],{},"mj_step","，仿真时间前进 ",[30,102857,40632],{}," 秒。循环 100 次，大约就是 1 秒：",[23,102860,102863],{"className":102861,"code":102862,"language":6848,"meta":28},[6846],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[30,102864,102862],{"__ignoreMap":28},[633,102866,102868],{"id":102867},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102870,102871],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[23,102873,102876],{"className":102874,"code":102875,"language":6848,"meta":28},[6846],"x y z qw qx qy qz\n",[30,102877,102875],{"__ignoreMap":28},[19,102879,102880,102881,102884,102885,102888],{},"表示一个自由刚体的位置和姿态。其中 ",[30,102882,102883],{},"x y z"," 是位置，",[30,102886,102887],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102890,102892],{"id":102891},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102894,102895],{},"新建文件:",[23,102897,102899],{"className":25477,"code":102898,"language":25479,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[30,102900,102901,102911,102918],{"__ignoreMap":28},[33,102902,102903,102906,102908],{"class":35,"line":36},[33,102904,102905],{"class":3632},"mkdir",[33,102907,30871],{"class":39},[33,102909,102910],{"class":117}," mujoco_tutorial\n",[33,102912,102913,102916],{"class":35,"line":43},[33,102914,102915],{"class":39},"cd",[33,102917,102910],{"class":117},[33,102919,102920,102923],{"class":35,"line":130},[33,102921,102922],{"class":3632},"touch",[33,102924,102925],{"class":117}," ch1_first_sim.py\n",[19,102927,102928],{},"写入:",[23,102930,102932],{"className":25,"code":102931,"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,102933,102934,102941,102945,102949,102959,102964,102969,102973,102978,102983,102987,102992,102997,103002,103007,103012,103017,103021,103025,103029,103042,103056,103066,103070,103082,103094,103106,103118,103130,103134,103151,103156,103160,103171,103182,103186,103190,103203],{"__ignoreMap":28},[33,102935,102936,102938],{"class":35,"line":36},[33,102937,32045],{"class":63},[33,102939,102940],{"class":59}," mujoco\n",[33,102942,102943],{"class":35,"line":43},[33,102944,127],{"emptyLinePlaceholder":126},[33,102946,102947],{"class":35,"line":130},[33,102948,127],{"emptyLinePlaceholder":126},[33,102950,102951,102954,102956],{"class":35,"line":146},[33,102952,102953],{"class":39},"XML",[33,102955,15222],{"class":63},[33,102957,102958],{"class":117}," \"\"\"\n",[33,102960,102961],{"class":35,"line":267},[33,102962,102963],{"class":117},"\u003Cmujoco model=\"first_sim\">\n",[33,102965,102966],{"class":35,"line":275},[33,102967,102968],{"class":117},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,102970,102971],{"class":35,"line":392},[33,102972,127],{"emptyLinePlaceholder":126},[33,102974,102975],{"class":35,"line":406},[33,102976,102977],{"class":117},"  \u003Cworldbody>\n",[33,102979,102980],{"class":35,"line":418},[33,102981,102982],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,102984,102985],{"class":35,"line":425},[33,102986,127],{"emptyLinePlaceholder":126},[33,102988,102989],{"class":35,"line":1147},[33,102990,102991],{"class":117},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,102993,102994],{"class":35,"line":1329},[33,102995,102996],{"class":117},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[33,102998,102999],{"class":35,"line":1341},[33,103000,103001],{"class":117},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,103003,103004],{"class":35,"line":1348},[33,103005,103006],{"class":117},"    \u003C\u002Fbody>\n",[33,103008,103009],{"class":35,"line":1529},[33,103010,103011],{"class":117},"  \u003C\u002Fworldbody>\n",[33,103013,103014],{"class":35,"line":1546},[33,103015,103016],{"class":117},"\u003C\u002Fmujoco>\n",[33,103018,103019],{"class":35,"line":1551},[33,103020,97337],{"class":117},[33,103022,103023],{"class":35,"line":1566},[33,103024,127],{"emptyLinePlaceholder":126},[33,103026,103027],{"class":35,"line":1578},[33,103028,127],{"emptyLinePlaceholder":126},[33,103030,103031,103033,103035,103038,103040],{"class":35,"line":1583},[33,103032,33597],{"class":63},[33,103034,3642],{"class":3632},[33,103036,103037],{"class":59},"() -> ",[33,103039,97325],{"class":39},[33,103041,143],{"class":59},[33,103043,103044,103047,103049,103052,103054],{"class":35,"line":3369},[33,103045,103046],{"class":59},"    model ",[33,103048,64],{"class":63},[33,103050,103051],{"class":59}," mujoco.MjModel.from_xml_string(",[33,103053,102953],{"class":39},[33,103055,157],{"class":59},[33,103057,103058,103061,103063],{"class":35,"line":3396},[33,103059,103060],{"class":59},"    data ",[33,103062,64],{"class":63},[33,103064,103065],{"class":59}," mujoco.MjData(model)\n",[33,103067,103068],{"class":35,"line":3401},[33,103069,127],{"emptyLinePlaceholder":126},[33,103071,103072,103074,103076,103079],{"class":35,"line":3418},[33,103073,149],{"class":39},[33,103075,109],{"class":59},[33,103077,103078],{"class":117},"\"nq:\"",[33,103080,103081],{"class":59},", model.nq)\n",[33,103083,103084,103086,103088,103091],{"class":35,"line":3423},[33,103085,149],{"class":39},[33,103087,109],{"class":59},[33,103089,103090],{"class":117},"\"nv:\"",[33,103092,103093],{"class":59},", model.nv)\n",[33,103095,103096,103098,103100,103103],{"class":35,"line":3428},[33,103097,149],{"class":39},[33,103099,109],{"class":59},[33,103101,103102],{"class":117},"\"nu:\"",[33,103104,103105],{"class":59},", model.nu)\n",[33,103107,103108,103110,103112,103115],{"class":35,"line":3433},[33,103109,149],{"class":39},[33,103111,109],{"class":59},[33,103113,103114],{"class":117},"\"initial time:\"",[33,103116,103117],{"class":59},", data.time)\n",[33,103119,103120,103122,103124,103127],{"class":35,"line":3447},[33,103121,149],{"class":39},[33,103123,109],{"class":59},[33,103125,103126],{"class":117},"\"initial qpos:\"",[33,103128,103129],{"class":59},", data.qpos.copy())\n",[33,103131,103132],{"class":35,"line":3452},[33,103133,127],{"emptyLinePlaceholder":126},[33,103135,103136,103138,103141,103143,103145,103147,103149],{"class":35,"line":4243},[33,103137,4864],{"class":63},[33,103139,103140],{"class":59}," _ ",[33,103142,27699],{"class":63},[33,103144,34091],{"class":39},[33,103146,109],{"class":59},[33,103148,2129],{"class":39},[33,103150,32437],{"class":59},[33,103152,103153],{"class":35,"line":4257},[33,103154,103155],{"class":59},"        mujoco.mj_step(model, data)\n",[33,103157,103158],{"class":35,"line":4265},[33,103159,127],{"emptyLinePlaceholder":126},[33,103161,103162,103164,103166,103169],{"class":35,"line":4270},[33,103163,149],{"class":39},[33,103165,109],{"class":59},[33,103167,103168],{"class":117},"\"final time:\"",[33,103170,103117],{"class":59},[33,103172,103173,103175,103177,103180],{"class":35,"line":4276},[33,103174,149],{"class":39},[33,103176,109],{"class":59},[33,103178,103179],{"class":117},"\"final qpos:\"",[33,103181,103129],{"class":59},[33,103183,103184],{"class":35,"line":4282},[33,103185,127],{"emptyLinePlaceholder":126},[33,103187,103188],{"class":35,"line":4287},[33,103189,127],{"emptyLinePlaceholder":126},[33,103191,103192,103194,103196,103198,103201],{"class":35,"line":9608},[33,103193,133],{"class":63},[33,103195,32871],{"class":39},[33,103197,1644],{"class":63},[33,103199,103200],{"class":117}," \"__main__\"",[33,103202,143],{"class":59},[33,103204,103205],{"class":35,"line":9632},[33,103206,103207],{"class":59},"    main()\n",[633,103209,103210],{"id":103210},"代码逐段解释",[19,103212,103213],{},"导入库：",[23,103215,103217],{"className":25,"code":103216,"language":27,"meta":28,"style":28},"import mujoco\n",[30,103218,103219],{"__ignoreMap":28},[33,103220,103221,103223],{"class":35,"line":36},[33,103222,32045],{"class":63},[33,103224,102940],{"class":59},[19,103226,103227],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103229,103230],{},"定义 XML：",[23,103232,103234],{"className":25,"code":103233,"language":27,"meta":28,"style":28},"XML = \"\"\"\n...\n\"\"\"\n",[30,103235,103236,103244,103249],{"__ignoreMap":28},[33,103237,103238,103240,103242],{"class":35,"line":36},[33,103239,102953],{"class":39},[33,103241,15222],{"class":63},[33,103243,102958],{"class":117},[33,103245,103246],{"class":35,"line":43},[33,103247,103248],{"class":117},"...\n",[33,103250,103251],{"class":35,"line":130},[33,103252,97337],{"class":117},[19,103254,103255,103256,103259],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[30,103257,103258],{},"freejoint"," 的方块。",[19,103261,103262],{},"编译模型：",[23,103264,103266],{"className":25,"code":103265,"language":27,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\n",[30,103267,103268],{"__ignoreMap":28},[33,103269,103270,103273,103275,103277,103279],{"class":35,"line":36},[33,103271,103272],{"class":59},"model ",[33,103274,64],{"class":63},[33,103276,103051],{"class":59},[33,103278,102953],{"class":39},[33,103280,157],{"class":59},[19,103282,103283],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103285,103286],{},"创建数据：",[23,103288,103290],{"className":25,"code":103289,"language":27,"meta":28,"style":28},"data = mujoco.MjData(model)\n",[30,103291,103292],{"__ignoreMap":28},[33,103293,103294,103297,103299],{"class":35,"line":36},[33,103295,103296],{"class":59},"data ",[33,103298,64],{"class":63},[33,103300,103065],{"class":59},[19,103302,103303,103305,103306,103308],{},[30,103304,35048],{}," 会保存仿真当前状态。刚创建时，时间是 ",[30,103307,2010],{},"，方块还在初始位置。",[19,103310,103311],{},"推进仿真：",[23,103313,103315],{"className":25,"code":103314,"language":27,"meta":28,"style":28},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[30,103316,103317,103333],{"__ignoreMap":28},[33,103318,103319,103321,103323,103325,103327,103329,103331],{"class":35,"line":36},[33,103320,4690],{"class":63},[33,103322,103140],{"class":59},[33,103324,27699],{"class":63},[33,103326,34091],{"class":39},[33,103328,109],{"class":59},[33,103330,2129],{"class":39},[33,103332,32437],{"class":59},[33,103334,103335],{"class":35,"line":43},[33,103336,103337],{"class":59},"    mujoco.mj_step(model, data)\n",[19,103339,103340,103341,103343],{},"每次 ",[30,103342,102854],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[633,103345,103346],{"id":103346},"代码逐行细讲",[19,103348,103349],{},"下面把完整代码按新手视角拆开讲。",[23,103351,103352],{"className":25,"code":103216,"language":27,"meta":28,"style":28},[30,103353,103354],{"__ignoreMap":28},[33,103355,103356,103358],{"class":35,"line":36},[33,103357,32045],{"class":63},[33,103359,102940],{"class":59},[19,103361,103362,103364,103365,2031,103367,2031,103369,1628],{},[30,103363,32045],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[30,103366,102314],{},[30,103368,102319],{},[30,103370,103371],{},"mujoco.mj_step",[23,103373,103374],{"className":25,"code":103233,"language":27,"meta":28,"style":28},[30,103375,103376,103384,103388],{"__ignoreMap":28},[33,103377,103378,103380,103382],{"class":35,"line":36},[33,103379,102953],{"class":39},[33,103381,15222],{"class":63},[33,103383,102958],{"class":117},[33,103385,103386],{"class":35,"line":43},[33,103387,103248],{"class":117},[33,103389,103390],{"class":35,"line":130},[33,103391,97337],{"class":117},[19,103393,103394,103396,103397,103400],{},[30,103395,102953],{}," 是一个变量名。右边的三引号 ",[30,103398,103399],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[23,103402,103403],{"className":54712,"code":102963,"language":54714,"meta":28,"style":28},[30,103404,103405],{"__ignoreMap":28},[33,103406,103407,103409,103411,103414,103416,103419],{"class":35,"line":36},[33,103408,2726],{"class":59},[33,103410,102660],{"class":52945},[33,103412,103413],{"class":3632}," model",[33,103415,64],{"class":59},[33,103417,103418],{"class":117},"\"first_sim\"",[33,103420,52952],{"class":59},[19,103422,103423,103424,103427,103428,1628],{},"这是 XML 的根标签。",[30,103425,103426],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[30,103429,103430],{},"first_sim",[23,103432,103433],{"className":54712,"code":102822,"language":54714,"meta":28,"style":28},[30,103434,103435],{"__ignoreMap":28},[33,103436,103437,103439,103441,103443,103445,103447,103449,103451,103453],{"class":35,"line":36},[33,103438,2726],{"class":59},[33,103440,70808],{"class":52945},[33,103442,102833],{"class":3632},[33,103444,64],{"class":59},[33,103446,102838],{"class":117},[33,103448,102841],{"class":3632},[33,103450,64],{"class":59},[33,103452,102846],{"class":117},[33,103454,102783],{"class":59},[19,103456,103457,103459,103460,103463,103464,103467],{},[30,103458,70808],{}," 用来设置仿真参数。",[30,103461,103462],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[30,103465,103466],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[23,103469,103471],{"className":54712,"code":103470,"language":54714,"meta":28,"style":28},"\u003Cworldbody>\n",[30,103472,103473],{"__ignoreMap":28},[33,103474,103475,103477,103480],{"class":35,"line":36},[33,103476,2726],{"class":59},[33,103478,103479],{"class":52945},"worldbody",[33,103481,52952],{"class":59},[19,103483,103484,103486],{},[30,103485,103479],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[23,103488,103490],{"className":54712,"code":103489,"language":54714,"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,103491,103492],{"__ignoreMap":28},[33,103493,103494,103496,103498,103500,103502,103505,103507,103509,103512,103514,103516,103519,103521,103523,103526],{"class":35,"line":36},[33,103495,2726],{"class":59},[33,103497,102759],{"class":52945},[33,103499,16578],{"class":3632},[33,103501,64],{"class":59},[33,103503,103504],{"class":117},"\"floor\"",[33,103506,55468],{"class":3632},[33,103508,64],{"class":59},[33,103510,103511],{"class":117},"\"plane\"",[33,103513,102775],{"class":3632},[33,103515,64],{"class":59},[33,103517,103518],{"class":117},"\"2 2 0.1\"",[33,103520,80408],{"class":3632},[33,103522,64],{"class":59},[33,103524,103525],{"class":117},"\"0.8 0.8 0.8 1\"",[33,103527,102783],{"class":59},[19,103529,103530,103531,103533,103534,103537,103538,103541,103542,103544],{},"这行创建地面。",[30,103532,102759],{}," 是几何体。",[30,103535,103536],{},"name=\"floor\""," 是名字。",[30,103539,103540],{},"type=\"plane\""," 表示平面。",[30,103543,56754],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[23,103546,103548],{"className":54712,"code":103547,"language":54714,"meta":28,"style":28},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[30,103549,103550],{"__ignoreMap":28},[33,103551,103552,103554,103556,103558,103560,103562,103564,103566,103568],{"class":35,"line":36},[33,103553,2726],{"class":59},[33,103555,53445],{"class":52945},[33,103557,16578],{"class":3632},[33,103559,64],{"class":59},[33,103561,55136],{"class":117},[33,103563,102745],{"class":3632},[33,103565,64],{"class":59},[33,103567,102750],{"class":117},[33,103569,52952],{"class":59},[19,103571,103572,103573,1628,103575,103578,103579,103581],{},"这行创建一个刚体，名字叫 ",[30,103574,55359],{},[30,103576,103577],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[30,103580,102808],{},"，也就是离地面 1 米高。",[23,103583,103585],{"className":54712,"code":103584,"language":54714,"meta":28,"style":28},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[30,103586,103587],{"__ignoreMap":28},[33,103588,103589,103591,103593,103595,103597,103600],{"class":35,"line":36},[33,103590,2726],{"class":59},[33,103592,103258],{"class":52945},[33,103594,16578],{"class":3632},[33,103596,64],{"class":59},[33,103598,103599],{"class":117},"\"box_free\"",[33,103601,102783],{"class":59},[19,103603,103604,103605,103607],{},"这行很重要。",[30,103606,103258],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[23,103609,103611],{"className":54712,"code":103610,"language":54714,"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,103612,103613],{"__ignoreMap":28},[33,103614,103615,103617,103619,103621,103623,103625,103627,103629,103631,103633,103635,103637,103640,103642,103644,103646,103648,103651],{"class":35,"line":36},[33,103616,2726],{"class":59},[33,103618,102759],{"class":52945},[33,103620,16578],{"class":3632},[33,103622,64],{"class":59},[33,103624,102766],{"class":117},[33,103626,55468],{"class":3632},[33,103628,64],{"class":59},[33,103630,55136],{"class":117},[33,103632,102775],{"class":3632},[33,103634,64],{"class":59},[33,103636,102780],{"class":117},[33,103638,103639],{"class":3632}," mass",[33,103641,64],{"class":59},[33,103643,5341],{"class":117},[33,103645,80408],{"class":3632},[33,103647,64],{"class":59},[33,103649,103650],{"class":117},"\"1 0 0 1\"",[33,103652,102783],{"class":59},[19,103654,103655,103656,103659,103660,103663,103664,103667,103668,103671],{},"这行给 box body 添加一个盒子形状。",[30,103657,103658],{},"type=\"box\""," 表示形状是盒子。",[30,103661,103662],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[30,103665,103666],{},"mass=\"1\""," 表示质量是 1。",[30,103669,103670],{},"rgba=\"1 0 0 1\""," 表示红色。",[23,103673,103675],{"className":25,"code":103674,"language":27,"meta":28,"style":28},"def main() -> None:\n",[30,103676,103677],{"__ignoreMap":28},[33,103678,103679,103681,103683,103685,103687],{"class":35,"line":36},[33,103680,33597],{"class":63},[33,103682,3642],{"class":3632},[33,103684,103037],{"class":59},[33,103686,97325],{"class":39},[33,103688,143],{"class":59},[19,103690,103691,103693,103694,103697,103698,103701],{},[30,103692,33597],{}," 用来定义函数。这里定义了一个叫 ",[30,103695,103696],{},"main"," 的函数。",[30,103699,103700],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[23,103703,103704],{"className":25,"code":103265,"language":27,"meta":28,"style":28},[30,103705,103706],{"__ignoreMap":28},[33,103707,103708,103710,103712,103714,103716],{"class":35,"line":36},[33,103709,103272],{"class":59},[33,103711,64],{"class":63},[33,103713,103051],{"class":59},[33,103715,102953],{"class":39},[33,103717,157],{"class":59},[19,103719,103720,103721,103724],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[30,103722,103723],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[23,103726,103727],{"className":25,"code":103289,"language":27,"meta":28,"style":28},[30,103728,103729],{"__ignoreMap":28},[33,103730,103731,103733,103735],{"class":35,"line":36},[33,103732,103296],{"class":59},[33,103734,64],{"class":63},[33,103736,103065],{"class":59},[19,103738,103739,103740,103742,103743,103745],{},"这行创建仿真数据。",[30,103741,35048],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[30,103744,35048],{}," 都会变化。",[23,103747,103749],{"className":25,"code":103748,"language":27,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[30,103750,103751,103761,103771],{"__ignoreMap":28},[33,103752,103753,103755,103757,103759],{"class":35,"line":36},[33,103754,72],{"class":39},[33,103756,109],{"class":59},[33,103758,103078],{"class":117},[33,103760,103081],{"class":59},[33,103762,103763,103765,103767,103769],{"class":35,"line":43},[33,103764,72],{"class":39},[33,103766,109],{"class":59},[33,103768,103090],{"class":117},[33,103770,103093],{"class":59},[33,103772,103773,103775,103777,103779],{"class":35,"line":130},[33,103774,72],{"class":39},[33,103776,109],{"class":59},[33,103778,103102],{"class":117},[33,103780,103105],{"class":59},[19,103782,103783,103785,103786,103789,103790,103793,103794,103797,103798,103801],{},[30,103784,72],{}," 用来输出信息。",[30,103787,103788],{},"model.nq"," 是位置变量数量，",[30,103791,103792],{},"model.nv"," 是速度变量数量，",[30,103795,103796],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[30,103799,103800],{},"nu"," 是 0。",[23,103803,103805],{"className":25,"code":103804,"language":27,"meta":28,"style":28},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[30,103806,103807,103817],{"__ignoreMap":28},[33,103808,103809,103811,103813,103815],{"class":35,"line":36},[33,103810,72],{"class":39},[33,103812,109],{"class":59},[33,103814,103114],{"class":117},[33,103816,103117],{"class":59},[33,103818,103819,103821,103823,103825],{"class":35,"line":43},[33,103820,72],{"class":39},[33,103822,109],{"class":59},[33,103824,103126],{"class":117},[33,103826,103129],{"class":59},[19,103828,103829,103830,103832,103833,103835,103836,103839],{},"这里打印初始时间和初始位置。",[30,103831,102706],{}," 一开始是 0。",[30,103834,102709],{}," 是位置数组。",[30,103837,103838],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[23,103841,103842],{"className":25,"code":103314,"language":27,"meta":28,"style":28},[30,103843,103844,103860],{"__ignoreMap":28},[33,103845,103846,103848,103850,103852,103854,103856,103858],{"class":35,"line":36},[33,103847,4690],{"class":63},[33,103849,103140],{"class":59},[33,103851,27699],{"class":63},[33,103853,34091],{"class":39},[33,103855,109],{"class":59},[33,103857,2129],{"class":39},[33,103859,32437],{"class":59},[33,103861,103862],{"class":35,"line":43},[33,103863,103337],{"class":59},[19,103865,103866,103868,103869,103872,103873,103875,103876,103878],{},[30,103867,4690],{}," 是循环。",[30,103870,103871],{},"range(100)"," 表示循环 100 次。",[30,103874,2807],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[30,103877,102854],{},"，仿真就前进一步。",[23,103880,103882],{"className":25,"code":103881,"language":27,"meta":28,"style":28},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[30,103883,103884,103894],{"__ignoreMap":28},[33,103885,103886,103888,103890,103892],{"class":35,"line":36},[33,103887,72],{"class":39},[33,103889,109],{"class":59},[33,103891,103168],{"class":117},[33,103893,103117],{"class":59},[33,103895,103896,103898,103900,103902],{"class":35,"line":43},[33,103897,72],{"class":39},[33,103899,109],{"class":59},[33,103901,103179],{"class":117},[33,103903,103129],{"class":59},[19,103905,103906],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[23,103908,103910],{"className":25,"code":103909,"language":27,"meta":28,"style":28},"if __name__ == \"__main__\":\n    main()\n",[30,103911,103912,103924],{"__ignoreMap":28},[33,103913,103914,103916,103918,103920,103922],{"class":35,"line":36},[33,103915,133],{"class":63},[33,103917,32871],{"class":39},[33,103919,1644],{"class":63},[33,103921,103200],{"class":117},[33,103923,143],{"class":59},[33,103925,103926],{"class":35,"line":43},[33,103927,103207],{"class":59},[19,103929,103930,103931,103934,103935,1628],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[30,103932,103933],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[30,103936,103933],{},[19,103938,103939],{},"运行:",[23,103941,103943],{"className":25477,"code":103942,"language":25479,"meta":28,"style":28},"python ch1_first_sim.py\n",[30,103944,103945],{"__ignoreMap":28},[33,103946,103947,103949],{"class":35,"line":36},[33,103948,27],{"class":3632},[33,103950,102925],{"class":117},[14,103952,103954],{"id":103953},"_5运行结果说明","5.运行结果说明",[19,103956,103957],{},"你应该看到类似输出:",[23,103959,103962],{"className":103960,"code":103961,"language":6848,"meta":28},[6846],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[30,103963,103961],{"__ignoreMap":28},[19,103965,103966,103968,103969,103972,103973,1628],{},[30,103967,103258],{}," 有 7 个位置变量: ",[30,103970,103971],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[30,103974,103975],{},"vx vy vz wx wy wz",[19,103977,103978,103979,103982],{},"你还会看到 ",[30,103980,103981],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103984,103986],{"id":103985},"_6验证步骤","6.验证步骤",[19,103988,103989],{},"确认版本:",[23,103991,103992],{"className":25477,"code":102578,"language":25479,"meta":28,"style":28},[30,103993,103994],{"__ignoreMap":28},[33,103995,103996,103998,104000],{"class":35,"line":36},[33,103997,27],{"class":3632},[33,103999,32013],{"class":39},[33,104001,102589],{"class":117},[19,104003,104004],{},"确认导入的是官方 bindings:",[23,104006,104008],{"className":25477,"code":104007,"language":25479,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco)\"\n",[30,104009,104010],{"__ignoreMap":28},[33,104011,104012,104014,104016],{"class":35,"line":36},[33,104013,27],{"class":3632},[33,104015,32013],{"class":39},[33,104017,104018],{"class":117}," \"import mujoco; print(mujoco)\"\n",[19,104020,104021],{},"运行程序:",[23,104023,104024],{"className":25477,"code":103942,"language":25479,"meta":28,"style":28},[30,104025,104026],{"__ignoreMap":28},[33,104027,104028,104030],{"class":35,"line":36},[33,104029,27],{"class":3632},[33,104031,102925],{"class":117},[19,104033,104034,104035,104038,104039,1628],{},"检查 ",[30,104036,104037],{},"final time"," 是否约等于 ",[30,104040,104041],{},"1.0",[19,104043,104044],{},"再做几个小实验：",[162,104046,104047,104057,104065,104078],{},[165,104048,104049,104050,104052,104053,104056],{},"把 ",[30,104051,103577],{}," 改成 ",[30,104054,104055],{},"pos=\"0 0 2\"","，观察初始高度变化。",[165,104058,104049,104059,104052,104061,104064],{},[30,104060,103466],{},[30,104062,104063],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[165,104066,104049,104067,104052,104069,104072,104073,104075,104076,1628],{},[30,104068,103462],{},[30,104070,104071],{},"timestep=\"0.005\"","，观察 100 步后的 ",[30,104074,104037],{}," 是否变成约 ",[30,104077,36976],{},[165,104079,104080,104081,104084],{},"删除 ",[30,104082,104083],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104086,104087],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104089,104091],{"id":104090},"_7常见错误与解决方案","7.常见错误与解决方案",[633,104093,104095],{"id":104094},"modulenotfounderror-no-module-named-mujoco",[30,104096,104097],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104099,104100],{},"解决:",[23,104102,104104],{"className":25477,"code":104103,"language":25479,"meta":28,"style":28},"pip install \"mujoco>=2.3\"\n",[30,104105,104106],{"__ignoreMap":28},[33,104107,104108,104110,104112],{"class":35,"line":36},[33,104109,25486],{"class":3632},[33,104111,25489],{"class":117},[33,104113,104114],{"class":117}," \"mujoco>=2.3\"\n",[633,104116,104118],{"id":104117},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104120,104121],{},"先安装系统依赖:",[23,104123,104125],{"className":25477,"code":104124,"language":25479,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[30,104126,104127],{"__ignoreMap":28},[33,104128,104129,104131,104133,104135,104137,104140,104142,104145,104147,104150,104152],{"class":35,"line":36},[33,104130,26232],{"class":3632},[33,104132,27971],{"class":117},[33,104134,25489],{"class":117},[33,104136,28056],{"class":39},[33,104138,104139],{"class":117}," mesa-libGL",[33,104141,102453],{"class":117},[33,104143,104144],{"class":117}," glfw",[33,104146,102473],{"class":117},[33,104148,104149],{"class":117}," libX11",[33,104151,102486],{"class":117},[33,104153,104154],{"class":117}," libXrandr\n",[633,104156,104158],{"id":104157},"xml-解析失败","XML 解析失败",[19,104160,104161],{},"检查:",[162,104163,104164,104167,104170,104176],{},[165,104165,104166],{},"标签是否闭合",[165,104168,104169],{},"属性是否带引号",[165,104171,104172,104173],{},"根节点是否是 ",[30,104174,104175],{},"\u003Cmujoco>",[165,104177,104178,104180,104181,104184],{},[30,104179,53445],{}," 是否放在 ",[30,104182,104183],{},"\u003Cworldbody>"," 内部",[633,104186,104188,104190,104191],{"id":104187},"final-time-不是严格等于-10",[30,104189,104037],{}," 不是严格等于 ",[30,104192,104041],{},[19,104194,104195],{},"这通常不是错误。浮点数计算可能得到：",[23,104197,104200],{"className":104198,"code":104199,"language":6848,"meta":28},[6846],"1.0000000000000007\n",[30,104201,104199],{"__ignoreMap":28},[19,104203,104204,104205,104207],{},"只要接近 ",[30,104206,104041],{}," 就正常。",[633,104209,104210],{"id":104210},"方块没有掉下来",[19,104212,104213],{},"检查：",[162,104215,104216,104222,104228,104233],{},[165,104217,104218,104219],{},"方块 body 里是否有 ",[30,104220,104221],{},"\u003Cfreejoint\u002F>",[165,104223,104224,104225],{},"重力是否是 ",[30,104226,104227],{},"0 0 -9.81",[165,104229,104230,104231],{},"是否真的调用了 ",[30,104232,102324],{},[165,104234,104235,104236,104238,104239],{},"你看的是否是 ",[30,104237,103981],{},"，不是 ",[30,104240,104241],{},"initial qpos",[14,104243,104245],{"id":104244},"_8本章小结","8.本章小结",[19,104247,104248],{},"本章你已经完成了 MuJoCo 的最小闭环：",[23,104250,104253],{"className":104251,"code":104252,"language":6848,"meta":28},[6846],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[30,104254,104252],{"__ignoreMap":28},[19,104256,104257],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1729,104259,104260],{},"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":43,"depth":43,"links":104262},[104263,104264,104265,104270,104274,104275,104276,104284],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":104266},[104267,104268,104269],{"id":102721,"depth":130,"text":102722},{"id":102815,"depth":130,"text":102816},{"id":102867,"depth":130,"text":102868},{"id":102891,"depth":43,"text":102892,"children":104271},[104272,104273],{"id":103210,"depth":130,"text":103210},{"id":103346,"depth":130,"text":103346},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":104277},[104278,104279,104280,104281,104283],{"id":104094,"depth":130,"text":104097},{"id":104117,"depth":130,"text":104118},{"id":104157,"depth":130,"text":104158},{"id":104187,"depth":130,"text":104282},"final time 不是严格等于 1.0",{"id":104210,"depth":130,"text":104210},{"id":104244,"depth":43,"text":104245},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102277,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104291,"title":104292,"body":104293,"description":28,"extension":1752,"meta":105949,"navigation":126,"path":105950,"seo":105951,"stem":105952,"__hash__":105953},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104294,"toc":105925},[104295,104298,104300,104303,104306,104323,104418,104421,104427,104429,104431,104455,104458,104472,104475,104516,104518,104531,104533,104536,104584,104596,104599,104602,104608,104621,104688,104691,104710,104713,104716,104722,104724,104733,104736,104740,104749,104831,104840,104844,104850,104864,104874,104876,105206,105209,105221,105223,105234,105236,105239,105257,105260,105263,105281,105292,105295,105310,105320,105322,105343,105360,105380,105386,105426,105442,105458,105464,105467,105491,105507,105512,105542,105559,105584,105587,105602,105611,105626,105635,105650,105657,105659,105669,105682,105689,105692,105731,105738,105740,105792,105794,105800,105803,105810,105817,105820,105822,105840,105843,105846,105880,105892,105894,105897,105919,105922],[10,104296,104292],{"id":104297},"_2xml-与-mjcf-物理建模基础",[14,104299,102286],{"id":102285},[19,104301,104302],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104304,104305],{},"本章结束后，你应该能看懂一个简单模型里：",[162,104307,104308,104311,104314,104317,104320],{},[165,104309,104310],{},"地面在哪里。",[165,104312,104313],{},"物体初始位置在哪里。",[165,104315,104316],{},"几何体是什么形状。",[165,104318,104319],{},"哪些 body 可以自由运动。",[165,104321,104322],{},"如何用名字在 Python 里找到 XML 中的对象。",[1956,104324,104325,104335],{},[1959,104326,104327],{},[1962,104328,104329,104332],{},[1965,104330,104331],{"align":25391},"标签",[1965,104333,104334],{"align":25391},"作用",[2003,104336,104337,104346,104356,104365,104375,104385,104398,104408],{},[1962,104338,104339,104343],{},[2008,104340,104341],{"align":25391},[30,104342,104175],{},[2008,104344,104345],{"align":25391},"根节点",[1962,104347,104348,104353],{},[2008,104349,104350],{"align":25391},[30,104351,104352],{},"\u003Coption>",[2008,104354,104355],{"align":25391},"仿真参数",[1962,104357,104358,104362],{},[2008,104359,104360],{"align":25391},[30,104361,104183],{},[2008,104363,104364],{"align":25391},"世界中的物体",[1962,104366,104367,104372],{},[2008,104368,104369],{"align":25391},[30,104370,104371],{},"\u003Cbody>",[2008,104373,104374],{"align":25391},"刚体",[1962,104376,104377,104382],{},[2008,104378,104379],{"align":25391},[30,104380,104381],{},"\u003Cgeom>",[2008,104383,104384],{"align":25391},"几何体、碰撞体、可视体",[1962,104386,104387,104395],{},[2008,104388,104389,26634,104392],{"align":25391},[30,104390,104391],{},"\u003Cjoint>",[30,104393,104394],{},"\u003Cfreejoint>",[2008,104396,104397],{"align":25391},"关节",[1962,104399,104400,104405],{},[2008,104401,104402],{"align":25391},[30,104403,104404],{},"\u003Csite>",[2008,104406,104407],{"align":25391},"标记点",[1962,104409,104410,104415],{},[2008,104411,104412],{"align":25391},[30,104413,104414],{},"\u003Cactuator>",[2008,104416,104417],{"align":25391},"控制器",[19,104419,104420],{},"初学时可以先记住：",[23,104422,104425],{"className":104423,"code":104424,"language":6848,"meta":28},[6846],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[30,104426,104424],{"__ignoreMap":28},[14,104428,102409],{"id":102408},[19,104430,102412],{},[23,104432,104434],{"className":25477,"code":104433,"language":25479,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[30,104435,104436],{"__ignoreMap":28},[33,104437,104438,104440,104442,104444,104446,104448,104450,104452],{"class":35,"line":36},[33,104439,26232],{"class":3632},[33,104441,27971],{"class":117},[33,104443,25489],{"class":117},[33,104445,28056],{"class":39},[33,104447,104139],{"class":117},[33,104449,102453],{"class":117},[33,104451,104144],{"class":117},[33,104453,104454],{"class":117}," glfw-devel\n",[19,104456,104457],{},"pip:",[23,104459,104460],{"className":25477,"code":102558,"language":25479,"meta":28,"style":28},[30,104461,104462],{"__ignoreMap":28},[33,104463,104464,104466,104468,104470],{"class":35,"line":36},[33,104465,25486],{"class":3632},[33,104467,25489],{"class":117},[33,104469,102569],{"class":117},[33,104471,102572],{"class":117},[19,104473,104474],{},"conda:",[23,104476,104478],{"className":25477,"code":104477,"language":25479,"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,104479,104480,104497,104506],{"__ignoreMap":28},[33,104481,104482,104484,104486,104488,104491,104493,104495],{"class":35,"line":36},[33,104483,31985],{"class":3632},[33,104485,30831],{"class":117},[33,104487,26771],{"class":39},[33,104489,104490],{"class":117}," mujoco-xml",[33,104492,102614],{"class":117},[33,104494,102617],{"class":39},[33,104496,102620],{"class":39},[33,104498,104499,104501,104503],{"class":35,"line":43},[33,104500,31985],{"class":3632},[33,104502,102627],{"class":117},[33,104504,104505],{"class":117}," mujoco-xml\n",[33,104507,104508,104510,104512,104514],{"class":35,"line":130},[33,104509,25486],{"class":3632},[33,104511,25489],{"class":117},[33,104513,102569],{"class":117},[33,104515,102572],{"class":117},[19,104517,102643],{},[162,104519,104520,104523,104528],{},[165,104521,104522],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[165,104524,104525,104526,1628],{},"本章使用基础标签，适用于 ",[30,104527,102666],{},[165,104529,104530],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104532,102684],{"id":102683},[19,104534,104535],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[23,104537,104539],{"className":54712,"code":104538,"language":54714,"meta":28,"style":28},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[30,104540,104541,104555,104563,104568,104576],{"__ignoreMap":28},[33,104542,104543,104545,104547,104549,104551,104553],{"class":35,"line":36},[33,104544,2726],{"class":59},[33,104546,102660],{"class":52945},[33,104548,103413],{"class":3632},[33,104550,64],{"class":59},[33,104552,64321],{"class":117},[33,104554,52952],{"class":59},[33,104556,104557,104559,104561],{"class":35,"line":43},[33,104558,53789],{"class":59},[33,104560,103479],{"class":52945},[33,104562,52952],{"class":59},[33,104564,104565],{"class":35,"line":130},[33,104566,104567],{"class":59},"    ...\n",[33,104569,104570,104572,104574],{"class":35,"line":146},[33,104571,54062],{"class":59},[33,104573,103479],{"class":52945},[33,104575,52952],{"class":59},[33,104577,104578,104580,104582],{"class":35,"line":267},[33,104579,53430],{"class":59},[33,104581,102660],{"class":52945},[33,104583,52952],{"class":59},[19,104585,104586,104588,104589,104591,104592,104595],{},[30,104587,53445],{}," 表示刚体。",[30,104590,102759],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[30,104593,104594],{},"joint"," 表示刚体相对父刚体如何运动。",[633,104597,104598],{"id":104598},"层级结构非常重要",[19,104600,104601],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[23,104603,104606],{"className":104604,"code":104605,"language":6848,"meta":28},[6846],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[30,104607,104605],{"__ignoreMap":28},[19,104609,104610,102657,104613,104616,104617,104620],{},[30,104611,104612],{},"red_box_geom",[30,104614,104615],{},"box_center"," 都属于 ",[30,104618,104619],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[23,104622,104624],{"className":54712,"code":104623,"language":54714,"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,104625,104626,104646,104660,104680],{"__ignoreMap":28},[33,104627,104628,104630,104632,104634,104636,104638,104640,104642,104644],{"class":35,"line":36},[33,104629,2726],{"class":59},[33,104631,53445],{"class":52945},[33,104633,16578],{"class":3632},[33,104635,64],{"class":59},[33,104637,55136],{"class":117},[33,104639,102745],{"class":3632},[33,104641,64],{"class":59},[33,104643,102750],{"class":117},[33,104645,52952],{"class":59},[33,104647,104648,104650,104652,104654,104656,104658],{"class":35,"line":43},[33,104649,53789],{"class":59},[33,104651,103258],{"class":52945},[33,104653,16578],{"class":3632},[33,104655,64],{"class":59},[33,104657,103599],{"class":117},[33,104659,102783],{"class":59},[33,104661,104662,104664,104666,104668,104670,104672,104674,104676,104678],{"class":35,"line":130},[33,104663,53789],{"class":59},[33,104665,102759],{"class":52945},[33,104667,55468],{"class":3632},[33,104669,64],{"class":59},[33,104671,55136],{"class":117},[33,104673,102775],{"class":3632},[33,104675,64],{"class":59},[33,104677,102780],{"class":117},[33,104679,102783],{"class":59},[33,104681,104682,104684,104686],{"class":35,"line":146},[33,104683,53430],{"class":59},[33,104685,53445],{"class":52945},[33,104687,52952],{"class":59},[19,104689,104690],{},"含义:",[162,104692,104693,104699,104704,104707],{},[165,104694,104695,104696,104698],{},"创建名为 ",[30,104697,55359],{}," 的刚体",[165,104700,104701,104702],{},"初始位置在世界坐标 ",[30,104703,102808],{},[165,104705,104706],{},"它有一个自由关节",[165,104708,104709],{},"它有一个盒子几何体",[633,104711,104712],{"id":104712},"坐标怎么理解",[19,104714,104715],{},"MuJoCo 默认使用三维坐标：",[23,104717,104720],{"className":104718,"code":104719,"language":6848,"meta":28},[6846],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[30,104721,104719],{"__ignoreMap":28},[19,104723,16291],{},[23,104725,104727],{"className":54712,"code":104726,"language":54714,"meta":28,"style":28},"pos=\"0 0 1\"\n",[30,104728,104729],{"__ignoreMap":28},[33,104730,104731],{"class":35,"line":36},[33,104732,104726],{"class":59},[19,104734,104735],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[633,104737,104739],{"id":104738},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104741,104742,104743,84170,104746,104748],{},"不同 ",[30,104744,104745],{},"type",[30,104747,33146],{}," 含义不同：",[1956,104750,104751,104766],{},[1959,104752,104753],{},[1962,104754,104755,104759,104764],{},[1965,104756,104757],{"align":25391},[30,104758,104745],{},[1965,104760,104761,104763],{"align":25391},[30,104762,33146],{}," 示例",[1965,104765,102339],{"align":25391},[2003,104767,104768,104782,104797,104816],{},[1962,104769,104770,104774,104779],{},[2008,104771,104772],{"align":25391},[30,104773,55359],{},[2008,104775,104776],{"align":25391},[30,104777,104778],{},"size=\"0.1 0.2 0.3\"",[2008,104780,104781],{"align":25391},"x\u002Fy\u002Fz 半边长，不是完整长度",[1962,104783,104784,104789,104794],{},[2008,104785,104786],{"align":25391},[30,104787,104788],{},"sphere",[2008,104790,104791],{"align":25391},[30,104792,104793],{},"size=\"0.1\"",[2008,104795,104796],{"align":25391},"球半径",[1962,104798,104799,104804,104809],{},[2008,104800,104801],{"align":25391},[30,104802,104803],{},"capsule",[2008,104805,104806],{"align":25391},[30,104807,104808],{},"size=\"0.03\"",[2008,104810,104811,104812,104815],{"align":25391},"胶囊半径，长度常用 ",[30,104813,104814],{},"fromto"," 指定",[1962,104817,104818,104823,104828],{},[2008,104819,104820],{"align":25391},[30,104821,104822],{},"plane",[2008,104824,104825],{"align":25391},[30,104826,104827],{},"size=\"3 3 0.1\"",[2008,104829,104830],{"align":25391},"可视平面大小，通常当地面",[19,104832,104833,104834,104836,104837,104839],{},"最容易踩坑的是 box：",[30,104835,103662],{}," 表示边长大约是 ",[30,104838,33687],{},"，因为 MuJoCo 用的是半边长。",[633,104841,104843],{"id":104842},"site-是什么","site 是什么",[19,104845,104846,104849],{},[30,104847,104848],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[162,104851,104852,104855,104858,104861],{},[165,104853,104854],{},"标记机械臂末端。",[165,104856,104857],{},"标记目标位置。",[165,104859,104860],{},"放传感器或相机参考点。",[165,104862,104863],{},"在 Python 中读取某个关键点的世界坐标。",[19,104865,104866,104867,102657,104870,104873],{},"在后面的 Reacher 任务中，",[30,104868,104869],{},"tip",[30,104871,104872],{},"target"," 就会用 site 表示。",[14,104875,102892],{"id":102891},[23,104877,104879],{"className":25,"code":104878,"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,104880,104881,104887,104897,104901,104905,104913,104918,104922,104926,104930,104935,104939,104944,104949,104954,104959,104963,104967,104971,104975,104979,104983,104995,105007,105015,105019,105034,105049,105053,105066,105081,105094,105107,105111,105127,105131,105135,105146,105158,105170,105182,105186,105190,105202],{"__ignoreMap":28},[33,104882,104883,104885],{"class":35,"line":36},[33,104884,32045],{"class":63},[33,104886,102940],{"class":59},[33,104888,104889,104891,104893,104895],{"class":35,"line":43},[33,104890,32045],{"class":63},[33,104892,33030],{"class":59},[33,104894,33033],{"class":63},[33,104896,33036],{"class":59},[33,104898,104899],{"class":35,"line":130},[33,104900,127],{"emptyLinePlaceholder":126},[33,104902,104903],{"class":35,"line":146},[33,104904,127],{"emptyLinePlaceholder":126},[33,104906,104907,104909,104911],{"class":35,"line":267},[33,104908,102953],{"class":39},[33,104910,15222],{"class":63},[33,104912,102958],{"class":117},[33,104914,104915],{"class":35,"line":275},[33,104916,104917],{"class":117},"\u003Cmujoco model=\"xml_basic\">\n",[33,104919,104920],{"class":35,"line":392},[33,104921,102968],{"class":117},[33,104923,104924],{"class":35,"line":406},[33,104925,127],{"emptyLinePlaceholder":126},[33,104927,104928],{"class":35,"line":418},[33,104929,102977],{"class":117},[33,104931,104932],{"class":35,"line":425},[33,104933,104934],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[33,104936,104937],{"class":35,"line":1147},[33,104938,127],{"emptyLinePlaceholder":126},[33,104940,104941],{"class":35,"line":1329},[33,104942,104943],{"class":117},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[33,104945,104946],{"class":35,"line":1341},[33,104947,104948],{"class":117},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[33,104950,104951],{"class":35,"line":1348},[33,104952,104953],{"class":117},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,104955,104956],{"class":35,"line":1529},[33,104957,104958],{"class":117},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104960,104961],{"class":35,"line":1546},[33,104962,103006],{"class":117},[33,104964,104965],{"class":35,"line":1551},[33,104966,103011],{"class":117},[33,104968,104969],{"class":35,"line":1566},[33,104970,103016],{"class":117},[33,104972,104973],{"class":35,"line":1578},[33,104974,97337],{"class":117},[33,104976,104977],{"class":35,"line":1583},[33,104978,127],{"emptyLinePlaceholder":126},[33,104980,104981],{"class":35,"line":3369},[33,104982,127],{"emptyLinePlaceholder":126},[33,104984,104985,104987,104989,104991,104993],{"class":35,"line":3396},[33,104986,33597],{"class":63},[33,104988,3642],{"class":3632},[33,104990,103037],{"class":59},[33,104992,97325],{"class":39},[33,104994,143],{"class":59},[33,104996,104997,104999,105001,105003,105005],{"class":35,"line":3401},[33,104998,103046],{"class":59},[33,105000,64],{"class":63},[33,105002,103051],{"class":59},[33,105004,102953],{"class":39},[33,105006,157],{"class":59},[33,105008,105009,105011,105013],{"class":35,"line":3418},[33,105010,103060],{"class":59},[33,105012,64],{"class":63},[33,105014,103065],{"class":59},[33,105016,105017],{"class":35,"line":3423},[33,105018,127],{"emptyLinePlaceholder":126},[33,105020,105021,105024,105026,105029,105032],{"class":35,"line":3428},[33,105022,105023],{"class":59},"    box_body_id ",[33,105025,64],{"class":63},[33,105027,105028],{"class":59}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[33,105030,105031],{"class":117},"\"red_box\"",[33,105033,157],{"class":59},[33,105035,105036,105039,105041,105044,105047],{"class":35,"line":3433},[33,105037,105038],{"class":59},"    site_id ",[33,105040,64],{"class":63},[33,105042,105043],{"class":59}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[33,105045,105046],{"class":117},"\"box_center\"",[33,105048,157],{"class":59},[33,105050,105051],{"class":35,"line":3447},[33,105052,127],{"emptyLinePlaceholder":126},[33,105054,105055,105057,105060,105062,105064],{"class":35,"line":3452},[33,105056,567],{"class":63},[33,105058,105059],{"class":59}," box_body_id ",[33,105061,2726],{"class":63},[33,105063,829],{"class":39},[33,105065,143],{"class":59},[33,105067,105068,105071,105074,105076,105079],{"class":35,"line":4243},[33,105069,105070],{"class":63},"        raise",[33,105072,105073],{"class":39}," RuntimeError",[33,105075,109],{"class":59},[33,105077,105078],{"class":117},"\"body red_box not found\"",[33,105080,157],{"class":59},[33,105082,105083,105085,105088,105090,105092],{"class":35,"line":4257},[33,105084,567],{"class":63},[33,105086,105087],{"class":59}," site_id ",[33,105089,2726],{"class":63},[33,105091,829],{"class":39},[33,105093,143],{"class":59},[33,105095,105096,105098,105100,105102,105105],{"class":35,"line":4265},[33,105097,105070],{"class":63},[33,105099,105073],{"class":39},[33,105101,109],{"class":59},[33,105103,105104],{"class":117},"\"site box_center not found\"",[33,105106,157],{"class":59},[33,105108,105109],{"class":35,"line":4270},[33,105110,127],{"emptyLinePlaceholder":126},[33,105112,105113,105115,105117,105119,105121,105123,105125],{"class":35,"line":4276},[33,105114,4864],{"class":63},[33,105116,103140],{"class":59},[33,105118,27699],{"class":63},[33,105120,34091],{"class":39},[33,105122,109],{"class":59},[33,105124,3391],{"class":39},[33,105126,32437],{"class":59},[33,105128,105129],{"class":35,"line":4282},[33,105130,103155],{"class":59},[33,105132,105133],{"class":35,"line":4287},[33,105134,127],{"emptyLinePlaceholder":126},[33,105136,105137,105139,105141,105144],{"class":35,"line":9608},[33,105138,149],{"class":39},[33,105140,109],{"class":59},[33,105142,105143],{"class":117},"\"simulation time:\"",[33,105145,103117],{"class":59},[33,105147,105148,105150,105152,105155],{"class":35,"line":9632},[33,105149,149],{"class":39},[33,105151,109],{"class":59},[33,105153,105154],{"class":117},"\"box body position:\"",[33,105156,105157],{"class":59},", data.xpos[box_body_id].copy())\n",[33,105159,105160,105162,105164,105167],{"class":35,"line":9637},[33,105161,149],{"class":39},[33,105163,109],{"class":59},[33,105165,105166],{"class":117},"\"site position:\"",[33,105168,105169],{"class":59},", data.site_xpos[site_id].copy())\n",[33,105171,105172,105174,105176,105179],{"class":35,"line":9643},[33,105173,149],{"class":39},[33,105175,109],{"class":59},[33,105177,105178],{"class":117},"\"box qpos:\"",[33,105180,105181],{"class":59},", np.array(data.qpos))\n",[33,105183,105184],{"class":35,"line":9670},[33,105185,127],{"emptyLinePlaceholder":126},[33,105187,105188],{"class":35,"line":9675},[33,105189,127],{"emptyLinePlaceholder":126},[33,105191,105192,105194,105196,105198,105200],{"class":35,"line":9681},[33,105193,133],{"class":63},[33,105195,32871],{"class":39},[33,105197,1644],{"class":63},[33,105199,103200],{"class":117},[33,105201,143],{"class":59},[33,105203,105204],{"class":35,"line":9693},[33,105205,103207],{"class":59},[19,105207,105208],{},"保存为：",[23,105210,105212],{"className":25477,"code":105211,"language":25479,"meta":28,"style":28},"touch ch2_xml_basic.py\n",[30,105213,105214],{"__ignoreMap":28},[33,105215,105216,105218],{"class":35,"line":36},[33,105217,102922],{"class":3632},[33,105219,105220],{"class":117}," ch2_xml_basic.py\n",[19,105222,103939],{},[23,105224,105226],{"className":25477,"code":105225,"language":25479,"meta":28,"style":28},"python ch2_xml_basic.py\n",[30,105227,105228],{"__ignoreMap":28},[33,105229,105230,105232],{"class":35,"line":36},[33,105231,27],{"class":3632},[33,105233,105220],{"class":117},[633,105235,103210],{"id":103210},[19,105237,105238],{},"用名字查找 body：",[23,105240,105242],{"className":25,"code":105241,"language":27,"meta":28,"style":28},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[30,105243,105244],{"__ignoreMap":28},[33,105245,105246,105249,105251,105253,105255],{"class":35,"line":36},[33,105247,105248],{"class":59},"box_body_id ",[33,105250,64],{"class":63},[33,105252,105028],{"class":59},[33,105254,105031],{"class":117},[33,105256,157],{"class":59},[19,105258,105259],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105261,105262],{},"用名字查找 site：",[23,105264,105266],{"className":25,"code":105265,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[30,105267,105268],{"__ignoreMap":28},[33,105269,105270,105273,105275,105277,105279],{"class":35,"line":36},[33,105271,105272],{"class":59},"site_id ",[33,105274,64],{"class":63},[33,105276,105043],{"class":59},[33,105278,105046],{"class":117},[33,105280,157],{"class":59},[19,105282,105283,105284,105287,105288,105291],{},"注意第二个参数是对象类型。查 body 就用 ",[30,105285,105286],{},"mjOBJ_BODY","，查 site 就用 ",[30,105289,105290],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105293,105294],{},"读取世界坐标：",[23,105296,105298],{"className":25,"code":105297,"language":27,"meta":28,"style":28},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[30,105299,105300,105305],{"__ignoreMap":28},[33,105301,105302],{"class":35,"line":36},[33,105303,105304],{"class":59},"data.xpos[box_body_id]\n",[33,105306,105307],{"class":35,"line":43},[33,105308,105309],{"class":59},"data.site_xpos[site_id]\n",[19,105311,105312,105315,105316,105319],{},[30,105313,105314],{},"xpos"," 是 body 的世界坐标，",[30,105317,105318],{},"site_xpos"," 是 site 的世界坐标。",[633,105321,103346],{"id":103346},[23,105323,105325],{"className":25,"code":105324,"language":27,"meta":28,"style":28},"import mujoco\nimport numpy as np\n",[30,105326,105327,105333],{"__ignoreMap":28},[33,105328,105329,105331],{"class":35,"line":36},[33,105330,32045],{"class":63},[33,105332,102940],{"class":59},[33,105334,105335,105337,105339,105341],{"class":35,"line":43},[33,105336,32045],{"class":63},[33,105338,33030],{"class":59},[33,105340,33033],{"class":63},[33,105342,33036],{"class":59},[19,105344,105345,105346,105349,105350,105353,105354,2031,105357,1628],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[30,105347,105348],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[30,105351,105352],{},"as np"," 是习惯写法，后面就可以写 ",[30,105355,105356],{},"np.array(...)",[30,105358,105359],{},"np.round(...)",[23,105361,105362],{"className":25,"code":103233,"language":27,"meta":28,"style":28},[30,105363,105364,105372,105376],{"__ignoreMap":28},[33,105365,105366,105368,105370],{"class":35,"line":36},[33,105367,102953],{"class":39},[33,105369,15222],{"class":63},[33,105371,102958],{"class":117},[33,105373,105374],{"class":35,"line":43},[33,105375,103248],{"class":117},[33,105377,105378],{"class":35,"line":130},[33,105379,97337],{"class":117},[19,105381,105382,105383,1628],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[30,105384,105385],{},"mujoco.MjModel.from_xml_string(XML)",[23,105387,105389],{"className":54712,"code":105388,"language":54714,"meta":28,"style":28},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,105390,105391],{"__ignoreMap":28},[33,105392,105393,105395,105397,105399,105401,105403,105405,105407,105410,105412,105414,105417,105419,105421,105424],{"class":35,"line":36},[33,105394,2726],{"class":59},[33,105396,104848],{"class":52945},[33,105398,16578],{"class":3632},[33,105400,64],{"class":59},[33,105402,105046],{"class":117},[33,105404,102745],{"class":3632},[33,105406,64],{"class":59},[33,105408,105409],{"class":117},"\"0 0 0\"",[33,105411,102775],{"class":3632},[33,105413,64],{"class":59},[33,105415,105416],{"class":117},"\"0.03\"",[33,105418,80408],{"class":3632},[33,105420,64],{"class":59},[33,105422,105423],{"class":117},"\"0 1 0 1\"",[33,105425,102783],{"class":59},[19,105427,105428,105430,105431,105434,105435,105437,105438,105441],{},[30,105429,104848],{}," 是标记点。",[30,105432,105433],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[30,105436,104808],{}," 表示显示出来的小球大小。",[30,105439,105440],{},"rgba=\"0 1 0 1\""," 表示绿色。",[23,105443,105444],{"className":25,"code":105241,"language":27,"meta":28,"style":28},[30,105445,105446],{"__ignoreMap":28},[33,105447,105448,105450,105452,105454,105456],{"class":35,"line":36},[33,105449,105248],{"class":59},[33,105451,64],{"class":63},[33,105453,105028],{"class":59},[33,105455,105031],{"class":117},[33,105457,157],{"class":59},[19,105459,105460,105461,105463],{},"这行的作用是：根据名字 ",[30,105462,105031],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105465,105466],{},"拆开看：",[162,105468,105469,105475,105480,105486],{},[165,105470,105471,105474],{},[30,105472,105473],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[165,105476,105477,105479],{},[30,105478,103723],{}," 是被查询的模型。",[165,105481,105482,105485],{},[30,105483,105484],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[165,105487,105488,105490],{},[30,105489,105031],{}," 是 XML 里写的名字。",[23,105492,105493],{"className":25,"code":105265,"language":27,"meta":28,"style":28},[30,105494,105495],{"__ignoreMap":28},[33,105496,105497,105499,105501,105503,105505],{"class":35,"line":36},[33,105498,105272],{"class":59},[33,105500,64],{"class":63},[33,105502,105043],{"class":59},[33,105504,105046],{"class":117},[33,105506,157],{"class":59},[19,105508,105509,105510,1628],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[30,105511,105046],{},[23,105513,105515],{"className":25,"code":105514,"language":27,"meta":28,"style":28},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[30,105516,105517,105529],{"__ignoreMap":28},[33,105518,105519,105521,105523,105525,105527],{"class":35,"line":36},[33,105520,133],{"class":63},[33,105522,105059],{"class":59},[33,105524,2726],{"class":63},[33,105526,829],{"class":39},[33,105528,143],{"class":59},[33,105530,105531,105534,105536,105538,105540],{"class":35,"line":43},[33,105532,105533],{"class":63},"    raise",[33,105535,105073],{"class":39},[33,105537,109],{"class":59},[33,105539,105078],{"class":117},[33,105541,157],{"class":59},[19,105543,105544,105546,105547,105550,105551,105554,105555,105558],{},[30,105545,133],{}," 是条件判断。",[30,105548,105549],{},"mj_name2id"," 找不到对象时会返回 ",[30,105552,105553],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[30,105556,105557],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[23,105560,105562],{"className":25,"code":105561,"language":27,"meta":28,"style":28},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[30,105563,105564,105580],{"__ignoreMap":28},[33,105565,105566,105568,105570,105572,105574,105576,105578],{"class":35,"line":36},[33,105567,4690],{"class":63},[33,105569,103140],{"class":59},[33,105571,27699],{"class":63},[33,105573,34091],{"class":39},[33,105575,109],{"class":59},[33,105577,3391],{"class":39},[33,105579,32437],{"class":59},[33,105581,105582],{"class":35,"line":43},[33,105583,103337],{"class":59},[19,105585,105586],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[23,105588,105590],{"className":25,"code":105589,"language":27,"meta":28,"style":28},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[30,105591,105592],{"__ignoreMap":28},[33,105593,105594,105596,105598,105600],{"class":35,"line":36},[33,105595,72],{"class":39},[33,105597,109],{"class":59},[33,105599,105154],{"class":117},[33,105601,105157],{"class":59},[19,105603,105604,105606,105607,105610],{},[30,105605,102718],{}," 保存所有 body 的世界坐标。",[30,105608,105609],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[23,105612,105614],{"className":25,"code":105613,"language":27,"meta":28,"style":28},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[30,105615,105616],{"__ignoreMap":28},[33,105617,105618,105620,105622,105624],{"class":35,"line":36},[33,105619,72],{"class":39},[33,105621,109],{"class":59},[33,105623,105166],{"class":117},[33,105625,105169],{"class":59},[19,105627,105628,105631,105632,105634],{},[30,105629,105630],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[30,105633,104615],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[23,105636,105638],{"className":25,"code":105637,"language":27,"meta":28,"style":28},"print(\"box qpos:\", np.array(data.qpos))\n",[30,105639,105640],{"__ignoreMap":28},[33,105641,105642,105644,105646,105648],{"class":35,"line":36},[33,105643,72],{"class":39},[33,105645,109],{"class":59},[33,105647,105178],{"class":117},[33,105649,105181],{"class":59},[19,105651,105652,105653,105656],{},"这里打印广义位置数组。",[30,105654,105655],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105658,103954],{"id":103953},[19,105660,105661,105662,105665,105666,1628],{},"程序会输出 ",[30,105663,105664],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[30,105667,105668],{},"qpos",[19,105670,105671,105673,105674,105677,105678,105681],{},[30,105672,105609],{}," 是 body 的世界坐标位置。",[30,105675,105676],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[30,105679,105680],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105683,83862,105684,84170,105686,105688],{},[30,105685,104615],{},[30,105687,105433],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105690,105691],{},"如果你把 site 改成：",[23,105693,105695],{"className":54712,"code":105694,"language":54714,"meta":28,"style":28},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,105696,105697],{"__ignoreMap":28},[33,105698,105699,105701,105703,105705,105707,105710,105712,105714,105717,105719,105721,105723,105725,105727,105729],{"class":35,"line":36},[33,105700,2726],{"class":59},[33,105702,104848],{"class":52945},[33,105704,16578],{"class":3632},[33,105706,64],{"class":59},[33,105708,105709],{"class":117},"\"box_top\"",[33,105711,102745],{"class":3632},[33,105713,64],{"class":59},[33,105715,105716],{"class":117},"\"0 0 0.15\"",[33,105718,102775],{"class":3632},[33,105720,64],{"class":59},[33,105722,105416],{"class":117},[33,105724,80408],{"class":3632},[33,105726,64],{"class":59},[33,105728,105423],{"class":117},[33,105730,102783],{"class":59},[19,105732,105733,105734,105737],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[30,105735,105736],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105739,103986],{"id":103985},[162,105741,105742,105751,105754,105761,105767,105778],{},[165,105743,104049,105744,105746,105747,104052,105749,1628],{},[30,105745,104619],{}," 的初始高度从 ",[30,105748,2036],{},[30,105750,1897],{},[165,105752,105753],{},"重新运行程序。",[165,105755,105756,105757,105760],{},"观察 ",[30,105758,105759],{},"box qpos"," 和最终位置是否变化。",[165,105762,105763,105764,105766],{},"故意把 ",[30,105765,104848],{}," 名称改错，确认程序能报错。",[165,105768,104049,105769,105771,105772,104052,105774,105777],{},[30,105770,102759],{}," 的颜色 ",[30,105773,103670],{},[30,105775,105776],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[165,105779,104049,105780,84170,105782,104052,105785,105788,105789,105791],{},[30,105781,104615],{},[30,105783,105784],{},"pos",[30,105786,105787],{},"0 0 0.2","，观察 ",[30,105790,105736],{}," 如何变化。",[14,105793,104091],{"id":104090},[633,105795,105797],{"id":105796},"xml-error-schema-violation",[30,105798,105799],{},"XML Error: Schema violation",[19,105801,105802],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[633,105804,105806,82930,105808],{"id":105805},"mj_name2id-返回-1",[30,105807,105549],{},[30,105809,105553],{},[19,105811,105812,105813,105816],{},"说明名字没有找到。检查 XML 中 ",[30,105814,105815],{},"name=\"...\"","，并确认对象类型正确。",[633,105818,105819],{"id":105819},"物体不下落",[19,105821,104161],{},[162,105823,105824,105829,105834],{},[165,105825,105826,105827],{},"body 是否有 ",[30,105828,103258],{},[165,105830,105831,105832],{},"gravity 是否为 ",[30,105833,104227],{},[165,105835,105836,105837,105839],{},"body 是否被固定在 ",[30,105838,103479],{}," 中",[633,105841,105842],{"id":105842},"坐标看起来不符合预期",[19,105844,105845],{},"先区分两种坐标：",[1956,105847,105848,105857],{},[1959,105849,105850],{},[1962,105851,105852,105855],{},[1965,105853,105854],{"align":25391},"坐标",[1965,105856,102339],{"align":25391},[2003,105858,105859,105869],{},[1962,105860,105861,105866],{},[2008,105862,105863,105864],{"align":25391},"XML 里的 ",[30,105865,105784],{},[2008,105867,105868],{"align":25391},"相对父 body 的局部坐标",[1962,105870,105871,105877],{},[2008,105872,105873,26634,105875],{"align":25391},[30,105874,102718],{},[30,105876,105630],{},[2008,105878,105879],{"align":25391},"仿真更新后的世界坐标",[19,105881,105882,105883,105885,105886,84179,105889,105891],{},"如果你修改了 ",[30,105884,102709],{},"，但还没调用 ",[30,105887,105888],{},"mj_forward",[30,105890,102854],{},"，世界坐标可能还没有更新。",[14,105893,104245],{"id":104244},[19,105895,105896],{},"MJCF 建模先掌握四件事：",[162,105898,105899,105904,105909,105914],{},[165,105900,105901,105903],{},[30,105902,53445],{}," 表示刚体层级。",[165,105905,105906,105908],{},[30,105907,102759],{}," 表示形状、碰撞和质量。",[165,105910,105911,105913],{},[30,105912,104594],{}," 决定 body 能不能动、怎么动。",[165,105915,105916,105918],{},[30,105917,104848],{}," 用来标记关键点，方便 Python 读取位置。",[19,105920,105921],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1729,105923,105924],{},"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":43,"depth":43,"links":105926},[105927,105928,105929,105935,105939,105940,105941,105948],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":105930},[105931,105932,105933,105934],{"id":104598,"depth":130,"text":104598},{"id":104712,"depth":130,"text":104712},{"id":104738,"depth":130,"text":104739},{"id":104842,"depth":130,"text":104843},{"id":102891,"depth":43,"text":102892,"children":105936},[105937,105938],{"id":103210,"depth":130,"text":103210},{"id":103346,"depth":130,"text":103346},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":105942},[105943,105944,105946,105947],{"id":105796,"depth":130,"text":105799},{"id":105805,"depth":130,"text":105945},"mj_name2id 返回 -1",{"id":105819,"depth":130,"text":105819},{"id":105842,"depth":130,"text":105842},{"id":104244,"depth":43,"text":104245},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104292,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105955,"title":105956,"body":105957,"description":28,"extension":1752,"meta":107452,"navigation":126,"path":107453,"seo":107454,"stem":107455,"__hash__":107456},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105958,"toc":107424},[105959,105962,105964,105967,105970,106008,106011,106017,106020,106022,106024,106051,106053,106067,106069,106110,106112,106136,106138,106141,106150,106159,106162,106171,106179,106188,106191,106201,106204,106256,106263,106269,106277,106325,106328,106347,106350,106358,106362,106371,106404,106406,106754,106756,106768,106770,106781,106783,106786,106807,106813,106816,106841,106851,106854,106862,106865,106868,106889,106900,106902,106922,106925,106946,106955,106974,106980,107005,107008,107022,107029,107053,107056,107064,107073,107089,107101,107109,107118,107120,107123,107147,107152,107155,107177,107179,107218,107220,107227,107229,107237,107240,107243,107255,107296,107303,107314,107321,107324,107373,107376,107379,107385,107387,107392,107418,107421],[10,105960,105956],{"id":105961},"_3python-控制接口读取状态与推进仿真",[14,105963,102286],{"id":102285},[19,105965,105966],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105968,105969],{},"你将学习:",[162,105971,105972,105977,105982,105986,105991,106002],{},[165,105973,105974],{},[30,105975,105976],{},"MjModel.from_xml_string",[165,105978,105979],{},[30,105980,105981],{},"MjData(model)",[165,105983,105984],{},[30,105985,102854],{},[165,105987,105988],{},[30,105989,105990],{},"mj_resetData",[165,105992,105993,105994,2031,105996,2031,105999],{},"读取 ",[30,105995,105668],{},[30,105997,105998],{},"qvel",[30,106000,106001],{},"ctrl",[165,106003,106004,106005],{},"使用 ",[30,106006,106007],{},"model.opt.timestep",[19,106009,106010],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[23,106012,106015],{"className":106013,"code":106014,"language":6848,"meta":28},[6846],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[30,106016,106014],{"__ignoreMap":28},[19,106018,106019],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106021,102409],{"id":102408},[19,106023,102412],{},[23,106025,106027],{"className":25477,"code":106026,"language":25479,"meta":28,"style":28},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[30,106028,106029],{"__ignoreMap":28},[33,106030,106031,106033,106035,106037,106039,106042,106044,106046,106048],{"class":35,"line":36},[33,106032,26232],{"class":3632},[33,106034,27971],{"class":117},[33,106036,25489],{"class":117},[33,106038,28056],{"class":39},[33,106040,106041],{"class":117}," python3",[33,106043,102437],{"class":117},[33,106045,104139],{"class":117},[33,106047,102453],{"class":117},[33,106049,106050],{"class":117}," glfw\n",[19,106052,104457],{},[23,106054,106055],{"className":25477,"code":102558,"language":25479,"meta":28,"style":28},[30,106056,106057],{"__ignoreMap":28},[33,106058,106059,106061,106063,106065],{"class":35,"line":36},[33,106060,25486],{"class":3632},[33,106062,25489],{"class":117},[33,106064,102569],{"class":117},[33,106066,102572],{"class":117},[19,106068,104474],{},[23,106070,106072],{"className":25477,"code":106071,"language":25479,"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,106073,106074,106091,106100],{"__ignoreMap":28},[33,106075,106076,106078,106080,106082,106085,106087,106089],{"class":35,"line":36},[33,106077,31985],{"class":3632},[33,106079,30831],{"class":117},[33,106081,26771],{"class":39},[33,106083,106084],{"class":117}," mujoco-python-api",[33,106086,102614],{"class":117},[33,106088,102617],{"class":39},[33,106090,102620],{"class":39},[33,106092,106093,106095,106097],{"class":35,"line":43},[33,106094,31985],{"class":3632},[33,106096,102627],{"class":117},[33,106098,106099],{"class":117}," mujoco-python-api\n",[33,106101,106102,106104,106106,106108],{"class":35,"line":130},[33,106103,25486],{"class":3632},[33,106105,25489],{"class":117},[33,106107,102569],{"class":117},[33,106109,102572],{"class":117},[19,106111,102643],{},[162,106113,106114,106121,106130],{},[165,106115,106116,102657,106118,106120],{},[30,106117,102314],{},[30,106119,102319],{}," 是官方 Python bindings 的类名。",[165,106122,106123,106124,106127,106128,1628],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[30,106125,106126],{},"mjModel"," 在 Python 中是 ",[30,106129,102348],{},[165,106131,106132,106133,1628],{},"不要使用 ",[30,106134,106135],{},"sim = mujoco_py.MjSim(...)",[14,106137,102684],{"id":102683},[19,106139,106140],{},"仿真推进核心代码:",[23,106142,106144],{"className":25,"code":106143,"language":27,"meta":28,"style":28},"mujoco.mj_step(model, data)\n",[30,106145,106146],{"__ignoreMap":28},[33,106147,106148],{"class":35,"line":36},[33,106149,106143],{"class":59},[19,106151,106152,106153,2031,106155,2031,106157,1628],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[30,106154,102709],{},[30,106156,102712],{},[30,106158,102706],{},[19,106160,106161],{},"重置仿真:",[23,106163,106165],{"className":25,"code":106164,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\n",[30,106166,106167],{"__ignoreMap":28},[33,106168,106169],{"class":35,"line":36},[33,106170,106164],{"class":59},[19,106172,106173,106174,84179,106176,106178],{},"如果手动修改了 ",[30,106175,102709],{},[30,106177,102712],{},"，通常应调用:",[23,106180,106182],{"className":25,"code":106181,"language":27,"meta":28,"style":28},"mujoco.mj_forward(model, data)\n",[30,106183,106184],{"__ignoreMap":28},[33,106185,106186],{"class":35,"line":36},[33,106187,106181],{"class":59},[19,106189,106190],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[633,106192,106194,2031,106196,2031,106198,106200],{"id":106193},"qposqvelctrl-是什么",[30,106195,105668],{},[30,106197,105998],{},[30,106199,106001],{}," 是什么",[19,106202,106203],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1956,106205,106206,106218],{},[1959,106207,106208],{},[1962,106209,106210,106213,106215],{},[1965,106211,106212],{"align":25391},"字段",[1965,106214,102339],{"align":25391},[1965,106216,106217],{"align":25391},"谁来修改",[2003,106219,106220,106232,106244],{},[1962,106221,106222,106226,106229],{},[2008,106223,106224],{"align":25391},[30,106225,102709],{},[2008,106227,106228],{"align":25391},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2008,106230,106231],{"align":25391},"MuJoCo 更新，也可以手动设置初始状态",[1962,106233,106234,106238,106241],{},[2008,106235,106236],{"align":25391},[30,106237,102712],{},[2008,106239,106240],{"align":25391},"广义速度，例如小车速度、关节角速度",[2008,106242,106243],{"align":25391},"MuJoCo 更新，也可以手动清零",[1962,106245,106246,106250,106253],{},[2008,106247,106248],{"align":25391},[30,106249,102715],{},[2008,106251,106252],{"align":25391},"actuator 的控制输入",[2008,106254,106255],{"align":25391},"主要由你的控制代码写入",[19,106257,160,106258,102657,106260,106262],{},[30,106259,105668],{},[30,106261,105998],{}," 不一定同维。自由刚体就是典型例子：",[23,106264,106267],{"className":106265,"code":106266,"language":6848,"meta":28},[6846],"freejoint: qpos 7 维，qvel 6 维\n",[30,106268,106266],{"__ignoreMap":28},[633,106270,106272,102657,106274,106276],{"id":106271},"mj_step-和-mj_forward-的区别",[30,106273,102854],{},[30,106275,105888],{}," 的区别",[1956,106278,106279,106292],{},[1959,106280,106281],{},[1962,106282,106283,106286,106289],{},[1965,106284,106285],{"align":25391},"函数",[1965,106287,106288],{"align":25391},"是否推进时间",[1965,106290,106291],{"align":25391},"什么时候用",[2003,106293,106294,106307],{},[1962,106295,106296,106301,106304],{},[2008,106297,106298],{"align":25391},[30,106299,106300],{},"mj_step(model, data)",[2008,106302,106303],{"align":25391},"是",[2008,106305,106306],{"align":25391},"正常仿真循环，每调用一次前进一步",[1962,106308,106309,106314,106317],{},[2008,106310,106311],{"align":25391},[30,106312,106313],{},"mj_forward(model, data)",[2008,106315,106316],{"align":25391},"否",[2008,106318,106319,106320,2031,106322,106324],{"align":25391},"手动改了 ",[30,106321,105668],{},[30,106323,105998],{}," 后，刷新派生量",[19,106326,106327],{},"例如你写：",[23,106329,106331],{"className":25,"code":106330,"language":27,"meta":28,"style":28},"data.qpos[2] = 2.0\n",[30,106332,106333],{"__ignoreMap":28},[33,106334,106335,106338,106340,106342,106344],{"class":35,"line":36},[33,106336,106337],{"class":59},"data.qpos[",[33,106339,1897],{"class":39},[33,106341,6104],{"class":59},[33,106343,64],{"class":63},[33,106345,106346],{"class":39}," 2.0\n",[19,106348,106349],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[23,106351,106352],{"className":25,"code":106181,"language":27,"meta":28,"style":28},[30,106353,106354],{"__ignoreMap":28},[33,106355,106356],{"class":35,"line":36},[33,106357,106181],{"class":59},[633,106359,106361],{"id":106360},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106363,106364,106367,106368,106370],{},[30,106365,106366],{},"mujoco.mj_resetData(model, data)"," 会把 ",[30,106369,35048],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[23,106372,106374],{"className":25,"code":106373,"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,106375,106376,106380,106390,106400],{"__ignoreMap":28},[33,106377,106378],{"class":35,"line":36},[33,106379,106164],{"class":59},[33,106381,106382,106385,106387],{"class":35,"line":43},[33,106383,106384],{"class":59},"data.qpos[:] ",[33,106386,64],{"class":63},[33,106388,106389],{"class":59}," random_qpos\n",[33,106391,106392,106395,106397],{"class":35,"line":130},[33,106393,106394],{"class":59},"data.qvel[:] ",[33,106396,64],{"class":63},[33,106398,106399],{"class":39}," 0.0\n",[33,106401,106402],{"class":35,"line":146},[33,106403,106181],{"class":59},[14,106405,102892],{"id":102891},[23,106407,106409],{"className":25,"code":106408,"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,106410,106411,106417,106427,106431,106435,106443,106448,106452,106456,106460,106465,106469,106474,106479,106484,106488,106492,106496,106500,106504,106508,106527,106534,106546,106557,106573,106589,106593,106597,106609,106621,106629,106633,106644,106648,106664,106668,106672,106681,106685,106690,106699,106703,106716,106721,106730,106734,106738,106750],{"__ignoreMap":28},[33,106412,106413,106415],{"class":35,"line":36},[33,106414,32045],{"class":63},[33,106416,102940],{"class":59},[33,106418,106419,106421,106423,106425],{"class":35,"line":43},[33,106420,32045],{"class":63},[33,106422,33030],{"class":59},[33,106424,33033],{"class":63},[33,106426,33036],{"class":59},[33,106428,106429],{"class":35,"line":130},[33,106430,127],{"emptyLinePlaceholder":126},[33,106432,106433],{"class":35,"line":146},[33,106434,127],{"emptyLinePlaceholder":126},[33,106436,106437,106439,106441],{"class":35,"line":267},[33,106438,102953],{"class":39},[33,106440,15222],{"class":63},[33,106442,102958],{"class":117},[33,106444,106445],{"class":35,"line":275},[33,106446,106447],{"class":117},"\u003Cmujoco model=\"state_api\">\n",[33,106449,106450],{"class":35,"line":392},[33,106451,102968],{"class":117},[33,106453,106454],{"class":35,"line":406},[33,106455,127],{"emptyLinePlaceholder":126},[33,106457,106458],{"class":35,"line":418},[33,106459,102977],{"class":117},[33,106461,106462],{"class":35,"line":425},[33,106463,106464],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[33,106466,106467],{"class":35,"line":1147},[33,106468,127],{"emptyLinePlaceholder":126},[33,106470,106471],{"class":35,"line":1329},[33,106472,106473],{"class":117},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[33,106475,106476],{"class":35,"line":1341},[33,106477,106478],{"class":117},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[33,106480,106481],{"class":35,"line":1348},[33,106482,106483],{"class":117},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[33,106485,106486],{"class":35,"line":1529},[33,106487,103006],{"class":117},[33,106489,106490],{"class":35,"line":1546},[33,106491,103011],{"class":117},[33,106493,106494],{"class":35,"line":1551},[33,106495,103016],{"class":117},[33,106497,106498],{"class":35,"line":1566},[33,106499,97337],{"class":117},[33,106501,106502],{"class":35,"line":1578},[33,106503,127],{"emptyLinePlaceholder":126},[33,106505,106506],{"class":35,"line":1583},[33,106507,127],{"emptyLinePlaceholder":126},[33,106509,106510,106512,106515,106518,106520,106523,106525],{"class":35,"line":3369},[33,106511,33597],{"class":63},[33,106513,106514],{"class":3632}," print_state",[33,106516,106517],{"class":59},"(prefix: ",[33,106519,2985],{"class":39},[33,106521,106522],{"class":59},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,106524,97325],{"class":39},[33,106526,143],{"class":59},[33,106528,106529,106531],{"class":35,"line":3396},[33,106530,149],{"class":39},[33,106532,106533],{"class":59},"(prefix)\n",[33,106535,106536,106538,106540,106543],{"class":35,"line":3401},[33,106537,149],{"class":39},[33,106539,109],{"class":59},[33,106541,106542],{"class":117},"\"  timestep:\"",[33,106544,106545],{"class":59},", model.opt.timestep)\n",[33,106547,106548,106550,106552,106555],{"class":35,"line":3418},[33,106549,149],{"class":39},[33,106551,109],{"class":59},[33,106553,106554],{"class":117},"\"  time:\"",[33,106556,103117],{"class":59},[33,106558,106559,106561,106563,106566,106569,106571],{"class":35,"line":3423},[33,106560,149],{"class":39},[33,106562,109],{"class":59},[33,106564,106565],{"class":117},"\"  qpos:\"",[33,106567,106568],{"class":59},", np.round(data.qpos.copy(), ",[33,106570,2111],{"class":39},[33,106572,121],{"class":59},[33,106574,106575,106577,106579,106582,106585,106587],{"class":35,"line":3428},[33,106576,149],{"class":39},[33,106578,109],{"class":59},[33,106580,106581],{"class":117},"\"  qvel:\"",[33,106583,106584],{"class":59},", np.round(data.qvel.copy(), ",[33,106586,2111],{"class":39},[33,106588,121],{"class":59},[33,106590,106591],{"class":35,"line":3433},[33,106592,127],{"emptyLinePlaceholder":126},[33,106594,106595],{"class":35,"line":3447},[33,106596,127],{"emptyLinePlaceholder":126},[33,106598,106599,106601,106603,106605,106607],{"class":35,"line":3452},[33,106600,33597],{"class":63},[33,106602,3642],{"class":3632},[33,106604,103037],{"class":59},[33,106606,97325],{"class":39},[33,106608,143],{"class":59},[33,106610,106611,106613,106615,106617,106619],{"class":35,"line":4243},[33,106612,103046],{"class":59},[33,106614,64],{"class":63},[33,106616,103051],{"class":59},[33,106618,102953],{"class":39},[33,106620,157],{"class":59},[33,106622,106623,106625,106627],{"class":35,"line":4257},[33,106624,103060],{"class":59},[33,106626,64],{"class":63},[33,106628,103065],{"class":59},[33,106630,106631],{"class":35,"line":4265},[33,106632,127],{"emptyLinePlaceholder":126},[33,106634,106635,106638,106641],{"class":35,"line":4270},[33,106636,106637],{"class":59},"    print_state(",[33,106639,106640],{"class":117},"\"initial\"",[33,106642,106643],{"class":59},", model, data)\n",[33,106645,106646],{"class":35,"line":4276},[33,106647,127],{"emptyLinePlaceholder":126},[33,106649,106650,106652,106654,106656,106658,106660,106662],{"class":35,"line":4282},[33,106651,4864],{"class":63},[33,106653,103140],{"class":59},[33,106655,27699],{"class":63},[33,106657,34091],{"class":39},[33,106659,109],{"class":59},[33,106661,2473],{"class":39},[33,106663,32437],{"class":59},[33,106665,106666],{"class":35,"line":4287},[33,106667,103155],{"class":59},[33,106669,106670],{"class":35,"line":9608},[33,106671,127],{"emptyLinePlaceholder":126},[33,106673,106674,106676,106679],{"class":35,"line":9632},[33,106675,106637],{"class":59},[33,106677,106678],{"class":117},"\"after 50 steps\"",[33,106680,106643],{"class":59},[33,106682,106683],{"class":35,"line":9637},[33,106684,127],{"emptyLinePlaceholder":126},[33,106686,106687],{"class":35,"line":9643},[33,106688,106689],{"class":59},"    mujoco.mj_resetData(model, data)\n",[33,106691,106692,106694,106697],{"class":35,"line":9670},[33,106693,106637],{"class":59},[33,106695,106696],{"class":117},"\"after reset\"",[33,106698,106643],{"class":59},[33,106700,106701],{"class":35,"line":9675},[33,106702,127],{"emptyLinePlaceholder":126},[33,106704,106705,106708,106710,106712,106714],{"class":35,"line":9681},[33,106706,106707],{"class":59},"    data.qpos[",[33,106709,1897],{"class":39},[33,106711,6104],{"class":59},[33,106713,64],{"class":63},[33,106715,106346],{"class":39},[33,106717,106718],{"class":35,"line":9693},[33,106719,106720],{"class":59},"    mujoco.mj_forward(model, data)\n",[33,106722,106723,106725,106728],{"class":35,"line":9705},[33,106724,106637],{"class":59},[33,106726,106727],{"class":117},"\"after manual qpos edit\"",[33,106729,106643],{"class":59},[33,106731,106732],{"class":35,"line":9717},[33,106733,127],{"emptyLinePlaceholder":126},[33,106735,106736],{"class":35,"line":11375},[33,106737,127],{"emptyLinePlaceholder":126},[33,106739,106740,106742,106744,106746,106748],{"class":35,"line":11400},[33,106741,133],{"class":63},[33,106743,32871],{"class":39},[33,106745,1644],{"class":63},[33,106747,103200],{"class":117},[33,106749,143],{"class":59},[33,106751,106752],{"class":35,"line":11423},[33,106753,103207],{"class":59},[19,106755,105208],{},[23,106757,106759],{"className":25477,"code":106758,"language":25479,"meta":28,"style":28},"touch ch3_python_state.py\n",[30,106760,106761],{"__ignoreMap":28},[33,106762,106763,106765],{"class":35,"line":36},[33,106764,102922],{"class":3632},[33,106766,106767],{"class":117}," ch3_python_state.py\n",[19,106769,103939],{},[23,106771,106773],{"className":25477,"code":106772,"language":25479,"meta":28,"style":28},"python ch3_python_state.py\n",[30,106774,106775],{"__ignoreMap":28},[33,106776,106777,106779],{"class":35,"line":36},[33,106778,27],{"class":3632},[33,106780,106767],{"class":117},[633,106782,103210],{"id":103210},[19,106784,106785],{},"打印状态的函数：",[23,106787,106789],{"className":25,"code":106788,"language":27,"meta":28,"style":28},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[30,106790,106791],{"__ignoreMap":28},[33,106792,106793,106795,106797,106799,106801,106803,106805],{"class":35,"line":36},[33,106794,33597],{"class":63},[33,106796,106514],{"class":3632},[33,106798,106517],{"class":59},[33,106800,2985],{"class":39},[33,106802,106522],{"class":59},[33,106804,97325],{"class":39},[33,106806,143],{"class":59},[19,106808,106809,106810,106812],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[30,106811,35048],{}," 里发生了什么。",[19,106814,106815],{},"推进 50 步：",[23,106817,106819],{"className":25,"code":106818,"language":27,"meta":28,"style":28},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[30,106820,106821,106837],{"__ignoreMap":28},[33,106822,106823,106825,106827,106829,106831,106833,106835],{"class":35,"line":36},[33,106824,4690],{"class":63},[33,106826,103140],{"class":59},[33,106828,27699],{"class":63},[33,106830,34091],{"class":39},[33,106832,109],{"class":59},[33,106834,2473],{"class":39},[33,106836,32437],{"class":59},[33,106838,106839],{"class":35,"line":43},[33,106840,103337],{"class":59},[19,106842,106843,106844,106847,106848,106850],{},"由于 ",[30,106845,106846],{},"timestep=0.01","，所以 50 步后时间约为 ",[30,106849,36976],{}," 秒。",[19,106852,106853],{},"重置：",[23,106855,106856],{"className":25,"code":106164,"language":27,"meta":28,"style":28},[30,106857,106858],{"__ignoreMap":28},[33,106859,106860],{"class":35,"line":36},[33,106861,106164],{"class":59},[19,106863,106864],{},"这会把时间、位置、速度恢复到初始状态。",[19,106866,106867],{},"手动改高度：",[23,106869,106871],{"className":25,"code":106870,"language":27,"meta":28,"style":28},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[30,106872,106873,106885],{"__ignoreMap":28},[33,106874,106875,106877,106879,106881,106883],{"class":35,"line":36},[33,106876,106337],{"class":59},[33,106878,1897],{"class":39},[33,106880,6104],{"class":59},[33,106882,64],{"class":63},[33,106884,106346],{"class":39},[33,106886,106887],{"class":35,"line":43},[33,106888,106181],{"class":59},[19,106890,106891,106892,106895,106896,106899],{},"这个例子里 ",[30,106893,106894],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[30,106897,106898],{},"2.0"," 表示把小球放到更高的位置。",[633,106901,103346],{"id":103346},[23,106903,106904],{"className":25,"code":106788,"language":27,"meta":28,"style":28},[30,106905,106906],{"__ignoreMap":28},[33,106907,106908,106910,106912,106914,106916,106918,106920],{"class":35,"line":36},[33,106909,33597],{"class":63},[33,106911,106514],{"class":3632},[33,106913,106517],{"class":59},[33,106915,2985],{"class":39},[33,106917,106522],{"class":59},[33,106919,97325],{"class":39},[33,106921,143],{"class":59},[19,106923,106924],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[162,106926,106927,106936,106941],{},[165,106928,106929,106932,106933,106935],{},[30,106930,106931],{},"prefix","：一段文字，比如 ",[30,106934,106640],{},"，用来说明现在打印的是哪个阶段。",[165,106937,106938,106940],{},[30,106939,103723],{},"：MuJoCo 模型。",[165,106942,106943,106945],{},[30,106944,35048],{},"：MuJoCo 当前状态。",[19,106947,106948,2031,106951,106954],{},[30,106949,106950],{},"prefix: str",[30,106952,106953],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[23,106956,106958],{"className":25,"code":106957,"language":27,"meta":28,"style":28},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[30,106959,106960],{"__ignoreMap":28},[33,106961,106962,106964,106966,106968,106970,106972],{"class":35,"line":36},[33,106963,72],{"class":39},[33,106965,109],{"class":59},[33,106967,106565],{"class":117},[33,106969,106568],{"class":59},[33,106971,2111],{"class":39},[33,106973,121],{"class":59},[19,106975,106976,106979],{},[30,106977,106978],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[23,106981,106983],{"className":25,"code":106982,"language":27,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[30,106984,106985,106997],{"__ignoreMap":28},[33,106986,106987,106989,106991,106993,106995],{"class":35,"line":36},[33,106988,103272],{"class":59},[33,106990,64],{"class":63},[33,106992,103051],{"class":59},[33,106994,102953],{"class":39},[33,106996,157],{"class":59},[33,106998,106999,107001,107003],{"class":35,"line":43},[33,107000,103296],{"class":59},[33,107002,64],{"class":63},[33,107004,103065],{"class":59},[19,107006,107007],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[23,107009,107011],{"className":25,"code":107010,"language":27,"meta":28,"style":28},"print_state(\"initial\", model, data)\n",[30,107012,107013],{"__ignoreMap":28},[33,107014,107015,107018,107020],{"class":35,"line":36},[33,107016,107017],{"class":59},"print_state(",[33,107019,106640],{"class":117},[33,107021,106643],{"class":59},[19,107023,107024,107025,107028],{},"调用刚才定义的 ",[30,107026,107027],{},"print_state"," 函数，打印初始状态。",[23,107030,107031],{"className":25,"code":106818,"language":27,"meta":28,"style":28},[30,107032,107033,107049],{"__ignoreMap":28},[33,107034,107035,107037,107039,107041,107043,107045,107047],{"class":35,"line":36},[33,107036,4690],{"class":63},[33,107038,103140],{"class":59},[33,107040,27699],{"class":63},[33,107042,34091],{"class":39},[33,107044,109],{"class":59},[33,107046,2473],{"class":39},[33,107048,32437],{"class":59},[33,107050,107051],{"class":35,"line":43},[33,107052,103337],{"class":59},[19,107054,107055],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[23,107057,107058],{"className":25,"code":106164,"language":27,"meta":28,"style":28},[30,107059,107060],{"__ignoreMap":28},[33,107061,107062],{"class":35,"line":36},[33,107063,106164],{"class":59},[19,107065,107066,107067,107069,107070,107072],{},"重置 ",[30,107068,35048],{},"。注意它不会重新创建 ",[30,107071,103723],{},"，因为模型结构没有变，只是状态回到初始值。",[23,107074,107075],{"className":25,"code":106330,"language":27,"meta":28,"style":28},[30,107076,107077],{"__ignoreMap":28},[33,107078,107079,107081,107083,107085,107087],{"class":35,"line":36},[33,107080,106337],{"class":59},[33,107082,1897],{"class":39},[33,107084,6104],{"class":59},[33,107086,64],{"class":63},[33,107088,106346],{"class":39},[19,107090,107091,107092,2031,107095,2031,107098,107100],{},"这行是“手动改状态”。在 freejoint 中，",[30,107093,107094],{},"qpos[0]",[30,107096,107097],{},"qpos[1]",[30,107099,106894],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[23,107102,107103],{"className":25,"code":106181,"language":27,"meta":28,"style":28},[30,107104,107105],{"__ignoreMap":28},[33,107106,107107],{"class":35,"line":36},[33,107108,106181],{"class":59},[19,107110,107111,107112,107114,107115,107117],{},"手动改完 ",[30,107113,105668],{}," 后，调用 ",[30,107116,105888],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107119,103954],{"id":103953},[19,107121,107122],{},"你会看到:",[162,107124,107125,107130,107135,107138],{},[165,107126,107127,107128],{},"初始时间为 ",[30,107129,2010],{},[165,107131,107132,107133],{},"50 步后时间约为 ",[30,107134,36976],{},[165,107136,107137],{},"reset 后状态恢复",[165,107139,107140,107141,107144,107145],{},"手动修改 ",[30,107142,107143],{},"data.qpos[2]"," 后，小球高度变为 ",[30,107146,106898],{},[19,107148,107149,107151],{},[30,107150,106894],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107153,107154],{},"输出里可以重点看三件事：",[162,107156,107157,107165,107170],{},[165,107158,107159,107161,107162,107164],{},[30,107160,4054],{}," 是否随着 ",[30,107163,102854],{}," 增加。",[165,107166,107167,107169],{},[30,107168,105668],{}," 的 z 坐标是否因为下落而变化。",[165,107171,107172,107174,107175,1628],{},[30,107173,105990],{}," 后时间是否回到 ",[30,107176,2010],{},[14,107178,103986],{"id":103985},[162,107180,107181,107187,107193,107199,107202,107211],{},[165,107182,107183,107184,1628],{},"修改 timestep 为 ",[30,107185,107186],{},"0.005",[165,107188,107189,107190,1628],{},"重新运行，检查 50 步后时间是否约为 ",[30,107191,107192],{},"0.25",[165,107194,107195,107196,1628],{},"修改重力为 ",[30,107197,107198],{},"0 0 -1.0",[165,107200,107201],{},"观察小球下降速度是否变慢。",[165,107203,104049,107204,104052,107207,107210],{},[30,107205,107206],{},"data.qpos[2] = 2.0",[30,107208,107209],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[165,107212,107213,107214,107217],{},"注释掉 ",[30,107215,107216],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107219,104091],{"id":104090},[633,107221,107223,107224,107226],{"id":107222},"修改-dataqpos-后位置没有更新","修改 ",[30,107225,102709],{}," 后位置没有更新",[19,107228,104100],{},[23,107230,107231],{"className":25,"code":106181,"language":27,"meta":28,"style":28},[30,107232,107233],{"__ignoreMap":28},[33,107234,107235],{"class":35,"line":36},[33,107236,106181],{"class":59},[633,107238,107239],{"id":107239},"数组维度看不懂",[19,107241,107242],{},"打印模型维度:",[23,107244,107246],{"className":25,"code":107245,"language":27,"meta":28,"style":28},"print(model.nq, model.nv, model.nu)\n",[30,107247,107248],{"__ignoreMap":28},[33,107249,107250,107252],{"class":35,"line":36},[33,107251,72],{"class":39},[33,107253,107254],{"class":59},"(model.nq, model.nv, model.nu)\n",[1956,107256,107257,107265],{},[1959,107258,107259],{},[1962,107260,107261,107263],{},[1965,107262,106212],{"align":25391},[1965,107264,102339],{"align":25391},[2003,107266,107267,107277,107287],{},[1962,107268,107269,107274],{},[2008,107270,107271],{"align":25391},[30,107272,107273],{},"nq",[2008,107275,107276],{"align":25391},"位置变量数量",[1962,107278,107279,107284],{},[2008,107280,107281],{"align":25391},[30,107282,107283],{},"nv",[2008,107285,107286],{"align":25391},"速度变量数量",[1962,107288,107289,107293],{},[2008,107290,107291],{"align":25391},[30,107292,103800],{},[2008,107294,107295],{"align":25391},"控制输入数量",[633,107297,107299,107300,107302],{"id":107298},"误以为-qpos-一定等于关节数","误以为 ",[30,107301,105668],{}," 一定等于关节数",[19,107304,107305,107306,84170,107308,107310,107311,107313],{},"不是。例如 ",[30,107307,103258],{},[30,107309,105668],{}," 是 7 维，但 ",[30,107312,105998],{}," 是 6 维。",[633,107315,107317,107318,107320],{"id":107316},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[30,107319,105668],{}," 的第几位",[19,107322,107323],{},"初学时可以先打印：",[23,107325,107327],{"className":25,"code":107326,"language":27,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[30,107328,107329,107339,107349,107361],{"__ignoreMap":28},[33,107330,107331,107333,107335,107337],{"class":35,"line":36},[33,107332,72],{"class":39},[33,107334,109],{"class":59},[33,107336,103078],{"class":117},[33,107338,103081],{"class":59},[33,107340,107341,107343,107345,107347],{"class":35,"line":43},[33,107342,72],{"class":39},[33,107344,109],{"class":59},[33,107346,103090],{"class":117},[33,107348,103093],{"class":59},[33,107350,107351,107353,107355,107358],{"class":35,"line":130},[33,107352,72],{"class":39},[33,107354,109],{"class":59},[33,107356,107357],{"class":117},"\"qpos:\"",[33,107359,107360],{"class":59},", data.qpos)\n",[33,107362,107363,107365,107367,107370],{"class":35,"line":146},[33,107364,72],{"class":39},[33,107366,109],{"class":59},[33,107368,107369],{"class":117},"\"qvel:\"",[33,107371,107372],{"class":59},", data.qvel)\n",[19,107374,107375],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[633,107377,107378],{"id":107378},"仿真结果每次都一样",[19,107380,107381,107382,107384],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[30,107383,105668],{},"、目标点或控制输入。",[14,107386,104245],{"id":104244},[19,107388,107389,107390,26274],{},"Python 控制 MuJoCo 的核心就是读写 ",[30,107391,35048],{},[162,107393,107394,107402,107407,107412],{},[165,107395,107396,107397,102657,107399,107401],{},"用 ",[30,107398,102709],{},[30,107400,102712],{}," 读取状态。",[165,107403,107396,107404,107406],{},[30,107405,102715],{}," 写入控制。",[165,107408,107396,107409,107411],{},[30,107410,102854],{}," 推进时间。",[165,107413,107414,107415,107417],{},"手动改状态后用 ",[30,107416,105888],{}," 刷新派生量。",[19,107419,107420],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1729,107422,107423],{},"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":43,"depth":43,"links":107425},[107426,107427,107428,107435,107439,107440,107441,107451],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":107429},[107430,107432,107434],{"id":106193,"depth":130,"text":107431},"qpos、qvel、ctrl 是什么",{"id":106271,"depth":130,"text":107433},"mj_step 和 mj_forward 的区别",{"id":106360,"depth":130,"text":106361},{"id":102891,"depth":43,"text":102892,"children":107436},[107437,107438],{"id":103210,"depth":130,"text":103210},{"id":103346,"depth":130,"text":103346},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":107442},[107443,107445,107446,107448,107450],{"id":107222,"depth":130,"text":107444},"修改 data.qpos 后位置没有更新",{"id":107239,"depth":130,"text":107239},{"id":107298,"depth":130,"text":107447},"误以为 qpos 一定等于关节数",{"id":107316,"depth":130,"text":107449},"不知道某个元素在 qpos 的第几位",{"id":107378,"depth":130,"text":107378},{"id":104244,"depth":43,"text":104245},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105956,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107458,"title":107459,"body":107460,"description":28,"extension":1752,"meta":109150,"navigation":126,"path":109151,"seo":109152,"stem":109153,"__hash__":109154},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107461,"toc":109126},[107462,107465,107467,107470,107472,107497,107500,107519,107522,107524,107526,107550,107552,107566,107568,107609,107611,107635,107637,107640,107674,107676,107689,107692,107760,107769,107773,107776,107810,107816,107819,107823,107862,107865,107885,107889,107932,107934,107963,107966,107972,107975,107977,108371,108373,108385,108387,108398,108400,108403,108432,108440,108443,108478,108481,108483,108491,108494,108496,108507,108517,108537,108540,108576,108588,108636,108655,108697,108710,108738,108743,108764,108774,108792,108795,108829,108832,108852,108855,108874,108880,108882,108885,108891,108897,108907,108910,108916,108925,108927,108973,108975,108981,108987,108990,108993,109013,109016,109022,109028,109030,109053,109056,109059,109068,109071,109109,109111,109114,109120,109123],[10,107463,107459],{"id":107464},"_4关节actuator-与力控制",[14,107466,102286],{"id":102285},[19,107468,107469],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107471,105969],{},[162,107473,107474,107480,107485,107489,107494],{},[165,107475,107476,107479],{},[30,107477,107478],{},"hinge"," 关节",[165,107481,107482],{},[30,107483,107484],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[165,107486,107487],{},[30,107488,102715],{},[165,107490,107491],{},[30,107492,107493],{},"ctrlrange",[165,107495,107496],{},"读取关节角和角速度",[19,107498,107499],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[23,107501,107503],{"className":25,"code":107502,"language":27,"meta":28,"style":28},"data.ctrl[0] = ...\n",[30,107504,107505],{"__ignoreMap":28},[33,107506,107507,107510,107512,107514,107516],{"class":35,"line":36},[33,107508,107509],{"class":59},"data.ctrl[",[33,107511,2010],{"class":39},[33,107513,6104],{"class":59},[33,107515,64],{"class":63},[33,107517,107518],{"class":39}," ...\n",[19,107520,107521],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107523,102409],{"id":102408},[19,107525,102412],{},[23,107527,107528],{"className":25477,"code":106026,"language":25479,"meta":28,"style":28},[30,107529,107530],{"__ignoreMap":28},[33,107531,107532,107534,107536,107538,107540,107542,107544,107546,107548],{"class":35,"line":36},[33,107533,26232],{"class":3632},[33,107535,27971],{"class":117},[33,107537,25489],{"class":117},[33,107539,28056],{"class":39},[33,107541,106041],{"class":117},[33,107543,102437],{"class":117},[33,107545,104139],{"class":117},[33,107547,102453],{"class":117},[33,107549,106050],{"class":117},[19,107551,104457],{},[23,107553,107554],{"className":25477,"code":102558,"language":25479,"meta":28,"style":28},[30,107555,107556],{"__ignoreMap":28},[33,107557,107558,107560,107562,107564],{"class":35,"line":36},[33,107559,25486],{"class":3632},[33,107561,25489],{"class":117},[33,107563,102569],{"class":117},[33,107565,102572],{"class":117},[19,107567,104474],{},[23,107569,107571],{"className":25477,"code":107570,"language":25479,"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,107572,107573,107590,107599],{"__ignoreMap":28},[33,107574,107575,107577,107579,107581,107584,107586,107588],{"class":35,"line":36},[33,107576,31985],{"class":3632},[33,107578,30831],{"class":117},[33,107580,26771],{"class":39},[33,107582,107583],{"class":117}," mujoco-control",[33,107585,102614],{"class":117},[33,107587,102617],{"class":39},[33,107589,102620],{"class":39},[33,107591,107592,107594,107596],{"class":35,"line":43},[33,107593,31985],{"class":3632},[33,107595,102627],{"class":117},[33,107597,107598],{"class":117}," mujoco-control\n",[33,107600,107601,107603,107605,107607],{"class":35,"line":130},[33,107602,25486],{"class":3632},[33,107604,25489],{"class":117},[33,107606,102569],{"class":117},[33,107608,102572],{"class":117},[19,107610,102643],{},[162,107612,107613,107619,107626,107632],{},[165,107614,107615,107618],{},[30,107616,107617],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[165,107620,107621,107623,107624,1628],{},[30,107622,102715],{}," 长度等于 ",[30,107625,103796],{},[165,107627,83862,107628,107631],{},[30,107629,107630],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[165,107633,107634],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107636,102684],{"id":102683},[19,107638,107639],{},"关节决定 body 如何运动:",[23,107641,107643],{"className":54712,"code":107642,"language":54714,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,107644,107645],{"__ignoreMap":28},[33,107646,107647,107649,107651,107653,107655,107658,107660,107662,107664,107667,107669,107672],{"class":35,"line":36},[33,107648,2726],{"class":59},[33,107650,104594],{"class":52945},[33,107652,16578],{"class":3632},[33,107654,64],{"class":59},[33,107656,107657],{"class":117},"\"hinge\"",[33,107659,55468],{"class":3632},[33,107661,64],{"class":59},[33,107663,107657],{"class":117},[33,107665,107666],{"class":3632}," axis",[33,107668,64],{"class":59},[33,107670,107671],{"class":117},"\"0 1 0\"",[33,107673,102783],{"class":59},[19,107675,104690],{},[162,107677,107678,107683,107686],{},[165,107679,107680,107681],{},"名字是 ",[30,107682,107478],{},[165,107684,107685],{},"类型是旋转关节",[165,107687,107688],{},"绕 y 轴旋转",[19,107690,107691],{},"actuator 决定如何施加控制:",[23,107693,107695],{"className":54712,"code":107694,"language":54714,"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,107696,107697,107706,107752],{"__ignoreMap":28},[33,107698,107699,107701,107704],{"class":35,"line":36},[33,107700,2726],{"class":59},[33,107702,107703],{"class":52945},"actuator",[33,107705,52952],{"class":59},[33,107707,107708,107710,107713,107715,107717,107720,107723,107725,107727,107730,107732,107734,107737,107739,107742,107745,107747,107750],{"class":35,"line":43},[33,107709,53789],{"class":59},[33,107711,107712],{"class":52945},"motor",[33,107714,16578],{"class":3632},[33,107716,64],{"class":59},[33,107718,107719],{"class":117},"\"hinge_motor\"",[33,107721,107722],{"class":3632}," joint",[33,107724,64],{"class":59},[33,107726,107657],{"class":117},[33,107728,107729],{"class":3632}," gear",[33,107731,64],{"class":59},[33,107733,5341],{"class":117},[33,107735,107736],{"class":3632}," ctrlrange",[33,107738,64],{"class":59},[33,107740,107741],{"class":117},"\"-2 2\"",[33,107743,107744],{"class":3632}," ctrllimited",[33,107746,64],{"class":59},[33,107748,107749],{"class":117},"\"true\"",[33,107751,102783],{"class":59},[33,107753,107754,107756,107758],{"class":35,"line":130},[33,107755,53430],{"class":59},[33,107757,107703],{"class":52945},[33,107759,52952],{"class":59},[19,107761,107762,107765,107766,1628],{},[30,107763,107764],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[30,107767,107768],{},"[-2, 2]",[633,107770,107772],{"id":107771},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107774,107775],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1956,107777,107778,107788],{},[1959,107779,107780],{},[1962,107781,107782,107784,107786],{},[1965,107783,27409],{"align":25391},[1965,107785,104334],{"align":25391},[1965,107787,102373],{"align":25391},[2003,107789,107790,107800],{},[1962,107791,107792,107794,107797],{},[2008,107793,104594],{"align":25391},[2008,107795,107796],{"align":25391},"定义能怎么动",[2008,107798,107799],{"align":25391},"门轴允许门旋转",[1962,107801,107802,107804,107807],{},[2008,107803,107703],{"align":25391},[2008,107805,107806],{"align":25391},"定义怎么施力或控制",[2008,107808,107809],{"align":25391},"人推门、马达带动门",[19,107811,107812,107813,107815],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[30,107814,102715],{}," 主动控制它。",[19,107817,107818],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[633,107820,107822],{"id":107821},"hinge-joint","hinge joint",[23,107824,107826],{"className":54712,"code":107825,"language":54714,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,107827,107828],{"__ignoreMap":28},[33,107829,107830,107832,107834,107836,107838,107840,107842,107844,107846,107848,107850,107852,107855,107857,107860],{"class":35,"line":36},[33,107831,2726],{"class":59},[33,107833,104594],{"class":52945},[33,107835,16578],{"class":3632},[33,107837,64],{"class":59},[33,107839,107657],{"class":117},[33,107841,55468],{"class":3632},[33,107843,64],{"class":59},[33,107845,107657],{"class":117},[33,107847,107666],{"class":3632},[33,107849,64],{"class":59},[33,107851,107671],{"class":117},[33,107853,107854],{"class":3632}," damping",[33,107856,64],{"class":59},[33,107858,107859],{"class":117},"\"0.1\"",[33,107861,102783],{"class":59},[19,107863,107864],{},"含义：",[162,107866,107867,107873,107879],{},[165,107868,107869,107872],{},[30,107870,107871],{},"type=\"hinge\"","：只能绕一个轴旋转。",[165,107874,107875,107878],{},[30,107876,107877],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[165,107880,107881,107884],{},[30,107882,107883],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[633,107886,107888],{"id":107887},"motor-actuator","motor actuator",[23,107890,107892],{"className":54712,"code":107891,"language":54714,"meta":28,"style":28},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[30,107893,107894],{"__ignoreMap":28},[33,107895,107896,107898,107900,107902,107904,107906,107908,107910,107912,107914,107916,107918,107920,107922,107924,107926,107928,107930],{"class":35,"line":36},[33,107897,2726],{"class":59},[33,107899,107712],{"class":52945},[33,107901,16578],{"class":3632},[33,107903,64],{"class":59},[33,107905,107719],{"class":117},[33,107907,107722],{"class":3632},[33,107909,64],{"class":59},[33,107911,107657],{"class":117},[33,107913,107729],{"class":3632},[33,107915,64],{"class":59},[33,107917,5341],{"class":117},[33,107919,107736],{"class":3632},[33,107921,64],{"class":59},[33,107923,107741],{"class":117},[33,107925,107744],{"class":3632},[33,107927,64],{"class":59},[33,107929,107749],{"class":117},[33,107931,102783],{"class":59},[19,107933,107864],{},[162,107935,107936,107945,107951,107957],{},[165,107937,107938,107941,107942,107944],{},[30,107939,107940],{},"joint=\"hinge\"","：这个电机作用在名为 ",[30,107943,107478],{}," 的关节上。",[165,107946,107947,107950],{},[30,107948,107949],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[165,107952,107953,107956],{},[30,107954,107955],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[165,107958,107959,107962],{},[30,107960,107961],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107964,107965],{},"简单理解：",[23,107967,107970],{"className":107968,"code":107969,"language":6848,"meta":28},[6846],"实际施加效果 ≈ data.ctrl[0] * gear\n",[30,107971,107969],{"__ignoreMap":28},[19,107973,107974],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107976,102892],{"id":102891},[23,107978,107980],{"className":25,"code":107979,"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,107981,107982,107989,107993,107999,108009,108013,108017,108025,108030,108035,108039,108043,108048,108053,108057,108062,108067,108072,108077,108081,108085,108089,108094,108099,108104,108108,108112,108116,108120,108132,108144,108152,108156,108166,108176,108186,108190,108203,108216,108220,108237,108251,108286,108290,108294,108305,108320,108335,108347,108351,108355,108367],{"__ignoreMap":28},[33,107983,107984,107986],{"class":35,"line":36},[33,107985,32045],{"class":63},[33,107987,107988],{"class":59}," math\n",[33,107990,107991],{"class":35,"line":43},[33,107992,127],{"emptyLinePlaceholder":126},[33,107994,107995,107997],{"class":35,"line":130},[33,107996,32045],{"class":63},[33,107998,102940],{"class":59},[33,108000,108001,108003,108005,108007],{"class":35,"line":146},[33,108002,32045],{"class":63},[33,108004,33030],{"class":59},[33,108006,33033],{"class":63},[33,108008,33036],{"class":59},[33,108010,108011],{"class":35,"line":267},[33,108012,127],{"emptyLinePlaceholder":126},[33,108014,108015],{"class":35,"line":275},[33,108016,127],{"emptyLinePlaceholder":126},[33,108018,108019,108021,108023],{"class":35,"line":392},[33,108020,102953],{"class":39},[33,108022,15222],{"class":63},[33,108024,102958],{"class":117},[33,108026,108027],{"class":35,"line":406},[33,108028,108029],{"class":117},"\u003Cmujoco model=\"one_link_motor\">\n",[33,108031,108032],{"class":35,"line":418},[33,108033,108034],{"class":117},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[33,108036,108037],{"class":35,"line":425},[33,108038,127],{"emptyLinePlaceholder":126},[33,108040,108041],{"class":35,"line":1147},[33,108042,102977],{"class":117},[33,108044,108045],{"class":35,"line":1329},[33,108046,108047],{"class":117},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[33,108049,108050],{"class":35,"line":1341},[33,108051,108052],{"class":117},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[33,108054,108055],{"class":35,"line":1348},[33,108056,127],{"emptyLinePlaceholder":126},[33,108058,108059],{"class":35,"line":1529},[33,108060,108061],{"class":117},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[33,108063,108064],{"class":35,"line":1546},[33,108065,108066],{"class":117},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,108068,108069],{"class":35,"line":1551},[33,108070,108071],{"class":117},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[33,108073,108074],{"class":35,"line":1566},[33,108075,108076],{"class":117},"      \u003C\u002Fbody>\n",[33,108078,108079],{"class":35,"line":1578},[33,108080,103006],{"class":117},[33,108082,108083],{"class":35,"line":1583},[33,108084,103011],{"class":117},[33,108086,108087],{"class":35,"line":3369},[33,108088,127],{"emptyLinePlaceholder":126},[33,108090,108091],{"class":35,"line":3396},[33,108092,108093],{"class":117},"  \u003Cactuator>\n",[33,108095,108096],{"class":35,"line":3401},[33,108097,108098],{"class":117},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,108100,108101],{"class":35,"line":3418},[33,108102,108103],{"class":117},"  \u003C\u002Factuator>\n",[33,108105,108106],{"class":35,"line":3423},[33,108107,103016],{"class":117},[33,108109,108110],{"class":35,"line":3428},[33,108111,97337],{"class":117},[33,108113,108114],{"class":35,"line":3433},[33,108115,127],{"emptyLinePlaceholder":126},[33,108117,108118],{"class":35,"line":3447},[33,108119,127],{"emptyLinePlaceholder":126},[33,108121,108122,108124,108126,108128,108130],{"class":35,"line":3452},[33,108123,33597],{"class":63},[33,108125,3642],{"class":3632},[33,108127,103037],{"class":59},[33,108129,97325],{"class":39},[33,108131,143],{"class":59},[33,108133,108134,108136,108138,108140,108142],{"class":35,"line":4243},[33,108135,103046],{"class":59},[33,108137,64],{"class":63},[33,108139,103051],{"class":59},[33,108141,102953],{"class":39},[33,108143,157],{"class":59},[33,108145,108146,108148,108150],{"class":35,"line":4257},[33,108147,103060],{"class":59},[33,108149,64],{"class":63},[33,108151,103065],{"class":59},[33,108153,108154],{"class":35,"line":4265},[33,108155,127],{"emptyLinePlaceholder":126},[33,108157,108158,108160,108162,108164],{"class":35,"line":4270},[33,108159,149],{"class":39},[33,108161,109],{"class":59},[33,108163,103078],{"class":117},[33,108165,103081],{"class":59},[33,108167,108168,108170,108172,108174],{"class":35,"line":4276},[33,108169,149],{"class":39},[33,108171,109],{"class":59},[33,108173,103090],{"class":117},[33,108175,103093],{"class":59},[33,108177,108178,108180,108182,108184],{"class":35,"line":4282},[33,108179,149],{"class":39},[33,108181,109],{"class":59},[33,108183,103102],{"class":117},[33,108185,103105],{"class":59},[33,108187,108188],{"class":35,"line":4287},[33,108189,127],{"emptyLinePlaceholder":126},[33,108191,108192,108194,108197,108199,108201],{"class":35,"line":9608},[33,108193,567],{"class":63},[33,108195,108196],{"class":59}," model.nu ",[33,108198,22603],{"class":63},[33,108200,26774],{"class":39},[33,108202,143],{"class":59},[33,108204,108205,108207,108209,108211,108214],{"class":35,"line":9632},[33,108206,105070],{"class":63},[33,108208,105073],{"class":39},[33,108210,109],{"class":59},[33,108212,108213],{"class":117},"\"expected exactly one actuator\"",[33,108215,157],{"class":59},[33,108217,108218],{"class":35,"line":9637},[33,108219,127],{"emptyLinePlaceholder":126},[33,108221,108222,108224,108226,108228,108230,108232,108235],{"class":35,"line":9643},[33,108223,4864],{"class":63},[33,108225,33266],{"class":59},[33,108227,27699],{"class":63},[33,108229,34091],{"class":39},[33,108231,109],{"class":59},[33,108233,108234],{"class":39},"2000",[33,108236,32437],{"class":59},[33,108238,108239,108242,108244,108246,108248],{"class":35,"line":9670},[33,108240,108241],{"class":59},"        t ",[33,108243,64],{"class":63},[33,108245,33266],{"class":59},[33,108247,1540],{"class":63},[33,108249,108250],{"class":59}," model.opt.timestep\n",[33,108252,108253,108256,108258,108260,108262,108265,108267,108270,108272,108274,108277,108279,108281,108283],{"class":35,"line":9675},[33,108254,108255],{"class":59},"        data.ctrl[",[33,108257,2010],{"class":39},[33,108259,6104],{"class":59},[33,108261,64],{"class":63},[33,108263,108264],{"class":39}," 1.5",[33,108266,8178],{"class":63},[33,108268,108269],{"class":59}," math.sin(",[33,108271,106898],{"class":39},[33,108273,8178],{"class":63},[33,108275,108276],{"class":59}," math.pi ",[33,108278,1540],{"class":63},[33,108280,63509],{"class":39},[33,108282,8178],{"class":63},[33,108284,108285],{"class":59}," t)\n",[33,108287,108288],{"class":35,"line":9681},[33,108289,103155],{"class":59},[33,108291,108292],{"class":35,"line":9693},[33,108293,127],{"emptyLinePlaceholder":126},[33,108295,108296,108298,108300,108303],{"class":35,"line":9705},[33,108297,149],{"class":39},[33,108299,109],{"class":59},[33,108301,108302],{"class":117},"\"time:\"",[33,108304,103117],{"class":59},[33,108306,108307,108309,108311,108314,108316,108318],{"class":35,"line":9717},[33,108308,149],{"class":39},[33,108310,109],{"class":59},[33,108312,108313],{"class":117},"\"joint qpos:\"",[33,108315,106568],{"class":59},[33,108317,2111],{"class":39},[33,108319,121],{"class":59},[33,108321,108322,108324,108326,108329,108331,108333],{"class":35,"line":11375},[33,108323,149],{"class":39},[33,108325,109],{"class":59},[33,108327,108328],{"class":117},"\"joint qvel:\"",[33,108330,106584],{"class":59},[33,108332,2111],{"class":39},[33,108334,121],{"class":59},[33,108336,108337,108339,108341,108344],{"class":35,"line":11400},[33,108338,149],{"class":39},[33,108340,109],{"class":59},[33,108342,108343],{"class":117},"\"last ctrl:\"",[33,108345,108346],{"class":59},", data.ctrl.copy())\n",[33,108348,108349],{"class":35,"line":11423},[33,108350,127],{"emptyLinePlaceholder":126},[33,108352,108353],{"class":35,"line":11447},[33,108354,127],{"emptyLinePlaceholder":126},[33,108356,108357,108359,108361,108363,108365],{"class":35,"line":11452},[33,108358,133],{"class":63},[33,108360,32871],{"class":39},[33,108362,1644],{"class":63},[33,108364,103200],{"class":117},[33,108366,143],{"class":59},[33,108368,108369],{"class":35,"line":11457},[33,108370,103207],{"class":59},[19,108372,105208],{},[23,108374,108376],{"className":25477,"code":108375,"language":25479,"meta":28,"style":28},"touch ch4_joint_motor.py\n",[30,108377,108378],{"__ignoreMap":28},[33,108379,108380,108382],{"class":35,"line":36},[33,108381,102922],{"class":3632},[33,108383,108384],{"class":117}," ch4_joint_motor.py\n",[19,108386,103939],{},[23,108388,108390],{"className":25477,"code":108389,"language":25479,"meta":28,"style":28},"python ch4_joint_motor.py\n",[30,108391,108392],{"__ignoreMap":28},[33,108393,108394,108396],{"class":35,"line":36},[33,108395,27],{"class":3632},[33,108397,108384],{"class":117},[633,108399,103210],{"id":103210},[19,108401,108402],{},"检查 actuator 数量：",[23,108404,108406],{"className":25,"code":108405,"language":27,"meta":28,"style":28},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[30,108407,108408,108420],{"__ignoreMap":28},[33,108409,108410,108412,108414,108416,108418],{"class":35,"line":36},[33,108411,133],{"class":63},[33,108413,108196],{"class":59},[33,108415,22603],{"class":63},[33,108417,26774],{"class":39},[33,108419,143],{"class":59},[33,108421,108422,108424,108426,108428,108430],{"class":35,"line":43},[33,108423,105533],{"class":63},[33,108425,105073],{"class":39},[33,108427,109],{"class":59},[33,108429,108213],{"class":117},[33,108431,157],{"class":59},[19,108433,108434,108436,108437,108439],{},[30,108435,103796],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[30,108438,102715],{}," 长度应该是 1。",[19,108441,108442],{},"产生正弦控制信号：",[23,108444,108446],{"className":25,"code":108445,"language":27,"meta":28,"style":28},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[30,108447,108448],{"__ignoreMap":28},[33,108449,108450,108452,108454,108456,108458,108460,108462,108464,108466,108468,108470,108472,108474,108476],{"class":35,"line":36},[33,108451,107509],{"class":59},[33,108453,2010],{"class":39},[33,108455,6104],{"class":59},[33,108457,64],{"class":63},[33,108459,108264],{"class":39},[33,108461,8178],{"class":63},[33,108463,108269],{"class":59},[33,108465,106898],{"class":39},[33,108467,8178],{"class":63},[33,108469,108276],{"class":59},[33,108471,1540],{"class":63},[33,108473,63509],{"class":39},[33,108475,8178],{"class":63},[33,108477,108285],{"class":59},[19,108479,108480],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108482,103311],{},[23,108484,108485],{"className":25,"code":106143,"language":27,"meta":28,"style":28},[30,108486,108487],{"__ignoreMap":28},[33,108488,108489],{"class":35,"line":36},[33,108490,106143],{"class":59},[19,108492,108493],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[633,108495,103346],{"id":103346},[23,108497,108499],{"className":25,"code":108498,"language":27,"meta":28,"style":28},"import math\n",[30,108500,108501],{"__ignoreMap":28},[33,108502,108503,108505],{"class":35,"line":36},[33,108504,32045],{"class":63},[33,108506,107988],{"class":59},[19,108508,108509,108510,102657,108513,108516],{},"导入 Python 标准库里的数学模块。后面要用 ",[30,108511,108512],{},"math.sin",[30,108514,108515],{},"math.pi"," 生成周期变化的控制信号。",[23,108518,108519],{"className":25,"code":105324,"language":27,"meta":28,"style":28},[30,108520,108521,108527],{"__ignoreMap":28},[33,108522,108523,108525],{"class":35,"line":36},[33,108524,32045],{"class":63},[33,108526,102940],{"class":59},[33,108528,108529,108531,108533,108535],{"class":35,"line":43},[33,108530,32045],{"class":63},[33,108532,33030],{"class":59},[33,108534,33033],{"class":63},[33,108536,33036],{"class":59},[19,108538,108539],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[23,108541,108542],{"className":54712,"code":107825,"language":54714,"meta":28,"style":28},[30,108543,108544],{"__ignoreMap":28},[33,108545,108546,108548,108550,108552,108554,108556,108558,108560,108562,108564,108566,108568,108570,108572,108574],{"class":35,"line":36},[33,108547,2726],{"class":59},[33,108549,104594],{"class":52945},[33,108551,16578],{"class":3632},[33,108553,64],{"class":59},[33,108555,107657],{"class":117},[33,108557,55468],{"class":3632},[33,108559,64],{"class":59},[33,108561,107657],{"class":117},[33,108563,107666],{"class":3632},[33,108565,64],{"class":59},[33,108567,107671],{"class":117},[33,108569,107854],{"class":3632},[33,108571,64],{"class":59},[33,108573,107859],{"class":117},[33,108575,102783],{"class":59},[19,108577,108578,108579,108581,108582,108584,108585,108587],{},"这行定义关节。",[30,108580,107478],{}," 表示旋转关节。",[30,108583,107877],{}," 表示绕 y 轴旋转。",[30,108586,107883],{}," 表示有一点阻尼，运动不会完全无损耗。",[23,108589,108591],{"className":54712,"code":108590,"language":54714,"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,108592,108593],{"__ignoreMap":28},[33,108594,108595,108597,108599,108601,108603,108606,108608,108610,108613,108616,108618,108621,108623,108625,108627,108629,108631,108634],{"class":35,"line":36},[33,108596,2726],{"class":59},[33,108598,102759],{"class":52945},[33,108600,16578],{"class":3632},[33,108602,64],{"class":59},[33,108604,108605],{"class":117},"\"link_geom\"",[33,108607,55468],{"class":3632},[33,108609,64],{"class":59},[33,108611,108612],{"class":117},"\"capsule\"",[33,108614,108615],{"class":3632}," fromto",[33,108617,64],{"class":59},[33,108619,108620],{"class":117},"\"0 0 0 0 0 0.5\"",[33,108622,102775],{"class":3632},[33,108624,64],{"class":59},[33,108626,105416],{"class":117},[33,108628,103639],{"class":3632},[33,108630,64],{"class":59},[33,108632,108633],{"class":117},"\"0.5\"",[33,108635,102783],{"class":59},[19,108637,108638,108639,108641,108642,108644,108645,108648,108649,1628,108652,108654],{},"这行定义摆杆的形状。",[30,108640,104803],{}," 是胶囊体，适合表示杆子。",[30,108643,104814],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[30,108646,108647],{},"(0,0,0)"," 延伸到 ",[30,108650,108651],{},"(0,0,0.5)",[30,108653,104808],{}," 是半径。",[23,108656,108657],{"className":54712,"code":107891,"language":54714,"meta":28,"style":28},[30,108658,108659],{"__ignoreMap":28},[33,108660,108661,108663,108665,108667,108669,108671,108673,108675,108677,108679,108681,108683,108685,108687,108689,108691,108693,108695],{"class":35,"line":36},[33,108662,2726],{"class":59},[33,108664,107712],{"class":52945},[33,108666,16578],{"class":3632},[33,108668,64],{"class":59},[33,108670,107719],{"class":117},[33,108672,107722],{"class":3632},[33,108674,64],{"class":59},[33,108676,107657],{"class":117},[33,108678,107729],{"class":3632},[33,108680,64],{"class":59},[33,108682,5341],{"class":117},[33,108684,107736],{"class":3632},[33,108686,64],{"class":59},[33,108688,107741],{"class":117},[33,108690,107744],{"class":3632},[33,108692,64],{"class":59},[33,108694,107749],{"class":117},[33,108696,102783],{"class":59},[19,108698,108699,108700,108702,108703,108706,108707,108709],{},"这行定义电机。它作用在 ",[30,108701,107478],{}," 关节上。",[30,108704,108705],{},"gear"," 可以理解成放大倍数。",[30,108708,107493],{}," 限制控制输入范围。",[23,108711,108712],{"className":25,"code":108405,"language":27,"meta":28,"style":28},[30,108713,108714,108726],{"__ignoreMap":28},[33,108715,108716,108718,108720,108722,108724],{"class":35,"line":36},[33,108717,133],{"class":63},[33,108719,108196],{"class":59},[33,108721,22603],{"class":63},[33,108723,26774],{"class":39},[33,108725,143],{"class":59},[33,108727,108728,108730,108732,108734,108736],{"class":35,"line":43},[33,108729,105533],{"class":63},[33,108731,105073],{"class":39},[33,108733,109],{"class":59},[33,108735,108213],{"class":117},[33,108737,157],{"class":59},[19,108739,108740,108742],{},[30,108741,103796],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[23,108744,108746],{"className":25,"code":108745,"language":27,"meta":28,"style":28},"for step in range(2000):\n",[30,108747,108748],{"__ignoreMap":28},[33,108749,108750,108752,108754,108756,108758,108760,108762],{"class":35,"line":36},[33,108751,4690],{"class":63},[33,108753,33266],{"class":59},[33,108755,27699],{"class":63},[33,108757,34091],{"class":39},[33,108759,109],{"class":59},[33,108761,108234],{"class":39},[33,108763,32437],{"class":59},[19,108765,108766,108767,108769,108770,108773],{},"循环 2000 步。这里没有用 ",[30,108768,2807],{},"，而是用 ",[30,108771,108772],{},"step","，因为后面要用当前步数计算时间。",[23,108775,108777],{"className":25,"code":108776,"language":27,"meta":28,"style":28},"t = step * model.opt.timestep\n",[30,108778,108779],{"__ignoreMap":28},[33,108780,108781,108784,108786,108788,108790],{"class":35,"line":36},[33,108782,108783],{"class":59},"t ",[33,108785,64],{"class":63},[33,108787,33266],{"class":59},[33,108789,1540],{"class":63},[33,108791,108250],{"class":59},[19,108793,108794],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[23,108796,108797],{"className":25,"code":108445,"language":27,"meta":28,"style":28},[30,108798,108799],{"__ignoreMap":28},[33,108800,108801,108803,108805,108807,108809,108811,108813,108815,108817,108819,108821,108823,108825,108827],{"class":35,"line":36},[33,108802,107509],{"class":59},[33,108804,2010],{"class":39},[33,108806,6104],{"class":59},[33,108808,64],{"class":63},[33,108810,108264],{"class":39},[33,108812,8178],{"class":63},[33,108814,108269],{"class":59},[33,108816,106898],{"class":39},[33,108818,8178],{"class":63},[33,108820,108276],{"class":59},[33,108822,1540],{"class":63},[33,108824,63509],{"class":39},[33,108826,8178],{"class":63},[33,108828,108285],{"class":59},[19,108830,108831],{},"这行给电机输入一个正弦波。拆开看：",[162,108833,108834,108840,108846],{},[165,108835,108836,108839],{},[30,108837,108838],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[165,108841,108842,108845],{},[30,108843,108844],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[165,108847,108848,108851],{},[30,108849,108850],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108853,108854],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[23,108856,108858],{"className":25,"code":108857,"language":27,"meta":28,"style":28},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[30,108859,108860],{"__ignoreMap":28},[33,108861,108862,108864,108866,108868,108870,108872],{"class":35,"line":36},[33,108863,72],{"class":39},[33,108865,109],{"class":59},[33,108867,108313],{"class":117},[33,108869,106568],{"class":59},[33,108871,2111],{"class":39},[33,108873,121],{"class":59},[19,108875,108876,108877,108879],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[30,108878,102709],{}," 只有一个数。",[14,108881,103954],{"id":103953},[19,108883,108884],{},"输出类似:",[23,108886,108889],{"className":108887,"code":108888,"language":6848,"meta":28},[6846],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[30,108890,108888],{"__ignoreMap":28},[19,108892,108893,108894,108896],{},"这里 ",[30,108895,107764],{}," 是电机输入。",[19,108898,108899,108902,108903,108906],{},[30,108900,108901],{},"joint qpos"," 是关节角度，单位通常是弧度。",[30,108904,108905],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108908,108909],{},"角度单位提示：",[23,108911,108914],{"className":108912,"code":108913,"language":6848,"meta":28},[6846],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[30,108915,108913],{"__ignoreMap":28},[19,108917,108918,108919,108921,108922,108924],{},"如果你看到 ",[30,108920,105668],{}," 是 ",[30,108923,36976],{},"，大约就是 28.6 度。",[14,108926,103986],{"id":103985},[162,108928,108929,108936,108939,108946,108949,108957,108965],{},[165,108930,104049,108931,104052,108933,1628],{},[30,108932,107949],{},[30,108934,108935],{},"gear=\"5\"",[165,108937,108938],{},"重新运行，观察关节运动是否更剧烈。",[165,108940,104049,108941,104052,108943,1628],{},[30,108942,107493],{},[30,108944,108945],{},"-0.2 0.2",[165,108947,108948],{},"重新运行，观察控制能力是否变弱。",[165,108950,108951,108952,108954,108955,1628],{},"去掉 actuator，确认 ",[30,108953,103796],{}," 变成 ",[30,108956,2010],{},[165,108958,104049,108959,104052,108961,108964],{},[30,108960,107883],{},[30,108962,108963],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[165,108966,104049,108967,104052,108969,108972],{},[30,108968,107877],{},[30,108970,108971],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108974,104091],{"id":104090},[633,108976,108978],{"id":108977},"indexerror-index-0-is-out-of-bounds",[30,108979,108980],{},"IndexError: index 0 is out of bounds",[19,108982,108983,108984,108986],{},"原因是 ",[30,108985,107630],{},"，没有 actuator。",[633,108988,108989],{"id":108989},"关节几乎不动",[19,108991,108992],{},"可能原因:",[162,108994,108995,109000,109004,109010],{},[165,108996,108997,108999],{},[30,108998,108705],{}," 太小",[165,109001,109002,108999],{},[30,109003,107493],{},[165,109005,109006,109009],{},[30,109007,109008],{},"damping"," 太大",[165,109011,109012],{},"重力方向导致运动不明显",[633,109014,109015],{"id":109015},"模型编译失败",[19,109017,109018,109019,109021],{},"检查 actuator 引用的 ",[30,109020,107940],{}," 是否存在，joint 名称是否拼写一致。",[633,109023,109025,109027],{"id":109024},"datactrl0-写了但没有效果",[30,109026,107764],{}," 写了但没有效果",[19,109029,104213],{},[162,109031,109032,109037,109040,109045,109050],{},[165,109033,109034,109036],{},[30,109035,103796],{}," 是否大于 0。",[165,109038,109039],{},"motor 是否引用了正确 joint。",[165,109041,109042,109044],{},[30,109043,108705],{}," 是否太小。",[165,109046,109047,109049],{},[30,109048,107493],{}," 是否把输入限制得太小。",[165,109051,109052],{},"body 是否真的有可动 joint。",[633,109054,109055],{"id":109055},"控制输入超过范围会怎样",[19,109057,109058],{},"如果设置了：",[23,109060,109062],{"className":54712,"code":109061,"language":54714,"meta":28,"style":28},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[30,109063,109064],{"__ignoreMap":28},[33,109065,109066],{"class":35,"line":36},[33,109067,109061],{"class":59},[19,109069,109070],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[23,109072,109074],{"className":25,"code":109073,"language":27,"meta":28,"style":28},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[30,109075,109076,109096],{"__ignoreMap":28},[33,109077,109078,109081,109083,109086,109088,109090,109092,109094],{"class":35,"line":36},[33,109079,109080],{"class":59},"action ",[33,109082,64],{"class":63},[33,109084,109085],{"class":59}," np.clip(action, ",[33,109087,2349],{"class":63},[33,109089,106898],{"class":39},[33,109091,14093],{"class":59},[33,109093,106898],{"class":39},[33,109095,157],{"class":59},[33,109097,109098,109100,109102,109104,109106],{"class":35,"line":43},[33,109099,107509],{"class":59},[33,109101,2010],{"class":39},[33,109103,6104],{"class":59},[33,109105,64],{"class":63},[33,109107,109108],{"class":59}," action\n",[14,109110,104245],{"id":104244},[19,109112,109113],{},"这一章建立了控制任务的基本形式：",[23,109115,109118],{"className":109116,"code":109117,"language":6848,"meta":28},[6846],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[30,109119,109117],{"__ignoreMap":28},[19,109121,109122],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1729,109124,109125],{},"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":43,"depth":43,"links":109127},[109128,109129,109130,109135,109139,109140,109141,109149],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":109131},[109132,109133,109134],{"id":107771,"depth":130,"text":107772},{"id":107821,"depth":130,"text":107822},{"id":107887,"depth":130,"text":107888},{"id":102891,"depth":43,"text":102892,"children":109136},[109137,109138],{"id":103210,"depth":130,"text":103210},{"id":103346,"depth":130,"text":103346},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":109142},[109143,109144,109145,109146,109148],{"id":108977,"depth":130,"text":108980},{"id":108989,"depth":130,"text":108989},{"id":109015,"depth":130,"text":109015},{"id":109024,"depth":130,"text":109147},"data.ctrl[0] 写了但没有效果",{"id":109055,"depth":130,"text":109055},{"id":104244,"depth":43,"text":104245},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107459,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109156,"title":109157,"body":109158,"description":28,"extension":1752,"meta":111067,"navigation":126,"path":111068,"seo":111069,"stem":111070,"__hash__":111071},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109159,"toc":111043},[109160,109163,109165,109168,109176,109179,109196,109199,109224,109227,109273,109275,109277,109332,109334,109353,109355,109398,109401,109418,109421,109437,109447,109454,109456,109459,109462,109496,109499,109547,109551,109554,109568,109577,109581,109584,109609,109612,109616,109629,109632,109638,109641,109656,109658,109661,109921,109923,109935,109938,110250,110252,110264,110266,110269,110284,110289,110292,110314,110317,110320,110354,110357,110361,110372,110375,110392,110395,110409,110416,110436,110443,110457,110460,110472,110487,110507,110510,110532,110535,110539,110554,110565,110580,110583,110613,110629,110658,110666,110690,110693,110711,110721,110733,110740,110749,110755,110764,110767,110769,110778,110781,110796,110798,110801,110812,110815,110826,110829,110847,110849,110866,110869,110897,110899,110903,110906,110936,110942,110945,110949,110957,110960,110962,110983,110986,110989,111005,111008,111024,111026,111029,111040],[10,109161,109157],{"id":109162},"_5viewer-可视化与-renderer-离屏渲染",[14,109164,102286],{"id":102285},[19,109166,109167],{},"本章掌握两类可视化方式:",[162,109169,109170,109173],{},[165,109171,109172],{},"交互式 viewer: 适合人工观察仿真",[165,109174,109175],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109177,109178],{},"使用官方接口:",[23,109180,109182],{"className":25,"code":109181,"language":27,"meta":28,"style":28},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[30,109183,109184,109191],{"__ignoreMap":28},[33,109185,109186,109188],{"class":35,"line":36},[33,109187,32045],{"class":63},[33,109189,109190],{"class":59}," mujoco.viewer\n",[33,109192,109193],{"class":35,"line":43},[33,109194,109195],{"class":59},"mujoco.viewer.launch_passive(model, data)\n",[19,109197,109198],{},"以及:",[23,109200,109202],{"className":25,"code":109201,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[30,109203,109204,109214],{"__ignoreMap":28},[33,109205,109206,109209,109211],{"class":35,"line":36},[33,109207,109208],{"class":59},"renderer ",[33,109210,64],{"class":63},[33,109212,109213],{"class":59}," mujoco.Renderer(model)\n",[33,109215,109216,109219,109221],{"class":35,"line":43},[33,109217,109218],{"class":59},"image ",[33,109220,64],{"class":63},[33,109222,109223],{"class":59}," renderer.render()\n",[19,109225,109226],{},"新手建议先理解二者区别：",[1956,109228,109229,109245],{},[1959,109230,109231],{},[1962,109232,109233,109236,109239,109242],{},[1965,109234,109235],{"align":25391},"工具",[1965,109237,109238],{"align":25391},"用途",[1965,109240,109241],{"align":25391},"是否打开窗口",[1965,109243,109244],{"align":25391},"常见场景",[2003,109246,109247,109260],{},[1962,109248,109249,109252,109255,109257],{},[2008,109250,109251],{"align":25391},"Viewer",[2008,109253,109254],{"align":25391},"人眼实时观察仿真",[2008,109256,106303],{"align":25391},[2008,109258,109259],{"align":25391},"调试模型、看控制效果",[1962,109261,109262,109265,109268,109270],{},[2008,109263,109264],{"align":25391},"Renderer",[2008,109266,109267],{"align":25391},"生成图像数组",[2008,109269,106316],{"align":25391},[2008,109271,109272],{"align":25391},"保存图片、训练视觉策略、服务器批量采集",[14,109274,102409],{"id":102408},[19,109276,102412],{},[23,109278,109280],{"className":25477,"code":109279,"language":25479,"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,109281,109282,109294,109304,109312,109320],{"__ignoreMap":28},[33,109283,109284,109286,109288,109290,109292],{"class":35,"line":36},[33,109285,26232],{"class":3632},[33,109287,27971],{"class":117},[33,109289,25489],{"class":117},[33,109291,28056],{"class":39},[33,109293,26334],{"class":39},[33,109295,109296,109298,109300,109302],{"class":35,"line":43},[33,109297,102447],{"class":117},[33,109299,102450],{"class":117},[33,109301,102453],{"class":117},[33,109303,26334],{"class":39},[33,109305,109306,109308,109310],{"class":35,"line":130},[33,109307,102460],{"class":117},[33,109309,102463],{"class":117},[33,109311,26334],{"class":39},[33,109313,109314,109316,109318],{"class":35,"line":146},[33,109315,102470],{"class":117},[33,109317,102473],{"class":117},[33,109319,26334],{"class":39},[33,109321,109322,109324,109326,109328,109330],{"class":35,"line":267},[33,109323,102480],{"class":117},[33,109325,102483],{"class":117},[33,109327,102486],{"class":117},[33,109329,102489],{"class":117},[33,109331,104154],{"class":117},[19,109333,104457],{},[23,109335,109337],{"className":25477,"code":109336,"language":25479,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy pillow\n",[30,109338,109339],{"__ignoreMap":28},[33,109340,109341,109343,109345,109347,109350],{"class":35,"line":36},[33,109342,25486],{"class":3632},[33,109344,25489],{"class":117},[33,109346,102569],{"class":117},[33,109348,109349],{"class":117}," numpy",[33,109351,109352],{"class":117}," pillow\n",[19,109354,104474],{},[23,109356,109358],{"className":25477,"code":109357,"language":25479,"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,109359,109360,109377,109386],{"__ignoreMap":28},[33,109361,109362,109364,109366,109368,109371,109373,109375],{"class":35,"line":36},[33,109363,31985],{"class":3632},[33,109365,30831],{"class":117},[33,109367,26771],{"class":39},[33,109369,109370],{"class":117}," mujoco-render",[33,109372,102614],{"class":117},[33,109374,102617],{"class":39},[33,109376,102620],{"class":39},[33,109378,109379,109381,109383],{"class":35,"line":43},[33,109380,31985],{"class":3632},[33,109382,102627],{"class":117},[33,109384,109385],{"class":117}," mujoco-render\n",[33,109387,109388,109390,109392,109394,109396],{"class":35,"line":130},[33,109389,25486],{"class":3632},[33,109391,25489],{"class":117},[33,109393,102569],{"class":117},[33,109395,109349],{"class":117},[33,109397,109352],{"class":117},[19,109399,109400],{},"离屏渲染后端:",[23,109402,109404],{"className":25477,"code":109403,"language":25479,"meta":28,"style":28},"export MUJOCO_GL=egl\n",[30,109405,109406],{"__ignoreMap":28},[33,109407,109408,109410,109413,109415],{"class":35,"line":36},[33,109409,26698],{"class":63},[33,109411,109412],{"class":59}," MUJOCO_GL",[33,109414,64],{"class":63},[33,109416,109417],{"class":59},"egl\n",[19,109419,109420],{},"或:",[23,109422,109424],{"className":25477,"code":109423,"language":25479,"meta":28,"style":28},"export MUJOCO_GL=osmesa\n",[30,109425,109426],{"__ignoreMap":28},[33,109427,109428,109430,109432,109434],{"class":35,"line":36},[33,109429,26698],{"class":63},[33,109431,109412],{"class":59},[33,109433,64],{"class":63},[33,109435,109436],{"class":59},"osmesa\n",[19,109438,109439,109440,109443,109444,1628],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[30,109441,109442],{},"egl"," 失败，再尝试 ",[30,109445,109446],{},"osmesa",[19,109448,109449,109450,109453],{},"如果你在本机桌面环境运行，通常先不要设置 ",[30,109451,109452],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109455,102684],{"id":102683},[19,109457,109458],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109460,109461],{},"典型 viewer 流程:",[23,109463,109465],{"className":25,"code":109464,"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,109466,109467,109480,109487,109491],{"__ignoreMap":28},[33,109468,109469,109472,109475,109477],{"class":35,"line":36},[33,109470,109471],{"class":63},"with",[33,109473,109474],{"class":59}," mujoco.viewer.launch_passive(model, data) ",[33,109476,33033],{"class":63},[33,109478,109479],{"class":59}," viewer:\n",[33,109481,109482,109484],{"class":35,"line":43},[33,109483,3919],{"class":63},[33,109485,109486],{"class":59}," viewer.is_running():\n",[33,109488,109489],{"class":35,"line":130},[33,109490,103155],{"class":59},[33,109492,109493],{"class":35,"line":146},[33,109494,109495],{"class":59},"        viewer.sync()\n",[19,109497,109498],{},"典型 renderer 流程:",[23,109500,109502],{"className":25,"code":109501,"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,109503,109504,109530,109534,109539],{"__ignoreMap":28},[33,109505,109506,109508,109510,109513,109515,109517,109519,109521,109523,109525,109528],{"class":35,"line":36},[33,109507,109208],{"class":59},[33,109509,64],{"class":63},[33,109511,109512],{"class":59}," mujoco.Renderer(model, ",[33,109514,26637],{"class":6877},[33,109516,64],{"class":63},[33,109518,43988],{"class":39},[33,109520,14093],{"class":59},[33,109522,26633],{"class":6877},[33,109524,64],{"class":63},[33,109526,109527],{"class":39},"640",[33,109529,157],{"class":59},[33,109531,109532],{"class":35,"line":43},[33,109533,106143],{"class":59},[33,109535,109536],{"class":35,"line":130},[33,109537,109538],{"class":59},"renderer.update_scene(data)\n",[33,109540,109541,109543,109545],{"class":35,"line":146},[33,109542,109218],{"class":59},[33,109544,64],{"class":63},[33,109546,109223],{"class":59},[633,109548,109550],{"id":109549},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109552,109553],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[23,109555,109557],{"className":25,"code":109556,"language":27,"meta":28,"style":28},"mujoco.mj_step(model, data)\nviewer.sync()\n",[30,109558,109559,109563],{"__ignoreMap":28},[33,109560,109561],{"class":35,"line":36},[33,109562,106143],{"class":59},[33,109564,109565],{"class":35,"line":43},[33,109566,109567],{"class":59},"viewer.sync()\n",[19,109569,109570,109572,109573,109576],{},[30,109571,102854],{}," 负责算物理，",[30,109574,109575],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[633,109578,109580],{"id":109579},"为什么要-sleep","为什么要 sleep",[19,109582,109583],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[23,109585,109587],{"className":25,"code":109586,"language":27,"meta":28,"style":28},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[30,109588,109589],{"__ignoreMap":28},[33,109590,109591,109594,109596,109599,109601,109604,109606],{"class":35,"line":36},[33,109592,109593],{"class":59},"sleep_time ",[33,109595,64],{"class":63},[33,109597,109598],{"class":59}," model.opt.timestep ",[33,109600,2349],{"class":63},[33,109602,109603],{"class":59}," (time.time() ",[33,109605,2349],{"class":63},[33,109607,109608],{"class":59}," step_start)\n",[19,109610,109611],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[633,109613,109615],{"id":109614},"renderer-输出是什么","renderer 输出是什么",[23,109617,109619],{"className":25,"code":109618,"language":27,"meta":28,"style":28},"image = renderer.render()\n",[30,109620,109621],{"__ignoreMap":28},[33,109622,109623,109625,109627],{"class":35,"line":36},[33,109624,109218],{"class":59},[33,109626,64],{"class":63},[33,109628,109223],{"class":59},[19,109630,109631],{},"得到的是 NumPy 数组，形状通常是：",[23,109633,109636],{"className":109634,"code":109635,"language":6848,"meta":28},[6846],"(height, width, 3)\n",[30,109637,109635],{"__ignoreMap":28},[19,109639,109640],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[23,109642,109644],{"className":25,"code":109643,"language":27,"meta":28,"style":28},"Image.fromarray(image).save(\"render_output.png\")\n",[30,109645,109646],{"__ignoreMap":28},[33,109647,109648,109651,109654],{"class":35,"line":36},[33,109649,109650],{"class":59},"Image.fromarray(image).save(",[33,109652,109653],{"class":117},"\"render_output.png\"",[33,109655,157],{"class":59},[14,109657,102892],{"id":102891},[19,109659,109660],{},"交互式 Viewer:",[23,109662,109664],{"className":25,"code":109663,"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,109665,109666,109672,109676,109682,109688,109692,109696,109704,109709,109713,109717,109721,109726,109731,109735,109739,109743,109748,109752,109756,109760,109764,109768,109772,109784,109796,109804,109808,109818,109838,109848,109853,109858,109862,109879,109892,109897,109901,109905,109917],{"__ignoreMap":28},[33,109667,109668,109670],{"class":35,"line":36},[33,109669,32045],{"class":63},[33,109671,33479],{"class":59},[33,109673,109674],{"class":35,"line":43},[33,109675,127],{"emptyLinePlaceholder":126},[33,109677,109678,109680],{"class":35,"line":130},[33,109679,32045],{"class":63},[33,109681,102940],{"class":59},[33,109683,109684,109686],{"class":35,"line":146},[33,109685,32045],{"class":63},[33,109687,109190],{"class":59},[33,109689,109690],{"class":35,"line":267},[33,109691,127],{"emptyLinePlaceholder":126},[33,109693,109694],{"class":35,"line":275},[33,109695,127],{"emptyLinePlaceholder":126},[33,109697,109698,109700,109702],{"class":35,"line":392},[33,109699,102953],{"class":39},[33,109701,15222],{"class":63},[33,109703,102958],{"class":117},[33,109705,109706],{"class":35,"line":406},[33,109707,109708],{"class":117},"\u003Cmujoco model=\"viewer_demo\">\n",[33,109710,109711],{"class":35,"line":418},[33,109712,102968],{"class":117},[33,109714,109715],{"class":35,"line":425},[33,109716,127],{"emptyLinePlaceholder":126},[33,109718,109719],{"class":35,"line":1147},[33,109720,102977],{"class":117},[33,109722,109723],{"class":35,"line":1329},[33,109724,109725],{"class":117},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[33,109727,109728],{"class":35,"line":1341},[33,109729,109730],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,109732,109733],{"class":35,"line":1348},[33,109734,127],{"emptyLinePlaceholder":126},[33,109736,109737],{"class":35,"line":1529},[33,109738,102991],{"class":117},[33,109740,109741],{"class":35,"line":1546},[33,109742,102996],{"class":117},[33,109744,109745],{"class":35,"line":1551},[33,109746,109747],{"class":117},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,109749,109750],{"class":35,"line":1566},[33,109751,103006],{"class":117},[33,109753,109754],{"class":35,"line":1578},[33,109755,103011],{"class":117},[33,109757,109758],{"class":35,"line":1583},[33,109759,103016],{"class":117},[33,109761,109762],{"class":35,"line":3369},[33,109763,97337],{"class":117},[33,109765,109766],{"class":35,"line":3396},[33,109767,127],{"emptyLinePlaceholder":126},[33,109769,109770],{"class":35,"line":3401},[33,109771,127],{"emptyLinePlaceholder":126},[33,109773,109774,109776,109778,109780,109782],{"class":35,"line":3418},[33,109775,33597],{"class":63},[33,109777,3642],{"class":3632},[33,109779,103037],{"class":59},[33,109781,97325],{"class":39},[33,109783,143],{"class":59},[33,109785,109786,109788,109790,109792,109794],{"class":35,"line":3423},[33,109787,103046],{"class":59},[33,109789,64],{"class":63},[33,109791,103051],{"class":59},[33,109793,102953],{"class":39},[33,109795,157],{"class":59},[33,109797,109798,109800,109802],{"class":35,"line":3428},[33,109799,103060],{"class":59},[33,109801,64],{"class":63},[33,109803,103065],{"class":59},[33,109805,109806],{"class":35,"line":3433},[33,109807,127],{"emptyLinePlaceholder":126},[33,109809,109810,109812,109814,109816],{"class":35,"line":3447},[33,109811,35825],{"class":63},[33,109813,109474],{"class":59},[33,109815,33033],{"class":63},[33,109817,109479],{"class":59},[33,109819,109820,109823,109826,109828,109831,109833,109836],{"class":35,"line":3452},[33,109821,109822],{"class":63},"        while",[33,109824,109825],{"class":59}," viewer.is_running() ",[33,109827,32114],{"class":63},[33,109829,109830],{"class":59}," data.time ",[33,109832,2726],{"class":63},[33,109834,109835],{"class":39}," 5.0",[33,109837,143],{"class":59},[33,109839,109840,109843,109845],{"class":35,"line":4243},[33,109841,109842],{"class":59},"            step_start ",[33,109844,64],{"class":63},[33,109846,109847],{"class":59}," time.time()\n",[33,109849,109850],{"class":35,"line":4257},[33,109851,109852],{"class":59},"            mujoco.mj_step(model, data)\n",[33,109854,109855],{"class":35,"line":4265},[33,109856,109857],{"class":59},"            viewer.sync()\n",[33,109859,109860],{"class":35,"line":4270},[33,109861,127],{"emptyLinePlaceholder":126},[33,109863,109864,109867,109869,109871,109873,109875,109877],{"class":35,"line":4276},[33,109865,109866],{"class":59},"            sleep_time ",[33,109868,64],{"class":63},[33,109870,109598],{"class":59},[33,109872,2349],{"class":63},[33,109874,109603],{"class":59},[33,109876,2349],{"class":63},[33,109878,109608],{"class":59},[33,109880,109881,109883,109886,109888,109890],{"class":35,"line":4282},[33,109882,6303],{"class":63},[33,109884,109885],{"class":59}," sleep_time ",[33,109887,2775],{"class":63},[33,109889,829],{"class":39},[33,109891,143],{"class":59},[33,109893,109894],{"class":35,"line":4287},[33,109895,109896],{"class":59},"                time.sleep(sleep_time)\n",[33,109898,109899],{"class":35,"line":9608},[33,109900,127],{"emptyLinePlaceholder":126},[33,109902,109903],{"class":35,"line":9632},[33,109904,127],{"emptyLinePlaceholder":126},[33,109906,109907,109909,109911,109913,109915],{"class":35,"line":9637},[33,109908,133],{"class":63},[33,109910,32871],{"class":39},[33,109912,1644],{"class":63},[33,109914,103200],{"class":117},[33,109916,143],{"class":59},[33,109918,109919],{"class":35,"line":9643},[33,109920,103207],{"class":59},[19,109922,105208],{},[23,109924,109926],{"className":25477,"code":109925,"language":25479,"meta":28,"style":28},"touch ch5_viewer.py\n",[30,109927,109928],{"__ignoreMap":28},[33,109929,109930,109932],{"class":35,"line":36},[33,109931,102922],{"class":3632},[33,109933,109934],{"class":117}," ch5_viewer.py\n",[19,109936,109937],{},"离屏 Renderer 保存图片:",[23,109939,109941],{"className":25,"code":109940,"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,109942,109943,109955,109959,109965,109975,109979,109983,109991,109996,110000,110004,110008,110012,110017,110021,110025,110029,110033,110037,110041,110045,110049,110053,110057,110061,110073,110085,110093,110118,110122,110138,110142,110146,110161,110170,110174,110188,110193,110198,110202,110214,110226,110230,110234,110246],{"__ignoreMap":28},[33,109944,109945,109947,109950,109952],{"class":35,"line":36},[33,109946,32388],{"class":63},[33,109948,109949],{"class":59}," pathlib ",[33,109951,32045],{"class":63},[33,109953,109954],{"class":59}," Path\n",[33,109956,109957],{"class":35,"line":43},[33,109958,127],{"emptyLinePlaceholder":126},[33,109960,109961,109963],{"class":35,"line":130},[33,109962,32045],{"class":63},[33,109964,102940],{"class":59},[33,109966,109967,109969,109971,109973],{"class":35,"line":146},[33,109968,32388],{"class":63},[33,109970,48908],{"class":39},[33,109972,48911],{"class":63},[33,109974,48914],{"class":59},[33,109976,109977],{"class":35,"line":267},[33,109978,127],{"emptyLinePlaceholder":126},[33,109980,109981],{"class":35,"line":275},[33,109982,127],{"emptyLinePlaceholder":126},[33,109984,109985,109987,109989],{"class":35,"line":392},[33,109986,102953],{"class":39},[33,109988,15222],{"class":63},[33,109990,102958],{"class":117},[33,109992,109993],{"class":35,"line":406},[33,109994,109995],{"class":117},"\u003Cmujoco model=\"renderer_demo\">\n",[33,109997,109998],{"class":35,"line":418},[33,109999,102968],{"class":117},[33,110001,110002],{"class":35,"line":425},[33,110003,127],{"emptyLinePlaceholder":126},[33,110005,110006],{"class":35,"line":1147},[33,110007,102977],{"class":117},[33,110009,110010],{"class":35,"line":1329},[33,110011,109725],{"class":117},[33,110013,110014],{"class":35,"line":1341},[33,110015,110016],{"class":117},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,110018,110019],{"class":35,"line":1348},[33,110020,109730],{"class":117},[33,110022,110023],{"class":35,"line":1529},[33,110024,127],{"emptyLinePlaceholder":126},[33,110026,110027],{"class":35,"line":1546},[33,110028,102991],{"class":117},[33,110030,110031],{"class":35,"line":1551},[33,110032,102996],{"class":117},[33,110034,110035],{"class":35,"line":1566},[33,110036,109747],{"class":117},[33,110038,110039],{"class":35,"line":1578},[33,110040,103006],{"class":117},[33,110042,110043],{"class":35,"line":1583},[33,110044,103011],{"class":117},[33,110046,110047],{"class":35,"line":3369},[33,110048,103016],{"class":117},[33,110050,110051],{"class":35,"line":3396},[33,110052,97337],{"class":117},[33,110054,110055],{"class":35,"line":3401},[33,110056,127],{"emptyLinePlaceholder":126},[33,110058,110059],{"class":35,"line":3418},[33,110060,127],{"emptyLinePlaceholder":126},[33,110062,110063,110065,110067,110069,110071],{"class":35,"line":3423},[33,110064,33597],{"class":63},[33,110066,3642],{"class":3632},[33,110068,103037],{"class":59},[33,110070,97325],{"class":39},[33,110072,143],{"class":59},[33,110074,110075,110077,110079,110081,110083],{"class":35,"line":3428},[33,110076,103046],{"class":59},[33,110078,64],{"class":63},[33,110080,103051],{"class":59},[33,110082,102953],{"class":39},[33,110084,157],{"class":59},[33,110086,110087,110089,110091],{"class":35,"line":3433},[33,110088,103060],{"class":59},[33,110090,64],{"class":63},[33,110092,103065],{"class":59},[33,110094,110095,110098,110100,110102,110104,110106,110108,110110,110112,110114,110116],{"class":35,"line":3447},[33,110096,110097],{"class":59},"    renderer ",[33,110099,64],{"class":63},[33,110101,109512],{"class":59},[33,110103,26637],{"class":6877},[33,110105,64],{"class":63},[33,110107,43988],{"class":39},[33,110109,14093],{"class":59},[33,110111,26633],{"class":6877},[33,110113,64],{"class":63},[33,110115,109527],{"class":39},[33,110117,157],{"class":59},[33,110119,110120],{"class":35,"line":3452},[33,110121,127],{"emptyLinePlaceholder":126},[33,110123,110124,110126,110128,110130,110132,110134,110136],{"class":35,"line":4243},[33,110125,4864],{"class":63},[33,110127,103140],{"class":59},[33,110129,27699],{"class":63},[33,110131,34091],{"class":39},[33,110133,109],{"class":59},[33,110135,2129],{"class":39},[33,110137,32437],{"class":59},[33,110139,110140],{"class":35,"line":4257},[33,110141,103155],{"class":59},[33,110143,110144],{"class":35,"line":4265},[33,110145,127],{"emptyLinePlaceholder":126},[33,110147,110148,110151,110154,110156,110159],{"class":35,"line":4270},[33,110149,110150],{"class":59},"    renderer.update_scene(data, ",[33,110152,110153],{"class":6877},"camera",[33,110155,64],{"class":63},[33,110157,110158],{"class":117},"\"fixed_camera\"",[33,110160,157],{"class":59},[33,110162,110163,110166,110168],{"class":35,"line":4276},[33,110164,110165],{"class":59},"    image ",[33,110167,64],{"class":63},[33,110169,109223],{"class":59},[33,110171,110172],{"class":35,"line":4282},[33,110173,127],{"emptyLinePlaceholder":126},[33,110175,110176,110179,110181,110184,110186],{"class":35,"line":4287},[33,110177,110178],{"class":59},"    output_path ",[33,110180,64],{"class":63},[33,110182,110183],{"class":59}," Path(",[33,110185,109653],{"class":117},[33,110187,157],{"class":59},[33,110189,110190],{"class":35,"line":9608},[33,110191,110192],{"class":59},"    Image.fromarray(image).save(output_path)\n",[33,110194,110195],{"class":35,"line":9632},[33,110196,110197],{"class":59},"    renderer.close()\n",[33,110199,110200],{"class":35,"line":9637},[33,110201,127],{"emptyLinePlaceholder":126},[33,110203,110204,110206,110208,110211],{"class":35,"line":9643},[33,110205,149],{"class":39},[33,110207,109],{"class":59},[33,110209,110210],{"class":117},"\"saved:\"",[33,110212,110213],{"class":59},", output_path.resolve())\n",[33,110215,110216,110218,110220,110223],{"class":35,"line":9670},[33,110217,149],{"class":39},[33,110219,109],{"class":59},[33,110221,110222],{"class":117},"\"image shape:\"",[33,110224,110225],{"class":59},", image.shape)\n",[33,110227,110228],{"class":35,"line":9675},[33,110229,127],{"emptyLinePlaceholder":126},[33,110231,110232],{"class":35,"line":9681},[33,110233,127],{"emptyLinePlaceholder":126},[33,110235,110236,110238,110240,110242,110244],{"class":35,"line":9693},[33,110237,133],{"class":63},[33,110239,32871],{"class":39},[33,110241,1644],{"class":63},[33,110243,103200],{"class":117},[33,110245,143],{"class":59},[33,110247,110248],{"class":35,"line":9705},[33,110249,103207],{"class":59},[19,110251,105208],{},[23,110253,110255],{"className":25477,"code":110254,"language":25479,"meta":28,"style":28},"touch ch5_renderer.py\n",[30,110256,110257],{"__ignoreMap":28},[33,110258,110259,110261],{"class":35,"line":36},[33,110260,102922],{"class":3632},[33,110262,110263],{"class":117}," ch5_renderer.py\n",[633,110265,103210],{"id":103210},[19,110267,110268],{},"viewer 上下文：",[23,110270,110272],{"className":25,"code":110271,"language":27,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[30,110273,110274],{"__ignoreMap":28},[33,110275,110276,110278,110280,110282],{"class":35,"line":36},[33,110277,109471],{"class":63},[33,110279,109474],{"class":59},[33,110281,33033],{"class":63},[33,110283,109479],{"class":59},[19,110285,110286,110288],{},[30,110287,109471],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110290,110291],{},"窗口循环：",[23,110293,110295],{"className":25,"code":110294,"language":27,"meta":28,"style":28},"while viewer.is_running() and data.time \u003C 5.0:\n",[30,110296,110297],{"__ignoreMap":28},[33,110298,110299,110302,110304,110306,110308,110310,110312],{"class":35,"line":36},[33,110300,110301],{"class":63},"while",[33,110303,109825],{"class":59},[33,110305,32114],{"class":63},[33,110307,109830],{"class":59},[33,110309,2726],{"class":63},[33,110311,109835],{"class":39},[33,110313,143],{"class":59},[19,110315,110316],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110318,110319],{},"固定相机：",[23,110321,110323],{"className":54712,"code":110322,"language":54714,"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,110324,110325],{"__ignoreMap":28},[33,110326,110327,110329,110331,110333,110335,110337,110339,110341,110344,110347,110349,110352],{"class":35,"line":36},[33,110328,2726],{"class":59},[33,110330,110153],{"class":52945},[33,110332,16578],{"class":3632},[33,110334,64],{"class":59},[33,110336,110158],{"class":117},[33,110338,102745],{"class":3632},[33,110340,64],{"class":59},[33,110342,110343],{"class":117},"\"1.5 -2.0 1.2\"",[33,110345,110346],{"class":3632}," xyaxes",[33,110348,64],{"class":59},[33,110350,110351],{"class":117},"\"1 0.75 0 0 0 1\"",[33,110353,102783],{"class":59},[19,110355,110356],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[633,110358,110360],{"id":110359},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[23,110362,110364],{"className":25,"code":110363,"language":27,"meta":28,"style":28},"import time\n",[30,110365,110366],{"__ignoreMap":28},[33,110367,110368,110370],{"class":35,"line":36},[33,110369,32045],{"class":63},[33,110371,33479],{"class":59},[19,110373,110374],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[23,110376,110378],{"className":25,"code":110377,"language":27,"meta":28,"style":28},"import mujoco\nimport mujoco.viewer\n",[30,110379,110380,110386],{"__ignoreMap":28},[33,110381,110382,110384],{"class":35,"line":36},[33,110383,32045],{"class":63},[33,110385,102940],{"class":59},[33,110387,110388,110390],{"class":35,"line":43},[33,110389,32045],{"class":63},[33,110391,109190],{"class":59},[19,110393,110394],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[23,110396,110397],{"className":25,"code":110271,"language":27,"meta":28,"style":28},[30,110398,110399],{"__ignoreMap":28},[33,110400,110401,110403,110405,110407],{"class":35,"line":36},[33,110402,109471],{"class":63},[33,110404,109474],{"class":59},[33,110406,33033],{"class":63},[33,110408,109479],{"class":59},[19,110410,110411,110412,110415],{},"打开一个 viewer 窗口。",[30,110413,110414],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[23,110417,110418],{"className":25,"code":110294,"language":27,"meta":28,"style":28},[30,110419,110420],{"__ignoreMap":28},[33,110421,110422,110424,110426,110428,110430,110432,110434],{"class":35,"line":36},[33,110423,110301],{"class":63},[33,110425,109825],{"class":59},[33,110427,32114],{"class":63},[33,110429,109830],{"class":59},[33,110431,2726],{"class":63},[33,110433,109835],{"class":39},[33,110435,143],{"class":59},[19,110437,110438,110439,110442],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[30,110440,110441],{},"viewer.is_running()"," 会变成 false，循环结束。",[23,110444,110446],{"className":25,"code":110445,"language":27,"meta":28,"style":28},"step_start = time.time()\n",[30,110447,110448],{"__ignoreMap":28},[33,110449,110450,110453,110455],{"class":35,"line":36},[33,110451,110452],{"class":59},"step_start ",[33,110454,64],{"class":63},[33,110456,109847],{"class":59},[19,110458,110459],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[23,110461,110462],{"className":25,"code":109556,"language":27,"meta":28,"style":28},[30,110463,110464,110468],{"__ignoreMap":28},[33,110465,110466],{"class":35,"line":36},[33,110467,106143],{"class":59},[33,110469,110470],{"class":35,"line":43},[33,110471,109567],{"class":59},[19,110473,110474,110476,110477,110479,110480,110482,110483,110486],{},[30,110475,102854],{}," 推进物理仿真。",[30,110478,109575],{}," 把最新的 ",[30,110481,35048],{}," 同步到窗口里显示。没有 ",[30,110484,110485],{},"sync()","，窗口可能看不到最新状态。",[23,110488,110489],{"className":25,"code":109586,"language":27,"meta":28,"style":28},[30,110490,110491],{"__ignoreMap":28},[33,110492,110493,110495,110497,110499,110501,110503,110505],{"class":35,"line":36},[33,110494,109593],{"class":59},[33,110496,64],{"class":63},[33,110498,109598],{"class":59},[33,110500,2349],{"class":63},[33,110502,109603],{"class":59},[33,110504,2349],{"class":63},[33,110506,109608],{"class":59},[19,110508,110509],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[23,110511,110513],{"className":25,"code":110512,"language":27,"meta":28,"style":28},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[30,110514,110515,110527],{"__ignoreMap":28},[33,110516,110517,110519,110521,110523,110525],{"class":35,"line":36},[33,110518,133],{"class":63},[33,110520,109885],{"class":59},[33,110522,2775],{"class":63},[33,110524,829],{"class":39},[33,110526,143],{"class":59},[33,110528,110529],{"class":35,"line":43},[33,110530,110531],{"class":59},"    time.sleep(sleep_time)\n",[19,110533,110534],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[633,110536,110538],{"id":110537},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[23,110540,110542],{"className":25,"code":110541,"language":27,"meta":28,"style":28},"from pathlib import Path\n",[30,110543,110544],{"__ignoreMap":28},[33,110545,110546,110548,110550,110552],{"class":35,"line":36},[33,110547,32388],{"class":63},[33,110549,109949],{"class":59},[33,110551,32045],{"class":63},[33,110553,109954],{"class":59},[19,110555,110556,110557,110560,110561,110564],{},"导入 ",[30,110558,110559],{},"Path","，用来处理文件路径。相比直接写字符串，",[30,110562,110563],{},"Path(\"render_output.png\")"," 更清晰。",[23,110566,110568],{"className":25,"code":110567,"language":27,"meta":28,"style":28},"from PIL import Image\n",[30,110569,110570],{"__ignoreMap":28},[33,110571,110572,110574,110576,110578],{"class":35,"line":36},[33,110573,32388],{"class":63},[33,110575,48908],{"class":39},[33,110577,48911],{"class":63},[33,110579,48914],{"class":59},[19,110581,110582],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[23,110584,110585],{"className":54712,"code":110322,"language":54714,"meta":28,"style":28},[30,110586,110587],{"__ignoreMap":28},[33,110588,110589,110591,110593,110595,110597,110599,110601,110603,110605,110607,110609,110611],{"class":35,"line":36},[33,110590,2726],{"class":59},[33,110592,110153],{"class":52945},[33,110594,16578],{"class":3632},[33,110596,64],{"class":59},[33,110598,110158],{"class":117},[33,110600,102745],{"class":3632},[33,110602,64],{"class":59},[33,110604,110343],{"class":117},[33,110606,110346],{"class":3632},[33,110608,64],{"class":59},[33,110610,110351],{"class":117},[33,110612,102783],{"class":59},[19,110614,110615,110616,110618,110619,110621,110622,110625,110626,110628],{},"定义一个相机。",[30,110617,1008],{}," 是相机名字。",[30,110620,105784],{}," 是相机在世界里的位置。",[30,110623,110624],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[30,110627,105784],{}," 来调视角。",[23,110630,110632],{"className":25,"code":110631,"language":27,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[30,110633,110634],{"__ignoreMap":28},[33,110635,110636,110638,110640,110642,110644,110646,110648,110650,110652,110654,110656],{"class":35,"line":36},[33,110637,109208],{"class":59},[33,110639,64],{"class":63},[33,110641,109512],{"class":59},[33,110643,26637],{"class":6877},[33,110645,64],{"class":63},[33,110647,43988],{"class":39},[33,110649,14093],{"class":59},[33,110651,26633],{"class":6877},[33,110653,64],{"class":63},[33,110655,109527],{"class":39},[33,110657,157],{"class":59},[19,110659,110660,110661,102657,110663,110665],{},"创建离屏渲染器。",[30,110662,26637],{},[30,110664,26633],{}," 决定输出图片大小。",[23,110667,110668],{"className":25,"code":103314,"language":27,"meta":28,"style":28},[30,110669,110670,110686],{"__ignoreMap":28},[33,110671,110672,110674,110676,110678,110680,110682,110684],{"class":35,"line":36},[33,110673,4690],{"class":63},[33,110675,103140],{"class":59},[33,110677,27699],{"class":63},[33,110679,34091],{"class":39},[33,110681,109],{"class":59},[33,110683,2129],{"class":39},[33,110685,32437],{"class":59},[33,110687,110688],{"class":35,"line":43},[33,110689,103337],{"class":59},[19,110691,110692],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[23,110694,110696],{"className":25,"code":110695,"language":27,"meta":28,"style":28},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[30,110697,110698],{"__ignoreMap":28},[33,110699,110700,110703,110705,110707,110709],{"class":35,"line":36},[33,110701,110702],{"class":59},"renderer.update_scene(data, ",[33,110704,110153],{"class":6877},[33,110706,64],{"class":63},[33,110708,110158],{"class":117},[33,110710,157],{"class":59},[19,110712,110713,110714,110716,110717,110720],{},"告诉 renderer：用当前 ",[30,110715,35048],{}," 的状态更新画面，并使用名为 ",[30,110718,110719],{},"fixed_camera"," 的相机视角。",[23,110722,110723],{"className":25,"code":109618,"language":27,"meta":28,"style":28},[30,110724,110725],{"__ignoreMap":28},[33,110726,110727,110729,110731],{"class":35,"line":36},[33,110728,109218],{"class":59},[33,110730,64],{"class":63},[33,110732,109223],{"class":59},[19,110734,110735,110736,110739],{},"真正渲染出图像。",[30,110737,110738],{},"image"," 是一个 NumPy 数组，不是文件。",[23,110741,110743],{"className":25,"code":110742,"language":27,"meta":28,"style":28},"Image.fromarray(image).save(output_path)\n",[30,110744,110745],{"__ignoreMap":28},[33,110746,110747],{"class":35,"line":36},[33,110748,110742],{"class":59},[19,110750,110751,110752,1628],{},"把数组转换成图片，并保存到 ",[30,110753,110754],{},"render_output.png",[23,110756,110758],{"className":25,"code":110757,"language":27,"meta":28,"style":28},"renderer.close()\n",[30,110759,110760],{"__ignoreMap":28},[33,110761,110762],{"class":35,"line":36},[33,110763,110757],{"class":59},[19,110765,110766],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110768,103954],{"id":103953},[19,110770,110771,110772,110774,110775,1628],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[30,110773,110754],{},"，并输出图像数组形状，例如 ",[30,110776,110777],{},"(480, 640, 3)",[19,110779,110780],{},"如果图片里看不到方块，先检查：",[162,110782,110783,110786,110789],{},[165,110784,110785],{},"方块是否掉到相机视野外。",[165,110787,110788],{},"camera 位置是否合理。",[165,110790,110791,110792,110795],{},"是否在 ",[30,110793,110794],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110797,103986],{"id":103985},[19,110799,110800],{},"运行 viewer:",[23,110802,110804],{"className":25477,"code":110803,"language":25479,"meta":28,"style":28},"python ch5_viewer.py\n",[30,110805,110806],{"__ignoreMap":28},[33,110807,110808,110810],{"class":35,"line":36},[33,110809,27],{"class":3632},[33,110811,109934],{"class":117},[19,110813,110814],{},"运行 renderer:",[23,110816,110818],{"className":25477,"code":110817,"language":25479,"meta":28,"style":28},"python ch5_renderer.py\n",[30,110819,110820],{"__ignoreMap":28},[33,110821,110822,110824],{"class":35,"line":36},[33,110823,27],{"class":3632},[33,110825,110263],{"class":117},[19,110827,110828],{},"如果在服务器上运行:",[23,110830,110832],{"className":25477,"code":110831,"language":25479,"meta":28,"style":28},"MUJOCO_GL=egl python ch5_renderer.py\n",[30,110833,110834],{"__ignoreMap":28},[33,110835,110836,110838,110840,110842,110845],{"class":35,"line":36},[33,110837,109452],{"class":59},[33,110839,64],{"class":63},[33,110841,109442],{"class":117},[33,110843,110844],{"class":3632}," python",[33,110846,110263],{"class":117},[19,110848,109420],{},[23,110850,110852],{"className":25477,"code":110851,"language":25479,"meta":28,"style":28},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[30,110853,110854],{"__ignoreMap":28},[33,110855,110856,110858,110860,110862,110864],{"class":35,"line":36},[33,110857,109452],{"class":59},[33,110859,64],{"class":63},[33,110861,109446],{"class":117},[33,110863,110844],{"class":3632},[33,110865,110263],{"class":117},[19,110867,110868],{},"再做几个练习：",[162,110870,110871,110878,110881,110887],{},[165,110872,110873,110874,110877],{},"把 renderer 分辨率改成 ",[30,110875,110876],{},"height=240, width=320","，观察输出 shape。",[165,110879,110880],{},"把方块颜色改成蓝色，重新保存图片。",[165,110882,110883,110884,110886],{},"把相机 ",[30,110885,105784],{}," 改远一点，观察画面中物体是否变小。",[165,110888,110889,110890,104052,110893,110896],{},"把 viewer 示例中的 ",[30,110891,110892],{},"data.time \u003C 5.0",[30,110894,110895],{},"data.time \u003C 20.0","，观察更长时间。",[14,110898,104091],{"id":104090},[633,110900,110902],{"id":110901},"viewer-窗口打不开","viewer 窗口打不开",[19,110904,110905],{},"安装:",[23,110907,110909],{"className":25477,"code":110908,"language":25479,"meta":28,"style":28},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[30,110910,110911],{"__ignoreMap":28},[33,110912,110913,110915,110917,110919,110921,110923,110925,110927,110929,110931,110933],{"class":35,"line":36},[33,110914,26232],{"class":3632},[33,110916,27971],{"class":117},[33,110918,25489],{"class":117},[33,110920,28056],{"class":39},[33,110922,104144],{"class":117},[33,110924,102473],{"class":117},[33,110926,104149],{"class":117},[33,110928,102486],{"class":117},[33,110930,102492],{"class":117},[33,110932,102483],{"class":117},[33,110934,110935],{"class":117}," libXinerama\n",[633,110937,110939],{"id":110938},"glfwerror",[30,110940,110941],{},"GLFWError",[19,110943,110944],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[633,110946,110948],{"id":110947},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110950,110951,110952,84179,110954,110956],{},"尝试 ",[30,110953,102676],{},[30,110955,102679],{},"。可能存在版本差异。",[633,110958,110959],{"id":110959},"保存图片是黑的",[19,110961,104213],{},[162,110963,110964,110967,110970,110980],{},[165,110965,110966],{},"XML 里是否有 light。",[165,110968,110969],{},"相机是否对着模型。",[165,110971,110972,110973,110976,110977,1628],{},"是否先 ",[30,110974,110975],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[30,110978,110979],{},"renderer.render()",[165,110981,110982],{},"物体是否已经掉出视野。",[633,110984,110985],{"id":110985},"远程服务器没有显示器",[19,110987,110988],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[23,110990,110991],{"className":25477,"code":110831,"language":25479,"meta":28,"style":28},[30,110992,110993],{"__ignoreMap":28},[33,110994,110995,110997,110999,111001,111003],{"class":35,"line":36},[33,110996,109452],{"class":59},[33,110998,64],{"class":63},[33,111000,109442],{"class":117},[33,111002,110844],{"class":3632},[33,111004,110263],{"class":117},[19,111006,111007],{},"如果 EGL 不可用，再尝试：",[23,111009,111010],{"className":25477,"code":110851,"language":25479,"meta":28,"style":28},[30,111011,111012],{"__ignoreMap":28},[33,111013,111014,111016,111018,111020,111022],{"class":35,"line":36},[33,111015,109452],{"class":59},[33,111017,64],{"class":63},[33,111019,109446],{"class":117},[33,111021,110844],{"class":3632},[33,111023,110263],{"class":117},[14,111025,104245],{"id":104244},[19,111027,111028],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[162,111030,111031,111034,111037],{},[165,111032,111033],{},"先用 viewer 看模型和控制是否正常。",[165,111035,111036],{},"再用 renderer 保存图片或构造视觉观测。",[165,111038,111039],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1729,111041,111042],{},"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":43,"depth":43,"links":111044},[111045,111046,111047,111052,111057,111058,111059,111066],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":111048},[111049,111050,111051],{"id":109549,"depth":130,"text":109550},{"id":109579,"depth":130,"text":109580},{"id":109614,"depth":130,"text":109615},{"id":102891,"depth":43,"text":102892,"children":111053},[111054,111055,111056],{"id":103210,"depth":130,"text":103210},{"id":110359,"depth":130,"text":110360},{"id":110537,"depth":130,"text":110538},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":111060},[111061,111062,111063,111064,111065],{"id":110901,"depth":130,"text":110902},{"id":110938,"depth":130,"text":110941},{"id":110947,"depth":130,"text":110948},{"id":110959,"depth":130,"text":110959},{"id":110985,"depth":130,"text":110985},{"id":104244,"depth":43,"text":104245},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109157,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111073,"title":111074,"body":111075,"description":28,"extension":1752,"meta":112985,"navigation":126,"path":112986,"seo":112987,"stem":112988,"__hash__":112989},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111076,"toc":112961},[111077,111080,111082,111085,111087,111106,111109,111115,111118,111120,111122,111146,111148,111162,111164,111205,111207,111218,111220,111223,111229,111232,111266,111269,111301,111304,111336,111340,111343,111383,111386,111392,111395,111401,111405,111408,111414,111417,111421,111424,111463,111465,111478,111481,111483,112065,112067,112079,112082,112093,112095,112098,112117,112129,112132,112153,112156,112159,112202,112205,112208,112228,112235,112237,112255,112270,112273,112279,112282,112288,112305,112312,112343,112354,112388,112399,112416,112425,112433,112438,112452,112455,112476,112482,112496,112501,112531,112541,112566,112574,112597,112600,112616,112619,112627,112633,112655,112668,112689,112698,112737,112748,112750,112753,112759,112762,112765,112771,112774,112794,112797,112799,112838,112840,112843,112851,112854,112857,112884,112887,112897,112903,112906,112912,112914,112920,112924,112927,112929,112932,112956,112959],[10,111078,111074],{"id":111079},"_6控制任务cartpole",[14,111081,102286],{"id":102285},[19,111083,111084],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111086,105969],{},[162,111088,111089,111092,111094,111097,111100,111103],{},[165,111090,111091],{},"slide joint",[165,111093,107822],{},[165,111095,111096],{},"cart force actuator",[165,111098,111099],{},"状态观测",[165,111101,111102],{},"简单控制循环",[165,111104,111105],{},"reward 设计雏形",[19,111107,111108],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[23,111110,111113],{"className":111111,"code":111112,"language":6848,"meta":28},[6846],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[30,111114,111112],{"__ignoreMap":28},[19,111116,111117],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111119,102409],{"id":102408},[19,111121,102412],{},[23,111123,111124],{"className":25477,"code":106026,"language":25479,"meta":28,"style":28},[30,111125,111126],{"__ignoreMap":28},[33,111127,111128,111130,111132,111134,111136,111138,111140,111142,111144],{"class":35,"line":36},[33,111129,26232],{"class":3632},[33,111131,27971],{"class":117},[33,111133,25489],{"class":117},[33,111135,28056],{"class":39},[33,111137,106041],{"class":117},[33,111139,102437],{"class":117},[33,111141,104139],{"class":117},[33,111143,102453],{"class":117},[33,111145,106050],{"class":117},[19,111147,104457],{},[23,111149,111150],{"className":25477,"code":102558,"language":25479,"meta":28,"style":28},[30,111151,111152],{"__ignoreMap":28},[33,111153,111154,111156,111158,111160],{"class":35,"line":36},[33,111155,25486],{"class":3632},[33,111157,25489],{"class":117},[33,111159,102569],{"class":117},[33,111161,102572],{"class":117},[19,111163,104474],{},[23,111165,111167],{"className":25477,"code":111166,"language":25479,"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,111168,111169,111186,111195],{"__ignoreMap":28},[33,111170,111171,111173,111175,111177,111180,111182,111184],{"class":35,"line":36},[33,111172,31985],{"class":3632},[33,111174,30831],{"class":117},[33,111176,26771],{"class":39},[33,111178,111179],{"class":117}," mujoco-cartpole",[33,111181,102614],{"class":117},[33,111183,102617],{"class":39},[33,111185,102620],{"class":39},[33,111187,111188,111190,111192],{"class":35,"line":43},[33,111189,31985],{"class":3632},[33,111191,102627],{"class":117},[33,111193,111194],{"class":117}," mujoco-cartpole\n",[33,111196,111197,111199,111201,111203],{"class":35,"line":130},[33,111198,25486],{"class":3632},[33,111200,25489],{"class":117},[33,111202,102569],{"class":117},[33,111204,102572],{"class":117},[19,111206,102643],{},[162,111208,111209,111212,111215],{},[165,111210,111211],{},"本章不依赖 Gymnasium。",[165,111213,111214],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[165,111216,111217],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111219,102684],{"id":102683},[19,111221,111222],{},"Cartpole 的模型结构:",[23,111224,111227],{"className":111225,"code":111226,"language":6848,"meta":28},[6846],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[30,111228,111226],{"__ignoreMap":28},[19,111230,111231],{},"小车通过 slide joint 左右移动:",[23,111233,111235],{"className":54712,"code":111234,"language":54714,"meta":28,"style":28},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[30,111236,111237],{"__ignoreMap":28},[33,111238,111239,111241,111243,111245,111247,111250,111252,111254,111257,111259,111261,111264],{"class":35,"line":36},[33,111240,2726],{"class":59},[33,111242,104594],{"class":52945},[33,111244,16578],{"class":3632},[33,111246,64],{"class":59},[33,111248,111249],{"class":117},"\"cart_x\"",[33,111251,55468],{"class":3632},[33,111253,64],{"class":59},[33,111255,111256],{"class":117},"\"slide\"",[33,111258,107666],{"class":3632},[33,111260,64],{"class":59},[33,111262,111263],{"class":117},"\"1 0 0\"",[33,111265,102783],{"class":59},[19,111267,111268],{},"杆子通过 hinge joint 旋转:",[23,111270,111272],{"className":54712,"code":111271,"language":54714,"meta":28,"style":28},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,111273,111274],{"__ignoreMap":28},[33,111275,111276,111278,111280,111282,111284,111287,111289,111291,111293,111295,111297,111299],{"class":35,"line":36},[33,111277,2726],{"class":59},[33,111279,104594],{"class":52945},[33,111281,16578],{"class":3632},[33,111283,64],{"class":59},[33,111285,111286],{"class":117},"\"pole_hinge\"",[33,111288,55468],{"class":3632},[33,111290,64],{"class":59},[33,111292,107657],{"class":117},[33,111294,107666],{"class":3632},[33,111296,64],{"class":59},[33,111298,107671],{"class":117},[33,111300,102783],{"class":59},[19,111302,111303],{},"控制力作用在小车 slide joint 上:",[23,111305,111307],{"className":54712,"code":111306,"language":54714,"meta":28,"style":28},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[30,111308,111309],{"__ignoreMap":28},[33,111310,111311,111313,111315,111317,111319,111322,111324,111326,111328,111330,111332,111334],{"class":35,"line":36},[33,111312,2726],{"class":59},[33,111314,107712],{"class":52945},[33,111316,16578],{"class":3632},[33,111318,64],{"class":59},[33,111320,111321],{"class":117},"\"cart_motor\"",[33,111323,107722],{"class":3632},[33,111325,64],{"class":59},[33,111327,111249],{"class":117},[33,111329,107729],{"class":3632},[33,111331,64],{"class":59},[33,111333,55960],{"class":117},[33,111335,102783],{"class":59},[633,111337,111339],{"id":111338},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111341,111342],{},"这个简化模型有两个关节：",[1956,111344,111345,111356],{},[1959,111346,111347],{},[1962,111348,111349,111351,111353],{},[1965,111350,104397],{"align":25391},[1965,111352,25392],{"align":25391},[1965,111354,111355],{"align":25391},"对应状态",[2003,111357,111358,111371],{},[1962,111359,111360,111365,111368],{},[2008,111361,111362],{"align":25391},[30,111363,111364],{},"cart_x",[2008,111366,111367],{"align":25391},"slide",[2008,111369,111370],{"align":25391},"小车 x 位置",[1962,111372,111373,111378,111380],{},[2008,111374,111375],{"align":25391},[30,111376,111377],{},"pole_hinge",[2008,111379,107478],{"align":25391},[2008,111381,111382],{"align":25391},"杆子角度",[19,111384,111385],{},"所以：",[23,111387,111390],{"className":111388,"code":111389,"language":6848,"meta":28},[6846],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[30,111391,111389],{"__ignoreMap":28},[19,111393,111394],{},"把它们拼起来就是观测：",[23,111396,111399],{"className":111397,"code":111398,"language":6848,"meta":28},[6846],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,111400,111398],{"__ignoreMap":28},[633,111402,111404],{"id":111403},"action-是什么","action 是什么",[19,111406,111407],{},"本章只有一个 actuator：",[23,111409,111412],{"className":111410,"code":111411,"language":6848,"meta":28},[6846],"data.ctrl[0] = action\n",[30,111413,111411],{"__ignoreMap":28},[19,111415,111416],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[633,111418,111420],{"id":111419},"reward-是什么","reward 是什么",[19,111422,111423],{},"奖励函数：",[23,111425,111427],{"className":25,"code":111426,"language":27,"meta":28,"style":28},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[30,111428,111429],{"__ignoreMap":28},[33,111430,111431,111433,111435,111437,111439,111441,111444,111446,111449,111451,111453,111455,111458,111460],{"class":35,"line":36},[33,111432,18701],{"class":63},[33,111434,1201],{"class":39},[33,111436,109],{"class":59},[33,111438,104041],{"class":39},[33,111440,53916],{"class":63},[33,111442,111443],{"class":39}," 0.1",[33,111445,8178],{"class":63},[33,111447,111448],{"class":59}," cart_x ",[33,111450,1540],{"class":63},[33,111452,111448],{"class":59},[33,111454,2349],{"class":63},[33,111456,111457],{"class":59}," pole_angle ",[33,111459,1540],{"class":63},[33,111461,111462],{"class":59}," pole_angle)\n",[19,111464,107864],{},[162,111466,111467,111472,111475],{},[165,111468,111469,111470,1628],{},"基础奖励是 ",[30,111471,104041],{},[165,111473,111474],{},"小车离中心越远，扣分越多。",[165,111476,111477],{},"杆子角度越大，扣分越多。",[19,111479,111480],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111482,102892],{"id":102891},[23,111484,111486],{"className":25,"code":111485,"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,111487,111488,111494,111504,111508,111512,111520,111525,111529,111533,111537,111542,111546,111551,111556,111561,111565,111570,111575,111580,111584,111588,111592,111596,111600,111605,111609,111613,111617,111621,111625,111635,111642,111646,111650,111664,111678,111691,111721,111725,111729,111741,111753,111761,111765,111778,111782,111786,111795,111799,111815,111825,111838,111851,111855,111878,111896,111900,111912,111916,111920,111930,111940,111944,111960,112001,112005,112025,112041,112045,112049,112061],{"__ignoreMap":28},[33,111489,111490,111492],{"class":35,"line":36},[33,111491,32045],{"class":63},[33,111493,102940],{"class":59},[33,111495,111496,111498,111500,111502],{"class":35,"line":43},[33,111497,32045],{"class":63},[33,111499,33030],{"class":59},[33,111501,33033],{"class":63},[33,111503,33036],{"class":59},[33,111505,111506],{"class":35,"line":130},[33,111507,127],{"emptyLinePlaceholder":126},[33,111509,111510],{"class":35,"line":146},[33,111511,127],{"emptyLinePlaceholder":126},[33,111513,111514,111516,111518],{"class":35,"line":267},[33,111515,102953],{"class":39},[33,111517,15222],{"class":63},[33,111519,102958],{"class":117},[33,111521,111522],{"class":35,"line":275},[33,111523,111524],{"class":117},"\u003Cmujoco model=\"cartpole\">\n",[33,111526,111527],{"class":35,"line":392},[33,111528,102968],{"class":117},[33,111530,111531],{"class":35,"line":406},[33,111532,127],{"emptyLinePlaceholder":126},[33,111534,111535],{"class":35,"line":418},[33,111536,102977],{"class":117},[33,111538,111539],{"class":35,"line":425},[33,111540,111541],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,111543,111544],{"class":35,"line":1147},[33,111545,127],{"emptyLinePlaceholder":126},[33,111547,111548],{"class":35,"line":1329},[33,111549,111550],{"class":117},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[33,111552,111553],{"class":35,"line":1341},[33,111554,111555],{"class":117},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[33,111557,111558],{"class":35,"line":1348},[33,111559,111560],{"class":117},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[33,111562,111563],{"class":35,"line":1529},[33,111564,127],{"emptyLinePlaceholder":126},[33,111566,111567],{"class":35,"line":1546},[33,111568,111569],{"class":117},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[33,111571,111572],{"class":35,"line":1551},[33,111573,111574],{"class":117},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[33,111576,111577],{"class":35,"line":1566},[33,111578,111579],{"class":117},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[33,111581,111582],{"class":35,"line":1578},[33,111583,108076],{"class":117},[33,111585,111586],{"class":35,"line":1583},[33,111587,103006],{"class":117},[33,111589,111590],{"class":35,"line":3369},[33,111591,103011],{"class":117},[33,111593,111594],{"class":35,"line":3396},[33,111595,127],{"emptyLinePlaceholder":126},[33,111597,111598],{"class":35,"line":3401},[33,111599,108093],{"class":117},[33,111601,111602],{"class":35,"line":3418},[33,111603,111604],{"class":117},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,111606,111607],{"class":35,"line":3423},[33,111608,108103],{"class":117},[33,111610,111611],{"class":35,"line":3428},[33,111612,103016],{"class":117},[33,111614,111615],{"class":35,"line":3433},[33,111616,97337],{"class":117},[33,111618,111619],{"class":35,"line":3447},[33,111620,127],{"emptyLinePlaceholder":126},[33,111622,111623],{"class":35,"line":3452},[33,111624,127],{"emptyLinePlaceholder":126},[33,111626,111627,111629,111632],{"class":35,"line":4243},[33,111628,33597],{"class":63},[33,111630,111631],{"class":3632}," get_observation",[33,111633,111634],{"class":59},"(data: mujoco.MjData) -> np.ndarray:\n",[33,111636,111637,111639],{"class":35,"line":4257},[33,111638,5752],{"class":63},[33,111640,111641],{"class":59}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,111643,111644],{"class":35,"line":4265},[33,111645,127],{"emptyLinePlaceholder":126},[33,111647,111648],{"class":35,"line":4270},[33,111649,127],{"emptyLinePlaceholder":126},[33,111651,111652,111654,111657,111660,111662],{"class":35,"line":4276},[33,111653,33597],{"class":63},[33,111655,111656],{"class":3632}," compute_reward",[33,111658,111659],{"class":59},"(obs: np.ndarray) -> ",[33,111661,1863],{"class":39},[33,111663,143],{"class":59},[33,111665,111666,111669,111671,111674,111676],{"class":35,"line":4282},[33,111667,111668],{"class":59},"    cart_x ",[33,111670,64],{"class":63},[33,111672,111673],{"class":59}," obs[",[33,111675,2010],{"class":39},[33,111677,34893],{"class":59},[33,111679,111680,111683,111685,111687,111689],{"class":35,"line":4287},[33,111681,111682],{"class":59},"    pole_angle ",[33,111684,64],{"class":63},[33,111686,111673],{"class":59},[33,111688,2036],{"class":39},[33,111690,34893],{"class":59},[33,111692,111693,111695,111697,111699,111701,111703,111705,111707,111709,111711,111713,111715,111717,111719],{"class":35,"line":9608},[33,111694,5752],{"class":63},[33,111696,1201],{"class":39},[33,111698,109],{"class":59},[33,111700,104041],{"class":39},[33,111702,53916],{"class":63},[33,111704,111443],{"class":39},[33,111706,8178],{"class":63},[33,111708,111448],{"class":59},[33,111710,1540],{"class":63},[33,111712,111448],{"class":59},[33,111714,2349],{"class":63},[33,111716,111457],{"class":59},[33,111718,1540],{"class":63},[33,111720,111462],{"class":59},[33,111722,111723],{"class":35,"line":9632},[33,111724,127],{"emptyLinePlaceholder":126},[33,111726,111727],{"class":35,"line":9637},[33,111728,127],{"emptyLinePlaceholder":126},[33,111730,111731,111733,111735,111737,111739],{"class":35,"line":9643},[33,111732,33597],{"class":63},[33,111734,3642],{"class":3632},[33,111736,103037],{"class":59},[33,111738,97325],{"class":39},[33,111740,143],{"class":59},[33,111742,111743,111745,111747,111749,111751],{"class":35,"line":9670},[33,111744,103046],{"class":59},[33,111746,64],{"class":63},[33,111748,103051],{"class":59},[33,111750,102953],{"class":39},[33,111752,157],{"class":59},[33,111754,111755,111757,111759],{"class":35,"line":9675},[33,111756,103060],{"class":59},[33,111758,64],{"class":63},[33,111760,103065],{"class":59},[33,111762,111763],{"class":35,"line":9681},[33,111764,127],{"emptyLinePlaceholder":126},[33,111766,111767,111769,111771,111773,111775],{"class":35,"line":9693},[33,111768,106707],{"class":59},[33,111770,2036],{"class":39},[33,111772,6104],{"class":59},[33,111774,64],{"class":63},[33,111776,111777],{"class":39}," 0.1\n",[33,111779,111780],{"class":35,"line":9705},[33,111781,106720],{"class":59},[33,111783,111784],{"class":35,"line":9717},[33,111785,127],{"emptyLinePlaceholder":126},[33,111787,111788,111791,111793],{"class":35,"line":11375},[33,111789,111790],{"class":59},"    total_reward ",[33,111792,64],{"class":63},[33,111794,106399],{"class":39},[33,111796,111797],{"class":35,"line":11400},[33,111798,127],{"emptyLinePlaceholder":126},[33,111800,111801,111803,111805,111807,111809,111811,111813],{"class":35,"line":11423},[33,111802,4864],{"class":63},[33,111804,33266],{"class":59},[33,111806,27699],{"class":63},[33,111808,34091],{"class":39},[33,111810,109],{"class":59},[33,111812,8070],{"class":39},[33,111814,32437],{"class":59},[33,111816,111817,111820,111822],{"class":35,"line":11447},[33,111818,111819],{"class":59},"        obs ",[33,111821,64],{"class":63},[33,111823,111824],{"class":59}," get_observation(data)\n",[33,111826,111827,111830,111832,111834,111836],{"class":35,"line":11452},[33,111828,111829],{"class":59},"        pole_angle ",[33,111831,64],{"class":63},[33,111833,111673],{"class":59},[33,111835,2036],{"class":39},[33,111837,34893],{"class":59},[33,111839,111840,111843,111845,111847,111849],{"class":35,"line":11457},[33,111841,111842],{"class":59},"        pole_angular_velocity ",[33,111844,64],{"class":63},[33,111846,111673],{"class":59},[33,111848,1891],{"class":39},[33,111850,34893],{"class":59},[33,111852,111853],{"class":35,"line":11462},[33,111854,127],{"emptyLinePlaceholder":126},[33,111856,111857,111860,111862,111865,111867,111869,111871,111873,111875],{"class":35,"line":11471},[33,111858,111859],{"class":59},"        action ",[33,111861,64],{"class":63},[33,111863,111864],{"class":39}," 2.0",[33,111866,8178],{"class":63},[33,111868,111457],{"class":59},[33,111870,2298],{"class":63},[33,111872,63509],{"class":39},[33,111874,8178],{"class":63},[33,111876,111877],{"class":59}," pole_angular_velocity\n",[33,111879,111880,111882,111884,111886,111888,111890,111892,111894],{"class":35,"line":11476},[33,111881,111859],{"class":59},[33,111883,64],{"class":63},[33,111885,109085],{"class":59},[33,111887,2349],{"class":63},[33,111889,104041],{"class":39},[33,111891,14093],{"class":59},[33,111893,104041],{"class":39},[33,111895,157],{"class":59},[33,111897,111898],{"class":35,"line":11482},[33,111899,127],{"emptyLinePlaceholder":126},[33,111901,111902,111904,111906,111908,111910],{"class":35,"line":11503},[33,111903,108255],{"class":59},[33,111905,2010],{"class":39},[33,111907,6104],{"class":59},[33,111909,64],{"class":63},[33,111911,109108],{"class":59},[33,111913,111914],{"class":35,"line":11509},[33,111915,103155],{"class":59},[33,111917,111918],{"class":35,"line":11523},[33,111919,127],{"emptyLinePlaceholder":126},[33,111921,111922,111925,111927],{"class":35,"line":11529},[33,111923,111924],{"class":59},"        reward ",[33,111926,64],{"class":63},[33,111928,111929],{"class":59}," compute_reward(get_observation(data))\n",[33,111931,111932,111935,111937],{"class":35,"line":11556},[33,111933,111934],{"class":59},"        total_reward ",[33,111936,11136],{"class":63},[33,111938,111939],{"class":59}," reward\n",[33,111941,111942],{"class":35,"line":11565},[33,111943,127],{"emptyLinePlaceholder":126},[33,111945,111946,111948,111950,111952,111954,111956,111958],{"class":35,"line":11571},[33,111947,4163],{"class":63},[33,111949,33266],{"class":59},[33,111951,2146],{"class":63},[33,111953,840],{"class":39},[33,111955,1644],{"class":63},[33,111957,829],{"class":39},[33,111959,143],{"class":59},[33,111961,111962,111964,111966,111969,111972,111975,111978,111980,111983,111986,111988,111990,111992,111994,111997,111999],{"class":35,"line":11579},[33,111963,36297],{"class":39},[33,111965,109],{"class":59},[33,111967,111968],{"class":117},"\"step:\"",[33,111970,111971],{"class":59},", step, ",[33,111973,111974],{"class":117},"\"obs:\"",[33,111976,111977],{"class":59},", np.round(obs, ",[33,111979,1891],{"class":39},[33,111981,111982],{"class":59},"), ",[33,111984,111985],{"class":117},"\"action:\"",[33,111987,14093],{"class":59},[33,111989,33668],{"class":39},[33,111991,109],{"class":59},[33,111993,1863],{"class":39},[33,111995,111996],{"class":59},"(action), ",[33,111998,1891],{"class":39},[33,112000,121],{"class":59},[33,112002,112003],{"class":35,"line":11584},[33,112004,127],{"emptyLinePlaceholder":126},[33,112006,112007,112009,112011,112014,112016,112018,112021,112023],{"class":35,"line":18259},[33,112008,149],{"class":39},[33,112010,109],{"class":59},[33,112012,112013],{"class":117},"\"total_reward:\"",[33,112015,14093],{"class":59},[33,112017,33668],{"class":39},[33,112019,112020],{"class":59},"(total_reward, ",[33,112022,1891],{"class":39},[33,112024,121],{"class":59},[33,112026,112027,112029,112031,112034,112037,112039],{"class":35,"line":18265},[33,112028,149],{"class":39},[33,112030,109],{"class":59},[33,112032,112033],{"class":117},"\"final obs:\"",[33,112035,112036],{"class":59},", np.round(get_observation(data), ",[33,112038,1891],{"class":39},[33,112040,121],{"class":59},[33,112042,112043],{"class":35,"line":18288},[33,112044,127],{"emptyLinePlaceholder":126},[33,112046,112047],{"class":35,"line":18294},[33,112048,127],{"emptyLinePlaceholder":126},[33,112050,112051,112053,112055,112057,112059],{"class":35,"line":18317},[33,112052,133],{"class":63},[33,112054,32871],{"class":39},[33,112056,1644],{"class":63},[33,112058,103200],{"class":117},[33,112060,143],{"class":59},[33,112062,112063],{"class":35,"line":18331},[33,112064,103207],{"class":59},[19,112066,105208],{},[23,112068,112070],{"className":25477,"code":112069,"language":25479,"meta":28,"style":28},"touch ch6_cartpole.py\n",[30,112071,112072],{"__ignoreMap":28},[33,112073,112074,112076],{"class":35,"line":36},[33,112075,102922],{"class":3632},[33,112077,112078],{"class":117}," ch6_cartpole.py\n",[19,112080,112081],{},"运行：",[23,112083,112085],{"className":25477,"code":112084,"language":25479,"meta":28,"style":28},"python ch6_cartpole.py\n",[30,112086,112087],{"__ignoreMap":28},[33,112088,112089,112091],{"class":35,"line":36},[33,112090,27],{"class":3632},[33,112092,112078],{"class":117},[633,112094,103210],{"id":103210},[19,112096,112097],{},"构造观测：",[23,112099,112101],{"className":25,"code":112100,"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,112102,112103,112111],{"__ignoreMap":28},[33,112104,112105,112107,112109],{"class":35,"line":36},[33,112106,33597],{"class":63},[33,112108,111631],{"class":3632},[33,112110,111634],{"class":59},[33,112112,112113,112115],{"class":35,"line":43},[33,112114,5752],{"class":63},[33,112116,111641],{"class":59},[19,112118,112119,112122,112123,112125,112126,112128],{},[30,112120,112121],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[30,112124,105668],{}," 2 维，",[30,112127,105998],{}," 2 维，所以 obs 是 4 维。",[19,112130,112131],{},"设置初始角度：",[23,112133,112135],{"className":25,"code":112134,"language":27,"meta":28,"style":28},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[30,112136,112137,112149],{"__ignoreMap":28},[33,112138,112139,112141,112143,112145,112147],{"class":35,"line":36},[33,112140,106337],{"class":59},[33,112142,2036],{"class":39},[33,112144,6104],{"class":59},[33,112146,64],{"class":63},[33,112148,111777],{"class":39},[33,112150,112151],{"class":35,"line":43},[33,112152,106181],{"class":59},[19,112154,112155],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112157,112158],{},"简单反馈控制：",[23,112160,112162],{"className":25,"code":112161,"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,112163,112164,112184],{"__ignoreMap":28},[33,112165,112166,112168,112170,112172,112174,112176,112178,112180,112182],{"class":35,"line":36},[33,112167,109080],{"class":59},[33,112169,64],{"class":63},[33,112171,111864],{"class":39},[33,112173,8178],{"class":63},[33,112175,111457],{"class":59},[33,112177,2298],{"class":63},[33,112179,63509],{"class":39},[33,112181,8178],{"class":63},[33,112183,111877],{"class":59},[33,112185,112186,112188,112190,112192,112194,112196,112198,112200],{"class":35,"line":43},[33,112187,109080],{"class":59},[33,112189,64],{"class":63},[33,112191,109085],{"class":59},[33,112193,2349],{"class":63},[33,112195,104041],{"class":39},[33,112197,14093],{"class":59},[33,112199,104041],{"class":39},[33,112201,157],{"class":59},[19,112203,112204],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112206,112207],{},"限制动作：",[23,112209,112211],{"className":25,"code":112210,"language":27,"meta":28,"style":28},"np.clip(action, -1.0, 1.0)\n",[30,112212,112213],{"__ignoreMap":28},[33,112214,112215,112218,112220,112222,112224,112226],{"class":35,"line":36},[33,112216,112217],{"class":59},"np.clip(action, ",[33,112219,2349],{"class":63},[33,112221,104041],{"class":39},[33,112223,14093],{"class":59},[33,112225,104041],{"class":39},[33,112227,157],{"class":59},[19,112229,112230,112231,112234],{},"因为 XML 里 ",[30,112232,112233],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[633,112236,103346],{"id":103346},[23,112238,112239],{"className":25,"code":112100,"language":27,"meta":28,"style":28},[30,112240,112241,112249],{"__ignoreMap":28},[33,112242,112243,112245,112247],{"class":35,"line":36},[33,112244,33597],{"class":63},[33,112246,111631],{"class":3632},[33,112248,111634],{"class":59},[33,112250,112251,112253],{"class":35,"line":43},[33,112252,5752],{"class":63},[33,112254,111641],{"class":59},[19,112256,112257,112258,112261,112262,112265,112266,112269],{},"这段定义了一个函数，用来获取当前观测。",[30,112259,112260],{},"data.qpos.copy()"," 是位置数组副本，",[30,112263,112264],{},"data.qvel.copy()"," 是速度数组副本。",[30,112267,112268],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112271,112272],{},"在本章模型里：",[23,112274,112277],{"className":112275,"code":112276,"language":6848,"meta":28},[6846],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[30,112278,112276],{"__ignoreMap":28},[19,112280,112281],{},"所以返回的 obs 是：",[23,112283,112286],{"className":112284,"code":112285,"language":6848,"meta":28},[6846],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[30,112287,112285],{"__ignoreMap":28},[23,112289,112291],{"className":25,"code":112290,"language":27,"meta":28,"style":28},"def compute_reward(obs: np.ndarray) -> float:\n",[30,112292,112293],{"__ignoreMap":28},[33,112294,112295,112297,112299,112301,112303],{"class":35,"line":36},[33,112296,33597],{"class":63},[33,112298,111656],{"class":3632},[33,112300,111659],{"class":59},[33,112302,1863],{"class":39},[33,112304,143],{"class":59},[19,112306,112307,112308,112311],{},"这行定义奖励函数。输入是观测 ",[30,112309,112310],{},"obs","，输出是一个浮点数奖励。",[23,112313,112315],{"className":25,"code":112314,"language":27,"meta":28,"style":28},"cart_x = obs[0]\npole_angle = obs[1]\n",[30,112316,112317,112330],{"__ignoreMap":28},[33,112318,112319,112322,112324,112326,112328],{"class":35,"line":36},[33,112320,112321],{"class":59},"cart_x ",[33,112323,64],{"class":63},[33,112325,111673],{"class":59},[33,112327,2010],{"class":39},[33,112329,34893],{"class":59},[33,112331,112332,112335,112337,112339,112341],{"class":35,"line":43},[33,112333,112334],{"class":59},"pole_angle ",[33,112336,64],{"class":63},[33,112338,111673],{"class":59},[33,112340,2036],{"class":39},[33,112342,34893],{"class":59},[19,112344,112345,112346,112349,112350,112353],{},"数组索引从 0 开始。",[30,112347,112348],{},"obs[0]"," 是第一个元素，也就是小车位置。",[30,112351,112352],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[23,112355,112356],{"className":25,"code":111426,"language":27,"meta":28,"style":28},[30,112357,112358],{"__ignoreMap":28},[33,112359,112360,112362,112364,112366,112368,112370,112372,112374,112376,112378,112380,112382,112384,112386],{"class":35,"line":36},[33,112361,18701],{"class":63},[33,112363,1201],{"class":39},[33,112365,109],{"class":59},[33,112367,104041],{"class":39},[33,112369,53916],{"class":63},[33,112371,111443],{"class":39},[33,112373,8178],{"class":63},[33,112375,111448],{"class":59},[33,112377,1540],{"class":63},[33,112379,111448],{"class":59},[33,112381,2349],{"class":63},[33,112383,111457],{"class":59},[33,112385,1540],{"class":63},[33,112387,111462],{"class":59},[19,112389,112390,112391,112394,112395,112398],{},"这行计算奖励。",[30,112392,112393],{},"cart_x * cart_x"," 是小车位置的平方，",[30,112396,112397],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[23,112400,112402],{"className":25,"code":112401,"language":27,"meta":28,"style":28},"data.qpos[1] = 0.1\n",[30,112403,112404],{"__ignoreMap":28},[33,112405,112406,112408,112410,112412,112414],{"class":35,"line":36},[33,112407,106337],{"class":59},[33,112409,2036],{"class":39},[33,112411,6104],{"class":59},[33,112413,64],{"class":63},[33,112415,111777],{"class":39},[19,112417,112418,112419,112421,112422,112424],{},"手动设置杆子的初始角度。因为 ",[30,112420,107094],{}," 是小车位置，",[30,112423,107097],{}," 是杆子角度，所以这里改的是杆子。",[23,112426,112427],{"className":25,"code":106181,"language":27,"meta":28,"style":28},[30,112428,112429],{"__ignoreMap":28},[33,112430,112431],{"class":35,"line":36},[33,112432,106181],{"class":59},[19,112434,107140,112435,112437],{},[30,112436,105668],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[23,112439,112441],{"className":25,"code":112440,"language":27,"meta":28,"style":28},"total_reward = 0.0\n",[30,112442,112443],{"__ignoreMap":28},[33,112444,112445,112448,112450],{"class":35,"line":36},[33,112446,112447],{"class":59},"total_reward ",[33,112449,64],{"class":63},[33,112451,106399],{"class":39},[19,112453,112454],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[23,112456,112458],{"className":25,"code":112457,"language":27,"meta":28,"style":28},"for step in range(1000):\n",[30,112459,112460],{"__ignoreMap":28},[33,112461,112462,112464,112466,112468,112470,112472,112474],{"class":35,"line":36},[33,112463,4690],{"class":63},[33,112465,33266],{"class":59},[33,112467,27699],{"class":63},[33,112469,34091],{"class":39},[33,112471,109],{"class":59},[33,112473,8070],{"class":39},[33,112475,32437],{"class":59},[19,112477,112478,112479,112481],{},"循环 1000 步。",[30,112480,108772],{}," 是当前步数，从 0 到 999。",[23,112483,112485],{"className":25,"code":112484,"language":27,"meta":28,"style":28},"obs = get_observation(data)\n",[30,112486,112487],{"__ignoreMap":28},[33,112488,112489,112492,112494],{"class":35,"line":36},[33,112490,112491],{"class":59},"obs ",[33,112493,64],{"class":63},[33,112495,111824],{"class":59},[19,112497,112498,112499,1628],{},"读取当前状态，保存到 ",[30,112500,112310],{},[23,112502,112504],{"className":25,"code":112503,"language":27,"meta":28,"style":28},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[30,112505,112506,112518],{"__ignoreMap":28},[33,112507,112508,112510,112512,112514,112516],{"class":35,"line":36},[33,112509,112334],{"class":59},[33,112511,64],{"class":63},[33,112513,111673],{"class":59},[33,112515,2036],{"class":39},[33,112517,34893],{"class":59},[33,112519,112520,112523,112525,112527,112529],{"class":35,"line":43},[33,112521,112522],{"class":59},"pole_angular_velocity ",[33,112524,64],{"class":63},[33,112526,111673],{"class":59},[33,112528,1891],{"class":39},[33,112530,34893],{"class":59},[19,112532,112533,112534,112537,112538,1628],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[30,112535,112536],{},"obs[3]","？因为 obs 的顺序是 ",[30,112539,112540],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[23,112542,112544],{"className":25,"code":112543,"language":27,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[30,112545,112546],{"__ignoreMap":28},[33,112547,112548,112550,112552,112554,112556,112558,112560,112562,112564],{"class":35,"line":36},[33,112549,109080],{"class":59},[33,112551,64],{"class":63},[33,112553,111864],{"class":39},[33,112555,8178],{"class":63},[33,112557,111457],{"class":59},[33,112559,2298],{"class":63},[33,112561,63509],{"class":39},[33,112563,8178],{"class":63},[33,112565,111877],{"class":59},[19,112567,112568,112569,102657,112571,112573],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[30,112570,106898],{},[30,112572,36976],{}," 是人为设置的系数，不是固定公式。",[23,112575,112577],{"className":25,"code":112576,"language":27,"meta":28,"style":28},"action = np.clip(action, -1.0, 1.0)\n",[30,112578,112579],{"__ignoreMap":28},[33,112580,112581,112583,112585,112587,112589,112591,112593,112595],{"class":35,"line":36},[33,112582,109080],{"class":59},[33,112584,64],{"class":63},[33,112586,109085],{"class":59},[33,112588,2349],{"class":63},[33,112590,104041],{"class":39},[33,112592,14093],{"class":59},[33,112594,104041],{"class":39},[33,112596,157],{"class":59},[19,112598,112599],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[23,112601,112602],{"className":25,"code":111411,"language":27,"meta":28,"style":28},[30,112603,112604],{"__ignoreMap":28},[33,112605,112606,112608,112610,112612,112614],{"class":35,"line":36},[33,112607,107509],{"class":59},[33,112609,2010],{"class":39},[33,112611,6104],{"class":59},[33,112613,64],{"class":63},[33,112615,109108],{"class":59},[19,112617,112618],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[23,112620,112621],{"className":25,"code":106143,"language":27,"meta":28,"style":28},[30,112622,112623],{"__ignoreMap":28},[33,112624,112625],{"class":35,"line":36},[33,112626,106143],{"class":59},[19,112628,112629,112630,112632],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[30,112631,107764],{}," 计算小车和杆子的下一刻状态。",[23,112634,112636],{"className":25,"code":112635,"language":27,"meta":28,"style":28},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[30,112637,112638,112647],{"__ignoreMap":28},[33,112639,112640,112643,112645],{"class":35,"line":36},[33,112641,112642],{"class":59},"reward ",[33,112644,64],{"class":63},[33,112646,111929],{"class":59},[33,112648,112649,112651,112653],{"class":35,"line":43},[33,112650,112447],{"class":59},[33,112652,11136],{"class":63},[33,112654,111939],{"class":59},[19,112656,112657,112658,112660,112661,112664,112665,1628],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[30,112659,11136],{}," 是简写，",[30,112662,112663],{},"total_reward += reward"," 等价于 ",[30,112666,112667],{},"total_reward = total_reward + reward",[23,112669,112671],{"className":25,"code":112670,"language":27,"meta":28,"style":28},"if step % 100 == 0:\n",[30,112672,112673],{"__ignoreMap":28},[33,112674,112675,112677,112679,112681,112683,112685,112687],{"class":35,"line":36},[33,112676,133],{"class":63},[33,112678,33266],{"class":59},[33,112680,2146],{"class":63},[33,112682,840],{"class":39},[33,112684,1644],{"class":63},[33,112686,829],{"class":39},[33,112688,143],{"class":59},[19,112690,112691,112693,112694,112697],{},[30,112692,2146],{}," 是取余数。",[30,112695,112696],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[23,112699,112701],{"className":25,"code":112700,"language":27,"meta":28,"style":28},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[30,112702,112703],{"__ignoreMap":28},[33,112704,112705,112707,112709,112711,112713,112715,112717,112719,112721,112723,112725,112727,112729,112731,112733,112735],{"class":35,"line":36},[33,112706,72],{"class":39},[33,112708,109],{"class":59},[33,112710,111968],{"class":117},[33,112712,111971],{"class":59},[33,112714,111974],{"class":117},[33,112716,111977],{"class":59},[33,112718,1891],{"class":39},[33,112720,111982],{"class":59},[33,112722,111985],{"class":117},[33,112724,14093],{"class":59},[33,112726,33668],{"class":39},[33,112728,109],{"class":59},[33,112730,1863],{"class":39},[33,112732,111996],{"class":59},[33,112734,1891],{"class":39},[33,112736,121],{"class":59},[19,112738,112739,112740,112743,112744,112747],{},"打印当前步数、观测和动作。",[30,112741,112742],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[30,112745,112746],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112749,103954],{"id":103953},[19,112751,112752],{},"观测向量:",[23,112754,112757],{"className":112755,"code":112756,"language":6848,"meta":28},[6846],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,112758,112756],{"__ignoreMap":28},[19,112760,112761],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112763,112764],{},"每隔 100 步会打印一次：",[23,112766,112769],{"className":112767,"code":112768,"language":6848,"meta":28},[6846],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[30,112770,112768],{"__ignoreMap":28},[19,112772,112773],{},"重点观察：",[162,112775,112776,112782,112787],{},[165,112777,112778,112781],{},[30,112779,112780],{},"pole_angle"," 是否越来越大。",[165,112783,112784,112786],{},[30,112785,111364],{}," 是否跑得太远。",[165,112788,112789,112790,84179,112792,1628],{},"action 是否经常被 clip 到 ",[30,112791,105553],{},[30,112793,2036],{},[19,112795,112796],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112798,103986],{"id":103985},[162,112800,112801,112807,112810,112816,112826,112832,112835],{},[165,112802,112803,112804,1628],{},"把初始角度改为 ",[30,112805,112806],{},"data.qpos[1] = 0.3",[165,112808,112809],{},"重新运行，观察控制是否变差。",[165,112811,112812,112813,112815],{},"把 actuator ",[30,112814,108705],{}," 改小。",[165,112817,112818,112819,112822,112823,1628],{},"打印 ",[30,112820,112821],{},"model.nq, model.nv, model.nu","，应为 ",[30,112824,112825],{},"2 2 1",[165,112827,112828,112829,112831],{},"把 reward 里的 ",[30,112830,112397],{}," 系数改大，观察总奖励变化。",[165,112833,112834],{},"把控制器改成反号，观察杆子是否更容易倒。",[165,112836,112837],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112839,104091],{"id":104090},[633,112841,112842],{"id":112842},"杆子方向和预期不一致",[19,112844,104034,112845,112847,112848,112850],{},[30,112846,107877],{}," 和 capsule 的 ",[30,112849,104814],{},"，必要时用 viewer 可视化确认。",[633,112852,112853],{"id":112853},"控制器越控越倒",[19,112855,112856],{},"说明反馈符号可能反了，尝试:",[23,112858,112860],{"className":25,"code":112859,"language":27,"meta":28,"style":28},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[30,112861,112862],{"__ignoreMap":28},[33,112863,112864,112866,112868,112870,112872,112874,112876,112878,112880,112882],{"class":35,"line":36},[33,112865,109080],{"class":59},[33,112867,64],{"class":63},[33,112869,53916],{"class":63},[33,112871,106898],{"class":39},[33,112873,8178],{"class":63},[33,112875,111457],{"class":59},[33,112877,2349],{"class":63},[33,112879,63509],{"class":39},[33,112881,8178],{"class":63},[33,112883,111877],{"class":59},[633,112885,112886],{"id":112886},"小车飞走",[19,112888,112889,112890,112892,112893,112896],{},"降低 ",[30,112891,108705],{}," 或缩小 ",[30,112894,112895],{},"action"," 的 clip 范围。",[633,112898,112900,112902],{"id":112899},"obs3-为什么是杆子角速度",[30,112901,112536],{}," 为什么是杆子角速度",[19,112904,112905],{},"因为这个模型里：",[23,112907,112910],{"className":112908,"code":112909,"language":6848,"meta":28},[6846],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[30,112911,112909],{"__ignoreMap":28},[19,112913,111385],{},[23,112915,112918],{"className":112916,"code":112917,"language":6848,"meta":28},[6846],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[30,112919,112917],{"__ignoreMap":28},[633,112921,112923],{"id":112922},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112925,112926],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112928,104245],{"id":104244},[19,112930,112931],{},"一个控制任务通常包含：",[162,112933,112934,112937,112945,112950,112953],{},[165,112935,112936],{},"模型：Cartpole 的 body、joint、actuator。",[165,112938,112939,112940,2031,112942,112944],{},"观测：从 ",[30,112941,105668],{},[30,112943,105998],{}," 里取状态。",[165,112946,112947,112948,1628],{},"动作：写入 ",[30,112949,102715],{},[165,112951,112952],{},"奖励：根据任务目标打分。",[165,112954,112955],{},"循环：obs -> action -> step -> reward。",[19,112957,112958],{},"这就是后面 Gymnasium 环境的基本骨架。",[1729,112960,105924],{},{"title":28,"searchDepth":43,"depth":43,"links":112962},[112963,112964,112965,112970,112974,112975,112976,112984],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":112966},[112967,112968,112969],{"id":111338,"depth":130,"text":111339},{"id":111403,"depth":130,"text":111404},{"id":111419,"depth":130,"text":111420},{"id":102891,"depth":43,"text":102892,"children":112971},[112972,112973],{"id":103210,"depth":130,"text":103210},{"id":103346,"depth":130,"text":103346},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":112977},[112978,112979,112980,112981,112983],{"id":112842,"depth":130,"text":112842},{"id":112853,"depth":130,"text":112853},{"id":112886,"depth":130,"text":112886},{"id":112899,"depth":130,"text":112982},"obs[3] 为什么是杆子角速度",{"id":112922,"depth":130,"text":112923},{"id":104244,"depth":43,"text":104245},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111074,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112991,"title":112992,"body":112993,"description":28,"extension":1752,"meta":115007,"navigation":126,"path":115008,"seo":115009,"stem":115010,"__hash__":115011},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112994,"toc":114983},[112995,112998,113000,113003,113005,113022,113025,113028,113034,113037,113039,113041,113065,113067,113081,113083,113124,113126,113144,113146,113149,113155,113158,113186,113190,113196,113221,113224,113255,113262,113265,113268,113274,113277,113283,113286,113292,113296,113299,113324,113327,113329,114089,114091,114103,114105,114116,114118,114121,114138,114141,114143,114154,114157,114159,114205,114208,114221,114224,114306,114309,114311,114327,114337,114350,114353,114392,114402,114413,114423,114436,114439,114468,114471,114481,114484,114490,114507,114518,114520,114526,114543,114554,114575,114578,114590,114593,114614,114617,114625,114633,114650,114653,114722,114729,114737,114740,114753,114760,114762,114765,114771,114774,114777,114783,114789,114791,114831,114833,114839,114848,114851,114853,114873,114876,114879,114885,114889,114891,114918,114921,114924,114951,114957,114960,114963,114965,114968,114971,114977,114980],[10,112996,112992],{"id":112997},"_7控制任务reacher-机械臂到达目标",[14,112999,102286],{"id":102285},[19,113001,113002],{},"本章搭建一个二维两关节 reacher 任务。",[19,113004,105969],{},[162,113006,113007,113010,113013,113016,113019],{},[165,113008,113009],{},"两个 hinge joint",[165,113011,113012],{},"两个 motor actuator",[165,113014,113015],{},"site 作为末端点和目标点",[165,113017,113018],{},"根据末端和目标距离设计 reward",[165,113020,113021],{},"构造机械臂任务的基本形式",[19,113023,113024],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113026,113027],{},"Reacher 任务可以理解为：",[23,113029,113032],{"className":113030,"code":113031,"language":6848,"meta":28},[6846],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[30,113033,113031],{"__ignoreMap":28},[19,113035,113036],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113038,102409],{"id":102408},[19,113040,102412],{},[23,113042,113043],{"className":25477,"code":106026,"language":25479,"meta":28,"style":28},[30,113044,113045],{"__ignoreMap":28},[33,113046,113047,113049,113051,113053,113055,113057,113059,113061,113063],{"class":35,"line":36},[33,113048,26232],{"class":3632},[33,113050,27971],{"class":117},[33,113052,25489],{"class":117},[33,113054,28056],{"class":39},[33,113056,106041],{"class":117},[33,113058,102437],{"class":117},[33,113060,104139],{"class":117},[33,113062,102453],{"class":117},[33,113064,106050],{"class":117},[19,113066,104457],{},[23,113068,113069],{"className":25477,"code":102558,"language":25479,"meta":28,"style":28},[30,113070,113071],{"__ignoreMap":28},[33,113072,113073,113075,113077,113079],{"class":35,"line":36},[33,113074,25486],{"class":3632},[33,113076,25489],{"class":117},[33,113078,102569],{"class":117},[33,113080,102572],{"class":117},[19,113082,104474],{},[23,113084,113086],{"className":25477,"code":113085,"language":25479,"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,113087,113088,113105,113114],{"__ignoreMap":28},[33,113089,113090,113092,113094,113096,113099,113101,113103],{"class":35,"line":36},[33,113091,31985],{"class":3632},[33,113093,30831],{"class":117},[33,113095,26771],{"class":39},[33,113097,113098],{"class":117}," mujoco-reacher",[33,113100,102614],{"class":117},[33,113102,102617],{"class":39},[33,113104,102620],{"class":39},[33,113106,113107,113109,113111],{"class":35,"line":43},[33,113108,31985],{"class":3632},[33,113110,102627],{"class":117},[33,113112,113113],{"class":117}," mujoco-reacher\n",[33,113115,113116,113118,113120,113122],{"class":35,"line":130},[33,113117,25486],{"class":3632},[33,113119,25489],{"class":117},[33,113121,102569],{"class":117},[33,113123,102572],{"class":117},[19,113125,102643],{},[162,113127,113128,113131,113134],{},[165,113129,113130],{},"本章使用低维状态，不使用图像输入。",[165,113132,113133],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[165,113135,113136,113137,2031,113139,2031,113141,113143],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[30,113138,105668],{},[30,113140,105998],{},[30,113142,105318],{}," 的方法一致。",[14,113145,102684],{"id":102683},[19,113147,113148],{},"Reacher 任务核心:",[23,113150,113153],{"className":113151,"code":113152,"language":6848,"meta":28},[6846],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[30,113154,113152],{"__ignoreMap":28},[19,113156,113157],{},"读取 site 世界坐标:",[23,113159,113161],{"className":25,"code":113160,"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,113162,113163,113176],{"__ignoreMap":28},[33,113164,113165,113167,113169,113171,113174],{"class":35,"line":36},[33,113166,105272],{"class":59},[33,113168,64],{"class":63},[33,113170,105043],{"class":59},[33,113172,113173],{"class":117},"\"tip\"",[33,113175,157],{"class":59},[33,113177,113178,113181,113183],{"class":35,"line":43},[33,113179,113180],{"class":59},"tip_pos ",[33,113182,64],{"class":63},[33,113184,113185],{"class":59}," data.site_xpos[site_id]\n",[633,113187,113189],{"id":113188},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113191,113192,113193,113195],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[30,113194,105668],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[23,113197,113199],{"className":25,"code":113198,"language":27,"meta":28,"style":28},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[30,113200,113201,113211],{"__ignoreMap":28},[33,113202,113203,113206,113208],{"class":35,"line":36},[33,113204,113205],{"class":59},"tip ",[33,113207,64],{"class":63},[33,113209,113210],{"class":59}," data.site_xpos[tip_site_id]\n",[33,113212,113213,113216,113218],{"class":35,"line":43},[33,113214,113215],{"class":59},"target ",[33,113217,64],{"class":63},[33,113219,113220],{"class":59}," data.site_xpos[target_site_id]\n",[19,113222,113223],{},"这样 reward 就很容易写：",[23,113225,113227],{"className":25,"code":113226,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[30,113228,113229,113244],{"__ignoreMap":28},[33,113230,113231,113234,113236,113239,113241],{"class":35,"line":36},[33,113232,113233],{"class":59},"dist ",[33,113235,64],{"class":63},[33,113237,113238],{"class":59}," np.linalg.norm(tip ",[33,113240,2349],{"class":63},[33,113242,113243],{"class":59}," target)\n",[33,113245,113246,113248,113250,113252],{"class":35,"line":43},[33,113247,112642],{"class":59},[33,113249,64],{"class":63},[33,113251,53916],{"class":63},[33,113253,113254],{"class":59},"dist\n",[19,113256,113257,113258,113261],{},"距离越小，",[30,113259,113260],{},"-dist"," 越接近 0，奖励越高。",[633,113263,113264],{"id":113264},"两关节机械臂的状态",[19,113266,113267],{},"这个模型有两个 hinge joint：",[23,113269,113272],{"className":113270,"code":113271,"language":6848,"meta":28},[6846],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[30,113273,113271],{"__ignoreMap":28},[19,113275,113276],{},"再加上末端和目标位置：",[23,113278,113281],{"className":113279,"code":113280,"language":6848,"meta":28},[6846],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[30,113282,113280],{"__ignoreMap":28},[19,113284,113285],{},"总维度：",[23,113287,113290],{"className":113288,"code":113289,"language":6848,"meta":28},[6846],"2 + 2 + 3 + 3 = 10\n",[30,113291,113289],{"__ignoreMap":28},[633,113293,113295],{"id":113294},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113297,113298],{},"本章把重力设为：",[23,113300,113302],{"className":54712,"code":113301,"language":54714,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[30,113303,113304],{"__ignoreMap":28},[33,113305,113306,113308,113310,113312,113314,113316,113318,113320,113322],{"class":35,"line":36},[33,113307,2726],{"class":59},[33,113309,70808],{"class":52945},[33,113311,102833],{"class":3632},[33,113313,64],{"class":59},[33,113315,102838],{"class":117},[33,113317,102841],{"class":3632},[33,113319,64],{"class":59},[33,113321,105409],{"class":117},[33,113323,102783],{"class":59},[19,113325,113326],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113328,102892],{"id":102891},[23,113330,113332],{"className":25,"code":113331,"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,113333,113334,113340,113350,113354,113358,113366,113371,113376,113380,113384,113389,113394,113398,113403,113408,113413,113417,113422,113427,113432,113437,113441,113445,113449,113453,113457,113462,113467,113471,113475,113479,113483,113487,113502,113511,113523,113546,113553,113557,113561,113571,113585,113599,113606,113610,113614,113628,113640,113652,113665,113680,113697,113701,113705,113717,113729,113737,113745,113749,113765,113770,113783,113796,113811,113815,113850,113882,113886,113890,113899,113903,113919,113929,113940,113956,113972,113988,114004,114008,114026,114046,114065,114069,114073,114085],{"__ignoreMap":28},[33,113335,113336,113338],{"class":35,"line":36},[33,113337,32045],{"class":63},[33,113339,102940],{"class":59},[33,113341,113342,113344,113346,113348],{"class":35,"line":43},[33,113343,32045],{"class":63},[33,113345,33030],{"class":59},[33,113347,33033],{"class":63},[33,113349,33036],{"class":59},[33,113351,113352],{"class":35,"line":130},[33,113353,127],{"emptyLinePlaceholder":126},[33,113355,113356],{"class":35,"line":146},[33,113357,127],{"emptyLinePlaceholder":126},[33,113359,113360,113362,113364],{"class":35,"line":267},[33,113361,102953],{"class":39},[33,113363,15222],{"class":63},[33,113365,102958],{"class":117},[33,113367,113368],{"class":35,"line":275},[33,113369,113370],{"class":117},"\u003Cmujoco model=\"two_link_reacher\">\n",[33,113372,113373],{"class":35,"line":392},[33,113374,113375],{"class":117},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,113377,113378],{"class":35,"line":406},[33,113379,127],{"emptyLinePlaceholder":126},[33,113381,113382],{"class":35,"line":418},[33,113383,102977],{"class":117},[33,113385,113386],{"class":35,"line":425},[33,113387,113388],{"class":117},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[33,113390,113391],{"class":35,"line":1147},[33,113392,113393],{"class":117},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[33,113395,113396],{"class":35,"line":1329},[33,113397,127],{"emptyLinePlaceholder":126},[33,113399,113400],{"class":35,"line":1341},[33,113401,113402],{"class":117},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[33,113404,113405],{"class":35,"line":1348},[33,113406,113407],{"class":117},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,113409,113410],{"class":35,"line":1529},[33,113411,113412],{"class":117},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[33,113414,113415],{"class":35,"line":1546},[33,113416,127],{"emptyLinePlaceholder":126},[33,113418,113419],{"class":35,"line":1551},[33,113420,113421],{"class":117},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[33,113423,113424],{"class":35,"line":1566},[33,113425,113426],{"class":117},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,113428,113429],{"class":35,"line":1578},[33,113430,113431],{"class":117},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[33,113433,113434],{"class":35,"line":1583},[33,113435,113436],{"class":117},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[33,113438,113439],{"class":35,"line":3369},[33,113440,108076],{"class":117},[33,113442,113443],{"class":35,"line":3396},[33,113444,103006],{"class":117},[33,113446,113447],{"class":35,"line":3401},[33,113448,103011],{"class":117},[33,113450,113451],{"class":35,"line":3418},[33,113452,127],{"emptyLinePlaceholder":126},[33,113454,113455],{"class":35,"line":3423},[33,113456,108093],{"class":117},[33,113458,113459],{"class":35,"line":3428},[33,113460,113461],{"class":117},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,113463,113464],{"class":35,"line":3433},[33,113465,113466],{"class":117},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,113468,113469],{"class":35,"line":3447},[33,113470,108103],{"class":117},[33,113472,113473],{"class":35,"line":3452},[33,113474,103016],{"class":117},[33,113476,113477],{"class":35,"line":4243},[33,113478,97337],{"class":117},[33,113480,113481],{"class":35,"line":4257},[33,113482,127],{"emptyLinePlaceholder":126},[33,113484,113485],{"class":35,"line":4265},[33,113486,127],{"emptyLinePlaceholder":126},[33,113488,113489,113491,113494,113497,113499],{"class":35,"line":4270},[33,113490,33597],{"class":63},[33,113492,113493],{"class":3632}," site_position",[33,113495,113496],{"class":59},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[33,113498,2985],{"class":39},[33,113500,113501],{"class":59},") -> np.ndarray:\n",[33,113503,113504,113506,113508],{"class":35,"line":4276},[33,113505,105038],{"class":59},[33,113507,64],{"class":63},[33,113509,113510],{"class":59}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,113512,113513,113515,113517,113519,113521],{"class":35,"line":4282},[33,113514,567],{"class":63},[33,113516,105087],{"class":59},[33,113518,2726],{"class":63},[33,113520,829],{"class":39},[33,113522,143],{"class":59},[33,113524,113525,113527,113529,113531,113533,113536,113538,113540,113542,113544],{"class":35,"line":4287},[33,113526,105070],{"class":63},[33,113528,105073],{"class":39},[33,113530,109],{"class":59},[33,113532,999],{"class":63},[33,113534,113535],{"class":117},"\"site not found: ",[33,113537,1005],{"class":39},[33,113539,1008],{"class":59},[33,113541,1011],{"class":39},[33,113543,1014],{"class":117},[33,113545,157],{"class":59},[33,113547,113548,113550],{"class":35,"line":9608},[33,113549,5752],{"class":63},[33,113551,113552],{"class":59}," data.site_xpos[site_id].copy()\n",[33,113554,113555],{"class":35,"line":9632},[33,113556,127],{"emptyLinePlaceholder":126},[33,113558,113559],{"class":35,"line":9637},[33,113560,127],{"emptyLinePlaceholder":126},[33,113562,113563,113565,113568],{"class":35,"line":9643},[33,113564,33597],{"class":63},[33,113566,113567],{"class":3632}," get_obs",[33,113569,113570],{"class":59},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,113572,113573,113576,113578,113581,113583],{"class":35,"line":9670},[33,113574,113575],{"class":59},"    tip ",[33,113577,64],{"class":63},[33,113579,113580],{"class":59}," site_position(model, data, ",[33,113582,113173],{"class":117},[33,113584,157],{"class":59},[33,113586,113587,113590,113592,113594,113597],{"class":35,"line":9675},[33,113588,113589],{"class":59},"    target ",[33,113591,64],{"class":63},[33,113593,113580],{"class":59},[33,113595,113596],{"class":117},"\"target\"",[33,113598,157],{"class":59},[33,113600,113601,113603],{"class":35,"line":9681},[33,113602,5752],{"class":63},[33,113604,113605],{"class":59}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,113607,113608],{"class":35,"line":9693},[33,113609,127],{"emptyLinePlaceholder":126},[33,113611,113612],{"class":35,"line":9705},[33,113613,127],{"emptyLinePlaceholder":126},[33,113615,113616,113618,113621,113624,113626],{"class":35,"line":9717},[33,113617,33597],{"class":63},[33,113619,113620],{"class":3632}," reward",[33,113622,113623],{"class":59},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,113625,1863],{"class":39},[33,113627,143],{"class":59},[33,113629,113630,113632,113634,113636,113638],{"class":35,"line":11375},[33,113631,113575],{"class":59},[33,113633,64],{"class":63},[33,113635,113580],{"class":59},[33,113637,113173],{"class":117},[33,113639,157],{"class":59},[33,113641,113642,113644,113646,113648,113650],{"class":35,"line":11400},[33,113643,113589],{"class":59},[33,113645,64],{"class":63},[33,113647,113580],{"class":59},[33,113649,113596],{"class":117},[33,113651,157],{"class":59},[33,113653,113654,113657,113659,113661,113663],{"class":35,"line":11423},[33,113655,113656],{"class":59},"    dist ",[33,113658,64],{"class":63},[33,113660,113238],{"class":59},[33,113662,2349],{"class":63},[33,113664,113243],{"class":59},[33,113666,113667,113670,113672,113675,113677],{"class":35,"line":11447},[33,113668,113669],{"class":59},"    control_cost ",[33,113671,64],{"class":63},[33,113673,113674],{"class":39}," 0.01",[33,113676,8178],{"class":63},[33,113678,113679],{"class":59}," np.sum(np.square(data.ctrl))\n",[33,113681,113682,113684,113686,113688,113690,113692,113694],{"class":35,"line":11452},[33,113683,5752],{"class":63},[33,113685,1201],{"class":39},[33,113687,109],{"class":59},[33,113689,2349],{"class":63},[33,113691,113233],{"class":59},[33,113693,2349],{"class":63},[33,113695,113696],{"class":59}," control_cost)\n",[33,113698,113699],{"class":35,"line":11457},[33,113700,127],{"emptyLinePlaceholder":126},[33,113702,113703],{"class":35,"line":11462},[33,113704,127],{"emptyLinePlaceholder":126},[33,113706,113707,113709,113711,113713,113715],{"class":35,"line":11471},[33,113708,33597],{"class":63},[33,113710,3642],{"class":3632},[33,113712,103037],{"class":59},[33,113714,97325],{"class":39},[33,113716,143],{"class":59},[33,113718,113719,113721,113723,113725,113727],{"class":35,"line":11476},[33,113720,103046],{"class":59},[33,113722,64],{"class":63},[33,113724,103051],{"class":59},[33,113726,102953],{"class":39},[33,113728,157],{"class":59},[33,113730,113731,113733,113735],{"class":35,"line":11482},[33,113732,103060],{"class":59},[33,113734,64],{"class":63},[33,113736,103065],{"class":59},[33,113738,113739,113741,113743],{"class":35,"line":11503},[33,113740,111790],{"class":59},[33,113742,64],{"class":63},[33,113744,106399],{"class":39},[33,113746,113747],{"class":35,"line":11509},[33,113748,127],{"emptyLinePlaceholder":126},[33,113750,113751,113753,113755,113757,113759,113761,113763],{"class":35,"line":11523},[33,113752,4864],{"class":63},[33,113754,33266],{"class":59},[33,113756,27699],{"class":63},[33,113758,34091],{"class":39},[33,113760,109],{"class":59},[33,113762,66716],{"class":39},[33,113764,32437],{"class":59},[33,113766,113767],{"class":35,"line":11529},[33,113768,113769],{"class":59},"        mujoco.mj_forward(model, data)\n",[33,113771,113772,113775,113777,113779,113781],{"class":35,"line":11556},[33,113773,113774],{"class":59},"        tip ",[33,113776,64],{"class":63},[33,113778,113580],{"class":59},[33,113780,113173],{"class":117},[33,113782,157],{"class":59},[33,113784,113785,113788,113790,113792,113794],{"class":35,"line":11565},[33,113786,113787],{"class":59},"        target ",[33,113789,64],{"class":63},[33,113791,113580],{"class":59},[33,113793,113596],{"class":117},[33,113795,157],{"class":59},[33,113797,113798,113801,113803,113806,113808],{"class":35,"line":11571},[33,113799,113800],{"class":59},"        error ",[33,113802,64],{"class":63},[33,113804,113805],{"class":59}," target ",[33,113807,2349],{"class":63},[33,113809,113810],{"class":59}," tip\n",[33,113812,113813],{"class":35,"line":11579},[33,113814,127],{"emptyLinePlaceholder":126},[33,113816,113817,113819,113821,113823,113825,113828,113830,113832,113835,113837,113840,113842,113844,113846,113848],{"class":35,"line":11584},[33,113818,108255],{"class":59},[33,113820,2010],{"class":39},[33,113822,6104],{"class":59},[33,113824,64],{"class":63},[33,113826,113827],{"class":59}," np.clip(",[33,113829,106898],{"class":39},[33,113831,8178],{"class":63},[33,113833,113834],{"class":59}," error[",[33,113836,1897],{"class":39},[33,113838,113839],{"class":59},"], ",[33,113841,2349],{"class":63},[33,113843,104041],{"class":39},[33,113845,14093],{"class":59},[33,113847,104041],{"class":39},[33,113849,157],{"class":59},[33,113851,113852,113854,113856,113858,113860,113862,113864,113866,113868,113870,113872,113874,113876,113878,113880],{"class":35,"line":18259},[33,113853,108255],{"class":59},[33,113855,2036],{"class":39},[33,113857,6104],{"class":59},[33,113859,64],{"class":63},[33,113861,113827],{"class":59},[33,113863,106898],{"class":39},[33,113865,8178],{"class":63},[33,113867,113834],{"class":59},[33,113869,2010],{"class":39},[33,113871,113839],{"class":59},[33,113873,2349],{"class":63},[33,113875,104041],{"class":39},[33,113877,14093],{"class":59},[33,113879,104041],{"class":39},[33,113881,157],{"class":59},[33,113883,113884],{"class":35,"line":18265},[33,113885,127],{"emptyLinePlaceholder":126},[33,113887,113888],{"class":35,"line":18288},[33,113889,103155],{"class":59},[33,113891,113892,113894,113896],{"class":35,"line":18294},[33,113893,111934],{"class":59},[33,113895,11136],{"class":63},[33,113897,113898],{"class":59}," reward(model, data)\n",[33,113900,113901],{"class":35,"line":18317},[33,113902,127],{"emptyLinePlaceholder":126},[33,113904,113905,113907,113909,113911,113913,113915,113917],{"class":35,"line":18331},[33,113906,4163],{"class":63},[33,113908,33266],{"class":59},[33,113910,2146],{"class":63},[33,113912,840],{"class":39},[33,113914,1644],{"class":63},[33,113916,829],{"class":39},[33,113918,143],{"class":59},[33,113920,113921,113924,113926],{"class":35,"line":18351},[33,113922,113923],{"class":59},"            obs ",[33,113925,64],{"class":63},[33,113927,113928],{"class":59}," get_obs(model, data)\n",[33,113930,113931,113933,113935,113937],{"class":35,"line":18357},[33,113932,36297],{"class":39},[33,113934,109],{"class":59},[33,113936,111968],{"class":117},[33,113938,113939],{"class":59},", step)\n",[33,113941,113942,113944,113946,113949,113952,113954],{"class":35,"line":18368},[33,113943,36297],{"class":39},[33,113945,109],{"class":59},[33,113947,113948],{"class":117},"\"  tip:\"",[33,113950,113951],{"class":59},", np.round(tip, ",[33,113953,1891],{"class":39},[33,113955,121],{"class":59},[33,113957,113958,113960,113962,113965,113968,113970],{"class":35,"line":18391},[33,113959,36297],{"class":39},[33,113961,109],{"class":59},[33,113963,113964],{"class":117},"\"  target:\"",[33,113966,113967],{"class":59},", np.round(target, ",[33,113969,1891],{"class":39},[33,113971,121],{"class":59},[33,113973,113974,113976,113978,113981,113984,113986],{"class":35,"line":18413},[33,113975,36297],{"class":39},[33,113977,109],{"class":59},[33,113979,113980],{"class":117},"\"  ctrl:\"",[33,113982,113983],{"class":59},", np.round(data.ctrl.copy(), ",[33,113985,1891],{"class":39},[33,113987,121],{"class":59},[33,113989,113990,113992,113994,113997,114000,114002],{"class":35,"line":18418},[33,113991,36297],{"class":39},[33,113993,109],{"class":59},[33,113995,113996],{"class":117},"\"  obs_dim:\"",[33,113998,113999],{"class":59},", obs.shape[",[33,114001,2010],{"class":39},[33,114003,6318],{"class":59},[33,114005,114006],{"class":35,"line":18424},[33,114007,127],{"emptyLinePlaceholder":126},[33,114009,114010,114012,114014,114016,114018,114020,114022,114024],{"class":35,"line":18438},[33,114011,149],{"class":39},[33,114013,109],{"class":59},[33,114015,112013],{"class":117},[33,114017,14093],{"class":59},[33,114019,33668],{"class":39},[33,114021,112020],{"class":59},[33,114023,1891],{"class":39},[33,114025,121],{"class":59},[33,114027,114028,114030,114032,114035,114038,114040,114042,114044],{"class":35,"line":18451},[33,114029,149],{"class":39},[33,114031,109],{"class":59},[33,114033,114034],{"class":117},"\"final tip:\"",[33,114036,114037],{"class":59},", np.round(site_position(model, data, ",[33,114039,113173],{"class":117},[33,114041,111982],{"class":59},[33,114043,1891],{"class":39},[33,114045,121],{"class":59},[33,114047,114048,114050,114052,114055,114057,114059,114061,114063],{"class":35,"line":18456},[33,114049,149],{"class":39},[33,114051,109],{"class":59},[33,114053,114054],{"class":117},"\"target:\"",[33,114056,114037],{"class":59},[33,114058,113596],{"class":117},[33,114060,111982],{"class":59},[33,114062,1891],{"class":39},[33,114064,121],{"class":59},[33,114066,114067],{"class":35,"line":18470},[33,114068,127],{"emptyLinePlaceholder":126},[33,114070,114071],{"class":35,"line":18475},[33,114072,127],{"emptyLinePlaceholder":126},[33,114074,114075,114077,114079,114081,114083],{"class":35,"line":18481},[33,114076,133],{"class":63},[33,114078,32871],{"class":39},[33,114080,1644],{"class":63},[33,114082,103200],{"class":117},[33,114084,143],{"class":59},[33,114086,114087],{"class":35,"line":18486},[33,114088,103207],{"class":59},[19,114090,105208],{},[23,114092,114094],{"className":25477,"code":114093,"language":25479,"meta":28,"style":28},"touch ch7_reacher.py\n",[30,114095,114096],{"__ignoreMap":28},[33,114097,114098,114100],{"class":35,"line":36},[33,114099,102922],{"class":3632},[33,114101,114102],{"class":117}," ch7_reacher.py\n",[19,114104,112081],{},[23,114106,114108],{"className":25477,"code":114107,"language":25479,"meta":28,"style":28},"python ch7_reacher.py\n",[30,114109,114110],{"__ignoreMap":28},[33,114111,114112,114114],{"class":35,"line":36},[33,114113,27],{"class":3632},[33,114115,114102],{"class":117},[633,114117,103210],{"id":103210},[19,114119,114120],{},"读取 site 坐标：",[23,114122,114124],{"className":25,"code":114123,"language":27,"meta":28,"style":28},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[30,114125,114126],{"__ignoreMap":28},[33,114127,114128,114130,114132,114134,114136],{"class":35,"line":36},[33,114129,33597],{"class":63},[33,114131,113493],{"class":3632},[33,114133,113496],{"class":59},[33,114135,2985],{"class":39},[33,114137,113501],{"class":59},[19,114139,114140],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114142,112097],{},[23,114144,114146],{"className":25,"code":114145,"language":27,"meta":28,"style":28},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[30,114147,114148],{"__ignoreMap":28},[33,114149,114150,114152],{"class":35,"line":36},[33,114151,18701],{"class":63},[33,114153,113605],{"class":59},[19,114155,114156],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114158,111423],{},[23,114160,114162],{"className":25,"code":114161,"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,114163,114164,114176,114189],{"__ignoreMap":28},[33,114165,114166,114168,114170,114172,114174],{"class":35,"line":36},[33,114167,113233],{"class":59},[33,114169,64],{"class":63},[33,114171,113238],{"class":59},[33,114173,2349],{"class":63},[33,114175,113243],{"class":59},[33,114177,114178,114181,114183,114185,114187],{"class":35,"line":43},[33,114179,114180],{"class":59},"control_cost ",[33,114182,64],{"class":63},[33,114184,113674],{"class":39},[33,114186,8178],{"class":63},[33,114188,113679],{"class":59},[33,114190,114191,114193,114195,114197,114199,114201,114203],{"class":35,"line":130},[33,114192,18701],{"class":63},[33,114194,1201],{"class":39},[33,114196,109],{"class":59},[33,114198,2349],{"class":63},[33,114200,113233],{"class":59},[33,114202,2349],{"class":63},[33,114204,113696],{"class":59},[19,114206,114207],{},"奖励由两部分组成：",[162,114209,114210,114215],{},[165,114211,114212,114214],{},[30,114213,113260],{},"：末端离目标越远，奖励越低。",[165,114216,114217,114220],{},[30,114218,114219],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114222,114223],{},"简单控制器：",[23,114225,114227],{"className":25,"code":114226,"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,114228,114229,114242,114274],{"__ignoreMap":28},[33,114230,114231,114234,114236,114238,114240],{"class":35,"line":36},[33,114232,114233],{"class":59},"error ",[33,114235,64],{"class":63},[33,114237,113805],{"class":59},[33,114239,2349],{"class":63},[33,114241,113810],{"class":59},[33,114243,114244,114246,114248,114250,114252,114254,114256,114258,114260,114262,114264,114266,114268,114270,114272],{"class":35,"line":43},[33,114245,107509],{"class":59},[33,114247,2010],{"class":39},[33,114249,6104],{"class":59},[33,114251,64],{"class":63},[33,114253,113827],{"class":59},[33,114255,106898],{"class":39},[33,114257,8178],{"class":63},[33,114259,113834],{"class":59},[33,114261,1897],{"class":39},[33,114263,113839],{"class":59},[33,114265,2349],{"class":63},[33,114267,104041],{"class":39},[33,114269,14093],{"class":59},[33,114271,104041],{"class":39},[33,114273,157],{"class":59},[33,114275,114276,114278,114280,114282,114284,114286,114288,114290,114292,114294,114296,114298,114300,114302,114304],{"class":35,"line":130},[33,114277,107509],{"class":59},[33,114279,2036],{"class":39},[33,114281,6104],{"class":59},[33,114283,64],{"class":63},[33,114285,113827],{"class":59},[33,114287,106898],{"class":39},[33,114289,8178],{"class":63},[33,114291,113834],{"class":59},[33,114293,2010],{"class":39},[33,114295,113839],{"class":59},[33,114297,2349],{"class":63},[33,114299,104041],{"class":39},[33,114301,14093],{"class":59},[33,114303,104041],{"class":39},[33,114305,157],{"class":59},[19,114307,114308],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[633,114310,103346],{"id":103346},[23,114312,114313],{"className":25,"code":114123,"language":27,"meta":28,"style":28},[30,114314,114315],{"__ignoreMap":28},[33,114316,114317,114319,114321,114323,114325],{"class":35,"line":36},[33,114318,33597],{"class":63},[33,114320,113493],{"class":3632},[33,114322,113496],{"class":59},[33,114324,2985],{"class":39},[33,114326,113501],{"class":59},[19,114328,114329,114330,114332,114333,84179,114335,1628],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[30,114331,1008],{}," 是 site 的名字，比如 ",[30,114334,113173],{},[30,114336,113596],{},[23,114338,114340],{"className":25,"code":114339,"language":27,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[30,114341,114342],{"__ignoreMap":28},[33,114343,114344,114346,114348],{"class":35,"line":36},[33,114345,105272],{"class":59},[33,114347,64],{"class":63},[33,114349,113510],{"class":59},[19,114351,114352],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[23,114354,114356],{"className":25,"code":114355,"language":27,"meta":28,"style":28},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[30,114357,114358,114370],{"__ignoreMap":28},[33,114359,114360,114362,114364,114366,114368],{"class":35,"line":36},[33,114361,133],{"class":63},[33,114363,105087],{"class":59},[33,114365,2726],{"class":63},[33,114367,829],{"class":39},[33,114369,143],{"class":59},[33,114371,114372,114374,114376,114378,114380,114382,114384,114386,114388,114390],{"class":35,"line":43},[33,114373,105533],{"class":63},[33,114375,105073],{"class":39},[33,114377,109],{"class":59},[33,114379,999],{"class":63},[33,114381,113535],{"class":117},[33,114383,1005],{"class":39},[33,114385,1008],{"class":59},[33,114387,1011],{"class":39},[33,114389,1014],{"class":117},[33,114391,157],{"class":59},[19,114393,114394,114395,114398,114399,114401],{},"如果 site 没找到，就主动报错。",[30,114396,114397],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[30,114400,1008],{}," 的值放进字符串里。",[23,114403,114405],{"className":25,"code":114404,"language":27,"meta":28,"style":28},"return data.site_xpos[site_id].copy()\n",[30,114406,114407],{"__ignoreMap":28},[33,114408,114409,114411],{"class":35,"line":36},[33,114410,18701],{"class":63},[33,114412,113552],{"class":59},[19,114414,114415,114416,114418,114419,114422],{},"返回这个 site 的世界坐标。",[30,114417,105318],{}," 里的每一行都是一个 site 的 ",[30,114420,114421],{},"(x, y, z)"," 坐标。",[23,114424,114426],{"className":25,"code":114425,"language":27,"meta":28,"style":28},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[30,114427,114428],{"__ignoreMap":28},[33,114429,114430,114432,114434],{"class":35,"line":36},[33,114431,33597],{"class":63},[33,114433,113567],{"class":3632},[33,114435,113570],{"class":59},[19,114437,114438],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[23,114440,114442],{"className":25,"code":114441,"language":27,"meta":28,"style":28},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[30,114443,114444,114456],{"__ignoreMap":28},[33,114445,114446,114448,114450,114452,114454],{"class":35,"line":36},[33,114447,113205],{"class":59},[33,114449,64],{"class":63},[33,114451,113580],{"class":59},[33,114453,113173],{"class":117},[33,114455,157],{"class":59},[33,114457,114458,114460,114462,114464,114466],{"class":35,"line":43},[33,114459,113215],{"class":59},[33,114461,64],{"class":63},[33,114463,113580],{"class":59},[33,114465,113596],{"class":117},[33,114467,157],{"class":59},[19,114469,114470],{},"分别读取末端点和目标点的世界坐标。",[23,114472,114473],{"className":25,"code":114145,"language":27,"meta":28,"style":28},[30,114474,114475],{"__ignoreMap":28},[33,114476,114477,114479],{"class":35,"line":36},[33,114478,18701],{"class":63},[33,114480,113605],{"class":59},[19,114482,114483],{},"把四部分拼成一个观测数组：",[23,114485,114488],{"className":114486,"code":114487,"language":6848,"meta":28},[6846],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[30,114489,114487],{"__ignoreMap":28},[23,114491,114493],{"className":25,"code":114492,"language":27,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\n",[30,114494,114495],{"__ignoreMap":28},[33,114496,114497,114499,114501,114503,114505],{"class":35,"line":36},[33,114498,113233],{"class":59},[33,114500,64],{"class":63},[33,114502,113238],{"class":59},[33,114504,2349],{"class":63},[33,114506,113243],{"class":59},[19,114508,114509,114510,114513,114514,114517],{},"计算 tip 到 target 的距离。",[30,114511,114512],{},"tip - target"," 得到一个三维向量，",[30,114515,114516],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114519,16291],{},[23,114521,114524],{"className":114522,"code":114523,"language":6848,"meta":28},[6846],"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,114525,114523],{"__ignoreMap":28},[23,114527,114529],{"className":25,"code":114528,"language":27,"meta":28,"style":28},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[30,114530,114531],{"__ignoreMap":28},[33,114532,114533,114535,114537,114539,114541],{"class":35,"line":36},[33,114534,114180],{"class":59},[33,114536,64],{"class":63},[33,114538,113674],{"class":39},[33,114540,8178],{"class":63},[33,114542,113679],{"class":59},[19,114544,114545,114546,114549,114550,114553],{},"计算动作惩罚。",[30,114547,114548],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[30,114551,114552],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[23,114555,114557],{"className":25,"code":114556,"language":27,"meta":28,"style":28},"return float(-dist - control_cost)\n",[30,114558,114559],{"__ignoreMap":28},[33,114560,114561,114563,114565,114567,114569,114571,114573],{"class":35,"line":36},[33,114562,18701],{"class":63},[33,114564,1201],{"class":39},[33,114566,109],{"class":59},[33,114568,2349],{"class":63},[33,114570,113233],{"class":59},[33,114572,2349],{"class":63},[33,114574,113696],{"class":59},[19,114576,114577],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[23,114579,114580],{"className":25,"code":112440,"language":27,"meta":28,"style":28},[30,114581,114582],{"__ignoreMap":28},[33,114583,114584,114586,114588],{"class":35,"line":36},[33,114585,112447],{"class":59},[33,114587,64],{"class":63},[33,114589,106399],{"class":39},[19,114591,114592],{},"累计奖励变量，记录整个运行过程的总分。",[23,114594,114596],{"className":25,"code":114595,"language":27,"meta":28,"style":28},"for step in range(500):\n",[30,114597,114598],{"__ignoreMap":28},[33,114599,114600,114602,114604,114606,114608,114610,114612],{"class":35,"line":36},[33,114601,4690],{"class":63},[33,114603,33266],{"class":59},[33,114605,27699],{"class":63},[33,114607,34091],{"class":39},[33,114609,109],{"class":59},[33,114611,66716],{"class":39},[33,114613,32437],{"class":59},[19,114615,114616],{},"运行 500 个控制步。",[23,114618,114619],{"className":25,"code":106181,"language":27,"meta":28,"style":28},[30,114620,114621],{"__ignoreMap":28},[33,114622,114623],{"class":35,"line":36},[33,114624,106181],{"class":59},[19,114626,114627,114628,102657,114630,114632],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[30,114629,104869],{},[30,114631,104872],{}," 是当前状态下的坐标。",[23,114634,114636],{"className":25,"code":114635,"language":27,"meta":28,"style":28},"error = target - tip\n",[30,114637,114638],{"__ignoreMap":28},[33,114639,114640,114642,114644,114646,114648],{"class":35,"line":36},[33,114641,114233],{"class":59},[33,114643,64],{"class":63},[33,114645,113805],{"class":59},[33,114647,2349],{"class":63},[33,114649,113810],{"class":59},[19,114651,114652],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[23,114654,114656],{"className":25,"code":114655,"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,114657,114658,114690],{"__ignoreMap":28},[33,114659,114660,114662,114664,114666,114668,114670,114672,114674,114676,114678,114680,114682,114684,114686,114688],{"class":35,"line":36},[33,114661,107509],{"class":59},[33,114663,2010],{"class":39},[33,114665,6104],{"class":59},[33,114667,64],{"class":63},[33,114669,113827],{"class":59},[33,114671,106898],{"class":39},[33,114673,8178],{"class":63},[33,114675,113834],{"class":59},[33,114677,1897],{"class":39},[33,114679,113839],{"class":59},[33,114681,2349],{"class":63},[33,114683,104041],{"class":39},[33,114685,14093],{"class":59},[33,114687,104041],{"class":39},[33,114689,157],{"class":59},[33,114691,114692,114694,114696,114698,114700,114702,114704,114706,114708,114710,114712,114714,114716,114718,114720],{"class":35,"line":43},[33,114693,107509],{"class":59},[33,114695,2036],{"class":39},[33,114697,6104],{"class":59},[33,114699,64],{"class":63},[33,114701,113827],{"class":59},[33,114703,106898],{"class":39},[33,114705,8178],{"class":63},[33,114707,113834],{"class":59},[33,114709,2010],{"class":39},[33,114711,113839],{"class":59},[33,114713,2349],{"class":63},[33,114715,104041],{"class":39},[33,114717,14093],{"class":59},[33,114719,104041],{"class":39},[33,114721,157],{"class":59},[19,114723,114724,114725,114728],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[30,114726,114727],{},"error -> ctrl -> step"," 的流程。",[23,114730,114731],{"className":25,"code":106143,"language":27,"meta":28,"style":28},[30,114732,114733],{"__ignoreMap":28},[33,114734,114735],{"class":35,"line":36},[33,114736,106143],{"class":59},[19,114738,114739],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[23,114741,114743],{"className":25,"code":114742,"language":27,"meta":28,"style":28},"obs = get_obs(model, data)\n",[30,114744,114745],{"__ignoreMap":28},[33,114746,114747,114749,114751],{"class":35,"line":36},[33,114748,112491],{"class":59},[33,114750,64],{"class":63},[33,114752,113928],{"class":59},[19,114754,114755,114756,114759],{},"读取最新观测。后面打印 ",[30,114757,114758],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114761,103954],{"id":103953},[19,114763,114764],{},"观测维度为:",[23,114766,114769],{"className":114767,"code":114768,"language":6848,"meta":28},[6846],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[30,114770,114768],{"__ignoreMap":28},[19,114772,114773],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114775,114776],{},"程序每 100 步打印：",[23,114778,114781],{"className":114779,"code":114780,"language":6848,"meta":28},[6846],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[30,114782,114780],{"__ignoreMap":28},[19,114784,114785,114786,114788],{},"如果控制有效，你应该看到最终 ",[30,114787,104869],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114790,103986],{"id":103985},[162,114792,114793,114796,114799,114805,114811,114818,114828],{},[165,114794,114795],{},"修改目标点位置。",[165,114797,114798],{},"重新运行，观察最终 tip 是否变化。",[165,114800,114801,114802,114804],{},"把 gravity 改成 ",[30,114803,104227],{},"，观察控制是否变差。",[165,114806,112818,114807,112822,114809,1628],{},[30,114808,103796],{},[30,114810,1897],{},[165,114812,104049,114813,104052,114815,114817],{},[30,114814,112233],{},[30,114816,108945],{},"，观察机械臂是否更难移动。",[165,114819,104049,114820,84170,114822,104052,114824,114827],{},[30,114821,104872],{},[30,114823,105784],{},[30,114825,114826],{},"0.2 0 0.6","，观察 reward 和 final tip。",[165,114829,114830],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114832,104091],{"id":104090},[633,114834,114836],{"id":114835},"site-not-found",[30,114837,114838],{},"site not found",[19,114840,114841,114842,102657,114845,1628],{},"检查 XML 中是否有 ",[30,114843,114844],{},"site name=\"tip\"",[30,114846,114847],{},"site name=\"target\"",[633,114849,114850],{"id":114850},"机械臂完全不动",[19,114852,104161],{},[162,114854,114855,114860,114863,114868],{},[165,114856,114857,114859],{},[30,114858,103796],{}," 是否为 2",[165,114861,114862],{},"actuator 是否引用正确 joint",[165,114864,114865,114867],{},[30,114866,102715],{}," 是否被赋值",[165,114869,114870,114871],{},"是否执行了 ",[30,114872,102324],{},[633,114874,114875],{"id":114875},"控制效果不好",[19,114877,114878],{},"正常。本章重点不是控制器最优，而是任务结构:",[23,114880,114883],{"className":114881,"code":114882,"language":6848,"meta":28},[6846],"obs → action → mj_step → reward → next_obs\n",[30,114884,114882],{"__ignoreMap":28},[633,114886,114888],{"id":114887},"tip-坐标不变化","tip 坐标不变化",[19,114890,104213],{},[162,114892,114893,114898,114906,114915],{},[165,114894,114895,114896,1628],{},"是否每步调用了 ",[30,114897,102324],{},[165,114899,114900,114901,102657,114903,1628],{},"是否写入了 ",[30,114902,107764],{},[30,114904,114905],{},"data.ctrl[1]",[165,114907,114908,114909,2031,114912,1628],{},"actuator 是否正确引用 ",[30,114910,114911],{},"joint1",[30,114913,114914],{},"joint2",[165,114916,114917],{},"控制输入是否太小。",[633,114919,114920],{"id":114920},"目标点不会动",[19,114922,114923],{},"本章的 target 是固定 site：",[23,114925,114927],{"className":54712,"code":114926,"language":54714,"meta":28,"style":28},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[30,114928,114929],{"__ignoreMap":28},[33,114930,114931,114933,114935,114937,114939,114941,114943,114945,114948],{"class":35,"line":36},[33,114932,2726],{"class":59},[33,114934,104848],{"class":52945},[33,114936,16578],{"class":3632},[33,114938,64],{"class":59},[33,114940,113596],{"class":117},[33,114942,102745],{"class":3632},[33,114944,64],{"class":59},[33,114946,114947],{"class":117},"\"0.5 0 0.4\"",[33,114949,114950],{"class":59}," ...\u002F>\n",[19,114952,114953,114954,114956],{},"它直接挂在 ",[30,114955,103479],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[633,114958,114959],{"id":114959},"机械臂不像真实机械臂",[19,114961,114962],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114964,104245],{"id":104244},[19,114966,114967],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114969,114970],{},"核心公式：",[23,114972,114975],{"className":114973,"code":114974,"language":6848,"meta":28},[6846],"distance = ||tip - target||\nreward = -distance - action_cost\n",[30,114976,114974],{"__ignoreMap":28},[19,114978,114979],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1729,114981,114982],{},"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":43,"depth":43,"links":114984},[114985,114986,114987,114992,114996,114997,114998,115006],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":114988},[114989,114990,114991],{"id":113188,"depth":130,"text":113189},{"id":113264,"depth":130,"text":113264},{"id":113294,"depth":130,"text":113295},{"id":102891,"depth":43,"text":102892,"children":114993},[114994,114995],{"id":103210,"depth":130,"text":103210},{"id":103346,"depth":130,"text":103346},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":114999},[115000,115001,115002,115003,115004,115005],{"id":114835,"depth":130,"text":114838},{"id":114850,"depth":130,"text":114850},{"id":114875,"depth":130,"text":114875},{"id":114887,"depth":130,"text":114888},{"id":114920,"depth":130,"text":114920},{"id":114959,"depth":130,"text":114959},{"id":104244,"depth":43,"text":104245},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112992,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115013,"title":115014,"body":115015,"description":28,"extension":1752,"meta":118475,"navigation":126,"path":118476,"seo":118477,"stem":118478,"__hash__":118479},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115016,"toc":118446},[115017,115020,115022,115025,115028,115053,115056,115062,115065,115071,115073,115075,115099,115101,115119,115121,115164,115166,115193,115195,115198,115250,115253,115259,115268,115271,115309,115312,115351,115354,115362,115369,115372,115378,115380,115434,115441,115486,115489,115493,115509,115519,115521,116781,116783,116795,116797,116808,116810,116813,116834,116837,116840,116873,116879,116882,116915,116918,116921,116962,116967,116981,116984,116997,117002,117025,117027,117042,117052,117067,117074,117094,117109,117127,117130,117147,117155,117171,117177,117209,117222,117254,117264,117299,117313,117359,117373,117415,117426,117439,117445,117478,117481,117508,117518,117558,117568,117585,117592,117610,117613,117654,117667,117682,117685,117708,117711,117723,117726,117745,117750,117771,117774,117789,117792,117826,117838,117853,117856,117881,117884,117903,117906,117938,117941,117965,117971,118001,118008,118021,118024,118026,118028,118034,118037,118040,118052,118055,118057,118110,118112,118116,118122,118131,118134,118141,118143,118166,118169,118173,118175,118193,118199,118201,118234,118237,118243,118247,118250,118270,118275,118279,118286,118306,118311,118315,118318,118338,118341,118427,118431,118434,118440,118443],[10,115018,115014],{"id":115019},"_8gymnasium-风格强化学习接口基础",[14,115021,102286],{"id":102285},[19,115023,115024],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115026,115027],{},"你将实现:",[23,115029,115031],{"className":25,"code":115030,"language":27,"meta":28,"style":28},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[30,115032,115033,115043],{"__ignoreMap":28},[33,115034,115035,115038,115040],{"class":35,"line":36},[33,115036,115037],{"class":59},"obs, info ",[33,115039,64],{"class":63},[33,115041,115042],{"class":59}," env.reset()\n",[33,115044,115045,115048,115050],{"class":35,"line":43},[33,115046,115047],{"class":59},"obs, reward, terminated, truncated, info ",[33,115049,64],{"class":63},[33,115051,115052],{"class":59}," env.step(action)\n",[19,115054,115055],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115057,115058,115059,115061],{},"前面章节的代码都是“脚本式”的：在 ",[30,115060,103933],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115063,115064],{},"可以先记住 Gymnasium 环境的核心交互：",[23,115066,115069],{"className":115067,"code":115068,"language":6848,"meta":28},[6846],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[30,115070,115068],{"__ignoreMap":28},[14,115072,102409],{"id":102408},[19,115074,102412],{},[23,115076,115077],{"className":25477,"code":106026,"language":25479,"meta":28,"style":28},[30,115078,115079],{"__ignoreMap":28},[33,115080,115081,115083,115085,115087,115089,115091,115093,115095,115097],{"class":35,"line":36},[33,115082,26232],{"class":3632},[33,115084,27971],{"class":117},[33,115086,25489],{"class":117},[33,115088,28056],{"class":39},[33,115090,106041],{"class":117},[33,115092,102437],{"class":117},[33,115094,104139],{"class":117},[33,115096,102453],{"class":117},[33,115098,106050],{"class":117},[19,115100,104457],{},[23,115102,115104],{"className":25477,"code":115103,"language":25479,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[30,115105,115106],{"__ignoreMap":28},[33,115107,115108,115110,115112,115114,115116],{"class":35,"line":36},[33,115109,25486],{"class":3632},[33,115111,25489],{"class":117},[33,115113,102569],{"class":117},[33,115115,109349],{"class":117},[33,115117,115118],{"class":117}," gymnasium\n",[19,115120,104474],{},[23,115122,115124],{"className":25477,"code":115123,"language":25479,"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,115125,115126,115143,115152],{"__ignoreMap":28},[33,115127,115128,115130,115132,115134,115137,115139,115141],{"class":35,"line":36},[33,115129,31985],{"class":3632},[33,115131,30831],{"class":117},[33,115133,26771],{"class":39},[33,115135,115136],{"class":117}," mujoco-gym-api",[33,115138,102614],{"class":117},[33,115140,102617],{"class":39},[33,115142,102620],{"class":39},[33,115144,115145,115147,115149],{"class":35,"line":43},[33,115146,31985],{"class":3632},[33,115148,102627],{"class":117},[33,115150,115151],{"class":117}," mujoco-gym-api\n",[33,115153,115154,115156,115158,115160,115162],{"class":35,"line":130},[33,115155,25486],{"class":3632},[33,115157,25489],{"class":117},[33,115159,102569],{"class":117},[33,115161,109349],{"class":117},[33,115163,115118],{"class":117},[19,115165,102643],{},[162,115167,115168,115178,115181,115187],{},[165,115169,115170,115171,115174,115175,1628],{},"本章使用 ",[30,115172,115173],{},"gymnasium","，不是旧版 ",[30,115176,115177],{},"gym",[165,115179,115180],{},"Gymnasium API 与旧 Gym API 有差异。",[165,115182,115183,115184,1628],{},"旧 Gym 常见返回值是 4 个: ",[30,115185,115186],{},"obs, reward, done, info",[165,115188,115189,115190,1628],{},"Gymnasium 返回值是 5 个: ",[30,115191,115192],{},"obs, reward, terminated, truncated, info",[14,115194,102684],{"id":102683},[19,115196,115197],{},"强化学习环境接口包含:",[1956,115199,115200,115209],{},[1959,115201,115202],{},[1962,115203,115204,115207],{},[1965,115205,115206],{"align":25391},"方法",[1965,115208,104334],{"align":25391},[2003,115210,115211,115221,115231,115241],{},[1962,115212,115213,115218],{},[2008,115214,115215],{"align":25391},[30,115216,115217],{},"reset()",[2008,115219,115220],{"align":25391},"重置环境",[1962,115222,115223,115228],{},[2008,115224,115225],{"align":25391},[30,115226,115227],{},"step(action)",[2008,115229,115230],{"align":25391},"执行动作",[1962,115232,115233,115238],{},[2008,115234,115235],{"align":25391},[30,115236,115237],{},"observation_space",[2008,115239,115240],{"align":25391},"观测空间",[1962,115242,115243,115248],{},[2008,115244,115245],{"align":25391},[30,115246,115247],{},"action_space",[2008,115249,25309],{"align":25391},[19,115251,115252],{},"一个最小环境需要完成:",[23,115254,115257],{"className":115255,"code":115256,"language":6848,"meta":28},[6846],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[30,115258,115256],{"__ignoreMap":28},[633,115260,115262,102657,115265,106276],{"id":115261},"terminated-和-truncated-的区别",[30,115263,115264],{},"terminated",[30,115266,115267],{},"truncated",[19,115269,115270],{},"Gymnasium 把“结束”拆成两个概念：",[1956,115272,115273,115283],{},[1959,115274,115275],{},[1962,115276,115277,115279,115281],{},[1965,115278,106212],{"align":25391},[1965,115280,102339],{"align":25391},[1965,115282,22842],{"align":25391},[2003,115284,115285,115297],{},[1962,115286,115287,115291,115294],{},[2008,115288,115289],{"align":25391},[30,115290,115264],{},[2008,115292,115293],{"align":25391},"任务自然结束",[2008,115295,115296],{"align":25391},"机械臂到达目标、机器人摔倒",[1962,115298,115299,115303,115306],{},[2008,115300,115301],{"align":25391},[30,115302,115267],{},[2008,115304,115305],{"align":25391},"因外部限制截断",[2008,115307,115308],{"align":25391},"达到最大步数、时间限制",[19,115310,115311],{},"本章中：",[23,115313,115315],{"className":25,"code":115314,"language":27,"meta":28,"style":28},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[30,115316,115317,115332],{"__ignoreMap":28},[33,115318,115319,115322,115324,115327,115329],{"class":35,"line":36},[33,115320,115321],{"class":59},"terminated ",[33,115323,64],{"class":63},[33,115325,115326],{"class":59}," dist ",[33,115328,2726],{"class":63},[33,115330,115331],{"class":39}," 0.05\n",[33,115333,115334,115337,115339,115341,115344,115346,115348],{"class":35,"line":43},[33,115335,115336],{"class":59},"truncated ",[33,115338,64],{"class":63},[33,115340,40520],{"class":39},[33,115342,115343],{"class":59},".steps ",[33,115345,78],{"class":63},[33,115347,40520],{"class":39},[33,115349,115350],{"class":59},".max_steps\n",[19,115352,115353],{},"也就是：",[162,115355,115356,115359],{},[165,115357,115358],{},"末端距离目标小于 0.05，任务成功结束。",[165,115360,115361],{},"步数超过上限，episode 被截断。",[633,115363,115365,102657,115367],{"id":115364},"observation_space-和-action_space",[30,115366,115237],{},[30,115368,115247],{},[19,115370,115371],{},"这两个对象告诉算法：",[23,115373,115376],{"className":115374,"code":115375,"language":6848,"meta":28},[6846],"观测长什么样\n动作允许多大\n",[30,115377,115375],{"__ignoreMap":28},[19,115379,16291],{},[23,115381,115383],{"className":25,"code":115382,"language":27,"meta":28,"style":28},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[30,115384,115385],{"__ignoreMap":28},[33,115386,115387,115389,115392,115394,115397,115400,115403,115405,115407,115410,115412,115414,115416,115418,115420,115422,115424,115427,115429,115431],{"class":35,"line":36},[33,115388,32474],{"class":39},[33,115390,115391],{"class":59},".action_space ",[33,115393,64],{"class":63},[33,115395,115396],{"class":59}," spaces.Box(",[33,115398,115399],{"class":6877},"low",[33,115401,115402],{"class":63},"=-",[33,115404,104041],{"class":39},[33,115406,14093],{"class":59},[33,115408,115409],{"class":6877},"high",[33,115411,64],{"class":63},[33,115413,104041],{"class":39},[33,115415,14093],{"class":59},[33,115417,97602],{"class":6877},[33,115419,64],{"class":63},[33,115421,109],{"class":59},[33,115423,1897],{"class":39},[33,115425,115426],{"class":59},",), ",[33,115428,95139],{"class":6877},[33,115430,64],{"class":63},[33,115432,115433],{"class":59},"np.float32)\n",[19,115435,115436,115437,115440],{},"表示动作是 2 维数组，每个值都在 ",[30,115438,115439],{},"[-1, 1]"," 范围内。",[23,115442,115444],{"className":25,"code":115443,"language":27,"meta":28,"style":28},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[30,115445,115446],{"__ignoreMap":28},[33,115447,115448,115450,115453,115455,115457,115459,115461,115464,115466,115468,115470,115472,115474,115476,115478,115480,115482,115484],{"class":35,"line":36},[33,115449,32474],{"class":39},[33,115451,115452],{"class":59},".observation_space ",[33,115454,64],{"class":63},[33,115456,115396],{"class":59},[33,115458,115399],{"class":6877},[33,115460,115402],{"class":63},[33,115462,115463],{"class":59},"np.inf, ",[33,115465,115409],{"class":6877},[33,115467,64],{"class":63},[33,115469,115463],{"class":59},[33,115471,97602],{"class":6877},[33,115473,64],{"class":63},[33,115475,109],{"class":59},[33,115477,2264],{"class":39},[33,115479,115426],{"class":59},[33,115481,95139],{"class":6877},[33,115483,64],{"class":63},[33,115485,115433],{"class":59},[19,115487,115488],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[633,115490,115492],{"id":115491},"frame_skip-是什么","frame_skip 是什么",[23,115494,115496],{"className":25,"code":115495,"language":27,"meta":28,"style":28},"self.frame_skip = 5\n",[30,115497,115498],{"__ignoreMap":28},[33,115499,115500,115502,115505,115507],{"class":35,"line":36},[33,115501,32474],{"class":39},[33,115503,115504],{"class":59},".frame_skip ",[33,115506,64],{"class":63},[33,115508,56071],{"class":39},[19,115510,115511,115512,115515,115516,115518],{},"表示外部调用一次 ",[30,115513,115514],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[30,115517,102854],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115520,102892],{"id":102891},[23,115522,115524],{"className":25,"code":115523,"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,115525,115526,115538,115544,115554,115565,115569,115573,115581,115586,115590,115594,115598,115602,115606,115610,115614,115619,115623,115627,115631,115636,115640,115644,115648,115652,115656,115660,115664,115668,115672,115676,115680,115684,115688,115706,115721,115725,115738,115748,115763,115780,115784,115805,115824,115849,115863,115867,115877,115889,115899,115903,115945,115983,115987,115997,116013,116028,116047,116054,116058,116071,116086,116101,116114,116133,116149,116153,116194,116209,116224,116228,116267,116278,116291,116295,116305,116314,116318,116328,116343,116361,116365,116376,116393,116406,116410,116420,116424,116435,116446,116450,116464,116478,116494,116498,116511,116528,116543,116550,116554,116558,116570,116580,116598,116610,116622,116626,116634,116650,116659,116668,116676,116718,116730,116735,116739,116757,116761,116765,116777],{"__ignoreMap":28},[33,115527,115528,115530,115533,115535],{"class":35,"line":36},[33,115529,32045],{"class":63},[33,115531,115532],{"class":59}," gymnasium ",[33,115534,33033],{"class":63},[33,115536,115537],{"class":59}," gym\n",[33,115539,115540,115542],{"class":35,"line":43},[33,115541,32045],{"class":63},[33,115543,102940],{"class":59},[33,115545,115546,115548,115550,115552],{"class":35,"line":130},[33,115547,32045],{"class":63},[33,115549,33030],{"class":59},[33,115551,33033],{"class":63},[33,115553,33036],{"class":59},[33,115555,115556,115558,115560,115562],{"class":35,"line":146},[33,115557,32388],{"class":63},[33,115559,115532],{"class":59},[33,115561,32045],{"class":63},[33,115563,115564],{"class":59}," spaces\n",[33,115566,115567],{"class":35,"line":267},[33,115568,127],{"emptyLinePlaceholder":126},[33,115570,115571],{"class":35,"line":275},[33,115572,127],{"emptyLinePlaceholder":126},[33,115574,115575,115577,115579],{"class":35,"line":392},[33,115576,102953],{"class":39},[33,115578,15222],{"class":63},[33,115580,102958],{"class":117},[33,115582,115583],{"class":35,"line":406},[33,115584,115585],{"class":117},"\u003Cmujoco model=\"gym_reacher\">\n",[33,115587,115588],{"class":35,"line":418},[33,115589,113375],{"class":117},[33,115591,115592],{"class":35,"line":425},[33,115593,127],{"emptyLinePlaceholder":126},[33,115595,115596],{"class":35,"line":1147},[33,115597,102977],{"class":117},[33,115599,115600],{"class":35,"line":1329},[33,115601,113393],{"class":117},[33,115603,115604],{"class":35,"line":1341},[33,115605,127],{"emptyLinePlaceholder":126},[33,115607,115608],{"class":35,"line":1348},[33,115609,113402],{"class":117},[33,115611,115612],{"class":35,"line":1529},[33,115613,113407],{"class":117},[33,115615,115616],{"class":35,"line":1546},[33,115617,115618],{"class":117},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,115620,115621],{"class":35,"line":1551},[33,115622,127],{"emptyLinePlaceholder":126},[33,115624,115625],{"class":35,"line":1566},[33,115626,113421],{"class":117},[33,115628,115629],{"class":35,"line":1578},[33,115630,113426],{"class":117},[33,115632,115633],{"class":35,"line":1583},[33,115634,115635],{"class":117},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,115637,115638],{"class":35,"line":3369},[33,115639,113436],{"class":117},[33,115641,115642],{"class":35,"line":3396},[33,115643,108076],{"class":117},[33,115645,115646],{"class":35,"line":3401},[33,115647,103006],{"class":117},[33,115649,115650],{"class":35,"line":3418},[33,115651,103011],{"class":117},[33,115653,115654],{"class":35,"line":3423},[33,115655,127],{"emptyLinePlaceholder":126},[33,115657,115658],{"class":35,"line":3428},[33,115659,108093],{"class":117},[33,115661,115662],{"class":35,"line":3433},[33,115663,113461],{"class":117},[33,115665,115666],{"class":35,"line":3447},[33,115667,113466],{"class":117},[33,115669,115670],{"class":35,"line":3452},[33,115671,108103],{"class":117},[33,115673,115674],{"class":35,"line":4243},[33,115675,103016],{"class":117},[33,115677,115678],{"class":35,"line":4257},[33,115679,97337],{"class":117},[33,115681,115682],{"class":35,"line":4265},[33,115683,127],{"emptyLinePlaceholder":126},[33,115685,115686],{"class":35,"line":4270},[33,115687,127],{"emptyLinePlaceholder":126},[33,115689,115690,115692,115695,115697,115699,115701,115704],{"class":35,"line":4276},[33,115691,16352],{"class":63},[33,115693,115694],{"class":3632}," ReacherEnv",[33,115696,109],{"class":59},[33,115698,115177],{"class":3632},[33,115700,2375],{"class":59},[33,115702,115703],{"class":3632},"Env",[33,115705,32437],{"class":59},[33,115707,115708,115711,115713,115715,115718],{"class":35,"line":4282},[33,115709,115710],{"class":59},"    metadata ",[33,115712,64],{"class":63},[33,115714,6109],{"class":59},[33,115716,115717],{"class":117},"\"render_modes\"",[33,115719,115720],{"class":59},": []}\n",[33,115722,115723],{"class":35,"line":4287},[33,115724,127],{"emptyLinePlaceholder":126},[33,115726,115727,115729,115731,115734,115736],{"class":35,"line":9608},[33,115728,32452],{"class":63},[33,115730,32455],{"class":39},[33,115732,115733],{"class":59},"(self) -> ",[33,115735,97325],{"class":39},[33,115737,143],{"class":59},[33,115739,115740,115742,115744,115746],{"class":35,"line":9632},[33,115741,32468],{"class":39},[33,115743,18916],{"class":59},[33,115745,32480],{"class":39},[33,115747,943],{"class":59},[33,115749,115750,115752,115755,115757,115759,115761],{"class":35,"line":9637},[33,115751,32496],{"class":39},[33,115753,115754],{"class":59},".model ",[33,115756,64],{"class":63},[33,115758,103051],{"class":59},[33,115760,102953],{"class":39},[33,115762,157],{"class":59},[33,115764,115765,115767,115770,115772,115775,115777],{"class":35,"line":9643},[33,115766,32496],{"class":39},[33,115768,115769],{"class":59},".data ",[33,115771,64],{"class":63},[33,115773,115774],{"class":59}," mujoco.MjData(",[33,115776,32474],{"class":39},[33,115778,115779],{"class":59},".model)\n",[33,115781,115782],{"class":35,"line":9670},[33,115783,127],{"emptyLinePlaceholder":126},[33,115785,115786,115788,115791,115793,115796,115798,115801,115803],{"class":35,"line":9675},[33,115787,32496],{"class":39},[33,115789,115790],{"class":59},".tip_site_id ",[33,115792,64],{"class":63},[33,115794,115795],{"class":59}," mujoco.mj_name2id(",[33,115797,32474],{"class":39},[33,115799,115800],{"class":59},".model, mujoco.mjtObj.mjOBJ_SITE, ",[33,115802,113173],{"class":117},[33,115804,157],{"class":59},[33,115806,115807,115809,115812,115814,115816,115818,115820,115822],{"class":35,"line":9681},[33,115808,32496],{"class":39},[33,115810,115811],{"class":59},".target_site_id ",[33,115813,64],{"class":63},[33,115815,115795],{"class":59},[33,115817,32474],{"class":39},[33,115819,115800],{"class":59},[33,115821,113596],{"class":117},[33,115823,157],{"class":59},[33,115825,115826,115828,115830,115832,115834,115836,115839,115841,115843,115845,115847],{"class":35,"line":9693},[33,115827,4163],{"class":63},[33,115829,40520],{"class":39},[33,115831,115790],{"class":59},[33,115833,2726],{"class":63},[33,115835,829],{"class":39},[33,115837,115838],{"class":63}," or",[33,115840,40520],{"class":39},[33,115842,115811],{"class":59},[33,115844,2726],{"class":63},[33,115846,829],{"class":39},[33,115848,143],{"class":59},[33,115850,115851,115854,115856,115858,115861],{"class":35,"line":9705},[33,115852,115853],{"class":63},"            raise",[33,115855,105073],{"class":39},[33,115857,109],{"class":59},[33,115859,115860],{"class":117},"\"required sites not found\"",[33,115862,157],{"class":59},[33,115864,115865],{"class":35,"line":9717},[33,115866,127],{"emptyLinePlaceholder":126},[33,115868,115869,115871,115873,115875],{"class":35,"line":11375},[33,115870,32496],{"class":39},[33,115872,115504],{"class":59},[33,115874,64],{"class":63},[33,115876,56071],{"class":39},[33,115878,115879,115881,115884,115886],{"class":35,"line":11400},[33,115880,32496],{"class":39},[33,115882,115883],{"class":59},".max_steps ",[33,115885,64],{"class":63},[33,115887,115888],{"class":39}," 200\n",[33,115890,115891,115893,115895,115897],{"class":35,"line":11423},[33,115892,32496],{"class":39},[33,115894,115343],{"class":59},[33,115896,64],{"class":63},[33,115898,48978],{"class":39},[33,115900,115901],{"class":35,"line":11447},[33,115902,127],{"emptyLinePlaceholder":126},[33,115904,115905,115907,115909,115911,115913,115915,115917,115919,115921,115923,115925,115927,115929,115931,115933,115935,115937,115939,115941,115943],{"class":35,"line":11452},[33,115906,32496],{"class":39},[33,115908,115391],{"class":59},[33,115910,64],{"class":63},[33,115912,115396],{"class":59},[33,115914,115399],{"class":6877},[33,115916,115402],{"class":63},[33,115918,104041],{"class":39},[33,115920,14093],{"class":59},[33,115922,115409],{"class":6877},[33,115924,64],{"class":63},[33,115926,104041],{"class":39},[33,115928,14093],{"class":59},[33,115930,97602],{"class":6877},[33,115932,64],{"class":63},[33,115934,109],{"class":59},[33,115936,1897],{"class":39},[33,115938,115426],{"class":59},[33,115940,95139],{"class":6877},[33,115942,64],{"class":63},[33,115944,115433],{"class":59},[33,115946,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981],{"class":35,"line":11457},[33,115948,32496],{"class":39},[33,115950,115452],{"class":59},[33,115952,64],{"class":63},[33,115954,115396],{"class":59},[33,115956,115399],{"class":6877},[33,115958,115402],{"class":63},[33,115960,115463],{"class":59},[33,115962,115409],{"class":6877},[33,115964,64],{"class":63},[33,115966,115463],{"class":59},[33,115968,97602],{"class":6877},[33,115970,64],{"class":63},[33,115972,109],{"class":59},[33,115974,2264],{"class":39},[33,115976,115426],{"class":59},[33,115978,95139],{"class":6877},[33,115980,64],{"class":63},[33,115982,115433],{"class":59},[33,115984,115985],{"class":35,"line":11462},[33,115986,127],{"emptyLinePlaceholder":126},[33,115988,115989,115991,115994],{"class":35,"line":11471},[33,115990,32452],{"class":63},[33,115992,115993],{"class":3632}," _get_obs",[33,115995,115996],{"class":59},"(self) -> np.ndarray:\n",[33,115998,115999,116001,116003,116005,116008,116010],{"class":35,"line":11476},[33,116000,113774],{"class":59},[33,116002,64],{"class":63},[33,116004,40520],{"class":39},[33,116006,116007],{"class":59},".data.site_xpos[",[33,116009,32474],{"class":39},[33,116011,116012],{"class":59},".tip_site_id].copy()\n",[33,116014,116015,116017,116019,116021,116023,116025],{"class":35,"line":11482},[33,116016,113787],{"class":59},[33,116018,64],{"class":63},[33,116020,40520],{"class":39},[33,116022,116007],{"class":59},[33,116024,32474],{"class":39},[33,116026,116027],{"class":59},".target_site_id].copy()\n",[33,116029,116030,116032,116034,116037,116039,116042,116044],{"class":35,"line":11503},[33,116031,111819],{"class":59},[33,116033,64],{"class":63},[33,116035,116036],{"class":59}," np.concatenate([",[33,116038,32474],{"class":39},[33,116040,116041],{"class":59},".data.qpos.copy(), ",[33,116043,32474],{"class":39},[33,116045,116046],{"class":59},".data.qvel.copy(), tip, target])\n",[33,116048,116049,116051],{"class":35,"line":11509},[33,116050,16410],{"class":63},[33,116052,116053],{"class":59}," obs.astype(np.float32)\n",[33,116055,116056],{"class":35,"line":11523},[33,116057,127],{"emptyLinePlaceholder":126},[33,116059,116060,116062,116065,116067,116069],{"class":35,"line":11529},[33,116061,32452],{"class":63},[33,116063,116064],{"class":3632}," _get_reward",[33,116066,115733],{"class":59},[33,116068,1863],{"class":39},[33,116070,143],{"class":59},[33,116072,116073,116075,116077,116079,116081,116083],{"class":35,"line":11556},[33,116074,113774],{"class":59},[33,116076,64],{"class":63},[33,116078,40520],{"class":39},[33,116080,116007],{"class":59},[33,116082,32474],{"class":39},[33,116084,116085],{"class":59},".tip_site_id]\n",[33,116087,116088,116090,116092,116094,116096,116098],{"class":35,"line":11565},[33,116089,113787],{"class":59},[33,116091,64],{"class":63},[33,116093,40520],{"class":39},[33,116095,116007],{"class":59},[33,116097,32474],{"class":39},[33,116099,116100],{"class":59},".target_site_id]\n",[33,116102,116103,116106,116108,116110,116112],{"class":35,"line":11571},[33,116104,116105],{"class":59},"        dist ",[33,116107,64],{"class":63},[33,116109,113238],{"class":59},[33,116111,2349],{"class":63},[33,116113,113243],{"class":59},[33,116115,116116,116119,116121,116123,116125,116128,116130],{"class":35,"line":11579},[33,116117,116118],{"class":59},"        control_cost ",[33,116120,64],{"class":63},[33,116122,113674],{"class":39},[33,116124,8178],{"class":63},[33,116126,116127],{"class":59}," np.sum(np.square(",[33,116129,32474],{"class":39},[33,116131,116132],{"class":59},".data.ctrl))\n",[33,116134,116135,116137,116139,116141,116143,116145,116147],{"class":35,"line":11584},[33,116136,16410],{"class":63},[33,116138,1201],{"class":39},[33,116140,109],{"class":59},[33,116142,2349],{"class":63},[33,116144,113233],{"class":59},[33,116146,2349],{"class":63},[33,116148,113696],{"class":59},[33,116150,116151],{"class":35,"line":18259},[33,116152,127],{"emptyLinePlaceholder":126},[33,116154,116155,116157,116160,116163,116165,116168,116170,116172,116174,116176,116178,116181,116184,116186,116188,116190,116192],{"class":35,"line":18265},[33,116156,32452],{"class":63},[33,116158,116159],{"class":3632}," reset",[33,116161,116162],{"class":59},"(self, ",[33,116164,1540],{"class":63},[33,116166,116167],{"class":59},", seed: ",[33,116169,1828],{"class":39},[33,116171,26765],{"class":63},[33,116173,40579],{"class":39},[33,116175,15222],{"class":63},[33,116177,40579],{"class":39},[33,116179,116180],{"class":59},", options: ",[33,116182,116183],{"class":39},"dict",[33,116185,26765],{"class":63},[33,116187,40579],{"class":39},[33,116189,15222],{"class":63},[33,116191,40579],{"class":39},[33,116193,32437],{"class":59},[33,116195,116196,116198,116201,116204,116206],{"class":35,"line":18288},[33,116197,32468],{"class":39},[33,116199,116200],{"class":59},"().reset(",[33,116202,116203],{"class":6877},"seed",[33,116205,64],{"class":63},[33,116207,116208],{"class":59},"seed)\n",[33,116210,116211,116214,116216,116219,116221],{"class":35,"line":18294},[33,116212,116213],{"class":59},"        mujoco.mj_resetData(",[33,116215,32474],{"class":39},[33,116217,116218],{"class":59},".model, ",[33,116220,32474],{"class":39},[33,116222,116223],{"class":59},".data)\n",[33,116225,116226],{"class":35,"line":18317},[33,116227,127],{"emptyLinePlaceholder":126},[33,116229,116230,116232,116235,116237,116239,116242,116244,116246,116248,116250,116252,116254,116256,116258,116260,116262,116264],{"class":35,"line":18331},[33,116231,32496],{"class":39},[33,116233,116234],{"class":59},".data.qpos[:] ",[33,116236,64],{"class":63},[33,116238,40520],{"class":39},[33,116240,116241],{"class":59},".np_random.uniform(",[33,116243,115399],{"class":6877},[33,116245,115402],{"class":63},[33,116247,87850],{"class":39},[33,116249,14093],{"class":59},[33,116251,115409],{"class":6877},[33,116253,64],{"class":63},[33,116255,87850],{"class":39},[33,116257,14093],{"class":59},[33,116259,33146],{"class":6877},[33,116261,64],{"class":63},[33,116263,32474],{"class":39},[33,116265,116266],{"class":59},".model.nq)\n",[33,116268,116269,116271,116274,116276],{"class":35,"line":18351},[33,116270,32496],{"class":39},[33,116272,116273],{"class":59},".data.qvel[:] ",[33,116275,64],{"class":63},[33,116277,106399],{"class":39},[33,116279,116280,116283,116285,116287,116289],{"class":35,"line":18357},[33,116281,116282],{"class":59},"        mujoco.mj_forward(",[33,116284,32474],{"class":39},[33,116286,116218],{"class":59},[33,116288,32474],{"class":39},[33,116290,116223],{"class":59},[33,116292,116293],{"class":35,"line":18368},[33,116294,127],{"emptyLinePlaceholder":126},[33,116296,116297,116299,116301,116303],{"class":35,"line":18391},[33,116298,32496],{"class":39},[33,116300,115343],{"class":59},[33,116302,64],{"class":63},[33,116304,48978],{"class":39},[33,116306,116307,116309,116311],{"class":35,"line":18413},[33,116308,16410],{"class":63},[33,116310,40520],{"class":39},[33,116312,116313],{"class":59},"._get_obs(), {}\n",[33,116315,116316],{"class":35,"line":18418},[33,116317,127],{"emptyLinePlaceholder":126},[33,116319,116320,116322,116325],{"class":35,"line":18424},[33,116321,32452],{"class":63},[33,116323,116324],{"class":3632}," step",[33,116326,116327],{"class":59},"(self, action):\n",[33,116329,116330,116332,116334,116337,116339,116341],{"class":35,"line":18438},[33,116331,111859],{"class":59},[33,116333,64],{"class":63},[33,116335,116336],{"class":59}," np.asarray(action, ",[33,116338,95139],{"class":6877},[33,116340,64],{"class":63},[33,116342,115433],{"class":59},[33,116344,116345,116347,116349,116351,116353,116356,116358],{"class":35,"line":18451},[33,116346,111859],{"class":59},[33,116348,64],{"class":63},[33,116350,109085],{"class":59},[33,116352,32474],{"class":39},[33,116354,116355],{"class":59},".action_space.low, ",[33,116357,32474],{"class":39},[33,116359,116360],{"class":59},".action_space.high)\n",[33,116362,116363],{"class":35,"line":18456},[33,116364,127],{"emptyLinePlaceholder":126},[33,116366,116367,116369,116372,116374],{"class":35,"line":18470},[33,116368,32496],{"class":39},[33,116370,116371],{"class":59},".data.ctrl[:] ",[33,116373,64],{"class":63},[33,116375,109108],{"class":59},[33,116377,116378,116380,116382,116384,116386,116388,116390],{"class":35,"line":18475},[33,116379,5066],{"class":63},[33,116381,103140],{"class":59},[33,116383,27699],{"class":63},[33,116385,34091],{"class":39},[33,116387,109],{"class":59},[33,116389,32474],{"class":39},[33,116391,116392],{"class":59},".frame_skip):\n",[33,116394,116395,116398,116400,116402,116404],{"class":35,"line":18481},[33,116396,116397],{"class":59},"            mujoco.mj_step(",[33,116399,32474],{"class":39},[33,116401,116218],{"class":59},[33,116403,32474],{"class":39},[33,116405,116223],{"class":59},[33,116407,116408],{"class":35,"line":18486},[33,116409,127],{"emptyLinePlaceholder":126},[33,116411,116412,116414,116416,116418],{"class":35,"line":18500},[33,116413,32496],{"class":39},[33,116415,115343],{"class":59},[33,116417,11136],{"class":63},[33,116419,1434],{"class":39},[33,116421,116422],{"class":35,"line":18505},[33,116423,127],{"emptyLinePlaceholder":126},[33,116425,116426,116428,116430,116432],{"class":35,"line":18510},[33,116427,111819],{"class":59},[33,116429,64],{"class":63},[33,116431,40520],{"class":39},[33,116433,116434],{"class":59},"._get_obs()\n",[33,116436,116437,116439,116441,116443],{"class":35,"line":18524},[33,116438,111924],{"class":59},[33,116440,64],{"class":63},[33,116442,40520],{"class":39},[33,116444,116445],{"class":59},"._get_reward()\n",[33,116447,116448],{"class":35,"line":18536},[33,116449,127],{"emptyLinePlaceholder":126},[33,116451,116452,116454,116456,116458,116460,116462],{"class":35,"line":18541},[33,116453,113774],{"class":59},[33,116455,64],{"class":63},[33,116457,40520],{"class":39},[33,116459,116007],{"class":59},[33,116461,32474],{"class":39},[33,116463,116085],{"class":59},[33,116465,116466,116468,116470,116472,116474,116476],{"class":35,"line":18554},[33,116467,113787],{"class":59},[33,116469,64],{"class":63},[33,116471,40520],{"class":39},[33,116473,116007],{"class":59},[33,116475,32474],{"class":39},[33,116477,116100],{"class":59},[33,116479,116480,116482,116484,116486,116489,116491],{"class":35,"line":18559},[33,116481,116105],{"class":59},[33,116483,64],{"class":63},[33,116485,1201],{"class":39},[33,116487,116488],{"class":59},"(np.linalg.norm(tip ",[33,116490,2349],{"class":63},[33,116492,116493],{"class":59}," target))\n",[33,116495,116496],{"class":35,"line":18564},[33,116497,127],{"emptyLinePlaceholder":126},[33,116499,116500,116503,116505,116507,116509],{"class":35,"line":18569},[33,116501,116502],{"class":59},"        terminated ",[33,116504,64],{"class":63},[33,116506,115326],{"class":59},[33,116508,2726],{"class":63},[33,116510,115331],{"class":39},[33,116512,116513,116516,116518,116520,116522,116524,116526],{"class":35,"line":18582},[33,116514,116515],{"class":59},"        truncated ",[33,116517,64],{"class":63},[33,116519,40520],{"class":39},[33,116521,115343],{"class":59},[33,116523,78],{"class":63},[33,116525,40520],{"class":39},[33,116527,115350],{"class":59},[33,116529,116530,116533,116535,116537,116540],{"class":35,"line":18587},[33,116531,116532],{"class":59},"        info ",[33,116534,64],{"class":63},[33,116536,6109],{"class":59},[33,116538,116539],{"class":117},"\"distance\"",[33,116541,116542],{"class":59},": dist}\n",[33,116544,116545,116547],{"class":35,"line":34280},[33,116546,16410],{"class":63},[33,116548,116549],{"class":59}," obs, reward, terminated, truncated, info\n",[33,116551,116552],{"class":35,"line":34286},[33,116553,127],{"emptyLinePlaceholder":126},[33,116555,116556],{"class":35,"line":34292},[33,116557,127],{"emptyLinePlaceholder":126},[33,116559,116560,116562,116564,116566,116568],{"class":35,"line":34298},[33,116561,33597],{"class":63},[33,116563,3642],{"class":3632},[33,116565,103037],{"class":59},[33,116567,97325],{"class":39},[33,116569,143],{"class":59},[33,116571,116572,116575,116577],{"class":35,"line":34304},[33,116573,116574],{"class":59},"    env ",[33,116576,64],{"class":63},[33,116578,116579],{"class":59}," ReacherEnv()\n",[33,116581,116582,116585,116587,116590,116592,116594,116596],{"class":35,"line":34315},[33,116583,116584],{"class":59},"    obs, info ",[33,116586,64],{"class":63},[33,116588,116589],{"class":59}," env.reset(",[33,116591,116203],{"class":6877},[33,116593,64],{"class":63},[33,116595,2010],{"class":39},[33,116597,157],{"class":59},[33,116599,116600,116602,116604,116607],{"class":35,"line":34321},[33,116601,149],{"class":39},[33,116603,109],{"class":59},[33,116605,116606],{"class":117},"\"initial obs shape:\"",[33,116608,116609],{"class":59},", obs.shape)\n",[33,116611,116612,116614,116616,116619],{"class":35,"line":34341},[33,116613,149],{"class":39},[33,116615,109],{"class":59},[33,116617,116618],{"class":117},"\"initial info:\"",[33,116620,116621],{"class":59},", info)\n",[33,116623,116624],{"class":35,"line":34347},[33,116625,127],{"emptyLinePlaceholder":126},[33,116627,116628,116630,116632],{"class":35,"line":34358},[33,116629,111790],{"class":59},[33,116631,64],{"class":63},[33,116633,106399],{"class":39},[33,116635,116636,116638,116640,116642,116644,116646,116648],{"class":35,"line":34364},[33,116637,4864],{"class":63},[33,116639,33266],{"class":59},[33,116641,27699],{"class":63},[33,116643,34091],{"class":39},[33,116645,109],{"class":59},[33,116647,2517],{"class":39},[33,116649,32437],{"class":59},[33,116651,116652,116654,116656],{"class":35,"line":34370},[33,116653,111859],{"class":59},[33,116655,64],{"class":63},[33,116657,116658],{"class":59}," env.action_space.sample()\n",[33,116660,116661,116664,116666],{"class":35,"line":34376},[33,116662,116663],{"class":59},"        obs, reward, terminated, truncated, info ",[33,116665,64],{"class":63},[33,116667,115052],{"class":59},[33,116669,116670,116672,116674],{"class":35,"line":34382},[33,116671,111934],{"class":59},[33,116673,11136],{"class":63},[33,116675,111939],{"class":59},[33,116677,116678,116680,116682,116684,116686,116689,116691,116693,116696,116698,116700,116703,116705,116707,116710,116712,116714,116716],{"class":35,"line":34388},[33,116679,583],{"class":39},[33,116681,109],{"class":59},[33,116683,111968],{"class":117},[33,116685,111971],{"class":59},[33,116687,116688],{"class":117},"\"reward:\"",[33,116690,14093],{"class":59},[33,116692,33668],{"class":39},[33,116694,116695],{"class":59},"(reward, ",[33,116697,1891],{"class":39},[33,116699,111982],{"class":59},[33,116701,116702],{"class":117},"\"distance:\"",[33,116704,14093],{"class":59},[33,116706,33668],{"class":39},[33,116708,116709],{"class":59},"(info[",[33,116711,116539],{"class":117},[33,116713,113839],{"class":59},[33,116715,1891],{"class":39},[33,116717,121],{"class":59},[33,116719,116720,116722,116725,116727],{"class":35,"line":34394},[33,116721,4163],{"class":63},[33,116723,116724],{"class":59}," terminated ",[33,116726,737],{"class":63},[33,116728,116729],{"class":59}," truncated:\n",[33,116731,116732],{"class":35,"line":34400},[33,116733,116734],{"class":63},"            break\n",[33,116736,116737],{"class":35,"line":34420},[33,116738,127],{"emptyLinePlaceholder":126},[33,116740,116741,116743,116745,116747,116749,116751,116753,116755],{"class":35,"line":34426},[33,116742,149],{"class":39},[33,116744,109],{"class":59},[33,116746,112013],{"class":117},[33,116748,14093],{"class":59},[33,116750,33668],{"class":39},[33,116752,112020],{"class":59},[33,116754,1891],{"class":39},[33,116756,121],{"class":59},[33,116758,116759],{"class":35,"line":34442},[33,116760,127],{"emptyLinePlaceholder":126},[33,116762,116763],{"class":35,"line":34448},[33,116764,127],{"emptyLinePlaceholder":126},[33,116766,116767,116769,116771,116773,116775],{"class":35,"line":34462},[33,116768,133],{"class":63},[33,116770,32871],{"class":39},[33,116772,1644],{"class":63},[33,116774,103200],{"class":117},[33,116776,143],{"class":59},[33,116778,116779],{"class":35,"line":34468},[33,116780,103207],{"class":59},[19,116782,105208],{},[23,116784,116786],{"className":25477,"code":116785,"language":25479,"meta":28,"style":28},"touch ch8_gym_env.py\n",[30,116787,116788],{"__ignoreMap":28},[33,116789,116790,116792],{"class":35,"line":36},[33,116791,102922],{"class":3632},[33,116793,116794],{"class":117}," ch8_gym_env.py\n",[19,116796,112081],{},[23,116798,116800],{"className":25477,"code":116799,"language":25479,"meta":28,"style":28},"python ch8_gym_env.py\n",[30,116801,116802],{"__ignoreMap":28},[33,116803,116804,116806],{"class":35,"line":36},[33,116805,27],{"class":3632},[33,116807,116794],{"class":117},[633,116809,103210],{"id":103210},[19,116811,116812],{},"继承 Gymnasium 环境：",[23,116814,116816],{"className":25,"code":116815,"language":27,"meta":28,"style":28},"class ReacherEnv(gym.Env):\n",[30,116817,116818],{"__ignoreMap":28},[33,116819,116820,116822,116824,116826,116828,116830,116832],{"class":35,"line":36},[33,116821,16352],{"class":63},[33,116823,115694],{"class":3632},[33,116825,109],{"class":59},[33,116827,115177],{"class":3632},[33,116829,2375],{"class":59},[33,116831,115703],{"class":3632},[33,116833,32437],{"class":59},[19,116835,116836],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116838,116839],{},"初始化模型：",[23,116841,116843],{"className":25,"code":116842,"language":27,"meta":28,"style":28},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[30,116844,116845,116859],{"__ignoreMap":28},[33,116846,116847,116849,116851,116853,116855,116857],{"class":35,"line":36},[33,116848,32474],{"class":39},[33,116850,115754],{"class":59},[33,116852,64],{"class":63},[33,116854,103051],{"class":59},[33,116856,102953],{"class":39},[33,116858,157],{"class":59},[33,116860,116861,116863,116865,116867,116869,116871],{"class":35,"line":43},[33,116862,32474],{"class":39},[33,116864,115769],{"class":59},[33,116866,64],{"class":63},[33,116868,115774],{"class":59},[33,116870,32474],{"class":39},[33,116872,115779],{"class":59},[19,116874,116875,116876,116878],{},"这和前面章节一样，只是现在放到了类的 ",[30,116877,32480],{}," 里。",[19,116880,116881],{},"缓存 site ID：",[23,116883,116885],{"className":25,"code":116884,"language":27,"meta":28,"style":28},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[30,116886,116887,116901],{"__ignoreMap":28},[33,116888,116889,116891,116893,116895,116897,116899],{"class":35,"line":36},[33,116890,32474],{"class":39},[33,116892,115790],{"class":59},[33,116894,64],{"class":63},[33,116896,115795],{"class":59},[33,116898,91193],{"class":39},[33,116900,157],{"class":59},[33,116902,116903,116905,116907,116909,116911,116913],{"class":35,"line":43},[33,116904,32474],{"class":39},[33,116906,115811],{"class":59},[33,116908,64],{"class":63},[33,116910,115795],{"class":59},[33,116912,91193],{"class":39},[33,116914,157],{"class":59},[19,116916,116917],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116919,116920],{},"reset：",[23,116922,116924],{"className":25,"code":116923,"language":27,"meta":28,"style":28},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[30,116925,116926],{"__ignoreMap":28},[33,116927,116928,116930,116932,116934,116936,116938,116940,116942,116944,116946,116948,116950,116952,116954,116956,116958,116960],{"class":35,"line":36},[33,116929,33597],{"class":63},[33,116931,116159],{"class":3632},[33,116933,116162],{"class":59},[33,116935,1540],{"class":63},[33,116937,116167],{"class":59},[33,116939,1828],{"class":39},[33,116941,26765],{"class":63},[33,116943,40579],{"class":39},[33,116945,15222],{"class":63},[33,116947,40579],{"class":39},[33,116949,116180],{"class":59},[33,116951,116183],{"class":39},[33,116953,26765],{"class":63},[33,116955,40579],{"class":39},[33,116957,15222],{"class":63},[33,116959,40579],{"class":39},[33,116961,32437],{"class":59},[19,116963,116964,116966],{},[30,116965,71698],{}," 做四件事：",[162,116968,116969,116972,116975,116978],{},[165,116970,116971],{},"设置随机种子。",[165,116973,116974],{},"重置 MuJoCo data。",[165,116976,116977],{},"随机初始化关节角。",[165,116979,116980],{},"返回初始观测和 info。",[19,116982,116983],{},"step：",[23,116985,116987],{"className":25,"code":116986,"language":27,"meta":28,"style":28},"def step(self, action):\n",[30,116988,116989],{"__ignoreMap":28},[33,116990,116991,116993,116995],{"class":35,"line":36},[33,116992,33597],{"class":63},[33,116994,116324],{"class":3632},[33,116996,116327],{"class":59},[19,116998,116999,117001],{},[30,117000,108772],{}," 做六件事：",[162,117003,117004,117007,117013,117016,117019,117022],{},[165,117005,117006],{},"检查并裁剪 action。",[165,117008,117009,117010,1628],{},"写入 ",[30,117011,117012],{},"self.data.ctrl",[165,117014,117015],{},"连续推进若干个 MuJoCo 物理步。",[165,117017,117018],{},"计算新观测。",[165,117020,117021],{},"计算奖励和结束条件。",[165,117023,117024],{},"返回 Gymnasium 标准五元组。",[633,117026,103346],{"id":103346},[23,117028,117030],{"className":25,"code":117029,"language":27,"meta":28,"style":28},"import gymnasium as gym\n",[30,117031,117032],{"__ignoreMap":28},[33,117033,117034,117036,117038,117040],{"class":35,"line":36},[33,117035,32045],{"class":63},[33,117037,115532],{"class":59},[33,117039,33033],{"class":63},[33,117041,115537],{"class":59},[19,117043,117044,117045,117047,117048,117051],{},"导入 Gymnasium，并起别名 ",[30,117046,115177],{},"。后面写 ",[30,117049,117050],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[23,117053,117055],{"className":25,"code":117054,"language":27,"meta":28,"style":28},"from gymnasium import spaces\n",[30,117056,117057],{"__ignoreMap":28},[33,117058,117059,117061,117063,117065],{"class":35,"line":36},[33,117060,32388],{"class":63},[33,117062,115532],{"class":59},[33,117064,32045],{"class":63},[33,117066,115564],{"class":59},[19,117068,117069,117070,117073],{},"导入空间定义工具。",[30,117071,117072],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[23,117075,117076],{"className":25,"code":116815,"language":27,"meta":28,"style":28},[30,117077,117078],{"__ignoreMap":28},[33,117079,117080,117082,117084,117086,117088,117090,117092],{"class":35,"line":36},[33,117081,16352],{"class":63},[33,117083,115694],{"class":3632},[33,117085,109],{"class":59},[33,117087,115177],{"class":3632},[33,117089,2375],{"class":59},[33,117091,115703],{"class":3632},[33,117093,32437],{"class":59},[19,117095,117096,117097,117100,117101,117103,117104,102657,117106,117108],{},"定义一个类，名字叫 ",[30,117098,117099],{},"ReacherEnv","。括号里的 ",[30,117102,117050],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[30,117105,71698],{},[30,117107,108772],{}," 这两个核心方法。",[23,117110,117112],{"className":25,"code":117111,"language":27,"meta":28,"style":28},"metadata = {\"render_modes\": []}\n",[30,117113,117114],{"__ignoreMap":28},[33,117115,117116,117119,117121,117123,117125],{"class":35,"line":36},[33,117117,117118],{"class":59},"metadata ",[33,117120,64],{"class":63},[33,117122,6109],{"class":59},[33,117124,115717],{"class":117},[33,117126,115720],{"class":59},[19,117128,117129],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[23,117131,117133],{"className":25,"code":117132,"language":27,"meta":28,"style":28},"def __init__(self) -> None:\n",[30,117134,117135],{"__ignoreMap":28},[33,117136,117137,117139,117141,117143,117145],{"class":35,"line":36},[33,117138,33597],{"class":63},[33,117140,32455],{"class":39},[33,117142,115733],{"class":59},[33,117144,97325],{"class":39},[33,117146,143],{"class":59},[19,117148,117149,117151,117152,1628],{},[30,117150,32480],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[30,117153,117154],{},"env = ReacherEnv()",[23,117156,117158],{"className":25,"code":117157,"language":27,"meta":28,"style":28},"super().__init__()\n",[30,117159,117160],{"__ignoreMap":28},[33,117161,117162,117165,117167,117169],{"class":35,"line":36},[33,117163,117164],{"class":39},"super",[33,117166,18916],{"class":59},[33,117168,32480],{"class":39},[33,117170,943],{"class":59},[19,117172,117173,117174,117176],{},"调用父类 ",[30,117175,117050],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[23,117178,117179],{"className":25,"code":116842,"language":27,"meta":28,"style":28},[30,117180,117181,117195],{"__ignoreMap":28},[33,117182,117183,117185,117187,117189,117191,117193],{"class":35,"line":36},[33,117184,32474],{"class":39},[33,117186,115754],{"class":59},[33,117188,64],{"class":63},[33,117190,103051],{"class":59},[33,117192,102953],{"class":39},[33,117194,157],{"class":59},[33,117196,117197,117199,117201,117203,117205,117207],{"class":35,"line":43},[33,117198,32474],{"class":39},[33,117200,115769],{"class":59},[33,117202,64],{"class":63},[33,117204,115774],{"class":59},[33,117206,32474],{"class":39},[33,117208,115779],{"class":59},[19,117210,117211,117212,117214,117215,102657,117218,117221],{},"把 MuJoCo 模型和状态保存到 ",[30,117213,32474],{}," 上。",[30,117216,117217],{},"self.model",[30,117219,117220],{},"self.data"," 表示这个环境对象自己的模型和状态。",[23,117223,117224],{"className":25,"code":116884,"language":27,"meta":28,"style":28},[30,117225,117226,117240],{"__ignoreMap":28},[33,117227,117228,117230,117232,117234,117236,117238],{"class":35,"line":36},[33,117229,32474],{"class":39},[33,117231,115790],{"class":59},[33,117233,64],{"class":63},[33,117235,115795],{"class":59},[33,117237,91193],{"class":39},[33,117239,157],{"class":59},[33,117241,117242,117244,117246,117248,117250,117252],{"class":35,"line":43},[33,117243,32474],{"class":39},[33,117245,115811],{"class":59},[33,117247,64],{"class":63},[33,117249,115795],{"class":59},[33,117251,91193],{"class":39},[33,117253,157],{"class":59},[19,117255,117256,117257,102657,117260,117263],{},"提前查好 tip 和 target 的 site ID。这样 ",[30,117258,117259],{},"_get_obs",[30,117261,117262],{},"_get_reward"," 里就不用每次按名字查找。",[23,117265,117267],{"className":25,"code":117266,"language":27,"meta":28,"style":28},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[30,117268,117269,117279,117289],{"__ignoreMap":28},[33,117270,117271,117273,117275,117277],{"class":35,"line":36},[33,117272,32474],{"class":39},[33,117274,115504],{"class":59},[33,117276,64],{"class":63},[33,117278,56071],{"class":39},[33,117280,117281,117283,117285,117287],{"class":35,"line":43},[33,117282,32474],{"class":39},[33,117284,115883],{"class":59},[33,117286,64],{"class":63},[33,117288,115888],{"class":39},[33,117290,117291,117293,117295,117297],{"class":35,"line":130},[33,117292,32474],{"class":39},[33,117294,115343],{"class":59},[33,117296,64],{"class":63},[33,117298,48978],{"class":39},[19,117300,117301,117304,117305,117308,117309,117312],{},[30,117302,117303],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[30,117306,117307],{},"max_steps"," 是一个 episode 最多运行多少步。",[30,117310,117311],{},"steps"," 记录当前 episode 已经走了多少步。",[23,117314,117315],{"className":25,"code":115382,"language":27,"meta":28,"style":28},[30,117316,117317],{"__ignoreMap":28},[33,117318,117319,117321,117323,117325,117327,117329,117331,117333,117335,117337,117339,117341,117343,117345,117347,117349,117351,117353,117355,117357],{"class":35,"line":36},[33,117320,32474],{"class":39},[33,117322,115391],{"class":59},[33,117324,64],{"class":63},[33,117326,115396],{"class":59},[33,117328,115399],{"class":6877},[33,117330,115402],{"class":63},[33,117332,104041],{"class":39},[33,117334,14093],{"class":59},[33,117336,115409],{"class":6877},[33,117338,64],{"class":63},[33,117340,104041],{"class":39},[33,117342,14093],{"class":59},[33,117344,97602],{"class":6877},[33,117346,64],{"class":63},[33,117348,109],{"class":59},[33,117350,1897],{"class":39},[33,117352,115426],{"class":59},[33,117354,95139],{"class":6877},[33,117356,64],{"class":63},[33,117358,115433],{"class":59},[19,117360,117361,117362,117365,117366,102657,117369,117372],{},"定义动作空间。",[30,117363,117364],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[30,117367,117368],{},"low=-1.0",[30,117370,117371],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[23,117374,117375],{"className":25,"code":115443,"language":27,"meta":28,"style":28},[30,117376,117377],{"__ignoreMap":28},[33,117378,117379,117381,117383,117385,117387,117389,117391,117393,117395,117397,117399,117401,117403,117405,117407,117409,117411,117413],{"class":35,"line":36},[33,117380,32474],{"class":39},[33,117382,115452],{"class":59},[33,117384,64],{"class":63},[33,117386,115396],{"class":59},[33,117388,115399],{"class":6877},[33,117390,115402],{"class":63},[33,117392,115463],{"class":59},[33,117394,115409],{"class":6877},[33,117396,64],{"class":63},[33,117398,115463],{"class":59},[33,117400,97602],{"class":6877},[33,117402,64],{"class":63},[33,117404,109],{"class":59},[33,117406,2264],{"class":39},[33,117408,115426],{"class":59},[33,117410,95139],{"class":6877},[33,117412,64],{"class":63},[33,117414,115433],{"class":59},[19,117416,117417,117418,117421,117422,117425],{},"定义观测空间。",[30,117419,117420],{},"shape=(10,)"," 表示观测是 10 个数。",[30,117423,117424],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[23,117427,117429],{"className":25,"code":117428,"language":27,"meta":28,"style":28},"def _get_obs(self) -> np.ndarray:\n",[30,117430,117431],{"__ignoreMap":28},[33,117432,117433,117435,117437],{"class":35,"line":36},[33,117434,33597],{"class":63},[33,117436,115993],{"class":3632},[33,117438,115996],{"class":59},[19,117440,117441,117442,117444],{},"定义内部函数，用来生成观测。函数名前面的 ",[30,117443,2807],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[23,117446,117448],{"className":25,"code":117447,"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,117449,117450,117464],{"__ignoreMap":28},[33,117451,117452,117454,117456,117458,117460,117462],{"class":35,"line":36},[33,117453,113205],{"class":59},[33,117455,64],{"class":63},[33,117457,40520],{"class":39},[33,117459,116007],{"class":59},[33,117461,32474],{"class":39},[33,117463,116012],{"class":59},[33,117465,117466,117468,117470,117472,117474,117476],{"class":35,"line":43},[33,117467,113215],{"class":59},[33,117469,64],{"class":63},[33,117471,40520],{"class":39},[33,117473,116007],{"class":59},[33,117475,32474],{"class":39},[33,117477,116027],{"class":59},[19,117479,117480],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[23,117482,117484],{"className":25,"code":117483,"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,117485,117486,117502],{"__ignoreMap":28},[33,117487,117488,117490,117492,117494,117496,117498,117500],{"class":35,"line":36},[33,117489,112491],{"class":59},[33,117491,64],{"class":63},[33,117493,116036],{"class":59},[33,117495,32474],{"class":39},[33,117497,116041],{"class":59},[33,117499,32474],{"class":39},[33,117501,116046],{"class":59},[33,117503,117504,117506],{"class":35,"line":43},[33,117505,18701],{"class":63},[33,117507,116053],{"class":59},[19,117509,117510,117511,117514,117515,117517],{},"拼接观测，并转换成 ",[30,117512,117513],{},"float32","。很多强化学习库默认使用 ",[30,117516,117513],{},"，所以这里主动转换。",[23,117519,117520],{"className":25,"code":116923,"language":27,"meta":28,"style":28},[30,117521,117522],{"__ignoreMap":28},[33,117523,117524,117526,117528,117530,117532,117534,117536,117538,117540,117542,117544,117546,117548,117550,117552,117554,117556],{"class":35,"line":36},[33,117525,33597],{"class":63},[33,117527,116159],{"class":3632},[33,117529,116162],{"class":59},[33,117531,1540],{"class":63},[33,117533,116167],{"class":59},[33,117535,1828],{"class":39},[33,117537,26765],{"class":63},[33,117539,40579],{"class":39},[33,117541,15222],{"class":63},[33,117543,40579],{"class":39},[33,117545,116180],{"class":59},[33,117547,116183],{"class":39},[33,117549,26765],{"class":63},[33,117551,40579],{"class":39},[33,117553,15222],{"class":63},[33,117555,40579],{"class":39},[33,117557,32437],{"class":59},[19,117559,117560,117561,117563,117564,117567],{},"定义 reset。",[30,117562,116203],{}," 用来控制随机数，保证实验可以复现。",[30,117565,117566],{},"options"," 用来接收额外配置，本章暂时不用。",[23,117569,117571],{"className":25,"code":117570,"language":27,"meta":28,"style":28},"super().reset(seed=seed)\n",[30,117572,117573],{"__ignoreMap":28},[33,117574,117575,117577,117579,117581,117583],{"class":35,"line":36},[33,117576,117164],{"class":39},[33,117578,116200],{"class":59},[33,117580,116203],{"class":6877},[33,117582,64],{"class":63},[33,117584,116208],{"class":59},[19,117586,117587,117588,117591],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[30,117589,117590],{},"self.np_random"," 生成可复现的随机数。",[23,117593,117595],{"className":25,"code":117594,"language":27,"meta":28,"style":28},"mujoco.mj_resetData(self.model, self.data)\n",[30,117596,117597],{"__ignoreMap":28},[33,117598,117599,117602,117604,117606,117608],{"class":35,"line":36},[33,117600,117601],{"class":59},"mujoco.mj_resetData(",[33,117603,32474],{"class":39},[33,117605,116218],{"class":59},[33,117607,32474],{"class":39},[33,117609,116223],{"class":59},[19,117611,117612],{},"把 MuJoCo 状态重置到默认状态。",[23,117614,117616],{"className":25,"code":117615,"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,117617,117618],{"__ignoreMap":28},[33,117619,117620,117622,117624,117626,117628,117630,117632,117634,117636,117638,117640,117642,117644,117646,117648,117650,117652],{"class":35,"line":36},[33,117621,32474],{"class":39},[33,117623,116234],{"class":59},[33,117625,64],{"class":63},[33,117627,40520],{"class":39},[33,117629,116241],{"class":59},[33,117631,115399],{"class":6877},[33,117633,115402],{"class":63},[33,117635,87850],{"class":39},[33,117637,14093],{"class":59},[33,117639,115409],{"class":6877},[33,117641,64],{"class":63},[33,117643,87850],{"class":39},[33,117645,14093],{"class":59},[33,117647,33146],{"class":6877},[33,117649,64],{"class":63},[33,117651,32474],{"class":39},[33,117653,116266],{"class":59},[19,117655,116977,117656,117659,117660,117663,117664,117666],{},[30,117657,117658],{},"[:]"," 表示修改整个数组。",[30,117661,117662],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[30,117665,103788],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[23,117668,117670],{"className":25,"code":117669,"language":27,"meta":28,"style":28},"self.data.qvel[:] = 0.0\n",[30,117671,117672],{"__ignoreMap":28},[33,117673,117674,117676,117678,117680],{"class":35,"line":36},[33,117675,32474],{"class":39},[33,117677,116273],{"class":59},[33,117679,64],{"class":63},[33,117681,106399],{"class":39},[19,117683,117684],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[23,117686,117688],{"className":25,"code":117687,"language":27,"meta":28,"style":28},"self.steps = 0\nreturn self._get_obs(), {}\n",[30,117689,117690,117700],{"__ignoreMap":28},[33,117691,117692,117694,117696,117698],{"class":35,"line":36},[33,117693,32474],{"class":39},[33,117695,115343],{"class":59},[33,117697,64],{"class":63},[33,117699,48978],{"class":39},[33,117701,117702,117704,117706],{"class":35,"line":43},[33,117703,18701],{"class":63},[33,117705,40520],{"class":39},[33,117707,116313],{"class":59},[19,117709,117710],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[23,117712,117713],{"className":25,"code":116986,"language":27,"meta":28,"style":28},[30,117714,117715],{"__ignoreMap":28},[33,117716,117717,117719,117721],{"class":35,"line":36},[33,117718,33597],{"class":63},[33,117720,116324],{"class":3632},[33,117722,116327],{"class":59},[19,117724,117725],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[23,117727,117729],{"className":25,"code":117728,"language":27,"meta":28,"style":28},"action = np.asarray(action, dtype=np.float32)\n",[30,117730,117731],{"__ignoreMap":28},[33,117732,117733,117735,117737,117739,117741,117743],{"class":35,"line":36},[33,117734,109080],{"class":59},[33,117736,64],{"class":63},[33,117738,116336],{"class":59},[33,117740,95139],{"class":6877},[33,117742,64],{"class":63},[33,117744,115433],{"class":59},[19,117746,117747,117748,1628],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[30,117749,117513],{},[23,117751,117753],{"className":25,"code":117752,"language":27,"meta":28,"style":28},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[30,117754,117755],{"__ignoreMap":28},[33,117756,117757,117759,117761,117763,117765,117767,117769],{"class":35,"line":36},[33,117758,109080],{"class":59},[33,117760,64],{"class":63},[33,117762,109085],{"class":59},[33,117764,32474],{"class":39},[33,117766,116355],{"class":59},[33,117768,32474],{"class":39},[33,117770,116360],{"class":59},[19,117772,117773],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[23,117775,117777],{"className":25,"code":117776,"language":27,"meta":28,"style":28},"self.data.ctrl[:] = action\n",[30,117778,117779],{"__ignoreMap":28},[33,117780,117781,117783,117785,117787],{"class":35,"line":36},[33,117782,32474],{"class":39},[33,117784,116371],{"class":59},[33,117786,64],{"class":63},[33,117788,109108],{"class":59},[19,117790,117791],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[23,117793,117795],{"className":25,"code":117794,"language":27,"meta":28,"style":28},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[30,117796,117797,117813],{"__ignoreMap":28},[33,117798,117799,117801,117803,117805,117807,117809,117811],{"class":35,"line":36},[33,117800,4690],{"class":63},[33,117802,103140],{"class":59},[33,117804,27699],{"class":63},[33,117806,34091],{"class":39},[33,117808,109],{"class":59},[33,117810,32474],{"class":39},[33,117812,116392],{"class":59},[33,117814,117815,117818,117820,117822,117824],{"class":35,"line":43},[33,117816,117817],{"class":59},"    mujoco.mj_step(",[33,117819,32474],{"class":39},[33,117821,116218],{"class":59},[33,117823,32474],{"class":39},[33,117825,116223],{"class":59},[19,117827,117828,117829,117832,117833,117835,117836,1628],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[30,117830,117831],{},"frame_skip=5","，所以外部调用一次 ",[30,117834,115514],{},"，内部实际执行 5 次 ",[30,117837,102854],{},[23,117839,117841],{"className":25,"code":117840,"language":27,"meta":28,"style":28},"self.steps += 1\n",[30,117842,117843],{"__ignoreMap":28},[33,117844,117845,117847,117849,117851],{"class":35,"line":36},[33,117846,32474],{"class":39},[33,117848,115343],{"class":59},[33,117850,11136],{"class":63},[33,117852,1434],{"class":39},[19,117854,117855],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[23,117857,117859],{"className":25,"code":117858,"language":27,"meta":28,"style":28},"obs = self._get_obs()\nreward = self._get_reward()\n",[30,117860,117861,117871],{"__ignoreMap":28},[33,117862,117863,117865,117867,117869],{"class":35,"line":36},[33,117864,112491],{"class":59},[33,117866,64],{"class":63},[33,117868,40520],{"class":39},[33,117870,116434],{"class":59},[33,117872,117873,117875,117877,117879],{"class":35,"line":43},[33,117874,112642],{"class":59},[33,117876,64],{"class":63},[33,117878,40520],{"class":39},[33,117880,116445],{"class":59},[19,117882,117883],{},"计算新的观测和奖励。",[23,117885,117887],{"className":25,"code":117886,"language":27,"meta":28,"style":28},"dist = float(np.linalg.norm(tip - target))\n",[30,117888,117889],{"__ignoreMap":28},[33,117890,117891,117893,117895,117897,117899,117901],{"class":35,"line":36},[33,117892,113233],{"class":59},[33,117894,64],{"class":63},[33,117896,1201],{"class":39},[33,117898,116488],{"class":59},[33,117900,2349],{"class":63},[33,117902,116493],{"class":59},[19,117904,117905],{},"计算末端到目标的距离，并转换成 Python float。",[23,117907,117908],{"className":25,"code":115314,"language":27,"meta":28,"style":28},[30,117909,117910,117922],{"__ignoreMap":28},[33,117911,117912,117914,117916,117918,117920],{"class":35,"line":36},[33,117913,115321],{"class":59},[33,117915,64],{"class":63},[33,117917,115326],{"class":59},[33,117919,2726],{"class":63},[33,117921,115331],{"class":39},[33,117923,117924,117926,117928,117930,117932,117934,117936],{"class":35,"line":43},[33,117925,115336],{"class":59},[33,117927,64],{"class":63},[33,117929,40520],{"class":39},[33,117931,115343],{"class":59},[33,117933,78],{"class":63},[33,117935,40520],{"class":39},[33,117937,115350],{"class":59},[19,117939,117940],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[23,117942,117944],{"className":25,"code":117943,"language":27,"meta":28,"style":28},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[30,117945,117946,117959],{"__ignoreMap":28},[33,117947,117948,117951,117953,117955,117957],{"class":35,"line":36},[33,117949,117950],{"class":59},"info ",[33,117952,64],{"class":63},[33,117954,6109],{"class":59},[33,117956,116539],{"class":117},[33,117958,116542],{"class":59},[33,117960,117961,117963],{"class":35,"line":43},[33,117962,18701],{"class":63},[33,117964,116549],{"class":59},[19,117966,117967,117970],{},[30,117968,117969],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[23,117972,117974],{"className":25,"code":117973,"language":27,"meta":28,"style":28},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[30,117975,117976,117985],{"__ignoreMap":28},[33,117977,117978,117981,117983],{"class":35,"line":36},[33,117979,117980],{"class":59},"env ",[33,117982,64],{"class":63},[33,117984,116579],{"class":59},[33,117986,117987,117989,117991,117993,117995,117997,117999],{"class":35,"line":43},[33,117988,115037],{"class":59},[33,117990,64],{"class":63},[33,117992,116589],{"class":59},[33,117994,116203],{"class":6877},[33,117996,64],{"class":63},[33,117998,2010],{"class":39},[33,118000,157],{"class":59},[19,118002,118003,118004,118007],{},"创建环境并重置。",[30,118005,118006],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[23,118009,118011],{"className":25,"code":118010,"language":27,"meta":28,"style":28},"action = env.action_space.sample()\n",[30,118012,118013],{"__ignoreMap":28},[33,118014,118015,118017,118019],{"class":35,"line":36},[33,118016,109080],{"class":59},[33,118018,64],{"class":63},[33,118020,116658],{"class":59},[19,118022,118023],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118025,103954],{"id":103953},[19,118027,107122],{},[23,118029,118032],{"className":118030,"code":118031,"language":6848,"meta":28},[6846],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[30,118033,118031],{"__ignoreMap":28},[19,118035,118036],{},"这个环境已经具备强化学习环境的基本结构。",[19,118038,118039],{},"主函数里使用随机动作：",[23,118041,118042],{"className":25,"code":118010,"language":27,"meta":28,"style":28},[30,118043,118044],{"__ignoreMap":28},[33,118045,118046,118048,118050],{"class":35,"line":36},[33,118047,109080],{"class":59},[33,118049,64],{"class":63},[33,118051,116658],{"class":59},[19,118053,118054],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118056,103986],{"id":103985},[162,118058,118059,118062,118068,118077,118086,118095,118101],{},[165,118060,118061],{},"运行程序。",[165,118063,118064,118065,1628],{},"确认 ",[30,118066,118067],{},"obs.shape == (10,)",[165,118069,112818,118070,118073,118074,1628],{},[30,118071,118072],{},"env.action_space","，应类似 ",[30,118075,118076],{},"Box(-1.0, 1.0, (2,), float32)",[165,118078,107223,118079,118082,118083,1628],{},[30,118080,118081],{},"self.max_steps = 10","，确认环境会更快 ",[30,118084,118085],{},"truncated=True",[165,118087,104049,118088,104052,118091,118094],{},[30,118089,118090],{},"terminated = dist \u003C 0.05",[30,118092,118093],{},"dist \u003C 0.2","，观察是否更容易结束。",[165,118096,104049,118097,118100],{},[30,118098,118099],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[165,118102,898,118103,118105,118106,118109],{},[30,118104,117969],{}," 里加入 ",[30,118107,118108],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118111,104091],{"id":104090},[633,118113,118115],{"id":118114},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118117,118118,118119,118121],{},"Gymnasium 的 ",[30,118120,108772],{}," 返回 5 个值:",[23,118123,118125],{"className":25,"code":118124,"language":27,"meta":28,"style":28},"obs, reward, terminated, truncated, info\n",[30,118126,118127],{"__ignoreMap":28},[33,118128,118129],{"class":35,"line":36},[33,118130,118124],{"class":59},[19,118132,118133],{},"不是旧 Gym 的 4 个值。",[633,118135,118137,118140],{"id":118136},"datactrl-action-维度错误",[30,118138,118139],{},"data.ctrl[:] = action"," 维度错误",[19,118142,104161],{},[23,118144,118146],{"className":25,"code":118145,"language":27,"meta":28,"style":28},"print(self.model.nu)\nprint(action.shape)\n",[30,118147,118148,118159],{"__ignoreMap":28},[33,118149,118150,118152,118154,118156],{"class":35,"line":36},[33,118151,72],{"class":39},[33,118153,109],{"class":59},[33,118155,32474],{"class":39},[33,118157,118158],{"class":59},".model.nu)\n",[33,118160,118161,118163],{"class":35,"line":43},[33,118162,72],{"class":39},[33,118164,118165],{"class":59},"(action.shape)\n",[19,118167,118168],{},"两者必须匹配。",[633,118170,118172],{"id":118171},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118174,104100],{},[23,118176,118178],{"className":25,"code":118177,"language":27,"meta":28,"style":28},"mujoco.mj_forward(self.model, self.data)\n",[30,118179,118180],{"__ignoreMap":28},[33,118181,118182,118185,118187,118189,118191],{"class":35,"line":36},[33,118183,118184],{"class":59},"mujoco.mj_forward(",[33,118186,32474],{"class":39},[33,118188,116218],{"class":59},[33,118190,32474],{"class":39},[33,118192,116223],{"class":59},[633,118194,118196,118198],{"id":118195},"observation_space-维度和-obs-不一致",[30,118197,115237],{}," 维度和 obs 不一致",[19,118200,104213],{},[23,118202,118204],{"className":25,"code":118203,"language":27,"meta":28,"style":28},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[30,118205,118206,118216,118223],{"__ignoreMap":28},[33,118207,118208,118210,118212,118214],{"class":35,"line":36},[33,118209,112491],{"class":59},[33,118211,64],{"class":63},[33,118213,40520],{"class":39},[33,118215,116434],{"class":59},[33,118217,118218,118220],{"class":35,"line":43},[33,118219,72],{"class":39},[33,118221,118222],{"class":59},"(obs.shape)\n",[33,118224,118225,118227,118229,118231],{"class":35,"line":130},[33,118226,72],{"class":39},[33,118228,109],{"class":59},[33,118230,32474],{"class":39},[33,118232,118233],{"class":59},".observation_space.shape)\n",[19,118235,118236],{},"两者必须一致。本章观测是：",[23,118238,118241],{"className":118239,"code":118240,"language":6848,"meta":28},[6846],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[30,118242,118240],{"__ignoreMap":28},[633,118244,118246],{"id":118245},"action-超过范围","action 超过范围",[19,118248,118249],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[23,118251,118252],{"className":25,"code":117752,"language":27,"meta":28,"style":28},[30,118253,118254],{"__ignoreMap":28},[33,118255,118256,118258,118260,118262,118264,118266,118268],{"class":35,"line":36},[33,118257,109080],{"class":59},[33,118259,64],{"class":63},[33,118261,109085],{"class":59},[33,118263,32474],{"class":39},[33,118265,116355],{"class":59},[33,118267,32474],{"class":39},[33,118269,116360],{"class":59},[19,118271,118272,118273,1628],{},"这能避免无效动作直接写入 ",[30,118274,102715],{},[633,118276,118278],{"id":118277},"忘记返回-info","忘记返回 info",[19,118280,118118,118281,102657,118283,118285],{},[30,118282,71698],{},[30,118284,108772],{}," 都会返回 info：",[23,118287,118288],{"className":25,"code":115030,"language":27,"meta":28,"style":28},[30,118289,118290,118298],{"__ignoreMap":28},[33,118291,118292,118294,118296],{"class":35,"line":36},[33,118293,115037],{"class":59},[33,118295,64],{"class":63},[33,118297,115042],{"class":59},[33,118299,118300,118302,118304],{"class":35,"line":43},[33,118301,115047],{"class":59},[33,118303,64],{"class":63},[33,118305,115052],{"class":59},[19,118307,118308,118309,1628],{},"即使暂时没有额外信息，也返回 ",[30,118310,34106],{},[14,118312,118314],{"id":118313},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118316,118317],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[162,118319,118320,118323,118326,118329,118332,118335],{},[165,118321,118322],{},"更稳定的 reward。",[165,118324,118325],{},"合理的 episode 长度。",[165,118327,118328],{},"可重复的随机目标采样。",[165,118330,118331],{},"render 接口。",[165,118333,118334],{},"环境注册代码。",[165,118336,118337],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118339,118340],{},"如果只是自己写训练循环，最小形式是：",[23,118342,118344],{"className":25,"code":118343,"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,118345,118346,118354,118370,118374,118390,118399,118408,118418],{"__ignoreMap":28},[33,118347,118348,118350,118352],{"class":35,"line":36},[33,118349,117980],{"class":59},[33,118351,64],{"class":63},[33,118353,116579],{"class":59},[33,118355,118356,118358,118360,118362,118364,118366,118368],{"class":35,"line":43},[33,118357,115037],{"class":59},[33,118359,64],{"class":63},[33,118361,116589],{"class":59},[33,118363,116203],{"class":6877},[33,118365,64],{"class":63},[33,118367,2010],{"class":39},[33,118369,157],{"class":59},[33,118371,118372],{"class":35,"line":130},[33,118373,127],{"emptyLinePlaceholder":126},[33,118375,118376,118378,118380,118382,118384,118386,118388],{"class":35,"line":146},[33,118377,4690],{"class":63},[33,118379,103140],{"class":59},[33,118381,27699],{"class":63},[33,118383,34091],{"class":39},[33,118385,109],{"class":59},[33,118387,8070],{"class":39},[33,118389,32437],{"class":59},[33,118391,118392,118395,118397],{"class":35,"line":267},[33,118393,118394],{"class":59},"    action ",[33,118396,64],{"class":63},[33,118398,116658],{"class":59},[33,118400,118401,118404,118406],{"class":35,"line":275},[33,118402,118403],{"class":59},"    obs, reward, terminated, truncated, info ",[33,118405,64],{"class":63},[33,118407,115052],{"class":59},[33,118409,118410,118412,118414,118416],{"class":35,"line":392},[33,118411,567],{"class":63},[33,118413,116724],{"class":59},[33,118415,737],{"class":63},[33,118417,116729],{"class":59},[33,118419,118420,118423,118425],{"class":35,"line":406},[33,118421,118422],{"class":59},"        obs, info ",[33,118424,64],{"class":63},[33,118426,115042],{"class":59},[14,118428,118430],{"id":118429},"_9本章小结","9.本章小结",[19,118432,118433],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[23,118435,118438],{"className":118436,"code":118437,"language":6848,"meta":28},[6846],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[30,118439,118437],{"__ignoreMap":28},[19,118441,118442],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1729,118444,118445],{},"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":43,"depth":43,"links":118447},[118448,118449,118450,118457,118461,118462,118463,118473,118474],{"id":102285,"depth":43,"text":102286},{"id":102408,"depth":43,"text":102409},{"id":102683,"depth":43,"text":102684,"children":118451},[118452,118454,118456],{"id":115261,"depth":130,"text":118453},"terminated 和 truncated 的区别",{"id":115364,"depth":130,"text":118455},"observation_space 和 action_space",{"id":115491,"depth":130,"text":115492},{"id":102891,"depth":43,"text":102892,"children":118458},[118459,118460],{"id":103210,"depth":130,"text":103210},{"id":103346,"depth":130,"text":103346},{"id":103953,"depth":43,"text":103954},{"id":103985,"depth":43,"text":103986},{"id":104090,"depth":43,"text":104091,"children":118464},[118465,118466,118468,118469,118471,118472],{"id":118114,"depth":130,"text":118115},{"id":118136,"depth":130,"text":118467},"data.ctrl[:] = action 维度错误",{"id":118171,"depth":130,"text":118172},{"id":118195,"depth":130,"text":118470},"observation_space 维度和 obs 不一致",{"id":118245,"depth":130,"text":118246},{"id":118277,"depth":130,"text":118278},{"id":118313,"depth":43,"text":118314},{"id":118429,"depth":43,"text":118430},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115014,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118481,"title":118482,"body":118483,"description":118906,"extension":1752,"meta":118907,"navigation":126,"path":118908,"seo":118909,"stem":118910,"__hash__":118911},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118484,"toc":118896},[118485,118489,118492,118495,118515,118521,118527,118537,118540,118543,118563,118566,118570,118573,118579,118582,118596,118599,118602,118676,118679,118685,118688,118711,118714,118764,118767,118773,118776,118779,118782,118801,118804,118810,118813,118816,118819,118839,118842,118845,118848,118893],[10,118486,118488],{"id":118487},"mujoco-学习","MuJoCo 学习",[19,118490,118491],{},"初版",[19,118493,118494],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[162,118496,118497,118500,118503,118512],{},[165,118498,118499],{},"MuJoCo 模型文件在描述什么。",[165,118501,118502],{},"Python 代码怎样读取和推进仿真。",[165,118504,118505,2031,118507,2031,118509,118511],{},[30,118506,105668],{},[30,118508,105998],{},[30,118510,106001],{}," 这些数组为什么重要。",[165,118513,118514],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118516,118517,118518,118520],{},"默认环境为 Fedora 44、Python >= 3.10、",[30,118519,102666],{}," 官方 Python bindings。",[19,118522,118523,118524,118526],{},"注意：本文禁止使用 ",[30,118525,102651],{},"。所有示例均使用：",[23,118528,118529],{"className":25,"code":103216,"language":27,"meta":28,"style":28},[30,118530,118531],{"__ignoreMap":28},[33,118532,118533,118535],{"class":35,"line":36},[33,118534,32045],{"class":63},[33,118536,102940],{"class":59},[14,118538,118539],{"id":118539},"适合谁阅读",[19,118541,118542],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[162,118544,118545,118548,118551,118554],{},[165,118546,118547],{},"没学过 MuJoCo，只会一点 Python。",[165,118549,118550],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[165,118552,118553],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[165,118555,118556,118557,118559,118560,118562],{},"以前接触过 ",[30,118558,102651],{},"，现在想迁移到官方 ",[30,118561,102660],{}," Python bindings。",[19,118564,118565],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118567,118569],{"id":118568},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118571,118572],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[23,118574,118577],{"className":118575,"code":118576,"language":6848,"meta":28},[6846],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[30,118578,118576],{"__ignoreMap":28},[19,118580,118581],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[162,118583,118584,118587,118590,118593],{},[165,118585,118586],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[165,118588,118589],{},"快速测试控制算法，不必一开始就上真实机器人。",[165,118591,118592],{},"生成强化学习环境。",[165,118594,118595],{},"采集状态、动作、图像、奖励等训练数据。",[14,118597,118598],{"id":118598},"学习前的心智模型",[19,118600,118601],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1956,118603,118604,118616],{},[1959,118605,118606],{},[1962,118607,118608,118611,118614],{},[1965,118609,118610],{"align":25391},"部分",[1965,118612,118613],{"align":25391},"负责什么",[1965,118615,22842],{"align":25391},[2003,118617,118618,118629,118641,118653,118665],{},[1962,118619,118620,118623,118626],{},[2008,118621,118622],{"align":25391},"MJCF XML",[2008,118624,118625],{"align":25391},"定义世界和机器人结构",[2008,118627,118628],{"align":25391},"地面、盒子、关节、电机、摄像头",[1962,118630,118631,118635,118638],{},[2008,118632,118633],{"align":25391},[30,118634,102348],{},[2008,118636,118637],{"align":25391},"编译后的静态模型",[2008,118639,118640],{"align":25391},"有几个关节、有几个电机、时间步长是多少",[1962,118642,118643,118647,118650],{},[2008,118644,118645],{"align":25391},[30,118646,102358],{},[2008,118648,118649],{"align":25391},"运行中的动态状态",[2008,118651,118652],{"align":25391},"当前时间、位置、速度、电机输入",[1962,118654,118655,118659,118662],{},[2008,118656,118657],{"align":25391},[30,118658,102854],{},[2008,118660,118661],{"align":25391},"推进一步物理仿真",[2008,118663,118664],{"align":25391},"根据重力、力、碰撞更新状态",[1962,118666,118667,118670,118673],{},[2008,118668,118669],{"align":25391},"Viewer \u002F Renderer",[2008,118671,118672],{"align":25391},"把仿真显示出来",[2008,118674,118675],{"align":25391},"打开窗口或保存图片",[19,118677,118678],{},"一句话总结：",[23,118680,118683],{"className":118681,"code":118682,"language":6848,"meta":28},[6846],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[30,118684,118682],{"__ignoreMap":28},[19,118686,118687],{},"参考来源：",[2822,118689,118690,118697,118704],{},[165,118691,118692,118693],{},"MuJoCo Python 官方文档：",[2057,118694,118695],{"href":118695,"rel":118696},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25520],[165,118698,118699,118700],{},"MuJoCo XML Reference：",[2057,118701,118702],{"href":118702,"rel":118703},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25520],[165,118705,118706,118707],{},"MuJoCo Overview：",[2057,118708,118709],{"href":118709,"rel":118710},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25520],[14,118712,118713],{"id":118713},"章节目录",[162,118715,118716,118722,118728,118734,118740,118746,118752,118758],{},[165,118717,118718],{},[2057,118719,118721],{"href":118720},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[165,118723,118724],{},[2057,118725,118727],{"href":118726},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[165,118729,118730],{},[2057,118731,118733],{"href":118732},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[165,118735,118736],{},[2057,118737,118739],{"href":118738},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[165,118741,118742],{},[2057,118743,118745],{"href":118744},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[165,118747,118748],{},[2057,118749,118751],{"href":118750},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[165,118753,118754],{},[2057,118755,118757],{"href":118756},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[165,118759,118760],{},[2057,118761,118763],{"href":118762},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118765,118766],{"id":118766},"推荐学习路线",[23,118768,118771],{"className":118769,"code":118770,"language":6848,"meta":28},[6846],"环境安装\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,118772,118770],{"__ignoreMap":28},[19,118774,118775],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118777,118778],{"id":118778},"建议的目录结构",[19,118780,118781],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[23,118783,118785],{"className":25477,"code":118784,"language":25479,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[30,118786,118787,118795],{"__ignoreMap":28},[33,118788,118789,118791,118793],{"class":35,"line":36},[33,118790,102905],{"class":3632},[33,118792,30871],{"class":39},[33,118794,102910],{"class":117},[33,118796,118797,118799],{"class":35,"line":43},[33,118798,102915],{"class":39},[33,118800,102910],{"class":117},[19,118802,118803],{},"每一章的代码都单独保存：",[23,118805,118808],{"className":118806,"code":118807,"language":6848,"meta":28},[6846],"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,118809,118807],{"__ignoreMap":28},[19,118811,118812],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118814,118815],{"id":118815},"学习方法",[19,118817,118818],{},"每章建议按这个顺序操作：",[162,118820,118821,118824,118827,118830,118833,118836],{},[165,118822,118823],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[165,118825,118826],{},"复制最小可运行代码，保存成指定文件。",[165,118828,118829],{},"运行代码，确认没有报错。",[165,118831,118832],{},"对照“运行结果说明”理解输出。",[165,118834,118835],{},"做“验证步骤”，主动改一两个参数。",[165,118837,118838],{},"遇到报错先看“常见错误与解决方案”。",[19,118840,118841],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118843,118844],{"id":118844},"全局排错顺序",[19,118846,118847],{},"遇到问题时，按下面顺序查：",[162,118849,118850,118856,118862,118867,118870,118873,118880,118890],{},[165,118851,118852,118853],{},"Python 环境是否激活：",[30,118854,118855],{},"which python",[165,118857,118858,118859],{},"MuJoCo 是否能导入：",[30,118860,118861],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[165,118863,118864,118865],{},"是否误装了 ",[30,118866,102651],{},[165,118868,118869],{},"XML 标签是否闭合、属性是否拼写正确",[165,118871,118872],{},"actuator 引用的 joint 名字是否存在",[165,118874,118875,118877,118878],{},[30,118876,102715],{}," 的长度是否等于 ",[30,118879,103796],{},[165,118881,107223,118882,84179,118884,118886,118887],{},[30,118883,105668],{},[30,118885,105998],{}," 后是否调用了 ",[30,118888,118889],{},"mujoco.mj_forward",[165,118891,118892],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1729,118894,118895],{},"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":43,"depth":43,"links":118897},[118898,118899,118900,118901,118902,118903,118904,118905],{"id":118539,"depth":43,"text":118539},{"id":118568,"depth":43,"text":118569},{"id":118598,"depth":43,"text":118598},{"id":118713,"depth":43,"text":118713},{"id":118766,"depth":43,"text":118766},{"id":118778,"depth":43,"text":118778},{"id":118815,"depth":43,"text":118815},{"id":118844,"depth":43,"text":118844},"仿真搭建。",{"category":25033},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118482,"description":118906},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118913,"title":118914,"body":118915,"description":1751,"extension":1752,"meta":119370,"navigation":126,"path":119371,"seo":119372,"stem":119373,"__hash__":119374},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118916,"toc":119368},[118917,118920,118923,118929,119365],[10,118918,118914],{"id":118919},"_1-最常用的基本操作更新",[19,118921,118922],{},"装linux系统教程：",[19,118924,118925],{},[2057,118926,118927],{"href":118927,"rel":118928},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25520],[23,118930,118934],{"className":118931,"code":118932,"language":118933,"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,118935,118936,118941,118946,118955,118960,118969,118974,118994,118999,119010,119015,119024,119029,119057,119062,119081,119086,119105,119109,119114,119130,119134,119139,119169,119173,119178,119194,119198,119203,119218,119222,119227,119243,119247,119252,119264,119276,119280,119285,119302,119306,119311,119329,119333,119338,119347,119351,119356],{"__ignoreMap":28},[33,118937,118938],{"class":35,"line":36},[33,118939,118940],{"class":87},"#更新相关的知识\n",[33,118942,118943],{"class":35,"line":43},[33,118944,118945],{"class":87},"# 更新软件包列表（从服务器获取最新软件信息）\n",[33,118947,118948,118950,118953],{"class":35,"line":130},[33,118949,26232],{"class":3632},[33,118951,118952],{"class":117}," apt",[33,118954,27898],{"class":117},[33,118956,118957],{"class":35,"line":146},[33,118958,118959],{"class":87},"# 升级所有可更新的软件包（不删除旧包）\n",[33,118961,118962,118964,118966],{"class":35,"line":267},[33,118963,26232],{"class":3632},[33,118965,118952],{"class":117},[33,118967,118968],{"class":117}," upgrade\n",[33,118970,118971],{"class":35,"line":275},[33,118972,118973],{"class":87},"#更新和升级软件包\n",[33,118975,118976,118978,118980,118983,118985,118987,118989,118992],{"class":35,"line":392},[33,118977,26232],{"class":3632},[33,118979,118952],{"class":117},[33,118981,118982],{"class":117}," update",[33,118984,27846],{"class":59},[33,118986,26232],{"class":3632},[33,118988,118952],{"class":117},[33,118990,118991],{"class":117}," upgrade",[33,118993,102620],{"class":39},[33,118995,118996],{"class":35,"line":406},[33,118997,118998],{"class":87},"#列出可更新的软件包及版本信息\n",[33,119000,119001,119004,119007],{"class":35,"line":418},[33,119002,119003],{"class":3632},"apt",[33,119005,119006],{"class":117}," list",[33,119008,119009],{"class":39}," --upgradable\n",[33,119011,119012],{"class":35,"line":425},[33,119013,119014],{"class":87},"#彻底升级（处理依赖关系，可能删除旧包）\n",[33,119016,119017,119019,119021],{"class":35,"line":1147},[33,119018,26232],{"class":3632},[33,119020,118952],{"class":117},[33,119022,119023],{"class":117}," full-upgrade\n",[33,119025,119026],{"class":35,"line":1329},[33,119027,119028],{"class":87},"#设置指定版本\n",[33,119030,119031,119033,119035,119037,119039,119042,119044,119046,119048,119050,119053,119055],{"class":35,"line":1341},[33,119032,26232],{"class":3632},[33,119034,118952],{"class":117},[33,119036,25489],{"class":117},[33,119038,30557],{"class":63},[33,119040,119041],{"class":117},"package_nam",[33,119043,1894],{"class":59},[33,119045,2775],{"class":63},[33,119047,64],{"class":117},[33,119049,2726],{"class":63},[33,119051,119052],{"class":117},"version_numbe",[33,119054,2487],{"class":59},[33,119056,52952],{"class":63},[33,119058,119059],{"class":35,"line":1348},[33,119060,119061],{"class":87},"#只安装软件包不升级\n",[33,119063,119064,119066,119068,119070,119072,119074,119076,119078],{"class":35,"line":1529},[33,119065,26232],{"class":3632},[33,119067,118952],{"class":117},[33,119069,25489],{"class":117},[33,119071,30557],{"class":63},[33,119073,119041],{"class":117},[33,119075,1894],{"class":59},[33,119077,2775],{"class":63},[33,119079,119080],{"class":39}," --no-upgrade\n",[33,119082,119083],{"class":35,"line":1546},[33,119084,119085],{"class":87},"#只升级，不存在就不安装\n",[33,119087,119088,119090,119092,119094,119096,119098,119100,119102],{"class":35,"line":1551},[33,119089,26232],{"class":3632},[33,119091,118952],{"class":117},[33,119093,25489],{"class":117},[33,119095,30557],{"class":63},[33,119097,119041],{"class":117},[33,119099,1894],{"class":59},[33,119101,2775],{"class":63},[33,119103,119104],{"class":39}," --only-upgrade\n",[33,119106,119107],{"class":35,"line":1566},[33,119108,127],{"emptyLinePlaceholder":126},[33,119110,119111],{"class":35,"line":1578},[33,119112,119113],{"class":87},"#安装指定的软件命令\n",[33,119115,119116,119118,119120,119122,119124,119126,119128],{"class":35,"line":1583},[33,119117,26232],{"class":3632},[33,119119,118952],{"class":117},[33,119121,25489],{"class":117},[33,119123,30557],{"class":63},[33,119125,119041],{"class":117},[33,119127,1894],{"class":59},[33,119129,52952],{"class":63},[33,119131,119132],{"class":35,"line":3369},[33,119133,127],{"emptyLinePlaceholder":126},[33,119135,119136],{"class":35,"line":3396},[33,119137,119138],{"class":87},"#安装多个软件包\n",[33,119140,119141,119143,119145,119147,119149,119152,119155,119157,119159,119162,119164,119166],{"class":35,"line":3401},[33,119142,26232],{"class":3632},[33,119144,118952],{"class":117},[33,119146,25489],{"class":117},[33,119148,30557],{"class":63},[33,119150,119151],{"class":117},"package_",[33,119153,119154],{"class":63},"1>",[33,119156,30557],{"class":63},[33,119158,119151],{"class":117},[33,119160,119161],{"class":63},"2>",[33,119163,30557],{"class":63},[33,119165,119151],{"class":117},[33,119167,119168],{"class":63},"3>\n",[33,119170,119171],{"class":35,"line":3418},[33,119172,127],{"emptyLinePlaceholder":126},[33,119174,119175],{"class":35,"line":3423},[33,119176,119177],{"class":87},"#更新指定的软件命令\n",[33,119179,119180,119182,119184,119186,119188,119190,119192],{"class":35,"line":3428},[33,119181,26232],{"class":3632},[33,119183,118952],{"class":117},[33,119185,118982],{"class":117},[33,119187,30557],{"class":63},[33,119189,119041],{"class":117},[33,119191,1894],{"class":59},[33,119193,52952],{"class":63},[33,119195,119196],{"class":35,"line":3433},[33,119197,127],{"emptyLinePlaceholder":126},[33,119199,119200],{"class":35,"line":3447},[33,119201,119202],{"class":87},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[33,119204,119205,119207,119210,119212,119214,119216],{"class":35,"line":3452},[33,119206,119003],{"class":3632},[33,119208,119209],{"class":117}," show",[33,119211,30557],{"class":63},[33,119213,119041],{"class":117},[33,119215,1894],{"class":59},[33,119217,52952],{"class":63},[33,119219,119220],{"class":35,"line":4243},[33,119221,127],{"emptyLinePlaceholder":126},[33,119223,119224],{"class":35,"line":4257},[33,119225,119226],{"class":87},"#删除软件包命令\n",[33,119228,119229,119231,119233,119235,119237,119239,119241],{"class":35,"line":4265},[33,119230,26232],{"class":3632},[33,119232,118952],{"class":117},[33,119234,27735],{"class":117},[33,119236,30557],{"class":63},[33,119238,119041],{"class":117},[33,119240,1894],{"class":59},[33,119242,52952],{"class":63},[33,119244,119245],{"class":35,"line":4270},[33,119246,127],{"emptyLinePlaceholder":126},[33,119248,119249],{"class":35,"line":4276},[33,119250,119251],{"class":87},"# 清理旧版本和缓存（释放磁盘空间）\n",[33,119253,119254,119256,119258,119261],{"class":35,"line":4282},[33,119255,26232],{"class":3632},[33,119257,118952],{"class":117},[33,119259,119260],{"class":117}," autoremove",[33,119262,119263],{"class":87},"  # 删除不再需要的依赖和库文件\n",[33,119265,119266,119268,119270,119273],{"class":35,"line":4287},[33,119267,26232],{"class":3632},[33,119269,118952],{"class":117},[33,119271,119272],{"class":117}," clean",[33,119274,119275],{"class":87},"       # 清理下载的缓存包\n",[33,119277,119278],{"class":35,"line":9608},[33,119279,127],{"emptyLinePlaceholder":126},[33,119281,119282],{"class":35,"line":9632},[33,119283,119284],{"class":87},"#移除软件包及配置文件\n",[33,119286,119287,119289,119291,119294,119296,119298,119300],{"class":35,"line":9637},[33,119288,26232],{"class":3632},[33,119290,118952],{"class":117},[33,119292,119293],{"class":117}," purge",[33,119295,30557],{"class":63},[33,119297,119041],{"class":117},[33,119299,1894],{"class":59},[33,119301,52952],{"class":63},[33,119303,119304],{"class":35,"line":9643},[33,119305,127],{"emptyLinePlaceholder":126},[33,119307,119308],{"class":35,"line":9670},[33,119309,119310],{"class":87},"#查找软件包命令\n",[33,119312,119313,119315,119317,119320,119322,119325,119327],{"class":35,"line":9675},[33,119314,26232],{"class":3632},[33,119316,118952],{"class":117},[33,119318,119319],{"class":117}," search",[33,119321,30557],{"class":63},[33,119323,119324],{"class":117},"keywor",[33,119326,2132],{"class":59},[33,119328,52952],{"class":63},[33,119330,119331],{"class":35,"line":9681},[33,119332,127],{"emptyLinePlaceholder":126},[33,119334,119335],{"class":35,"line":9693},[33,119336,119337],{"class":87},"#列出所有已安装的包\n",[33,119339,119340,119342,119344],{"class":35,"line":9705},[33,119341,119003],{"class":3632},[33,119343,119006],{"class":117},[33,119345,119346],{"class":39}," --installed\n",[33,119348,119349],{"class":35,"line":9717},[33,119350,127],{"emptyLinePlaceholder":126},[33,119352,119353],{"class":35,"line":11375},[33,119354,119355],{"class":87},"#列出所有已安装的包的版本信息\n",[33,119357,119358,119360,119362],{"class":35,"line":11400},[33,119359,119003],{"class":3632},[33,119361,119006],{"class":117},[33,119363,119364],{"class":39}," --all-versions\n",[1729,119366,119367],{},"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":43,"depth":43,"links":119369},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118914,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119376,"title":119377,"body":119378,"description":1751,"extension":1752,"meta":120119,"navigation":126,"path":120120,"seo":120121,"stem":120122,"__hash__":120123},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119379,"toc":120106},[119380,119383,119387,119390,119396,119400,119404,119410,119415,119420,119425,119430,119435,119438,119441,119444,119447,119451,119454,119459,119462,119467,119470,119475,119482,119485,119488,119491,119494,119497,119508,119512,119516,119521,119526,119530,119535,119539,119544,119548,119552,119557,119560,119605,119610,119614,119618,119623,119629,119634,119644,119649,119659,119664,119669,119696,119700,119703,119708,119711,119736,119740,119745,119748,119753,119758,119778,119783,119786,119801,119805,119858,119861,119866,119870,119873,119888,119891,119894,119899,119903,119907,119910,119914,119918,119921,119926,119931,119935,119942,119950,119953,119960,119965,119970,119973,119978,119985,119990,119997,120001,120003,120008,120012,120015,120018,120023,120026,120031,120034,120039,120044,120049,120053,120058,120062,120103],[10,119381,119377],{"id":119382},"_2-linux装机教程",[14,119384,119386],{"id":119385},"_21-实体机","2.1 实体机",[19,119388,119389],{},"使用清华源：（Ubuntu24.04）",[19,119391,119392],{},[2057,119393,119394],{"href":119394,"rel":119395},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25520],[14,119397,119399],{"id":119398},"_22-普通虚拟机","2.2 普通虚拟机",[633,119401,119403],{"id":119402},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119405,119406],{},[2057,119407,119408],{"href":119408,"rel":119409},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25520],[19,119411,119412],{},[3145,119413],{"alt":28,"src":119414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119416,119417],{},[3145,119418],{"alt":28,"src":119419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119421,119422],{},[3145,119423],{"alt":28,"src":119424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119426,119427],{},[3145,119428],{"alt":28,"src":119429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119431,119432],{},[3145,119433],{"alt":28,"src":119434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119436,119437],{},"内存4G（4096MB）；",[19,119439,119440],{},"CPU给4个核；",[19,119442,119443],{},"硬盘动态分配60G；",[19,119445,119446],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[633,119448,119450],{"id":119449},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119452,119453],{},"按照1.1的步骤下载Ubuntu",[19,119455,119456],{},[3145,119457],{"alt":28,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119460,119461],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119463,119464],{},[3145,119465],{"alt":28,"src":119466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119468,119469],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119471,119472],{},[3145,119473],{"alt":28,"src":119474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119476,119477,119478,119481],{},"选择“正常安装”(找不到都用Alt+F7)， ",[1968,119479,119480],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119483,119484],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119486,119487],{},"将改动写入磁盘吗 继续",[19,119489,119490],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119492,119493],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119495,119496],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119498,119499,119500,119503,119504,119507],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[1968,119501,119502],{},"除了"," 选不发送系统信息与不升级之外， ",[1968,119505,119506],{},"其它"," 都跳过或前进）",[633,119509,119511],{"id":119510},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23653,119513,119515],{"id":119514},"_2231-全屏","2.2.3.1 全屏",[19,119517,119518],{},[3145,119519],{"alt":28,"src":119520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119522,119523],{},[3145,119524],{"alt":28,"src":119525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23653,119527,119529],{"id":119528},"_2232-文件交换","2.2.3.2 文件交换",[19,119531,119532],{},[3145,119533],{"alt":28,"src":119534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23653,119536,119538],{"id":119537},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119540,119541],{},[3145,119542],{"alt":28,"src":119543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119545,119547],{"id":119546},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[633,119549,119551],{"id":119550},"_231-简介与优缺点","2.3.1 简介与优缺点",[162,119553,119554],{},[165,119555,119556],{},"什么情况下推荐？",[19,119558,119559],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[162,119561,119562],{"start":43},[165,119563,119564,119565],{},"优缺点：",[162,119566,119567,119597],{},[165,119568,119569,119570],{},"优点：",[162,119571,119572,119575,119582,119585,119588,119591,119594],{},[165,119573,119574],{},"WSL2是最好的Linux发行版;(bushi)",[165,119576,119577,119578,119581],{},"性能损耗极低。且比在Windows上跑深度性能 ",[1968,119579,119580],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[165,119583,119584],{},"非常方便调用USB设备，可以USB直通;",[165,119586,119587],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[165,119589,119590],{},"非常方便Win与WSL2互相传文件等协同操作;",[165,119592,119593],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[165,119595,119596],{},"非常方便使用Windows的VScode远程开发;",[165,119598,119599,119600],{},"缺点：",[162,119601,119602],{},[165,119603,119604],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119606,119607],{},[3145,119608],{"alt":28,"src":119609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[633,119611,119613],{"id":119612},"_232-安装教程","2.3.2 安装教程",[23653,119615,119617],{"id":119616},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[162,119619,119620],{},[165,119621,119622],{},"方法一(图形界面)",[19,119624,119625,119626,26274],{},"用Win+R输入",[30,119627,119628],{},"appwiz.cpl",[19,119630,119631],{},[3145,119632],{"alt":28,"src":119633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119635,119636,119637,119640,119641,28129],{},"点击OK进入 ",[1968,119638,119639],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[1968,119642,119643],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119645,119646],{},[3145,119647],{"alt":28,"src":119648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119650,119651,119652,102657,119655,119658],{},"选择 ",[1968,119653,119654],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[1968,119656,119657],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119660,119661],{},[3145,119662],{"alt":28,"src":119663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[162,119665,119666],{"start":43},[165,119667,119668],{},"方法二(命令行)",[23,119670,119674],{"className":119671,"code":119672,"language":119673,"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,119675,119676,119681,119686,119691],{"__ignoreMap":28},[33,119677,119678],{"class":35,"line":36},[33,119679,119680],{},"# 开启 Linux 子系统\n",[33,119682,119683],{"class":35,"line":43},[33,119684,119685],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[33,119687,119688],{"class":35,"line":130},[33,119689,119690],{},"# 开启虚拟机平台\n",[33,119692,119693],{"class":35,"line":146},[33,119694,119695],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23653,119697,119699],{"id":119698},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119701,119702],{},"用管理员权限打开powershell",[19,119704,119705],{},[3145,119706],{"alt":28,"src":119707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119709,119710],{},"升级WSL并设置默认版本为WSL2",[23,119712,119714],{"className":119671,"code":119713,"language":119673,"meta":28,"style":28},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[30,119715,119716,119721,119726,119731],{"__ignoreMap":28},[33,119717,119718],{"class":35,"line":36},[33,119719,119720],{},"# 更新 wsl\n",[33,119722,119723],{"class":35,"line":43},[33,119724,119725],{},"wsl --update\n",[33,119727,119728],{"class":35,"line":130},[33,119729,119730],{},"# 将 wsl 版本设置为 wsl2\n",[33,119732,119733],{"class":35,"line":146},[33,119734,119735],{},"wsl --set-default-version 2\n",[23653,119737,119739],{"id":119738},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[162,119741,119742],{},[165,119743,119744],{},"方式一(商店下载)",[19,119746,119747],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119749,119750],{},[3145,119751],{"alt":28,"src":119752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[162,119754,119755],{"start":43},[165,119756,119757],{},"方式二(命令行安装)",[23,119759,119761],{"className":119671,"code":119760,"language":119673,"meta":28,"style":28},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[30,119762,119763,119768,119773],{"__ignoreMap":28},[33,119764,119765],{"class":35,"line":36},[33,119766,119767],{},"# 列出可安装的 Linux 版本\n",[33,119769,119770],{"class":35,"line":43},[33,119771,119772],{},"#（需要科学手段）\n",[33,119774,119775],{"class":35,"line":130},[33,119776,119777],{},"wsl --list --online\n",[19,119779,119780],{},[3145,119781],{"alt":28,"src":119782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119784,119785],{},"选择对应发行版并安装",[23,119787,119789],{"className":119671,"code":119788,"language":119673,"meta":28,"style":28},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[30,119790,119791,119796],{"__ignoreMap":28},[33,119792,119793],{"class":35,"line":36},[33,119794,119795],{},"# Ubuntu安装完毕后需要重启系统\n",[33,119797,119798],{"class":35,"line":43},[33,119799,119800],{},"wsl --install -d Ubuntu-24.04\n",[23653,119802,119804],{"id":119803},"_2324-查看系统状态","2.3.2.4 查看系统状态",[23,119806,119808],{"className":119671,"code":119807,"language":119673,"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,119809,119810,119815,119820,119825,119830,119834,119838,119843,119848,119853],{"__ignoreMap":28},[33,119811,119812],{"class":35,"line":36},[33,119813,119814],{},"# 查看 wsl\n",[33,119816,119817],{"class":35,"line":43},[33,119818,119819],{},"wsl -l\n",[33,119821,119822],{"class":35,"line":130},[33,119823,119824],{},"# 查看 wsl 运行版本或模式\n",[33,119826,119827],{"class":35,"line":146},[33,119828,119829],{},"wsl -l -v\n",[33,119831,119832],{"class":35,"line":267},[33,119833,127],{"emptyLinePlaceholder":126},[33,119835,119836],{"class":35,"line":275},[33,119837,127],{"emptyLinePlaceholder":126},[33,119839,119840],{"class":35,"line":392},[33,119841,119842],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[33,119844,119845],{"class":35,"line":406},[33,119846,119847],{},"wsl --set-version \u003Cdistro> 2\n",[33,119849,119850],{"class":35,"line":418},[33,119851,119852],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[33,119854,119855],{"class":35,"line":425},[33,119856,119857],{},"wsl --unregister \u003Cdistro>\n",[19,119859,119860],{},"输出Version为2即正常",[19,119862,119863],{},[3145,119864],{"alt":28,"src":119865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23653,119867,119869],{"id":119868},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119871,119872],{},"直接在Powershell里输入wsl命令进入子系统",[23,119874,119876],{"className":119671,"code":119875,"language":119673,"meta":28,"style":28},"# 进入子系统\nwsl\n",[30,119877,119878,119883],{"__ignoreMap":28},[33,119879,119880],{"class":35,"line":36},[33,119881,119882],{},"# 进入子系统\n",[33,119884,119885],{"class":35,"line":43},[33,119886,119887],{},"wsl\n",[19,119889,119890],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119892,119893],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119895,119896],{},[3145,119897],{"alt":28,"src":119898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[633,119900,119902],{"id":119901},"_233-配置各种环境","2.3.3 配置各种环境",[23653,119904,119906],{"id":119905},"_2331-换源","2.3.3.1 换源",[19,119908,119909],{},"(同实体机LINUX，往下找教程)",[23653,119911,119913],{"id":119912},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24565,119915,119917],{"id":119916},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119919,119920],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119922,119923],{},[3145,119924],{"alt":28,"src":119925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119927,119928],{},[3145,119929],{"alt":28,"src":119930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24565,119932,119934],{"id":119933},"_23322-cuda","2.3.3.2.2 CUDA",[19,119936,119937,119938],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2057,119939,119940],{"href":119940,"rel":119941},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25520],[19,119943,119944,119947],{},[3145,119945],{"alt":28,"src":119946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3145,119948],{"alt":28,"src":119949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119951,119952],{},"在下方的网站，选择合适的版本。",[19,119954,119955,119956],{},"WSL2 专属 CUDA 指南：",[2057,119957,119958],{"href":119958,"rel":119959},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25520],[19,119961,119962],{},[1968,119963,119964],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119966,119967],{},[3145,119968],{"alt":28,"src":119969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119971,119972],{},"挨行敲一遍",[19,119974,119975],{},[3145,119976],{"alt":28,"src":119977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119979,119980,119981,119984],{},"敲完后，输入",[30,119982,119983],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119986,119987],{},[3145,119988],{"alt":28,"src":119989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119991,119992,119993,119996],{},"（请详看下方教程的",[1968,119994,119995],{},"安装CUDA的配置环境来看","如何配置环境）",[24565,119998,120000],{"id":119999},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120002,119909],{},[19,120004,120005],{},[3145,120006],{"alt":28,"src":120007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23653,120009,120011],{"id":120010},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120013,120014],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120016,120017],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120019,120020],{},[3145,120021],{"alt":28,"src":120022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120024,120025],{},"连接WSL2",[19,120027,120028],{},[3145,120029],{"alt":28,"src":120030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120032,120033],{},"远程开发成功。",[19,120035,120036],{},[3145,120037],{"alt":28,"src":120038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120040,120041],{},[3145,120042],{"alt":28,"src":120043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120045,120046],{},[3145,120047],{"alt":28,"src":120048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23653,120050,120052],{"id":120051},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120054,120055],{},[3145,120056],{"alt":28,"src":120057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23653,120059,120061],{"id":120060},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[23,120063,120065],{"className":118931,"code":120064,"language":118933,"meta":28,"style":28},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[30,120066,120067,120075,120083,120094,120098],{"__ignoreMap":28},[33,120068,120069,120071,120073],{"class":35,"line":36},[33,120070,26232],{"class":3632},[33,120072,118952],{"class":117},[33,120074,27898],{"class":117},[33,120076,120077,120079,120081],{"class":35,"line":43},[33,120078,26232],{"class":3632},[33,120080,118952],{"class":117},[33,120082,118968],{"class":117},[33,120084,120085,120087,120089,120091],{"class":35,"line":130},[33,120086,26232],{"class":3632},[33,120088,118952],{"class":117},[33,120090,25489],{"class":117},[33,120092,120093],{"class":117}," mesa-utils\n",[33,120095,120096],{"class":35,"line":146},[33,120097,127],{"emptyLinePlaceholder":126},[33,120099,120100],{"class":35,"line":267},[33,120101,120102],{"class":87},"#然后重启wsl2即可\n",[1729,120104,120105],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":43,"depth":43,"links":120107},[120108,120109,120114],{"id":119385,"depth":43,"text":119386},{"id":119398,"depth":43,"text":119399,"children":120110},[120111,120112,120113],{"id":119402,"depth":130,"text":119403},{"id":119449,"depth":130,"text":119450},{"id":119510,"depth":130,"text":119511},{"id":119546,"depth":43,"text":119547,"children":120115},[120116,120117,120118],{"id":119550,"depth":130,"text":119551},{"id":119612,"depth":130,"text":119613},{"id":119901,"depth":130,"text":119902},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119377,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120125,"title":120126,"body":120127,"description":1751,"extension":1752,"meta":123062,"navigation":126,"path":123063,"seo":123064,"stem":123065,"__hash__":123066},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120128,"toc":123034},[120129,120132,120136,120142,120146,120152,120156,120344,120347,120352,120356,120360,120363,120366,120372,120377,120380,120383,120388,120421,120426,120430,120507,120510,120515,120519,120522,120561,120564,120573,120591,120596,120603,120720,120725,120728,120755,120760,120764,120773,120823,120830,120834,120837,120851,120858,120892,120897,120901,120924,120927,120932,120936,120939,120942,120945,120987,120991,120994,120997,121038,121042,121046,121049,121054,121059,121062,121085,121088,121096,121101,121104,121109,121114,121117,121122,121126,121131,121154,121159,121221,121229,121234,121239,121242,121247,121250,121255,121260,121278,121283,121289,121294,121308,121312,121315,121318,121321,121364,121367,121372,121473,121476,121481,121485,121489,121526,121530,121534,121538,121584,121588,121633,121637,121644,121652,121707,121710,121787,121790,121813,121817,121820,121825,121830,121838,121841,121846,121851,121856,121859,121864,121873,121876,121881,121884,121955,121960,121963,121968,121971,121976,121979,121984,121987,121992,121997,122000,122074,122077,122090,122095,122098,122112,122115,122144,122149,122178,122181,122186,122190,122195,122204,122207,122212,122215,122220,122223,122226,122231,122234,122239,122244,122247,122252,122255,122380,122385,122415,122418,122423,122428,122445,122448,122491,122494,122521,122526,122539,122682,122686,122691,122705,122708,122759,122762,122792,122795,122811,122816,122830,122833,122900,122905,122914,122919,122922,122934,122939,122946,122970,122973,122978,122981,123000,123005,123012,123024,123031],[10,120130,120126],{"id":120131},"_3-安装必备配置",[14,120133,120135],{"id":120134},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[23,120137,120140],{"className":120138,"code":120139,"language":6848},[6846],"  打开下方网站（注意，该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,120141,120139],{"__ignoreMap":28},[633,120143,120145],{"id":120144},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[23,120147,120150],{"className":120148,"code":120149,"language":6848},[6846],"  输入以下命令\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,120151,120149],{"__ignoreMap":28},[633,120153,120155],{"id":120154},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[23,120157,120161],{"className":120158,"code":120159,"language":120160,"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,120162,120163,120171,120182,120194,120208,120212,120222,120227,120231,120235,120240,120244,120256,120260,120265,120269,120280,120284,120300,120304,120315,120319,120324,120328,120336],{"__ignoreMap":28},[33,120164,120165,120167,120169],{"class":35,"line":36},[33,120166,26232],{"class":3632},[33,120168,118952],{"class":117},[33,120170,27898],{"class":117},[33,120172,120173,120175,120177,120179],{"class":35,"line":43},[33,120174,26232],{"class":3632},[33,120176,118952],{"class":117},[33,120178,25489],{"class":117},[33,120180,120181],{"class":117}," vim\n",[33,120183,120184,120186,120189,120191],{"class":35,"line":130},[33,120185,26232],{"class":3632},[33,120187,120188],{"class":117}," rm",[33,120190,26981],{"class":39},[33,120192,120193],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list\n",[33,120195,120196,120198,120200,120202,120205],{"class":35,"line":146},[33,120197,26232],{"class":3632},[33,120199,120188],{"class":117},[33,120201,26981],{"class":39},[33,120203,120204],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[33,120206,120207],{"class":39},"**\n",[33,120209,120210],{"class":35,"line":267},[33,120211,127],{"emptyLinePlaceholder":126},[33,120213,120214,120216,120219],{"class":35,"line":275},[33,120215,26232],{"class":3632},[33,120217,120218],{"class":117}," vim",[33,120220,120221],{"class":117}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[33,120223,120224],{"class":35,"line":392},[33,120225,120226],{"class":117},"```\n",[33,120228,120229],{"class":35,"line":406},[33,120230,127],{"emptyLinePlaceholder":126},[33,120232,120233],{"class":35,"line":418},[33,120234,127],{"emptyLinePlaceholder":126},[33,120236,120237],{"class":35,"line":425},[33,120238,120239],{"class":3632},"选择好Ubuntu版本后，复制下方的内容。\n",[33,120241,120242],{"class":35,"line":1147},[33,120243,127],{"emptyLinePlaceholder":126},[33,120245,120246,120248,120251,120254],{"class":35,"line":1329},[33,120247,2045],{"class":63},[33,120249,120250],{"class":117},"[](",[33,120252,120253],{"class":3632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[33,120255,157],{"class":117},[33,120257,120258],{"class":35,"line":1341},[33,120259,127],{"emptyLinePlaceholder":126},[33,120261,120262],{"class":35,"line":1348},[33,120263,120264],{"class":3632},"粘贴进去\n",[33,120266,120267],{"class":35,"line":1529},[33,120268,127],{"emptyLinePlaceholder":126},[33,120270,120271,120273,120275,120278],{"class":35,"line":1546},[33,120272,2045],{"class":63},[33,120274,120250],{"class":117},[33,120276,120277],{"class":3632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[33,120279,157],{"class":117},[33,120281,120282],{"class":35,"line":1551},[33,120283,127],{"emptyLinePlaceholder":126},[33,120285,120286,120289,120292,120295,120297],{"class":35,"line":1566},[33,120287,120288],{"class":3632},"按一下ESC，然后英文冒号，输入",[33,120290,120291],{"class":117}," `",[33,120293,120294],{"class":3632},":wq!",[33,120296,2787],{"class":117},[33,120298,120299],{"class":3632},"然后回车\n",[33,120301,120302],{"class":35,"line":1578},[33,120303,127],{"emptyLinePlaceholder":126},[33,120305,120306,120308,120310,120313],{"class":35,"line":1583},[33,120307,2045],{"class":63},[33,120309,120250],{"class":117},[33,120311,120312],{"class":3632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[33,120314,157],{"class":117},[33,120316,120317],{"class":35,"line":3369},[33,120318,127],{"emptyLinePlaceholder":126},[33,120320,120321],{"class":35,"line":3396},[33,120322,120323],{"class":3632},"输入以下命令\n",[33,120325,120326],{"class":35,"line":3401},[33,120327,127],{"emptyLinePlaceholder":126},[33,120329,120330,120333],{"class":35,"line":3418},[33,120331,120332],{"class":117},"```",[33,120334,120335],{"class":3632},"Bash\n",[33,120337,120338,120340,120342],{"class":35,"line":3423},[33,120339,26232],{"class":3632},[33,120341,118952],{"class":117},[33,120343,27898],{"class":117},[19,120345,120346],{},"这里被替换成对应学校则成功",[19,120348,120349],{},[3145,120350],{"alt":28,"src":120351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120353,120355],{"id":120354},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[633,120357,120359],{"id":120358},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120361,120362],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120364,120365],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120367,120368],{},[2057,120369,120370],{"href":120370,"rel":120371},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25520],[19,120373,120374],{},[3145,120375],{"alt":28,"src":120376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120378,120379],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120381,120382],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120384,120385],{},[3145,120386],{"alt":28,"src":120387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[23,120389,120391],{"className":118931,"code":120390,"language":118933,"meta":28,"style":28},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[30,120392,120393,120398,120405,120410],{"__ignoreMap":28},[33,120394,120395],{"class":35,"line":36},[33,120396,120397],{"class":87},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[33,120399,120400,120402],{"class":35,"line":43},[33,120401,102915],{"class":39},[33,120403,120404],{"class":117}," ~\u002FDownloads\n",[33,120406,120407],{"class":35,"line":130},[33,120408,120409],{"class":87},"#下方chrome安装包名不一定是这个，根据名字来看\n",[33,120411,120412,120414,120416,120418],{"class":35,"line":146},[33,120413,26232],{"class":3632},[33,120415,118952],{"class":117},[33,120417,25489],{"class":117},[33,120419,120420],{"class":117}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120422,120423],{},[3145,120424],{"alt":28,"src":120425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[633,120427,120429],{"id":120428},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[23,120431,120433],{"className":118931,"code":120432,"language":118933,"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,120434,120435,120440,120448,120459,120464,120468,120473,120483,120491,120502],{"__ignoreMap":28},[33,120436,120437],{"class":35,"line":36},[33,120438,120439],{"class":87},"# 老版\n",[33,120441,120442,120444,120446],{"class":35,"line":43},[33,120443,26232],{"class":3632},[33,120445,118952],{"class":117},[33,120447,27898],{"class":117},[33,120449,120450,120452,120454,120456],{"class":35,"line":130},[33,120451,26232],{"class":3632},[33,120453,118952],{"class":117},[33,120455,25489],{"class":117},[33,120457,120458],{"class":117}," neofetch\n",[33,120460,120461],{"class":35,"line":146},[33,120462,120463],{"class":3632},"neofetch\n",[33,120465,120466],{"class":35,"line":267},[33,120467,127],{"emptyLinePlaceholder":126},[33,120469,120470],{"class":35,"line":275},[33,120471,120472],{"class":87},"# 新版\n",[33,120474,120475,120477,120480],{"class":35,"line":392},[33,120476,26232],{"class":3632},[33,120478,120479],{"class":117}," add-apt-repository",[33,120481,120482],{"class":117}," ppa:zhangsongcui3371\u002Ffastfetch\n",[33,120484,120485,120487,120489],{"class":35,"line":406},[33,120486,26232],{"class":3632},[33,120488,118952],{"class":117},[33,120490,27898],{"class":117},[33,120492,120493,120495,120497,120499],{"class":35,"line":418},[33,120494,26232],{"class":3632},[33,120496,118952],{"class":117},[33,120498,25489],{"class":117},[33,120500,120501],{"class":117}," fastfetch\n",[33,120503,120504],{"class":35,"line":425},[33,120505,120506],{"class":3632},"fastfetch\n",[19,120508,120509],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120511,120512],{},[3145,120513],{"alt":28,"src":120514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[633,120516,120518],{"id":120517},"_323-移除snap应用","3.2.3 移除snap应用",[19,120520,120521],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[23,120523,120525],{"className":118931,"code":120524,"language":118933,"meta":28,"style":28},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[30,120526,120527,120539,120550],{"__ignoreMap":28},[33,120528,120529,120531,120533,120536],{"class":35,"line":36},[33,120530,26232],{"class":3632},[33,120532,28169],{"class":117},[33,120534,120535],{"class":117}," disable",[33,120537,120538],{"class":117}," snapd.service\n",[33,120540,120541,120543,120545,120547],{"class":35,"line":43},[33,120542,26232],{"class":3632},[33,120544,28169],{"class":117},[33,120546,120535],{"class":117},[33,120548,120549],{"class":117}," snapd.socket\n",[33,120551,120552,120554,120556,120558],{"class":35,"line":130},[33,120553,26232],{"class":3632},[33,120555,28169],{"class":117},[33,120557,120535],{"class":117},[33,120559,120560],{"class":117}," snapd.seeded.service\n",[19,120562,120563],{},"然后查看snap应用列表",[19,120565,120566,120567,120572],{},"根据你安装的选择不同（最小安装或普通安装），有",[2057,120568,120571],{"href":120569,"rel":120570},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25520],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[23,120574,120576],{"className":118931,"code":120575,"language":118933,"meta":28,"style":28},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[30,120577,120578,120583],{"__ignoreMap":28},[33,120579,120580],{"class":35,"line":36},[33,120581,120582],{"class":87},"# 查询当前系统上snap安装了哪些app\n",[33,120584,120585,120588],{"class":35,"line":43},[33,120586,120587],{"class":3632},"snap",[33,120589,120590],{"class":117}," list\n",[19,120592,120593],{},[3145,120594],{"alt":28,"src":120595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120597,120598,120599,120602],{},"卸载掉图中所有应用，按照 ",[1968,120600,120601],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[23,120604,120606],{"className":118931,"code":120605,"language":118933,"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,120607,120608,120613,120625,120630,120641,120646,120657,120662,120673,120678,120682,120687,120698,120709],{"__ignoreMap":28},[33,120609,120610],{"class":35,"line":36},[33,120611,120612],{"class":87},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[33,120614,120615,120617,120620,120622],{"class":35,"line":43},[33,120616,26232],{"class":3632},[33,120618,120619],{"class":117}," snap",[33,120621,27735],{"class":117},[33,120623,120624],{"class":117}," snap-store\n",[33,120626,120627],{"class":35,"line":130},[33,120628,120629],{"class":87},"#移除firefox浏览器\n",[33,120631,120632,120634,120636,120638],{"class":35,"line":146},[33,120633,26232],{"class":3632},[33,120635,120619],{"class":117},[33,120637,27735],{"class":117},[33,120639,120640],{"class":117}," firefox\n",[33,120642,120643],{"class":35,"line":267},[33,120644,120645],{"class":87},"#移除gnome-42-2204\n",[33,120647,120648,120650,120652,120654],{"class":35,"line":275},[33,120649,26232],{"class":3632},[33,120651,120619],{"class":117},[33,120653,27735],{"class":117},[33,120655,120656],{"class":117}," gnome-42-2204\n",[33,120658,120659],{"class":35,"line":392},[33,120660,120661],{"class":87},"#移除gtk-common-themes\n",[33,120663,120664,120666,120668,120670],{"class":35,"line":406},[33,120665,26232],{"class":3632},[33,120667,120619],{"class":117},[33,120669,27735],{"class":117},[33,120671,120672],{"class":117}," gtk-common-themes\n",[33,120674,120675],{"class":35,"line":418},[33,120676,120677],{"class":87},"#移除其它...\n",[33,120679,120680],{"class":35,"line":425},[33,120681,4340],{"class":59},[33,120683,120684],{"class":35,"line":1147},[33,120685,120686],{"class":87},"#移除core22,bare以及snapd\n",[33,120688,120689,120691,120693,120695],{"class":35,"line":1329},[33,120690,26232],{"class":3632},[33,120692,120619],{"class":117},[33,120694,27735],{"class":117},[33,120696,120697],{"class":117}," core22\n",[33,120699,120700,120702,120704,120706],{"class":35,"line":1341},[33,120701,26232],{"class":3632},[33,120703,120619],{"class":117},[33,120705,27735],{"class":117},[33,120707,120708],{"class":117}," bare\n",[33,120710,120711,120713,120715,120717],{"class":35,"line":1348},[33,120712,26232],{"class":3632},[33,120714,120619],{"class":117},[33,120716,27735],{"class":117},[33,120718,120719],{"class":117}," snapd\n",[19,120721,120722],{},[3145,120723],{"alt":28,"src":120724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120726,120727],{},"输入以下命令查看是否还有snap包",[23,120729,120731],{"className":118931,"code":120730,"language":118933,"meta":28,"style":28},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[30,120732,120733,120739,120743,120747,120751],{"__ignoreMap":28},[33,120734,120735,120737],{"class":35,"line":36},[33,120736,120587],{"class":3632},[33,120738,120590],{"class":117},[33,120740,120741],{"class":35,"line":43},[33,120742,120439],{"class":87},[33,120744,120745],{"class":35,"line":130},[33,120746,120463],{"class":3632},[33,120748,120749],{"class":35,"line":146},[33,120750,120472],{"class":87},[33,120752,120753],{"class":35,"line":267},[33,120754,120506],{"class":3632},[19,120756,120757],{},[3145,120758],{"alt":28,"src":120759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[633,120761,120763],{"id":120762},"_324-移除snap","3.2.4 移除snap",[19,120765,120766,120767,120772],{},"在删除掉",[2057,120768,120771],{"href":120769,"rel":120770},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25520],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[23,120774,120776],{"className":118931,"code":120775,"language":118933,"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,120777,120778,120783,120796,120801,120812],{"__ignoreMap":28},[33,120779,120780],{"class":35,"line":36},[33,120781,120782],{"class":87}," #使用apt移除掉snap\n",[33,120784,120785,120787,120789,120791,120794],{"class":35,"line":43},[33,120786,26232],{"class":3632},[33,120788,118952],{"class":117},[33,120790,119260],{"class":117},[33,120792,120793],{"class":39}," --purge",[33,120795,120719],{"class":117},[33,120797,120798],{"class":35,"line":130},[33,120799,120800],{"class":87},"#移除snapd的一些目录\n",[33,120802,120803,120805,120807,120809],{"class":35,"line":146},[33,120804,26232],{"class":3632},[33,120806,120188],{"class":117},[33,120808,26981],{"class":39},[33,120810,120811],{"class":117}," \u002Fvar\u002Fcache\u002Fsnapd\n",[33,120813,120814,120816,120818,120820],{"class":35,"line":267},[33,120815,26232],{"class":3632},[33,120817,120188],{"class":117},[33,120819,26981],{"class":39},[33,120821,120822],{"class":117}," ~\u002Fsnap\n",[19,120824,120825,120826,120829],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[30,120827,120828],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[633,120831,120833],{"id":120832},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120835,120836],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[23,120838,120840],{"className":118931,"code":120839,"language":118933,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[30,120841,120842],{"__ignoreMap":28},[33,120843,120844,120846,120848],{"class":35,"line":36},[33,120845,26232],{"class":3632},[33,120847,120218],{"class":117},[33,120849,120850],{"class":117}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120852,120853,120854,120857],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[30,120855,120856],{},":wq"," 回车",[23,120859,120861],{"className":118931,"code":120860,"language":118933,"meta":28,"style":28},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[30,120862,120863,120870,120884],{"__ignoreMap":28},[33,120864,120865,120868],{"class":35,"line":36},[33,120866,120867],{"class":3632},"Package:",[33,120869,120719],{"class":117},[33,120871,120872,120875,120878,120881],{"class":35,"line":43},[33,120873,120874],{"class":3632},"Pin:",[33,120876,120877],{"class":117}," release",[33,120879,120880],{"class":117}," a=",[33,120882,120883],{"class":39},"*\n",[33,120885,120886,120889],{"class":35,"line":130},[33,120887,120888],{"class":3632},"Pin-Priority:",[33,120890,120891],{"class":39}," -10\n",[19,120893,120894],{},[3145,120895],{"alt":28,"src":120896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[633,120898,120900],{"id":120899},"_326-测试是否成功","3.2.6 测试是否成功",[23,120902,120904],{"className":118931,"code":120903,"language":118933,"meta":28,"style":28},"sudo apt update\nsudo apt install firefox\n",[30,120905,120906,120914],{"__ignoreMap":28},[33,120907,120908,120910,120912],{"class":35,"line":36},[33,120909,26232],{"class":3632},[33,120911,118952],{"class":117},[33,120913,27898],{"class":117},[33,120915,120916,120918,120920,120922],{"class":35,"line":43},[33,120917,26232],{"class":3632},[33,120919,118952],{"class":117},[33,120921,25489],{"class":117},[33,120923,120640],{"class":117},[19,120925,120926],{},"这里提示snapd无法被安装，就证明成功了",[19,120928,120929],{},[3145,120930],{"alt":28,"src":120931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[633,120933,120935],{"id":120934},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120937,120938],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120940,120941],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120943,120944],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[23,120946,120948],{"className":118931,"code":120947,"language":118933,"meta":28,"style":28},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[30,120949,120950,120955,120964,120969,120977],{"__ignoreMap":28},[33,120951,120952],{"class":35,"line":36},[33,120953,120954],{"class":87},"# 添加Mozilla提供的源\n",[33,120956,120957,120959,120961],{"class":35,"line":43},[33,120958,26232],{"class":3632},[33,120960,120479],{"class":117},[33,120962,120963],{"class":117}," ppa:mozillateam\u002Fppa\n",[33,120965,120966],{"class":35,"line":130},[33,120967,120968],{"class":87},"# 安装Firefox\n",[33,120970,120971,120973,120975],{"class":35,"line":146},[33,120972,26232],{"class":3632},[33,120974,118952],{"class":117},[33,120976,27898],{"class":117},[33,120978,120979,120981,120983,120985],{"class":35,"line":267},[33,120980,26232],{"class":3632},[33,120982,118952],{"class":117},[33,120984,25489],{"class":117},[33,120986,120640],{"class":117},[633,120988,120990],{"id":120989},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120992,120993],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120995,120996],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[23,120998,121000],{"className":118931,"code":120999,"language":118933,"meta":28,"style":28},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[30,121001,121002,121007,121017,121025,121029],{"__ignoreMap":28},[33,121003,121004],{"class":35,"line":36},[33,121005,121006],{"class":87},"#删掉禁止安装snap的配置文件\n",[33,121008,121009,121011,121013,121015],{"class":35,"line":43},[33,121010,26232],{"class":3632},[33,121012,120188],{"class":117},[33,121014,26981],{"class":39},[33,121016,120850],{"class":117},[33,121018,121019,121021,121023],{"class":35,"line":130},[33,121020,26232],{"class":3632},[33,121022,118952],{"class":117},[33,121024,27898],{"class":117},[33,121026,121027],{"class":35,"line":146},[33,121028,127],{"emptyLinePlaceholder":126},[33,121030,121031,121033,121035],{"class":35,"line":267},[33,121032,26232],{"class":3632},[33,121034,118952],{"class":117},[33,121036,121037],{"class":117}," dist-update\n",[14,121039,121041],{"id":121040},"_33-中文输入法","3.3 中文输入法",[633,121043,121045],{"id":121044},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121047,121048],{},"官网下载搜狗输入法",[19,121050,121051],{},[3145,121052],{"alt":28,"src":121053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121055,121056],{},[3145,121057],{"alt":28,"src":121058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121060,121061],{},"打开终端输入如下",[23,121063,121065],{"className":118931,"code":121064,"language":118933,"meta":28,"style":28},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[30,121066,121067,121074],{"__ignoreMap":28},[33,121068,121069,121071],{"class":35,"line":36},[33,121070,102915],{"class":39},[33,121072,121073],{"class":117}," ~\u002FDownloads\u002F\n",[33,121075,121076,121078,121080,121082],{"class":35,"line":43},[33,121077,26232],{"class":3632},[33,121079,118952],{"class":117},[33,121081,25489],{"class":117},[33,121083,121084],{"class":117}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121086,121087],{},"打开Fcitx",[19,121089,121090,121093],{},[3145,121091],{"alt":28,"src":121092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3145,121094],{"alt":28,"src":121095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121097,121098],{},[3145,121099],{"alt":28,"src":121100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121102,121103],{},"添加搜狗输入法",[19,121105,121106],{},[3145,121107],{"alt":28,"src":121108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121110,121111],{},[3145,121112],{"alt":28,"src":121113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121115,121116],{},"将搜狗输入法设置为唯一输入法",[19,121118,121119],{},[3145,121120],{"alt":28,"src":121121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[633,121123,121125],{"id":121124},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[162,121127,121128],{},[165,121129,121130],{},"卸载旧输入法",[23,121132,121134],{"className":120158,"code":121133,"language":120160,"meta":28,"style":28},"sudo apt purge fcitx* ibus*\n",[30,121135,121136],{"__ignoreMap":28},[33,121137,121138,121140,121142,121144,121147,121149,121152],{"class":35,"line":36},[33,121139,26232],{"class":3632},[33,121141,118952],{"class":117},[33,121143,119293],{"class":117},[33,121145,121146],{"class":117}," fcitx",[33,121148,1540],{"class":39},[33,121150,121151],{"class":117}," ibus",[33,121153,120883],{"class":39},[162,121155,121156],{"start":43},[165,121157,121158],{},"安装Fcitx5",[23,121160,121162],{"className":118931,"code":121161,"language":118933,"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,121163,121164,121169,121183,121187,121192,121201,121209],{"__ignoreMap":28},[33,121165,121166],{"class":35,"line":36},[33,121167,121168],{"class":87},"# Ubuntu22.04及以上、Debian12及以上\n",[33,121170,121171,121173,121175,121177,121180],{"class":35,"line":43},[33,121172,26232],{"class":3632},[33,121174,118952],{"class":117},[33,121176,25489],{"class":117},[33,121178,121179],{"class":117}," fcitx5",[33,121181,121182],{"class":117}," fcitx5-chinese-addons\n",[33,121184,121185],{"class":35,"line":130},[33,121186,127],{"emptyLinePlaceholder":126},[33,121188,121189],{"class":35,"line":146},[33,121190,121191],{"class":87},"# Ubuntu20.04\n",[33,121193,121194,121196,121198],{"class":35,"line":267},[33,121195,26232],{"class":3632},[33,121197,120479],{"class":117},[33,121199,121200],{"class":117}," ppa:zhsj\u002Ffcitx5\n",[33,121202,121203,121205,121207],{"class":35,"line":275},[33,121204,26232],{"class":3632},[33,121206,118952],{"class":117},[33,121208,27898],{"class":117},[33,121210,121211,121213,121215,121217,121219],{"class":35,"line":392},[33,121212,26232],{"class":3632},[33,121214,118952],{"class":117},[33,121216,25489],{"class":117},[33,121218,121179],{"class":117},[33,121220,121182],{"class":117},[162,121222,121223,121226],{"start":130},[165,121224,121225],{},"Reboot System",[165,121227,121228],{},"启动Fcitx5",[19,121230,121231],{},[3145,121232],{"alt":28,"src":121233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[162,121235,121236],{"start":267},[165,121237,121238],{},"修改一些设置",[19,121240,121241],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121243,121244],{},[3145,121245],{"alt":28,"src":121246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121248,121249],{},"添加快捷键以便于更好切换中英文",[19,121251,121252],{},[3145,121253],{"alt":28,"src":121254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[162,121256,121257],{"start":275},[165,121258,121259],{},"重启",[23,121261,121263],{"className":120158,"code":121262,"language":120160,"meta":28,"style":28},"sudo shutdown -r now\n",[30,121264,121265],{"__ignoreMap":28},[33,121266,121267,121269,121272,121275],{"class":35,"line":36},[33,121268,26232],{"class":3632},[33,121270,121271],{"class":117}," shutdown",[33,121273,121274],{"class":39}," -r",[33,121276,121277],{"class":117}," now\n",[162,121279,121280],{"start":392},[165,121281,121282],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121284,121285],{},[2057,121286,121287],{"href":121287,"rel":121288},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25520],[162,121290,121291],{"start":406},[165,121292,121293],{},"再重启",[23,121295,121296],{"className":120158,"code":121262,"language":120160,"meta":28,"style":28},[30,121297,121298],{"__ignoreMap":28},[33,121299,121300,121302,121304,121306],{"class":35,"line":36},[33,121301,26232],{"class":3632},[33,121303,121271],{"class":117},[33,121305,121274],{"class":39},[33,121307,121277],{"class":117},[14,121309,121311],{"id":121310},"_34-pip3源替换","3.4 pip3源替换",[19,121313,121314],{},"非Debian系发行版需要做。",[19,121316,121317],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121319,121320],{},"使用dnf的系统也可能不用做。",[23,121322,121324],{"className":118931,"code":121323,"language":118933,"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,121325,121326,121331,121338,121343,121348],{"__ignoreMap":28},[33,121327,121328],{"class":35,"line":36},[33,121329,121330],{"class":87},"# 检查是否已安装 pip\n",[33,121332,121333,121336],{"class":35,"line":43},[33,121334,121335],{"class":3632},"pip3",[33,121337,27949],{"class":39},[33,121339,121340],{"class":35,"line":130},[33,121341,121342],{"class":87},"# 如果未安装，先安装 pip3（见下方）\n",[33,121344,121345],{"class":35,"line":146},[33,121346,121347],{"class":87},"# 配置 pip 使用清华源\n",[33,121349,121350,121352,121355,121358,121361],{"class":35,"line":267},[33,121351,121335],{"class":3632},[33,121353,121354],{"class":117}," config",[33,121356,121357],{"class":117}," set",[33,121359,121360],{"class":117}," global.index-url",[33,121362,121363],{"class":117}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121365,121366],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121368,121369],{},[3145,121370],{"alt":28,"src":121371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[23,121373,121375],{"className":118931,"code":121374,"language":118933,"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,121376,121377,121382,121390,121401,121405,121410,121429,121433,121438,121450,121454,121459],{"__ignoreMap":28},[33,121378,121379],{"class":35,"line":36},[33,121380,121381],{"class":87},"#安装pip3\n",[33,121383,121384,121386,121388],{"class":35,"line":43},[33,121385,26232],{"class":3632},[33,121387,118952],{"class":117},[33,121389,27898],{"class":117},[33,121391,121392,121394,121396,121398],{"class":35,"line":130},[33,121393,26232],{"class":3632},[33,121395,27732],{"class":117},[33,121397,25489],{"class":117},[33,121399,121400],{"class":117}," python3-pip\n",[33,121402,121403],{"class":35,"line":146},[33,121404,127],{"emptyLinePlaceholder":126},[33,121406,121407],{"class":35,"line":267},[33,121408,121409],{"class":87},"#更新pip3\n",[33,121411,121412,121414,121416,121418,121420,121422,121425,121427],{"class":35,"line":275},[33,121413,102518],{"class":3632},[33,121415,102521],{"class":39},[33,121417,102544],{"class":117},[33,121419,25489],{"class":117},[33,121421,28086],{"class":39},[33,121423,121424],{"class":117}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[33,121426,102549],{"class":39},[33,121428,102552],{"class":117},[33,121430,121431],{"class":35,"line":392},[33,121432,127],{"emptyLinePlaceholder":126},[33,121434,121435],{"class":35,"line":406},[33,121436,121437],{"class":87},"#设置pip源为清华源\n",[33,121439,121440,121442,121444,121446,121448],{"class":35,"line":418},[33,121441,121335],{"class":3632},[33,121443,121354],{"class":117},[33,121445,121357],{"class":117},[33,121447,121360],{"class":117},[33,121449,121363],{"class":117},[33,121451,121452],{"class":35,"line":425},[33,121453,127],{"emptyLinePlaceholder":126},[33,121455,121456],{"class":35,"line":1147},[33,121457,121458],{"class":87},"#测试\n",[33,121460,121461,121463,121465,121467,121469,121471],{"class":35,"line":1329},[33,121462,102518],{"class":3632},[33,121464,102521],{"class":39},[33,121466,102544],{"class":117},[33,121468,25489],{"class":117},[33,121470,102549],{"class":39},[33,121472,102552],{"class":117},[19,121474,121475],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121477,121478],{},[3145,121479],{"alt":28,"src":121480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121482,121484],{"id":121483},"_35-显卡驱动安装","3.5 显卡驱动安装",[633,121486,121488],{"id":121487},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[23,121490,121492],{"className":120158,"code":121491,"language":120160,"meta":28,"style":28},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[30,121493,121494,121499,121514,121519],{"__ignoreMap":28},[33,121495,121496],{"class":35,"line":36},[33,121497,121498],{"class":87},"# 如果是使用apt安装的驱动\n",[33,121500,121501,121503,121505,121507,121509,121512],{"class":35,"line":43},[33,121502,26232],{"class":3632},[33,121504,27732],{"class":117},[33,121506,27735],{"class":117},[33,121508,120793],{"class":39},[33,121510,121511],{"class":117}," nvidia",[33,121513,120883],{"class":39},[33,121515,121516],{"class":35,"line":130},[33,121517,121518],{"class":87},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[33,121520,121521,121523],{"class":35,"line":146},[33,121522,26232],{"class":3632},[33,121524,121525],{"class":117}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[633,121527,121529],{"id":121528},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23653,121531,121533],{"id":121532},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24565,121535,121537],{"id":121536},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[23,121539,121541],{"className":120158,"code":121540,"language":120160,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,121542,121543,121548,121559,121564,121574,121579],{"__ignoreMap":28},[33,121544,121545],{"class":35,"line":36},[33,121546,121547],{"class":87},"# 安装英伟达驱动\n",[33,121549,121550,121552,121554,121556],{"class":35,"line":43},[33,121551,26232],{"class":3632},[33,121553,118952],{"class":117},[33,121555,25489],{"class":117},[33,121557,121558],{"class":117}," nvidia-driver-版本号\n",[33,121560,121561],{"class":35,"line":130},[33,121562,121563],{"class":87},"# 重启 \n",[33,121565,121566,121568,121570,121572],{"class":35,"line":146},[33,121567,26232],{"class":3632},[33,121569,121271],{"class":117},[33,121571,121274],{"class":39},[33,121573,121277],{"class":117},[33,121575,121576],{"class":35,"line":267},[33,121577,121578],{"class":87},"# 检查驱动是否安装成功\n",[33,121580,121581],{"class":35,"line":275},[33,121582,121583],{"class":3632},"nvidia-smi\n",[24565,121585,121587],{"id":121586},"_35212-debian","3.5.2.1.2 Debian",[23,121589,121591],{"className":120158,"code":121590,"language":120160,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,121592,121593,121597,121611,121615,121625,121629],{"__ignoreMap":28},[33,121594,121595],{"class":35,"line":36},[33,121596,121547],{"class":87},[33,121598,121599,121601,121603,121605,121608],{"class":35,"line":43},[33,121600,26232],{"class":3632},[33,121602,118952],{"class":117},[33,121604,25489],{"class":117},[33,121606,121607],{"class":117}," nvidia-driver",[33,121609,121610],{"class":117}," nvidia-settings\n",[33,121612,121613],{"class":35,"line":130},[33,121614,121563],{"class":87},[33,121616,121617,121619,121621,121623],{"class":35,"line":146},[33,121618,26232],{"class":3632},[33,121620,121271],{"class":117},[33,121622,121274],{"class":39},[33,121624,121277],{"class":117},[33,121626,121627],{"class":35,"line":267},[33,121628,121578],{"class":87},[33,121630,121631],{"class":35,"line":275},[33,121632,121583],{"class":3632},[23653,121634,121636],{"id":121635},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121638,121639,121640,121643],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[1968,121641,121642],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121645,121646,121647],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25208,121648,121649],{},[1968,121650,121651],{},"（也可以不禁用桌面环境，直接进行下一步。）",[23,121653,121655],{"className":120158,"code":121654,"language":120160,"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,121656,121657,121662,121672,121677,121690,121695],{"__ignoreMap":28},[33,121658,121659],{"class":35,"line":36},[33,121660,121661],{"class":87},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[33,121663,121664,121666,121669],{"class":35,"line":43},[33,121665,26232],{"class":3632},[33,121667,121668],{"class":117}," telinit",[33,121670,121671],{"class":39}," 3\n",[33,121673,121674],{"class":35,"line":130},[33,121675,121676],{"class":87},"# ubuntu 使用下方命令\n",[33,121678,121679,121681,121684,121687],{"class":35,"line":146},[33,121680,26232],{"class":3632},[33,121682,121683],{"class":117}," service",[33,121685,121686],{"class":117}," lightdm",[33,121688,121689],{"class":117}," stop\n",[33,121691,121692],{"class":35,"line":267},[33,121693,121694],{"class":87},"# Fedora 使用下方命令\n",[33,121696,121697,121699,121701,121704],{"class":35,"line":275},[33,121698,26232],{"class":3632},[33,121700,28169],{"class":117},[33,121702,121703],{"class":117}," isolate",[33,121705,121706],{"class":117}," multi-user.target\n",[19,121708,121709],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[23,121711,121713],{"className":120158,"code":121712,"language":120160,"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,121714,121715,121720,121731,121736,121743,121748,121760,121765,121772,121777],{"__ignoreMap":28},[33,121716,121717],{"class":35,"line":36},[33,121718,121719],{"class":87},"# 编译环境+准备工作\n",[33,121721,121722,121724,121726,121728],{"class":35,"line":43},[33,121723,26232],{"class":3632},[33,121725,118952],{"class":117},[33,121727,25489],{"class":117},[33,121729,121730],{"class":117}," build-essential\n",[33,121732,121733],{"class":35,"line":130},[33,121734,121735],{"class":87},"# 进入到.run目录中\n",[33,121737,121738,121740],{"class":35,"line":146},[33,121739,102915],{"class":39},[33,121741,121742],{"class":117}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[33,121744,121745],{"class":35,"line":267},[33,121746,121747],{"class":87},"# 给驱动文件增加可执行权限：\n",[33,121749,121750,121752,121754,121757],{"class":35,"line":275},[33,121751,26232],{"class":3632},[33,121753,26235],{"class":117},[33,121755,121756],{"class":117}," a+x",[33,121758,121759],{"class":117}," NVIDIA-Linux-x86_64-550.107.02.run\n",[33,121761,121762],{"class":35,"line":392},[33,121763,121764],{"class":87},"# 然后执行安装：\n",[33,121766,121767,121769],{"class":35,"line":406},[33,121768,26232],{"class":3632},[33,121770,121771],{"class":117}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[33,121773,121774],{"class":35,"line":418},[33,121775,121776],{"class":87},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[33,121778,121779,121781,121784],{"class":35,"line":425},[33,121780,26232],{"class":3632},[33,121782,121783],{"class":117}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[33,121785,121786],{"class":39},"  --no-opengl-files\n",[19,121788,121789],{},"安装完毕重启即可",[23,121791,121793],{"className":120158,"code":121792,"language":120160,"meta":28,"style":28},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,121794,121795,121799,121805,121809],{"__ignoreMap":28},[33,121796,121797],{"class":35,"line":36},[33,121798,121563],{"class":87},[33,121800,121801,121803],{"class":35,"line":43},[33,121802,26232],{"class":3632},[33,121804,28303],{"class":117},[33,121806,121807],{"class":35,"line":130},[33,121808,121578],{"class":87},[33,121810,121811],{"class":35,"line":146},[33,121812,121583],{"class":3632},[633,121814,121816],{"id":121815},"_353-安装cuda","3.5.3 安装CUDA",[19,121818,121819],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121821,121822],{},[3145,121823],{"alt":28,"src":121824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[162,121826,121827],{},[165,121828,121829],{},"先查看显卡驱动所支持的最高CUDA版本",[23,121831,121832],{"className":120158,"code":121583,"language":120160,"meta":28,"style":28},[30,121833,121834],{"__ignoreMap":28},[33,121835,121836],{"class":35,"line":36},[33,121837,121583],{"class":3632},[19,121839,121840],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121842,121843],{},[3145,121844],{"alt":28,"src":121845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[162,121847,121848],{"start":43},[165,121849,121850],{},"下载CUDA并安装CUDA",[19,121852,119937,121853],{},[2057,121854,119940],{"href":119940,"rel":121855},[25520],[19,121857,121858],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121860,121861],{},[3145,121862],{"alt":28,"src":121863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121865,121866,121867,121872],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2057,121868,121871],{"href":121869,"rel":121870},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25520],"Vinci机器人队单片机教程","）",[19,121874,121875],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121877,121878],{},[3145,121879],{"alt":28,"src":121880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121882,121883],{},"将最下方框框里的命令敲入终端",[23,121885,121887],{"className":120158,"code":121886,"language":120160,"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,121888,121889,121894,121903,121908,121915,121920,121928,121933,121944,121949],{"__ignoreMap":28},[33,121890,121891],{"class":35,"line":36},[33,121892,121893],{"class":87},"# 在当前文件夹下创建一个ttt的子文件夹\n",[33,121895,121896,121898,121900],{"class":35,"line":43},[33,121897,102905],{"class":3632},[33,121899,30871],{"class":39},[33,121901,121902],{"class":117}," .\u002Fttt\n",[33,121904,121905],{"class":35,"line":130},[33,121906,121907],{"class":87},"# 进入ttt文件夹\n",[33,121909,121910,121912],{"class":35,"line":146},[33,121911,102915],{"class":39},[33,121913,121914],{"class":117}," ttt\n",[33,121916,121917],{"class":35,"line":267},[33,121918,121919],{"class":87},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[33,121921,121922,121925],{"class":35,"line":275},[33,121923,121924],{"class":3632},"wget",[33,121926,121927],{"class":117}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,121929,121930],{"class":35,"line":392},[33,121931,121932],{"class":87},"# 给予权限\n",[33,121934,121935,121937,121939,121941],{"class":35,"line":406},[33,121936,26232],{"class":3632},[33,121938,26235],{"class":117},[33,121940,121756],{"class":117},[33,121942,121943],{"class":117}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,121945,121946],{"class":35,"line":418},[33,121947,121948],{"class":87},"# 运行脚本\n",[33,121950,121951,121953],{"class":35,"line":425},[33,121952,26232],{"class":3632},[33,121954,121943],{"class":117},[19,121956,121957],{},[3145,121958],{"alt":28,"src":121959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121961,121962],{},"正在安装中：",[19,121964,121965],{},[3145,121966],{"alt":28,"src":121967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121969,121970],{},"输入accept接受即可",[19,121972,121973],{},[3145,121974],{"alt":28,"src":121975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121977,121978],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121980,121981],{},[3145,121982],{"alt":28,"src":121983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121985,121986],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121988,121989],{},[3145,121990],{"alt":28,"src":121991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[162,121993,121994],{"start":130},[165,121995,121996],{},"配置环境",[19,121998,121999],{},"根据上方确认一下路径，比如我上面红色框起来的为",[23,122001,122003],{"className":120158,"code":122002,"language":120160,"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,122004,122005,122021,122036],{"__ignoreMap":28},[33,122006,122007,122010,122013,122016,122019],{"class":35,"line":36},[33,122008,122009],{"class":3632},"Please",[33,122011,122012],{"class":117}," make",[33,122014,122015],{"class":117}," sure",[33,122017,122018],{"class":117}," that",[33,122020,4340],{"class":59},[33,122022,122023,122025,122028,122031,122034],{"class":35,"line":43},[33,122024,53916],{"class":3632},[33,122026,122027],{"class":117},"   PATH",[33,122029,122030],{"class":117}," includes",[33,122032,122033],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[33,122035,4340],{"class":59},[33,122037,122038,122040,122043,122045,122048,122051,122053,122056,122059,122062,122064,122066,122069,122071],{"class":35,"line":130},[33,122039,53916],{"class":3632},[33,122041,122042],{"class":117},"   LD_LIBRARY_PATH",[33,122044,122030],{"class":117},[33,122046,122047],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[33,122049,122050],{"class":117}," or,",[33,122052,6870],{"class":117},[33,122054,122055],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[33,122057,122058],{"class":117}," to",[33,122060,122061],{"class":117}," \u002Fetc\u002Fld.so.conf",[33,122063,679],{"class":117},[33,122065,28886],{"class":117},[33,122067,122068],{"class":117}," ldconfig",[33,122070,66246],{"class":117},[33,122072,122073],{"class":117}," root\n",[19,122075,122076],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[23,122078,122080],{"className":120158,"code":122079,"language":120160,"meta":28,"style":28},"which nvcc\n",[30,122081,122082],{"__ignoreMap":28},[33,122083,122084,122087],{"class":35,"line":36},[33,122085,122086],{"class":39},"which",[33,122088,122089],{"class":117}," nvcc\n",[19,122091,122092],{},[3145,122093],{"alt":28,"src":122094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122096,122097],{},"所以我进行以下操作：",[23,122099,122101],{"className":120158,"code":122100,"language":120160,"meta":28,"style":28},"sudo vim ~\u002F.bashrc\n",[30,122102,122103],{"__ignoreMap":28},[33,122104,122105,122107,122109],{"class":35,"line":36},[33,122106,26232],{"class":3632},[33,122108,120218],{"class":117},[33,122110,122111],{"class":117}," ~\u002F.bashrc\n",[19,122113,122114],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[23,122116,122118],{"className":120158,"code":122117,"language":120160,"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,122119,122120,122132],{"__ignoreMap":28},[33,122121,122122,122124,122127,122129],{"class":35,"line":36},[33,122123,26698],{"class":63},[33,122125,122126],{"class":59}," PATH",[33,122128,64],{"class":63},[33,122130,122131],{"class":59},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[33,122133,122134,122136,122139,122141],{"class":35,"line":43},[33,122135,26698],{"class":63},[33,122137,122138],{"class":59}," LD_LIBRARY_PATH",[33,122140,64],{"class":63},[33,122142,122143],{"class":59},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122145,122146],{},[3145,122147],{"alt":28,"src":122148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[23,122150,122152],{"className":120158,"code":122151,"language":120160,"meta":28,"style":28},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[30,122153,122154,122159,122165,122170],{"__ignoreMap":28},[33,122155,122156],{"class":35,"line":36},[33,122157,122158],{"class":87},"# 刷新当前终端的环境变量\n",[33,122160,122161,122163],{"class":35,"line":43},[33,122162,102532],{"class":39},[33,122164,122111],{"class":117},[33,122166,122167],{"class":35,"line":130},[33,122168,122169],{"class":87},"# 验证CUDA是否安装成功\n",[33,122171,122172,122175],{"class":35,"line":146},[33,122173,122174],{"class":3632},"nvcc",[33,122176,122177],{"class":39}," -V\n",[19,122179,122180],{},"出现下图这种则安装成功。",[19,122182,122183],{},[3145,122184],{"alt":28,"src":122185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[633,122187,122189],{"id":122188},"_354-安装cudnn","3.5.4 安装cuDNN",[162,122191,122192],{},[165,122193,122194],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122196,122197,122198,122203],{},"前往 NVIDIA cuDNN 下载页面：",[2057,122199,122202],{"href":122200,"rel":122201},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25520],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122205,122206],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122208,122209],{},[3145,122210],{"alt":28,"src":122211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122213,122214],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122216,122217],{},[3145,122218],{"alt":28,"src":122219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122221,122222],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122224,122225],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122227,122228],{},[1968,122229,122230],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122232,122233],{},"下载好的：",[19,122235,122236],{},[3145,122237],{"alt":28,"src":122238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[162,122240,122241],{"start":43},[165,122242,122243],{},"安装cuDNN",[19,122245,122246],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122248,122249],{},[3145,122250],{"alt":28,"src":122251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122253,122254],{},"解压文件，并复制到对应位置完成安装",[23,122256,122258],{"className":120158,"code":122257,"language":120160,"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,122259,122260,122265,122276,122281,122288,122293,122309,122323,122328,122339,122348,122352,122368],{"__ignoreMap":28},[33,122261,122262],{"class":35,"line":36},[33,122263,122264],{"class":87},"# 解压cuDNN文件\n",[33,122266,122267,122270,122273],{"class":35,"line":43},[33,122268,122269],{"class":3632},"tar",[33,122271,122272],{"class":39}," -xvf",[33,122274,122275],{"class":117}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[33,122277,122278],{"class":35,"line":130},[33,122279,122280],{"class":87},"# cd进文件夹\n",[33,122282,122283,122285],{"class":35,"line":146},[33,122284,102915],{"class":39},[33,122286,122287],{"class":117}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[33,122289,122290],{"class":35,"line":267},[33,122291,122292],{"class":87},"# 复制cuDNN文件到CUDA目录\n",[33,122294,122295,122297,122299,122302,122304,122307],{"class":35,"line":275},[33,122296,26232],{"class":3632},[33,122298,29517],{"class":117},[33,122300,122301],{"class":117}," include\u002Fcudnn",[33,122303,1540],{"class":39},[33,122305,122306],{"class":117},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[33,122308,4340],{"class":59},[33,122310,122311,122313,122315,122318,122320],{"class":35,"line":392},[33,122312,26232],{"class":3632},[33,122314,29517],{"class":117},[33,122316,122317],{"class":117}," lib\u002Flibcudnn",[33,122319,1540],{"class":39},[33,122321,122322],{"class":117},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[33,122324,122325],{"class":35,"line":406},[33,122326,122327],{"class":87},"# 对比一下有没有缺文件\n",[33,122329,122330,122332,122335,122337],{"class":35,"line":418},[33,122331,28417],{"class":3632},[33,122333,122334],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[33,122336,1540],{"class":39},[33,122338,4340],{"class":59},[33,122340,122341,122343,122346],{"class":35,"line":425},[33,122342,28417],{"class":3632},[33,122344,122345],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[33,122347,120883],{"class":39},[33,122349,122350],{"class":35,"line":1147},[33,122351,121932],{"class":87},[33,122353,122354,122356,122358,122361,122363,122365],{"class":35,"line":1329},[33,122355,26232],{"class":3632},[33,122357,26235],{"class":117},[33,122359,122360],{"class":117}," a+r",[33,122362,122334],{"class":117},[33,122364,1540],{"class":39},[33,122366,122367],{"class":59},"   \n",[33,122369,122370,122372,122374,122376,122378],{"class":35,"line":1341},[33,122371,26232],{"class":3632},[33,122373,26235],{"class":117},[33,122375,122360],{"class":117},[33,122377,122345],{"class":117},[33,122379,120883],{"class":39},[162,122381,122382],{"start":130},[165,122383,122384],{},"检查是否安装成功",[23,122386,122388],{"className":120158,"code":122387,"language":120160,"meta":28,"style":28},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[30,122389,122390,122395],{"__ignoreMap":28},[33,122391,122392],{"class":35,"line":36},[33,122393,122394],{"class":87},"# 检查cuDNN版本命令\n",[33,122396,122397,122400,122403,122405,122407,122410,122413],{"class":35,"line":43},[33,122398,122399],{"class":3632},"cat",[33,122401,122402],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[33,122404,26765],{"class":63},[33,122406,31891],{"class":3632},[33,122408,122409],{"class":117}," CUDNN_MAJOR",[33,122411,122412],{"class":39}," -A",[33,122414,49368],{"class":39},[19,122416,122417],{},"出现下图这样的就是安装成功了",[19,122419,122420],{},[3145,122421],{"alt":28,"src":122422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[162,122424,122425],{"start":146},[165,122426,122427],{},"软链接(一般不需要)",[23,122429,122431],{"className":120158,"code":122430,"language":120160,"meta":28,"style":28},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[30,122432,122433,122438],{"__ignoreMap":28},[33,122434,122435],{"class":35,"line":36},[33,122436,122437],{"class":87},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[33,122439,122440,122442],{"class":35,"line":43},[33,122441,26232],{"class":3632},[33,122443,122444],{"class":117}," ldconfig\n",[19,122446,122447],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[23,122449,122454],{"className":122450,"code":122451,"language":122452,"meta":122453,"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,122455,122456,122461,122466,122471,122476,122481,122486],{"__ignoreMap":28},[33,122457,122458],{"class":35,"line":36},[33,122459,122460],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[33,122462,122463],{"class":35,"line":43},[33,122464,122465],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[33,122467,122468],{"class":35,"line":130},[33,122469,122470],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[33,122472,122473],{"class":35,"line":146},[33,122474,122475],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[33,122477,122478],{"class":35,"line":267},[33,122479,122480],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[33,122482,122483],{"class":35,"line":275},[33,122484,122485],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[33,122487,122488],{"class":35,"line":392},[33,122489,122490],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122492,122493],{},"运行下方的命令",[23,122495,122497],{"className":120158,"code":122496,"language":120160,"meta":28,"style":28},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[30,122498,122499,122504,122511,122516],{"__ignoreMap":28},[33,122500,122501],{"class":35,"line":36},[33,122502,122503],{"class":87},"# cd进入CUDA路径\n",[33,122505,122506,122508],{"class":35,"line":43},[33,122507,102915],{"class":39},[33,122509,122510],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[33,122512,122513],{"class":35,"line":130},[33,122514,122515],{"class":87}," # 查看本路径下的需要软链接的文件名\n",[33,122517,122518],{"class":35,"line":146},[33,122519,122520],{"class":3632}," ls\n",[19,122522,122523],{},[3145,122524],{"alt":28,"src":122525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122527,122528,122529,20065,122532,20065,122535,122538],{},"如上图，我需要将",[30,122530,122531],{},"libcudnn_xxx_xxxxx.so.8.9.7",[30,122533,122534],{},"libcudnn_xxx_xxxxx.so.8",[30,122536,122537],{},"libcudnn_xxx_xxxxx.so","软链接",[23,122540,122542],{"className":120158,"code":122541,"language":120160,"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,122543,122544,122549,122565,122579,122593,122607,122621,122635,122649,122654,122660,122665],{"__ignoreMap":28},[33,122545,122546],{"class":35,"line":36},[33,122547,122548],{"class":87},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[33,122550,122551,122553,122556,122559,122562],{"class":35,"line":43},[33,122552,26232],{"class":3632},[33,122554,122555],{"class":117}," ln",[33,122557,122558],{"class":39}," -sf",[33,122560,122561],{"class":117}," libcudnn_cnn_train.so.8.9.7",[33,122563,122564],{"class":117}," libcudnn_cnn_train.so.8\n",[33,122566,122567,122569,122571,122573,122576],{"class":35,"line":130},[33,122568,26232],{"class":3632},[33,122570,122555],{"class":117},[33,122572,122558],{"class":39},[33,122574,122575],{"class":117}," libcudnn_adv_infer.so.8.9.7",[33,122577,122578],{"class":117}," libcudnn_adv_infer.so.8\n",[33,122580,122581,122583,122585,122587,122590],{"class":35,"line":146},[33,122582,26232],{"class":3632},[33,122584,122555],{"class":117},[33,122586,122558],{"class":39},[33,122588,122589],{"class":117}," libcudnn_adv_train.so.8.9.7",[33,122591,122592],{"class":117}," libcudnn_adv_train.so.8\n",[33,122594,122595,122597,122599,122601,122604],{"class":35,"line":267},[33,122596,26232],{"class":3632},[33,122598,122555],{"class":117},[33,122600,122558],{"class":39},[33,122602,122603],{"class":117}," libcudnn_cnn_infer.so.8.9.7",[33,122605,122606],{"class":117}," libcudnn_cnn_infer.so.8\n",[33,122608,122609,122611,122613,122615,122618],{"class":35,"line":275},[33,122610,26232],{"class":3632},[33,122612,122555],{"class":117},[33,122614,122558],{"class":39},[33,122616,122617],{"class":117}," libcudnn.so.8.9.7",[33,122619,122620],{"class":117}," libcudnn.so.8\n",[33,122622,122623,122625,122627,122629,122632],{"class":35,"line":392},[33,122624,26232],{"class":3632},[33,122626,122555],{"class":117},[33,122628,122558],{"class":39},[33,122630,122631],{"class":117}," libcudnn_ops_infer.so.8.9.7",[33,122633,122634],{"class":117}," libcudnn_ops_infer.so.8\n",[33,122636,122637,122639,122641,122643,122646],{"class":35,"line":406},[33,122638,26232],{"class":3632},[33,122640,122555],{"class":117},[33,122642,122558],{"class":39},[33,122644,122645],{"class":117}," libcudnn_ops_train.so.8.9.7",[33,122647,122648],{"class":117}," libcudnn_ops_train.so.8\n",[33,122650,122651],{"class":35,"line":418},[33,122652,122653],{"class":87},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[33,122655,122656,122658],{"class":35,"line":425},[33,122657,26232],{"class":3632},[33,122659,122444],{"class":117},[33,122661,122662],{"class":35,"line":1147},[33,122663,122664],{"class":87},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[33,122666,122667,122669,122672,122675,122677,122680],{"class":35,"line":1329},[33,122668,28417],{"class":3632},[33,122670,122671],{"class":39}," -l",[33,122673,122674],{"class":117}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[33,122676,1540],{"class":39},[33,122678,122679],{"class":117},".so",[33,122681,120883],{"class":39},[633,122683,122685],{"id":122684},"_355-常见问题","3.5.5 常见问题",[162,122687,122688],{},[165,122689,122690],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[23,122692,122694],{"className":120158,"code":122693,"language":120160,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[30,122695,122696],{"__ignoreMap":28},[33,122697,122698,122700,122702],{"class":35,"line":36},[33,122699,26232],{"class":3632},[33,122701,120218],{"class":117},[33,122703,122704],{"class":117}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122706,122707],{},"blacklist-nouveau.conf文件内容如下：",[23,122709,122711],{"className":120158,"code":122710,"language":120160,"meta":28,"style":28},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[30,122712,122713,122721,122728,122740,122750],{"__ignoreMap":28},[33,122714,122715,122718],{"class":35,"line":36},[33,122716,122717],{"class":3632},"blacklist",[33,122719,122720],{"class":117}," nouveau\n",[33,122722,122723,122725],{"class":35,"line":43},[33,122724,122717],{"class":3632},[33,122726,122727],{"class":117}," lbm-nouveau\n",[33,122729,122730,122732,122735,122738],{"class":35,"line":130},[33,122731,117566],{"class":3632},[33,122733,122734],{"class":117}," nouveau",[33,122736,122737],{"class":117}," modeset=",[33,122739,923],{"class":39},[33,122741,122742,122745,122747],{"class":35,"line":146},[33,122743,122744],{"class":39},"alias",[33,122746,122734],{"class":117},[33,122748,122749],{"class":117}," off\n",[33,122751,122752,122754,122757],{"class":35,"line":267},[33,122753,122744],{"class":39},[33,122755,122756],{"class":117}," lbm-nouveau",[33,122758,122749],{"class":117},[19,122760,122761],{},"接着运行下方命令",[23,122763,122765],{"className":120158,"code":122764,"language":120160,"meta":28,"style":28},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[30,122766,122767,122777,122782],{"__ignoreMap":28},[33,122768,122769,122771,122774],{"class":35,"line":36},[33,122770,26232],{"class":3632},[33,122772,122773],{"class":117}," update-initramfs",[33,122775,122776],{"class":39}," -u\n",[33,122778,122779],{"class":35,"line":43},[33,122780,122781],{"class":3632},"或者\n",[33,122783,122784,122786,122789],{"class":35,"line":130},[33,122785,26232],{"class":3632},[33,122787,122788],{"class":117}," dracut",[33,122790,122791],{"class":39}," --force\n",[19,122793,122794],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[23,122796,122798],{"className":120158,"code":122797,"language":120160,"meta":28,"style":28},"lsmod | grep nouveau\n",[30,122799,122800],{"__ignoreMap":28},[33,122801,122802,122805,122807,122809],{"class":35,"line":36},[33,122803,122804],{"class":3632},"lsmod",[33,122806,26765],{"class":63},[33,122808,31891],{"class":3632},[33,122810,122720],{"class":117},[162,122812,122813],{"start":43},[165,122814,122815],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[23,122817,122819],{"className":120158,"code":122818,"language":120160,"meta":28,"style":28},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[30,122820,122821],{"__ignoreMap":28},[33,122822,122823,122825,122827],{"class":35,"line":36},[33,122824,26232],{"class":3632},[33,122826,120218],{"class":117},[33,122828,122829],{"class":117}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122831,122832],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[23,122834,122836],{"className":120158,"code":122835,"language":120160,"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,122837,122838,122846,122854,122862,122869,122877,122887,122895],{"__ignoreMap":28},[33,122839,122840,122843],{"class":35,"line":36},[33,122841,122842],{"class":3632},"Section",[33,122844,122845],{"class":117}," \"OutputClass\"\n",[33,122847,122848,122851],{"class":35,"line":43},[33,122849,122850],{"class":3632},"   Identifier",[33,122852,122853],{"class":117}," \"nvidia\"\n",[33,122855,122856,122859],{"class":35,"line":130},[33,122857,122858],{"class":3632},"   MatchDriver",[33,122860,122861],{"class":117}," \"nvidia-drm\"\n",[33,122863,122864,122867],{"class":35,"line":146},[33,122865,122866],{"class":3632},"   Driver",[33,122868,122853],{"class":117},[33,122870,122871,122874],{"class":35,"line":267},[33,122872,122873],{"class":3632},"   Option",[33,122875,122876],{"class":117}," \"AllowEmptyInitialConfiguration\"\n",[33,122878,122879,122881,122884],{"class":35,"line":275},[33,122880,122873],{"class":3632},[33,122882,122883],{"class":117}," \"PrimaryGPU\"",[33,122885,122886],{"class":117}," \"yes\"\n",[33,122888,122889,122892],{"class":35,"line":392},[33,122890,122891],{"class":3632},"   ModulePath",[33,122893,122894],{"class":117}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[33,122896,122897],{"class":35,"line":406},[33,122898,122899],{"class":3632},"EndSection\n",[162,122901,122902],{"start":130},[165,122903,122904],{},"安装N卡驱动提示错误",[23,122906,122908],{"className":122450,"code":122907,"language":122452,"meta":122453,"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,122909,122910],{"__ignoreMap":28},[33,122911,122912],{"class":35,"line":36},[33,122913,122907],{},[162,122915,122916],{},[165,122917,122918],{},"检查当前运行的内核版本：",[19,122920,122921],{},"运行以下命令以查看你当前正在使用的内核版本：",[23,122923,122925],{"className":118931,"code":122924,"language":118933,"meta":28,"style":28},"uname -r\n",[30,122926,122927],{"__ignoreMap":28},[33,122928,122929,122931],{"class":35,"line":36},[33,122930,71846],{"class":3632},[33,122932,122933],{"class":39}," -r\n",[162,122935,122936],{"start":43},[165,122937,122938],{},"安装内核开发文件：",[19,122940,122941,122942,122945],{},"确保你已经安装了与当前内核版本相匹配的 ",[30,122943,122944],{},"kernel-devel"," 包。运行以下命令来安装：",[23,122947,122949],{"className":118931,"code":122948,"language":118933,"meta":28,"style":28},"sudo dnf install kernel-devel-$(uname -r)\n",[30,122950,122951],{"__ignoreMap":28},[33,122952,122953,122955,122957,122959,122962,122964,122966,122968],{"class":35,"line":36},[33,122954,26232],{"class":3632},[33,122956,27971],{"class":117},[33,122958,25489],{"class":117},[33,122960,122961],{"class":117}," kernel-devel-",[33,122963,26755],{"class":59},[33,122965,71846],{"class":3632},[33,122967,121274],{"class":39},[33,122969,157],{"class":59},[19,122971,122972],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[162,122974,122975],{"start":130},[165,122976,122977],{},"安装内核源代码（如果需要）：",[19,122979,122980],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[23,122982,122984],{"className":118931,"code":122983,"language":118933,"meta":28,"style":28},"sudo dnf install kernel-headers kernel-source\n",[30,122985,122986],{"__ignoreMap":28},[33,122987,122988,122990,122992,122994,122997],{"class":35,"line":36},[33,122989,26232],{"class":3632},[33,122991,27971],{"class":117},[33,122993,25489],{"class":117},[33,122995,122996],{"class":117}," kernel-headers",[33,122998,122999],{"class":117}," kernel-source\n",[162,123001,123002],{"start":146},[165,123003,123004],{},"检查安装：",[19,123006,123007,123008,123011],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[30,123009,123010],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[23,123013,123015],{"className":118931,"code":123014,"language":118933,"meta":28,"style":28},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[30,123016,123017],{"__ignoreMap":28},[33,123018,123019,123021],{"class":35,"line":36},[33,123020,28417],{"class":3632},[33,123022,123023],{"class":117}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123025,123026,123027,123030],{},"如果仍然遇到问题，可以通过 ",[30,123028,123029],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1729,123032,123033],{},"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":43,"depth":43,"links":123035},[123036,123040,123050,123054,123055],{"id":120134,"depth":43,"text":120135,"children":123037},[123038,123039],{"id":120144,"depth":130,"text":120145},{"id":120154,"depth":130,"text":120155},{"id":120354,"depth":43,"text":120355,"children":123041},[123042,123043,123044,123045,123046,123047,123048,123049],{"id":120358,"depth":130,"text":120359},{"id":120428,"depth":130,"text":120429},{"id":120517,"depth":130,"text":120518},{"id":120762,"depth":130,"text":120763},{"id":120832,"depth":130,"text":120833},{"id":120899,"depth":130,"text":120900},{"id":120934,"depth":130,"text":120935},{"id":120989,"depth":130,"text":120990},{"id":121040,"depth":43,"text":121041,"children":123051},[123052,123053],{"id":121044,"depth":130,"text":121045},{"id":121124,"depth":130,"text":121125},{"id":121310,"depth":43,"text":121311},{"id":121483,"depth":43,"text":121484,"children":123056},[123057,123058,123059,123060,123061],{"id":121487,"depth":130,"text":121488},{"id":121528,"depth":130,"text":121529},{"id":121815,"depth":130,"text":121816},{"id":122188,"depth":130,"text":122189},{"id":122684,"depth":130,"text":122685},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120126,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123068,"title":123069,"body":123070,"description":1751,"extension":1752,"meta":123410,"navigation":126,"path":123411,"seo":123412,"stem":123413,"__hash__":123414},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123071,"toc":123408},[123072,123075,123080,123083,123329,123334,123337,123373,123376,123405],[10,123073,123069],{"id":123074},"_4-命令教程长期积累",[162,123076,123077],{},[165,123078,123079],{},"大多数命令",[19,123081,123082],{},"常用 Linux 命令速查：",[23,123084,123086],{"className":118931,"code":123085,"language":118933,"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,123087,123088,123093,123100,123107,123115,123122,123129,123137,123145,123152,123159,123167,123171,123176,123183,123191,123198,123202,123207,123214,123222,123230,123238,123246,123250,123255,123263,123270,123277,123285,123293,123297,123302,123311,123320],{"__ignoreMap":28},[33,123089,123090],{"class":35,"line":36},[33,123091,123092],{"class":87},"# 文件与目录\n",[33,123094,123095,123097],{"class":35,"line":43},[33,123096,28417],{"class":3632},[33,123098,123099],{"class":87},"        # 列出目录内容\n",[33,123101,123102,123104],{"class":35,"line":130},[33,123103,102915],{"class":39},[33,123105,123106],{"class":87},"        # 切换目录\n",[33,123108,123109,123112],{"class":35,"line":146},[33,123110,123111],{"class":39},"pwd",[33,123113,123114],{"class":87},"       # 显示当前路径\n",[33,123116,123117,123119],{"class":35,"line":267},[33,123118,102905],{"class":3632},[33,123120,123121],{"class":87},"     # 创建目录\n",[33,123123,123124,123126],{"class":35,"line":275},[33,123125,26978],{"class":3632},[33,123127,123128],{"class":87},"        # 删除文件或目录\n",[33,123130,123131,123134],{"class":35,"line":392},[33,123132,123133],{"class":3632},"cp",[33,123135,123136],{"class":87},"        # 复制文件或目录\n",[33,123138,123139,123142],{"class":35,"line":406},[33,123140,123141],{"class":3632},"mv",[33,123143,123144],{"class":87},"        # 移动\u002F重命名文件或目录\n",[33,123146,123147,123149],{"class":35,"line":418},[33,123148,102922],{"class":3632},[33,123150,123151],{"class":87},"     # 创建空文件\n",[33,123153,123154,123156],{"class":35,"line":425},[33,123155,122399],{"class":3632},[33,123157,123158],{"class":87},"       # 查看文件内容\n",[33,123160,123161,123164],{"class":35,"line":1147},[33,123162,123163],{"class":3632},"head\u002Ftail",[33,123165,123166],{"class":87}," # 查看文件头部\u002F尾部\n",[33,123168,123169],{"class":35,"line":1329},[33,123170,127],{"emptyLinePlaceholder":126},[33,123172,123173],{"class":35,"line":1341},[33,123174,123175],{"class":87},"# 权限管理\n",[33,123177,123178,123180],{"class":35,"line":1348},[33,123179,26267],{"class":3632},[33,123181,123182],{"class":87},"     # 修改文件权限\n",[33,123184,123185,123188],{"class":35,"line":1529},[33,123186,123187],{"class":3632},"chown",[33,123189,123190],{"class":87},"     # 修改文件所有者\n",[33,123192,123193,123195],{"class":35,"line":1546},[33,123194,26232],{"class":3632},[33,123196,123197],{"class":87},"      # 以管理员身份执行\n",[33,123199,123200],{"class":35,"line":1551},[33,123201,127],{"emptyLinePlaceholder":126},[33,123203,123204],{"class":35,"line":1566},[33,123205,123206],{"class":87},"# 系统信息\n",[33,123208,123209,123211],{"class":35,"line":1578},[33,123210,71846],{"class":3632},[33,123212,123213],{"class":87},"     # 系统信息\n",[33,123215,123216,123219],{"class":35,"line":1583},[33,123217,123218],{"class":3632},"df",[33,123220,123221],{"class":87},"        # 磁盘使用情况\n",[33,123223,123224,123227],{"class":35,"line":3369},[33,123225,123226],{"class":3632},"free",[33,123228,123229],{"class":87},"      # 内存使用情况\n",[33,123231,123232,123235],{"class":35,"line":3396},[33,123233,123234],{"class":3632},"top\u002Fhtop",[33,123236,123237],{"class":87},"  # 进程监控\n",[33,123239,123240,123243],{"class":35,"line":3401},[33,123241,123242],{"class":3632},"ps",[33,123244,123245],{"class":87},"        # 查看进程\n",[33,123247,123248],{"class":35,"line":3418},[33,123249,127],{"emptyLinePlaceholder":126},[33,123251,123252],{"class":35,"line":3423},[33,123253,123254],{"class":87},"# 网络\n",[33,123256,123257,123260],{"class":35,"line":3428},[33,123258,123259],{"class":3632},"ping",[33,123261,123262],{"class":87},"      # 测试网络连通性\n",[33,123264,123265,123267],{"class":35,"line":3433},[33,123266,28505],{"class":3632},[33,123268,123269],{"class":87},"      # 发送 HTTP 请求\n",[33,123271,123272,123274],{"class":35,"line":3447},[33,123273,121924],{"class":3632},[33,123275,123276],{"class":87},"      # 下载文件\n",[33,123278,123279,123282],{"class":35,"line":3452},[33,123280,123281],{"class":3632},"ssh",[33,123283,123284],{"class":87},"       # 远程登录\n",[33,123286,123287,123290],{"class":35,"line":4243},[33,123288,123289],{"class":3632},"scp",[33,123291,123292],{"class":87},"       # 远程文件传输\n",[33,123294,123295],{"class":35,"line":4257},[33,123296,127],{"emptyLinePlaceholder":126},[33,123298,123299],{"class":35,"line":4265},[33,123300,123301],{"class":87},"# 包管理（Debian\u002FUbuntu）\n",[33,123303,123304,123306,123308],{"class":35,"line":4270},[33,123305,119003],{"class":3632},[33,123307,118982],{"class":117},[33,123309,123310],{"class":87},"   # 更新软件源\n",[33,123312,123313,123315,123317],{"class":35,"line":4276},[33,123314,119003],{"class":3632},[33,123316,25489],{"class":117},[33,123318,123319],{"class":87},"  # 安装软件包\n",[33,123321,123322,123324,123326],{"class":35,"line":4282},[33,123323,119003],{"class":3632},[33,123325,27735],{"class":117},[33,123327,123328],{"class":87},"   # 卸载软件包\n",[162,123330,123331],{"start":43},[165,123332,123333],{},"KDE Dolphin 以root打开",[19,123335,123336],{},"kde5",[23,123338,123340],{"className":118931,"code":123339,"language":118933,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[30,123341,123342],{"__ignoreMap":28},[33,123343,123344,123347,123350,123353,123355,123357,123360,123363,123365,123368,123370],{"class":35,"line":36},[33,123345,123346],{"class":3632},"pkexec",[33,123348,123349],{"class":117}," env",[33,123351,123352],{"class":117}," DISPLAY=",[33,123354,29799],{"class":59},[33,123356,29857],{"class":117},[33,123358,123359],{"class":59},"$XAUTHORITY ",[33,123361,123362],{"class":117},"KDE_SESSION_VERSION=",[33,123364,2137],{"class":39},[33,123366,123367],{"class":117}," KDE_FULL_SESSION=",[33,123369,3045],{"class":39},[33,123371,123372],{"class":117}," dolphin\n",[19,123374,123375],{},"kde6",[23,123377,123379],{"className":118931,"code":123378,"language":118933,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[30,123380,123381],{"__ignoreMap":28},[33,123382,123383,123385,123387,123389,123391,123393,123395,123397,123399,123401,123403],{"class":35,"line":36},[33,123384,123346],{"class":3632},[33,123386,123349],{"class":117},[33,123388,123352],{"class":117},[33,123390,29799],{"class":59},[33,123392,29857],{"class":117},[33,123394,123359],{"class":59},[33,123396,123362],{"class":117},[33,123398,2162],{"class":39},[33,123400,123367],{"class":117},[33,123402,3045],{"class":39},[33,123404,123372],{"class":117},[1729,123406,123407],{},"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":43,"depth":43,"links":123409},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123069,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123416,"title":123417,"body":123418,"description":1751,"extension":1752,"meta":123432,"navigation":126,"path":123433,"seo":123434,"stem":123435,"__hash__":123436},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123419,"toc":123430},[123420,123423],[10,123421,123417],{"id":123422},"_5-各种环境配置",[19,123424,123425],{},[2057,123426,123429],{"href":123427,"rel":123428},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25520],"电控组环境搭建大全",{"title":28,"searchDepth":43,"depth":43,"links":123431},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123417,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123438,"title":123439,"body":123440,"description":1751,"extension":1752,"meta":123788,"navigation":126,"path":123789,"seo":123790,"stem":123791,"__hash__":123792},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123441,"toc":123780},[123442,123445,123449,123453,123457,123462,123469,123473,123766,123770,123777],[10,123443,123439],{"id":123444},"_6-拓展功能",[14,123446,123448],{"id":123447},"_61-wine","6.1 Wine",[14,123450,123452],{"id":123451},"_62-android","6.2 Android",[633,123454,123456],{"id":123455},"_621-i卡a卡","6.2.1 I卡、A卡",[162,123458,123459],{},[165,123460,123461],{},"Wayland-Waydroid(体验超级好)",[19,123463,123464,123465],{},"Waydroid 官网与安装指南：",[2057,123466,123467],{"href":123467,"rel":123468},"https:\u002F\u002Fwaydro.id\u002F",[25520],[633,123470,123472],{"id":123471},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[162,123474,123475],{},[165,123476,123477,123478,123480,123481,123485,123487,123490,123495,123692],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55361,123479],{},"BlissOS 官网下载：",[2057,123482,123483],{"href":123483,"rel":123484},"https:\u002F\u002Fblissos.org\u002F",[25520],[55361,123486],{},[3145,123488],{"alt":28,"src":123489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[162,123491,123492],{"start":130},[165,123493,123494],{},"比较推荐的配置",[23,123496,123498],{"className":118931,"code":123497,"language":118933,"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,123499,123500,123507,123517,123527,123537,123549,123559,123566,123576,123585,123594,123604,123614,123623,123633,123643,123655,123665,123674,123684],{"__ignoreMap":28},[33,123501,123502,123505],{"class":35,"line":36},[33,123503,123504],{"class":3632},"qemu-system-x86_64",[33,123506,26334],{"class":39},[33,123508,123509,123512,123515],{"class":35,"line":43},[33,123510,123511],{"class":39},"        -M",[33,123513,123514],{"class":117}," q35,vmport=off",[33,123516,26334],{"class":39},[33,123518,123519,123522,123525],{"class":35,"line":130},[33,123520,123521],{"class":39},"        -accel",[33,123523,123524],{"class":117}," kvm",[33,123526,26334],{"class":39},[33,123528,123529,123532,123535],{"class":35,"line":146},[33,123530,123531],{"class":39},"        -cpu",[33,123533,123534],{"class":117}," qemu64,+sse3,+sse4.2",[33,123536,26334],{"class":39},[33,123538,123539,123542,123545,123547],{"class":35,"line":267},[33,123540,123541],{"class":39},"        -smp",[33,123543,123544],{"class":117}," 8,cores=",[33,123546,2111],{"class":39},[33,123548,26334],{"class":39},[33,123550,123551,123554,123557],{"class":35,"line":275},[33,123552,123553],{"class":39},"        -m",[33,123555,123556],{"class":117}," 6G",[33,123558,26334],{"class":39},[33,123560,123561,123564],{"class":35,"line":392},[33,123562,123563],{"class":39},"        -usb",[33,123565,26334],{"class":39},[33,123567,123568,123571,123574],{"class":35,"line":406},[33,123569,123570],{"class":39},"        -device",[33,123572,123573],{"class":117}," virtio-tablet",[33,123575,26334],{"class":39},[33,123577,123578,123580,123583],{"class":35,"line":418},[33,123579,123570],{"class":39},[33,123581,123582],{"class":117}," virtio-keyboard",[33,123584,26334],{"class":39},[33,123586,123587,123589,123592],{"class":35,"line":425},[33,123588,123570],{"class":39},[33,123590,123591],{"class":117}," usb-tablet",[33,123593,26334],{"class":39},[33,123595,123596,123599,123602],{"class":35,"line":1147},[33,123597,123598],{"class":39},"        -bios",[33,123600,123601],{"class":117}," OVMF-pure-efi64.fd",[33,123603,26334],{"class":39},[33,123605,123606,123609,123612],{"class":35,"line":1329},[33,123607,123608],{"class":39},"        -net",[33,123610,123611],{"class":117}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[33,123613,26334],{"class":39},[33,123615,123616,123618,123621],{"class":35,"line":1341},[33,123617,123608],{"class":39},[33,123619,123620],{"class":117}," nic,model=virtio",[33,123622,26334],{"class":39},[33,123624,123625,123628,123631],{"class":35,"line":1348},[33,123626,123627],{"class":39},"        -audio",[33,123629,123630],{"class":117}," sdl,model=hda",[33,123632,26334],{"class":39},[33,123634,123635,123638,123641],{"class":35,"line":1529},[33,123636,123637],{"class":39},"        -display",[33,123639,123640],{"class":117}," sdl,gl=on,show-cursor=on",[33,123642,26334],{"class":39},[33,123644,123645,123647,123650,123653],{"class":35,"line":1546},[33,123646,123570],{"class":39},[33,123648,123649],{"class":117}," virtio-vga-gl,xres=1920,yres=",[33,123651,123652],{"class":39},"1080",[33,123654,26334],{"class":39},[33,123656,123657,123660,123663],{"class":35,"line":1551},[33,123658,123659],{"class":39},"        -drive",[33,123661,123662],{"class":117}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[33,123664,26334],{"class":39},[33,123666,123667,123669,123672],{"class":35,"line":1566},[33,123668,123659],{"class":39},[33,123670,123671],{"class":117}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[33,123673,26334],{"class":39},[33,123675,123676,123679,123682],{"class":35,"line":1578},[33,123677,123678],{"class":39},"        -monitor",[33,123680,123681],{"class":117}," stdio",[33,123683,26334],{"class":39},[33,123685,123686,123689],{"class":35,"line":1583},[33,123687,123688],{"class":39},"        -serial",[33,123690,123691],{"class":117}," none\n",[162,123693,123694],{"start":267},[165,123695,123696,123697],{},"常用操作：",[162,123698,123699,123702,123758],{},[165,123700,123701],{},"全屏：Ctrl+Alt+F",[165,123703,123704,123705,123710],{},"adb调试",[162,123706,123707],{},[165,123708,123709],{},"使Linux与Android用ADB连接。",[23,123711,123713],{"className":118931,"code":123712,"language":118933,"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,123714,123715,123720,123731,123736,123748,123753],{"__ignoreMap":28},[33,123716,123717],{"class":35,"line":36},[33,123718,123719],{"class":87},"# 连接安卓\n",[33,123721,123722,123725,123728],{"class":35,"line":43},[33,123723,123724],{"class":3632},"adb",[33,123726,123727],{"class":117}," connect",[33,123729,123730],{"class":39}," 127.0.0.1\n",[33,123732,123733],{"class":35,"line":130},[33,123734,123735],{"class":87},"# 打开shell\n",[33,123737,123738,123740,123742,123745],{"class":35,"line":146},[33,123739,123724],{"class":3632},[33,123741,28539],{"class":39},[33,123743,123744],{"class":117}," 127.0.0.1:5555",[33,123746,123747],{"class":117}," shell\n",[33,123749,123750],{"class":35,"line":267},[33,123751,123752],{"class":87},"# 使用root权限\n",[33,123754,123755],{"class":35,"line":275},[33,123756,123757],{"class":3632},"su\n",[165,123759,123760,123761],{},"中文输入法",[162,123762,123763],{},[165,123764,123765],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123767,123769],{"id":123768},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123771,123772,123773],{},"rEFInd 官网与文档：",[2057,123774,123775],{"href":123775,"rel":123776},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25520],[1729,123778,123779],{},"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":43,"depth":43,"links":123781},[123782,123783,123787],{"id":123447,"depth":43,"text":123448},{"id":123451,"depth":43,"text":123452,"children":123784},[123785,123786],{"id":123455,"depth":130,"text":123456},{"id":123471,"depth":130,"text":123472},{"id":123768,"depth":43,"text":123769},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123439,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123794,"title":123795,"body":123796,"description":1751,"extension":1752,"meta":127094,"navigation":126,"path":127095,"seo":127096,"stem":127097,"__hash__":127098},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123797,"toc":127068},[123798,123801,123805,123808,123815,124065,124068,124140,124143,124147,124151,124156,124159,124162,124165,124170,124173,124176,124179,124184,124187,124192,124195,124198,124203,124206,124211,124214,124218,124222,124225,124230,124233,124247,124250,124253,124262,124265,124274,124277,124280,124289,124292,124301,124304,124307,124316,124319,124322,124337,124340,124343,124352,124357,124360,124363,124372,124375,124384,124387,124396,124399,124408,124413,124416,124424,124429,124432,124441,124444,124452,124457,124460,124469,124472,124475,124479,124482,124487,124490,124495,124509,124514,124519,124530,124535,124541,124546,124561,124566,124569,124574,124579,124584,124592,124597,124604,124609,124620,124625,124628,124632,124635,124638,124643,124646,124665,124670,124673,124682,124687,124690,124712,124715,124745,124748,124753,124756,124770,124775,124794,124797,124800,124805,124817,124822,124827,124830,124835,124838,124853,124856,124861,124866,124870,124875,124915,124918,124922,124927,124933,124938,124941,124948,124953,124960,124963,124966,124973,124987,124990,125050,125053,125067,125079,125082,125085,125088,125152,125155,125158,125161,125181,125184,125189,125196,125200,125203,125207,125212,125217,125221,125224,125227,125269,125274,125277,125299,125314,125316,125321,125333,125393,125395,125397,125451,125453,125455,125461,125466,125469,125474,125478,125481,125543,125548,125551,125553,125557,125569,125651,125653,125655,125709,125715,125717,125721,125726,125728,125733,125737,125757,125792,125796,125799,125802,125805,125812,125815,125827,125830,125845,125848,125867,125915,125918,125935,125938,125952,125957,125960,125969,125984,125996,126034,126039,126048,126053,126058,126084,126093,126097,126101,126106,126109,126113,126117,126122,126125,126130,126133,126138,126141,126146,126149,126153,126158,126161,126166,126169,126173,126178,126181,126186,126189,126194,126197,126201,126206,126209,126214,126217,126222,126225,126229,126234,126237,126242,126245,126250,126253,126258,126261,126266,126269,126274,126277,126281,126286,126289,126294,126301,126305,126310,126313,126318,126321,126325,126330,126333,126336,126339,126342,126345,126349,126352,126362,126367,126372,126394,126399,126404,126411,126415,126420,126423,126426,126431,126434,126437,126440,126443,126446,126449,126452,126455,126458,126461,126464,126467,126472,126477,126482,126487,126492,126497,126502,126505,126509,126512,126516,126521,126526,126531,126536,126540,126546,126554,126559,126562,126567,126582,126585,126590,126624,126639,126642,126697,126723,126735,126738,126747,126750,126765,126770,126773,126779,126784,126787,126792,126795,126800,126805,126812,126815,126830,126833,126868,126873,126881,126919,126922,126925,126930,126933,126938,126949,126983,126988,126991,127000,127005,127011,127014,127019,127028,127033,127036,127039,127044,127052,127055,127060,127065],[10,123799,123795],{"id":123800},"_7-其他操作",[14,123802,123804],{"id":123803},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123806,123807],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123809,123810,123811,123814],{},"进入工控机的硬盘目录，进入",[30,123812,123813],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[23,123816,123820],{"className":123817,"code":123818,"language":123819,"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,123821,123822,123830,123841,123848,123855,123867,123874,123886,123897,123908,123915,123922,123929,123941,123953,123960,123972,123984,123991,124003,124015,124027,124038,124045,124056],{"__ignoreMap":28},[33,123823,123824,123827],{"class":35,"line":36},[33,123825,123826],{"class":52945},"network",[33,123828,123829],{"class":59},": \n",[33,123831,123832,123835,123837,123839],{"class":35,"line":43},[33,123833,123834],{"class":52945},"  version",[33,123836,53082],{"class":59},[33,123838,1897],{"class":39},[33,123840,4340],{"class":59},[33,123842,123843,123846],{"class":35,"line":130},[33,123844,123845],{"class":52945},"  wifis",[33,123847,123829],{"class":59},[33,123849,123850,123853],{"class":35,"line":146},[33,123851,123852],{"class":52945},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[33,123854,123829],{"class":59},[33,123856,123857,123860,123862,123865],{"class":35,"line":267},[33,123858,123859],{"class":52945},"      renderer",[33,123861,53082],{"class":59},[33,123863,123864],{"class":117},"NetworkManager",[33,123866,4340],{"class":59},[33,123868,123869,123872],{"class":35,"line":275},[33,123870,123871],{"class":52945},"      match",[33,123873,123829],{"class":59},[33,123875,123876,123879,123881,123884],{"class":35,"line":392},[33,123877,123878],{"class":52945},"        name",[33,123880,53082],{"class":59},[33,123882,123883],{"class":117},"\"wlan0\"",[33,123885,4340],{"class":59},[33,123887,123888,123891,123893,123895],{"class":35,"line":406},[33,123889,123890],{"class":52945},"      dhcp4",[33,123892,53082],{"class":59},[33,123894,3045],{"class":39},[33,123896,4340],{"class":59},[33,123898,123899,123902,123904,123906],{"class":35,"line":418},[33,123900,123901],{"class":52945},"      dhcp6",[33,123903,53082],{"class":59},[33,123905,3045],{"class":39},[33,123907,4340],{"class":59},[33,123909,123910,123913],{"class":35,"line":425},[33,123911,123912],{"class":52945},"      access-points",[33,123914,123829],{"class":59},[33,123916,123917,123920],{"class":35,"line":1147},[33,123918,123919],{"class":117},"        \"EMIS_Vinci_Robocon_5G\"",[33,123921,123829],{"class":59},[33,123923,123924,123927],{"class":35,"line":1329},[33,123925,123926],{"class":52945},"          auth",[33,123928,123829],{"class":59},[33,123930,123931,123934,123936,123939],{"class":35,"line":1341},[33,123932,123933],{"class":52945},"            key-management",[33,123935,53082],{"class":59},[33,123937,123938],{"class":117},"\"psk\"",[33,123940,4340],{"class":59},[33,123942,123943,123946,123948,123951],{"class":35,"line":1348},[33,123944,123945],{"class":52945},"            password",[33,123947,53082],{"class":59},[33,123949,123950],{"class":117},"\"vinci666\"",[33,123952,4340],{"class":59},[33,123954,123955,123958],{"class":35,"line":1529},[33,123956,123957],{"class":52945},"          networkmanager",[33,123959,123829],{"class":59},[33,123961,123962,123965,123967,123970],{"class":35,"line":1546},[33,123963,123964],{"class":52945},"            uuid",[33,123966,53082],{"class":59},[33,123968,123969],{"class":117},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[33,123971,4340],{"class":59},[33,123973,123974,123977,123979,123982],{"class":35,"line":1551},[33,123975,123976],{"class":52945},"            name",[33,123978,53082],{"class":59},[33,123980,123981],{"class":117},"\"EMIS_Vinci_Robocon_5G\"",[33,123983,4340],{"class":59},[33,123985,123986,123989],{"class":35,"line":1566},[33,123987,123988],{"class":52945},"            passthrough",[33,123990,123829],{"class":59},[33,123992,123993,123996,123998,124001],{"class":35,"line":1578},[33,123994,123995],{"class":52945},"              wifi-security.auth-alg",[33,123997,53082],{"class":59},[33,123999,124000],{"class":117},"\"open\"",[33,124002,4340],{"class":59},[33,124004,124005,124008,124010,124013],{"class":35,"line":1583},[33,124006,124007],{"class":52945},"              ipv6.addr-gen-mode",[33,124009,53082],{"class":59},[33,124011,124012],{"class":117},"\"default\"",[33,124014,4340],{"class":59},[33,124016,124017,124020,124022,124025],{"class":35,"line":3369},[33,124018,124019],{"class":52945},"              ipv6.ip6-privacy",[33,124021,53082],{"class":59},[33,124023,124024],{"class":117},"\"-1\"",[33,124026,4340],{"class":59},[33,124028,124029,124032,124034,124036],{"class":35,"line":3396},[33,124030,124031],{"class":52945},"              proxy._",[33,124033,53082],{"class":59},[33,124035,9312],{"class":117},[33,124037,4340],{"class":59},[33,124039,124040,124043],{"class":35,"line":3401},[33,124041,124042],{"class":52945},"      networkmanager",[33,124044,123829],{"class":59},[33,124046,124047,124050,124052,124054],{"class":35,"line":3418},[33,124048,124049],{"class":52945},"        uuid",[33,124051,53082],{"class":59},[33,124053,123969],{"class":117},[33,124055,4340],{"class":59},[33,124057,124058,124060,124062],{"class":35,"line":3423},[33,124059,123878],{"class":52945},[33,124061,53082],{"class":59},[33,124063,124064],{"class":117},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124066,124067],{},"将其改为新wifi的名和密码：",[23,124069,124071],{"className":123817,"code":124070,"language":123819,"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,124072,124073,124079,124088,124094,124101,124110,124118,124124,124130],{"__ignoreMap":28},[33,124074,124075,124077],{"class":35,"line":36},[33,124076,123826],{"class":52945},[33,124078,143],{"class":59},[33,124080,124081,124083,124085],{"class":35,"line":43},[33,124082,123834],{"class":52945},[33,124084,53082],{"class":59},[33,124086,124087],{"class":39},"2\n",[33,124089,124090,124092],{"class":35,"line":130},[33,124091,123845],{"class":52945},[33,124093,143],{"class":59},[33,124095,124096,124099],{"class":35,"line":146},[33,124097,124098],{"class":52945},"    wlan0",[33,124100,143],{"class":59},[33,124102,124103,124105,124107],{"class":35,"line":267},[33,124104,123890],{"class":52945},[33,124106,53082],{"class":59},[33,124108,124109],{"class":39},"true\n",[33,124111,124112,124114,124116],{"class":35,"line":275},[33,124113,123901],{"class":52945},[33,124115,53082],{"class":59},[33,124117,124109],{"class":39},[33,124119,124120,124122],{"class":35,"line":392},[33,124121,123912],{"class":52945},[33,124123,143],{"class":59},[33,124125,124126,124128],{"class":35,"line":406},[33,124127,123919],{"class":117},[33,124129,143],{"class":59},[33,124131,124132,124135,124137],{"class":35,"line":418},[33,124133,124134],{"class":52945},"          password",[33,124136,53082],{"class":59},[33,124138,124139],{"class":117},"\"vinci666\"\n",[19,124141,124142],{},"工控机开机即可连上网。",[14,124144,124146],{"id":124145},"_72-ssh远程开发","7.2 SSH远程开发",[633,124148,124150],{"id":124149},"_721-环境准备","7.2.1 环境准备",[19,124152,124153],{},[1968,124154,124155],{},"1.硬件准备",[19,124157,124158],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124160,124161],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124163,124164],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124166,124167],{},[1968,124168,124169],{},"2.设置固定IP",[19,124171,124172],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124174,124175],{},"1.进入设置界面",[19,124177,124178],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124180,124181],{},[3145,124182],{"alt":28,"src":124183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124185,124186],{},"2.配置所连接的网络",[19,124188,124189],{},[3145,124190],{"alt":28,"src":124191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124193,124194],{},"3.设置固定IP",[19,124196,124197],{},"查看当前IP地址。",[19,124199,124200],{},[3145,124201],{"alt":28,"src":124202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124204,124205],{},"设置固定IP。",[19,124207,124208],{},[3145,124209],{"alt":28,"src":124210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124212,124213],{},"至此，IP配置完毕。",[633,124215,124217],{"id":124216},"_722-环境搭建","7.2.2 环境搭建",[19,124219,124220],{},[1968,124221,27409],{},[19,124223,124224],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124226,124227],{},[1968,124228,124229],{},"实现",[19,124231,124232],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[162,124234,124235,124238,124241,124244],{},[165,124236,124237],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[165,124239,124240],{},"远程主机启动SSH服务；",[165,124242,124243],{},"本地主机登陆远程主机；",[165,124245,124246],{},"实现数据传输。",[19,124248,124249],{},"1.安装SSH客户端与服务端",[19,124251,124252],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[23,124254,124256],{"className":122450,"code":124255,"language":122452,"meta":122453,"style":28}," sudo apt install openssh-server\n",[30,124257,124258],{"__ignoreMap":28},[33,124259,124260],{"class":35,"line":36},[33,124261,124255],{},[19,124263,124264],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[23,124266,124268],{"className":122450,"code":124267,"language":122452,"meta":122453,"style":28},"sudo apt install openssh-client\n",[30,124269,124270],{"__ignoreMap":28},[33,124271,124272],{"class":35,"line":36},[33,124273,124267],{},[19,124275,124276],{},"2.远程主机启动SSH服务",[19,124278,124279],{},"远程主机启动 ssh 服务命令如下：",[23,124281,124283],{"className":122450,"code":124282,"language":122452,"meta":122453,"style":28},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[30,124284,124285],{"__ignoreMap":28},[33,124286,124287],{"class":35,"line":36},[33,124288,124282],{},[19,124290,124291],{},"启动后可使用如下命令查看服务是否正常运行：",[23,124293,124295],{"className":122450,"code":124294,"language":122452,"meta":122453,"style":28},"ps -e | grep ssh\n",[30,124296,124297],{"__ignoreMap":28},[33,124298,124299],{"class":35,"line":36},[33,124300,124294],{},[19,124302,124303],{},"如果启动成功，会包含 sshd 程序。",[19,124305,124306],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[23,124308,124310],{"className":122450,"code":124309,"language":122452,"meta":122453,"style":28},"sudo systemctl enable ssh\n",[30,124311,124312],{"__ignoreMap":28},[33,124313,124314],{"class":35,"line":36},[33,124315,124309],{},[19,124317,124318],{},"3.本地远程登录",[19,124320,124321],{},"登录远程主机可以调用如下命令:",[23,124323,124325],{"className":118931,"code":124324,"language":118933,"meta":28,"style":28},"ssh -X 用户名@ip地址\n",[30,124326,124327],{"__ignoreMap":28},[33,124328,124329,124331,124334],{"class":35,"line":36},[33,124330,123281],{"class":3632},[33,124332,124333],{"class":39}," -X",[33,124335,124336],{"class":117}," 用户名@ip地址\n",[19,124338,124339],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124341,124342],{},"如果退出，可以调用exit命令：",[23,124344,124346],{"className":122450,"code":124345,"language":122452,"meta":122453,"style":28},"exit\n",[30,124347,124348],{"__ignoreMap":28},[33,124349,124350],{"class":35,"line":36},[33,124351,124345],{},[19,124353,124354],{},[1968,124355,124356],{},"4.实现数据传输",[19,124358,124359],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124361,124362],{},"上传文件指令格式如下：",[23,124364,124366],{"className":122450,"code":124365,"language":122452,"meta":122453,"style":28},"scp 本地文件路径 账号@ip:路径\n",[30,124367,124368],{"__ignoreMap":28},[33,124369,124370],{"class":35,"line":36},[33,124371,124365],{},[19,124373,124374],{},"上传文件夹指令格式如下：",[23,124376,124378],{"className":122450,"code":124377,"language":122452,"meta":122453,"style":28},"scp -r 本地文件夹路径 账号@ip:路径\n",[30,124379,124380],{"__ignoreMap":28},[33,124381,124382],{"class":35,"line":36},[33,124383,124377],{},[19,124385,124386],{},"下载文件指令格式如下：",[23,124388,124390],{"className":122450,"code":124389,"language":122452,"meta":122453,"style":28},"scp 账号@ip:路径 本地文件夹路径\n",[30,124391,124392],{"__ignoreMap":28},[33,124393,124394],{"class":35,"line":36},[33,124395,124389],{},[19,124397,124398],{},"下载文件夹指令格式如下：",[23,124400,124402],{"className":122450,"code":124401,"language":122452,"meta":122453,"style":28},"scp -r 账号@ip:路径 本地文件夹路径\n",[30,124403,124404],{"__ignoreMap":28},[33,124405,124406],{"class":35,"line":36},[33,124407,124401],{},[19,124409,124410],{},[1968,124411,124412],{},"优化",[19,124414,124415],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[162,124417,124418,124421],{},[165,124419,124420],{},"本地生成密钥对；",[165,124422,124423],{},"将公钥上传至远程主机。",[19,124425,124426],{},[1968,124427,124428],{},"1.生成密钥对",[19,124430,124431],{},"本地客户端生成公私钥：（一路回车默认即可）",[23,124433,124435],{"className":122450,"code":124434,"language":122452,"meta":122453,"style":28},"ssh-keygen\n",[30,124436,124437],{"__ignoreMap":28},[33,124438,124439],{"class":35,"line":36},[33,124440,124434],{},[19,124442,124443],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[162,124445,124446,124449],{},[165,124447,124448],{},"id_rsa （私钥）；",[165,124450,124451],{},"id_rsa.pub (公钥)。",[19,124453,124454],{},[1968,124455,124456],{},"2.公钥上传",[19,124458,124459],{},"上传指令如下：",[23,124461,124463],{"className":122450,"code":124462,"language":122452,"meta":122453,"style":28},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[30,124464,124465],{"__ignoreMap":28},[33,124466,124467],{"class":35,"line":36},[33,124468,124462],{},[19,124470,124471],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124473,124474],{},"以后再远程登录就无需录入密码了。",[633,124476,124478],{"id":124477},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124480,124481],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124483,124484],{},[1968,124485,124486],{},"1.准备工作",[19,124488,124489],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124491,124492],{},[1968,124493,124494],{},"2.为VScode安装远程开发插件",[19,124496,124497,124498,124501,124502,124505,124506,1628],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[30,124499,124500],{},"扩展：商店","的搜索栏输入",[30,124503,124504],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[30,124507,124508],{},"安装",[19,124510,124511],{},[3145,124512],{"alt":28,"src":124513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124515,124516],{},[1968,124517,124518],{},"3.配置远程连接",[19,124520,124521,124522,124525,124526,124529],{},"步骤1：使用快捷键",[30,124523,124524],{},"ctrl + shift + p","打开命令输入窗口，并输入",[30,124527,124528],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124531,124532],{},[3145,124533],{"alt":28,"src":124534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124536,124537,124538,1628],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[30,124539,124540],{},"Add New SSH Host",[19,124542,124543],{},[3145,124544],{"alt":28,"src":124545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124547,124548,124549,124552,124553,124556,124557,124560],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[30,124550,124551],{},"ssh +X ubuntu@192.168.43.164","，其中，",[30,124554,124555],{},"ubuntu","需要替换为你的登录用户名，",[30,124558,124559],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124562,124563],{},[3145,124564],{"alt":28,"src":124565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124567,124568],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124570,124571],{},[3145,124572],{"alt":28,"src":124573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124575,124576],{},[3145,124577],{"alt":28,"src":124578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124580,124581],{},[1968,124582,124583],{},"4.使用",[19,124585,124586,124587,124525,124589,124591],{},"步骤1：继续使用快捷键",[30,124588,124524],{},[30,124590,124528],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124593,124594],{},[3145,124595],{"alt":28,"src":124596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124598,124599,124600,124603],{},"或者，也可以点击侧边栏的",[30,124601,124602],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124605,124606],{},[3145,124607],{"alt":28,"src":124608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124610,124611,124612,124615,124616,124619],{},"步骤2：选择菜单栏的",[30,124613,124614],{},"文件","下的",[30,124617,124618],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124621,124622],{},[3145,124623],{"alt":28,"src":124624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124626,124627],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124629,124631],{"id":124630},"_73-远程桌面","7.3 远程桌面",[19,124633,124634],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124636,124637],{},"我们选择使用VNC来看。",[162,124639,124640],{},[165,124641,124642],{},"安装VNC服务器：",[19,124644,124645],{},"这里以TigerVNC为例进行安装：",[23,124647,124649],{"className":118931,"code":124648,"language":118933,"meta":28,"style":28},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[30,124650,124651],{"__ignoreMap":28},[33,124652,124653,124655,124657,124659,124662],{"class":35,"line":36},[33,124654,26232],{"class":3632},[33,124656,118952],{"class":117},[33,124658,25489],{"class":117},[33,124660,124661],{"class":117}," tigervnc-standalone-server",[33,124663,124664],{"class":117}," tigervnc-common\n",[162,124666,124667],{"start":43},[165,124668,124669],{},"设置VNC密码：",[19,124671,124672],{},"为VNC用户设置密码，运行以下命令：",[23,124674,124676],{"className":118931,"code":124675,"language":118933,"meta":28,"style":28},"vncpasswd\n",[30,124677,124678],{"__ignoreMap":28},[33,124679,124680],{"class":35,"line":36},[33,124681,124675],{"class":3632},[162,124683,124684],{"start":130},[165,124685,124686],{},"配置VNC启动脚本:",[19,124688,124689],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[23,124691,124693],{"className":118931,"code":124692,"language":118933,"meta":28,"style":28},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[30,124694,124695,124704],{"__ignoreMap":28},[33,124696,124697,124699,124701],{"class":35,"line":36},[33,124698,102905],{"class":3632},[33,124700,30871],{"class":39},[33,124702,124703],{"class":117}," ~\u002F.vnc\n",[33,124705,124706,124709],{"class":35,"line":43},[33,124707,124708],{"class":3632},"nano",[33,124710,124711],{"class":117}," ~\u002F.vnc\u002Fxstartup\n",[19,124713,124714],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[23,124716,124718],{"className":118931,"code":124717,"language":118933,"meta":28,"style":28},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[30,124719,124720,124725,124733,124740],{"__ignoreMap":28},[33,124721,124722],{"class":35,"line":36},[33,124723,124724],{"class":87},"#!\u002Fbin\u002Fsh\n",[33,124726,124727,124730],{"class":35,"line":43},[33,124728,124729],{"class":39},"unset",[33,124731,124732],{"class":117}," SESSION_MANAGER\n",[33,124734,124735,124737],{"class":35,"line":130},[33,124736,124729],{"class":39},[33,124738,124739],{"class":117}," DBUS_SESSION_BUS_ADDRESS\n",[33,124741,124742],{"class":35,"line":146},[33,124743,124744],{"class":3632},"gnome-session\n",[19,124746,124747],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[162,124749,124750],{"start":146},[165,124751,124752],{},"给予执行权限：",[19,124754,124755],{},"为xstartup文件设置执行权限：",[23,124757,124759],{"className":118931,"code":124758,"language":118933,"meta":28,"style":28},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[30,124760,124761],{"__ignoreMap":28},[33,124762,124763,124765,124768],{"class":35,"line":36},[33,124764,26267],{"class":3632},[33,124766,124767],{"class":117}," +x",[33,124769,124711],{"class":117},[162,124771,124772],{"start":267},[165,124773,124774],{},"启动VNC服务器：",[23,124776,124778],{"className":118931,"code":124777,"language":118933,"meta":28,"style":28},"vncserver -geometry 1920x1080 -localhost=0\n",[30,124779,124780],{"__ignoreMap":28},[33,124781,124782,124785,124788,124791],{"class":35,"line":36},[33,124783,124784],{"class":3632},"vncserver",[33,124786,124787],{"class":39}," -geometry",[33,124789,124790],{"class":117}," 1920x1080",[33,124792,124793],{"class":39}," -localhost=0\n",[19,124795,124796],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124798,124799],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[162,124801,124802],{"start":275},[165,124803,124804],{},"查看已开启的VNC服务器：",[23,124806,124808],{"className":118931,"code":124807,"language":118933,"meta":28,"style":28},"vncserver -list\n",[30,124809,124810],{"__ignoreMap":28},[33,124811,124812,124814],{"class":35,"line":36},[33,124813,124784],{"class":3632},[33,124815,124816],{"class":39}," -list\n",[19,124818,124819],{},[3145,124820],{"alt":28,"src":124821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[162,124823,124824],{"start":392},[165,124825,124826],{},"连接到VNC服务器：",[19,124828,124829],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[162,124831,124832],{"start":406},[165,124833,124834],{},"停止VNC服务器：",[19,124836,124837],{},"如果需要停止VNC服务器，可以使用以下命令：",[23,124839,124841],{"className":118931,"code":124840,"language":118933,"meta":28,"style":28},"vncserver -kill :1\n",[30,124842,124843],{"__ignoreMap":28},[33,124844,124845,124847,124850],{"class":35,"line":36},[33,124846,124784],{"class":3632},[33,124848,124849],{"class":39}," -kill",[33,124851,124852],{"class":117}," :1\n",[19,124854,124855],{},"将:1替换为你实际使用的显示编号。",[19,124857,124858],{},[3145,124859],{"alt":28,"src":124860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124862,124863],{},[3145,124864],{"alt":28,"src":124865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124867,124869],{"id":124868},"_74-usb端口设置","7.4 USB端口设置",[19,124871,124872],{},[1968,124873,124874],{},"首先先配置好权限",[23,124876,124878],{"className":118931,"code":124877,"language":118933,"meta":28,"style":28},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[30,124879,124880,124885,124898,124905,124910],{"__ignoreMap":28},[33,124881,124882],{"class":35,"line":36},[33,124883,124884],{"class":87},"# 将用户权限提高\n",[33,124886,124887,124889,124891,124893,124896],{"class":35,"line":43},[33,124888,26232],{"class":3632},[33,124890,28230],{"class":117},[33,124892,28233],{"class":39},[33,124894,124895],{"class":117}," dialout",[33,124897,28238],{"class":59},[33,124899,124900,124902],{"class":35,"line":130},[33,124901,28257],{"class":3632},[33,124903,124904],{"class":117}," dialout\n",[33,124906,124907],{"class":35,"line":146},[33,124908,124909],{"class":87},"# 查看下面命令是否输出dialout（若输出才正常）\n",[33,124911,124912],{"class":35,"line":267},[33,124913,124914],{"class":3632},"groups\n",[19,124916,124917],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[633,124919,124921],{"id":124920},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124923,124924,124926],{},[1968,124925,1173],{}," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124928,124929,124932],{},[1968,124930,124931],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124934,124935],{},[1968,124936,124937],{},"流程如下：",[19,124939,124940],{},"（1）.查找设备idVendor和idProduct",[19,124942,124943,124944,124947],{},"接入两个USB设备，在终端调用指令",[30,124945,124946],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124949,124950],{},[3145,124951],{"alt":28,"src":124952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124954,124955,124956,124959],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[30,124957,124958],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124961,124962],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124964,124965],{},"（2）.编写映射规则",[19,124967,124968,124969,124972],{},"在",[30,124970,124971],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[23,124974,124976],{"className":118931,"code":124975,"language":118933,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[30,124977,124978],{"__ignoreMap":28},[33,124979,124980,124982,124984],{"class":35,"line":36},[33,124981,26232],{"class":3632},[33,124983,120218],{"class":117},[33,124985,124986],{"class":117}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124988,124989],{},"输入如下内容：",[23,124991,124993],{"className":118931,"code":124992,"language":118933,"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,124994,124995,125025],{"__ignoreMap":28},[33,124996,124997,125000,125002,125005,125008,125011,125014,125016,125019,125022],{"class":35,"line":36},[33,124998,124999],{"class":59},"KERNEL",[33,125001,64],{"class":63},[33,125003,125004],{"class":117},"=\"ttyUSB*\",",[33,125006,125007],{"class":3632}," ATTRS",[33,125009,125010],{"class":117},"{idVendor}==",[33,125012,125013],{"class":3632},"\"10c4\"",[33,125015,2196],{"class":3632},[33,125017,125018],{"class":117}," ATTRS{idProduct}==\"ea60\",",[33,125020,125021],{"class":117}," MODE:=\"0777\",",[33,125023,125024],{"class":117}," SYMLINK+=\"mylidar\"\n",[33,125026,125027,125029,125031,125033,125035,125037,125040,125042,125045,125047],{"class":35,"line":43},[33,125028,124999],{"class":59},[33,125030,64],{"class":63},[33,125032,125004],{"class":117},[33,125034,125007],{"class":3632},[33,125036,125010],{"class":117},[33,125038,125039],{"class":3632},"\"1a86\"",[33,125041,2196],{"class":3632},[33,125043,125044],{"class":117}," ATTRS{idProduct}==\"7523\",",[33,125046,125021],{"class":117},[33,125048,125049],{"class":117}," SYMLINK+=\"mycar\"\n",[19,125051,125052],{},"代码解释：",[2822,125054,125055,125058,125061,125064],{},[165,125056,125057],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[165,125059,125060],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[165,125062,125063],{},"SYMLINK是符号连接，即绑定的别名；",[165,125065,125066],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125068,125069,125070,125073,125076],{},"***小提示：***",[25208,125071,125072],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[30,125074,125075],{},"\u002Fetc\u002Fudev\u002Frule.d",[25208,125077,125078],{},"目录即可。",[19,125080,125081],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125083,125084],{},"（3）.使规则生效",[19,125086,125087],{},"在终端下输入如下指令：",[23,125089,125091],{"className":118931,"code":125090,"language":118933,"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,125092,125093,125098,125110,125121,125125,125130,125143],{"__ignoreMap":28},[33,125094,125095],{"class":35,"line":36},[33,125096,125097],{"class":87},"# Ubuntu用下方命令\n",[33,125099,125100,125102,125104,125107],{"class":35,"line":43},[33,125101,26232],{"class":3632},[33,125103,121683],{"class":117},[33,125105,125106],{"class":117}," udev",[33,125108,125109],{"class":117}," reload\n",[33,125111,125112,125114,125116,125118],{"class":35,"line":130},[33,125113,26232],{"class":3632},[33,125115,121683],{"class":117},[33,125117,125106],{"class":117},[33,125119,125120],{"class":117}," restart\n",[33,125122,125123],{"class":35,"line":146},[33,125124,127],{"emptyLinePlaceholder":126},[33,125126,125127],{"class":35,"line":267},[33,125128,125129],{"class":87},"#Fedora用下方命令\n",[33,125131,125132,125134,125137,125140],{"class":35,"line":275},[33,125133,26232],{"class":3632},[33,125135,125136],{"class":117}," udevadm",[33,125138,125139],{"class":117}," control",[33,125141,125142],{"class":39}," --reload\n",[33,125144,125145,125147,125149],{"class":35,"line":392},[33,125146,26232],{"class":3632},[33,125148,125136],{"class":117},[33,125150,125151],{"class":117}," trigger\n",[19,125153,125154],{},"再重新插拔设备即可。",[19,125156,125157],{},"（4）.测试",[19,125159,125160],{},"终端下输入如下指令",[23,125162,125164],{"className":118931,"code":125163,"language":118933,"meta":28,"style":28},"ll \u002Fdev | grep ttyUSB\n",[30,125165,125166],{"__ignoreMap":28},[33,125167,125168,125171,125174,125176,125178],{"class":35,"line":36},[33,125169,125170],{"class":3632},"ll",[33,125172,125173],{"class":117}," \u002Fdev",[33,125175,26765],{"class":63},[33,125177,31891],{"class":3632},[33,125179,125180],{"class":117}," ttyUSB\n",[19,125182,125183],{},"运行结果如下：",[19,125185,125186],{},[3145,125187],{"alt":28,"src":125188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125190,125191,125192,125195],{},"也可以多次插拔USB设备，会发现设备端口",[30,125193,125194],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125197,125198],{},[1968,125199,119599],{},[19,125201,125202],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[633,125204,125206],{"id":125205},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125208,125209,125211],{},[1968,125210,1173],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125213,125214,125216],{},[1968,125215,124931],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125218,125219],{},[1968,125220,124937],{},[19,125222,125223],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125225,125226],{},"调用如下指令查看第一台雷达的USB信息：",[23,125228,125230],{"className":118931,"code":125229,"language":118933,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[30,125231,125232,125252],{"__ignoreMap":28},[33,125233,125234,125237,125239,125242,125245,125247,125249],{"class":35,"line":36},[33,125235,125236],{"class":3632},"udevadm",[33,125238,71463],{"class":117},[33,125240,125241],{"class":39}," --attribute-walk",[33,125243,125244],{"class":39}," --name=\u002Fdev\u002FttyUSB0",[33,125246,26765],{"class":63},[33,125248,31891],{"class":3632},[33,125250,125251],{"class":117}," KERNELS\n",[33,125253,125254,125256,125258,125260,125263,125265,125267],{"class":35,"line":43},[33,125255,125236],{"class":3632},[33,125257,71463],{"class":117},[33,125259,125241],{"class":39},[33,125261,125262],{"class":39}," --name=\u002Fdev\u002FttyACM0",[33,125264,26765],{"class":63},[33,125266,31891],{"class":3632},[33,125268,125251],{"class":117},[19,125270,125271],{},[3145,125272],{"alt":28,"src":125273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125275,125276],{},"调用如下指令查看第二台雷达的USB信息：",[23,125278,125280],{"className":118931,"code":125279,"language":118933,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[30,125281,125282],{"__ignoreMap":28},[33,125283,125284,125286,125288,125290,125293,125295,125297],{"class":35,"line":36},[33,125285,125236],{"class":3632},[33,125287,71463],{"class":117},[33,125289,125241],{"class":39},[33,125291,125292],{"class":39}," --name=\u002Fdev\u002FttyUSB1",[33,125294,26765],{"class":63},[33,125296,31891],{"class":3632},[33,125298,125251],{"class":117},[19,125300,125301,125302,125305,125306,125309,125310,125313],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[30,125303,125304],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[30,125307,125308],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[1968,125311,125312],{},"唯一性标识","”。",[19,125315,124965],{},[19,125317,124968,125318,125320],{},[30,125319,124971],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[23,125322,125323],{"className":118931,"code":124975,"language":118933,"meta":28,"style":28},[30,125324,125325],{"__ignoreMap":28},[33,125326,125327,125329,125331],{"class":35,"line":36},[33,125328,26232],{"class":3632},[33,125330,120218],{"class":117},[33,125332,124986],{"class":117},[23,125334,125336],{"className":118931,"code":125335,"language":118933,"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,125337,125338,125367],{"__ignoreMap":28},[33,125339,125340,125342,125344,125346,125349,125351,125354,125357,125359,125362,125364],{"class":35,"line":36},[33,125341,124999],{"class":59},[33,125343,64],{"class":63},[33,125345,125004],{"class":117},[33,125347,125348],{"class":59}," KERNELS",[33,125350,64],{"class":63},[33,125352,125353],{"class":117},"=\"1-1.3:1.0\",",[33,125355,125356],{"class":3632}," MODE:",[33,125358,64],{"class":117},[33,125360,125361],{"class":3632},"\"0777\"",[33,125363,2196],{"class":3632},[33,125365,125366],{"class":117}," SYMLINK+=\"rplidar_front\"\n",[33,125368,125369,125371,125373,125375,125377,125379,125382,125384,125386,125388,125390],{"class":35,"line":43},[33,125370,124999],{"class":59},[33,125372,64],{"class":63},[33,125374,125004],{"class":117},[33,125376,125348],{"class":59},[33,125378,64],{"class":63},[33,125380,125381],{"class":117},"=\"1-1.4:1.0\",",[33,125383,125356],{"class":3632},[33,125385,64],{"class":117},[33,125387,125361],{"class":3632},[33,125389,2196],{"class":3632},[33,125391,125392],{"class":117}," SYMLINK+=\"rplidar_back\"\n",[19,125394,125084],{},[19,125396,125087],{},[23,125398,125399],{"className":118931,"code":125090,"language":118933,"meta":28,"style":28},[30,125400,125401,125405,125415,125425,125429,125433,125443],{"__ignoreMap":28},[33,125402,125403],{"class":35,"line":36},[33,125404,125097],{"class":87},[33,125406,125407,125409,125411,125413],{"class":35,"line":43},[33,125408,26232],{"class":3632},[33,125410,121683],{"class":117},[33,125412,125106],{"class":117},[33,125414,125109],{"class":117},[33,125416,125417,125419,125421,125423],{"class":35,"line":130},[33,125418,26232],{"class":3632},[33,125420,121683],{"class":117},[33,125422,125106],{"class":117},[33,125424,125120],{"class":117},[33,125426,125427],{"class":35,"line":146},[33,125428,127],{"emptyLinePlaceholder":126},[33,125430,125431],{"class":35,"line":267},[33,125432,125129],{"class":87},[33,125434,125435,125437,125439,125441],{"class":35,"line":275},[33,125436,26232],{"class":3632},[33,125438,125136],{"class":117},[33,125440,125139],{"class":117},[33,125442,125142],{"class":39},[33,125444,125445,125447,125449],{"class":35,"line":392},[33,125446,26232],{"class":3632},[33,125448,125136],{"class":117},[33,125450,125151],{"class":117},[19,125452,125154],{},[19,125454,125157],{},[19,125456,125160,125457,125460],{},[30,125458,125459],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125462,125463],{},[3145,125464],{"alt":28,"src":125465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125467,125468],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125470,125471,125473],{},[1968,125472,119599],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[633,125475,125477],{"id":125476},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125479,125480],{},"（1）.查看所连接的主机USB接口的信息",[23,125482,125484],{"className":118931,"code":125483,"language":118933,"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,125485,125486,125516],{"__ignoreMap":28},[33,125487,125488,125490,125492,125495,125497,125499,125501,125503,125506,125509,125511,125514],{"class":35,"line":36},[33,125489,125236],{"class":3632},[33,125491,71463],{"class":117},[33,125493,125494],{"class":39}," -a",[33,125496,30871],{"class":39},[33,125498,30077],{"class":59},[33,125500,125236],{"class":3632},[33,125502,71463],{"class":117},[33,125504,125505],{"class":39}," -q",[33,125507,125508],{"class":117}," path",[33,125510,26771],{"class":39},[33,125512,125513],{"class":117}," \u002Fdev\u002FttyACM0",[33,125515,157],{"class":59},[33,125517,125518,125520,125522,125524,125526,125528,125530,125532,125534,125536,125538,125541],{"class":35,"line":43},[33,125519,125236],{"class":3632},[33,125521,71463],{"class":117},[33,125523,125494],{"class":39},[33,125525,30871],{"class":39},[33,125527,30077],{"class":59},[33,125529,125236],{"class":3632},[33,125531,71463],{"class":117},[33,125533,125505],{"class":39},[33,125535,125508],{"class":117},[33,125537,26771],{"class":39},[33,125539,125540],{"class":117}," \u002Fdev\u002FttyUSB0",[33,125542,157],{"class":59},[19,125544,125545],{},[3145,125546],{"alt":28,"src":125547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125549,125550],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125552,124965],{},[19,125554,124968,125555,125320],{},[30,125556,124971],{},[23,125558,125559],{"className":118931,"code":124975,"language":118933,"meta":28,"style":28},[30,125560,125561],{"__ignoreMap":28},[33,125562,125563,125565,125567],{"class":35,"line":36},[33,125564,26232],{"class":3632},[33,125566,120218],{"class":117},[33,125568,124986],{"class":117},[23,125570,125572],{"className":118931,"code":125571,"language":118933,"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,125573,125574,125602,125628],{"__ignoreMap":28},[33,125575,125576,125578,125580,125583,125585,125587,125589,125591,125594,125597,125599],{"class":35,"line":36},[33,125577,124999],{"class":59},[33,125579,64],{"class":63},[33,125581,125582],{"class":117},"=\"ttyACM*\",",[33,125584,125007],{"class":3632},[33,125586,125010],{"class":117},[33,125588,125039],{"class":3632},[33,125590,2196],{"class":3632},[33,125592,125593],{"class":117}," ATTRS{idProduct}==\"55d4\",",[33,125595,125596],{"class":117}," ATTRS{serial}==\"0001\",",[33,125598,125021],{"class":117},[33,125600,125601],{"class":117}," SYMLINK+=\"ttyACM_MCU\"\n",[33,125603,125604,125606,125608,125610,125612,125614,125616,125618,125620,125623,125625],{"class":35,"line":43},[33,125605,124999],{"class":59},[33,125607,64],{"class":63},[33,125609,125582],{"class":117},[33,125611,125007],{"class":3632},[33,125613,125010],{"class":117},[33,125615,125039],{"class":3632},[33,125617,2196],{"class":3632},[33,125619,125593],{"class":117},[33,125621,125622],{"class":117}," ATTRS{serial}==\"0002\",",[33,125624,125021],{"class":117},[33,125626,125627],{"class":117}," SYMLINK+=\"ttyACM_Lidar\"\n",[33,125629,125630,125632,125634,125636,125638,125640,125642,125644,125646,125648],{"class":35,"line":130},[33,125631,124999],{"class":59},[33,125633,64],{"class":63},[33,125635,125004],{"class":117},[33,125637,125007],{"class":3632},[33,125639,125010],{"class":117},[33,125641,125039],{"class":3632},[33,125643,2196],{"class":3632},[33,125645,125044],{"class":117},[33,125647,125021],{"class":117},[33,125649,125650],{"class":117}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125652,125084],{},[19,125654,125087],{},[23,125656,125657],{"className":118931,"code":125090,"language":118933,"meta":28,"style":28},[30,125658,125659,125663,125673,125683,125687,125691,125701],{"__ignoreMap":28},[33,125660,125661],{"class":35,"line":36},[33,125662,125097],{"class":87},[33,125664,125665,125667,125669,125671],{"class":35,"line":43},[33,125666,26232],{"class":3632},[33,125668,121683],{"class":117},[33,125670,125106],{"class":117},[33,125672,125109],{"class":117},[33,125674,125675,125677,125679,125681],{"class":35,"line":130},[33,125676,26232],{"class":3632},[33,125678,121683],{"class":117},[33,125680,125106],{"class":117},[33,125682,125120],{"class":117},[33,125684,125685],{"class":35,"line":146},[33,125686,127],{"emptyLinePlaceholder":126},[33,125688,125689],{"class":35,"line":267},[33,125690,125129],{"class":87},[33,125692,125693,125695,125697,125699],{"class":35,"line":275},[33,125694,26232],{"class":3632},[33,125696,125136],{"class":117},[33,125698,125139],{"class":117},[33,125700,125142],{"class":39},[33,125702,125703,125705,125707],{"class":35,"line":392},[33,125704,26232],{"class":3632},[33,125706,125136],{"class":117},[33,125708,125151],{"class":117},[19,125710,125711,125712],{},"再重新插拔设备即可，或者 ",[1968,125713,125714],{},"直接重启系统。",[19,125716,125157],{},[19,125718,125160,125719,125460],{},[30,125720,125459],{},[19,125722,125723],{},[3145,125724],{"alt":28,"src":125725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125727,125468],{},[19,125729,125730,125732],{},[1968,125731,119599],{}," 一些设备可能没有串口号等。",[633,125734,125736],{"id":125735},"_744-其他注意事项","7.4.4 其他注意事项",[19,125738,125739,125740,125742,125743,125746,125747,20065,125750,125753,125754,125756],{},"并非所有的USB设备端口号都是",[30,125741,125194],{},"的格式，比如Arduino的端口号可能是",[30,125744,125745],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[30,125748,125749],{},"videon",[30,125751,125752],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[30,125755,125749],{},"端口，绑定时需要关联的也是该接口。",[19,125758,125759,125760,125763,125764,125767,125768,125770,125771,125774,125775,125778,125779,125782,125783,125782,125786,125782,125789,1628],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[30,125761,125762],{},"KERNEL==\"ttyUSB*\"","修改为",[30,125765,125766],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[30,125769,125762],{},"修改为类似于",[30,125772,125773],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[30,125776,125777],{},"video[0,2,4,6]","表示可以绑定的端口为",[30,125780,125781],{},"video0","或",[30,125784,125785],{},"video2",[30,125787,125788],{},"video4",[30,125790,125791],{},"video6",[14,125793,125795],{"id":125794},"_75-挂载内网网页","7.5 挂载内网网页",[19,125797,125798],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125800,125801],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125803,125804],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125806,125807,125808],{},"Termux 下载地址（F-Droid）：",[2057,125809,125810],{"href":125810,"rel":125811},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25520],[19,125813,125814],{},"首先打开app后，先更新软件缓存：",[23,125816,125818],{"className":118931,"code":125817,"language":118933,"meta":28,"style":28},"pkg update\n",[30,125819,125820],{"__ignoreMap":28},[33,125821,125822,125825],{"class":35,"line":36},[33,125823,125824],{"class":3632},"pkg",[33,125826,27898],{"class":117},[19,125828,125829],{},"然后换源",[23,125831,125833],{"className":118931,"code":125832,"language":118933,"meta":28,"style":28},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[30,125834,125835],{"__ignoreMap":28},[33,125836,125837,125839,125842],{"class":35,"line":36},[33,125838,124708],{"class":3632},[33,125840,125841],{"class":59}," $PREFIX",[33,125843,125844],{"class":117},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125846,125847],{},"将该文件内容替换为下面：",[23,125849,125851],{"className":118931,"code":125850,"language":118933,"meta":28,"style":28},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[30,125852,125853],{"__ignoreMap":28},[33,125854,125855,125858,125861,125864],{"class":35,"line":36},[33,125856,125857],{"class":3632},"deb",[33,125859,125860],{"class":117}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[33,125862,125863],{"class":117}," stable",[33,125865,125866],{"class":117}," main\n",[2822,125868,125869,125896],{},[165,125870,125871,125872,125874,125875],{},"如果你使用的是",[30,125873,124708],{},"编辑器：",[2822,125876,125877,125884,125890],{},[165,125878,125879,125880,125883],{},"按 ",[30,125881,125882],{},"Ctrl+O"," 保存文件。",[165,125885,125879,125886,125889],{},[30,125887,125888],{},"Enter"," 确认文件名。",[165,125891,125879,125892,125895],{},[30,125893,125894],{},"Ctrl+X"," 退出编辑器。",[165,125897,125871,125898,125874,125901],{},[30,125899,125900],{},"vim",[2822,125902,125903,125909],{},[165,125904,125879,125905,125908],{},[30,125906,125907],{},"Esc"," 退出编辑模式。",[165,125910,125911,125912,125914],{},"输入 ",[30,125913,120856],{}," 保存并退出。",[19,125916,125917],{},"接下来重新更新软件源：",[23,125919,125921],{"className":118931,"code":125920,"language":118933,"meta":28,"style":28},"pkg update && pkg upgrade\n",[30,125922,125923],{"__ignoreMap":28},[33,125924,125925,125927,125929,125931,125933],{"class":35,"line":36},[33,125926,125824],{"class":3632},[33,125928,118982],{"class":117},[33,125930,27846],{"class":59},[33,125932,125824],{"class":3632},[33,125934,118968],{"class":117},[19,125936,125937],{},"安装python：",[23,125939,125941],{"className":118931,"code":125940,"language":118933,"meta":28,"style":28},"pkg install python\n",[30,125942,125943],{"__ignoreMap":28},[33,125944,125945,125947,125949],{"class":35,"line":36},[33,125946,125824],{"class":3632},[33,125948,25489],{"class":117},[33,125950,125951],{"class":117}," python\n",[19,125953,125954,28129],{},[1968,125955,125956],{},"通过Termux访问设备存储",[19,125958,125959],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[23,125961,125963],{"className":118931,"code":125962,"language":118933,"meta":28,"style":28},"termux-setup-storage\n",[30,125964,125965],{"__ignoreMap":28},[33,125966,125967],{"class":35,"line":36},[33,125968,125962],{"class":3632},[162,125970,125971],{},[165,125972,125973,28129,125976],{},[1968,125974,125975],{},"进入HTML文件所在的目录",[162,125977,125978],{},[165,125979,125980,125981,125983],{},"使用",[30,125982,102915],{},"命令进入HTML文件所在的目录：",[23,125985,125987],{"className":118931,"code":125986,"language":118933,"meta":28,"style":28},"cd ~\u002Fyour_html_folder\n",[30,125988,125989],{"__ignoreMap":28},[33,125990,125991,125993],{"class":35,"line":36},[33,125992,102915],{"class":39},[33,125994,125995],{"class":117}," ~\u002Fyour_html_folder\n",[162,125997,125998],{"start":43},[165,125999,126000,28129,126003,126008,126025],{},[1968,126001,126002],{},"启动Python HTTP服务器",[162,126004,126005],{},[165,126006,126007],{},"运行以下命令启动一个简单的HTTP服务器：",[23,126009,126011],{"className":118931,"code":126010,"language":118933,"meta":28,"style":28},"python -m http.server 8000\n",[30,126012,126013],{"__ignoreMap":28},[33,126014,126015,126017,126019,126022],{"class":35,"line":36},[33,126016,27],{"class":3632},[33,126018,102521],{"class":39},[33,126020,126021],{"class":117}," http.server",[33,126023,126024],{"class":39}," 8000\n",[162,126026,126027],{"start":130},[165,126028,126029,126030,126033],{},"这会在端口",[30,126031,126032],{},"8000","上启动一个Web服务器。",[2822,126035,126036],{},[165,126037,126038],{},"启动服务器后，Termux会显示日志信息，例如：",[23,126040,126042],{"className":122450,"code":126041,"language":122452,"meta":122453,"style":28},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[30,126043,126044],{"__ignoreMap":28},[33,126045,126046],{"class":35,"line":36},[33,126047,126041],{},[2822,126049,126050],{},[165,126051,126052],{},"这表示服务器已成功启动。",[19,126054,126055],{},[1968,126056,126057],{},"在浏览器中访问HTML文件",[162,126059,126060],{},[165,126061,126062,28129,126065,126070],{},[1968,126063,126064],{},"在同一设备上访问",[162,126066,126067],{},[165,126068,126069],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[23,126071,126074],{"className":126072,"code":126073,"language":73305,"meta":28,"style":28},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[30,126075,126076],{"__ignoreMap":28},[33,126077,126078,126081],{"class":35,"line":36},[33,126079,126080],{"class":59},"http:",[33,126082,126083],{"class":87},"\u002F\u002Flocalhost:8000\n",[2822,126085,126086],{},[165,126087,126088,126089,126092],{},"如果HTML文件中有",[30,126090,126091],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126094,126096],{"id":126095},"_76-linux重点知识","7.6 Linux重点知识",[633,126098,126100],{"id":126099},"_761-关于点的说明","7.6.1 关于点的说明",[19,126102,126103],{},[3145,126104],{"alt":28,"src":126105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126107,126108],{},"一点本目录，两点上目录",[633,126110,126112],{"id":126111},"_762-目录","7.6.2 目录",[23653,126114,126116],{"id":126115},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126118,126119],{},[1968,126120,126121],{},"\u002Fboot:",[19,126123,126124],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126126,126127],{},[1968,126128,126129],{},"\u002Fetc:",[19,126131,126132],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126134,126135],{},[1968,126136,126137],{},"\u002Flib：",[19,126139,126140],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126142,126143],{},[1968,126144,126145],{},"\u002Fsys:",[19,126147,126148],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23653,126150,126152],{"id":126151},"_7622-指令集合","7.6.2.2 指令集合",[19,126154,126155],{},[1968,126156,126157],{},"\u002Fbin:",[19,126159,126160],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126162,126163],{},[1968,126164,126165],{},"\u002Fsbin:",[19,126167,126168],{},"只有系统管理员才能使用的程序和指令",[23653,126170,126172],{"id":126171},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126174,126175],{},[1968,126176,126177],{},"\u002Fdev:",[19,126179,126180],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126182,126183],{},[1968,126184,126185],{},"\u002Fmedia:",[19,126187,126188],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126190,126191],{},[1968,126192,126193],{},"\u002Fmnt:",[19,126195,126196],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23653,126198,126200],{"id":126199},"_7624-临时文件","7.6.2.4 临时文件",[19,126202,126203],{},[1968,126204,126205],{},"\u002Frun:",[19,126207,126208],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126210,126211],{},[1968,126212,126213],{},"\u002Flost+found:",[19,126215,126216],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126218,126219],{},[1968,126220,126221],{},"\u002Ftmp:",[19,126223,126224],{},"这个目录是用来存放一些临时文件的",[23653,126226,126228],{"id":126227},"_7625-账户","7.6.2.5 账户",[19,126230,126231],{},[1968,126232,126233],{},"\u002Froot：",[19,126235,126236],{},"系统管理员的用户主目录",[19,126238,126239,28129],{},[1968,126240,126241],{},"\u002Fhome",[19,126243,126244],{},"用户的主目录，以用户的账号命名的",[19,126246,126247,28129],{},[1968,126248,126249],{},"\u002Fusr",[19,126251,126252],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126254,126255],{},[1968,126256,126257],{},"\u002Fusr\u002Fbin：",[19,126259,126260],{},"系统用户使用的应用程序与指令",[19,126262,126263],{},[1968,126264,126265],{},"\u002Fusr\u002Fsbin：",[19,126267,126268],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126270,126271],{},[1968,126272,126273],{},"\u002Fusr\u002Fsrc：",[19,126275,126276],{},"内核源代码默认的放置目录",[23653,126278,126280],{"id":126279},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126282,126283],{},[1968,126284,126285],{},"\u002Fvar：",[19,126287,126288],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126290,126291],{},[1968,126292,126293],{},"\u002Fproc:",[19,126295,126296,126297,126300],{},"管理 ",[1968,126298,126299],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23653,126302,126304],{"id":126303},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126306,126307],{},[1968,126308,126309],{},"\u002Fopt:",[19,126311,126312],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126314,126315],{},[1968,126316,126317],{},"\u002Fsrv:",[19,126319,126320],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[633,126322,126324],{"id":126323},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126326,126327],{},[3145,126328],{"alt":28,"src":126329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126331,126332],{},"windows-->linux:",[19,126334,126335],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126337,126338],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126340,126341],{},"linux传输文件到windows",[19,126343,126344],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[633,126346,126348],{"id":126347},"_764-易忘知识","7.6.4 易忘知识",[19,126350,126351],{},"操作系统内核查看",[23,126353,126354],{"className":118931,"code":122924,"language":118933,"meta":28,"style":28},[30,126355,126356],{"__ignoreMap":28},[33,126357,126358,126360],{"class":35,"line":36},[33,126359,71846],{"class":3632},[33,126361,122933],{"class":39},[19,126363,126364],{},[3145,126365],{"alt":28,"src":126366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126368,126369],{},[3145,126370],{"alt":28,"src":126371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[23,126373,126375],{"className":118931,"code":126374,"language":118933,"meta":28,"style":28},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[30,126376,126377,126389],{"__ignoreMap":28},[33,126378,126379,126381,126384,126387],{"class":35,"line":36},[33,126380,123141],{"class":3632},[33,126382,126383],{"class":117}," mvtest",[33,126385,126386],{"class":117}," mvtest2",[33,126388,4340],{"class":59},[33,126390,126391],{"class":35,"line":43},[33,126392,126393],{"class":3632},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126395,126396],{},[3145,126397],{"alt":28,"src":126398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126400,126401],{},[3145,126402],{"alt":28,"src":126403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126405,126406,126407,126410],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[30,126408,126409],{},"du -a"," 可以快速查看磁盘使用细节。",[633,126412,126414],{"id":126413},"_765-vim","7.6.5 Vim",[19,126416,126417],{},[3145,126418],{"alt":28,"src":126419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126421,126422],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126424,126425],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126427,126428],{},[1968,126429,126430],{},"1.命令模式：",[19,126432,126433],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126435,126436],{},"x 删除当前光标所在处的字符",[19,126438,126439],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126441,126442],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126444,126445],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126447,126448],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126450,126451],{},"dd 剪切当前行",[19,126453,126454],{},"yy 复制当前行",[19,126456,126457],{},"p 粘贴剪贴板内容到光标下方",[19,126459,126460],{},"P 粘贴剪贴板内容到光标上方",[19,126462,126463],{},"u 撤销上一次操作",[19,126465,126466],{},"ctrl+r 重做上一次操作",[19,126468,126469,126471],{},[2612,126470],{}," 保存文件",[19,126473,126474,126476],{},[2462,126475],{}," 退出Vim编辑器",[19,126478,126479,126481],{},[2462,126480],{},"! 强制退出Vim编辑器，不保存修改",[19,126483,126484],{},[1968,126485,126486],{},"2.输入模式：",[19,126488,126489],{},[3145,126490],{"alt":28,"src":126491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126493,126494],{},[1968,126495,126496],{},"3.底线命令模式：",[19,126498,126499],{},[3145,126500],{"alt":28,"src":126501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126503,126504],{},"按下esc可以退出底线命令模式",[633,126506,126508],{"id":126507},"_766-apt","7.6.6 apt",[19,126510,126511],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[633,126513,126515],{"id":126514},"_767-home与root的区别","7.6.7 home与root的区别",[19,126517,126518],{},[3145,126519],{"alt":28,"src":126520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126522,126523],{},[3145,126524],{"alt":28,"src":126525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126527,126528],{},[3145,126529],{"alt":28,"src":126530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126532,126533],{},[3145,126534],{"alt":28,"src":126535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[633,126537,126539],{"id":126538},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126541,126542],{},[2057,126543,126544],{"href":126544,"rel":126545},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25520],[162,126547,126548,126551],{},[165,126549,126550],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[165,126552,126553],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126555,126556],{},[3145,126557],{"alt":28,"src":126558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126560,126561],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126563,126564],{},[3145,126565],{"alt":28,"src":126566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[23,126568,126570],{"className":122450,"code":126569,"language":122452,"meta":122453,"style":28},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[30,126571,126572,126577],{"__ignoreMap":28},[33,126573,126574],{"class":35,"line":36},[33,126575,126576],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[33,126578,126579],{"class":35,"line":43},[33,126580,126581],{},".\u002Fpycharm.sh\n",[19,126583,126584],{},"3️⃣创建.desktop文件",[19,126586,126587],{},[1968,126588,126589],{},"原理：",[2822,126591,126592,126602],{},[165,126593,126594,126595,126601],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[1968,126596,126597,126600],{},[30,126598,126599],{},".desktop"," 文件"," 来识别应用。",[165,126603,126604,126606,126607],{},[30,126605,126599],{}," 文件相当于一个“应用注册表”，告诉系统：",[2822,126608,126609,126612,126615,126618,126621],{},[165,126610,126611],{},"应用名字（Name）",[165,126613,126614],{},"图标（Icon）",[165,126616,126617],{},"执行命令（Exec）",[165,126619,126620],{},"分类（Categories）",[165,126622,126623],{},"是否需要终端（Terminal）",[23,126625,126627],{"className":122450,"code":126626,"language":122452,"meta":122453,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[30,126628,126629,126634],{"__ignoreMap":28},[33,126630,126631],{"class":35,"line":36},[33,126632,126633],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[33,126635,126636],{"class":35,"line":43},[33,126637,126638],{},"nano pycharm.desktop\n",[19,126640,126641],{},"nano是一个命令行下的编辑器，也可以使用vim",[23,126643,126645],{"className":122450,"code":126644,"language":122452,"meta":122453,"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,126646,126647,126652,126657,126662,126667,126672,126677,126682,126687,126692],{"__ignoreMap":28},[33,126648,126649],{"class":35,"line":36},[33,126650,126651],{},"[Desktop Entry]\n",[33,126653,126654],{"class":35,"line":43},[33,126655,126656],{},"Version=1.0\n",[33,126658,126659],{"class":35,"line":130},[33,126660,126661],{},"Type=Application\n",[33,126663,126664],{"class":35,"line":146},[33,126665,126666],{},"Name=PyCharm\n",[33,126668,126669],{"class":35,"line":267},[33,126670,126671],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[33,126673,126674],{"class":35,"line":275},[33,126675,126676],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[33,126678,126679],{"class":35,"line":392},[33,126680,126681],{},"Comment=JetBrains PyCharm IDE\n",[33,126683,126684],{"class":35,"line":406},[33,126685,126686],{},"Categories=Development;IDE;\n",[33,126688,126689],{"class":35,"line":418},[33,126690,126691],{},"Terminal=false\n",[33,126693,126694],{"class":35,"line":425},[33,126695,126696],{},"StartupWMClass=jetbrains-pycharm\n",[2822,126698,126699,126705,126711,126717],{},[165,126700,126701,126704],{},[30,126702,126703],{},"Exec"," → 点击图标时执行的命令",[165,126706,126707,126710],{},[30,126708,126709],{},"Icon"," → 显示在菜单和桌面上的图标",[165,126712,126713,126716],{},[30,126714,126715],{},"Terminal=false"," → 不打开终端",[165,126718,126719,126722],{},[30,126720,126721],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126724,126725,126726],"blockquote",{},[19,126727,126728,126729,126731,126732],{},"可以理解成 ",[30,126730,126599],{}," 文件是 Linux 的 ",[1968,126733,126734],{},"快捷方式配置文件",[19,126736,126737],{},"4️⃣设置可执行权限",[23,126739,126741],{"className":122450,"code":126740,"language":122452,"meta":122453,"style":28},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[30,126742,126743],{"__ignoreMap":28},[33,126744,126745],{"class":35,"line":36},[33,126746,126740],{},[19,126748,126749],{},"5️⃣桌面图标启动的话如下：",[23,126751,126753],{"className":122450,"code":126752,"language":122452,"meta":122453,"style":28},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[30,126754,126755,126760],{"__ignoreMap":28},[33,126756,126757],{"class":35,"line":36},[33,126758,126759],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[33,126761,126762],{"class":35,"line":43},[33,126763,126764],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[162,126766,126767],{"start":130},[165,126768,126769],{},"下载Appimage文件实现软件的安装",[19,126771,126772],{},"1️⃣先下载appimage",[19,126774,126775],{},[2057,126776,126777],{"href":126777,"rel":126778},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25520],[19,126780,126781],{},[3145,126782],{"alt":28,"src":126783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126785,126786],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126788,126789],{},[3145,126790],{"alt":28,"src":126791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126793,126794],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126796,126797],{},[3145,126798],{"alt":28,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126801,126802],{},[3145,126803],{"alt":28,"src":126804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126806,126807,126808,126811],{},"3️⃣给他们放在",[30,126809,126810],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126813,126814],{},"4️⃣给软件执行权限",[23,126816,126818],{"className":122450,"code":126817,"language":122452,"meta":122453,"style":28},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[30,126819,126820,126825],{"__ignoreMap":28},[33,126821,126822],{"class":35,"line":36},[33,126823,126824],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[33,126826,126827],{"class":35,"line":43},[33,126828,126829],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126831,126832],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[23,126834,126836],{"className":118931,"code":126835,"language":118933,"meta":28,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[30,126837,126838,126845,126852,126858],{"__ignoreMap":28},[33,126839,126840,126842],{"class":35,"line":36},[33,126841,102915],{"class":39},[33,126843,126844],{"class":117}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[33,126846,126847,126849],{"class":35,"line":43},[33,126848,102922],{"class":3632},[33,126850,126851],{"class":117}," .\u002Fqqmusic.desktop\n",[33,126853,126854,126856],{"class":35,"line":130},[33,126855,125900],{"class":3632},[33,126857,126851],{"class":117},[33,126859,126860,126862,126864,126866],{"class":35,"line":146},[33,126861,26232],{"class":3632},[33,126863,26235],{"class":117},[33,126865,124767],{"class":117},[33,126867,126851],{"class":117},[19,126869,126870,126872],{},[30,126871,102922],{},"：一个 Linux 命令，主要功能是：",[2822,126874,126875,126878],{},[165,126876,126877],{},"如果文件不存在，就创建一个新的空文件",[165,126879,126880],{},"如果文件已存在，就更新该文件的最后修改时间",[23,126882,126884],{"className":122450,"code":126883,"language":122452,"meta":122453,"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,126885,126886,126890,126895,126900,126905,126909,126914],{"__ignoreMap":28},[33,126887,126888],{"class":35,"line":36},[33,126889,126651],{},[33,126891,126892],{"class":35,"line":43},[33,126893,126894],{},"Name=QQ音乐\n",[33,126896,126897],{"class":35,"line":130},[33,126898,126899],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[33,126901,126902],{"class":35,"line":146},[33,126903,126904],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[33,126906,126907],{"class":35,"line":267},[33,126908,126661],{},[33,126910,126911],{"class":35,"line":275},[33,126912,126913],{},"Categories=Audio;Music;Player;\n",[33,126915,126916],{"class":35,"line":392},[33,126917,126918],{},"Comment=QQ Music Client for Linux\n",[19,126920,126921],{},"将文件复制进去",[19,126923,126924],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126926,126927],{},[3145,126928],{"alt":28,"src":126929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126931,126932],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126934,126935],{},[3145,126936],{"alt":28,"src":126937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126939,126940,126941,126944,126945,126948],{},"如果你用的不是KDE，那么也可以直接修改",[30,126942,126943],{},"qqmuic.desktop","：在exec的末尾加上",[30,126946,126947],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[23,126950,126952],{"className":122450,"code":126951,"language":122452,"meta":122453,"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,126953,126954,126958,126962,126967,126971,126975,126979],{"__ignoreMap":28},[33,126955,126956],{"class":35,"line":36},[33,126957,126651],{},[33,126959,126960],{"class":35,"line":43},[33,126961,126894],{},[33,126963,126964],{"class":35,"line":130},[33,126965,126966],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[33,126968,126969],{"class":35,"line":146},[33,126970,126904],{},[33,126972,126973],{"class":35,"line":267},[33,126974,126661],{},[33,126976,126977],{"class":35,"line":275},[33,126978,126913],{},[33,126980,126981],{"class":35,"line":392},[33,126982,126918],{},[19,126984,126985],{},[3145,126986],{"alt":28,"src":126987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126989,126990],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[23,126992,126994],{"className":122450,"code":126993,"language":122452,"meta":122453,"style":28},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[30,126995,126996],{"__ignoreMap":28},[33,126997,126998],{"class":35,"line":36},[33,126999,126993],{},[162,127001,127002],{"start":146},[165,127003,127004],{},"去Flathub上安装软件",[19,127006,127007],{},[2057,127008,127009],{"href":127009,"rel":127010},"https:\u002F\u002Fflathub.org\u002F",[25520],[19,127012,127013],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127015,127016],{},[3145,127017],{"alt":28,"src":127018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[23,127020,127022],{"className":122450,"code":127021,"language":122452,"meta":122453,"style":28},"flatpak install flathub com.obsproject.Studio\n",[30,127023,127024],{"__ignoreMap":28},[33,127025,127026],{"class":35,"line":36},[33,127027,127021],{},[19,127029,127030],{},[3145,127031],{"alt":28,"src":127032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127034,127035],{},"2️⃣运行软件",[19,127037,127038],{},"a.官方方式：",[19,127040,127041],{},[3145,127042],{"alt":28,"src":127043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[23,127045,127046],{"className":122450,"code":127021,"language":122452,"meta":122453,"style":28},[30,127047,127048],{"__ignoreMap":28},[33,127049,127050],{"class":35,"line":36},[33,127051,127021],{},[19,127053,127054],{},"b.当普通软件运行：",[19,127056,127057],{},[3145,127058],{"alt":28,"src":127059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127061,127062],{},[3145,127063],{"alt":28,"src":127064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1729,127066,127067],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":43,"depth":43,"links":127069},[127070,127071,127076,127077,127083,127084],{"id":123803,"depth":43,"text":123804},{"id":124145,"depth":43,"text":124146,"children":127072},[127073,127074,127075],{"id":124149,"depth":130,"text":124150},{"id":124216,"depth":130,"text":124217},{"id":124477,"depth":130,"text":124478},{"id":124630,"depth":43,"text":124631},{"id":124868,"depth":43,"text":124869,"children":127078},[127079,127080,127081,127082],{"id":124920,"depth":130,"text":124921},{"id":125205,"depth":130,"text":125206},{"id":125476,"depth":130,"text":125477},{"id":125735,"depth":130,"text":125736},{"id":125794,"depth":43,"text":125795},{"id":126095,"depth":43,"text":126096,"children":127085},[127086,127087,127088,127089,127090,127091,127092,127093],{"id":126099,"depth":130,"text":126100},{"id":126111,"depth":130,"text":126112},{"id":126323,"depth":130,"text":126324},{"id":126347,"depth":130,"text":126348},{"id":126413,"depth":130,"text":126414},{"id":126507,"depth":130,"text":126508},{"id":126514,"depth":130,"text":126515},{"id":126538,"depth":130,"text":126539},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123795,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127100,"title":127101,"body":127102,"description":1751,"extension":1752,"meta":127106,"navigation":126,"path":127107,"seo":127108,"stem":127109,"__hash__":127110},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127103,"toc":127104},[],{"title":28,"searchDepth":43,"depth":43,"links":127105},[],{"category":31918},"\u002Fwiki\u002F2025-01-27-linux",{"title":127101,"description":1751},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127112,"title":127113,"body":127114,"description":127118,"extension":1752,"meta":127508,"navigation":126,"path":127509,"seo":127510,"stem":127511,"__hash__":127512},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127115,"toc":127506},[127116,127119,127123,127140,127143,127196,127200,127202,127242,127251,127255,127258,127498,127503],[19,127117,127118],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127120,127122],{"id":127121},"_1ubuntu环境配置","1.Ubuntu环境配置",[162,127124,127125,127128,127131,127134,127137],{},[165,127126,127127],{},"ubuntu环境换源",[165,127129,127130],{},"安装cuda",[165,127132,127133],{},"安装miniconda",[165,127135,127136],{},"安装pytorch",[165,127138,127139],{},"安装genesis",[19,127141,127142],{},"参考链接：",[23,127144,127146],{"className":25477,"code":127145,"language":25479,"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,127147,127148],{"__ignoreMap":28},[33,127149,127150,127153,127156,127159,127161,127164,127167,127169,127172,127175,127177,127180,127183,127185,127188,127191,127193],{"class":35,"line":36},[33,127151,127152],{"class":3632},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[33,127154,127155],{"class":117},"=blogdetail",[33,127157,127158],{"class":59},"&sharetype",[33,127160,64],{"class":63},[33,127162,127163],{"class":117},"blogdetail",[33,127165,127166],{"class":59},"&sharerId",[33,127168,64],{"class":63},[33,127170,127171],{"class":117},"144728092",[33,127173,127174],{"class":59},"&sharerefer",[33,127176,64],{"class":63},[33,127178,127179],{"class":117},"PC",[33,127181,127182],{"class":59},"&sharesource",[33,127184,64],{"class":63},[33,127186,127187],{"class":117},"qq_69379513",[33,127189,127190],{"class":59},"&sharefrom",[33,127192,64],{"class":63},[33,127194,127195],{"class":117},"from_link\n",[10,127197,127199],{"id":127198},"_2genesis-报错issue","2.Genesis 报错issue",[19,127201,127142],{},[23,127203,127204],{"className":25477,"code":127145,"language":25479,"meta":28,"style":28},[30,127205,127206],{"__ignoreMap":28},[33,127207,127208,127210,127212,127214,127216,127218,127220,127222,127224,127226,127228,127230,127232,127234,127236,127238,127240],{"class":35,"line":36},[33,127209,127152],{"class":3632},[33,127211,127155],{"class":117},[33,127213,127158],{"class":59},[33,127215,64],{"class":63},[33,127217,127163],{"class":117},[33,127219,127166],{"class":59},[33,127221,64],{"class":63},[33,127223,127171],{"class":117},[33,127225,127174],{"class":59},[33,127227,64],{"class":63},[33,127229,127179],{"class":117},[33,127231,127182],{"class":59},[33,127233,64],{"class":63},[33,127235,127187],{"class":117},[33,127237,127190],{"class":59},[33,127239,64],{"class":63},[33,127241,127195],{"class":117},[23,127243,127245],{"className":25477,"code":127244,"language":25479,"meta":28,"style":28},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[30,127246,127247],{"__ignoreMap":28},[33,127248,127249],{"class":35,"line":36},[33,127250,127244],{"class":3632},[10,127252,127254],{"id":127253},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127256,127257],{},"hello_robot.py",[23,127259,127261],{"className":25,"code":127260,"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,127262,127263,127269,127284,127288,127300,127312,127316,127329,127333,127352,127362,127372,127386,127390,127394,127399,127403,127413,127420,127434,127440,127450,127455,127459,127477,127482,127486,127493],{"__ignoreMap":28},[33,127264,127265,127267],{"class":35,"line":36},[33,127266,32045],{"class":63},[33,127268,46951],{"class":59},[33,127270,127271,127274,127277,127279,127281],{"class":35,"line":43},[33,127272,127273],{"class":59},"os.environ[",[33,127275,127276],{"class":117},"'PYOPENGL_PLATFORM'",[33,127278,6104],{"class":59},[33,127280,64],{"class":63},[33,127282,127283],{"class":117}," 'glx'\n",[33,127285,127286],{"class":35,"line":130},[33,127287,127],{"emptyLinePlaceholder":126},[33,127289,127290,127292,127295,127297],{"class":35,"line":146},[33,127291,32045],{"class":63},[33,127293,127294],{"class":59}," genesis ",[33,127296,33033],{"class":63},[33,127298,127299],{"class":59}," gs\n",[33,127301,127302,127304,127307,127309],{"class":35,"line":267},[33,127303,32388],{"class":63},[33,127305,127306],{"class":59}," pynput ",[33,127308,32045],{"class":63},[33,127310,127311],{"class":59}," keyboard\n",[33,127313,127314],{"class":35,"line":275},[33,127315,127],{"emptyLinePlaceholder":126},[33,127317,127318,127321,127324,127326],{"class":35,"line":392},[33,127319,127320],{"class":59},"gs.init(",[33,127322,127323],{"class":6877},"backend",[33,127325,64],{"class":63},[33,127327,127328],{"class":59},"gs.gpu)\n",[33,127330,127331],{"class":35,"line":406},[33,127332,127],{"emptyLinePlaceholder":126},[33,127334,127335,127338,127340,127343,127346,127348,127350],{"class":35,"line":418},[33,127336,127337],{"class":59},"scene ",[33,127339,64],{"class":63},[33,127341,127342],{"class":59}," gs.Scene(",[33,127344,127345],{"class":6877},"show_viewer",[33,127347,64],{"class":63},[33,127349,33126],{"class":39},[33,127351,157],{"class":59},[33,127353,127354,127357,127359],{"class":35,"line":425},[33,127355,127356],{"class":59},"plane ",[33,127358,64],{"class":63},[33,127360,127361],{"class":59}," scene.add_entity(gs.morphs.Plane())\n",[33,127363,127364,127367,127369],{"class":35,"line":1147},[33,127365,127366],{"class":59},"franka ",[33,127368,64],{"class":63},[33,127370,127371],{"class":59}," scene.add_entity(\n",[33,127373,127374,127377,127379,127381,127384],{"class":35,"line":1329},[33,127375,127376],{"class":59},"    gs.morphs.MJCF(",[33,127378,47000],{"class":6877},[33,127380,64],{"class":63},[33,127382,127383],{"class":117},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[33,127385,39694],{"class":59},[33,127387,127388],{"class":35,"line":1341},[33,127389,157],{"class":59},[33,127391,127392],{"class":35,"line":1348},[33,127393,127],{"emptyLinePlaceholder":126},[33,127395,127396],{"class":35,"line":1529},[33,127397,127398],{"class":59},"scene.build()\n",[33,127400,127401],{"class":35,"line":1546},[33,127402,127],{"emptyLinePlaceholder":126},[33,127404,127405,127407,127410],{"class":35,"line":1551},[33,127406,33597],{"class":63},[33,127408,127409],{"class":3632}," on_press",[33,127411,127412],{"class":59},"(key):\n",[33,127414,127415,127418],{"class":35,"line":1566},[33,127416,127417],{"class":63},"    try",[33,127419,143],{"class":59},[33,127421,127422,127424,127427,127429,127432],{"class":35,"line":1578},[33,127423,4163],{"class":63},[33,127425,127426],{"class":59}," key.char ",[33,127428,573],{"class":63},[33,127430,127431],{"class":117}," 'q'",[33,127433,143],{"class":59},[33,127435,127436,127438],{"class":35,"line":1583},[33,127437,17387],{"class":63},[33,127439,714],{"class":39},[33,127441,127442,127445,127448],{"class":35,"line":3369},[33,127443,127444],{"class":63},"    except",[33,127446,127447],{"class":39}," AttributeError",[33,127449,143],{"class":59},[33,127451,127452],{"class":35,"line":3396},[33,127453,127454],{"class":63},"        pass\n",[33,127456,127457],{"class":35,"line":3401},[33,127458,127],{"emptyLinePlaceholder":126},[33,127460,127461,127464,127466,127469,127472,127474],{"class":35,"line":3418},[33,127462,127463],{"class":59},"listener ",[33,127465,64],{"class":63},[33,127467,127468],{"class":59}," keyboard.Listener(",[33,127470,127471],{"class":6877},"on_press",[33,127473,64],{"class":63},[33,127475,127476],{"class":59},"on_press)\n",[33,127478,127479],{"class":35,"line":3423},[33,127480,127481],{"class":59},"listener.start()\n",[33,127483,127484],{"class":35,"line":3428},[33,127485,127],{"emptyLinePlaceholder":126},[33,127487,127488,127490],{"class":35,"line":3433},[33,127489,110301],{"class":63},[33,127491,127492],{"class":59}," listener.running:\n",[33,127494,127495],{"class":35,"line":3447},[33,127496,127497],{"class":59},"    scene.step()\n",[19,127499,127500],{},[3145,127501],{"alt":28,"src":127502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1729,127504,127505],{},"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":43,"depth":43,"links":127507},[],{"category":25033},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127113,"description":127118},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127514,"title":127515,"body":127516,"description":1751,"extension":1752,"meta":127531,"navigation":126,"path":127532,"seo":127533,"stem":127534,"__hash__":127535},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127517,"toc":127528},[127518,127521,127525],[10,127519,127515],{"id":127520},"_1-基础知识",[14,127522,127524],{"id":127523},"_11-js的组成","1.1 js的组成",[19,127526,127527],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":28,"searchDepth":43,"depth":43,"links":127529},[127530],{"id":127523,"depth":43,"text":127524},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127515,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127537,"title":127538,"body":127539,"description":1751,"extension":1752,"meta":127678,"navigation":126,"path":127679,"seo":127680,"stem":127681,"__hash__":127682},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127540,"toc":127666},[127541,127544,127548,127551,127555,127565,127569,127572,127575,127578,127582,127589,127595,127599,127605,127616,127620,127623,127627,127630,127634,127637,127641,127644,127648,127651,127654,127657,127660,127663],[10,127542,127538],{"id":127543},"_2-vscode必备内容",[14,127545,127547],{"id":127546},"_21-标签分类","2.1 标签分类",[19,127549,127550],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127552,127554],{"id":127553},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127556,127557,127558,127560,127561,127564],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[30,127559,2045],{}," 然后按 ",[30,127562,127563],{},"Tab","，快速自动生成基本结构。",[14,127566,127568],{"id":127567},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127570,127571],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127573,127574],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127576,127577],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127579,127581],{"id":127580},"_24-视图缩放","2.4 视图缩放",[19,127583,127584,127585,127588],{},"缩放视图 ",[30,127586,127587],{},"ctrl+"," 可实现代码增大。",[19,127590,127591,127594],{},[30,127592,127593],{},"ctrl-"," 可实现代码减小。",[14,127596,127598],{"id":127597},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127600,127601,127602,1628],{},"VSCode 新建文件快捷键为 ",[30,127603,127604],{},"ctrl+N",[19,127606,127607,127608,127611,127612,127615],{},"保存快捷键为 ",[30,127609,127610],{},"ctrl+S","，将文本保存为 ",[30,127613,127614],{},".html"," 文件。",[14,127617,127619],{"id":127618},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127621,127622],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127624,127626],{"id":127625},"_27-vscode-icons","2.7 vscode-icons",[19,127628,127629],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127631,127633],{"id":127632},"_28-easy-less","2.8 Easy LESS",[19,127635,127636],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127638,127640],{"id":127639},"_29-会了吧插件","2.9 会了吧插件",[19,127642,127643],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127645,127647],{"id":127646},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127649,127650],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127652,127653],{},"②选定多个相同的单词:ctrl+D",[19,127655,127656],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127658,127659],{},"④全局替换某些单词:ctrl+h",[19,127661,127662],{},"⑤快速定位到某一行:ctrl+g",[19,127664,127665],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":28,"searchDepth":43,"depth":43,"links":127667},[127668,127669,127670,127671,127672,127673,127674,127675,127676,127677],{"id":127546,"depth":43,"text":127547},{"id":127553,"depth":43,"text":127554},{"id":127567,"depth":43,"text":127568},{"id":127580,"depth":43,"text":127581},{"id":127597,"depth":43,"text":127598},{"id":127618,"depth":43,"text":127619},{"id":127625,"depth":43,"text":127626},{"id":127632,"depth":43,"text":127633},{"id":127639,"depth":43,"text":127640},{"id":127646,"depth":43,"text":127647},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127538,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127684,"title":127685,"body":127686,"description":1751,"extension":1752,"meta":127845,"navigation":126,"path":127846,"seo":127847,"stem":127848,"__hash__":127849},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127687,"toc":127837},[127688,127691,127695,127705,127711,127717,127721,127730,127734,127739,127742,127745,127749,127752,127762,127771,127780,127789,127799,127806,127811,127816,127829],[10,127689,127685],{"id":127690},"_3-html文本与容器标签",[14,127692,127694],{"id":127693},"_31-标题标签","3.1 标题标签",[19,127696,127697,127700,127701,127704],{},[30,127698,127699],{},"\u003Ch1>","我是一级标签",[30,127702,127703],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127706,127707,127700,127709],{},[30,127708,127699],{},[30,127710,127703],{},[19,127712,124968,127713,127716],{},[30,127714,127715],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127718,127720],{"id":127719},"_32-段落标签","3.2 段落标签",[19,127722,127723,127726,127727],{},[30,127724,127725],{},"\u003Cp>","....",[30,127728,127729],{},"\u003C\u002Fp>",[14,127731,127733],{"id":127732},"_33-换行标签","3.3 换行标签",[19,127735,127736],{},[30,127737,127738],{},"\u003Cbr \u002F>",[19,127740,127741],{},"具有强制换行的作用",[19,127743,127744],{},"单标签",[14,127746,127748],{"id":127747},"_34-文本格式化标签","3.4 文本格式化标签",[19,127750,127751],{},"提供粗体、斜体和下划线等效果",[19,127753,127754,127755,84179,127758,127761],{},"加粗：",[30,127756,127757],{},"\u003Cstrong>...\u003C\u002Fstrong>",[30,127759,127760],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127763,127764,127765,84179,127768,127761],{},"斜体：",[30,127766,127767],{},"\u003Cem>...\u003C\u002Fem>",[30,127769,127770],{},"\u003Ci>...\u003C\u002Fi>",[19,127772,127773,127774,84179,127777,127761],{},"删除线：",[30,127775,127776],{},"\u003Cdel>...\u003C\u002Fdel>",[30,127778,127779],{},"\u003Cs>...\u003C\u002Fs>",[19,127781,127782,127783,84179,127786,127761],{},"下划线：",[30,127784,127785],{},"\u003Cins>...\u003C\u002Fins>",[30,127787,127788],{},"\u003Cu>...\u003C\u002Fu>",[14,127790,127792,127793,20065,127796,104331],{"id":127791},"_35-div和span标签","3.5 ",[30,127794,127795],{},"\u003Cdiv>",[30,127797,127798],{},"\u003Cspan>",[19,127800,127801,102657,127803,127805],{},[30,127802,127795],{},[30,127804,127798],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127807,127808],{},[30,127809,127810],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127812,127813],{},[30,127814,127815],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127817,127818,127819,127821,127822,127824,127825,127828],{},"两者特点：①",[30,127820,127795],{}," 标签用来布局，但一行通常只放一个 ",[30,127823,127795],{},"。可以理解为一个大盒子，独占一行，在 ",[30,127826,127827],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127830,78890,127831,127833,127834,127836],{},[30,127832,127798],{}," 标签也可用于布局，一行可以放多个 ",[30,127835,127798],{},"，可理解为小盒子。",{"title":28,"searchDepth":43,"depth":43,"links":127838},[127839,127840,127841,127842,127843],{"id":127693,"depth":43,"text":127694},{"id":127719,"depth":43,"text":127720},{"id":127732,"depth":43,"text":127733},{"id":127747,"depth":43,"text":127748},{"id":127791,"depth":43,"text":127844},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127685,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127851,"title":127852,"body":127853,"description":1751,"extension":1752,"meta":128050,"navigation":126,"path":128051,"seo":128052,"stem":128053,"__hash__":128054},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127854,"toc":128042},[127855,127858,127862,127865,127871,127878,127884,127890,127893,127896,127899,127902,127905,127908,127911,127915,127918,127921,127924,127930,127936,127942,127949,127953,127959,127965,127968,127971,127977,127983,127989,127992,127995,127999,128002,128012,128018,128022,128031,128035,128038],[10,127856,127852],{"id":127857},"_4-html图像与链接",[14,127859,127861],{"id":127860},"_41-图像标签","4.1 图像标签",[19,127863,127864],{},"（1）标签",[19,127866,127867,127870],{},[30,127868,127869],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127872,127873,127874,127877],{},"src是",[30,127875,127876],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127879,127880,127881],{},"alt:文本，替换文本。图像不能显示的文字 ",[30,127882,127883],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127885,127886,127887],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[30,127888,127889],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127891,127892],{},"width:像素，设置图像的宽度",[19,127894,127895],{},"height:像素，设置图像的高度",[19,127897,127898],{},"border：像素，设置图像的边框粗细",[19,127900,127901],{},"（2）图像标签属性的注意点：",[19,127903,127904],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127906,127907],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127909,127910],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127912,127914],{"id":127913},"_42-路径注意要点","4.2 路径注意要点：",[19,127916,127917],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127919,127920],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127922,127923],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127925,127926,127927],{},"①同一级路径：图像文件位于HTML文件同一级，如",[30,127928,127929],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127931,127932,127933],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[30,127934,127935],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127937,127938,127939],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[30,127940,127941],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127943,127944,127945,1014],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2057,127946,127947],{"href":127947,"rel":127948},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25520],[14,127950,127952],{"id":127951},"_43-超链接标签","4.3 超链接标签",[19,127954,127955,127958],{},[30,127956,127957],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127960,127961,127962],{},"①语法格式：",[30,127963,127964],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127966,127967],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127969,127970],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127972,127973,127974],{},"③链接分类：外部链接：",[30,127975,127976],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127978,127979,127980],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[30,127981,127982],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127984,127985,127986],{},"空链接：如果当时没有确定链接目标时，",[30,127987,127988],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127990,127991],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127993,127994],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127996,127998],{"id":127997},"_44-锚点链接","4.4 锚点链接",[19,128000,128001],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128003,128004,128005,128008,128009],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[30,128006,128007],{},"\u003Ca href=\"#two\">","第二级",[30,128010,128011],{},"\u003C\u002Fa>",[19,128013,128014,128015],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[30,128016,128017],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128019,128021],{"id":128020},"_45-注释标签","4.5 注释标签",[19,128023,128024,128027,128028],{},[30,128025,128026],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[30,128029,128030],{},"ctrl+\u002F",[14,128032,128034],{"id":128033},"_46-特殊字符","4.6 特殊字符",[19,128036,128037],{},"可以实现添加多个空格",[3145,128039],{"style":128040,"src":128041},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":28,"searchDepth":43,"depth":43,"links":128043},[128044,128045,128046,128047,128048,128049],{"id":127860,"depth":43,"text":127861},{"id":127913,"depth":43,"text":127914},{"id":127951,"depth":43,"text":127952},{"id":127997,"depth":43,"text":127998},{"id":128020,"depth":43,"text":128021},{"id":128033,"depth":43,"text":128034},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127852,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128056,"title":128057,"body":128058,"description":1751,"extension":1752,"meta":128351,"navigation":126,"path":128352,"seo":128353,"stem":128354,"__hash__":128355},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128059,"toc":128342},[128060,128063,128067,128070,128073,128076,128079,128082,128085,128088,128091,128094,128114,128120,128124,128127,128130,128133,128136,128139,128142,128146,128149,128152,128155,128158,128171,128176,128179,128182,128197,128200,128203,128206,128209,128212,128216,128219,128226,128229,128232,128235,128238,128241,128247,128250,128253,128259,128262,128265,128268,128274,128277,128280,128294,128301,128304,128307,128314,128323,128326,128329,128332,128336,128339],[10,128061,128057],{"id":128062},"_5-html表格列表与表单",[14,128064,128066],{"id":128065},"_51-表格标签","5.1 表格标签",[19,128068,128069],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128071,128072],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128074,128075],{},"②表格基本语法：",[3145,128077],{"style":128040,"src":128078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128080,128081],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3145,128083],{"style":128040,"src":128084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128086,128087],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3145,128089],{"style":128040,"src":128090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128092,128093],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128095,128096,128099,128100,128102,128103,128106,128107,128109,128110,128113],{},[30,128097,128098],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[30,128101,128098],{},"内部必须拥有",[30,128104,128105],{},"\u003Ctr>","标签，一般位于第一行，",[30,128108,128098],{},"比",[30,128111,128112],{},"\u003Cth>","范围广",[19,128115,128116,128119],{},[30,128117,128118],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128121,128123],{"id":128122},"_52-合并单元格","5.2 合并单元格",[19,128125,128126],{},"（1）合并单元格方式：",[19,128128,128129],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128131,128132],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128134,128135],{},"（2）目标单元格：",[19,128137,128138],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128140,128141],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128143,128145],{"id":128144},"_53-列表标签","5.3 列表标签",[19,128147,128148],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128150,128151],{},"①无序列表：",[3145,128153],{"style":128040,"src":128154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128156,128157],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128159,128160,128163,128164,128167,128168,128170],{},[30,128161,128162],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[30,128165,128166],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[30,128169,128162],{},"中输入其他标签或文字是不对的",[19,128172,128173,128175],{},[30,128174,128166],{},"之间相当于一个容器，可以容纳所有元素",[19,128177,128178],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128180,128181],{},"在css中去除前边的小圆点采用如下代码:",[23,128183,128187],{"className":128184,"code":128185,"language":128186,"meta":28,"style":28},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[30,128188,128189],{"__ignoreMap":28},[33,128190,128191,128194],{"class":35,"line":36},[33,128192,128193],{"class":52945},"list-style",[33,128195,128196],{"class":59},": none;\n",[19,128198,128199],{},"②有序列表：",[3145,128201],{"style":128040,"src":128202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128204,128205],{},"③自定义列表：",[3145,128207],{"style":128040,"src":128208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3145,128210],{"style":128040,"src":128211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128213,128215],{"id":128214},"_54-表单标签","5.4 表单标签",[19,128217,128218],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128220,128221,128222,128225],{},"（1）表单域：包含单元素的区域，",[30,128223,128224],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3145,128227],{"style":128040,"src":128228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128230,128231],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128233,128234],{},"表单元素提交必须有name属性",[19,128236,128237],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128239,128240],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128242,78867,128243,128246],{},[30,128244,128245],{},"\u003Cinput>","输入表单元素",[3145,128248],{"style":128040,"src":128249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3145,128251],{"style":128040,"src":128252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128254,128255,128256],{},"单选按钮：",[30,128257,128258],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3145,128260],{"style":128040,"src":128261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128263,128264],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3145,128266],{"style":128040,"src":128267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128269,128270,128273],{},[1968,128271,128272],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128275,128276],{},"②select下拉表单元素：可以节约页面控件",[3145,128278],{"style":128040,"src":128279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128281,128282,15453,128284,128287,128288,128290,128291,128293],{},[1968,128283,1853],{},[30,128285,128286],{},"\u003Cselect>","中至少包含一对",[30,128289,104352],{},"；在",[30,128292,104352],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128295,128296,128297,128300],{},"③",[30,128298,128299],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3145,128302],{"style":128040,"src":128303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128305,128306],{},"3行20列",[14,128308,128310,128311,104331],{"id":128309},"_55-lable标签","5.5 ",[30,128312,128313],{},"\u003Clable>",[19,128315,128316,128317,128319,128320,128322],{},"它不是表单标签，但常常与表单标签搭配使用，",[30,128318,128313],{},"标签用于绑定一个表单标签，当点击",[30,128321,128313],{},"标签内的文本",[19,128324,128325],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3145,128327],{"style":128040,"src":128328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3145,128330],{"style":128040,"src":128331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128333,128335],{"id":128334},"_56-实例","5.6 实例",[3145,128337],{"style":128040,"src":128338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1729,128340,128341],{},"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":43,"depth":43,"links":128343},[128344,128345,128346,128347,128348,128350],{"id":128065,"depth":43,"text":128066},{"id":128122,"depth":43,"text":128123},{"id":128144,"depth":43,"text":128145},{"id":128214,"depth":43,"text":128215},{"id":128309,"depth":43,"text":128349},"5.5 \u003Clable>标签",{"id":128334,"depth":43,"text":128335},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128057,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128357,"title":128358,"body":128359,"description":1751,"extension":1752,"meta":128908,"navigation":126,"path":128909,"seo":128910,"stem":128911,"__hash__":128912},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128360,"toc":128883},[128361,128364,128368,128371,128374,128378,128381,128384,128387,128390,128393,128396,128399,128403,128406,128410,128413,128416,128419,128423,128426,128429,128432,128438,128441,128444,128447,128450,128453,128456,128459,128492,128496,128499,128502,128505,128509,128512,128515,128518,128521,128524,128528,128531,128534,128537,128541,128544,128548,128551,128555,128558,128563,128567,128570,128574,128577,128580,128583,128586,128613,128616,128620,128623,128626,128631,128634,128637,128641,128644,128649,128652,128655,128658,128662,128665,128668,128671,128675,128678,128681,128684,128688,128692,128695,128735,128738,128742,128749,128752,128756,128759,128805,128809,128812,128815,128818,128846,128850,128853,128880],[10,128362,128358],{"id":128363},"_6-css语法与文本样式",[14,128365,128367],{"id":128366},"_61-css语法规范","6.1 css语法规范",[19,128369,128370],{},"由两部分组成，选择器及一条或多条声明",[3145,128372],{"style":128040,"src":128373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128375,128376],{},[1968,128377,1853],{},[19,128379,128380],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128382,128383],{},"②属性与属性值以“键值对”的形式出现",[19,128385,128386],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128388,128389],{},"④属性和属性值之间用英文“;”分开",[3145,128391],{"style":128040,"src":128392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3145,128394],{"style":128040,"src":128395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3145,128397],{"style":128040,"src":128398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128400,128402],{"id":128401},"_62-css选择器","6.2 css选择器",[19,128404,128405],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[633,128407,128409],{"id":128408},"_621-标签选择器","6.2.1 标签选择器",[19,128411,128412],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128414,128415],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3145,128417],{"style":128040,"src":128418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[633,128420,128422],{"id":128421},"_622-类选择器","6.2.2 类选择器",[19,128424,128425],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128427,128428],{},"②样例",[3145,128430],{"style":128040,"src":128431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128433,128434,128435,128437],{},"③ ",[1968,128436,128272],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128439,128440],{},"可以理解为给这个标签起了个名字，来表示；",[19,128442,128443],{},"长名称或词组可以使用横线来为选择器命名；",[19,128445,128446],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128448,128449],{},"命名要有意义；",[3145,128451],{"style":128040,"src":128452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128454,128455],{},"类选择器也可以指定特殊的元素p.center{}",[19,128457,128458],{},"p.center和.center都对",[23,128460,128462],{"className":128184,"code":128461,"language":128186,"meta":28,"style":28},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[30,128463,128464,128469,128478,128488],{"__ignoreMap":28},[33,128465,128466],{"class":35,"line":36},[33,128467,128468],{"class":87},"\u002F* 类选择器指定特殊元素 *\u002F\n",[33,128470,128471,128473,128476],{"class":35,"line":43},[33,128472,19],{"class":52945},[33,128474,128475],{"class":3632},".center",[33,128477,17228],{"class":59},[33,128479,128480,128482,128484,128486],{"class":35,"line":130},[33,128481,72168],{"class":39},[33,128483,53082],{"class":59},[33,128485,53237],{"class":39},[33,128487,2976],{"class":59},[33,128489,128490],{"class":35,"line":146},[33,128491,3247],{"class":59},[633,128493,128495],{"id":128494},"_623-多类名使用","6.2.3 多类名使用",[19,128497,128498],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3145,128500],{"style":128040,"src":128501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128503,128504],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[633,128506,128508],{"id":128507},"_624-id选择器","6.2.4 id选择器",[19,128510,128511],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128513,128514],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3145,128516],{"style":128040,"src":128517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128519,128520],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128522,128523],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[633,128525,128527],{"id":128526},"_625-通配符选择器","6.2.5 通配符选择器",[19,128529,128530],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128532,128533],{},"* {",[19,128535,128536],{},"color=\"red\"}",[633,128538,128540],{"id":128539},"_626-总结","6.2.6 总结",[3145,128542],{"style":128040,"src":128543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128545,128547],{"id":128546},"_63-css字体属性","6.3 css字体属性",[19,128549,128550],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[633,128552,128554],{"id":128553},"_631-字体系列","6.3.1 字体系列",[19,128556,128557],{},"font-family: '宋体';",[19,128559,128560,128562],{},[1968,128561,1853],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[633,128564,128566],{"id":128565},"_632-字体大小","6.3.2 字体大小",[19,128568,128569],{},"font-size: 20px",[19,128571,128572,28129],{},[1968,128573,128272],{},[19,128575,128576],{},"①px（像素）大小是网页的最常用单位",[19,128578,128579],{},"②谷歌浏览器默认为16px",[19,128581,128582],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128584,128585],{},"④可以给body指定整个页面的大小：会自动引用",[23,128587,128589],{"className":128184,"code":128588,"language":128186,"meta":28,"style":28},"body {\n  font-size: 16px;\n}\n",[30,128590,128591,128597,128609],{"__ignoreMap":28},[33,128592,128593,128595],{"class":35,"line":36},[33,128594,53445],{"class":52945},[33,128596,17228],{"class":59},[33,128598,128599,128601,128603,128605,128607],{"class":35,"line":43},[33,128600,72268],{"class":39},[33,128602,53082],{"class":59},[33,128604,2418],{"class":39},[33,128606,53137],{"class":63},[33,128608,2976],{"class":59},[33,128610,128611],{"class":35,"line":130},[33,128612,3247],{"class":59},[19,128614,128615],{},"⑤标题标签比较特殊，需要单独指定大小",[633,128617,128619],{"id":128618},"_633-字体粗细","6.3.3 字体粗细",[19,128621,128622],{},"font-weight: bold;",[19,128624,128625],{},"font-weight: 100；",[19,128627,128628,128630],{},[1968,128629,1853],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128632,128633],{},"font-weight= 400;",[19,128635,128636],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[633,128638,128640],{"id":128639},"_634-文字样式","6.3.4 文字样式",[19,128642,128643],{},"font-style: normal；",[19,128645,128646,28129],{},[1968,128647,128648],{},"属性值",[19,128650,128651],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128653,128654],{},"②italic：浏览器会显示斜体的字体样式",[3145,128656],{"style":128040,"src":128657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[633,128659,128661],{"id":128660},"_635-字体符合属性","6.3.5 字体符合属性",[3145,128663],{"style":128040,"src":128664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3145,128666],{"style":128040,"src":128667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128669,128670],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128672,128673,28129],{},[1968,128674,128272],{},[19,128676,128677],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128679,128680],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128682,128683],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128685,128687],{"id":128686},"_64-css-test文本属性","6.4 css test文本属性",[633,128689,128691],{"id":128690},"_641-文本颜色","6.4.1 文本颜色",[19,128693,128694],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[23,128696,128698],{"className":128184,"code":128697,"language":128186,"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,128699,128700,128705,128711,128721,128726,128731],{"__ignoreMap":28},[33,128701,128702],{"class":35,"line":36},[33,128703,128704],{"class":87},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[33,128706,128707,128709],{"class":35,"line":43},[33,128708,19],{"class":52945},[33,128710,17228],{"class":59},[33,128712,128713,128715,128717,128719],{"class":35,"line":130},[33,128714,72547],{"class":39},[33,128716,53082],{"class":59},[33,128718,59064],{"class":39},[33,128720,2976],{"class":59},[33,128722,128723],{"class":35,"line":146},[33,128724,128725],{"class":87},"  \u002F* color: #ff0000; *\u002F\n",[33,128727,128728],{"class":35,"line":267},[33,128729,128730],{"class":87},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[33,128732,128733],{"class":35,"line":275},[33,128734,3247],{"class":59},[3145,128736],{"style":128040,"src":128737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[633,128739,128741],{"id":128740},"_642-对齐文本","6.4.2 对齐文本",[19,128743,128744,128745,128748],{},"text-align属于用于设置元素内文本内容的 ",[1968,128746,128747],{},"水平对齐"," 方式",[19,128750,128751],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[633,128753,128755],{"id":128754},"_643-装饰文本","6.4.3 装饰文本",[19,128757,128758],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[23,128760,128762],{"className":128184,"code":128761,"language":128186,"meta":28,"style":28},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[30,128763,128764,128770,128780,128784,128790,128801],{"__ignoreMap":28},[33,128765,128766,128768],{"class":35,"line":36},[33,128767,2057],{"class":52945},[33,128769,17228],{"class":59},[33,128771,128772,128774,128776,128778],{"class":35,"line":43},[33,128773,72144],{"class":39},[33,128775,53082],{"class":59},[33,128777,56381],{"class":39},[33,128779,2976],{"class":59},[33,128781,128782],{"class":35,"line":130},[33,128783,3247],{"class":59},[33,128785,128786,128788],{"class":35,"line":146},[33,128787,19],{"class":52945},[33,128789,17228],{"class":59},[33,128791,128792,128794,128796,128799],{"class":35,"line":267},[33,128793,72144],{"class":39},[33,128795,53082],{"class":59},[33,128797,128798],{"class":39},"underline",[33,128800,2976],{"class":59},[33,128802,128803],{"class":35,"line":275},[33,128804,3247],{"class":59},[633,128806,128808],{"id":128807},"_644-文本缩进","6.4.4 文本缩进",[19,128810,128811],{},"实现文本的第一行首行缩进自己指定的距离",[19,128813,128814],{},"20px往右边走；-20px往左边走",[19,128816,128817],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[23,128819,128821],{"className":128184,"code":128820,"language":128186,"meta":28,"style":28},"p {\n  text-indent: 2em;\n}\n",[30,128822,128823,128829,128842],{"__ignoreMap":28},[33,128824,128825,128827],{"class":35,"line":36},[33,128826,19],{"class":52945},[33,128828,17228],{"class":59},[33,128830,128831,128834,128836,128838,128840],{"class":35,"line":43},[33,128832,128833],{"class":39},"  text-indent",[33,128835,53082],{"class":59},[33,128837,1897],{"class":39},[33,128839,25208],{"class":63},[33,128841,2976],{"class":59},[33,128843,128844],{"class":35,"line":130},[33,128845,3247],{"class":59},[633,128847,128849],{"id":128848},"_645-行间距","6.4.5 行间距",[19,128851,128852],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[23,128854,128856],{"className":128184,"code":128855,"language":128186,"meta":28,"style":28},"p {\n  line-height: 1.6;\n}\n",[30,128857,128858,128864,128876],{"__ignoreMap":28},[33,128859,128860,128862],{"class":35,"line":36},[33,128861,19],{"class":52945},[33,128863,17228],{"class":59},[33,128865,128866,128869,128871,128874],{"class":35,"line":43},[33,128867,128868],{"class":39},"  line-height",[33,128870,53082],{"class":59},[33,128872,128873],{"class":39},"1.6",[33,128875,2976],{"class":59},[33,128877,128878],{"class":35,"line":130},[33,128879,3247],{"class":59},[1729,128881,128882],{},"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":43,"depth":43,"links":128884},[128885,128886,128894,128901],{"id":128366,"depth":43,"text":128367},{"id":128401,"depth":43,"text":128402,"children":128887},[128888,128889,128890,128891,128892,128893],{"id":128408,"depth":130,"text":128409},{"id":128421,"depth":130,"text":128422},{"id":128494,"depth":130,"text":128495},{"id":128507,"depth":130,"text":128508},{"id":128526,"depth":130,"text":128527},{"id":128539,"depth":130,"text":128540},{"id":128546,"depth":43,"text":128547,"children":128895},[128896,128897,128898,128899,128900],{"id":128553,"depth":130,"text":128554},{"id":128565,"depth":130,"text":128566},{"id":128618,"depth":130,"text":128619},{"id":128639,"depth":130,"text":128640},{"id":128660,"depth":130,"text":128661},{"id":128686,"depth":43,"text":128687,"children":128902},[128903,128904,128905,128906,128907],{"id":128690,"depth":130,"text":128691},{"id":128740,"depth":130,"text":128741},{"id":128754,"depth":130,"text":128755},{"id":128807,"depth":130,"text":128808},{"id":128848,"depth":130,"text":128849},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128358,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128914,"title":128915,"body":128916,"description":1751,"extension":1752,"meta":129565,"navigation":126,"path":129566,"seo":129567,"stem":129568,"__hash__":129569},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128917,"toc":129546},[128918,128921,128925,128929,128989,128993,129003,129006,129009,129013,129038,129042,129045,129048,129051,129054,129057,129061,129064,129067,129109,129112,129138,129144,129147,129151,129155,129161,129164,129167,129170,129173,129176,129179,129224,129228,129231,129234,129238,129242,129271,129274,129279,129282,129285,129288,129291,129295,129299,129302,129304,129307,129311,129314,129318,129321,129324,129327,129331,129335,129341,129351,129354,129357,129360,129363,129366,129489,129497,129505,129543],[10,128919,128915],{"id":128920},"_7-css引入方式与选择器进阶",[14,128922,128924],{"id":128923},"_71-css引入方式","7.1 css引入方式",[633,128926,128928],{"id":128927},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[23,128930,128934],{"className":128931,"code":128932,"language":128933,"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,128935,128936,128944,128951,128963,128976,128981],{"__ignoreMap":28},[33,128937,128938,128940,128942],{"class":35,"line":36},[33,128939,2726],{"class":59},[33,128941,1729],{"class":52945},[33,128943,52952],{"class":59},[33,128945,128946,128949],{"class":35,"line":43},[33,128947,128948],{"class":52945},"  h1",[33,128950,17228],{"class":59},[33,128952,128953,128956,128958,128961],{"class":35,"line":130},[33,128954,128955],{"class":39},"    color",[33,128957,53082],{"class":59},[33,128959,128960],{"class":39},"blue",[33,128962,2976],{"class":59},[33,128964,128965,128968,128970,128972,128974],{"class":35,"line":146},[33,128966,128967],{"class":39},"    font-size",[33,128969,53082],{"class":59},[33,128971,2617],{"class":39},[33,128973,53137],{"class":63},[33,128975,2976],{"class":59},[33,128977,128978],{"class":35,"line":267},[33,128979,128980],{"class":59},"  }\n",[33,128982,128983,128985,128987],{"class":35,"line":275},[33,128984,53430],{"class":59},[33,128986,1729],{"class":52945},[33,128988,52952],{"class":59},[19,128990,128991,28129],{},[1968,128992,128272],{},[19,128994,78867,128995,128998,128999,129002],{},[30,128996,128997],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[30,129000,129001],{},"\u003Chead>","标签中",[19,129004,129005],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129007,129008],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[633,129010,129012],{"id":129011},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[23,129014,129016],{"className":128931,"code":129015,"language":128933,"meta":28,"style":28},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[30,129017,129018],{"__ignoreMap":28},[33,129019,129020,129022,129024,129026,129028,129031,129034,129036],{"class":35,"line":36},[33,129021,2726],{"class":59},[33,129023,19],{"class":52945},[33,129025,64268],{"class":3632},[33,129027,64],{"class":59},[33,129029,129030],{"class":117},"\"color: red; font-size: 16px;\"",[33,129032,129033],{"class":59},">这是一个段落\u003C\u002F",[33,129035,19],{"class":52945},[33,129037,52952],{"class":59},[19,129039,129040,28129],{},[1968,129041,128272],{},[19,129043,129044],{},"①style其实就是标签的属性",[19,129046,129047],{},"②在双引号中间，写法要符合css规范",[19,129049,129050],{},"③可以控制当前的标签设置样式",[19,129052,129053],{},"④书写繁琐，简单时才用",[19,129055,129056],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[633,129058,129060],{"id":129059},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129062,129063],{},"使用最多，单独建一个css文件，然后html引用",[19,129065,129066],{},"①css文件部分： style.css",[23,129068,129070],{"className":128184,"code":129069,"language":128186,"meta":28,"style":28},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[30,129071,129072,129077,129083,129093,129105],{"__ignoreMap":28},[33,129073,129074],{"class":35,"line":36},[33,129075,129076],{"class":87},"\u002F* style.css *\u002F\n",[33,129078,129079,129081],{"class":35,"line":43},[33,129080,10],{"class":52945},[33,129082,17228],{"class":59},[33,129084,129085,129087,129089,129091],{"class":35,"line":130},[33,129086,72547],{"class":39},[33,129088,53082],{"class":59},[33,129090,128960],{"class":39},[33,129092,2976],{"class":59},[33,129094,129095,129097,129099,129101,129103],{"class":35,"line":146},[33,129096,72268],{"class":39},[33,129098,53082],{"class":59},[33,129100,2617],{"class":39},[33,129102,53137],{"class":63},[33,129104,2976],{"class":59},[33,129106,129107],{"class":35,"line":267},[33,129108,3247],{"class":59},[19,129110,129111],{},"②html部分",[23,129113,129115],{"className":128931,"code":129114,"language":128933,"meta":28,"style":28},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[30,129116,129117],{"__ignoreMap":28},[33,129118,129119,129121,129123,129125,129127,129129,129131,129133,129136],{"class":35,"line":36},[33,129120,2726],{"class":59},[33,129122,70647],{"class":52945},[33,129124,70650],{"class":3632},[33,129126,64],{"class":59},[33,129128,70655],{"class":117},[33,129130,62699],{"class":3632},[33,129132,64],{"class":59},[33,129134,129135],{"class":117},"\"style.css\"",[33,129137,52952],{"class":59},[19,129139,129140,129143],{},[30,129141,129142],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129145,129146],{},"ctrl+0回到页面原来大小",[14,129148,129150],{"id":129149},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[633,129152,129154],{"id":129153},"_721-快速生成html","7.2.1 快速生成html",[19,129156,129157,129158],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[30,129159,129160],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129162,129163],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129165,129166],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129168,129169],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129171,129172],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129174,129175],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129177,129178],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[23,129180,129182],{"className":128931,"code":129181,"language":128933,"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,129183,129184,129189,129194,129199,129204,129209,129214,129219],{"__ignoreMap":28},[33,129185,129186],{"class":35,"line":36},[33,129187,129188],{"class":87},"\u003C!-- Emmet 语法示例 -->\n",[33,129190,129191],{"class":35,"line":43},[33,129192,129193],{"class":87},"\u003C!-- div*3        → 生成3个div -->\n",[33,129195,129196],{"class":35,"line":130},[33,129197,129198],{"class":87},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[33,129200,129201],{"class":35,"line":146},[33,129202,129203],{"class":87},"\u003C!-- div+p        → 兄弟div和p -->\n",[33,129205,129206],{"class":35,"line":267},[33,129207,129208],{"class":87},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[33,129210,129211],{"class":35,"line":275},[33,129212,129213],{"class":87},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[33,129215,129216],{"class":35,"line":392},[33,129217,129218],{"class":87},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[33,129220,129221],{"class":35,"line":406},[33,129222,129223],{"class":87},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[633,129225,129227],{"id":129226},"_722-快速生成css","7.2.2 快速生成css",[19,129229,129230],{},"简写开头",[19,129232,129233],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129235,129237],{"id":129236},"_73-css复合选择器","7.3 css复合选择器",[633,129239,129241],{"id":129240},"_731-后代选择器","7.3.1 后代选择器",[23,129243,129245],{"className":128184,"code":129244,"language":128186,"meta":28,"style":28},".parent .child {\n  color: blue;\n}\n",[30,129246,129247,129257,129267],{"__ignoreMap":28},[33,129248,129249,129252,129255],{"class":35,"line":36},[33,129250,129251],{"class":3632},".parent",[33,129253,129254],{"class":3632}," .child",[33,129256,17228],{"class":59},[33,129258,129259,129261,129263,129265],{"class":35,"line":43},[33,129260,72547],{"class":39},[33,129262,53082],{"class":59},[33,129264,128960],{"class":39},[33,129266,2976],{"class":59},[33,129268,129269],{"class":35,"line":130},[33,129270,3247],{"class":59},[19,129272,129273],{},"元素1 元素2 {样式声明}",[19,129275,129276],{},[1968,129277,129278],{},"注意点:",[19,129280,129281],{},"①元素1和元素2中间用空格隔开",[19,129283,129284],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129286,129287],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129289,129290],{},"④元素1和元素2可以是任意基础选择器",[633,129292,129294],{"id":129293},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129296,129297],{},[1968,129298,129278],{},[19,129300,129301],{},"①元素1和元素2中间用大于号隔开",[19,129303,129284],{},[19,129305,129306],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[633,129308,129310],{"id":129309},"_733-并集选择器","7.3.3 并集选择器",[19,129312,129313],{},"元素1，元素2 {样式声明}",[19,129315,129316],{},[1968,129317,129278],{},[19,129319,129320],{},"①元素1和元素2中间用逗号隔开",[19,129322,129323],{},"②逗号可以理解为和的意思",[19,129325,129326],{},"③并集选择器通常用于集体声明",[633,129328,129330],{"id":129329},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129332,129333],{},[1968,129334,129278],{},[19,129336,129337,129338,129340],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70647,129339],{},"－:visited－:hover－:active。",[19,129342,129343,129344,129347,129348,27396],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129345,129346],"hover",{}," 、 ",[129349,129350],"first-child",{},[19,129352,129353],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129355,129356],{},"link对没访问的进行设置",[19,129358,129359],{},"vistied对已访问的进行改变",[19,129361,129362],{},"hover鼠标经过就会变",[19,129364,129365],{},"active常按(点)就会变",[23,129367,129369],{"className":128184,"code":129368,"language":128186,"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,129370,129371,129376,129385,129395,129405,129409,129418,129429,129433,129441,129451,129461,129465,129474,129485],{"__ignoreMap":28},[33,129372,129373],{"class":35,"line":36},[33,129374,129375],{"class":87},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[33,129377,129378,129380,129383],{"class":35,"line":43},[33,129379,2057],{"class":52945},[33,129381,129382],{"class":3632},":link",[33,129384,17228],{"class":59},[33,129386,129387,129389,129391,129393],{"class":35,"line":130},[33,129388,72547],{"class":39},[33,129390,53082],{"class":59},[33,129392,64011],{"class":39},[33,129394,2976],{"class":59},[33,129396,129397,129399,129401,129403],{"class":35,"line":146},[33,129398,72144],{"class":39},[33,129400,53082],{"class":59},[33,129402,56381],{"class":39},[33,129404,2976],{"class":59},[33,129406,129407],{"class":35,"line":267},[33,129408,3247],{"class":59},[33,129410,129411,129413,129416],{"class":35,"line":275},[33,129412,2057],{"class":52945},[33,129414,129415],{"class":3632},":visited",[33,129417,17228],{"class":59},[33,129419,129420,129422,129424,129427],{"class":35,"line":392},[33,129421,72547],{"class":39},[33,129423,53082],{"class":59},[33,129425,129426],{"class":39},"purple",[33,129428,2976],{"class":59},[33,129430,129431],{"class":35,"line":406},[33,129432,3247],{"class":59},[33,129434,129435,129437,129439],{"class":35,"line":418},[33,129436,2057],{"class":52945},[33,129438,62582],{"class":3632},[33,129440,17228],{"class":59},[33,129442,129443,129445,129447,129449],{"class":35,"line":425},[33,129444,72547],{"class":39},[33,129446,53082],{"class":59},[33,129448,56533],{"class":39},[33,129450,2976],{"class":59},[33,129452,129453,129455,129457,129459],{"class":35,"line":1147},[33,129454,72144],{"class":39},[33,129456,53082],{"class":59},[33,129458,128798],{"class":39},[33,129460,2976],{"class":59},[33,129462,129463],{"class":35,"line":1329},[33,129464,3247],{"class":59},[33,129466,129467,129469,129472],{"class":35,"line":1341},[33,129468,2057],{"class":52945},[33,129470,129471],{"class":3632},":active",[33,129473,17228],{"class":59},[33,129475,129476,129478,129480,129483],{"class":35,"line":1348},[33,129477,72547],{"class":39},[33,129479,53082],{"class":59},[33,129481,129482],{"class":39},"green",[33,129484,2976],{"class":59},[33,129486,129487],{"class":35,"line":1529},[33,129488,3247],{"class":59},[633,129490,129492,129493,129496],{"id":129491},"_735-伪类选择器","7.3.5 ",[129494,129495],"focus",{},"伪类选择器",[19,129498,129499,129501,129502,129504],{},[129494,129500],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[30,129503,128245],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[23,129506,129508],{"className":128184,"code":129507,"language":128186,"meta":28,"style":28},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[30,129509,129510,129518,129529,129539],{"__ignoreMap":28},[33,129511,129512,129514,129516],{"class":35,"line":36},[33,129513,112],{"class":52945},[33,129515,63542],{"class":3632},[33,129517,17228],{"class":59},[33,129519,129520,129523,129525,129527],{"class":35,"line":43},[33,129521,129522],{"class":39},"  border-color",[33,129524,53082],{"class":59},[33,129526,56533],{"class":39},[33,129528,2976],{"class":59},[33,129530,129531,129533,129535,129537],{"class":35,"line":130},[33,129532,72440],{"class":39},[33,129534,53082],{"class":59},[33,129536,56381],{"class":39},[33,129538,2976],{"class":59},[33,129540,129541],{"class":35,"line":146},[33,129542,3247],{"class":59},[1729,129544,129545],{},"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":43,"depth":43,"links":129547},[129548,129553,129557],{"id":128923,"depth":43,"text":128924,"children":129549},[129550,129551,129552],{"id":128927,"depth":130,"text":128928},{"id":129011,"depth":130,"text":129012},{"id":129059,"depth":130,"text":129060},{"id":129149,"depth":43,"text":129150,"children":129554},[129555,129556],{"id":129153,"depth":130,"text":129154},{"id":129226,"depth":130,"text":129227},{"id":129236,"depth":43,"text":129237,"children":129558},[129559,129560,129561,129562,129563],{"id":129240,"depth":130,"text":129241},{"id":129293,"depth":130,"text":129294},{"id":129309,"depth":130,"text":129310},{"id":129329,"depth":130,"text":129330},{"id":129491,"depth":130,"text":129564},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128915,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129571,"title":129572,"body":129573,"description":1751,"extension":1752,"meta":131496,"navigation":126,"path":131497,"seo":131498,"stem":131499,"__hash__":131500},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129574,"toc":131470},[129575,129578,129582,129591,129595,129621,129626,129629,129632,129635,129638,129642,129645,129655,129663,129667,129702,129707,129710,129713,129716,129719,129723,129726,129735,129739,129752,129757,129760,129763,129766,129770,129773,129777,129780,129835,129838,129869,129872,129926,129930,129933,130099,130222,130225,130228,130231,130234,130238,130241,130245,130248,130251,130255,130258,130289,130316,130344,130347,130351,130377,130420,130424,130518,130521,130548,130551,130554,130557,130560,130563,130566,130569,130572,130575,130579,130636,130663,130667,130715,130719,130760,130762,130765,130768,130771,130774,130778,130870,130873,130876,130879,130883,131006,131207,131211,131215,131218,131221,131224,131228,131231,131234,131259,131262,131265,131268,131271,131274,131278,131286,131348,131351,131409,131412,131415,131418,131421,131424,131427,131430,131467],[10,129576,129572],{"id":129577},"_8-css显示模式与背景特性",[14,129579,129581],{"id":129580},"_81-css元素显示模式","8.1 css元素显示模式",[19,129583,129584,129585,129587,129588,129590],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[30,129586,127795],{},"自己占一行，比如一行可以放多个",[30,129589,127798],{},"，HTML 元素一般分为块元素和行内元素两种类型",[633,129592,129594],{"id":129593},"_811-块元素","8.1.1 块元素",[19,129596,129597,129598,129600,129601,2031,129604,2031,129606,2031,129608,2031,129611,2031,129614,129617,129618,129620],{},"常见的块元素有",[30,129599,127699],{},"~",[30,129602,129603],{},"\u003Ch6>",[30,129605,127725],{},[30,129607,127795],{},[30,129609,129610],{},"\u003Cul>",[30,129612,129613],{},"\u003Col>",[30,129615,129616],{},"\u003Cli>","等，其中 ",[30,129619,127795],{}," 标签是最典型的块元素",[19,129622,129623],{},[1968,129624,129625],{},"块级元素的特点：",[19,129627,129628],{},"① 比较霸道，自己独占一行。",[19,129630,129631],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129633,129634],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129636,129637],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129639,129640],{},[1968,129641,1853],{},[19,129643,129644],{},"①文字类的元素内不能使用块级元素",[19,129646,78890,129647,129649,129650,129652,129653],{},[30,129648,127725],{}," 标签主要用于存放文字，因此 ",[30,129651,127725],{}," 里面不能放块级元素，特别是不能放",[30,129654,127795],{},[19,129656,129657,129658,129600,129660,129662],{},"⑥同理， ",[30,129659,127699],{},[30,129661,129603],{},"等都是文字类块级标签，里面也不能放其他块级元素",[633,129664,129666],{"id":129665},"_812-行内元素","8.1.2 行内元素",[19,129668,129669,129670,2031,129672,2031,129675,2031,129678,2031,129681,2031,129684,2031,129687,2031,129690,2031,129693,2031,129696,129698,129699,129701],{},"常见的行内元素有 ",[30,129671,127957],{},[30,129673,129674],{},"\u003Cstrong>",[30,129676,129677],{},"\u003Cb>",[30,129679,129680],{},"\u003Cem>",[30,129682,129683],{},"\u003Ci>",[30,129685,129686],{},"\u003Cdel>",[30,129688,129689],{},"\u003Cs>",[30,129691,129692],{},"\u003Cins>",[30,129694,129695],{},"\u003Cu>",[30,129697,127798],{}," 等，其中 ",[30,129700,127798],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129703,129704],{},[1968,129705,129706],{},"特点：",[19,129708,129709],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129711,129712],{},"② 高、宽直接设置是无效的。",[19,129714,129715],{},"③ 默认宽度就是它本身内容的宽度。",[19,129717,129718],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129720,129721],{},[1968,129722,1853],{},[19,129724,129725],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129727,129728,129729,129731,129732,129734],{},"②特殊情况链接 ",[30,129730,127957],{}," 里面可以放块级元素，但是给 ",[30,129733,127957],{}," 转换一下块级模式最安全",[633,129736,129738],{"id":129737},"_813-行内块元素","8.1.3 行内块元素",[19,129740,129741,129742,2031,129745,2031,129748,129751],{},"在行内元素中有几个特殊的标签 —— ",[30,129743,129744],{},"\u003Cimg \u002F>",[30,129746,129747],{},"\u003Cinput \u002F>",[30,129749,129750],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129753,129754],{},[1968,129755,129756],{},"行内块元素的特点：",[19,129758,129759],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129761,129762],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129764,129765],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[633,129767,129769],{"id":129768},"_814-总结","8.1.4 总结",[3145,129771],{"style":128040,"src":129772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[633,129774,129776],{"id":129775},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129778,129779],{},"①转换为块元素：display:block;",[23,129781,129783],{"className":128184,"code":129782,"language":128186,"meta":28,"style":28},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[30,129784,129785,129790,129796,129807,129819,129831],{"__ignoreMap":28},[33,129786,129787],{"class":35,"line":36},[33,129788,129789],{"class":87},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[33,129791,129792,129794],{"class":35,"line":43},[33,129793,2057],{"class":52945},[33,129795,17228],{"class":59},[33,129797,129798,129801,129803,129805],{"class":35,"line":130},[33,129799,129800],{"class":39},"  display",[33,129802,53082],{"class":59},[33,129804,62511],{"class":39},[33,129806,2976],{"class":59},[33,129808,129809,129811,129813,129815,129817],{"class":35,"line":146},[33,129810,72210],{"class":39},[33,129812,53082],{"class":59},[33,129814,2129],{"class":39},[33,129816,53137],{"class":63},[33,129818,2976],{"class":59},[33,129820,129821,129823,129825,129827,129829],{"class":35,"line":267},[33,129822,72430],{"class":39},[33,129824,53082],{"class":59},[33,129826,2219],{"class":39},[33,129828,53137],{"class":63},[33,129830,2976],{"class":59},[33,129832,129833],{"class":35,"line":275},[33,129834,3247],{"class":59},[19,129836,129837],{},"②转换为行内元素：display:inline;",[23,129839,129841],{"className":128184,"code":129840,"language":128186,"meta":28,"style":28},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[30,129842,129843,129848,129854,129865],{"__ignoreMap":28},[33,129844,129845],{"class":35,"line":36},[33,129846,129847],{"class":87},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[33,129849,129850,129852],{"class":35,"line":43},[33,129851,53256],{"class":52945},[33,129853,17228],{"class":59},[33,129855,129856,129858,129860,129863],{"class":35,"line":130},[33,129857,129800],{"class":39},[33,129859,53082],{"class":59},[33,129861,129862],{"class":39},"inline",[33,129864,2976],{"class":59},[33,129866,129867],{"class":35,"line":146},[33,129868,3247],{"class":59},[19,129870,129871],{},"③转换为行内块：display:inline-block;",[23,129873,129875],{"className":128184,"code":129874,"language":128186,"meta":28,"style":28},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[30,129876,129877,129882,129888,129898,129910,129922],{"__ignoreMap":28},[33,129878,129879],{"class":35,"line":36},[33,129880,129881],{"class":87},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[33,129883,129884,129886],{"class":35,"line":43},[33,129885,33],{"class":52945},[33,129887,17228],{"class":59},[33,129889,129890,129892,129894,129896],{"class":35,"line":130},[33,129891,129800],{"class":39},[33,129893,53082],{"class":59},[33,129895,74024],{"class":39},[33,129897,2976],{"class":59},[33,129899,129900,129902,129904,129906,129908],{"class":35,"line":146},[33,129901,72210],{"class":39},[33,129903,53082],{"class":59},[33,129905,2429],{"class":39},[33,129907,53137],{"class":63},[33,129909,2976],{"class":59},[33,129911,129912,129914,129916,129918,129920],{"class":35,"line":267},[33,129913,72430],{"class":39},[33,129915,53082],{"class":59},[33,129917,2766],{"class":39},[33,129919,53137],{"class":63},[33,129921,2976],{"class":59},[33,129923,129924],{"class":35,"line":275},[33,129925,3247],{"class":59},[633,129927,129929],{"id":129928},"_816-小米侧边栏","8.1.6 小米侧边栏",[3145,129931],{"style":128040,"src":129932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[23,129934,129936],{"className":128931,"code":129935,"language":128933,"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,129937,129938,129943,129958,129977,129996,130015,130034,130053,130072,130091],{"__ignoreMap":28},[33,129939,129940],{"class":35,"line":36},[33,129941,129942],{"class":87},"\u003C!-- 小米侧边栏案例 -->\n",[33,129944,129945,129947,129949,129951,129953,129956],{"class":35,"line":43},[33,129946,2726],{"class":59},[33,129948,53256],{"class":52945},[33,129950,55131],{"class":3632},[33,129952,64],{"class":59},[33,129954,129955],{"class":117},"\"sidebar\"",[33,129957,52952],{"class":59},[33,129959,129960,129962,129964,129966,129968,129970,129973,129975],{"class":35,"line":130},[33,129961,53789],{"class":59},[33,129963,2057],{"class":52945},[33,129965,62699],{"class":3632},[33,129967,64],{"class":59},[33,129969,62704],{"class":117},[33,129971,129972],{"class":59},">手机 电话卡\u003C\u002F",[33,129974,2057],{"class":52945},[33,129976,52952],{"class":59},[33,129978,129979,129981,129983,129985,129987,129989,129992,129994],{"class":35,"line":146},[33,129980,53789],{"class":59},[33,129982,2057],{"class":52945},[33,129984,62699],{"class":3632},[33,129986,64],{"class":59},[33,129988,62704],{"class":117},[33,129990,129991],{"class":59},">电视 盒子\u003C\u002F",[33,129993,2057],{"class":52945},[33,129995,52952],{"class":59},[33,129997,129998,130000,130002,130004,130006,130008,130011,130013],{"class":35,"line":267},[33,129999,53789],{"class":59},[33,130001,2057],{"class":52945},[33,130003,62699],{"class":3632},[33,130005,64],{"class":59},[33,130007,62704],{"class":117},[33,130009,130010],{"class":59},">笔记本 平板\u003C\u002F",[33,130012,2057],{"class":52945},[33,130014,52952],{"class":59},[33,130016,130017,130019,130021,130023,130025,130027,130030,130032],{"class":35,"line":275},[33,130018,53789],{"class":59},[33,130020,2057],{"class":52945},[33,130022,62699],{"class":3632},[33,130024,64],{"class":59},[33,130026,62704],{"class":117},[33,130028,130029],{"class":59},">出行 穿戴\u003C\u002F",[33,130031,2057],{"class":52945},[33,130033,52952],{"class":59},[33,130035,130036,130038,130040,130042,130044,130046,130049,130051],{"class":35,"line":392},[33,130037,53789],{"class":59},[33,130039,2057],{"class":52945},[33,130041,62699],{"class":3632},[33,130043,64],{"class":59},[33,130045,62704],{"class":117},[33,130047,130048],{"class":59},">智能 路由器\u003C\u002F",[33,130050,2057],{"class":52945},[33,130052,52952],{"class":59},[33,130054,130055,130057,130059,130061,130063,130065,130068,130070],{"class":35,"line":406},[33,130056,53789],{"class":59},[33,130058,2057],{"class":52945},[33,130060,62699],{"class":3632},[33,130062,64],{"class":59},[33,130064,62704],{"class":117},[33,130066,130067],{"class":59},">健康 儿童\u003C\u002F",[33,130069,2057],{"class":52945},[33,130071,52952],{"class":59},[33,130073,130074,130076,130078,130080,130082,130084,130087,130089],{"class":35,"line":418},[33,130075,53789],{"class":59},[33,130077,2057],{"class":52945},[33,130079,62699],{"class":3632},[33,130081,64],{"class":59},[33,130083,62704],{"class":117},[33,130085,130086],{"class":59},">耳机 音响\u003C\u002F",[33,130088,2057],{"class":52945},[33,130090,52952],{"class":59},[33,130092,130093,130095,130097],{"class":35,"line":425},[33,130094,53430],{"class":59},[33,130096,53256],{"class":52945},[33,130098,52952],{"class":59},[23,130100,130102],{"className":128184,"code":130101,"language":128186,"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,130103,130104,130113,130123,130136,130148,130160,130172,130182,130193,130197,130207,130218],{"__ignoreMap":28},[33,130105,130106,130109,130111],{"class":35,"line":36},[33,130107,130108],{"class":3632},".sidebar",[33,130110,3081],{"class":52945},[33,130112,17228],{"class":59},[33,130114,130115,130117,130119,130121],{"class":35,"line":43},[33,130116,129800],{"class":39},[33,130118,53082],{"class":59},[33,130120,62511],{"class":39},[33,130122,2976],{"class":59},[33,130124,130125,130127,130129,130132,130134],{"class":35,"line":130},[33,130126,72210],{"class":39},[33,130128,53082],{"class":59},[33,130130,130131],{"class":39},"234",[33,130133,53137],{"class":63},[33,130135,2976],{"class":59},[33,130137,130138,130140,130142,130144,130146],{"class":35,"line":146},[33,130139,72430],{"class":39},[33,130141,53082],{"class":59},[33,130143,2270],{"class":39},[33,130145,53137],{"class":63},[33,130147,2976],{"class":59},[33,130149,130150,130152,130154,130156,130158],{"class":35,"line":267},[33,130151,128868],{"class":39},[33,130153,53082],{"class":59},[33,130155,2270],{"class":39},[33,130157,53137],{"class":63},[33,130159,2976],{"class":59},[33,130161,130162,130164,130166,130168,130170],{"class":35,"line":275},[33,130163,72465],{"class":39},[33,130165,53082],{"class":59},[33,130167,2766],{"class":39},[33,130169,53137],{"class":63},[33,130171,2976],{"class":59},[33,130173,130174,130176,130178,130180],{"class":35,"line":392},[33,130175,72547],{"class":39},[33,130177,53082],{"class":59},[33,130179,62484],{"class":39},[33,130181,2976],{"class":59},[33,130183,130184,130186,130188,130191],{"class":35,"line":406},[33,130185,72520],{"class":39},[33,130187,53082],{"class":59},[33,130189,130190],{"class":39},"#55585a",[33,130192,2976],{"class":59},[33,130194,130195],{"class":35,"line":418},[33,130196,3247],{"class":59},[33,130198,130199,130201,130203,130205],{"class":35,"line":425},[33,130200,130108],{"class":3632},[33,130202,3081],{"class":52945},[33,130204,62582],{"class":3632},[33,130206,17228],{"class":59},[33,130208,130209,130211,130213,130216],{"class":35,"line":1147},[33,130210,72520],{"class":39},[33,130212,53082],{"class":59},[33,130214,130215],{"class":39},"#ff6700",[33,130217,2976],{"class":59},[33,130219,130220],{"class":35,"line":1329},[33,130221,3247],{"class":59},[3145,130223],{"style":128040,"src":130224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130226,130227],{},"行高=盒子高度：实现文字的垂直居中",[19,130229,130230],{},"原理讲解：",[3145,130232],{"style":128040,"src":130233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130235,130237],{"id":130236},"_82-css背景","8.2 css背景",[19,130239,130240],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[633,130242,130244],{"id":130243},"_821-背景颜色","8.2.1 背景颜色",[19,130246,130247],{},"background-color:颜色值;",[19,130249,130250],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[633,130252,130254],{"id":130253},"_822-背景图片","8.2.2 背景图片",[19,130256,130257],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[23,130259,130261],{"className":128184,"code":130260,"language":128186,"meta":28,"style":28},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[30,130262,130263,130269,130285],{"__ignoreMap":28},[33,130264,130265,130267],{"class":35,"line":36},[33,130266,53256],{"class":52945},[33,130268,17228],{"class":59},[33,130270,130271,130274,130276,130278,130280,130283],{"class":35,"line":43},[33,130272,130273],{"class":39},"  background-image",[33,130275,53082],{"class":59},[33,130277,63368],{"class":39},[33,130279,109],{"class":59},[33,130281,130282],{"class":6877},"images\u002Fbg.png",[33,130284,4385],{"class":59},[33,130286,130287],{"class":35,"line":130},[33,130288,3247],{"class":59},[1956,130290,130291,130300],{},[1959,130292,130293],{},[1962,130294,130295,130298],{},[1965,130296,130297],{"align":25391},"参数值",[1965,130299,104334],{"align":25391},[2003,130301,130302,130309],{},[1962,130303,130304,130306],{},[2008,130305,56381],{"align":25391},[2008,130307,130308],{"align":25391},"无背景图（默认的）",[1962,130310,130311,130313],{},[2008,130312,63368],{"align":25391},[2008,130314,130315],{"align":25391},"使用绝对或相对地址指定背景图像",[23,130317,130318],{"className":128184,"code":130260,"language":128186,"meta":28,"style":28},[30,130319,130320,130326,130340],{"__ignoreMap":28},[33,130321,130322,130324],{"class":35,"line":36},[33,130323,53256],{"class":52945},[33,130325,17228],{"class":59},[33,130327,130328,130330,130332,130334,130336,130338],{"class":35,"line":43},[33,130329,130273],{"class":39},[33,130331,53082],{"class":59},[33,130333,63368],{"class":39},[33,130335,109],{"class":59},[33,130337,130282],{"class":6877},[33,130339,4385],{"class":59},[33,130341,130342],{"class":35,"line":130},[33,130343,3247],{"class":59},[19,130345,130346],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[633,130348,130350],{"id":130349},"_823-背景平铺","8.2.3 背景平铺",[23,130352,130354],{"className":128184,"code":130353,"language":128186,"meta":28,"style":28},"div {\n  background-repeat: no-repeat;\n}\n",[30,130355,130356,130362,130373],{"__ignoreMap":28},[33,130357,130358,130360],{"class":35,"line":36},[33,130359,53256],{"class":52945},[33,130361,17228],{"class":59},[33,130363,130364,130367,130369,130371],{"class":35,"line":43},[33,130365,130366],{"class":39},"  background-repeat",[33,130368,53082],{"class":59},[33,130370,63378],{"class":39},[33,130372,2976],{"class":59},[33,130374,130375],{"class":35,"line":130},[33,130376,3247],{"class":59},[1956,130378,130379,130387],{},[1959,130380,130381],{},[1962,130382,130383,130385],{},[1965,130384,130297],{"align":25391},[1965,130386,104334],{"align":25391},[2003,130388,130389,130397,130404,130412],{},[1962,130390,130391,130394],{},[2008,130392,130393],{"align":25391},"repeat",[2008,130395,130396],{"align":25391},"背景图像在纵向和横向上平铺（默认的）",[1962,130398,130399,130401],{},[2008,130400,63378],{"align":25391},[2008,130402,130403],{"align":25391},"背景图像不平铺",[1962,130405,130406,130409],{},[2008,130407,130408],{"align":25391},"repeat-x",[2008,130410,130411],{"align":25391},"背景图像在横向上平铺",[1962,130413,130414,130417],{},[2008,130415,130416],{"align":25391},"repeat-y",[2008,130418,130419],{"align":25391},"背景图像在纵向平铺",[633,130421,130423],{"id":130422},"_824-背景图片位置","8.2.4 背景图片位置",[23,130425,130427],{"className":128184,"code":130426,"language":128186,"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,130428,130429,130434,130440,130454,130458,130463,130469,130485,130489,130494,130500,130514],{"__ignoreMap":28},[33,130430,130431],{"class":35,"line":36},[33,130432,130433],{"class":87},"\u002F* 方位名词 *\u002F\n",[33,130435,130436,130438],{"class":35,"line":43},[33,130437,53256],{"class":52945},[33,130439,17228],{"class":59},[33,130441,130442,130445,130447,130449,130452],{"class":35,"line":130},[33,130443,130444],{"class":39},"  background-position",[33,130446,53082],{"class":59},[33,130448,53237],{"class":39},[33,130450,130451],{"class":39}," top",[33,130453,2976],{"class":59},[33,130455,130456],{"class":35,"line":146},[33,130457,3247],{"class":59},[33,130459,130460],{"class":35,"line":267},[33,130461,130462],{"class":87},"\u002F* 精确单位 *\u002F\n",[33,130464,130465,130467],{"class":35,"line":275},[33,130466,53256],{"class":52945},[33,130468,17228],{"class":59},[33,130470,130471,130473,130475,130477,130479,130481,130483],{"class":35,"line":392},[33,130472,130444],{"class":39},[33,130474,53082],{"class":59},[33,130476,2517],{"class":39},[33,130478,53137],{"class":63},[33,130480,59147],{"class":39},[33,130482,53137],{"class":63},[33,130484,2976],{"class":59},[33,130486,130487],{"class":35,"line":406},[33,130488,3247],{"class":59},[33,130490,130491],{"class":35,"line":418},[33,130492,130493],{"class":87},"\u002F* 混合单位 *\u002F\n",[33,130495,130496,130498],{"class":35,"line":425},[33,130497,53256],{"class":52945},[33,130499,17228],{"class":59},[33,130501,130502,130504,130506,130508,130510,130512],{"class":35,"line":1147},[33,130503,130444],{"class":39},[33,130505,53082],{"class":59},[33,130507,2517],{"class":39},[33,130509,53137],{"class":63},[33,130511,18799],{"class":39},[33,130513,2976],{"class":59},[33,130515,130516],{"class":35,"line":1329},[33,130517,3247],{"class":59},[19,130519,130520],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1956,130522,130523,130531],{},[1959,130524,130525],{},[1962,130526,130527,130529],{},[1965,130528,130297],{"align":25391},[1965,130530,27525],{"align":25391},[2003,130532,130533,130540],{},[1962,130534,130535,130537],{},[2008,130536,53613],{"align":25391},[2008,130538,130539],{"align":25391},"百分数|由浮点数和单位标识符组成的长度值",[1962,130541,130542,130545],{},[2008,130543,130544],{"align":25391},"position",[2008,130546,130547],{"align":25391},"top|center|bottom|left|center|right 方位名词",[19,130549,130550],{},"其他说明：",[19,130552,130553],{},"①参数是方位名词",[19,130555,130556],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130558,130559],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130561,130562],{},"②参数是精确单位",[19,130564,130565],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130567,130568],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130570,130571],{},"③参数是混合单位",[19,130573,130574],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[633,130576,130578],{"id":130577},"_825-背景图片固定","8.2.5 背景图片固定",[23,130580,130582],{"className":128184,"code":130581,"language":128186,"meta":28,"style":28},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[30,130583,130584,130589,130595,130607,130611,130616,130622,130632],{"__ignoreMap":28},[33,130585,130586],{"class":35,"line":36},[33,130587,130588],{"class":87},"\u002F* 背景滚动（默认） *\u002F\n",[33,130590,130591,130593],{"class":35,"line":43},[33,130592,53256],{"class":52945},[33,130594,17228],{"class":59},[33,130596,130597,130600,130602,130605],{"class":35,"line":130},[33,130598,130599],{"class":39},"  background-attachment",[33,130601,53082],{"class":59},[33,130603,130604],{"class":39},"scroll",[33,130606,2976],{"class":59},[33,130608,130609],{"class":35,"line":146},[33,130610,3247],{"class":59},[33,130612,130613],{"class":35,"line":267},[33,130614,130615],{"class":87},"\u002F* 背景固定 *\u002F\n",[33,130617,130618,130620],{"class":35,"line":275},[33,130619,53256],{"class":52945},[33,130621,17228],{"class":59},[33,130623,130624,130626,130628,130630],{"class":35,"line":392},[33,130625,130599],{"class":39},[33,130627,53082],{"class":59},[33,130629,87873],{"class":39},[33,130631,2976],{"class":59},[33,130633,130634],{"class":35,"line":406},[33,130635,3247],{"class":59},[1956,130637,130638,130647],{},[1959,130639,130640],{},[1962,130641,130642,130645],{},[1965,130643,130644],{"align":25391},"参数",[1965,130646,104334],{"align":25391},[2003,130648,130649,130656],{},[1962,130650,130651,130653],{},[2008,130652,130604],{"align":25391},[2008,130654,130655],{"align":25391},"背景图像是随对象内容滚动",[1962,130657,130658,130660],{},[2008,130659,87873],{"align":25391},[2008,130661,130662],{"align":25391},"背景图像固定",[633,130664,130666],{"id":130665},"_826-背景样式合写","8.2.6 背景样式合写",[23,130668,130670],{"className":128184,"code":130669,"language":128186,"meta":28,"style":28},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[30,130671,130672,130677,130683,130711],{"__ignoreMap":28},[33,130673,130674],{"class":35,"line":36},[33,130675,130676],{"class":87},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[33,130678,130679,130681],{"class":35,"line":43},[33,130680,53256],{"class":52945},[33,130682,17228],{"class":59},[33,130684,130685,130687,130689,130691,130694,130696,130698,130700,130702,130705,130707,130709],{"class":35,"line":130},[33,130686,72253],{"class":39},[33,130688,53082],{"class":59},[33,130690,62484],{"class":39},[33,130692,130693],{"class":39}," url",[33,130695,109],{"class":59},[33,130697,130282],{"class":6877},[33,130699,15372],{"class":59},[33,130701,63378],{"class":39},[33,130703,130704],{"class":39}," fixed",[33,130706,18799],{"class":39},[33,130708,130451],{"class":39},[33,130710,2976],{"class":59},[33,130712,130713],{"class":35,"line":146},[33,130714,3247],{"class":59},[633,130716,130718],{"id":130717},"_827-背景色半透明","8.2.7 背景色半透明",[23,130720,130722],{"className":128184,"code":130721,"language":128186,"meta":28,"style":28},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[30,130723,130724,130730,130756],{"__ignoreMap":28},[33,130725,130726,130728],{"class":35,"line":36},[33,130727,53256],{"class":52945},[33,130729,17228],{"class":59},[33,130731,130732,130734,130736,130738,130740,130742,130744,130746,130748,130750,130752,130754],{"class":35,"line":43},[33,130733,72253],{"class":39},[33,130735,53082],{"class":59},[33,130737,56754],{"class":39},[33,130739,109],{"class":59},[33,130741,2010],{"class":39},[33,130743,14093],{"class":59},[33,130745,2010],{"class":39},[33,130747,14093],{"class":59},[33,130749,2010],{"class":39},[33,130751,14093],{"class":59},[33,130753,102160],{"class":39},[33,130755,4385],{"class":59},[33,130757,130758],{"class":35,"line":130},[33,130759,3247],{"class":59},[19,130761,101035],{},[19,130763,130764],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130766,130767],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130769,130770],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130772,130773],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[633,130775,130777],{"id":130776},"_828-总结","8.2.8 总结",[1956,130779,130780,130791],{},[1959,130781,130782],{},[1962,130783,130784,130787,130789],{},[1965,130785,130786],{"align":25391},"属性",[1965,130788,104334],{"align":25391},[1965,130790,1971],{"align":25391},[2003,130792,130793,130804,130815,130826,130837,130848,130859],{},[1962,130794,130795,130798,130801],{},[2008,130796,130797],{"align":25391},"background-color",[2008,130799,130800],{"align":25391},"背景颜色",[2008,130802,130803],{"align":25391},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1962,130805,130806,130809,130812],{},[2008,130807,130808],{"align":25391},"background-image",[2008,130810,130811],{"align":25391},"背景图片",[2008,130813,130814],{"align":25391},"url(图片路径)",[1962,130816,130817,130820,130823],{},[2008,130818,130819],{"align":25391},"background-repeat",[2008,130821,130822],{"align":25391},"是否平铺",[2008,130824,130825],{"align":25391},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1962,130827,130828,130831,130834],{},[2008,130829,130830],{"align":25391},"background-position",[2008,130832,130833],{"align":25391},"背景位置",[2008,130835,130836],{"align":25391},"length\u002Fposition 分别是x和y坐标",[1962,130838,130839,130842,130845],{},[2008,130840,130841],{"align":25391},"background-attachment",[2008,130843,130844],{"align":25391},"背景附着",[2008,130846,130847],{"align":25391},"scroll(背景滚动) \u002Ffixed (背景固定)",[1962,130849,130850,130853,130856],{},[2008,130851,130852],{"align":25391},"背景简写",[2008,130854,130855],{"align":25391},"书写更简单",[2008,130857,130858],{"align":25391},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1962,130860,130861,130864,130867],{},[2008,130862,130863],{"align":25391},"背景半透明",[2008,130865,130866],{"align":25391},"背景颜色半透明",[2008,130868,130869],{"align":25391},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130871,130872],{},"颜色渐变：",[3145,130874],{"style":128040,"src":130875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3145,130877],{"style":128040,"src":130878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[633,130880,130882],{"id":130881},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[23,130884,130886],{"className":128931,"code":130885,"language":128933,"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,130887,130888,130903,130922,130941,130960,130979,130998],{"__ignoreMap":28},[33,130889,130890,130892,130894,130896,130898,130901],{"class":35,"line":36},[33,130891,2726],{"class":59},[33,130893,53256],{"class":52945},[33,130895,55131],{"class":3632},[33,130897,64],{"class":59},[33,130899,130900],{"class":117},"\"nav\"",[33,130902,52952],{"class":59},[33,130904,130905,130907,130909,130911,130913,130915,130918,130920],{"class":35,"line":43},[33,130906,53789],{"class":59},[33,130908,2057],{"class":52945},[33,130910,62699],{"class":3632},[33,130912,64],{"class":59},[33,130914,62704],{"class":117},[33,130916,130917],{"class":59},">五彩导航1\u003C\u002F",[33,130919,2057],{"class":52945},[33,130921,52952],{"class":59},[33,130923,130924,130926,130928,130930,130932,130934,130937,130939],{"class":35,"line":130},[33,130925,53789],{"class":59},[33,130927,2057],{"class":52945},[33,130929,62699],{"class":3632},[33,130931,64],{"class":59},[33,130933,62704],{"class":117},[33,130935,130936],{"class":59},">五彩导航2\u003C\u002F",[33,130938,2057],{"class":52945},[33,130940,52952],{"class":59},[33,130942,130943,130945,130947,130949,130951,130953,130956,130958],{"class":35,"line":146},[33,130944,53789],{"class":59},[33,130946,2057],{"class":52945},[33,130948,62699],{"class":3632},[33,130950,64],{"class":59},[33,130952,62704],{"class":117},[33,130954,130955],{"class":59},">五彩导航3\u003C\u002F",[33,130957,2057],{"class":52945},[33,130959,52952],{"class":59},[33,130961,130962,130964,130966,130968,130970,130972,130975,130977],{"class":35,"line":267},[33,130963,53789],{"class":59},[33,130965,2057],{"class":52945},[33,130967,62699],{"class":3632},[33,130969,64],{"class":59},[33,130971,62704],{"class":117},[33,130973,130974],{"class":59},">五彩导航4\u003C\u002F",[33,130976,2057],{"class":52945},[33,130978,52952],{"class":59},[33,130980,130981,130983,130985,130987,130989,130991,130994,130996],{"class":35,"line":275},[33,130982,53789],{"class":59},[33,130984,2057],{"class":52945},[33,130986,62699],{"class":3632},[33,130988,64],{"class":59},[33,130990,62704],{"class":117},[33,130992,130993],{"class":59},">五彩导航5\u003C\u002F",[33,130995,2057],{"class":52945},[33,130997,52952],{"class":59},[33,130999,131000,131002,131004],{"class":35,"line":392},[33,131001,53430],{"class":59},[33,131003,53256],{"class":52945},[33,131005,52952],{"class":59},[23,131007,131009],{"className":128184,"code":131008,"language":128186,"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,131010,131011,131020,131030,131042,131054,131064,131076,131086,131090,131115,131138,131161,131184],{"__ignoreMap":28},[33,131012,131013,131016,131018],{"class":35,"line":36},[33,131014,131015],{"class":3632},".nav",[33,131017,3081],{"class":52945},[33,131019,17228],{"class":59},[33,131021,131022,131024,131026,131028],{"class":35,"line":43},[33,131023,129800],{"class":39},[33,131025,53082],{"class":59},[33,131027,74024],{"class":39},[33,131029,2976],{"class":59},[33,131031,131032,131034,131036,131038,131040],{"class":35,"line":130},[33,131033,72210],{"class":39},[33,131035,53082],{"class":59},[33,131037,2634],{"class":39},[33,131039,53137],{"class":63},[33,131041,2976],{"class":59},[33,131043,131044,131046,131048,131050,131052],{"class":35,"line":146},[33,131045,72430],{"class":39},[33,131047,53082],{"class":59},[33,131049,2673],{"class":39},[33,131051,53137],{"class":63},[33,131053,2976],{"class":59},[33,131055,131056,131058,131060,131062],{"class":35,"line":267},[33,131057,72168],{"class":39},[33,131059,53082],{"class":59},[33,131061,53237],{"class":39},[33,131063,2976],{"class":59},[33,131065,131066,131068,131070,131072,131074],{"class":35,"line":275},[33,131067,128868],{"class":39},[33,131069,53082],{"class":59},[33,131071,2673],{"class":39},[33,131073,53137],{"class":63},[33,131075,2976],{"class":59},[33,131077,131078,131080,131082,131084],{"class":35,"line":392},[33,131079,72547],{"class":39},[33,131081,53082],{"class":59},[33,131083,62484],{"class":39},[33,131085,2976],{"class":59},[33,131087,131088],{"class":35,"line":406},[33,131089,3247],{"class":59},[33,131091,131092,131094,131096,131099,131101,131103,131106,131108,131110,131112],{"class":35,"line":418},[33,131093,131015],{"class":3632},[33,131095,3081],{"class":52945},[33,131097,131098],{"class":3632},":nth-child",[33,131100,109],{"class":59},[33,131102,2036],{"class":39},[33,131104,131105],{"class":59},") { ",[33,131107,130797],{"class":39},[33,131109,53082],{"class":59},[33,131111,130215],{"class":39},[33,131113,131114],{"class":59},"; }\n",[33,131116,131117,131119,131121,131123,131125,131127,131129,131131,131133,131136],{"class":35,"line":425},[33,131118,131015],{"class":3632},[33,131120,3081],{"class":52945},[33,131122,131098],{"class":3632},[33,131124,109],{"class":59},[33,131126,1897],{"class":39},[33,131128,131105],{"class":59},[33,131130,130797],{"class":39},[33,131132,53082],{"class":59},[33,131134,131135],{"class":39},"#ff0000",[33,131137,131114],{"class":59},[33,131139,131140,131142,131144,131146,131148,131150,131152,131154,131156,131159],{"class":35,"line":1147},[33,131141,131015],{"class":3632},[33,131143,3081],{"class":52945},[33,131145,131098],{"class":3632},[33,131147,109],{"class":59},[33,131149,1891],{"class":39},[33,131151,131105],{"class":59},[33,131153,130797],{"class":39},[33,131155,53082],{"class":59},[33,131157,131158],{"class":39},"#00a4ff",[33,131160,131114],{"class":59},[33,131162,131163,131165,131167,131169,131171,131173,131175,131177,131179,131182],{"class":35,"line":1329},[33,131164,131015],{"class":3632},[33,131166,3081],{"class":52945},[33,131168,131098],{"class":3632},[33,131170,109],{"class":59},[33,131172,2111],{"class":39},[33,131174,131105],{"class":59},[33,131176,130797],{"class":39},[33,131178,53082],{"class":59},[33,131180,131181],{"class":39},"#ff00ff",[33,131183,131114],{"class":59},[33,131185,131186,131188,131190,131192,131194,131196,131198,131200,131202,131205],{"class":35,"line":1341},[33,131187,131015],{"class":3632},[33,131189,3081],{"class":52945},[33,131191,131098],{"class":3632},[33,131193,109],{"class":59},[33,131195,2137],{"class":39},[33,131197,131105],{"class":59},[33,131199,130797],{"class":39},[33,131201,53082],{"class":59},[33,131203,131204],{"class":39},"#00ff00",[33,131206,131114],{"class":59},[14,131208,131210],{"id":131209},"_83-css三大特性","8.3 css三大特性",[633,131212,131214],{"id":131213},"_831-层叠性","8.3.1 层叠性",[19,131216,131217],{},"为了解决样式冲突问题",[19,131219,131220],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131222,131223],{},"   ②样式不冲突，不会层叠",[633,131225,131227],{"id":131226},"_832-继承性","8.3.2 继承性",[19,131229,131230],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131232,131233],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[23,131235,131237],{"className":128184,"code":131236,"language":128186,"meta":28,"style":28},"p {\n  color: #333;\n}\n",[30,131238,131239,131245,131255],{"__ignoreMap":28},[33,131240,131241,131243],{"class":35,"line":36},[33,131242,19],{"class":52945},[33,131244,17228],{"class":59},[33,131246,131247,131249,131251,131253],{"class":35,"line":43},[33,131248,72547],{"class":39},[33,131250,53082],{"class":59},[33,131252,64011],{"class":39},[33,131254,2976],{"class":59},[33,131256,131257],{"class":35,"line":130},[33,131258,3247],{"class":59},[3145,131260],{"style":128040,"src":131261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131263,131264],{},"解释：①行高可以跟单位也可以不跟单位",[19,131266,131267],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131269,131270],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131272,131273],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[633,131275,131277],{"id":131276},"_833-优先级","8.3.3 优先级",[162,131279,131280,131283],{},[165,131281,131282],{},"选择器相同，则执行层叠性",[165,131284,131285],{},"选择器不同，则根据选择器权重执行",[1956,131287,131288,131298],{},[1959,131289,131290],{},[1962,131291,131292,131295],{},[1965,131293,131294],{"align":25391},"选择器",[1965,131296,131297],{"align":25391},"选择器权重",[2003,131299,131300,131308,131316,131324,131332,131340],{},[1962,131301,131302,131305],{},[2008,131303,131304],{"align":25391},"继承 或者*",[2008,131306,131307],{"align":25391},"0，0，0，0",[1962,131309,131310,131313],{},[2008,131311,131312],{"align":25391},"标签选择器",[2008,131314,131315],{"align":25391},"0，0，0，1",[1962,131317,131318,131321],{},[2008,131319,131320],{"align":25391},"类选择器，伪类选择器",[2008,131322,131323],{"align":25391},"0，0，1，0",[1962,131325,131326,131329],{},[2008,131327,131328],{"align":25391},"ID选择器",[2008,131330,131331],{"align":25391},"0，1，0，0",[1962,131333,131334,131337],{},[2008,131335,131336],{"align":25391},"行内样式",[2008,131338,131339],{"align":25391},"1，0，0，0",[1962,131341,131342,131345],{},[2008,131343,131344],{"align":25391},"！important",[2008,131346,131347],{"align":25391},"无穷大",[19,131349,131350],{},"! important用法：",[23,131352,131354],{"className":128184,"code":131353,"language":128186,"meta":28,"style":28},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[30,131355,131356,131361,131367,131380,131384,131389,131395,131405],{"__ignoreMap":28},[33,131357,131358],{"class":35,"line":36},[33,131359,131360],{"class":87},"\u002F* !important 拥有最高优先级 *\u002F\n",[33,131362,131363,131365],{"class":35,"line":43},[33,131364,53256],{"class":52945},[33,131366,17228],{"class":59},[33,131368,131369,131371,131373,131375,131378],{"class":35,"line":130},[33,131370,72547],{"class":39},[33,131372,53082],{"class":59},[33,131374,53290],{"class":39},[33,131376,131377],{"class":63}," !important",[33,131379,2976],{"class":59},[33,131381,131382],{"class":35,"line":146},[33,131383,3247],{"class":59},[33,131385,131386],{"class":35,"line":267},[33,131387,131388],{"class":87},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[33,131390,131391,131393],{"class":35,"line":275},[33,131392,53256],{"class":52945},[33,131394,17228],{"class":59},[33,131396,131397,131399,131401,131403],{"class":35,"line":392},[33,131398,72547],{"class":39},[33,131400,53082],{"class":59},[33,131402,59064],{"class":39},[33,131404,2976],{"class":59},[33,131406,131407],{"class":35,"line":406},[33,131408,3247],{"class":59},[19,131410,131411],{},"优先级注意点：",[19,131413,131414],{},"①权重是有4组数字组成,但是不会有进位",[19,131416,131417],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131419,131420],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131422,131423],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131425,131426],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131428,131429],{},"⑥复合选择器",[1956,131431,131432,131442],{},[1959,131433,131434],{},[1962,131435,131436,131439],{},[1965,131437,131438],{"align":25391},"div ul li",[1965,131440,131441],{"align":25391},"0,0,0,3",[2003,131443,131444,131452,131460],{},[1962,131445,131446,131449],{},[2008,131447,131448],{"align":25391},".nav ul li",[2008,131450,131451],{"align":25391},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1962,131453,131454,131457],{},[2008,131455,131456],{"align":25391},"a:hover",[2008,131458,131459],{"align":25391},"0,0,1,1",[1962,131461,131462,131465],{},[2008,131463,131464],{"align":25391},".nav a",[2008,131466,131459],{"align":25391},[1729,131468,131469],{},"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":43,"depth":43,"links":131471},[131472,131480,131491],{"id":129580,"depth":43,"text":129581,"children":131473},[131474,131475,131476,131477,131478,131479],{"id":129593,"depth":130,"text":129594},{"id":129665,"depth":130,"text":129666},{"id":129737,"depth":130,"text":129738},{"id":129768,"depth":130,"text":129769},{"id":129775,"depth":130,"text":129776},{"id":129928,"depth":130,"text":129929},{"id":130236,"depth":43,"text":130237,"children":131481},[131482,131483,131484,131485,131486,131487,131488,131489,131490],{"id":130243,"depth":130,"text":130244},{"id":130253,"depth":130,"text":130254},{"id":130349,"depth":130,"text":130350},{"id":130422,"depth":130,"text":130423},{"id":130577,"depth":130,"text":130578},{"id":130665,"depth":130,"text":130666},{"id":130717,"depth":130,"text":130718},{"id":130776,"depth":130,"text":130777},{"id":130881,"depth":130,"text":130882},{"id":131209,"depth":43,"text":131210,"children":131492},[131493,131494,131495],{"id":131213,"depth":130,"text":131214},{"id":131226,"depth":130,"text":131227},{"id":131276,"depth":130,"text":131277},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129572,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131502,"title":131503,"body":131504,"description":1751,"extension":1752,"meta":133094,"navigation":126,"path":133095,"seo":133096,"stem":133097,"__hash__":133098},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131505,"toc":133073},[131506,131509,131513,131516,131519,131522,131525,131528,131531,131534,131538,131546,131583,131619,131622,131636,131641,131675,131678,131771,131776,131779,131809,131812,131817,131825,131829,131836,131882,131926,131931,131934,131937,131940,131943,131946,131949,131951,131954,131958,131963,132007,132012,132015,132018,132055,132060,132063,132066,132069,132072,132104,132107,132110,132113,132145,132148,132151,132154,132158,132161,132193,132196,132200,132220,132223,132231,132234,132238,132243,132246,132278,132283,132286,132324,132328,132333,132336,132339,132370,132373,132390,132395,132447,132507,132512,132566,132604,132608,132612,132615,132619,132627,132630,132632,132643,132648,132696,132730,132733,132736,132739,132742,132786,132789,132792,132795,132798,132801,132804,132848,132851,132854,132857,132860,132863,132866,132872,132875,132919,132922,132925,132928,132931,132934,132978,132981,132983,132986,132990,132994,133032,133036,133039,133042,133046,133054,133058,133061,133064,133067,133070],[10,131507,131503],{"id":131508},"_9-css盒模型浮动与切图",[14,131510,131512],{"id":131511},"_91-盒子模型","9.1 盒子模型",[19,131514,131515],{},"利用盒子来设计网页",[19,131517,131518],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131520,131521],{},"网页布局设置：",[19,131523,131524],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131526,131527],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131529,131530],{},"③往盒子里装内容",[3145,131532],{"style":128040,"src":131533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[633,131535,131537],{"id":131536},"_911-边框border","9.1.1 边框（border）",[162,131539,131540,131543],{},[165,131541,131542],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[165,131544,131545],{},"语法",[23,131547,131549],{"className":128184,"code":131548,"language":128186,"meta":28,"style":28},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[30,131550,131551,131556,131562,131579],{"__ignoreMap":28},[33,131552,131553],{"class":35,"line":36},[33,131554,131555],{"class":87},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[33,131557,131558,131560],{"class":35,"line":43},[33,131559,53256],{"class":52945},[33,131561,17228],{"class":59},[33,131563,131564,131566,131568,131570,131572,131574,131577],{"class":35,"line":130},[33,131565,72538],{"class":39},[33,131567,53082],{"class":59},[33,131569,2036],{"class":39},[33,131571,53137],{"class":63},[33,131573,53166],{"class":39},[33,131575,131576],{"class":39}," #ccc",[33,131578,2976],{"class":59},[33,131580,131581],{"class":35,"line":146},[33,131582,3247],{"class":59},[1956,131584,131585,131593],{},[1959,131586,131587],{},[1962,131588,131589,131591],{},[1965,131590,130786],{"align":25391},[1965,131592,104334],{"align":25391},[2003,131594,131595,131603,131611],{},[1962,131596,131597,131600],{},[2008,131598,131599],{"align":25391},"border-width",[2008,131601,131602],{"align":25391},"定义边框粗细，单位是px",[1962,131604,131605,131608],{},[2008,131606,131607],{"align":25391},"border-style",[2008,131609,131610],{"align":25391},"边框的样式",[1962,131612,131613,131616],{},[2008,131614,131615],{"align":25391},"border-color",[2008,131617,131618],{"align":25391},"边框的颜色",[19,131620,131621],{},"边框样式 border-style 可以设置如下值：",[2822,131623,131624,131627,131630,131633],{},[165,131625,131626],{},"none：没有边框即忽略所有边框的宽度（默认值）",[165,131628,131629],{},"solid：边框为单实线(最为常用的)",[165,131631,131632],{},"dashed：边框为虚线",[165,131634,131635],{},"dotted：边框为点线",[162,131637,131638],{"start":130},[165,131639,131640],{},"边框的合写分写",[23,131642,131643],{"className":128184,"code":131548,"language":128186,"meta":28,"style":28},[30,131644,131645,131649,131655,131671],{"__ignoreMap":28},[33,131646,131647],{"class":35,"line":36},[33,131648,131555],{"class":87},[33,131650,131651,131653],{"class":35,"line":43},[33,131652,53256],{"class":52945},[33,131654,17228],{"class":59},[33,131656,131657,131659,131661,131663,131665,131667,131669],{"class":35,"line":130},[33,131658,72538],{"class":39},[33,131660,53082],{"class":59},[33,131662,2036],{"class":39},[33,131664,53137],{"class":63},[33,131666,53166],{"class":39},[33,131668,131576],{"class":39},[33,131670,2976],{"class":59},[33,131672,131673],{"class":35,"line":146},[33,131674,3247],{"class":59},[19,131676,131677],{},"边框分开写法：",[23,131679,131681],{"className":128184,"code":131680,"language":128186,"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,131682,131683,131688,131694,131712,131730,131749,131767],{"__ignoreMap":28},[33,131684,131685],{"class":35,"line":36},[33,131686,131687],{"class":87},"\u002F* 边框分开写法 *\u002F\n",[33,131689,131690,131692],{"class":35,"line":43},[33,131691,53256],{"class":52945},[33,131693,17228],{"class":59},[33,131695,131696,131699,131701,131703,131705,131707,131710],{"class":35,"line":130},[33,131697,131698],{"class":39},"  border-top",[33,131700,53082],{"class":59},[33,131702,2036],{"class":39},[33,131704,53137],{"class":63},[33,131706,53166],{"class":39},[33,131708,131709],{"class":39}," #000",[33,131711,2976],{"class":59},[33,131713,131714,131717,131719,131721,131723,131725,131728],{"class":35,"line":146},[33,131715,131716],{"class":39},"  border-right",[33,131718,53082],{"class":59},[33,131720,1897],{"class":39},[33,131722,53137],{"class":63},[33,131724,63883],{"class":39},[33,131726,131727],{"class":39}," #333",[33,131729,2976],{"class":59},[33,131731,131732,131735,131737,131739,131741,131744,131747],{"class":35,"line":267},[33,131733,131734],{"class":39},"  border-bottom",[33,131736,53082],{"class":59},[33,131738,1891],{"class":39},[33,131740,53137],{"class":63},[33,131742,131743],{"class":39}," dotted",[33,131745,131746],{"class":39}," #666",[33,131748,2976],{"class":59},[33,131750,131751,131754,131756,131758,131760,131762,131765],{"class":35,"line":275},[33,131752,131753],{"class":39},"  border-left",[33,131755,53082],{"class":59},[33,131757,2036],{"class":39},[33,131759,53137],{"class":63},[33,131761,53166],{"class":39},[33,131763,131764],{"class":39}," #999",[33,131766,2976],{"class":59},[33,131768,131769],{"class":35,"line":392},[33,131770,3247],{"class":59},[162,131772,131773],{"start":146},[165,131774,131775],{},"表格的细线边框",[19,131777,131778],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[23,131780,131782],{"className":128184,"code":131781,"language":128186,"meta":28,"style":28},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[30,131783,131784,131789,131795,131805],{"__ignoreMap":28},[33,131785,131786],{"class":35,"line":36},[33,131787,131788],{"class":87},"\u002F* 表格细线边框合并 *\u002F\n",[33,131790,131791,131793],{"class":35,"line":43},[33,131792,1956],{"class":52945},[33,131794,17228],{"class":59},[33,131796,131797,131799,131801,131803],{"class":35,"line":130},[33,131798,72220],{"class":39},[33,131800,53082],{"class":59},[33,131802,66677],{"class":39},[33,131804,2976],{"class":59},[33,131806,131807],{"class":35,"line":146},[33,131808,3247],{"class":59},[19,131810,131811],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[162,131813,131814],{"start":267},[165,131815,131816],{},"解决边框额外增加盒子的实际大小的方法：",[2822,131818,131819,131822],{},[165,131820,131821],{},"测量盒子大小的时候,不量边框",[165,131823,131824],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[633,131826,131828],{"id":131827},"_912-内边距","9.1.2 内边距",[162,131830,131831,131834],{},[165,131832,131833],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[165,131835,131545],{},[1956,131837,131838,131848],{},[1959,131839,131840],{},[1962,131841,131842,131845],{},[1965,131843,131844],{"align":25391},"值的个数",[1965,131846,131847],{"align":25391},"表达意思",[2003,131849,131850,131858,131866,131874],{},[1962,131851,131852,131855],{},[2008,131853,131854],{"align":25391},"padding: 5px;",[2008,131856,131857],{"align":25391},"1个值，代表上下左右都有5个元素",[1962,131859,131860,131863],{},[2008,131861,131862],{"align":25391},"padding: 5px 10px;",[2008,131864,131865],{"align":25391},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1962,131867,131868,131871],{},[2008,131869,131870],{"align":25391},"padding: 5px 10px 20px;",[2008,131872,131873],{"align":25391},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1962,131875,131876,131879],{},[2008,131877,131878],{"align":25391},"padding: 5px 10px 20px 30px;",[2008,131880,131881],{"align":25391},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1956,131883,131884,131892],{},[1959,131885,131886],{},[1962,131887,131888,131890],{},[1965,131889,130786],{"align":25391},[1965,131891,104334],{"align":25391},[2003,131893,131894,131902,131910,131918],{},[1962,131895,131896,131899],{},[2008,131897,131898],{"align":25391},"padding-left",[2008,131900,131901],{"align":25391},"左内边距",[1962,131903,131904,131907],{},[2008,131905,131906],{"align":25391},"padding-right",[2008,131908,131909],{"align":25391},"右内边距",[1962,131911,131912,131915],{},[2008,131913,131914],{"align":25391},"padding-top",[2008,131916,131917],{"align":25391},"上内边距",[1962,131919,131920,131923],{},[2008,131921,131922],{"align":25391},"padding-bottom",[2008,131924,131925],{"align":25391},"下内边距",[162,131927,131928],{"start":130},[165,131929,131930],{},"内边距会影响盒子的实际大小",[19,131932,131933],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131935,131936],{},"①内容和边框有了距离，添加了内边距",[19,131938,131939],{},"②padding影响了盒子实际大小",[19,131941,131942],{},"内边距对盒子大小的影响：",[19,131944,131945],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131947,131948],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131950,96859],{},[19,131952,131953],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[633,131955,131957],{"id":131956},"_913-外边距","9.1.3 外边距",[162,131959,131960],{},[165,131961,131962],{},"控制盒子与盒子之间的距离",[1956,131964,131965,131973],{},[1959,131966,131967],{},[1962,131968,131969,131971],{},[1965,131970,130786],{"align":25391},[1965,131972,104334],{"align":25391},[2003,131974,131975,131983,131991,131999],{},[1962,131976,131977,131980],{},[2008,131978,131979],{"align":25391},"margin-left",[2008,131981,131982],{"align":25391},"左外边距",[1962,131984,131985,131988],{},[2008,131986,131987],{"align":25391},"margin-right",[2008,131989,131990],{"align":25391},"右外边距",[1962,131992,131993,131996],{},[2008,131994,131995],{"align":25391},"margin-top",[2008,131997,131998],{"align":25391},"上外边距",[1962,132000,132001,132004],{},[2008,132002,132003],{"align":25391},"margin-bottom",[2008,132005,132006],{"align":25391},"下外边距",[162,132008,132009],{"start":43},[165,132010,132011],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132013,132014],{},"①盒子必须指定了宽度（width）",[19,132016,132017],{},"②盒子左右的外边距都设置为 auto",[23,132019,132021],{"className":128184,"code":132020,"language":128186,"meta":28,"style":28},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,132022,132023,132028,132035,132051],{"__ignoreMap":28},[33,132024,132025],{"class":35,"line":36},[33,132026,132027],{"class":87},"\u002F* margin 复合写法（同上） *\u002F\n",[33,132029,132030,132033],{"class":35,"line":43},[33,132031,132032],{"class":3632},".box",[33,132034,17228],{"class":59},[33,132036,132037,132039,132041,132043,132045,132048],{"class":35,"line":130},[33,132038,72112],{"class":39},[33,132040,53082],{"class":59},[33,132042,2010],{"class":39},[33,132044,53201],{"class":39},[33,132046,132047],{"class":59},";  ",[33,132049,132050],{"class":87},"\u002F* 块级盒子水平居中 *\u002F\n",[33,132052,132053],{"class":35,"line":146},[33,132054,3247],{"class":59},[162,132056,132057],{"start":130},[165,132058,132059],{},"外边距塌陷问题",[19,132061,132062],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3145,132064],{"style":128040,"src":132065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132067,132068],{},"解决方案：",[19,132070,132071],{},"①可以为父亲元素定义上边距",[23,132073,132074],{"className":128184,"code":132020,"language":128186,"meta":28,"style":28},[30,132075,132076,132080,132086,132100],{"__ignoreMap":28},[33,132077,132078],{"class":35,"line":36},[33,132079,132027],{"class":87},[33,132081,132082,132084],{"class":35,"line":43},[33,132083,132032],{"class":3632},[33,132085,17228],{"class":59},[33,132087,132088,132090,132092,132094,132096,132098],{"class":35,"line":130},[33,132089,72112],{"class":39},[33,132091,53082],{"class":59},[33,132093,2010],{"class":39},[33,132095,53201],{"class":39},[33,132097,132047],{"class":59},[33,132099,132050],{"class":87},[33,132101,132102],{"class":35,"line":146},[33,132103,3247],{"class":59},[19,132105,132106],{},"②可以为父亲元素定义上内边距",[19,132108,132109],{},"③可以为父亲元素添加overflow:hidden",[3145,132111],{"style":128040,"src":132112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[23,132114,132115],{"className":128184,"code":132020,"language":128186,"meta":28,"style":28},[30,132116,132117,132121,132127,132141],{"__ignoreMap":28},[33,132118,132119],{"class":35,"line":36},[33,132120,132027],{"class":87},[33,132122,132123,132125],{"class":35,"line":43},[33,132124,132032],{"class":3632},[33,132126,17228],{"class":59},[33,132128,132129,132131,132133,132135,132137,132139],{"class":35,"line":130},[33,132130,72112],{"class":39},[33,132132,53082],{"class":59},[33,132134,2010],{"class":39},[33,132136,53201],{"class":39},[33,132138,132047],{"class":59},[33,132140,132050],{"class":87},[33,132142,132143],{"class":35,"line":146},[33,132144,3247],{"class":59},[3145,132146],{"style":128040,"src":132147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132149,132150],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132152,132153],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[633,132155,132157],{"id":132156},"_914-清除内外边距","9.1.4 清除内外边距",[19,132159,132160],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[23,132162,132163],{"className":128184,"code":132020,"language":128186,"meta":28,"style":28},[30,132164,132165,132169,132175,132189],{"__ignoreMap":28},[33,132166,132167],{"class":35,"line":36},[33,132168,132027],{"class":87},[33,132170,132171,132173],{"class":35,"line":43},[33,132172,132032],{"class":3632},[33,132174,17228],{"class":59},[33,132176,132177,132179,132181,132183,132185,132187],{"class":35,"line":130},[33,132178,72112],{"class":39},[33,132180,53082],{"class":59},[33,132182,2010],{"class":39},[33,132184,53201],{"class":39},[33,132186,132047],{"class":59},[33,132188,132050],{"class":87},[33,132190,132191],{"class":35,"line":146},[33,132192,3247],{"class":59},[19,132194,132195],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[633,132197,132199],{"id":132198},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2822,132201,132202,132205,132208,132211,132214,132217],{},[165,132203,132204],{},"文件→打开 ：可以打开我们要测量的图片",[165,132206,132207],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[165,132209,132210],{},"右击标尺，把里面的单位改为像素",[165,132212,132213],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[165,132215,132216],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[165,132218,132219],{},"用选区拖动 可以测量大小",[3145,132221],{"style":128040,"src":132222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2822,132224,132225,132228],{},[165,132226,132227],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[165,132229,132230],{},"吸管取色工具",[3145,132232],{"style":128040,"src":132233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[633,132235,132237],{"id":132236},"_916-案例","9.1.6 案例",[162,132239,132240],{},[165,132241,132242],{},"小米商品",[3145,132244],{"style":128040,"src":132245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[23,132247,132248],{"className":128184,"code":132020,"language":128186,"meta":28,"style":28},[30,132249,132250,132254,132260,132274],{"__ignoreMap":28},[33,132251,132252],{"class":35,"line":36},[33,132253,132027],{"class":87},[33,132255,132256,132258],{"class":35,"line":43},[33,132257,132032],{"class":3632},[33,132259,17228],{"class":59},[33,132261,132262,132264,132266,132268,132270,132272],{"class":35,"line":130},[33,132263,72112],{"class":39},[33,132265,53082],{"class":59},[33,132267,2010],{"class":39},[33,132269,53201],{"class":39},[33,132271,132047],{"class":59},[33,132273,132050],{"class":87},[33,132275,132276],{"class":35,"line":146},[33,132277,3247],{"class":59},[162,132279,132280],{"start":43},[165,132281,132282],{},"快报模块",[3145,132284],{"style":128040,"src":132285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[23,132287,132289],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[30,132290,132291,132296,132311,132316],{"__ignoreMap":28},[33,132292,132293],{"class":35,"line":36},[33,132294,132295],{"class":87},"\u003C!-- HTML 代码示例 -->\n",[33,132297,132298,132300,132302,132304,132306,132309],{"class":35,"line":43},[33,132299,2726],{"class":59},[33,132301,53256],{"class":52945},[33,132303,55131],{"class":3632},[33,132305,64],{"class":59},[33,132307,132308],{"class":117},"\"example\"",[33,132310,52952],{"class":59},[33,132312,132313],{"class":35,"line":130},[33,132314,132315],{"class":59},"  示例内容\n",[33,132317,132318,132320,132322],{"class":35,"line":146},[33,132319,53430],{"class":59},[33,132321,53256],{"class":52945},[33,132323,52952],{"class":59},[633,132325,132327],{"id":132326},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[162,132329,132330],{},[165,132331,132332],{},"圆角边框",[19,132334,132335],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3145,132337],{"style":128040,"src":132338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[23,132340,132342],{"className":128184,"code":132341,"language":128186,"meta":28,"style":28},"div {\n  border: 1px solid #ccc;\n}\n",[30,132343,132344,132350,132366],{"__ignoreMap":28},[33,132345,132346,132348],{"class":35,"line":36},[33,132347,53256],{"class":52945},[33,132349,17228],{"class":59},[33,132351,132352,132354,132356,132358,132360,132362,132364],{"class":35,"line":43},[33,132353,72538],{"class":39},[33,132355,53082],{"class":59},[33,132357,2036],{"class":39},[33,132359,53137],{"class":63},[33,132361,53166],{"class":39},[33,132363,131576],{"class":39},[33,132365,2976],{"class":59},[33,132367,132368],{"class":35,"line":130},[33,132369,3247],{"class":59},[19,132371,132372],{},"解释:",[2822,132374,132375,132378,132381,132384,132387],{},[165,132376,132377],{},"参数值可以为数值或百分比的形式",[165,132379,132380],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[165,132382,132383],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[165,132385,132386],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[165,132388,132389],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[162,132391,132392],{"start":43},[165,132393,132394],{},"盒子阴影",[23,132396,132398],{"className":128184,"code":132397,"language":128186,"meta":28,"style":28},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[30,132399,132400,132406,132443],{"__ignoreMap":28},[33,132401,132402,132404],{"class":35,"line":36},[33,132403,53256],{"class":52945},[33,132405,17228],{"class":59},[33,132407,132408,132411,132413,132415,132417,132419,132421,132423,132425,132427,132429,132431,132433,132435,132437,132439,132441],{"class":35,"line":43},[33,132409,132410],{"class":39},"  box-shadow",[33,132412,53082],{"class":59},[33,132414,2010],{"class":39},[33,132416,16413],{"class":39},[33,132418,53137],{"class":63},[33,132420,3706],{"class":39},[33,132422,53137],{"class":63},[33,132424,80408],{"class":39},[33,132426,109],{"class":59},[33,132428,2010],{"class":39},[33,132430,14093],{"class":59},[33,132432,2010],{"class":39},[33,132434,14093],{"class":59},[33,132436,2010],{"class":39},[33,132438,14093],{"class":59},[33,132440,87850],{"class":39},[33,132442,4385],{"class":59},[33,132444,132445],{"class":35,"line":130},[33,132446,3247],{"class":59},[1956,132448,132449,132457],{},[1959,132450,132451],{},[1962,132452,132453,132455],{},[1965,132454,1971],{"align":25391},[1965,132456,29145],{"align":25391},[2003,132458,132459,132467,132475,132483,132491,132499],{},[1962,132460,132461,132464],{},[2008,132462,132463],{"align":25391},"h-shadow",[2008,132465,132466],{"align":25391},"必需,水平阴影的位置,允许负值",[1962,132468,132469,132472],{},[2008,132470,132471],{"align":25391},"v-shadow",[2008,132473,132474],{"align":25391},"必需,垂直阴影的位置,允许负值",[1962,132476,132477,132480],{},[2008,132478,132479],{"align":25391},"blur",[2008,132481,132482],{"align":25391},"可选,模糊距离,就是影子的虚实",[1962,132484,132485,132488],{},[2008,132486,132487],{"align":25391},"spread",[2008,132489,132490],{"align":25391},"可选,阴影尺寸",[1962,132492,132493,132496],{},[2008,132494,132495],{"align":25391},"color",[2008,132497,132498],{"align":25391},"可选,阴影的颜色",[1962,132500,132501,132504],{},[2008,132502,132503],{"align":25391},"inset",[2008,132505,132506],{"align":25391},"可选,将外部阴影(outset)改为内部阴影",[162,132508,132509],{"start":130},[165,132510,132511],{},"文字阴影",[23,132513,132515],{"className":128184,"code":132514,"language":128186,"meta":28,"style":28},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[30,132516,132517,132523,132562],{"__ignoreMap":28},[33,132518,132519,132521],{"class":35,"line":36},[33,132520,19],{"class":52945},[33,132522,17228],{"class":59},[33,132524,132525,132528,132530,132532,132534,132536,132538,132540,132542,132544,132546,132548,132550,132552,132554,132556,132558,132560],{"class":35,"line":43},[33,132526,132527],{"class":39},"  text-shadow",[33,132529,53082],{"class":59},[33,132531,2036],{"class":39},[33,132533,53137],{"class":63},[33,132535,26774],{"class":39},[33,132537,53137],{"class":63},[33,132539,16413],{"class":39},[33,132541,53137],{"class":63},[33,132543,80408],{"class":39},[33,132545,109],{"class":59},[33,132547,2010],{"class":39},[33,132549,14093],{"class":59},[33,132551,2010],{"class":39},[33,132553,14093],{"class":59},[33,132555,2010],{"class":39},[33,132557,14093],{"class":59},[33,132559,102160],{"class":39},[33,132561,4385],{"class":59},[33,132563,132564],{"class":35,"line":130},[33,132565,3247],{"class":59},[1956,132567,132568,132576],{},[1959,132569,132570],{},[1962,132571,132572,132574],{},[1965,132573,1971],{"align":25391},[1965,132575,29145],{"align":25391},[2003,132577,132578,132584,132591,132598],{},[1962,132579,132580,132582],{},[2008,132581,132463],{"align":25391},[2008,132583,132466],{"align":25391},[1962,132585,132586,132588],{},[2008,132587,132471],{"align":25391},[2008,132589,132590],{"align":25391},"必需,垂直阴影位置,允许负值",[1962,132592,132593,132595],{},[2008,132594,132479],{"align":25391},[2008,132596,132597],{"align":25391},"可选,模糊的距离",[1962,132599,132600,132602],{},[2008,132601,132495],{"align":25391},[2008,132603,132498],{"align":25391},[14,132605,132607],{"id":132606},"_92-浮动","9.2 浮动",[633,132609,132611],{"id":132610},"_921-浮动介绍","9.2.1 浮动介绍",[19,132613,132614],{},"在16.2中详细介绍",[633,132616,132618],{"id":132617},"_922-清除浮动","9.2.2 清除浮动",[162,132620,132621,132624],{},[165,132622,132623],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[165,132625,132626],{},"清除浮动的本质",[19,132628,132629],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132631,160],{},[2822,132633,132634,132637,132640],{},[165,132635,132636],{},"如果父盒子本身有高度，则不需要清除浮动",[165,132638,132639],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[165,132641,132642],{},"父级有了高度，就不会影响下面的标准流了",[162,132644,132645],{"start":130},[165,132646,132647],{},"清除浮动样式",[23,132649,132651],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[30,132652,132653,132660,132671,132675,132682,132692],{"__ignoreMap":28},[33,132654,132655,132658],{"class":35,"line":36},[33,132656,132657],{"class":3632},".left",[33,132659,17228],{"class":59},[33,132661,132662,132665,132667,132669],{"class":35,"line":43},[33,132663,132664],{"class":39},"  float",[33,132666,53082],{"class":59},[33,132668,25391],{"class":39},[33,132670,2976],{"class":59},[33,132672,132673],{"class":35,"line":130},[33,132674,3247],{"class":59},[33,132676,132677,132680],{"class":35,"line":146},[33,132678,132679],{"class":3632},".right",[33,132681,17228],{"class":59},[33,132683,132684,132686,132688,132690],{"class":35,"line":267},[33,132685,132664],{"class":39},[33,132687,53082],{"class":59},[33,132689,74163],{"class":39},[33,132691,2976],{"class":59},[33,132693,132694],{"class":35,"line":275},[33,132695,3247],{"class":59},[1956,132697,132698,132706],{},[1959,132699,132700],{},[1962,132701,132702,132704],{},[1965,132703,128648],{"align":25391},[1965,132705,29145],{"align":25391},[2003,132707,132708,132715,132722],{},[1962,132709,132710,132712],{},[2008,132711,25391],{"align":25391},[2008,132713,132714],{"align":25391},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1962,132716,132717,132719],{},[2008,132718,74163],{"align":25391},[2008,132720,132721],{"align":25391},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1962,132723,132724,132727],{},[2008,132725,132726],{"align":25391},"both",[2008,132728,132729],{"align":25391},"同时清除左右侧浮动的影响",[19,132731,132732],{},"法一",[19,132734,132735],{},"额外标签法也称为隔墙法",[19,132737,132738],{},"使用方式：",[19,132740,132741],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[23,132743,132744],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,132745,132746,132752,132762,132766,132772,132782],{"__ignoreMap":28},[33,132747,132748,132750],{"class":35,"line":36},[33,132749,132657],{"class":3632},[33,132751,17228],{"class":59},[33,132753,132754,132756,132758,132760],{"class":35,"line":43},[33,132755,132664],{"class":39},[33,132757,53082],{"class":59},[33,132759,25391],{"class":39},[33,132761,2976],{"class":59},[33,132763,132764],{"class":35,"line":130},[33,132765,3247],{"class":59},[33,132767,132768,132770],{"class":35,"line":146},[33,132769,132679],{"class":3632},[33,132771,17228],{"class":59},[33,132773,132774,132776,132778,132780],{"class":35,"line":267},[33,132775,132664],{"class":39},[33,132777,53082],{"class":59},[33,132779,74163],{"class":39},[33,132781,2976],{"class":59},[33,132783,132784],{"class":35,"line":275},[33,132785,3247],{"class":59},[19,132787,132788],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132790,132791],{},"优点： 通俗易懂，书写方便",[19,132793,132794],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132796,132797],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132799,132800],{},"法二",[19,132802,132803],{},"父级添加overflow属性",[23,132805,132806],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,132807,132808,132814,132824,132828,132834,132844],{"__ignoreMap":28},[33,132809,132810,132812],{"class":35,"line":36},[33,132811,132657],{"class":3632},[33,132813,17228],{"class":59},[33,132815,132816,132818,132820,132822],{"class":35,"line":43},[33,132817,132664],{"class":39},[33,132819,53082],{"class":59},[33,132821,25391],{"class":39},[33,132823,2976],{"class":59},[33,132825,132826],{"class":35,"line":130},[33,132827,3247],{"class":59},[33,132829,132830,132832],{"class":35,"line":146},[33,132831,132679],{"class":3632},[33,132833,17228],{"class":59},[33,132835,132836,132838,132840,132842],{"class":35,"line":267},[33,132837,132664],{"class":39},[33,132839,53082],{"class":59},[33,132841,74163],{"class":39},[33,132843,2976],{"class":59},[33,132845,132846],{"class":35,"line":275},[33,132847,3247],{"class":59},[19,132849,132850],{},"overflow: hidden;",[19,132852,132853],{},"优点：代码简洁",[19,132855,132856],{},"缺点：无法显示溢出的部分",[19,132858,132859],{},"注意：是给父元素添加代码",[19,132861,132862],{},"法三",[19,132864,132865],{},"父级添加after伪元素",[19,132867,132868,132871],{},[132869,132870],"after",{}," 方式是额外标签法的升级版",[19,132873,132874],{},"使用的时候复制就可以",[23,132876,132877],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,132878,132879,132885,132895,132899,132905,132915],{"__ignoreMap":28},[33,132880,132881,132883],{"class":35,"line":36},[33,132882,132657],{"class":3632},[33,132884,17228],{"class":59},[33,132886,132887,132889,132891,132893],{"class":35,"line":43},[33,132888,132664],{"class":39},[33,132890,53082],{"class":59},[33,132892,25391],{"class":39},[33,132894,2976],{"class":59},[33,132896,132897],{"class":35,"line":130},[33,132898,3247],{"class":59},[33,132900,132901,132903],{"class":35,"line":146},[33,132902,132679],{"class":3632},[33,132904,17228],{"class":59},[33,132906,132907,132909,132911,132913],{"class":35,"line":267},[33,132908,132664],{"class":39},[33,132910,53082],{"class":59},[33,132912,74163],{"class":39},[33,132914,2976],{"class":59},[33,132916,132917],{"class":35,"line":275},[33,132918,3247],{"class":59},[19,132920,132921],{},"优点：没有增加标签，结构更简单",[19,132923,132924],{},"缺点：照顾低版本浏览器",[19,132926,132927],{},"代表网站： 百度、淘宝网、网易等",[19,132929,132930],{},"法四",[19,132932,132933],{},"父级添加双伪元素",[23,132935,132936],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,132937,132938,132944,132954,132958,132964,132974],{"__ignoreMap":28},[33,132939,132940,132942],{"class":35,"line":36},[33,132941,132657],{"class":3632},[33,132943,17228],{"class":59},[33,132945,132946,132948,132950,132952],{"class":35,"line":43},[33,132947,132664],{"class":39},[33,132949,53082],{"class":59},[33,132951,25391],{"class":39},[33,132953,2976],{"class":59},[33,132955,132956],{"class":35,"line":130},[33,132957,3247],{"class":59},[33,132959,132960,132962],{"class":35,"line":146},[33,132961,132679],{"class":3632},[33,132963,17228],{"class":59},[33,132965,132966,132968,132970,132972],{"class":35,"line":267},[33,132967,132664],{"class":39},[33,132969,53082],{"class":59},[33,132971,74163],{"class":39},[33,132973,2976],{"class":59},[33,132975,132976],{"class":35,"line":275},[33,132977,3247],{"class":59},[19,132979,132980],{},"优点：代码更简洁",[19,132982,132924],{},[19,132984,132985],{},"代表网站：小米、腾讯等",[14,132987,132989],{"id":132988},"_93-ps切图","9.3 PS切图",[633,132991,132993],{"id":132992},"_931-常见图片格式","9.3.1 常见图片格式",[1956,132995,132996,133006],{},[1959,132997,132998],{},[1962,132999,133000,133003],{},[1965,133001,133002],{"align":25391},"jpg图像格式",[1965,133004,133005],{"align":25391},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2003,133007,133008,133016,133024],{},[1962,133009,133010,133013],{},[2008,133011,133012],{"align":25391},"gif图像格式",[2008,133014,133015],{"align":25391},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1962,133017,133018,133021],{},[2008,133019,133020],{"align":25391},"png图像格式",[2008,133022,133023],{"align":25391},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1962,133025,133026,133029],{},[2008,133027,133028],{"align":25391},"PSD图像格式",[2008,133030,133031],{"align":25391},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[633,133033,133035],{"id":133034},"_932-图层切图","9.3.2 图层切图",[19,133037,133038],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133040,133041],{},"按住shift选中两个图层->图层菜单->合并图层",[633,133043,133045],{"id":133044},"_933-切片切图","9.3.3 切片切图",[2822,133047,133048,133051],{},[165,133049,133050],{},"利用切片工具手动划出",[165,133052,133053],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[633,133055,133057],{"id":133056},"_934-切图步骤","9.3.4 切图步骤",[19,133059,133060],{},"用切片工具选中：",[3145,133062],{"style":128040,"src":133063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133065,133066],{},"文件 -> 导出",[3145,133068],{"style":128040,"src":133069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1729,133071,133072],{},"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":43,"depth":43,"links":133074},[133075,133084,133088],{"id":131511,"depth":43,"text":131512,"children":133076},[133077,133078,133079,133080,133081,133082,133083],{"id":131536,"depth":130,"text":131537},{"id":131827,"depth":130,"text":131828},{"id":131956,"depth":130,"text":131957},{"id":132156,"depth":130,"text":132157},{"id":132198,"depth":130,"text":132199},{"id":132236,"depth":130,"text":132237},{"id":132326,"depth":130,"text":132327},{"id":132606,"depth":43,"text":132607,"children":133085},[133086,133087],{"id":132610,"depth":130,"text":132611},{"id":132617,"depth":130,"text":132618},{"id":132988,"depth":43,"text":132989,"children":133089},[133090,133091,133092,133093],{"id":132992,"depth":130,"text":132993},{"id":133034,"depth":130,"text":133035},{"id":133044,"depth":130,"text":133045},{"id":133056,"depth":130,"text":133057},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131503,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133100,"title":133101,"body":133102,"description":1751,"extension":1752,"meta":133743,"navigation":126,"path":133744,"seo":133745,"stem":133746,"__hash__":133747},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133103,"toc":133731},[133104,133107,133111,133137,133171,133175,133179,133182,133224,133231,133241,133249,133251,133254,133257,133260,133267,133281,133285,133288,133317,133321,133324,133338,133342,133345,133373,133377,133380,133406,133410,133415,133448,133453,133481,133485,133502,133548,133553,133597,133614,133721,133729],[10,133105,133101],{"id":133106},"_10-css规范与学成在线案例",[14,133108,133110],{"id":133109},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[162,133112,133113,133119,133125,133131],{},[165,133114,133115,133118],{},[1968,133116,133117],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[165,133120,133121,133124],{},[1968,133122,133123],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[165,133126,133127,133130],{},[1968,133128,133129],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[165,133132,133133,133136],{},[1968,133134,133135],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[23,133138,133139],{"className":128184,"code":131548,"language":128186,"meta":28,"style":28},[30,133140,133141,133145,133151,133167],{"__ignoreMap":28},[33,133142,133143],{"class":35,"line":36},[33,133144,131555],{"class":87},[33,133146,133147,133149],{"class":35,"line":43},[33,133148,53256],{"class":52945},[33,133150,17228],{"class":59},[33,133152,133153,133155,133157,133159,133161,133163,133165],{"class":35,"line":130},[33,133154,72538],{"class":39},[33,133156,53082],{"class":59},[33,133158,2036],{"class":39},[33,133160,53137],{"class":63},[33,133162,53166],{"class":39},[33,133164,131576],{"class":39},[33,133166,2976],{"class":59},[33,133168,133169],{"class":35,"line":146},[33,133170,3247],{"class":59},[14,133172,133174],{"id":133173},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[633,133176,133178],{"id":133177},"_1021-header头部制作","10.2.1 header头部制作",[3145,133180],{"style":128040,"src":133181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2822,133183,133184,133191,133198,133204,133211,133218],{},[165,133185,133186,133187,133190],{},"1号是版心盒子 ",[1968,133188,133189],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[165,133192,133193,133194,133197],{},"版心盒子 里面包含 2号盒子 ",[1968,133195,133196],{},"logo"," 图标",[165,133199,133200,133201,133203],{},"版心盒子 里面包含 3号盒子 ",[1968,133202,55358],{}," 导航栏",[165,133205,133206,133207,133210],{},"版心盒子 里面包含 4号盒子 ",[1968,133208,133209],{},"search"," 搜索框",[165,133212,133213,133214,133217],{},"版心盒子 里面包含 5号盒子 ",[1968,133215,133216],{},"user"," 个人信息",[165,133219,133220,133221],{},"注意，要求里面的 ",[1968,133222,133223],{},"4个子盒子 必须都浮动",[162,133225,133226],{},[165,133227,133228],{},[1968,133229,133230],{},"导航栏注意点:",[19,133232,133233,133234,133237,133238],{},"实际开发中， ",[1968,133235,133236],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[1968,133239,133240],{},"用 li 包含链接(li+a)的做法",[2822,133242,133243,133246],{},[165,133244,133245],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[165,133247,133248],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133250,160],{},[19,133252,133253],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133255,133256],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133258,133259],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[162,133261,133262],{"start":43},[165,133263,133264],{},[1968,133265,133266],{},"4号盒子search的细节：",[2822,133268,133269,133272,133275],{},[165,133270,133271],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[165,133273,133274],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[165,133276,133277,133280],{},[30,133278,133279],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[633,133282,133284],{"id":133283},"_1022-banner制作","10.2.2 banner制作",[3145,133286],{"style":128040,"src":133287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2822,133289,133290,133297,133303,133310],{},[165,133291,133292,133293,133296],{},"1号盒子是通栏的大盒子 ",[1968,133294,133295],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[165,133298,133299,133300,133302],{},"2号盒子是版心 ",[1968,133301,2612],{}," ， 要水平居中对齐",[165,133304,133305,133306,133309],{},"3号盒子版心内，左对齐 ",[1968,133307,133308],{},"subnav"," 侧导航栏",[165,133311,133312,133313,133316],{},"4号盒子版心内，右对齐 ",[1968,133314,133315],{},"course"," 课程",[633,133318,133320],{"id":133319},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3145,133322],{"style":128040,"src":133323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2822,133325,133326,133329,133332,133335],{},[165,133327,133328],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[165,133330,133331],{},"1号盒子是标题 H3 左侧浮动",[165,133333,133334],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[165,133336,133337],{},"3号盒子 右浮动 mod 修改",[633,133339,133341],{"id":133340},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3145,133343],{"style":128040,"src":133344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2822,133346,133347,133353,133360,133367,133370],{},[165,133348,133349,133350,133352],{},"1号盒子为最大的盒子 ",[1968,133351,55359],{}," 版心水平居中对齐",[165,133354,133355,133356,133359],{},"2号盒子为上面部分 ",[1968,133357,133358],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[165,133361,133362,133363,133366],{},"3号盒子为底下部分 ",[1968,133364,133365],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[165,133368,133369],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[165,133371,133372],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[633,133374,133376],{"id":133375},"_1025-底部模块制作","10.2.5 底部模块制作",[3145,133378],{"style":128040,"src":133379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2822,133381,133382,133389,133392,133399],{},[165,133383,133384,133385,133388],{},"1号盒子通栏大盒子 底部 ",[1968,133386,133387],{},"footer"," 给高度 底色是白色",[165,133390,133391],{},"2号盒子版心水平居中",[165,133393,133394,133395,133398],{},"3号盒子版权 ",[1968,133396,133397],{},"copyright"," 左对齐",[165,133400,133401,133402,133405],{},"4号盒子 链接组 ",[1968,133403,133404],{},"links"," 右对齐",[633,133407,133409],{"id":133408},"_1026-代码模块","10.2.6 代码模块",[162,133411,133412],{},[165,133413,133414],{},"html部分",[23,133416,133418],{"className":128931,"code":133417,"language":128933,"meta":28,"style":28},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[30,133419,133420],{"__ignoreMap":28},[33,133421,133422,133424,133426,133428,133430,133433,133436,133438,133441,133444,133446],{"class":35,"line":36},[33,133423,2726],{"class":59},[33,133425,2057],{"class":52945},[33,133427,62699],{"class":3632},[33,133429,64],{"class":59},[33,133431,133432],{"class":117},"\"https:\u002F\u002Fexample.com\"",[33,133434,133435],{"class":3632}," target",[33,133437,64],{"class":59},[33,133439,133440],{"class":117},"\"_blank\"",[33,133442,133443],{"class":59},">链接文字\u003C\u002F",[33,133445,2057],{"class":52945},[33,133447,52952],{"class":59},[162,133449,133450],{"start":43},[165,133451,133452],{},"css部分",[23,133454,133455],{"className":128931,"code":133417,"language":128933,"meta":28,"style":28},[30,133456,133457],{"__ignoreMap":28},[33,133458,133459,133461,133463,133465,133467,133469,133471,133473,133475,133477,133479],{"class":35,"line":36},[33,133460,2726],{"class":59},[33,133462,2057],{"class":52945},[33,133464,62699],{"class":3632},[33,133466,64],{"class":59},[33,133468,133432],{"class":117},[33,133470,133435],{"class":3632},[33,133472,64],{"class":59},[33,133474,133440],{"class":117},[33,133476,133443],{"class":59},[33,133478,2057],{"class":52945},[33,133480,52952],{"class":59},[633,133482,133484],{"id":133483},"_1027-收获","10.2.7 收获",[162,133486,133487,133490,133493,133496,133499],{},[165,133488,133489],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[165,133491,133492],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[165,133494,133495],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[165,133497,133498],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[165,133500,133501],{},"遗忘代码",[23,133503,133505],{"className":128184,"code":133504,"language":128186,"meta":28,"style":28},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[30,133506,133507,133529,133534,133544],{"__ignoreMap":28},[33,133508,133509,133511,133513,133515,133517,133519,133521,133523,133525,133527],{"class":35,"line":36},[33,133510,53256],{"class":52945},[33,133512,14093],{"class":59},[33,133514,19],{"class":52945},[33,133516,14093],{"class":59},[33,133518,10],{"class":52945},[33,133520,14093],{"class":59},[33,133522,2822],{"class":52945},[33,133524,14093],{"class":59},[33,133526,165],{"class":52945},[33,133528,17228],{"class":59},[33,133530,133531],{"class":35,"line":43},[33,133532,133533],{"class":87},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[33,133535,133536,133538,133540,133542],{"class":35,"line":130},[33,133537,129800],{"class":39},[33,133539,53082],{"class":59},[33,133541,62511],{"class":39},[33,133543,2976],{"class":59},[33,133545,133546],{"class":35,"line":146},[33,133547,3247],{"class":59},[162,133549,133550],{"start":275},[165,133551,133552],{},"html引css的程序",[23,133554,133555],{"className":128184,"code":133504,"language":128186,"meta":28,"style":28},[30,133556,133557,133579,133583,133593],{"__ignoreMap":28},[33,133558,133559,133561,133563,133565,133567,133569,133571,133573,133575,133577],{"class":35,"line":36},[33,133560,53256],{"class":52945},[33,133562,14093],{"class":59},[33,133564,19],{"class":52945},[33,133566,14093],{"class":59},[33,133568,10],{"class":52945},[33,133570,14093],{"class":59},[33,133572,2822],{"class":52945},[33,133574,14093],{"class":59},[33,133576,165],{"class":52945},[33,133578,17228],{"class":59},[33,133580,133581],{"class":35,"line":43},[33,133582,133533],{"class":87},[33,133584,133585,133587,133589,133591],{"class":35,"line":130},[33,133586,129800],{"class":39},[33,133588,53082],{"class":59},[33,133590,62511],{"class":39},[33,133592,2976],{"class":59},[33,133594,133595],{"class":35,"line":146},[33,133596,3247],{"class":59},[162,133598,133599,133602,133605,133608,133611],{"start":392},[165,133600,133601],{},"浮动的盒子不会有外边距合并问题",[165,133603,133604],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[165,133606,133607],{},"ctrl+g快速定位行；shift+alt多个光标",[165,133609,133610],{},"学习上方各个模块的选择器起名方法，以后就这样用",[165,133612,133613],{},"在写选择器时尽量写全一些，例如",[23,133615,133617],{"className":128184,"code":133616,"language":128186,"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,133618,133619,133624,133640,133645,133660,133665,133680,133685,133700,133705],{"__ignoreMap":28},[33,133620,133621],{"class":35,"line":36},[33,133622,133623],{"class":87},"\u002F* 静态定位（默认） *\u002F\n",[33,133625,133626,133629,133631,133633,133635,133638],{"class":35,"line":43},[33,133627,133628],{"class":3632},".static",[33,133630,81448],{"class":59},[33,133632,130544],{"class":39},[33,133634,53082],{"class":59},[33,133636,133637],{"class":39},"static",[33,133639,131114],{"class":59},[33,133641,133642],{"class":35,"line":130},[33,133643,133644],{"class":87},"\u002F* 相对定位 *\u002F\n",[33,133646,133647,133650,133652,133654,133656,133658],{"class":35,"line":146},[33,133648,133649],{"class":3632},".relative",[33,133651,81448],{"class":59},[33,133653,130544],{"class":39},[33,133655,53082],{"class":59},[33,133657,56408],{"class":39},[33,133659,131114],{"class":59},[33,133661,133662],{"class":35,"line":267},[33,133663,133664],{"class":87},"\u002F* 绝对定位 *\u002F\n",[33,133666,133667,133670,133672,133674,133676,133678],{"class":35,"line":275},[33,133668,133669],{"class":3632},".absolute",[33,133671,81448],{"class":59},[33,133673,130544],{"class":39},[33,133675,53082],{"class":59},[33,133677,56475],{"class":39},[33,133679,131114],{"class":59},[33,133681,133682],{"class":35,"line":392},[33,133683,133684],{"class":87},"\u002F* 固定定位 *\u002F\n",[33,133686,133687,133690,133692,133694,133696,133698],{"class":35,"line":406},[33,133688,133689],{"class":3632},".fixed",[33,133691,81448],{"class":59},[33,133693,130544],{"class":39},[33,133695,53082],{"class":59},[33,133697,87873],{"class":39},[33,133699,131114],{"class":59},[33,133701,133702],{"class":35,"line":418},[33,133703,133704],{"class":87},"\u002F* 粘性定位 *\u002F\n",[33,133706,133707,133710,133712,133714,133716,133719],{"class":35,"line":425},[33,133708,133709],{"class":3632},".sticky",[33,133711,81448],{"class":59},[33,133713,130544],{"class":39},[33,133715,53082],{"class":59},[33,133717,133718],{"class":39},"sticky",[33,133720,131114],{"class":59},[162,133722,133723,133726],{"start":1329},[165,133724,133725],{},"一定要用好注释",[165,133727,133728],{},"浮动的盒子不会有外边距合并的问题",[1729,133730,133072],{},{"title":28,"searchDepth":43,"depth":43,"links":133732},[133733,133734],{"id":133109,"depth":43,"text":133110},{"id":133173,"depth":43,"text":133174,"children":133735},[133736,133737,133738,133739,133740,133741,133742],{"id":133177,"depth":130,"text":133178},{"id":133283,"depth":130,"text":133284},{"id":133319,"depth":130,"text":133320},{"id":133340,"depth":130,"text":133341},{"id":133375,"depth":130,"text":133376},{"id":133408,"depth":130,"text":133409},{"id":133483,"depth":130,"text":133484},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133101,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133749,"title":133750,"body":133751,"description":1751,"extension":1752,"meta":135237,"navigation":126,"path":135238,"seo":135239,"stem":135240,"__hash__":135241},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133752,"toc":135229},[133753,133756,133760,133764,133775,133779,133796,133840,133873,133876,133893,133896,133899,133943,133947,133951,133954,133957,133961,133964,133975,134038,134079,134082,134097,134151,134159,134162,134173,134227,134253,134256,134269,134323,134355,134409,134432,134486,134489,134492,134499,134553,134574,134628,134631,134634,134719,134727,134784,134807,134811,134814,134832,134836,134855,134909,134947,134951,134954,134957,134979,134983,134991,134994,134999,135010,135013,135017,135031,135075,135078,135082,135085,135090,135116,135121,135198,135201,135205,135208,135211,135214,135217,135220,135223,135226],[10,133754,133750],{"id":133755},"_11-传统布局与定位体系",[14,133757,133759],{"id":133758},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[633,133761,133763],{"id":133762},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2822,133765,133766,133769,133772],{},[165,133767,133768],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[165,133770,133771],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[165,133773,133774],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[633,133776,133778],{"id":133777},"_1112-浮动","11.1.2 浮动",[2822,133780,133781,133784,133787,133790,133793],{},[165,133782,133783],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[165,133785,133786],{},"浮动可以改变元素标签默认的排列方式",[165,133788,133789],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[165,133791,133792],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[165,133794,133795],{},"在使用行内块转换时盒子之间是有空隙的",[23,133797,133798],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,133799,133800,133806,133816,133820,133826,133836],{"__ignoreMap":28},[33,133801,133802,133804],{"class":35,"line":36},[33,133803,132657],{"class":3632},[33,133805,17228],{"class":59},[33,133807,133808,133810,133812,133814],{"class":35,"line":43},[33,133809,132664],{"class":39},[33,133811,53082],{"class":59},[33,133813,25391],{"class":39},[33,133815,2976],{"class":59},[33,133817,133818],{"class":35,"line":130},[33,133819,3247],{"class":59},[33,133821,133822,133824],{"class":35,"line":146},[33,133823,132679],{"class":3632},[33,133825,17228],{"class":59},[33,133827,133828,133830,133832,133834],{"class":35,"line":267},[33,133829,132664],{"class":39},[33,133831,53082],{"class":59},[33,133833,74163],{"class":39},[33,133835,2976],{"class":59},[33,133837,133838],{"class":35,"line":275},[33,133839,3247],{"class":59},[1956,133841,133842,133850],{},[1959,133843,133844],{},[1962,133845,133846,133848],{},[1965,133847,128648],{"align":25391},[1965,133849,29145],{"align":25391},[2003,133851,133852,133859,133866],{},[1962,133853,133854,133856],{},[2008,133855,56381],{"align":25391},[2008,133857,133858],{"align":25391},"元素不浮动（默认值）",[1962,133860,133861,133863],{},[2008,133862,25391],{"align":25391},[2008,133864,133865],{"align":25391},"元素向左浮动",[1962,133867,133868,133870],{},[2008,133869,74163],{"align":25391},[2008,133871,133872],{"align":25391},"元素向右浮动",[19,133874,133875],{},"浮动重点：",[2822,133877,133878,133881,133884,133887,133890],{},[165,133879,133880],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[165,133882,133883],{},"浮动的元素会一行内显示并且元素顶部对齐",[165,133885,133886],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[165,133888,133889],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[165,133891,133892],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133894,133895],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133897,133898],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[23,133900,133901],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,133902,133903,133909,133919,133923,133929,133939],{"__ignoreMap":28},[33,133904,133905,133907],{"class":35,"line":36},[33,133906,132657],{"class":3632},[33,133908,17228],{"class":59},[33,133910,133911,133913,133915,133917],{"class":35,"line":43},[33,133912,132664],{"class":39},[33,133914,53082],{"class":59},[33,133916,25391],{"class":39},[33,133918,2976],{"class":59},[33,133920,133921],{"class":35,"line":130},[33,133922,3247],{"class":59},[33,133924,133925,133927],{"class":35,"line":146},[33,133926,132679],{"class":3632},[33,133928,17228],{"class":59},[33,133930,133931,133933,133935,133937],{"class":35,"line":267},[33,133932,132664],{"class":39},[33,133934,53082],{"class":59},[33,133936,74163],{"class":39},[33,133938,2976],{"class":59},[33,133940,133941],{"class":35,"line":275},[33,133942,3247],{"class":59},[633,133944,133946],{"id":133945},"_1113-定位","11.1.3 定位",[23653,133948,133950],{"id":133949},"_11131-使用场景","11.1.3.1 使用场景",[19,133952,133953],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133955,133956],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23653,133958,133960],{"id":133959},"_11132-定位组成","11.1.3.2 定位组成",[19,133962,133963],{},"定位 = 定位模式 + 边偏移",[162,133965,133966],{},[165,133967,133968,133971,133972],{},[1968,133969,133970],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[1968,133973,133974],{},"定位模式",[23,133976,133978],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[30,133979,133980,133986,134000,134017,134034],{"__ignoreMap":28},[33,133981,133982,133984],{"class":35,"line":36},[33,133983,132032],{"class":3632},[33,133985,17228],{"class":59},[33,133987,133988,133991,133993,133995,133997],{"class":35,"line":43},[33,133989,133990],{"class":39},"  position",[33,133992,53082],{"class":59},[33,133994,56408],{"class":39},[33,133996,132047],{"class":59},[33,133998,133999],{"class":87},"\u002F* 定位模式 *\u002F\n",[33,134001,134002,134005,134007,134009,134011,134014],{"class":35,"line":130},[33,134003,134004],{"class":39},"  top",[33,134006,53082],{"class":59},[33,134008,2264],{"class":39},[33,134010,53137],{"class":63},[33,134012,134013],{"class":59},";           ",[33,134015,134016],{"class":87},"\u002F* 边偏移：上 *\u002F\n",[33,134018,134019,134022,134024,134026,134028,134031],{"class":35,"line":146},[33,134020,134021],{"class":39},"  left",[33,134023,53082],{"class":59},[33,134025,2517],{"class":39},[33,134027,53137],{"class":63},[33,134029,134030],{"class":59},";          ",[33,134032,134033],{"class":87},"\u002F* 边偏移：左 *\u002F\n",[33,134035,134036],{"class":35,"line":267},[33,134037,3247],{"class":59},[1956,134039,134040,134049],{},[1959,134041,134042],{},[1962,134043,134044,134046],{},[1965,134045,1971],{"align":25391},[1965,134047,134048],{"align":25391},"语义",[2003,134050,134051,134058,134065,134072],{},[1962,134052,134053,134055],{},[2008,134054,133637],{"align":25391},[2008,134056,134057],{"align":25391},"静态定位",[1962,134059,134060,134062],{},[2008,134061,56408],{"align":25391},[2008,134063,134064],{"align":25391},"相对定位",[1962,134066,134067,134069],{},[2008,134068,56475],{"align":25391},[2008,134070,134071],{"align":25391},"绝对定位",[1962,134073,134074,134076],{},[2008,134075,87873],{"align":25391},[2008,134077,134078],{"align":25391},"固定定位",[19,134080,134081],{},"（1）静态定位：",[2822,134083,134084,134095],{},[165,134085,134086,134087,134090,134091,134094],{},"静态定位是元素的 ",[1968,134088,134089],{},"默认定位方式"," ， ",[1968,134092,134093],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[165,134096,6842],{},[23,134098,134099],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134100,134101,134107,134119,134133,134147],{"__ignoreMap":28},[33,134102,134103,134105],{"class":35,"line":36},[33,134104,132032],{"class":3632},[33,134106,17228],{"class":59},[33,134108,134109,134111,134113,134115,134117],{"class":35,"line":43},[33,134110,133990],{"class":39},[33,134112,53082],{"class":59},[33,134114,56408],{"class":39},[33,134116,132047],{"class":59},[33,134118,133999],{"class":87},[33,134120,134121,134123,134125,134127,134129,134131],{"class":35,"line":130},[33,134122,134004],{"class":39},[33,134124,53082],{"class":59},[33,134126,2264],{"class":39},[33,134128,53137],{"class":63},[33,134130,134013],{"class":59},[33,134132,134016],{"class":87},[33,134134,134135,134137,134139,134141,134143,134145],{"class":35,"line":146},[33,134136,134021],{"class":39},[33,134138,53082],{"class":59},[33,134140,2517],{"class":39},[33,134142,53137],{"class":63},[33,134144,134030],{"class":59},[33,134146,134033],{"class":87},[33,134148,134149],{"class":35,"line":267},[33,134150,3247],{"class":59},[2822,134152,134153,134156],{},[165,134154,134155],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[165,134157,134158],{},"静态定位在布局时我们几乎不用的",[19,134160,134161],{},"（2）相对定位",[2822,134163,134164,134171],{},[165,134165,134166,134167,134170],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[1968,134168,134169],{},"原来的位置"," 来说的（自恋型）",[165,134172,6842],{},[23,134174,134175],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134176,134177,134183,134195,134209,134223],{"__ignoreMap":28},[33,134178,134179,134181],{"class":35,"line":36},[33,134180,132032],{"class":3632},[33,134182,17228],{"class":59},[33,134184,134185,134187,134189,134191,134193],{"class":35,"line":43},[33,134186,133990],{"class":39},[33,134188,53082],{"class":59},[33,134190,56408],{"class":39},[33,134192,132047],{"class":59},[33,134194,133999],{"class":87},[33,134196,134197,134199,134201,134203,134205,134207],{"class":35,"line":130},[33,134198,134004],{"class":39},[33,134200,53082],{"class":59},[33,134202,2264],{"class":39},[33,134204,53137],{"class":63},[33,134206,134013],{"class":59},[33,134208,134016],{"class":87},[33,134210,134211,134213,134215,134217,134219,134221],{"class":35,"line":146},[33,134212,134021],{"class":39},[33,134214,53082],{"class":59},[33,134216,2517],{"class":39},[33,134218,53137],{"class":63},[33,134220,134030],{"class":59},[33,134222,134033],{"class":87},[33,134224,134225],{"class":35,"line":267},[33,134226,3247],{"class":59},[2822,134228,134229],{},[165,134230,134231,134232,134234,134235,134237,134238,134241,134242,134245,134246,134248,134249,134252],{},"相对定位的特点：",[55361,134233],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55361,134236],{},"  ② ",[1968,134239,134240],{},"原来"," 在标准流的 ",[1968,134243,134244],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55361,134247],{},"  ③因此， ",[1968,134250,134251],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134254,134255],{},"（3）绝对定位",[2822,134257,134258,134267],{},[165,134259,134260,134262,134263,134266],{},[1968,134261,134071],{}," 是元素在移动位置的时候，是相对于它 ",[1968,134264,134265],{},"祖先元素"," 来说的（拼爹型）",[165,134268,6842],{},[23,134270,134271],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134272,134273,134279,134291,134305,134319],{"__ignoreMap":28},[33,134274,134275,134277],{"class":35,"line":36},[33,134276,132032],{"class":3632},[33,134278,17228],{"class":59},[33,134280,134281,134283,134285,134287,134289],{"class":35,"line":43},[33,134282,133990],{"class":39},[33,134284,53082],{"class":59},[33,134286,56408],{"class":39},[33,134288,132047],{"class":59},[33,134290,133999],{"class":87},[33,134292,134293,134295,134297,134299,134301,134303],{"class":35,"line":130},[33,134294,134004],{"class":39},[33,134296,53082],{"class":59},[33,134298,2264],{"class":39},[33,134300,53137],{"class":63},[33,134302,134013],{"class":59},[33,134304,134016],{"class":87},[33,134306,134307,134309,134311,134313,134315,134317],{"class":35,"line":146},[33,134308,134021],{"class":39},[33,134310,53082],{"class":59},[33,134312,2517],{"class":39},[33,134314,53137],{"class":63},[33,134316,134030],{"class":59},[33,134318,134033],{"class":87},[33,134320,134321],{"class":35,"line":267},[33,134322,3247],{"class":59},[2822,134324,134325,134340,134349,134352],{},[165,134326,134327,134328,134330,134331,134333,134334,134336,134337,134339],{},"绝对定位的特点：",[55361,134329],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55361,134332],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55361,134335],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55361,134338],{},"  (4)固定定位",[165,134341,134342,134344,134345,134348],{},[1968,134343,134078],{}," 是元素 ",[1968,134346,134347],{},"固定于浏览器可视区的位置"," 。（认死理型）",[165,134350,134351],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[165,134353,134354],{},"语法:",[23,134356,134357],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134358,134359,134365,134377,134391,134405],{"__ignoreMap":28},[33,134360,134361,134363],{"class":35,"line":36},[33,134362,132032],{"class":3632},[33,134364,17228],{"class":59},[33,134366,134367,134369,134371,134373,134375],{"class":35,"line":43},[33,134368,133990],{"class":39},[33,134370,53082],{"class":59},[33,134372,56408],{"class":39},[33,134374,132047],{"class":59},[33,134376,133999],{"class":87},[33,134378,134379,134381,134383,134385,134387,134389],{"class":35,"line":130},[33,134380,134004],{"class":39},[33,134382,53082],{"class":59},[33,134384,2264],{"class":39},[33,134386,53137],{"class":63},[33,134388,134013],{"class":59},[33,134390,134016],{"class":87},[33,134392,134393,134395,134397,134399,134401,134403],{"class":35,"line":146},[33,134394,134021],{"class":39},[33,134396,53082],{"class":59},[33,134398,2517],{"class":39},[33,134400,53137],{"class":63},[33,134402,134030],{"class":59},[33,134404,134033],{"class":87},[33,134406,134407],{"class":35,"line":267},[33,134408,3247],{"class":59},[2822,134410,134411,134420],{},[165,134412,134413,134414,134416,134417,134419],{},"特点:",[55361,134415],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55361,134418],{},"  ②固定定位不再占有原先的位置,完全脱标",[165,134421,134422,134423,134425,134426,134428,134429,134431],{},"固定在版心位置的方法:",[55361,134424],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55361,134427],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55361,134430],{},"  实例：",[23,134433,134434],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134435,134436,134442,134454,134468,134482],{"__ignoreMap":28},[33,134437,134438,134440],{"class":35,"line":36},[33,134439,132032],{"class":3632},[33,134441,17228],{"class":59},[33,134443,134444,134446,134448,134450,134452],{"class":35,"line":43},[33,134445,133990],{"class":39},[33,134447,53082],{"class":59},[33,134449,56408],{"class":39},[33,134451,132047],{"class":59},[33,134453,133999],{"class":87},[33,134455,134456,134458,134460,134462,134464,134466],{"class":35,"line":130},[33,134457,134004],{"class":39},[33,134459,53082],{"class":59},[33,134461,2264],{"class":39},[33,134463,53137],{"class":63},[33,134465,134013],{"class":59},[33,134467,134016],{"class":87},[33,134469,134470,134472,134474,134476,134478,134480],{"class":35,"line":146},[33,134471,134021],{"class":39},[33,134473,53082],{"class":59},[33,134475,2517],{"class":39},[33,134477,53137],{"class":63},[33,134479,134030],{"class":59},[33,134481,134033],{"class":87},[33,134483,134484],{"class":35,"line":267},[33,134485,3247],{"class":59},[3145,134487],{"style":128040,"src":134488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134490,134491],{},"(5)粘性定位",[2822,134493,134494,134497],{},[165,134495,134496],{},"粘性定位可以被认为是相对定位和固定定位的混合",[165,134498,6842],{},[23,134500,134501],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134502,134503,134509,134521,134535,134549],{"__ignoreMap":28},[33,134504,134505,134507],{"class":35,"line":36},[33,134506,132032],{"class":3632},[33,134508,17228],{"class":59},[33,134510,134511,134513,134515,134517,134519],{"class":35,"line":43},[33,134512,133990],{"class":39},[33,134514,53082],{"class":59},[33,134516,56408],{"class":39},[33,134518,132047],{"class":59},[33,134520,133999],{"class":87},[33,134522,134523,134525,134527,134529,134531,134533],{"class":35,"line":130},[33,134524,134004],{"class":39},[33,134526,53082],{"class":59},[33,134528,2264],{"class":39},[33,134530,53137],{"class":63},[33,134532,134013],{"class":59},[33,134534,134016],{"class":87},[33,134536,134537,134539,134541,134543,134545,134547],{"class":35,"line":146},[33,134538,134021],{"class":39},[33,134540,53082],{"class":59},[33,134542,2517],{"class":39},[33,134544,53137],{"class":63},[33,134546,134030],{"class":59},[33,134548,134033],{"class":87},[33,134550,134551],{"class":35,"line":267},[33,134552,3247],{"class":59},[2822,134554,134555],{},[165,134556,134557,134558,134560,134561,134563,134564,134566,134567,134570,134571,134573],{},"粘性定位的特点：",[55361,134559],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55361,134562],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55361,134565],{},"  ③必须添加 top 、left、right、bottom ",[1968,134568,134569],{},"其中一个"," 才有效",[55361,134572],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[23,134575,134576],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134577,134578,134584,134596,134610,134624],{"__ignoreMap":28},[33,134579,134580,134582],{"class":35,"line":36},[33,134581,132032],{"class":3632},[33,134583,17228],{"class":59},[33,134585,134586,134588,134590,134592,134594],{"class":35,"line":43},[33,134587,133990],{"class":39},[33,134589,53082],{"class":59},[33,134591,56408],{"class":39},[33,134593,132047],{"class":59},[33,134595,133999],{"class":87},[33,134597,134598,134600,134602,134604,134606,134608],{"class":35,"line":130},[33,134599,134004],{"class":39},[33,134601,53082],{"class":59},[33,134603,2264],{"class":39},[33,134605,53137],{"class":63},[33,134607,134013],{"class":59},[33,134609,134016],{"class":87},[33,134611,134612,134614,134616,134618,134620,134622],{"class":35,"line":146},[33,134613,134021],{"class":39},[33,134615,53082],{"class":59},[33,134617,2517],{"class":39},[33,134619,53137],{"class":63},[33,134621,134030],{"class":59},[33,134623,134033],{"class":87},[33,134625,134626],{"class":35,"line":267},[33,134627,3247],{"class":59},[3145,134629],{"style":128040,"src":134630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134632,134633],{},"(6)总结",[1956,134635,134636,134651],{},[1959,134637,134638],{},[1962,134639,134640,134642,134645,134648],{},[1965,134641,133974],{"align":25391},[1965,134643,134644],{"align":25391},"是否脱标",[1965,134646,134647],{"align":25391},"移动位置",[1965,134649,134650],{"align":25391},"是否常用",[2003,134652,134653,134666,134680,134694,134707],{},[1962,134654,134655,134658,134660,134663],{},[2008,134656,134657],{"align":25391},"Static 静态定位",[2008,134659,106316],{"align":25391},[2008,134661,134662],{"align":25391},"不能使用边偏移",[2008,134664,134665],{"align":25391},"很少",[1962,134667,134668,134671,134674,134677],{},[2008,134669,134670],{"align":25391},"Relative 相对定位",[2008,134672,134673],{"align":25391},"否(占有位置)",[2008,134675,134676],{"align":25391},"相对于自身位置移动",[2008,134678,134679],{"align":25391},"基本单独使用",[1962,134681,134682,134685,134688,134691],{},[2008,134683,134684],{"align":25391},"Absolute 绝对定位",[2008,134686,134687],{"align":25391},"是(不占有位置)",[2008,134689,134690],{"align":25391},"带有定位的父级",[2008,134692,134693],{"align":25391},"要和定位父级元素搭配使用",[1962,134695,134696,134699,134701,134704],{},[2008,134697,134698],{"align":25391},"Fixed 固定定位",[2008,134700,134687],{"align":25391},[2008,134702,134703],{"align":25391},"浏览器可视区",[2008,134705,134706],{"align":25391},"单独使用,不需要父级",[1962,134708,134709,134712,134714,134716],{},[2008,134710,134711],{"align":25391},"Sticky 粘性定位",[2008,134713,134673],{"align":25391},[2008,134715,134703],{"align":25391},[2008,134717,134718],{"align":25391},"当前阶段少",[162,134720,134721],{"start":43},[165,134722,134723,134726],{},[1968,134724,134725],{},"边偏移"," 则决定了该元素的最终位置",[1956,134728,134729,134740],{},[1959,134730,134731],{},[1962,134732,134733,134736,134738],{},[1965,134734,134735],{"align":25391},"边偏移属性",[1965,134737,29148],{"align":25391},[1965,134739,29145],{"align":25391},[2003,134741,134742,134753,134764,134774],{},[1962,134743,134744,134747,134750],{},[2008,134745,134746],{"align":25391},"top",[2008,134748,134749],{"align":25391},"top: 80px;",[2008,134751,134752],{"align":25391},"顶端偏移量，定义元素相对于父元素上边线的距离",[1962,134754,134755,134758,134761],{},[2008,134756,134757],{"align":25391},"bottom",[2008,134759,134760],{"align":25391},"bottom: 80px ;",[2008,134762,134763],{"align":25391},"底部偏移量，定义元素相对于其父元素下边线的距离",[1962,134765,134766,134768,134771],{},[2008,134767,25391],{"align":25391},[2008,134769,134770],{"align":25391},"left: 80px ;",[2008,134772,134773],{"align":25391},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1962,134775,134776,134778,134781],{},[2008,134777,74163],{"align":25391},[2008,134779,134780],{"align":25391},"right: 80px ;",[2008,134782,134783],{"align":25391},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2822,134785,134786],{},[165,134787,160,134788,134790,134791,134793,134794,134796,134797,134800,134801,134803,134804,134806],{},[55361,134789],{},"  ① ",[1968,134792,134725],{}," 需要和 ",[1968,134795,133974],{}," 联合使用， ",[1968,134798,134799],{},"单独使用无效"," ；",[55361,134802],{},"  ②top和bottom不要同时使用",[55361,134805],{},"  ③left和right不要同时使用",[23653,134808,134810],{"id":134809},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134812,134813],{},"子级是绝对定位的话，父级要用相对定位",[2822,134815,134816,134819,134822,134825],{},[165,134817,134818],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[165,134820,134821],{},"父盒子需要加定位限制子盒子在父盒子内显示",[165,134823,134824],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[165,134826,134827,134828,134831],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[1968,134829,134830],{},"子绝父绝"," 也会遇到",[23653,134833,134835],{"id":134834},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2822,134837,134838,134853],{},[165,134839,134840,134841,134844,134845,134848,134849,134852],{},"在使用 ",[1968,134842,134843],{},"定位"," 布局时，可能会 ",[1968,134846,134847],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[1968,134850,134851],{},"z-index"," 来控制盒子的前后次序 (z轴)",[165,134854,6842],{},[23,134856,134857],{"className":128184,"code":133977,"language":128186,"meta":28,"style":28},[30,134858,134859,134865,134877,134891,134905],{"__ignoreMap":28},[33,134860,134861,134863],{"class":35,"line":36},[33,134862,132032],{"class":3632},[33,134864,17228],{"class":59},[33,134866,134867,134869,134871,134873,134875],{"class":35,"line":43},[33,134868,133990],{"class":39},[33,134870,53082],{"class":59},[33,134872,56408],{"class":39},[33,134874,132047],{"class":59},[33,134876,133999],{"class":87},[33,134878,134879,134881,134883,134885,134887,134889],{"class":35,"line":130},[33,134880,134004],{"class":39},[33,134882,53082],{"class":59},[33,134884,2264],{"class":39},[33,134886,53137],{"class":63},[33,134888,134013],{"class":59},[33,134890,134016],{"class":87},[33,134892,134893,134895,134897,134899,134901,134903],{"class":35,"line":146},[33,134894,134021],{"class":39},[33,134896,53082],{"class":59},[33,134898,2517],{"class":39},[33,134900,53137],{"class":63},[33,134902,134030],{"class":59},[33,134904,134033],{"class":87},[33,134906,134907],{"class":35,"line":267},[33,134908,3247],{"class":59},[2822,134910,134911],{},[165,134912,134913,134914,134790,134916,134918,134919,129347,134922,84179,134925,134927,134928,134930,134931,134934,134935,134800,134938,134940,134941,134944,134946],{},"z-index的特性",[55361,134915],{},[1968,134917,128648],{}," ： ",[1968,134920,134921],{},"正整数",[1968,134923,134924],{},"负整数",[1968,134926,2010],{}," ，默认值是 0，数值越大，盒子越靠上；",[55361,134929],{},"  ②如果 ",[1968,134932,134933],{},"属性值相同"," ，则按照书写顺序， ",[1968,134936,134937],{},"后来居上",[55361,134939],{},"  ③数字后面 ",[1968,134942,134943],{},"不能加单位",[55361,134945],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23653,134948,134950],{"id":134949},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134952,134953],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134955,134956],{},"方法:",[2822,134958,134959,134969],{},[165,134960,134961,134962,134965,134966],{},"left: 50%; 让 ",[1968,134963,134964],{},"盒子的左侧"," 移动到 ",[1968,134967,134968],{},"父级元素的水平中心位置",[165,134970,134971,134972,134975,134976],{},"margin-left: -100px; 让盒子 ",[1968,134973,134974],{},"向左"," 移动 ",[1968,134977,134978],{},"自身宽度的一半",[23653,134980,134982],{"id":134981},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[162,134984,134985,134988],{},[165,134986,134987],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[165,134989,134990],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134992,134993],{},"也就是说绝对定位和固定定位和浮动类似",[162,134995,134996],{"start":130},[165,134997,134998],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2822,135000,135001,135004,135007],{},[165,135002,135003],{},"可以用inline-block 转换为行内块",[165,135005,135006],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[165,135008,135009],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135011,135012],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23653,135014,135016],{"id":135015},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[162,135018,135019,135022,135025,135028],{},[165,135020,135021],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[165,135023,135024],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[165,135026,135027],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[165,135029,135030],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[23,135032,135033],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,135034,135035,135041,135051,135055,135061,135071],{"__ignoreMap":28},[33,135036,135037,135039],{"class":35,"line":36},[33,135038,132657],{"class":3632},[33,135040,17228],{"class":59},[33,135042,135043,135045,135047,135049],{"class":35,"line":43},[33,135044,132664],{"class":39},[33,135046,53082],{"class":59},[33,135048,25391],{"class":39},[33,135050,2976],{"class":59},[33,135052,135053],{"class":35,"line":130},[33,135054,3247],{"class":59},[33,135056,135057,135059],{"class":35,"line":146},[33,135058,132679],{"class":3632},[33,135060,17228],{"class":59},[33,135062,135063,135065,135067,135069],{"class":35,"line":267},[33,135064,132664],{"class":39},[33,135066,53082],{"class":59},[33,135068,74163],{"class":39},[33,135070,2976],{"class":59},[33,135072,135073],{"class":35,"line":275},[33,135074,3247],{"class":59},[3145,135076],{"style":128040,"src":135077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23653,135079,135081],{"id":135080},"_11138-轮播图","11.1.3.8 轮播图",[3145,135083],{"style":128040,"src":135084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[162,135086,135087],{},[165,135088,135089],{},"制作顺序:",[2822,135091,135092,135095,135098,135107],{},[165,135093,135094],{},"大盒子我们类名为： tb-promo 淘宝广告",[165,135096,135097],{},"里面先放一张图片",[165,135099,135100,135101,135103,135104,135106],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55361,135102],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55361,135105],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[165,135108,135109,135110,135112,135113,135115],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55361,135111],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55361,135114],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[162,135117,135118],{"start":43},[165,135119,135120],{},"代码模块",[23,135122,135124],{"className":128184,"code":135123,"language":128186,"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,135125,135126,135131,135138,135148,135158,135168,135172,135177,135184,135194],{"__ignoreMap":28},[33,135127,135128],{"class":35,"line":36},[33,135129,135130],{"class":87},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[33,135132,135133,135136],{"class":35,"line":43},[33,135134,135135],{"class":3632},".son",[33,135137,17228],{"class":59},[33,135139,135140,135142,135144,135146],{"class":35,"line":130},[33,135141,133990],{"class":39},[33,135143,53082],{"class":59},[33,135145,56475],{"class":39},[33,135147,2976],{"class":59},[33,135149,135150,135152,135154,135156],{"class":35,"line":146},[33,135151,134004],{"class":39},[33,135153,53082],{"class":59},[33,135155,2010],{"class":39},[33,135157,2976],{"class":59},[33,135159,135160,135162,135164,135166],{"class":35,"line":267},[33,135161,134021],{"class":39},[33,135163,53082],{"class":59},[33,135165,2010],{"class":39},[33,135167,2976],{"class":59},[33,135169,135170],{"class":35,"line":275},[33,135171,3247],{"class":59},[33,135173,135174],{"class":35,"line":392},[33,135175,135176],{"class":87},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[33,135178,135179,135182],{"class":35,"line":406},[33,135180,135181],{"class":3632},".father",[33,135183,17228],{"class":59},[33,135185,135186,135188,135190,135192],{"class":35,"line":418},[33,135187,133990],{"class":39},[33,135189,53082],{"class":59},[33,135191,56408],{"class":39},[33,135193,2976],{"class":59},[33,135195,135196],{"class":35,"line":425},[33,135197,3247],{"class":59},[19,135199,135200],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[633,135202,135204],{"id":135203},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3145,135206],{"style":128040,"src":135207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135209,135210],{},"✨ 黄金口诀：",[19,135212,135213],{},"\"TOP正下负上，LEFT正右负左\"",[19,135215,135216],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135218,135219],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135221,135222],{},"✨ 简单记：",[19,135224,135225],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1729,135227,135228],{},"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":43,"depth":43,"links":135230},[135231],{"id":133758,"depth":43,"text":133759,"children":135232},[135233,135234,135235,135236],{"id":133762,"depth":130,"text":133763},{"id":133777,"depth":130,"text":133778},{"id":133945,"depth":130,"text":133946},{"id":135203,"depth":130,"text":135204},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133750,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135243,"title":135244,"body":135245,"description":1751,"extension":1752,"meta":136668,"navigation":126,"path":136669,"seo":136670,"stem":136671,"__hash__":136672},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135246,"toc":136647},[135247,135250,135254,135262,135266,135271,135279,135291,135295,135300,135308,135319,135323,135328,135369,135377,135381,135384,135387,135390,135484,135487,135581,135584,135678,135681,135684,135719,135722,135725,135755,135758,135761,135764,135767,135770,135773,135776,135846,135849,135853,135857,135898,135902,135908,135911,135914,135918,135921,135924,135927,136008,136011,136014,136018,136022,136025,136028,136031,136034,136037,136043,136052,136056,136075,136079,136089,136092,136095,136098,136101,136104,136107,136110,136113,136122,136126,136135,136138,136143,136196,136201,136367,136370,136373,136378,136381,136384,136387,136390,136395,136543,136546,136549,136554,136557,136562,136596,136599,136602,136606,136609,136616,136619,136622,136625,136628,136631,136634,136637,136641,136644],[10,135248,135244],{"id":135249},"_12-显示隐藏与图形资源",[14,135251,135253],{"id":135252},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2822,135255,135256,135259],{},[165,135257,135258],{},"目的:让一个元素在页面中消失或者显示出来",[165,135260,135261],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[633,135263,135265],{"id":135264},"_1211-display-显示","12.1.1 display 显示",[162,135267,135268],{},[165,135269,135270],{},"display 设置或检索对象是否及如何显示",[2822,135272,135273,135276],{},[165,135274,135275],{},"display: none;隐藏对象",[165,135277,135278],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[162,135280,135281,135288],{"start":43},[165,135282,135283,135284,135287],{},"特点： display 隐藏元素后， ",[1968,135285,135286],{},"不再占"," 有原来的位置",[165,135289,135290],{},"在js中使用非常的广泛",[633,135292,135294],{"id":135293},"_1212-visibility可见性","12.1.2 visibility可见性",[162,135296,135297],{},[165,135298,135299],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2822,135301,135302,135305],{},[165,135303,135304],{},"visibility： visible；元素可见",[165,135306,135307],{},"visibility：hidden；元素隐藏",[162,135309,135310,135313,135316],{"start":43},[165,135311,135312],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[165,135314,135315],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[165,135317,135318],{},"隐藏后继续占有原有位置",[633,135320,135322],{"id":135321},"_1213-overflow溢出","12.1.3 overflow溢出",[2822,135324,135325],{},[165,135326,135327],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1956,135329,135330,135338],{},[1959,135331,135332],{},[1962,135333,135334,135336],{},[1965,135335,128648],{"align":25391},[1965,135337,29145],{"align":25391},[2003,135339,135340,135348,135355,135362],{},[1962,135341,135342,135345],{},[2008,135343,135344],{"align":25391},"visible",[2008,135346,135347],{"align":25391},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1962,135349,135350,135352],{},[2008,135351,63356],{"align":25391},[2008,135353,135354],{"align":25391},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1962,135356,135357,135359],{},[2008,135358,130604],{"align":25391},[2008,135360,135361],{"align":25391},"不管超出内容否，总是显示滚动条",[1962,135363,135364,135366],{},[2008,135365,74304],{"align":25391},[2008,135367,135368],{"align":25391},"超出自动显示滚动条，不超出不显示滚动条",[2822,135370,135371,135374],{},[165,135372,135373],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[165,135375,135376],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[633,135378,135380],{"id":135379},"_1214-案例收获","12.1.4 案例收获",[3145,135382],{"style":128040,"src":135383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135385,135386],{},"问题：没做出来动态效果，使用hover没实现",[19,135388,135389],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[23,135391,135392],{"className":128184,"code":133616,"language":128186,"meta":28,"style":28},[30,135393,135394,135398,135412,135416,135430,135434,135448,135452,135466,135470],{"__ignoreMap":28},[33,135395,135396],{"class":35,"line":36},[33,135397,133623],{"class":87},[33,135399,135400,135402,135404,135406,135408,135410],{"class":35,"line":43},[33,135401,133628],{"class":3632},[33,135403,81448],{"class":59},[33,135405,130544],{"class":39},[33,135407,53082],{"class":59},[33,135409,133637],{"class":39},[33,135411,131114],{"class":59},[33,135413,135414],{"class":35,"line":130},[33,135415,133644],{"class":87},[33,135417,135418,135420,135422,135424,135426,135428],{"class":35,"line":146},[33,135419,133649],{"class":3632},[33,135421,81448],{"class":59},[33,135423,130544],{"class":39},[33,135425,53082],{"class":59},[33,135427,56408],{"class":39},[33,135429,131114],{"class":59},[33,135431,135432],{"class":35,"line":267},[33,135433,133664],{"class":87},[33,135435,135436,135438,135440,135442,135444,135446],{"class":35,"line":275},[33,135437,133669],{"class":3632},[33,135439,81448],{"class":59},[33,135441,130544],{"class":39},[33,135443,53082],{"class":59},[33,135445,56475],{"class":39},[33,135447,131114],{"class":59},[33,135449,135450],{"class":35,"line":392},[33,135451,133684],{"class":87},[33,135453,135454,135456,135458,135460,135462,135464],{"class":35,"line":406},[33,135455,133689],{"class":3632},[33,135457,81448],{"class":59},[33,135459,130544],{"class":39},[33,135461,53082],{"class":59},[33,135463,87873],{"class":39},[33,135465,131114],{"class":59},[33,135467,135468],{"class":35,"line":418},[33,135469,133704],{"class":87},[33,135471,135472,135474,135476,135478,135480,135482],{"class":35,"line":425},[33,135473,133709],{"class":3632},[33,135475,81448],{"class":59},[33,135477,130544],{"class":39},[33,135479,53082],{"class":59},[33,135481,133718],{"class":39},[33,135483,131114],{"class":59},[19,135485,135486],{},"完整代码：",[23,135488,135489],{"className":128184,"code":133616,"language":128186,"meta":28,"style":28},[30,135490,135491,135495,135509,135513,135527,135531,135545,135549,135563,135567],{"__ignoreMap":28},[33,135492,135493],{"class":35,"line":36},[33,135494,133623],{"class":87},[33,135496,135497,135499,135501,135503,135505,135507],{"class":35,"line":43},[33,135498,133628],{"class":3632},[33,135500,81448],{"class":59},[33,135502,130544],{"class":39},[33,135504,53082],{"class":59},[33,135506,133637],{"class":39},[33,135508,131114],{"class":59},[33,135510,135511],{"class":35,"line":130},[33,135512,133644],{"class":87},[33,135514,135515,135517,135519,135521,135523,135525],{"class":35,"line":146},[33,135516,133649],{"class":3632},[33,135518,81448],{"class":59},[33,135520,130544],{"class":39},[33,135522,53082],{"class":59},[33,135524,56408],{"class":39},[33,135526,131114],{"class":59},[33,135528,135529],{"class":35,"line":267},[33,135530,133664],{"class":87},[33,135532,135533,135535,135537,135539,135541,135543],{"class":35,"line":275},[33,135534,133669],{"class":3632},[33,135536,81448],{"class":59},[33,135538,130544],{"class":39},[33,135540,53082],{"class":59},[33,135542,56475],{"class":39},[33,135544,131114],{"class":59},[33,135546,135547],{"class":35,"line":392},[33,135548,133684],{"class":87},[33,135550,135551,135553,135555,135557,135559,135561],{"class":35,"line":406},[33,135552,133689],{"class":3632},[33,135554,81448],{"class":59},[33,135556,130544],{"class":39},[33,135558,53082],{"class":59},[33,135560,87873],{"class":39},[33,135562,131114],{"class":59},[33,135564,135565],{"class":35,"line":418},[33,135566,133704],{"class":87},[33,135568,135569,135571,135573,135575,135577,135579],{"class":35,"line":425},[33,135570,133709],{"class":3632},[33,135572,81448],{"class":59},[33,135574,130544],{"class":39},[33,135576,53082],{"class":59},[33,135578,133718],{"class":39},[33,135580,131114],{"class":59},[19,135582,135583],{},"分布思路重点详解：",[23,135585,135586],{"className":128184,"code":133616,"language":128186,"meta":28,"style":28},[30,135587,135588,135592,135606,135610,135624,135628,135642,135646,135660,135664],{"__ignoreMap":28},[33,135589,135590],{"class":35,"line":36},[33,135591,133623],{"class":87},[33,135593,135594,135596,135598,135600,135602,135604],{"class":35,"line":43},[33,135595,133628],{"class":3632},[33,135597,81448],{"class":59},[33,135599,130544],{"class":39},[33,135601,53082],{"class":59},[33,135603,133637],{"class":39},[33,135605,131114],{"class":59},[33,135607,135608],{"class":35,"line":130},[33,135609,133644],{"class":87},[33,135611,135612,135614,135616,135618,135620,135622],{"class":35,"line":146},[33,135613,133649],{"class":3632},[33,135615,81448],{"class":59},[33,135617,130544],{"class":39},[33,135619,53082],{"class":59},[33,135621,56408],{"class":39},[33,135623,131114],{"class":59},[33,135625,135626],{"class":35,"line":267},[33,135627,133664],{"class":87},[33,135629,135630,135632,135634,135636,135638,135640],{"class":35,"line":275},[33,135631,133669],{"class":3632},[33,135633,81448],{"class":59},[33,135635,130544],{"class":39},[33,135637,53082],{"class":59},[33,135639,56475],{"class":39},[33,135641,131114],{"class":59},[33,135643,135644],{"class":35,"line":392},[33,135645,133684],{"class":87},[33,135647,135648,135650,135652,135654,135656,135658],{"class":35,"line":406},[33,135649,133689],{"class":3632},[33,135651,81448],{"class":59},[33,135653,130544],{"class":39},[33,135655,53082],{"class":59},[33,135657,87873],{"class":39},[33,135659,131114],{"class":59},[33,135661,135662],{"class":35,"line":418},[33,135663,133704],{"class":87},[33,135665,135666,135668,135670,135672,135674,135676],{"class":35,"line":425},[33,135667,133709],{"class":3632},[33,135669,81448],{"class":59},[33,135671,130544],{"class":39},[33,135673,53082],{"class":59},[33,135675,133718],{"class":39},[33,135677,131114],{"class":59},[3145,135679],{"style":128040,"src":135680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135682,135683],{},"图片太大，盒子太小，此时需要修改图片的大小",[23,135685,135687],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[30,135688,135689],{"__ignoreMap":28},[33,135690,135691,135693,135695,135697,135699,135702,135704,135706,135709,135712,135714,135717],{"class":35,"line":36},[33,135692,2726],{"class":59},[33,135694,3145],{"class":52945},[33,135696,56883],{"class":3632},[33,135698,64],{"class":59},[33,135700,135701],{"class":117},"\"images\u002Fpic.jpg\"",[33,135703,56891],{"class":3632},[33,135705,64],{"class":59},[33,135707,135708],{"class":117},"\"描述文字\"",[33,135710,135711],{"class":3632}," title",[33,135713,64],{"class":59},[33,135715,135716],{"class":117},"\"悬停提示\"",[33,135718,52952],{"class":59},[3145,135720],{"style":128040,"src":135721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135723,135724],{},"制造遮罩层",[23,135726,135727],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,135728,135729],{"__ignoreMap":28},[33,135730,135731,135733,135735,135737,135739,135741,135743,135745,135747,135749,135751,135753],{"class":35,"line":36},[33,135732,2726],{"class":59},[33,135734,3145],{"class":52945},[33,135736,56883],{"class":3632},[33,135738,64],{"class":59},[33,135740,135701],{"class":117},[33,135742,56891],{"class":3632},[33,135744,64],{"class":59},[33,135746,135708],{"class":117},[33,135748,135711],{"class":3632},[33,135750,64],{"class":59},[33,135752,135716],{"class":117},[33,135754,52952],{"class":59},[19,135756,135757],{},"此时是这样的为标准流",[3145,135759],{"style":128040,"src":135760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135762,135763],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135765,135766],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135768,135769],{},"让他在中间，用center(background-position)",[19,135771,135772],{},"将需要变的尽可能放到一个盒子中",[19,135774,135775],{},"放大盒子上内部盒子发生变化",[23,135777,135779],{"className":128184,"code":135778,"language":128186,"meta":28,"style":28},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[30,135780,135781,135787,135797,135801,135808,135818,135830,135842],{"__ignoreMap":28},[33,135782,135783,135785],{"class":35,"line":36},[33,135784,129251],{"class":3632},[33,135786,17228],{"class":59},[33,135788,135789,135791,135793,135795],{"class":35,"line":43},[33,135790,133990],{"class":39},[33,135792,53082],{"class":59},[33,135794,56408],{"class":39},[33,135796,2976],{"class":59},[33,135798,135799],{"class":35,"line":130},[33,135800,3247],{"class":59},[33,135802,135803,135806],{"class":35,"line":146},[33,135804,135805],{"class":3632},".child",[33,135807,17228],{"class":59},[33,135809,135810,135812,135814,135816],{"class":35,"line":267},[33,135811,133990],{"class":39},[33,135813,53082],{"class":59},[33,135815,56475],{"class":39},[33,135817,2976],{"class":59},[33,135819,135820,135822,135824,135826,135828],{"class":35,"line":275},[33,135821,134004],{"class":39},[33,135823,53082],{"class":59},[33,135825,2473],{"class":39},[33,135827,2146],{"class":63},[33,135829,2976],{"class":59},[33,135831,135832,135834,135836,135838,135840],{"class":35,"line":392},[33,135833,134021],{"class":39},[33,135835,53082],{"class":59},[33,135837,2473],{"class":39},[33,135839,2146],{"class":63},[33,135841,2976],{"class":59},[33,135843,135844],{"class":35,"line":406},[33,135845,3247],{"class":59},[19,135847,135848],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135850,135852],{"id":135851},"_122-精灵图","12.2 精灵图",[633,135854,135856],{"id":135855},"_1221-理解","12.2.1 理解",[162,135858,135859,135877],{},[165,135860,135861,135862,134090,135865,135868,135869,135872,135873,135876],{},"目的： ",[1968,135863,135864],{},"为了有效地减少服务器接收和发送请求的次数",[1968,135866,135867],{},"提高"," 页面的 ",[1968,135870,135871],{},"加载速度"," ，出现了 ",[1968,135874,135875],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[165,135878,135879,135880,135882,135883,135885,135886,135888,135889,135891,135892,135894,135895,135897],{},"使用精灵图核心：",[55361,135881],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55361,135884],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55361,135887],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55361,135890],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55361,135893],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55361,135896],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[633,135899,135901],{"id":135900},"_1222-扒图","12.2.2 扒图",[23,135903,135906],{"className":135904,"code":135905,"language":6848},[6846],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[30,135907,135905],{"__ignoreMap":28},[3145,135909],{"style":128040,"src":135910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3145,135912],{"style":128040,"src":135913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[633,135915,135917],{"id":135916},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3145,135919],{"style":128040,"src":135920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135922,135923],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3145,135925],{"style":128040,"src":135926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[23,135928,135930],{"className":128184,"code":135929,"language":128186,"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,135931,135932,135937,135944,135956,135968,135987,136004],{"__ignoreMap":28},[33,135933,135934],{"class":35,"line":36},[33,135935,135936],{"class":87},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[33,135938,135939,135942],{"class":35,"line":43},[33,135940,135941],{"class":3632},".icon",[33,135943,17228],{"class":59},[33,135945,135946,135948,135950,135952,135954],{"class":35,"line":130},[33,135947,72210],{"class":39},[33,135949,53082],{"class":59},[33,135951,2517],{"class":39},[33,135953,53137],{"class":63},[33,135955,2976],{"class":59},[33,135957,135958,135960,135962,135964,135966],{"class":35,"line":146},[33,135959,72430],{"class":39},[33,135961,53082],{"class":59},[33,135963,2517],{"class":39},[33,135965,53137],{"class":63},[33,135967,2976],{"class":59},[33,135969,135970,135972,135974,135976,135978,135981,135983,135985],{"class":35,"line":267},[33,135971,72253],{"class":39},[33,135973,53082],{"class":59},[33,135975,63368],{"class":39},[33,135977,109],{"class":59},[33,135979,135980],{"class":6877},"sprites.png",[33,135982,15372],{"class":59},[33,135984,63378],{"class":39},[33,135986,2976],{"class":59},[33,135988,135989,135991,135993,135995,135997,136000,136002],{"class":35,"line":275},[33,135990,130444],{"class":39},[33,135992,53082],{"class":59},[33,135994,53408],{"class":39},[33,135996,53137],{"class":63},[33,135998,135999],{"class":39}," -20",[33,136001,53137],{"class":63},[33,136003,2976],{"class":59},[33,136005,136006],{"class":35,"line":392},[33,136007,3247],{"class":59},[3145,136009],{"style":128040,"src":136010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136012,136013],{},"在前端中坐标轴的正方向是右和下",[14,136015,136017],{"id":136016},"_123-字体图标","12.3 字体图标",[633,136019,136021],{"id":136020},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136023,136024],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136026,136027],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136029,136030],{},"1.图片文件还是比较大的。",[19,136032,136033],{},"2.图片本身放大和缩小会失真。",[19,136035,136036],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136038,136039,136040,27396],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[1968,136041,136042],{},"字体图标 iconfont",[19,136044,136045,136048,136049,1628],{},[1968,136046,136047],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[1968,136050,136051],{},"展示的是图标，本质属于字体",[633,136053,136055],{"id":136054},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2822,136057,136058,136063,136066,136069,136072],{},[165,136059,136060,136062],{},[1968,136061,27532],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[165,136064,136065],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[165,136067,136068],{},"兼容性：几乎支持所有的浏览器，请放心使用",[165,136070,136071],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[165,136073,136074],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[633,136076,136078],{"id":136077},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2822,136080,136081],{},[165,136082,136083,136084],{},"icomoon字体库：",[2057,136085,136088],{"href":136086,"rel":136087},"http:\u002F\u002Ficomoon.io\u002F",[25520],"http:\u002F\u002Ficomoon.io",[19,136090,136091],{},"进去之后点icomoon app",[3145,136093],{"style":128040,"src":136094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136096,136097],{},"可以对其编辑：",[3145,136099],{"style":128040,"src":136100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136102,136103],{},"生成字体：",[3145,136105],{"style":128040,"src":136106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136108,136109],{},"下载：",[3145,136111],{"style":128040,"src":136112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2822,136114,136115],{},[165,136116,136117,136118],{},"阿里iconfont字体库： ",[2057,136119,136120],{"href":136120,"rel":136121},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25520],[633,136123,136125],{"id":136124},"_1234-字体图标的引入","12.3.4 字体图标的引入",[162,136127,136128],{},[165,136129,136130,136131,136134],{},"把下载包里面的 ",[1968,136132,136133],{},"fonts"," 文件夹放入页面根目录下",[3145,136136],{"style":128040,"src":136137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[162,136139,136140],{"start":43},[165,136141,136142],{},"字体文件格式",[1956,136144,136145,136154],{},[1959,136146,136147],{},[1962,136148,136149,136152],{},[1965,136150,136151],{"align":25391},"格式",[1965,136153,25395],{"align":25391},[2003,136155,136156,136166,136176,136186],{},[1962,136157,136158,136163],{},[2008,136159,136160],{"align":25391},[1968,136161,136162],{},".ttf",[2008,136164,136165],{"align":25391},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1962,136167,136168,136173],{},[2008,136169,136170],{"align":25391},[1968,136171,136172],{},".woff",[2008,136174,136175],{"align":25391},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1962,136177,136178,136183],{},[2008,136179,136180],{"align":25391},[1968,136181,136182],{},".eot",[2008,136184,136185],{"align":25391},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1962,136187,136188,136193],{},[2008,136189,136190],{"align":25391},[1968,136191,136192],{},"svg",[2008,136194,136195],{"align":25391},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[162,136197,136198],{"start":130},[165,136199,136200],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[23,136202,136204],{"className":128184,"code":136203,"language":128186,"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,136205,136206,136211,136218,136230,136246,136271,136292,136312,136332,136336,136342,136352,136363],{"__ignoreMap":28},[33,136207,136208],{"class":35,"line":36},[33,136209,136210],{"class":87},"\u002F* 引入字体图标 *\u002F\n",[33,136212,136213,136216],{"class":35,"line":43},[33,136214,136215],{"class":63},"@font-face",[33,136217,17228],{"class":59},[33,136219,136220,136223,136225,136228],{"class":35,"line":130},[33,136221,136222],{"class":39},"  font-family",[33,136224,53082],{"class":59},[33,136226,136227],{"class":117},"'icomoon'",[33,136229,2976],{"class":59},[33,136231,136232,136235,136237,136239,136241,136244],{"class":35,"line":146},[33,136233,136234],{"class":39},"  src",[33,136236,53082],{"class":59},[33,136238,63368],{"class":39},[33,136240,109],{"class":59},[33,136242,136243],{"class":117},"'fonts\u002Ficomoon.eot'",[33,136245,4385],{"class":59},[33,136247,136248,136250,136252,136254,136256,136259,136261,136264,136266,136269],{"class":35,"line":267},[33,136249,136234],{"class":39},[33,136251,53082],{"class":59},[33,136253,63368],{"class":39},[33,136255,109],{"class":59},[33,136257,136258],{"class":117},"'fonts\u002Ficomoon.eot?#iefix'",[33,136260,15372],{"class":59},[33,136262,136263],{"class":39},"format",[33,136265,109],{"class":59},[33,136267,136268],{"class":117},"'embedded-opentype'",[33,136270,39694],{"class":59},[33,136272,136273,136276,136278,136281,136283,136285,136287,136290],{"class":35,"line":275},[33,136274,136275],{"class":39},"       url",[33,136277,109],{"class":59},[33,136279,136280],{"class":117},"'fonts\u002Ficomoon.woff'",[33,136282,15372],{"class":59},[33,136284,136263],{"class":39},[33,136286,109],{"class":59},[33,136288,136289],{"class":117},"'woff'",[33,136291,39694],{"class":59},[33,136293,136294,136296,136298,136301,136303,136305,136307,136310],{"class":35,"line":392},[33,136295,136275],{"class":39},[33,136297,109],{"class":59},[33,136299,136300],{"class":117},"'fonts\u002Ficomoon.ttf'",[33,136302,15372],{"class":59},[33,136304,136263],{"class":39},[33,136306,109],{"class":59},[33,136308,136309],{"class":117},"'truetype'",[33,136311,39694],{"class":59},[33,136313,136314,136316,136318,136321,136323,136325,136327,136330],{"class":35,"line":406},[33,136315,136275],{"class":39},[33,136317,109],{"class":59},[33,136319,136320],{"class":117},"'fonts\u002Ficomoon.svg#icomoon'",[33,136322,15372],{"class":59},[33,136324,136263],{"class":39},[33,136326,109],{"class":59},[33,136328,136329],{"class":117},"'svg'",[33,136331,4385],{"class":59},[33,136333,136334],{"class":35,"line":418},[33,136335,3247],{"class":59},[33,136337,136338,136340],{"class":35,"line":425},[33,136339,135941],{"class":3632},[33,136341,17228],{"class":59},[33,136343,136344,136346,136348,136350],{"class":35,"line":1147},[33,136345,136222],{"class":39},[33,136347,53082],{"class":59},[33,136349,136227],{"class":117},[33,136351,2976],{"class":59},[33,136353,136354,136357,136359,136361],{"class":35,"line":1329},[33,136355,136356],{"class":39},"  font-style",[33,136358,53082],{"class":59},[33,136360,65483],{"class":39},[33,136362,2976],{"class":59},[33,136364,136365],{"class":35,"line":1341},[33,136366,3247],{"class":59},[19,136368,136369],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3145,136371],{"style":128040,"src":136372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[162,136374,136375],{"start":146},[165,136376,136377],{},"添加字体",[3145,136379],{"style":128040,"src":136380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136382,136383],{},"复制：",[3145,136385],{"style":128040,"src":136386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136388,136389],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[162,136391,136392],{"start":267},[165,136393,136394],{},"代码展示：",[23,136396,136397],{"className":128184,"code":136203,"language":128186,"meta":28,"style":28},[30,136398,136399,136403,136409,136419,136433,136455,136473,136491,136509,136513,136519,136529,136539],{"__ignoreMap":28},[33,136400,136401],{"class":35,"line":36},[33,136402,136210],{"class":87},[33,136404,136405,136407],{"class":35,"line":43},[33,136406,136215],{"class":63},[33,136408,17228],{"class":59},[33,136410,136411,136413,136415,136417],{"class":35,"line":130},[33,136412,136222],{"class":39},[33,136414,53082],{"class":59},[33,136416,136227],{"class":117},[33,136418,2976],{"class":59},[33,136420,136421,136423,136425,136427,136429,136431],{"class":35,"line":146},[33,136422,136234],{"class":39},[33,136424,53082],{"class":59},[33,136426,63368],{"class":39},[33,136428,109],{"class":59},[33,136430,136243],{"class":117},[33,136432,4385],{"class":59},[33,136434,136435,136437,136439,136441,136443,136445,136447,136449,136451,136453],{"class":35,"line":267},[33,136436,136234],{"class":39},[33,136438,53082],{"class":59},[33,136440,63368],{"class":39},[33,136442,109],{"class":59},[33,136444,136258],{"class":117},[33,136446,15372],{"class":59},[33,136448,136263],{"class":39},[33,136450,109],{"class":59},[33,136452,136268],{"class":117},[33,136454,39694],{"class":59},[33,136456,136457,136459,136461,136463,136465,136467,136469,136471],{"class":35,"line":275},[33,136458,136275],{"class":39},[33,136460,109],{"class":59},[33,136462,136280],{"class":117},[33,136464,15372],{"class":59},[33,136466,136263],{"class":39},[33,136468,109],{"class":59},[33,136470,136289],{"class":117},[33,136472,39694],{"class":59},[33,136474,136475,136477,136479,136481,136483,136485,136487,136489],{"class":35,"line":392},[33,136476,136275],{"class":39},[33,136478,109],{"class":59},[33,136480,136300],{"class":117},[33,136482,15372],{"class":59},[33,136484,136263],{"class":39},[33,136486,109],{"class":59},[33,136488,136309],{"class":117},[33,136490,39694],{"class":59},[33,136492,136493,136495,136497,136499,136501,136503,136505,136507],{"class":35,"line":406},[33,136494,136275],{"class":39},[33,136496,109],{"class":59},[33,136498,136320],{"class":117},[33,136500,15372],{"class":59},[33,136502,136263],{"class":39},[33,136504,109],{"class":59},[33,136506,136329],{"class":117},[33,136508,4385],{"class":59},[33,136510,136511],{"class":35,"line":418},[33,136512,3247],{"class":59},[33,136514,136515,136517],{"class":35,"line":425},[33,136516,135941],{"class":3632},[33,136518,17228],{"class":59},[33,136520,136521,136523,136525,136527],{"class":35,"line":1147},[33,136522,136222],{"class":39},[33,136524,53082],{"class":59},[33,136526,136227],{"class":117},[33,136528,2976],{"class":59},[33,136530,136531,136533,136535,136537],{"class":35,"line":1329},[33,136532,136356],{"class":39},[33,136534,53082],{"class":59},[33,136536,65483],{"class":39},[33,136538,2976],{"class":59},[33,136540,136541],{"class":35,"line":1341},[33,136542,3247],{"class":59},[3145,136544],{"style":128040,"src":136545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136547,136548],{},"更加细节展示：",[162,136550,136551],{},[165,136552,136553],{},"html 标签内添加小图标",[3145,136555],{"style":128040,"src":136556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[162,136558,136559],{"start":43},[165,136560,136561],{},"给标签定义字体",[23,136563,136564],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,136565,136566,136570,136584,136588],{"__ignoreMap":28},[33,136567,136568],{"class":35,"line":36},[33,136569,132295],{"class":87},[33,136571,136572,136574,136576,136578,136580,136582],{"class":35,"line":43},[33,136573,2726],{"class":59},[33,136575,53256],{"class":52945},[33,136577,55131],{"class":3632},[33,136579,64],{"class":59},[33,136581,132308],{"class":117},[33,136583,52952],{"class":59},[33,136585,136586],{"class":35,"line":130},[33,136587,132315],{"class":59},[33,136589,136590,136592,136594],{"class":35,"line":146},[33,136591,53430],{"class":59},[33,136593,53256],{"class":52945},[33,136595,52952],{"class":59},[19,136597,136598],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3145,136600],{"style":128040,"src":136601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[633,136603,136605],{"id":136604},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136607,136608],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136610,136611,136612,136615],{},"把压缩包里面的 ",[1968,136613,136614],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136617,136618],{},"打开网站，点下方：",[3145,136620],{"style":128040,"src":136621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3145,136623],{"style":128040,"src":136624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3145,136626],{"style":128040,"src":136627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136629,136630],{},"点yes重新加载",[19,136632,136633],{},"然后重复之前的操作就可以实现了",[19,136635,136636],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[633,136638,136640],{"id":136639},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3145,136642],{"style":128040,"src":136643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1729,136645,136646],{},"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":43,"depth":43,"links":136648},[136649,136655,136660],{"id":135252,"depth":43,"text":135253,"children":136650},[136651,136652,136653,136654],{"id":135264,"depth":130,"text":135265},{"id":135293,"depth":130,"text":135294},{"id":135321,"depth":130,"text":135322},{"id":135379,"depth":130,"text":135380},{"id":135851,"depth":43,"text":135852,"children":136656},[136657,136658,136659],{"id":135855,"depth":130,"text":135856},{"id":135900,"depth":130,"text":135901},{"id":135916,"depth":130,"text":135917},{"id":136016,"depth":43,"text":136017,"children":136661},[136662,136663,136664,136665,136666,136667],{"id":136020,"depth":130,"text":136021},{"id":136054,"depth":130,"text":136055},{"id":136077,"depth":130,"text":136078},{"id":136124,"depth":130,"text":136125},{"id":136604,"depth":130,"text":136605},{"id":136639,"depth":130,"text":136640},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135244,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136674,"title":136675,"body":136676,"description":1751,"extension":1752,"meta":137903,"navigation":126,"path":137904,"seo":137905,"stem":137906,"__hash__":137907},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136677,"toc":137884},[136678,136681,136685,136688,136702,136770,136800,136803,136807,136811,136913,136960,136964,136967,136970,137004,137007,137010,137013,137016,137019,137022,137025,137027,137030,137033,137036,137039,137042,137045,137048,137076,137079,137083,137086,137093,137096,137099,137125,137128,137132,137135,137138,137145,137149,137152,137154,137186,137189,137192,137204,137210,137213,137216,137219,137221,137225,137228,137231,137234,137279,137283,137285,137288,137295,137337,137340,137344,137349,137363,137367,137370,137373,137376,137379,137382,137416,137419,137422,137476,137479,137482,137485,137488,137540,137543,137546,137595,137599,137601,137604,137607,137610,137613,137616,137674,137677,137683,137686,137689,137721,137724,137728,137732,137735,137767,137771,137774,137818,137822,137825,137828,137831,137834,137837,137840,137843,137845,137848,137850,137853,137856,137859,137862,137867,137870,137872,137875,137878,137881],[10,136679,136675],{"id":136680},"_13-界面样式与布局技巧",[14,136682,136684],{"id":136683},"_131-css三角","13.1 css三角",[19,136686,136687],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2822,136689,136690,136693,136696,136699],{},[165,136691,136692],{},"用css 边框可以模拟三角效果",[165,136694,136695],{},"宽度高度为0",[165,136697,136698],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[165,136700,136701],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[23,136703,136705],{"className":128184,"code":136704,"language":128186,"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,136706,136707,136712,136719,136729,136739,136755,136766],{"__ignoreMap":28},[33,136708,136709],{"class":35,"line":36},[33,136710,136711],{"class":87},"\u002F* CSS 实现三角形 *\u002F\n",[33,136713,136714,136717],{"class":35,"line":43},[33,136715,136716],{"class":3632},".triangle",[33,136718,17228],{"class":59},[33,136720,136721,136723,136725,136727],{"class":35,"line":130},[33,136722,72210],{"class":39},[33,136724,53082],{"class":59},[33,136726,2010],{"class":39},[33,136728,2976],{"class":59},[33,136730,136731,136733,136735,136737],{"class":35,"line":146},[33,136732,72430],{"class":39},[33,136734,53082],{"class":59},[33,136736,2010],{"class":39},[33,136738,2976],{"class":59},[33,136740,136741,136743,136745,136747,136749,136751,136753],{"class":35,"line":267},[33,136742,72538],{"class":39},[33,136744,53082],{"class":59},[33,136746,2264],{"class":39},[33,136748,53137],{"class":63},[33,136750,53166],{"class":39},[33,136752,65633],{"class":39},[33,136754,2976],{"class":59},[33,136756,136757,136760,136762,136764],{"class":35,"line":275},[33,136758,136759],{"class":39},"  border-bottom-color",[33,136761,53082],{"class":59},[33,136763,64011],{"class":39},[33,136765,2976],{"class":59},[33,136767,136768],{"class":35,"line":392},[33,136769,3247],{"class":59},[23,136771,136772],{"className":128184,"code":132341,"language":128186,"meta":28,"style":28},[30,136773,136774,136780,136796],{"__ignoreMap":28},[33,136775,136776,136778],{"class":35,"line":36},[33,136777,53256],{"class":52945},[33,136779,17228],{"class":59},[33,136781,136782,136784,136786,136788,136790,136792,136794],{"class":35,"line":43},[33,136783,72538],{"class":39},[33,136785,53082],{"class":59},[33,136787,2036],{"class":39},[33,136789,53137],{"class":63},[33,136791,53166],{"class":39},[33,136793,131576],{"class":39},[33,136795,2976],{"class":59},[33,136797,136798],{"class":35,"line":130},[33,136799,3247],{"class":59},[3145,136801],{"style":128040,"src":136802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136804,136806],{"id":136805},"_132-css用户界面样式","13.2 css用户界面样式",[633,136808,136810],{"id":136809},"_1321-鼠标样式","13.2.1 鼠标样式",[23,136812,136814],{"className":128184,"code":136813,"language":128186,"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,136815,136816,136821,136840,136858,136877,136894],{"__ignoreMap":28},[33,136817,136818],{"class":35,"line":36},[33,136819,136820],{"class":87},"\u002F* 鼠标样式 *\u002F\n",[33,136822,136823,136825,136827,136830,136832,136834,136837],{"class":35,"line":43},[33,136824,53256],{"class":52945},[33,136826,81448],{"class":59},[33,136828,136829],{"class":39},"cursor",[33,136831,53082],{"class":59},[33,136833,63672],{"class":39},[33,136835,136836],{"class":59},"; }   ",[33,136838,136839],{"class":87},"\u002F* 手型 *\u002F\n",[33,136841,136842,136844,136846,136848,136850,136853,136855],{"class":35,"line":130},[33,136843,53256],{"class":52945},[33,136845,81448],{"class":59},[33,136847,136829],{"class":39},[33,136849,53082],{"class":59},[33,136851,136852],{"class":39},"default",[33,136854,136836],{"class":59},[33,136856,136857],{"class":87},"\u002F* 默认 *\u002F\n",[33,136859,136860,136862,136864,136866,136868,136871,136874],{"class":35,"line":146},[33,136861,53256],{"class":52945},[33,136863,81448],{"class":59},[33,136865,136829],{"class":39},[33,136867,53082],{"class":59},[33,136869,136870],{"class":39},"move",[33,136872,136873],{"class":59},"; }      ",[33,136875,136876],{"class":87},"\u002F* 移动 *\u002F\n",[33,136878,136879,136881,136883,136885,136887,136889,136891],{"class":35,"line":267},[33,136880,53256],{"class":52945},[33,136882,81448],{"class":59},[33,136884,136829],{"class":39},[33,136886,53082],{"class":59},[33,136888,6848],{"class":39},[33,136890,136873],{"class":59},[33,136892,136893],{"class":87},"\u002F* 文本 *\u002F\n",[33,136895,136896,136898,136900,136902,136904,136907,136910],{"class":35,"line":275},[33,136897,53256],{"class":52945},[33,136899,81448],{"class":59},[33,136901,136829],{"class":39},[33,136903,53082],{"class":59},[33,136905,136906],{"class":39},"not-allowed",[33,136908,136909],{"class":59},"; } ",[33,136911,136912],{"class":87},"\u002F* 禁止 *\u002F\n",[1956,136914,136915,136923],{},[1959,136916,136917],{},[1962,136918,136919,136921],{},[1965,136920,128648],{"align":25391},[1965,136922,29145],{"align":25391},[2003,136924,136925,136932,136939,136946,136953],{},[1962,136926,136927,136929],{},[2008,136928,136852],{"align":25391},[2008,136930,136931],{"align":25391},"小白 默认",[1962,136933,136934,136936],{},[2008,136935,63672],{"align":25391},[2008,136937,136938],{"align":25391},"小手",[1962,136940,136941,136943],{},[2008,136942,136870],{"align":25391},[2008,136944,136945],{"align":25391},"移动",[1962,136947,136948,136950],{},[2008,136949,6848],{"align":25391},[2008,136951,136952],{"align":25391},"文本",[1962,136954,136955,136957],{},[2008,136956,136906],{"align":25391},[2008,136958,136959],{"align":25391},"禁止",[633,136961,136963],{"id":136962},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136965,136966],{},"去除表单轮廓线",[19,136968,136969],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[23,136971,136972],{"className":128184,"code":131548,"language":128186,"meta":28,"style":28},[30,136973,136974,136978,136984,137000],{"__ignoreMap":28},[33,136975,136976],{"class":35,"line":36},[33,136977,131555],{"class":87},[33,136979,136980,136982],{"class":35,"line":43},[33,136981,53256],{"class":52945},[33,136983,17228],{"class":59},[33,136985,136986,136988,136990,136992,136994,136996,136998],{"class":35,"line":130},[33,136987,72538],{"class":39},[33,136989,53082],{"class":59},[33,136991,2036],{"class":39},[33,136993,53137],{"class":63},[33,136995,53166],{"class":39},[33,136997,131576],{"class":39},[33,136999,2976],{"class":59},[33,137001,137002],{"class":35,"line":146},[33,137003,3247],{"class":59},[19,137005,137006],{},"文本域：",[3145,137008],{"style":128040,"src":137009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137011,137012],{},"此时会有一个空白区域",[3145,137014],{"style":128040,"src":137015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137017,137018],{},"写在同一行就不会出现这个问题",[3145,137020],{"style":128040,"src":137021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137023,137024],{},"文本域是行内块元素，一定记住！！！",[19,137026,99872],{},[3145,137028],{"style":128040,"src":137029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137031,137032],{},"文本域尽量放在一行",[19,137034,137035],{},"知识回顾：cols是列，rols是行",[3145,137037],{"style":128040,"src":137038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137040,137041],{},"它可以进行拖动，显然这是我们不愿意看到的",[3145,137043],{"style":128040,"src":137044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137046,137047],{},"使用resize进行解决",[23,137049,137051],{"className":128184,"code":137050,"language":128186,"meta":28,"style":28},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[30,137052,137053,137059,137072],{"__ignoreMap":28},[33,137054,137055,137057],{"class":35,"line":36},[33,137056,112],{"class":52945},[33,137058,17228],{"class":59},[33,137060,137061,137063,137065,137067,137069],{"class":35,"line":43},[33,137062,72440],{"class":39},[33,137064,53082],{"class":59},[33,137066,56381],{"class":39},[33,137068,132047],{"class":59},[33,137070,137071],{"class":87},"\u002F* 取消表单轮廓线 *\u002F\n",[33,137073,137074],{"class":35,"line":130},[33,137075,3247],{"class":59},[19,137077,137078],{},"此时就无法通过右下方实现拖动了",[633,137080,137082],{"id":137081},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137084,137085],{},"实现一个盒子中的文字和图片对齐",[19,137087,137088,137089,137092],{},"用于设置一个元素的 ",[1968,137090,137091],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137094,137095],{},"图片和文字默认是基线对齐",[3145,137097],{"style":128040,"src":137098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[23,137100,137101],{"className":128184,"code":137050,"language":128186,"meta":28,"style":28},[30,137102,137103,137109,137121],{"__ignoreMap":28},[33,137104,137105,137107],{"class":35,"line":36},[33,137106,112],{"class":52945},[33,137108,17228],{"class":59},[33,137110,137111,137113,137115,137117,137119],{"class":35,"line":43},[33,137112,72440],{"class":39},[33,137114,53082],{"class":59},[33,137116,56381],{"class":39},[33,137118,132047],{"class":59},[33,137120,137071],{"class":87},[33,137122,137123],{"class":35,"line":130},[33,137124,3247],{"class":59},[3145,137126],{"style":128040,"src":137127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23653,137129,137131],{"id":137130},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137133,137134],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3145,137136],{"style":128040,"src":137137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137139,137140,137141,137144],{},"此时可以给图片、表单这些行内块元素的 ",[1968,137142,137143],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23653,137146,137148],{"id":137147},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137150,137151],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137153,16291],{},[23,137155,137157],{"className":128184,"code":137156,"language":128186,"meta":28,"style":28},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[30,137158,137159,137164,137170,137182],{"__ignoreMap":28},[33,137160,137161],{"class":35,"line":36},[33,137162,137163],{"class":87},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[33,137165,137166,137168],{"class":35,"line":43},[33,137167,3145],{"class":52945},[33,137169,17228],{"class":59},[33,137171,137172,137175,137177,137180],{"class":35,"line":130},[33,137173,137174],{"class":39},"  vertical-align",[33,137176,53082],{"class":59},[33,137178,137179],{"class":39},"middle",[33,137181,2976],{"class":59},[33,137183,137184],{"class":35,"line":146},[33,137185,3247],{"class":59},[3145,137187],{"style":128040,"src":137188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137190,137191],{},"主要解决方法有两种：",[162,137193,137194],{},[165,137195,137196,137199,137200,137203],{},[1968,137197,137198],{},"给图片"," 添加 ",[1968,137201,137202],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137205,137206,137207],{},"2.把图片转换为块级元素 ",[1968,137208,137209],{},"display: block",[19,137211,137212],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137214,137215],{},"img {",[19,137217,137218],{},"vertical-align:middle;",[19,137220,1011],{},[633,137222,137224],{"id":137223},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137226,137227],{},"效果：",[3145,137229],{"style":128040,"src":137230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137232,137233],{},"单行文本溢出显示省略号--必须满足三个条件：",[23,137235,137237],{"className":128184,"code":137236,"language":128186,"meta":28,"style":28},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[30,137238,137239,137244,137250,137260,137265,137275],{"__ignoreMap":28},[33,137240,137241],{"class":35,"line":36},[33,137242,137243],{"class":87},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[33,137245,137246,137248],{"class":35,"line":43},[33,137247,3145],{"class":52945},[33,137249,17228],{"class":59},[33,137251,137252,137254,137256,137258],{"class":35,"line":130},[33,137253,137174],{"class":39},[33,137255,53082],{"class":59},[33,137257,137179],{"class":39},[33,137259,2976],{"class":59},[33,137261,137262],{"class":35,"line":146},[33,137263,137264],{"class":87},"  \u002F* 或 *\u002F\n",[33,137266,137267,137269,137271,137273],{"class":35,"line":267},[33,137268,129800],{"class":39},[33,137270,53082],{"class":59},[33,137272,62511],{"class":39},[33,137274,2976],{"class":59},[33,137276,137277],{"class":35,"line":275},[33,137278,3247],{"class":59},[633,137280,137282],{"id":137281},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137284,137227],{},[3145,137286],{"style":128040,"src":137287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137289,137290,137291,137294],{},"多行文本溢出显示省略号， ",[1968,137292,137293],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[23,137296,137297],{"className":128184,"code":137236,"language":128186,"meta":28,"style":28},[30,137298,137299,137303,137309,137319,137323,137333],{"__ignoreMap":28},[33,137300,137301],{"class":35,"line":36},[33,137302,137243],{"class":87},[33,137304,137305,137307],{"class":35,"line":43},[33,137306,3145],{"class":52945},[33,137308,17228],{"class":59},[33,137310,137311,137313,137315,137317],{"class":35,"line":130},[33,137312,137174],{"class":39},[33,137314,53082],{"class":59},[33,137316,137179],{"class":39},[33,137318,2976],{"class":59},[33,137320,137321],{"class":35,"line":146},[33,137322,137264],{"class":87},[33,137324,137325,137327,137329,137331],{"class":35,"line":267},[33,137326,129800],{"class":39},[33,137328,53082],{"class":59},[33,137330,62511],{"class":39},[33,137332,2976],{"class":59},[33,137334,137335],{"class":35,"line":275},[33,137336,3247],{"class":59},[19,137338,137339],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137341,137343],{"id":137342},"_133-常见布局技巧","13.3 常见布局技巧",[19,137345,137346],{},[1968,137347,137348],{},"巧妙利用一个技术更快更好的布局：",[162,137350,137351,137354,137357,137360],{},[165,137352,137353],{},"margin负值的运用",[165,137355,137356],{},"文字围绕浮动元素",[165,137358,137359],{},"行内块的巧妙运用",[165,137361,137362],{},"CSS三角强化",[633,137364,137366],{"id":137365},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137368,137369],{},"应用场景：",[3145,137371],{"style":128040,"src":137372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3145,137374],{"style":128040,"src":137375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137377,137378],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137380,137381],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[23,137383,137384],{"className":128184,"code":131548,"language":128186,"meta":28,"style":28},[30,137385,137386,137390,137396,137412],{"__ignoreMap":28},[33,137387,137388],{"class":35,"line":36},[33,137389,131555],{"class":87},[33,137391,137392,137394],{"class":35,"line":43},[33,137393,53256],{"class":52945},[33,137395,17228],{"class":59},[33,137397,137398,137400,137402,137404,137406,137408,137410],{"class":35,"line":130},[33,137399,72538],{"class":39},[33,137401,53082],{"class":59},[33,137403,2036],{"class":39},[33,137405,53137],{"class":63},[33,137407,53166],{"class":39},[33,137409,131576],{"class":39},[33,137411,2976],{"class":59},[33,137413,137414],{"class":35,"line":146},[33,137415,3247],{"class":59},[3145,137417],{"style":128040,"src":137418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137420,137421],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[23,137423,137425],{"className":128184,"code":137424,"language":128186,"meta":28,"style":28},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,137426,137427,137432,137438,137448,137460,137472],{"__ignoreMap":28},[33,137428,137429],{"class":35,"line":36},[33,137430,137431],{"class":87},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[33,137433,137434,137436],{"class":35,"line":43},[33,137435,132032],{"class":3632},[33,137437,17228],{"class":59},[33,137439,137440,137442,137444,137446],{"class":35,"line":130},[33,137441,133990],{"class":39},[33,137443,53082],{"class":59},[33,137445,56408],{"class":39},[33,137447,2976],{"class":59},[33,137449,137450,137452,137454,137456,137458],{"class":35,"line":146},[33,137451,134004],{"class":39},[33,137453,53082],{"class":59},[33,137455,2264],{"class":39},[33,137457,53137],{"class":63},[33,137459,2976],{"class":59},[33,137461,137462,137464,137466,137468,137470],{"class":35,"line":267},[33,137463,134021],{"class":39},[33,137465,53082],{"class":59},[33,137467,2517],{"class":39},[33,137469,53137],{"class":63},[33,137471,2976],{"class":59},[33,137473,137474],{"class":35,"line":275},[33,137475,3247],{"class":59},[19,137477,137478],{},"加上上述代码会发现：",[3145,137480],{"style":128040,"src":137481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137483,137484],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137486,137487],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[23,137489,137490],{"className":128184,"code":137424,"language":128186,"meta":28,"style":28},[30,137491,137492,137496,137502,137512,137524,137536],{"__ignoreMap":28},[33,137493,137494],{"class":35,"line":36},[33,137495,137431],{"class":87},[33,137497,137498,137500],{"class":35,"line":43},[33,137499,132032],{"class":3632},[33,137501,17228],{"class":59},[33,137503,137504,137506,137508,137510],{"class":35,"line":130},[33,137505,133990],{"class":39},[33,137507,53082],{"class":59},[33,137509,56408],{"class":39},[33,137511,2976],{"class":59},[33,137513,137514,137516,137518,137520,137522],{"class":35,"line":146},[33,137515,134004],{"class":39},[33,137517,53082],{"class":59},[33,137519,2264],{"class":39},[33,137521,53137],{"class":63},[33,137523,2976],{"class":59},[33,137525,137526,137528,137530,137532,137534],{"class":35,"line":267},[33,137527,134021],{"class":39},[33,137529,53082],{"class":59},[33,137531,2517],{"class":39},[33,137533,53137],{"class":63},[33,137535,2976],{"class":59},[33,137537,137538],{"class":35,"line":275},[33,137539,3247],{"class":59},[19,137541,137542],{},"解决方式2：",[19,137544,137545],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[23,137547,137549],{"className":128184,"code":137548,"language":128186,"meta":28,"style":28},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,137550,137551,137557,137567,137579,137591],{"__ignoreMap":28},[33,137552,137553,137555],{"class":35,"line":36},[33,137554,53256],{"class":52945},[33,137556,17228],{"class":59},[33,137558,137559,137561,137563,137565],{"class":35,"line":43},[33,137560,133990],{"class":39},[33,137562,53082],{"class":59},[33,137564,56408],{"class":39},[33,137566,2976],{"class":59},[33,137568,137569,137571,137573,137575,137577],{"class":35,"line":130},[33,137570,134004],{"class":39},[33,137572,53082],{"class":59},[33,137574,2264],{"class":39},[33,137576,53137],{"class":63},[33,137578,2976],{"class":59},[33,137580,137581,137583,137585,137587,137589],{"class":35,"line":146},[33,137582,134021],{"class":39},[33,137584,53082],{"class":59},[33,137586,2517],{"class":39},[33,137588,53137],{"class":63},[33,137590,2976],{"class":59},[33,137592,137593],{"class":35,"line":267},[33,137594,3247],{"class":59},[633,137596,137598],{"id":137597},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137600,137369],{},[3145,137602],{"style":128040,"src":137603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137605,137606],{},"实现结构图：",[3145,137608],{"style":128040,"src":137609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137611,137612],{},"巧妙运用浮动元素不会压住文字的特性",[19,137614,137615],{},"代码显示：",[23,137617,137619],{"className":128184,"code":137618,"language":128186,"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,137620,137621,137627,137637,137641,137646,137650,137656,137670],{"__ignoreMap":28},[33,137622,137623,137625],{"class":35,"line":36},[33,137624,132032],{"class":3632},[33,137626,17228],{"class":59},[33,137628,137629,137631,137633,137635],{"class":35,"line":43},[33,137630,132664],{"class":39},[33,137632,53082],{"class":59},[33,137634,25391],{"class":39},[33,137636,2976],{"class":59},[33,137638,137639],{"class":35,"line":130},[33,137640,3247],{"class":59},[33,137642,137643],{"class":35,"line":146},[33,137644,137645],{"class":59},"```Css\n",[33,137647,137648],{"class":35,"line":267},[33,137649,132027],{"class":87},[33,137651,137652,137654],{"class":35,"line":275},[33,137653,132032],{"class":3632},[33,137655,17228],{"class":59},[33,137657,137658,137660,137662,137664,137666,137668],{"class":35,"line":392},[33,137659,72112],{"class":39},[33,137661,53082],{"class":59},[33,137663,2010],{"class":39},[33,137665,53201],{"class":39},[33,137667,132047],{"class":59},[33,137669,132050],{"class":87},[33,137671,137672],{"class":35,"line":406},[33,137673,3247],{"class":59},[19,137675,137676],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[23,137678,137681],{"className":137679,"code":137680,"language":6848},[6846],"\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,137682,137680],{"__ignoreMap":28},[3145,137684],{"style":128040,"src":137685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137687,137688],{},"最终展示结果：",[23,137690,137691],{"className":128184,"code":132020,"language":128186,"meta":28,"style":28},[30,137692,137693,137697,137703,137717],{"__ignoreMap":28},[33,137694,137695],{"class":35,"line":36},[33,137696,132027],{"class":87},[33,137698,137699,137701],{"class":35,"line":43},[33,137700,132032],{"class":3632},[33,137702,17228],{"class":59},[33,137704,137705,137707,137709,137711,137713,137715],{"class":35,"line":130},[33,137706,72112],{"class":39},[33,137708,53082],{"class":59},[33,137710,2010],{"class":39},[33,137712,53201],{"class":39},[33,137714,132047],{"class":59},[33,137716,132050],{"class":87},[33,137718,137719],{"class":35,"line":146},[33,137720,3247],{"class":59},[3145,137722],{"style":128040,"src":137723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137725,137727],{"id":137726},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[633,137729,137731],{"id":137730},"_1341-原理","13.4.1 原理",[3145,137733],{"style":128040,"src":137734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[23,137736,137737],{"className":128184,"code":132020,"language":128186,"meta":28,"style":28},[30,137738,137739,137743,137749,137763],{"__ignoreMap":28},[33,137740,137741],{"class":35,"line":36},[33,137742,132027],{"class":87},[33,137744,137745,137747],{"class":35,"line":43},[33,137746,132032],{"class":3632},[33,137748,17228],{"class":59},[33,137750,137751,137753,137755,137757,137759,137761],{"class":35,"line":130},[33,137752,72112],{"class":39},[33,137754,53082],{"class":59},[33,137756,2010],{"class":39},[33,137758,53201],{"class":39},[33,137760,132047],{"class":59},[33,137762,132050],{"class":87},[33,137764,137765],{"class":35,"line":146},[33,137766,3247],{"class":59},[633,137768,137770],{"id":137769},"_1342-实例","13.4.2 实例",[3145,137772],{"style":128040,"src":137773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[23,137775,137776],{"className":128184,"code":132650,"language":128186,"meta":28,"style":28},[30,137777,137778,137784,137794,137798,137804,137814],{"__ignoreMap":28},[33,137779,137780,137782],{"class":35,"line":36},[33,137781,132657],{"class":3632},[33,137783,17228],{"class":59},[33,137785,137786,137788,137790,137792],{"class":35,"line":43},[33,137787,132664],{"class":39},[33,137789,53082],{"class":59},[33,137791,25391],{"class":39},[33,137793,2976],{"class":59},[33,137795,137796],{"class":35,"line":130},[33,137797,3247],{"class":59},[33,137799,137800,137802],{"class":35,"line":146},[33,137801,132679],{"class":3632},[33,137803,17228],{"class":59},[33,137805,137806,137808,137810,137812],{"class":35,"line":267},[33,137807,132664],{"class":39},[33,137809,53082],{"class":59},[33,137811,74163],{"class":39},[33,137813,2976],{"class":59},[33,137815,137816],{"class":35,"line":275},[33,137817,3247],{"class":59},[14,137819,137821],{"id":137820},"_135-css的初始化","13.5 css的初始化",[19,137823,137824],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137826,137827],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137829,137830],{},"每个网页都必须首先进行 CSS初始化。",[19,137832,137833],{},"这里我们以 京东CSS初始化代码为例。",[19,137835,137836],{},"在网页右键查看网页源代码",[19,137838,137839],{},"找到css的link引入语句",[19,137841,137842],{},"然后ctrl+f 输入body",[19,137844,78867],{},[3145,137846],{"style":128040,"src":137847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137849,78890],{},[3145,137851],{"style":128040,"src":137852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137854,137855],{},"③打开了网页上传压缩的代码",[3145,137857],{"style":128040,"src":137858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137860,137861],{},"④从body前可以查看这个网页的初始化代码",[19,137863,137864],{},[1968,137865,137866],{},"Unicode编码字体：",[19,137868,137869],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137871,84847],{},[19,137873,137874],{},"黑体 \\9ED1\\4F53",[19,137876,137877],{},"宋体 \\5B8B\\4F53",[19,137879,137880],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1729,137882,137883],{},"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":43,"depth":43,"links":137885},[137886,137887,137894,137898,137902],{"id":136683,"depth":43,"text":136684},{"id":136805,"depth":43,"text":136806,"children":137888},[137889,137890,137891,137892,137893],{"id":136809,"depth":130,"text":136810},{"id":136962,"depth":130,"text":136963},{"id":137081,"depth":130,"text":137082},{"id":137223,"depth":130,"text":137224},{"id":137281,"depth":130,"text":137282},{"id":137342,"depth":43,"text":137343,"children":137895},[137896,137897],{"id":137365,"depth":130,"text":137366},{"id":137597,"depth":130,"text":137598},{"id":137726,"depth":43,"text":137727,"children":137899},[137900,137901],{"id":137730,"depth":130,"text":137731},{"id":137769,"depth":130,"text":137770},{"id":137820,"depth":43,"text":137821},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136675,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137909,"title":137910,"body":137911,"description":1751,"extension":1752,"meta":139597,"navigation":126,"path":139598,"seo":139599,"stem":139600,"__hash__":139601},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137912,"toc":139586},[137913,137916,137920,137924,137927,137934,137937,137940,137978,137981,137983,137997,138001,138010,138014,138019,138022,138025,138028,138063,138068,138071,138101,138104,138109,138112,138115,138145,138148,138202,138205,138209,138214,138226,138229,138233,138263,138266,138271,138274,138304,138307,138311,138328,138332,138336,138339,138372,138375,138379,138382,138385,138388,138391,138394,138505,138508,138511,138514,138616,138619,138623,138627,138631,138634,138674,138677,138679,138695,138699,138702,138707,138788,138791,138794,138920,138925,138928,138936,138939,138944,139029,139032,139036,139039,139042,139046,139066,139071,139155,139158,139163,139166,139169,139247,139250,139253,139256,139259,139262,139267,139270,139273,139345,139348,139353,139356,139453,139456,139462,139465,139468,139471,139474,139477,139480,139483,139486,139490,139495,139498,139531,139536,139539,139580,139583],[10,137914,137910],{"id":137915},"_14-html5与css3新特性",[14,137917,137919],{"id":137918},"_141-html5的新特性","14.1 HTML5的新特性",[633,137921,137923],{"id":137922},"_1411-基本标签","14.1.1 基本标签",[19,137925,137926],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137928,137929,137930,137933],{},"这些新特性都有兼容性问题，基本是 ",[1968,137931,137932],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137935,137936],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137938,137939],{},"现在使用的是新特性：",[2822,137941,137942,137948,137954,137960,137966,137972],{},[165,137943,137944,137947],{},[30,137945,137946],{},"\u003Cheader>"," 头部标签",[165,137949,137950,137953],{},[30,137951,137952],{},"\u003Cnav>"," 导航标签",[165,137955,137956,137959],{},[30,137957,137958],{},"\u003Carticle>"," 内容标签",[165,137961,137962,137965],{},[30,137963,137964],{},"\u003Csection>"," 定义文档某个区域",[165,137967,137968,137971],{},[30,137969,137970],{},"\u003Caside>"," 侧边栏标签",[165,137973,137974,137977],{},[30,137975,137976],{},"\u003Cfooter>"," 尾部标签",[3145,137979],{"style":128040,"src":137980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137982,1853],{},[2822,137984,137985,137988,137991,137994],{},[165,137986,137987],{},"这种语义化标准主要是针对搜索引擎的",[165,137989,137990],{},"这些标签页面中可以经常使用",[165,137992,137993],{},"在IE9中，需要把这些元素转换为块级元素",[165,137995,137996],{},"移动端更喜欢使用这些标签",[633,137998,138000],{"id":137999},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138002,138003,138004,138006,138007,138009],{},"音频 ",[1968,138005,29830],{}," 和视频 ",[1968,138008,29839],{}," 两个标签",[23653,138011,138013],{"id":138012},"_14121-视频标签-video","14.1.2.1 视频标签- video",[162,138015,138016],{},[165,138017,138018],{},"支持格式：",[3145,138020],{"style":128040,"src":138021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138023,138024],{},"尽量使用MP4，兼容性好",[19,138026,138027],{},"用MP4就可以",[23,138029,138031],{"className":128931,"code":138030,"language":128933,"meta":28,"style":28},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[30,138032,138033],{"__ignoreMap":28},[33,138034,138035,138037,138039,138041,138043,138046,138048,138051,138054,138057,138059,138061],{"class":35,"line":36},[33,138036,2726],{"class":59},[33,138038,29839],{"class":52945},[33,138040,56883],{"class":3632},[33,138042,64],{"class":59},[33,138044,138045],{"class":117},"\"movie.mp4\"",[33,138047,94062],{"class":3632},[33,138049,138050],{"class":3632}," autoplay",[33,138052,138053],{"class":3632}," muted",[33,138055,138056],{"class":3632}," loop",[33,138058,56958],{"class":59},[33,138060,29839],{"class":52945},[33,138062,52952],{"class":59},[162,138064,138065],{"start":43},[165,138066,138067],{},"兼容写法",[19,138069,138070],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[23,138072,138073],{"className":128931,"code":138030,"language":128933,"meta":28,"style":28},[30,138074,138075],{"__ignoreMap":28},[33,138076,138077,138079,138081,138083,138085,138087,138089,138091,138093,138095,138097,138099],{"class":35,"line":36},[33,138078,2726],{"class":59},[33,138080,29839],{"class":52945},[33,138082,56883],{"class":3632},[33,138084,64],{"class":59},[33,138086,138045],{"class":117},[33,138088,94062],{"class":3632},[33,138090,138050],{"class":3632},[33,138092,138053],{"class":3632},[33,138094,138056],{"class":3632},[33,138096,56958],{"class":59},[33,138098,29839],{"class":52945},[33,138100,52952],{"class":59},[19,138102,138103],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[162,138105,138106],{"start":130},[165,138107,138108],{},"video常用属性",[3145,138110],{"style":128040,"src":138111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138113,138114],{},"poster属性后面是跟的等待加载图片的地址",[23,138116,138117],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,138118,138119],{"__ignoreMap":28},[33,138120,138121,138123,138125,138127,138129,138131,138133,138135,138137,138139,138141,138143],{"class":35,"line":36},[33,138122,2726],{"class":59},[33,138124,3145],{"class":52945},[33,138126,56883],{"class":3632},[33,138128,64],{"class":59},[33,138130,135701],{"class":117},[33,138132,56891],{"class":3632},[33,138134,64],{"class":59},[33,138136,135708],{"class":117},[33,138138,135711],{"class":3632},[33,138140,64],{"class":59},[33,138142,135716],{"class":117},[33,138144,52952],{"class":59},[19,138146,138147],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[23,138149,138151],{"className":128184,"code":138150,"language":128186,"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,138152,138153,138158,138164,138188,138193,138198],{"__ignoreMap":28},[33,138154,138155],{"class":35,"line":36},[33,138156,138157],{"class":87},"\u002F* 2D 位移 *\u002F\n",[33,138159,138160,138162],{"class":35,"line":43},[33,138161,53256],{"class":52945},[33,138163,17228],{"class":59},[33,138165,138166,138169,138171,138174,138176,138178,138180,138182,138184,138186],{"class":35,"line":130},[33,138167,138168],{"class":39},"  transform",[33,138170,53082],{"class":59},[33,138172,138173],{"class":39},"translate",[33,138175,109],{"class":59},[33,138177,2129],{"class":39},[33,138179,53137],{"class":63},[33,138181,14093],{"class":59},[33,138183,2473],{"class":39},[33,138185,53137],{"class":63},[33,138187,4385],{"class":59},[33,138189,138190],{"class":35,"line":146},[33,138191,138192],{"class":87},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[33,138194,138195],{"class":35,"line":267},[33,138196,138197],{"class":87},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[33,138199,138200],{"class":35,"line":275},[33,138201,3247],{"class":59},[19,138203,138204],{},"muted:自动静音属性",[23653,138206,138208],{"id":138207},"_14122-音频标签audio","14.1.2.2 音频标签audio",[162,138210,138211],{},[165,138212,138213],{},"基本使用",[19,138215,138216,138217,138222,138223],{},"当前 ",[1968,138218,138219],{},[30,138220,138221],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[1968,138224,138225],{},"mp3格式",[3145,138227],{"style":128040,"src":138228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[162,138230,138231],{"start":43},[165,138232,138067],{},[23,138234,138235],{"className":128931,"code":138030,"language":128933,"meta":28,"style":28},[30,138236,138237],{"__ignoreMap":28},[33,138238,138239,138241,138243,138245,138247,138249,138251,138253,138255,138257,138259,138261],{"class":35,"line":36},[33,138240,2726],{"class":59},[33,138242,29839],{"class":52945},[33,138244,56883],{"class":3632},[33,138246,64],{"class":59},[33,138248,138045],{"class":117},[33,138250,94062],{"class":3632},[33,138252,138050],{"class":3632},[33,138254,138053],{"class":3632},[33,138256,138056],{"class":3632},[33,138258,56958],{"class":59},[33,138260,29839],{"class":52945},[33,138262,52952],{"class":59},[19,138264,138265],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[162,138267,138268],{"start":130},[165,138269,138270],{},"常用属性",[3145,138272],{"style":128040,"src":138273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[23,138275,138276],{"className":128931,"code":138030,"language":128933,"meta":28,"style":28},[30,138277,138278],{"__ignoreMap":28},[33,138279,138280,138282,138284,138286,138288,138290,138292,138294,138296,138298,138300,138302],{"class":35,"line":36},[33,138281,2726],{"class":59},[33,138283,29839],{"class":52945},[33,138285,56883],{"class":3632},[33,138287,64],{"class":59},[33,138289,138045],{"class":117},[33,138291,94062],{"class":3632},[33,138293,138050],{"class":3632},[33,138295,138053],{"class":3632},[33,138297,138056],{"class":3632},[33,138299,56958],{"class":59},[33,138301,29839],{"class":52945},[33,138303,52952],{"class":59},[19,138305,138306],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23653,138308,138310],{"id":138309},"_14123-总结","14.1.2.3 总结",[2822,138312,138313,138316,138319,138322,138325],{},[165,138314,138315],{},"音频标签和视频标签使用方式基本一致",[165,138317,138318],{},"浏览器支持情况不同",[165,138320,138321],{},"谷歌浏览器把音频和视频自动播放禁止了",[165,138323,138324],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[165,138326,138327],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[633,138329,138331],{"id":138330},"_1413-表单元素","14.1.3 表单元素",[23653,138333,138335],{"id":138334},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3145,138337],{"style":128040,"src":138338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[23,138340,138342],{"className":128931,"code":138341,"language":128933,"meta":28,"style":28},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[30,138343,138344],{"__ignoreMap":28},[33,138345,138346,138348,138350,138352,138354,138356,138358,138360,138363,138365,138367,138370],{"class":35,"line":36},[33,138347,2726],{"class":59},[33,138349,112],{"class":52945},[33,138351,55468],{"class":3632},[33,138353,64],{"class":59},[33,138355,64341],{"class":117},[33,138357,16578],{"class":3632},[33,138359,64],{"class":59},[33,138361,138362],{"class":117},"\"username\"",[33,138364,62662],{"class":3632},[33,138366,64],{"class":59},[33,138368,138369],{"class":117},"\"请输入用户名\"",[33,138371,52952],{"class":59},[3145,138373],{"style":128040,"src":138374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23653,138376,138378],{"id":138377},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3145,138380],{"style":128040,"src":138381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138383,138384],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138386,138387],{},"快捷操作：",[3145,138389],{"style":128040,"src":138390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138392,138393],{},"例子1：",[23,138395,138397],{"className":128931,"code":138396,"language":128933,"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,138398,138399,138422,138449,138478,138497],{"__ignoreMap":28},[33,138400,138401,138403,138405,138407,138409,138412,138415,138417,138420],{"class":35,"line":36},[33,138402,2726],{"class":59},[33,138404,68267],{"class":52945},[33,138406,68270],{"class":3632},[33,138408,64],{"class":59},[33,138410,138411],{"class":117},"\"\u002Fsubmit\"",[33,138413,138414],{"class":3632}," method",[33,138416,64],{"class":59},[33,138418,138419],{"class":117},"\"post\"",[33,138421,52952],{"class":59},[33,138423,138424,138426,138428,138430,138432,138434,138436,138438,138440,138442,138444,138447],{"class":35,"line":43},[33,138425,53789],{"class":59},[33,138427,112],{"class":52945},[33,138429,55468],{"class":3632},[33,138431,64],{"class":59},[33,138433,64341],{"class":117},[33,138435,16578],{"class":3632},[33,138437,64],{"class":59},[33,138439,138362],{"class":117},[33,138441,62662],{"class":3632},[33,138443,64],{"class":59},[33,138445,138446],{"class":117},"\"用户名\"",[33,138448,52952],{"class":59},[33,138450,138451,138453,138455,138457,138459,138462,138464,138466,138469,138471,138473,138476],{"class":35,"line":130},[33,138452,53789],{"class":59},[33,138454,112],{"class":52945},[33,138456,55468],{"class":3632},[33,138458,64],{"class":59},[33,138460,138461],{"class":117},"\"password\"",[33,138463,16578],{"class":3632},[33,138465,64],{"class":59},[33,138467,138468],{"class":117},"\"pwd\"",[33,138470,62662],{"class":3632},[33,138472,64],{"class":59},[33,138474,138475],{"class":117},"\"密码\"",[33,138477,52952],{"class":59},[33,138479,138480,138482,138484,138486,138488,138490,138493,138495],{"class":35,"line":146},[33,138481,53789],{"class":59},[33,138483,55531],{"class":52945},[33,138485,55468],{"class":3632},[33,138487,64],{"class":59},[33,138489,68290],{"class":117},[33,138491,138492],{"class":59},">提交\u003C\u002F",[33,138494,55531],{"class":52945},[33,138496,52952],{"class":59},[33,138498,138499,138501,138503],{"class":35,"line":267},[33,138500,53430],{"class":59},[33,138502,68267],{"class":52945},[33,138504,52952],{"class":59},[3145,138506],{"style":128040,"src":138507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138509,138510],{},"value是表单域的内容",[19,138512,138513],{},"例子2：",[23,138515,138516],{"className":128931,"code":138396,"language":128933,"meta":28,"style":28},[30,138517,138518,138538,138564,138590,138608],{"__ignoreMap":28},[33,138519,138520,138522,138524,138526,138528,138530,138532,138534,138536],{"class":35,"line":36},[33,138521,2726],{"class":59},[33,138523,68267],{"class":52945},[33,138525,68270],{"class":3632},[33,138527,64],{"class":59},[33,138529,138411],{"class":117},[33,138531,138414],{"class":3632},[33,138533,64],{"class":59},[33,138535,138419],{"class":117},[33,138537,52952],{"class":59},[33,138539,138540,138542,138544,138546,138548,138550,138552,138554,138556,138558,138560,138562],{"class":35,"line":43},[33,138541,53789],{"class":59},[33,138543,112],{"class":52945},[33,138545,55468],{"class":3632},[33,138547,64],{"class":59},[33,138549,64341],{"class":117},[33,138551,16578],{"class":3632},[33,138553,64],{"class":59},[33,138555,138362],{"class":117},[33,138557,62662],{"class":3632},[33,138559,64],{"class":59},[33,138561,138446],{"class":117},[33,138563,52952],{"class":59},[33,138565,138566,138568,138570,138572,138574,138576,138578,138580,138582,138584,138586,138588],{"class":35,"line":130},[33,138567,53789],{"class":59},[33,138569,112],{"class":52945},[33,138571,55468],{"class":3632},[33,138573,64],{"class":59},[33,138575,138461],{"class":117},[33,138577,16578],{"class":3632},[33,138579,64],{"class":59},[33,138581,138468],{"class":117},[33,138583,62662],{"class":3632},[33,138585,64],{"class":59},[33,138587,138475],{"class":117},[33,138589,52952],{"class":59},[33,138591,138592,138594,138596,138598,138600,138602,138604,138606],{"class":35,"line":146},[33,138593,53789],{"class":59},[33,138595,55531],{"class":52945},[33,138597,55468],{"class":3632},[33,138599,64],{"class":59},[33,138601,68290],{"class":117},[33,138603,138492],{"class":59},[33,138605,55531],{"class":52945},[33,138607,52952],{"class":59},[33,138609,138610,138612,138614],{"class":35,"line":267},[33,138611,53430],{"class":59},[33,138613,68267],{"class":52945},[33,138615,52952],{"class":59},[3145,138617],{"style":128040,"src":138618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138620,138622],{"id":138621},"_142-css新特性","14.2 CSS新特性",[633,138624,138626],{"id":138625},"_1421-新增选择器","14.2.1 新增选择器",[23653,138628,138630],{"id":138629},"_14211-属性选择器","14.2.1.1 属性选择器",[3145,138632],{"style":128040,"src":138633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[23,138635,138637],{"className":128184,"code":138636,"language":128186,"meta":28,"style":28},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[30,138638,138639,138654,138670],{"__ignoreMap":28},[33,138640,138641,138643,138645,138647,138649,138651],{"class":35,"line":36},[33,138642,112],{"class":52945},[33,138644,2707],{"class":59},[33,138646,104745],{"class":3632},[33,138648,64],{"class":63},[33,138650,64341],{"class":117},[33,138652,138653],{"class":59},"] {\n",[33,138655,138656,138658,138660,138662,138664,138666,138668],{"class":35,"line":43},[33,138657,72538],{"class":39},[33,138659,53082],{"class":59},[33,138661,2036],{"class":39},[33,138663,53137],{"class":63},[33,138665,53166],{"class":39},[33,138667,131764],{"class":39},[33,138669,2976],{"class":59},[33,138671,138672],{"class":35,"line":130},[33,138673,3247],{"class":59},[3145,138675],{"style":128040,"src":138676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138678,1853],{},[2822,138680,138681,138684,138687,138690],{},[165,138682,138683],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[165,138685,138686],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[165,138688,138689],{},"属性选择器也可以选择出来自定义的属性",[165,138691,138692,138694],{},[1968,138693,160],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23653,138696,138698],{"id":138697},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3145,138700],{"style":128040,"src":138701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[162,138703,138704],{},[165,138705,138706],{},"fist-child",[23,138708,138710],{"className":128184,"code":138709,"language":128186,"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,138711,138712,138717,138732,138752,138770],{"__ignoreMap":28},[33,138713,138714],{"class":35,"line":36},[33,138715,138716],{"class":87},"\u002F* 属性选择器 *\u002F\n",[33,138718,138719,138721,138723,138725,138727,138729],{"class":35,"line":43},[33,138720,112],{"class":52945},[33,138722,2707],{"class":59},[33,138724,104745],{"class":3632},[33,138726,64],{"class":63},[33,138728,64341],{"class":117},[33,138730,138731],{"class":59},"] { }\n",[33,138733,138734,138736,138738,138740,138743,138746,138749],{"class":35,"line":130},[33,138735,112],{"class":52945},[33,138737,2707],{"class":59},[33,138739,16352],{"class":3632},[33,138741,138742],{"class":63},"^=",[33,138744,138745],{"class":117},"\"icon\"",[33,138747,138748],{"class":59},"] { }  ",[33,138750,138751],{"class":87},"\u002F* 以 icon 开头 *\u002F\n",[33,138753,138754,138756,138758,138760,138763,138765,138767],{"class":35,"line":146},[33,138755,112],{"class":52945},[33,138757,2707],{"class":59},[33,138759,16352],{"class":3632},[33,138761,138762],{"class":63},"$=",[33,138764,138745],{"class":117},[33,138766,138748],{"class":59},[33,138768,138769],{"class":87},"\u002F* 以 icon 结尾 *\u002F\n",[33,138771,138772,138774,138776,138778,138781,138783,138785],{"class":35,"line":267},[33,138773,112],{"class":52945},[33,138775,2707],{"class":59},[33,138777,16352],{"class":3632},[33,138779,138780],{"class":63},"*=",[33,138782,138745],{"class":117},[33,138784,138748],{"class":59},[33,138786,138787],{"class":87},"\u002F* 包含 icon *\u002F\n",[19,138789,138790],{},"ul的第一个儿子文本为红色",[19,138792,138793],{},"一定要在冒号前加空格，不然就是选中所有的了",[23,138795,138797],{"className":128184,"code":138796,"language":128186,"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,138798,138799,138805,138815,138819,138823,138828,138841,138854,138870,138887,138904],{"__ignoreMap":28},[33,138800,138801,138803],{"class":35,"line":36},[33,138802,128475],{"class":3632},[33,138804,17228],{"class":59},[33,138806,138807,138809,138811,138813],{"class":35,"line":43},[33,138808,72547],{"class":39},[33,138810,53082],{"class":59},[33,138812,59064],{"class":39},[33,138814,2976],{"class":59},[33,138816,138817],{"class":35,"line":130},[33,138818,3247],{"class":59},[33,138820,138821],{"class":35,"line":146},[33,138822,137645],{"class":59},[33,138824,138825],{"class":35,"line":267},[33,138826,138827],{"class":87},"\u002F* 结构伪类选择器 *\u002F\n",[33,138829,138830,138832,138835,138838],{"class":35,"line":275},[33,138831,165],{"class":52945},[33,138833,138834],{"class":3632},":first-child",[33,138836,138837],{"class":59}," { }           ",[33,138839,138840],{"class":87},"\u002F* 第一个 *\u002F\n",[33,138842,138843,138845,138848,138851],{"class":35,"line":392},[33,138844,165],{"class":52945},[33,138846,138847],{"class":3632},":last-child",[33,138849,138850],{"class":59}," { }            ",[33,138852,138853],{"class":87},"\u002F* 最后一个 *\u002F\n",[33,138855,138856,138858,138860,138862,138864,138867],{"class":35,"line":406},[33,138857,165],{"class":52945},[33,138859,131098],{"class":3632},[33,138861,109],{"class":59},[33,138863,1897],{"class":39},[33,138865,138866],{"class":59},") { }          ",[33,138868,138869],{"class":87},"\u002F* 第2个 *\u002F\n",[33,138871,138872,138874,138876,138878,138881,138884],{"class":35,"line":418},[33,138873,165],{"class":52945},[33,138875,131098],{"class":3632},[33,138877,109],{"class":59},[33,138879,138880],{"class":39},"2n",[33,138882,138883],{"class":59},") { }         ",[33,138885,138886],{"class":87},"\u002F* 偶数 *\u002F\n",[33,138888,138889,138891,138893,138895,138898,138901],{"class":35,"line":425},[33,138890,165],{"class":52945},[33,138892,131098],{"class":3632},[33,138894,109],{"class":59},[33,138896,138897],{"class":39},"2n+1",[33,138899,138900],{"class":59},") { }       ",[33,138902,138903],{"class":87},"\u002F* 奇数 *\u002F\n",[33,138905,138906,138908,138910,138912,138915,138917],{"class":35,"line":1147},[33,138907,165],{"class":52945},[33,138909,131098],{"class":3632},[33,138911,109],{"class":59},[33,138913,138914],{"class":39},"-n+3",[33,138916,138900],{"class":59},[33,138918,138919],{"class":87},"\u002F* 前3个 *\u002F\n",[53256,138921,138924],{"className":138922},[138923],"example","\n  示例内容\n",[19,138926,138927],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2822,138929,138930],{},[165,138931,138932,138935],{},[30,138933,138934],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138937,138938],{},"也就是说它选择的是熊大",[162,138940,138941],{"start":275},[165,138942,138943],{},"权重",[23,138945,138947],{"className":128184,"code":138946,"language":128186,"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,138948,138949,138953,138963,138973,138987,139001,139015],{"__ignoreMap":28},[33,138950,138951],{"class":35,"line":36},[33,138952,138827],{"class":87},[33,138954,138955,138957,138959,138961],{"class":35,"line":43},[33,138956,165],{"class":52945},[33,138958,138834],{"class":3632},[33,138960,138837],{"class":59},[33,138962,138840],{"class":87},[33,138964,138965,138967,138969,138971],{"class":35,"line":130},[33,138966,165],{"class":52945},[33,138968,138847],{"class":3632},[33,138970,138850],{"class":59},[33,138972,138853],{"class":87},[33,138974,138975,138977,138979,138981,138983,138985],{"class":35,"line":146},[33,138976,165],{"class":52945},[33,138978,131098],{"class":3632},[33,138980,109],{"class":59},[33,138982,1897],{"class":39},[33,138984,138866],{"class":59},[33,138986,138869],{"class":87},[33,138988,138989,138991,138993,138995,138997,138999],{"class":35,"line":267},[33,138990,165],{"class":52945},[33,138992,131098],{"class":3632},[33,138994,109],{"class":59},[33,138996,138880],{"class":39},[33,138998,138883],{"class":59},[33,139000,138886],{"class":87},[33,139002,139003,139005,139007,139009,139011,139013],{"class":35,"line":275},[33,139004,165],{"class":52945},[33,139006,131098],{"class":3632},[33,139008,109],{"class":59},[33,139010,138897],{"class":39},[33,139012,138900],{"class":59},[33,139014,138903],{"class":87},[33,139016,139017,139019,139021,139023,139025,139027],{"class":35,"line":392},[33,139018,165],{"class":52945},[33,139020,131098],{"class":3632},[33,139022,109],{"class":59},[33,139024,138914],{"class":39},[33,139026,138900],{"class":59},[33,139028,138919],{"class":87},[19,139030,139031],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23653,139033,139035],{"id":139034},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139037,139038],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3145,139040],{"style":128040,"src":139041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[162,139043,139044],{},[165,139045,1853],{},[2822,139047,139048,139051,139054,139057,139060,139063],{},[165,139049,139050],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[165,139052,139053],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[165,139055,139056],{},"语法： element::before {}",[165,139058,139059],{},"before 和 after 必须有 content 属性",[165,139061,139062],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[165,139064,139065],{},"伪元素选择器和标签选择器一样，权重为 1",[162,139067,139068],{"start":43},[165,139069,139070],{},"实例",[23,139072,139073],{"className":128184,"code":138946,"language":128186,"meta":28,"style":28},[30,139074,139075,139079,139089,139099,139113,139127,139141],{"__ignoreMap":28},[33,139076,139077],{"class":35,"line":36},[33,139078,138827],{"class":87},[33,139080,139081,139083,139085,139087],{"class":35,"line":43},[33,139082,165],{"class":52945},[33,139084,138834],{"class":3632},[33,139086,138837],{"class":59},[33,139088,138840],{"class":87},[33,139090,139091,139093,139095,139097],{"class":35,"line":130},[33,139092,165],{"class":52945},[33,139094,138847],{"class":3632},[33,139096,138850],{"class":59},[33,139098,138853],{"class":87},[33,139100,139101,139103,139105,139107,139109,139111],{"class":35,"line":146},[33,139102,165],{"class":52945},[33,139104,131098],{"class":3632},[33,139106,109],{"class":59},[33,139108,1897],{"class":39},[33,139110,138866],{"class":59},[33,139112,138869],{"class":87},[33,139114,139115,139117,139119,139121,139123,139125],{"class":35,"line":267},[33,139116,165],{"class":52945},[33,139118,131098],{"class":3632},[33,139120,109],{"class":59},[33,139122,138880],{"class":39},[33,139124,138883],{"class":59},[33,139126,138886],{"class":87},[33,139128,139129,139131,139133,139135,139137,139139],{"class":35,"line":275},[33,139130,165],{"class":52945},[33,139132,131098],{"class":3632},[33,139134,109],{"class":59},[33,139136,138897],{"class":39},[33,139138,138900],{"class":59},[33,139140,138903],{"class":87},[33,139142,139143,139145,139147,139149,139151,139153],{"class":35,"line":392},[33,139144,165],{"class":52945},[33,139146,131098],{"class":3632},[33,139148,109],{"class":59},[33,139150,138914],{"class":39},[33,139152,138900],{"class":59},[33,139154,138919],{"class":87},[3145,139156],{"style":128040,"src":139157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[162,139159,139160],{"start":130},[165,139161,139162],{},"使用场景1",[3145,139164],{"style":128040,"src":139165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139167,139168],{},"不需要再加盒子来整红色那部分了",[23,139170,139172],{"className":128184,"code":139171,"language":128186,"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,139173,139174,139179,139188,139199,139209,139213,139222,139233,139243],{"__ignoreMap":28},[33,139175,139176],{"class":35,"line":36},[33,139177,139178],{"class":87},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[33,139180,139181,139183,139186],{"class":35,"line":43},[33,139182,53256],{"class":52945},[33,139184,139185],{"class":3632},"::before",[33,139187,17228],{"class":59},[33,139189,139190,139193,139195,139197],{"class":35,"line":130},[33,139191,139192],{"class":39},"  content",[33,139194,53082],{"class":59},[33,139196,9312],{"class":117},[33,139198,2976],{"class":59},[33,139200,139201,139203,139205,139207],{"class":35,"line":146},[33,139202,129800],{"class":39},[33,139204,53082],{"class":59},[33,139206,62511],{"class":39},[33,139208,2976],{"class":59},[33,139210,139211],{"class":35,"line":267},[33,139212,3247],{"class":59},[33,139214,139215,139217,139220],{"class":35,"line":275},[33,139216,53256],{"class":52945},[33,139218,139219],{"class":3632},"::after",[33,139221,17228],{"class":59},[33,139223,139224,139226,139228,139231],{"class":35,"line":392},[33,139225,139192],{"class":39},[33,139227,53082],{"class":59},[33,139229,139230],{"class":117},"\"→\"",[33,139232,2976],{"class":59},[33,139234,139235,139237,139239,139241],{"class":35,"line":406},[33,139236,72547],{"class":39},[33,139238,53082],{"class":59},[33,139240,63712],{"class":39},[33,139242,2976],{"class":59},[33,139244,139245],{"class":35,"line":418},[33,139246,3247],{"class":59},[3145,139248],{"style":128040,"src":139249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139251,139252],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3145,139254],{"style":128040,"src":139255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139257,139258],{},"但是在引用时需要先转义一下",[19,139260,139261],{},"content='\\e930'",[162,139263,139264],{"start":146},[165,139265,139266],{},"使用场景2",[19,139268,139269],{},"仿土豆效果",[19,139271,139272],{},"通过使用伪元素选择器可以减少body中盒子的数量",[23,139274,139275],{"className":128184,"code":139171,"language":128186,"meta":28,"style":28},[30,139276,139277,139281,139289,139299,139309,139313,139321,139331,139341],{"__ignoreMap":28},[33,139278,139279],{"class":35,"line":36},[33,139280,139178],{"class":87},[33,139282,139283,139285,139287],{"class":35,"line":43},[33,139284,53256],{"class":52945},[33,139286,139185],{"class":3632},[33,139288,17228],{"class":59},[33,139290,139291,139293,139295,139297],{"class":35,"line":130},[33,139292,139192],{"class":39},[33,139294,53082],{"class":59},[33,139296,9312],{"class":117},[33,139298,2976],{"class":59},[33,139300,139301,139303,139305,139307],{"class":35,"line":146},[33,139302,129800],{"class":39},[33,139304,53082],{"class":59},[33,139306,62511],{"class":39},[33,139308,2976],{"class":59},[33,139310,139311],{"class":35,"line":267},[33,139312,3247],{"class":59},[33,139314,139315,139317,139319],{"class":35,"line":275},[33,139316,53256],{"class":52945},[33,139318,139219],{"class":3632},[33,139320,17228],{"class":59},[33,139322,139323,139325,139327,139329],{"class":35,"line":392},[33,139324,139192],{"class":39},[33,139326,53082],{"class":59},[33,139328,139230],{"class":117},[33,139330,2976],{"class":59},[33,139332,139333,139335,139337,139339],{"class":35,"line":406},[33,139334,72547],{"class":39},[33,139336,53082],{"class":59},[33,139338,63712],{"class":39},[33,139340,2976],{"class":59},[33,139342,139343],{"class":35,"line":418},[33,139344,3247],{"class":59},[3145,139346],{"style":128040,"src":139347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[162,139349,139350],{"start":267},[165,139351,139352],{},"使用场景3",[19,139354,139355],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[23,139357,139359],{"className":128184,"code":139358,"language":128186,"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,139360,139361,139367,139377,139381,139385,139389,139397,139407,139417,139421,139429,139439,139449],{"__ignoreMap":28},[33,139362,139363,139365],{"class":35,"line":36},[33,139364,132032],{"class":3632},[33,139366,17228],{"class":59},[33,139368,139369,139371,139373,139375],{"class":35,"line":43},[33,139370,132664],{"class":39},[33,139372,53082],{"class":59},[33,139374,25391],{"class":39},[33,139376,2976],{"class":59},[33,139378,139379],{"class":35,"line":130},[33,139380,3247],{"class":59},[33,139382,139383],{"class":35,"line":146},[33,139384,137645],{"class":59},[33,139386,139387],{"class":35,"line":267},[33,139388,139178],{"class":87},[33,139390,139391,139393,139395],{"class":35,"line":275},[33,139392,53256],{"class":52945},[33,139394,139185],{"class":3632},[33,139396,17228],{"class":59},[33,139398,139399,139401,139403,139405],{"class":35,"line":392},[33,139400,139192],{"class":39},[33,139402,53082],{"class":59},[33,139404,9312],{"class":117},[33,139406,2976],{"class":59},[33,139408,139409,139411,139413,139415],{"class":35,"line":406},[33,139410,129800],{"class":39},[33,139412,53082],{"class":59},[33,139414,62511],{"class":39},[33,139416,2976],{"class":59},[33,139418,139419],{"class":35,"line":418},[33,139420,3247],{"class":59},[33,139422,139423,139425,139427],{"class":35,"line":425},[33,139424,53256],{"class":52945},[33,139426,139219],{"class":3632},[33,139428,17228],{"class":59},[33,139430,139431,139433,139435,139437],{"class":35,"line":1147},[33,139432,139192],{"class":39},[33,139434,53082],{"class":59},[33,139436,139230],{"class":117},[33,139438,2976],{"class":59},[33,139440,139441,139443,139445,139447],{"class":35,"line":1329},[33,139442,72547],{"class":39},[33,139444,53082],{"class":59},[33,139446,63712],{"class":39},[33,139448,2976],{"class":59},[33,139450,139451],{"class":35,"line":1341},[33,139452,3247],{"class":59},[19,139454,139455],{},"div {\nmargin: 0 auto;\n}",[23,139457,139460],{"className":139458,"code":139459,"language":6848},[6846],"\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,139461,139459],{"__ignoreMap":28},[19,139463,139464],{},"如果想让多个元素都发生变化",[19,139466,139467],{},"不能如下操作：",[19,139469,139470],{},"transition: width 2s ease 0.5s;",[19,139472,139473],{},"transition: height 2s ease 0.5s;不对！！！",[19,139475,139476],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139478,139479],{},"使用如下：加逗号隔开",[19,139481,139482],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139484,139485],{},"transition all 2s ease;",[633,139487,139489],{"id":139488},"_1426-过渡练习","14.2.6 过渡练习",[162,139491,139492],{},[165,139493,139494],{},"进度条",[3145,139496],{"style":128040,"src":139497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[23,139499,139501],{"className":128184,"code":139500,"language":128186,"meta":28,"style":28},"div {\n  transition: all 0.3s ease;\n}\n",[30,139502,139503,139509,139527],{"__ignoreMap":28},[33,139504,139505,139507],{"class":35,"line":36},[33,139506,53256],{"class":52945},[33,139508,17228],{"class":59},[33,139510,139511,139514,139516,139518,139521,139523,139525],{"class":35,"line":43},[33,139512,139513],{"class":39},"  transition",[33,139515,53082],{"class":59},[33,139517,29777],{"class":39},[33,139519,139520],{"class":39}," 0.3",[33,139522,2512],{"class":63},[33,139524,80321],{"class":39},[33,139526,2976],{"class":59},[33,139528,139529],{"class":35,"line":130},[33,139530,3247],{"class":59},[162,139532,139533],{"start":43},[165,139534,139535],{},"小米logo",[19,139537,139538],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[23,139540,139542],{"className":128184,"code":139541,"language":128186,"meta":28,"style":28},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[30,139543,139544,139549,139555,139571,139576],{"__ignoreMap":28},[33,139545,139546],{"class":35,"line":36},[33,139547,139548],{"class":87},"\u002F* CSS3 过渡 *\u002F\n",[33,139550,139551,139553],{"class":35,"line":43},[33,139552,53256],{"class":52945},[33,139554,17228],{"class":59},[33,139556,139557,139559,139561,139563,139565,139567,139569],{"class":35,"line":130},[33,139558,139513],{"class":39},[33,139560,53082],{"class":59},[33,139562,29777],{"class":39},[33,139564,139520],{"class":39},[33,139566,2512],{"class":63},[33,139568,80321],{"class":39},[33,139570,2976],{"class":59},[33,139572,139573],{"class":35,"line":146},[33,139574,139575],{"class":87},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[33,139577,139578],{"class":35,"line":267},[33,139579,3247],{"class":59},[19,139581,139582],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1729,139584,139585],{},"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":43,"depth":43,"links":139587},[139588,139593],{"id":137918,"depth":43,"text":137919,"children":139589},[139590,139591,139592],{"id":137922,"depth":130,"text":137923},{"id":137999,"depth":130,"text":138000},{"id":138330,"depth":130,"text":138331},{"id":138621,"depth":43,"text":138622,"children":139594},[139595,139596],{"id":138625,"depth":130,"text":138626},{"id":139488,"depth":130,"text":139489},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137910,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139603,"title":139604,"body":139605,"description":1751,"extension":1752,"meta":141349,"navigation":126,"path":141350,"seo":141351,"stem":141352,"__hash__":141353},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139606,"toc":141330},[139607,139610,139614,139617,139623,139629,139633,139635,139638,139641,139644,139647,139650,139653,139656,139660,139664,139667,139670,139673,139677,139680,139683,139688,139691,139694,139697,139701,139704,139713,139716,139719,139723,139726,139729,139734,139741,139755,139763,139770,139775,139778,139781,139784,139791,139795,139801,139807,139810,139813,139818,139824,139826,139834,139839,139842,139848,139850,139855,139860,139863,139865,139870,139873,139878,139883,139917,139921,139925,139928,139932,139935,140021,140024,140061,140064,140100,140104,140109,140122,140176,140178,140206,140208,140236,140242,140256,140258,140302,140304,140348,140351,140358,140369,140371,140398,140400,140426,140433,140449,140451,140545,140547,140641,140648,140651,140656,140662,140736,140739,140741,140777,140779,140815,140818,140825,140844,140847,140850,140852,140877,140879,140903,140906,140909,140939,140943,140946,141009,141011,141077,141079,141143,141146,141178,141180,141206,141208,141234,141237,141268,141270,141296,141298,141324,141327],[10,139608,139604],{"id":139609},"_15-品优购项目上篇-搭建与公共模块",[14,139611,139613],{"id":139612},"_151-项目规划","15.1 项目规划",[3145,139615],{"style":128040,"src":139616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139618,139619,139622],{},[1968,139620,139621],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139624,139625,139628],{},[1968,139626,139627],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139630,139632],{"id":139631},"_152-项目介绍","15.2 项目介绍",[19,139634,139621],{},[3145,139636],{"style":128040,"src":139637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139639,139640],{},"主页：",[3145,139642],{"style":128040,"src":139643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139645,139646],{},"列表页：",[3145,139648],{"style":128040,"src":139649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139651,139652],{},"注册页：",[3145,139654],{"style":128040,"src":139655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139657,139659],{"id":139658},"_153-项目搭建工作","15.3 项目搭建工作",[633,139661,139663],{"id":139662},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3145,139665],{"style":128040,"src":139666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139668,139669],{},"经常更换的图片要放到upload文件夹中",[19,139671,139672],{},"不经常换的放到images文件夹中",[633,139674,139676],{"id":139675},"_1532-创建文件如下","15.3.2 创建文件如下",[3145,139678],{"style":128040,"src":139679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3145,139681],{"style":128040,"src":139682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139684,139685],{},[1968,139686,139687],{},"初始化样式：",[19,139689,139690],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139692,139693],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139695,139696],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[633,139698,139700],{"id":139699},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139702,139703],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139705,139706,139707,139712],{},"这里最典型的应用就是 ",[1968,139708,139709],{},[30,139710,139711],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3145,139714],{"style":128040,"src":139715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139717,139718],{},"通过link方法来引入",[633,139720,139722],{"id":139721},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3145,139724],{"style":128040,"src":139725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139727,139728],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[162,139730,139731],{},[165,139732,139733],{},"制作favicon图标",[19,139735,139736,139737,139740],{},"①把品优购图标切成 ",[30,139738,139739],{},"png"," 图片",[19,139742,139743,139744,139746,139747,139750,139751],{},"②把 ",[30,139745,139739],{}," 图片转换为 ",[30,139748,139749],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2057,139752,139753],{"href":139753,"rel":139754},"http:\u002F\u002Fwww.bitbug.net\u002F",[25520],[162,139756,139757,139760],{"start":43},[165,139758,139759],{},"favicon图标放到网站根目录下",[165,139761,139762],{},"HTML页面引入favicon",[19,139764,139765,139766,139769],{},"在html 页面里面的 ",[30,139767,139768],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139771,139772],{},[30,139773,139774],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139776,139777],{},"复制这行代码或者在生成这个的网站进行复制",[3145,139779],{"style":128040,"src":139780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139782,139783],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139785,139786,139787],{},"例如:",[2057,139788,139789],{"href":139789,"rel":139790},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25520],[633,139792,139794],{"id":139793},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139796,139797,139800],{},[1968,139798,139799],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139802,139803,139806],{},[1968,139804,139805],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139808,139809],{},"页面必须有三个标签用来符合 SEO 优化",[3145,139811],{"style":128040,"src":139812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[162,139814,139815],{},[165,139816,139817],{},"title网站标题",[19,139819,139820,139823],{},[1968,139821,139822],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139825,70432],{},[2822,139827,139828,139831],{},[165,139829,139830],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[165,139832,139833],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[162,139835,139836],{"start":43},[165,139837,139838],{},"description网站描述",[19,139840,139841],{},"简要说明我们网站主要是做什么的",[19,139843,139844,139847],{},[1968,139845,139846],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139849,70432],{},[19,139851,139852],{},[30,139853,139854],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[162,139856,139857],{"start":130},[165,139858,139859],{},"keywords关键词",[19,139861,139862],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139864,70432],{},[19,139866,139867],{},[30,139868,139869],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139871,139872],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139874,139875],{},[1968,139876,139877],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[162,139879,139880],{"start":146},[165,139881,139882],{},"代码总结",[23,139884,139885],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,139886,139887,139891,139905,139909],{"__ignoreMap":28},[33,139888,139889],{"class":35,"line":36},[33,139890,132295],{"class":87},[33,139892,139893,139895,139897,139899,139901,139903],{"class":35,"line":43},[33,139894,2726],{"class":59},[33,139896,53256],{"class":52945},[33,139898,55131],{"class":3632},[33,139900,64],{"class":59},[33,139902,132308],{"class":117},[33,139904,52952],{"class":59},[33,139906,139907],{"class":35,"line":130},[33,139908,132315],{"class":59},[33,139910,139911,139913,139915],{"class":35,"line":146},[33,139912,53430],{"class":59},[33,139914,53256],{"class":52945},[33,139916,52952],{"class":59},[14,139918,139920],{"id":139919},"_154-项目公共部分制作","15.4 项目公共部分制作",[633,139922,139924],{"id":139923},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3145,139926],{"style":128040,"src":139927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[633,139929,139931],{"id":139930},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139933,139934],{},"布局思路：",[2822,139936,139937,139940,139943,139965,139998],{},[165,139938,139939],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[165,139941,139942],{},"里面包含版心的盒子",[165,139944,139945,139946],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2822,139947,139948,139956,139962],{},[165,139949,139950,139951,23155,139953,139955],{},"1 号盒子 里面包含一个",[30,139952,2822],{},[30,139954,2822],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[165,139957,139958,139959,139961],{},"里面的内容是水平排列，所以需要给",[30,139960,165],{},"设置浮动",[165,139963,139964],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[165,139966,139967,139968],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2822,139969,139970,139984,139989],{},[165,139971,139972,139973,23155,139975,139977,139978,139980,139981,139983],{},"2 号盒子 里面包含一个",[30,139974,2822],{},[30,139976,2822],{},"包裹",[30,139979,165],{},"，中间的",[30,139982,2737],{},"可以用样式去设置，也可以用字符 |",[165,139985,139986,139987,139961],{},"里面内容水平排列，给",[30,139988,165],{},[165,139990,139991,139992,139994,139995,139997],{},"找到里面所有偶数的 ",[30,139993,165],{}," 设置样式（偶数的 ",[30,139996,165],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[165,139999,140000,140001],{},"需要用到字体图标",[2822,140002,140003,140009,140012,140015,140018],{},[165,140004,140005,140006],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[30,140007,140008],{},"arrow-icon",[165,140010,140011],{},"先要引入字体图片的资源",[165,140013,140014],{},"在样式里面利用 font-face 来进行声明",[165,140016,140017],{},"在伪元素的 content属性设置 图标的编码",[165,140019,140020],{},"给伪元素设置font-family属性",[19,140022,140023],{},"结构实例代码：",[23,140025,140027],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},"div::before {\n  content: \"\";\n  display: block;\n}\n",[30,140028,140029,140037,140047,140057],{"__ignoreMap":28},[33,140030,140031,140033,140035],{"class":35,"line":36},[33,140032,53256],{"class":52945},[33,140034,139185],{"class":3632},[33,140036,17228],{"class":59},[33,140038,140039,140041,140043,140045],{"class":35,"line":43},[33,140040,139192],{"class":39},[33,140042,53082],{"class":59},[33,140044,9312],{"class":117},[33,140046,2976],{"class":59},[33,140048,140049,140051,140053,140055],{"class":35,"line":130},[33,140050,129800],{"class":39},[33,140052,53082],{"class":59},[33,140054,62511],{"class":39},[33,140056,2976],{"class":59},[33,140058,140059],{"class":35,"line":146},[33,140060,3247],{"class":59},[19,140062,140063],{},"样式实例代码：",[23,140065,140066],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},[30,140067,140068,140076,140086,140096],{"__ignoreMap":28},[33,140069,140070,140072,140074],{"class":35,"line":36},[33,140071,53256],{"class":52945},[33,140073,139185],{"class":3632},[33,140075,17228],{"class":59},[33,140077,140078,140080,140082,140084],{"class":35,"line":43},[33,140079,139192],{"class":39},[33,140081,53082],{"class":59},[33,140083,9312],{"class":117},[33,140085,2976],{"class":59},[33,140087,140088,140090,140092,140094],{"class":35,"line":130},[33,140089,129800],{"class":39},[33,140091,53082],{"class":59},[33,140093,62511],{"class":39},[33,140095,2976],{"class":59},[33,140097,140098],{"class":35,"line":146},[33,140099,3247],{"class":59},[633,140101,140103],{"id":140102},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2822,140105,140106],{},[165,140107,140108],{},"header 盒子必须要有高度",[19,140110,140111,140112,140114,140115],{},"1 号盒子是 ",[30,140113,133196],{}," 标志定位，在正常开发过程中， ",[1968,140116,140117,140118,140121],{},"logo的布局其实是有讲究的，需要进行 ",[30,140119,140120],{},"logoSEO","的优化 （★★★）",[2822,140123,140124,140132,140140,140167],{},[165,140125,140126,140128,140129,140131],{},[30,140127,133196],{}," 里面首先放一个 ",[30,140130,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[165,140133,140134,140136,140137,140139],{},[30,140135,10],{}," 里面再放一个链接，可以返回首页的，把 ",[30,140138,133196],{}," 的背景图片给链接即可",[165,140141,140142,140143],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2822,140144,140145,140160],{},[165,140146,140147,140148,140151,140152,140155,140156,140159],{},"方法1：",[30,140149,140150],{},"text-indent"," 移到盒子外面（",[30,140153,140154],{},"text-indent: -9999px",") ，然后 ",[30,140157,140158],{},"overflow:hidden"," ，淘宝的做法",[165,140161,140162,140163,140166],{},"方法2：直接给 ",[30,140164,140165],{},"font-size: 0;"," 就看不到文字了，京东的做法",[165,140168,140169,140170,140172,140173,140175],{},"最后给链接一个 ",[30,140171,53052],{}," 属性，这样鼠标放到 ",[30,140174,133196],{}," 上就可以看到提示文字了",[19,140177,140023],{},[23,140179,140180],{"className":128931,"code":133417,"language":128933,"meta":28,"style":28},[30,140181,140182],{"__ignoreMap":28},[33,140183,140184,140186,140188,140190,140192,140194,140196,140198,140200,140202,140204],{"class":35,"line":36},[33,140185,2726],{"class":59},[33,140187,2057],{"class":52945},[33,140189,62699],{"class":3632},[33,140191,64],{"class":59},[33,140193,133432],{"class":117},[33,140195,133435],{"class":3632},[33,140197,64],{"class":59},[33,140199,133440],{"class":117},[33,140201,133443],{"class":59},[33,140203,2057],{"class":52945},[33,140205,52952],{"class":59},[19,140207,140063],{},[23,140209,140210],{"className":128931,"code":133417,"language":128933,"meta":28,"style":28},[30,140211,140212],{"__ignoreMap":28},[33,140213,140214,140216,140218,140220,140222,140224,140226,140228,140230,140232,140234],{"class":35,"line":36},[33,140215,2726],{"class":59},[33,140217,2057],{"class":52945},[33,140219,62699],{"class":3632},[33,140221,64],{"class":59},[33,140223,133432],{"class":117},[33,140225,133435],{"class":3632},[33,140227,64],{"class":59},[33,140229,133440],{"class":117},[33,140231,133443],{"class":59},[33,140233,2057],{"class":52945},[33,140235,52952],{"class":59},[19,140237,140238,140239,140241],{},"2 号盒子是 ",[30,140240,133209],{}," 搜索模块定位",[2822,140243,140244,140247,140250,140253],{},[165,140245,140246],{},"search盒子利用定位的方式放在对应的位置",[165,140248,140249],{},"search盒子设置绝对定位，header盒子设置相对定位",[165,140251,140252],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[165,140254,140255],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140257,140023],{},[23,140259,140260],{"className":128184,"code":133504,"language":128186,"meta":28,"style":28},[30,140261,140262,140284,140288,140298],{"__ignoreMap":28},[33,140263,140264,140266,140268,140270,140272,140274,140276,140278,140280,140282],{"class":35,"line":36},[33,140265,53256],{"class":52945},[33,140267,14093],{"class":59},[33,140269,19],{"class":52945},[33,140271,14093],{"class":59},[33,140273,10],{"class":52945},[33,140275,14093],{"class":59},[33,140277,2822],{"class":52945},[33,140279,14093],{"class":59},[33,140281,165],{"class":52945},[33,140283,17228],{"class":59},[33,140285,140286],{"class":35,"line":43},[33,140287,133533],{"class":87},[33,140289,140290,140292,140294,140296],{"class":35,"line":130},[33,140291,129800],{"class":39},[33,140293,53082],{"class":59},[33,140295,62511],{"class":39},[33,140297,2976],{"class":59},[33,140299,140300],{"class":35,"line":146},[33,140301,3247],{"class":59},[19,140303,140063],{},[23,140305,140306],{"className":128184,"code":133504,"language":128186,"meta":28,"style":28},[30,140307,140308,140330,140334,140344],{"__ignoreMap":28},[33,140309,140310,140312,140314,140316,140318,140320,140322,140324,140326,140328],{"class":35,"line":36},[33,140311,53256],{"class":52945},[33,140313,14093],{"class":59},[33,140315,19],{"class":52945},[33,140317,14093],{"class":59},[33,140319,10],{"class":52945},[33,140321,14093],{"class":59},[33,140323,2822],{"class":52945},[33,140325,14093],{"class":59},[33,140327,165],{"class":52945},[33,140329,17228],{"class":59},[33,140331,140332],{"class":35,"line":43},[33,140333,133533],{"class":87},[33,140335,140336,140338,140340,140342],{"class":35,"line":130},[33,140337,129800],{"class":39},[33,140339,53082],{"class":59},[33,140341,62511],{"class":39},[33,140343,2976],{"class":59},[33,140345,140346],{"class":35,"line":146},[33,140347,3247],{"class":59},[19,140349,140350],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140352,140353,140354,140357],{},"3 号盒子是 ",[30,140355,140356],{},"hotwords"," 热词模块定位",[2822,140359,140360,140363,140366],{},[165,140361,140362],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[165,140364,140365],{},"给里面所有的a标签设置 左右10px的外边距",[165,140367,140368],{},"给第一个a标签设置文字变红色（#c81623）",[19,140370,140023],{},[23,140372,140374],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},"div {\n  margin: 0 auto;\n}\n",[30,140375,140376,140382,140394],{"__ignoreMap":28},[33,140377,140378,140380],{"class":35,"line":36},[33,140379,53256],{"class":52945},[33,140381,17228],{"class":59},[33,140383,140384,140386,140388,140390,140392],{"class":35,"line":43},[33,140385,72112],{"class":39},[33,140387,53082],{"class":59},[33,140389,2010],{"class":39},[33,140391,53201],{"class":39},[33,140393,2976],{"class":59},[33,140395,140396],{"class":35,"line":130},[33,140397,3247],{"class":59},[19,140399,140063],{},[23,140401,140402],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,140403,140404,140410,140422],{"__ignoreMap":28},[33,140405,140406,140408],{"class":35,"line":36},[33,140407,53256],{"class":52945},[33,140409,17228],{"class":59},[33,140411,140412,140414,140416,140418,140420],{"class":35,"line":43},[33,140413,72112],{"class":39},[33,140415,53082],{"class":59},[33,140417,2010],{"class":39},[33,140419,53201],{"class":39},[33,140421,2976],{"class":59},[33,140423,140424],{"class":35,"line":130},[33,140425,3247],{"class":59},[19,140427,140428,140429,140432],{},"4 号盒子是 ",[30,140430,140431],{},"shopcar"," 购物车模块",[2822,140434,140435,140440,140443,140446],{},[165,140436,124968,140437,140439],{},[30,140438,140431],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[165,140441,140442],{},"count 统计部分用绝对定位做",[165,140444,140445],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[165,140447,140448],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140450,140023],{},[23,140452,140453],{"className":128184,"code":133616,"language":128186,"meta":28,"style":28},[30,140454,140455,140459,140473,140477,140491,140495,140509,140513,140527,140531],{"__ignoreMap":28},[33,140456,140457],{"class":35,"line":36},[33,140458,133623],{"class":87},[33,140460,140461,140463,140465,140467,140469,140471],{"class":35,"line":43},[33,140462,133628],{"class":3632},[33,140464,81448],{"class":59},[33,140466,130544],{"class":39},[33,140468,53082],{"class":59},[33,140470,133637],{"class":39},[33,140472,131114],{"class":59},[33,140474,140475],{"class":35,"line":130},[33,140476,133644],{"class":87},[33,140478,140479,140481,140483,140485,140487,140489],{"class":35,"line":146},[33,140480,133649],{"class":3632},[33,140482,81448],{"class":59},[33,140484,130544],{"class":39},[33,140486,53082],{"class":59},[33,140488,56408],{"class":39},[33,140490,131114],{"class":59},[33,140492,140493],{"class":35,"line":267},[33,140494,133664],{"class":87},[33,140496,140497,140499,140501,140503,140505,140507],{"class":35,"line":275},[33,140498,133669],{"class":3632},[33,140500,81448],{"class":59},[33,140502,130544],{"class":39},[33,140504,53082],{"class":59},[33,140506,56475],{"class":39},[33,140508,131114],{"class":59},[33,140510,140511],{"class":35,"line":392},[33,140512,133684],{"class":87},[33,140514,140515,140517,140519,140521,140523,140525],{"class":35,"line":406},[33,140516,133689],{"class":3632},[33,140518,81448],{"class":59},[33,140520,130544],{"class":39},[33,140522,53082],{"class":59},[33,140524,87873],{"class":39},[33,140526,131114],{"class":59},[33,140528,140529],{"class":35,"line":418},[33,140530,133704],{"class":87},[33,140532,140533,140535,140537,140539,140541,140543],{"class":35,"line":425},[33,140534,133709],{"class":3632},[33,140536,81448],{"class":59},[33,140538,130544],{"class":39},[33,140540,53082],{"class":59},[33,140542,133718],{"class":39},[33,140544,131114],{"class":59},[19,140546,140063],{},[23,140548,140549],{"className":128184,"code":133616,"language":128186,"meta":28,"style":28},[30,140550,140551,140555,140569,140573,140587,140591,140605,140609,140623,140627],{"__ignoreMap":28},[33,140552,140553],{"class":35,"line":36},[33,140554,133623],{"class":87},[33,140556,140557,140559,140561,140563,140565,140567],{"class":35,"line":43},[33,140558,133628],{"class":3632},[33,140560,81448],{"class":59},[33,140562,130544],{"class":39},[33,140564,53082],{"class":59},[33,140566,133637],{"class":39},[33,140568,131114],{"class":59},[33,140570,140571],{"class":35,"line":130},[33,140572,133644],{"class":87},[33,140574,140575,140577,140579,140581,140583,140585],{"class":35,"line":146},[33,140576,133649],{"class":3632},[33,140578,81448],{"class":59},[33,140580,130544],{"class":39},[33,140582,53082],{"class":59},[33,140584,56408],{"class":39},[33,140586,131114],{"class":59},[33,140588,140589],{"class":35,"line":267},[33,140590,133664],{"class":87},[33,140592,140593,140595,140597,140599,140601,140603],{"class":35,"line":275},[33,140594,133669],{"class":3632},[33,140596,81448],{"class":59},[33,140598,130544],{"class":39},[33,140600,53082],{"class":59},[33,140602,56475],{"class":39},[33,140604,131114],{"class":59},[33,140606,140607],{"class":35,"line":392},[33,140608,133684],{"class":87},[33,140610,140611,140613,140615,140617,140619,140621],{"class":35,"line":406},[33,140612,133689],{"class":3632},[33,140614,81448],{"class":59},[33,140616,130544],{"class":39},[33,140618,53082],{"class":59},[33,140620,87873],{"class":39},[33,140622,131114],{"class":59},[33,140624,140625],{"class":35,"line":418},[33,140626,133704],{"class":87},[33,140628,140629,140631,140633,140635,140637,140639],{"class":35,"line":425},[33,140630,133709],{"class":3632},[33,140632,81448],{"class":59},[33,140634,130544],{"class":39},[33,140636,53082],{"class":59},[33,140638,133718],{"class":39},[33,140640,131114],{"class":59},[633,140642,140644,140645,140647],{"id":140643},"_1544-nav导航模块制作","15.4.4 ",[30,140646,55358],{},"导航模块制作",[3145,140649],{"style":128040,"src":140650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140652,140653,140655],{},[30,140654,55358],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140657,140658,140659],{},"1 号盒子左侧浮动，",[30,140660,140661],{},"dropdown",[2822,140663,140664,140674,140682,140688,140696,140706,140714,140725],{},[165,140665,140666,140667,102657,140670,140673],{},"1号盒子有讲究，根据相关性 里面包含 ",[30,140668,140669],{},".dt",[30,140671,140672],{},".dd"," 两个盒子",[165,140675,140676,140678,140679,140681],{},[30,140677,140669],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[30,140680,140672],{}," 挤到下面去了",[165,140683,140684,140685,140687],{},"给 ",[30,140686,140672],{}," 盒子设置宽度 和 高度，以及背景颜色",[165,140689,140684,140690,140692,140693,121872],{},[30,140691,140672],{}," 盒子里面定义 无序列表 （",[30,140694,140695],{},"ul > li > a",[165,140697,140698,140699,140701,140702,140705],{},"每个 ",[30,140700,165],{}," 都有一个高度（",[30,140703,140704],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[165,140707,140684,140708,140710,140711,121872],{},[30,140709,165],{}," 里面的a设置文字大小（",[30,140712,140713],{},"14px",[165,140715,140684,140716,140718,140719,140721,140722,140724],{},[30,140717,165],{}," 设置 ",[30,140720,129345],{},"，当鼠标移入的时候，让",[30,140723,165],{},"的背景变成白色，让里面的文字变成红色",[165,140726,140727,140729,140730,140732,140733,140735],{},[30,140728,165],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[30,140731,165],{},"的右侧，那么给",[30,140734,165],{},"设置相对定位",[19,140737,140738],{},"一定要注意相关性",[19,140740,140023],{},[23,140742,140743],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},[30,140744,140745,140753,140763,140773],{"__ignoreMap":28},[33,140746,140747,140749,140751],{"class":35,"line":36},[33,140748,53256],{"class":52945},[33,140750,139185],{"class":3632},[33,140752,17228],{"class":59},[33,140754,140755,140757,140759,140761],{"class":35,"line":43},[33,140756,139192],{"class":39},[33,140758,53082],{"class":59},[33,140760,9312],{"class":117},[33,140762,2976],{"class":59},[33,140764,140765,140767,140769,140771],{"class":35,"line":130},[33,140766,129800],{"class":39},[33,140768,53082],{"class":59},[33,140770,62511],{"class":39},[33,140772,2976],{"class":59},[33,140774,140775],{"class":35,"line":146},[33,140776,3247],{"class":59},[19,140778,140063],{},[23,140780,140781],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},[30,140782,140783,140791,140801,140811],{"__ignoreMap":28},[33,140784,140785,140787,140789],{"class":35,"line":36},[33,140786,53256],{"class":52945},[33,140788,139185],{"class":3632},[33,140790,17228],{"class":59},[33,140792,140793,140795,140797,140799],{"class":35,"line":43},[33,140794,139192],{"class":39},[33,140796,53082],{"class":59},[33,140798,9312],{"class":117},[33,140800,2976],{"class":59},[33,140802,140803,140805,140807,140809],{"class":35,"line":130},[33,140804,129800],{"class":39},[33,140806,53082],{"class":59},[33,140808,62511],{"class":39},[33,140810,2976],{"class":59},[33,140812,140813],{"class":35,"line":146},[33,140814,3247],{"class":59},[19,140816,140817],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140819,140820,140821,140824],{},"2 号盒子左侧浮动，",[30,140822,140823],{},"navitems"," 导航栏组",[2822,140826,140827,140832,140841],{},[165,140828,140829,140830],{},"里面结构是 ",[30,140831,140695],{},[165,140833,140834,140835,140837,140838,140840],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[30,140836,2057],{},"左右的",[30,140839,32534],{},"把两侧撑开",[165,140842,140843],{},"让文字垂直居中（行高等于高度）",[3145,140845],{"style":128040,"src":140846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140848,140849],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140851,140023],{},[23,140853,140855],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},".box {\n  float: left;\n}\n",[30,140856,140857,140863,140873],{"__ignoreMap":28},[33,140858,140859,140861],{"class":35,"line":36},[33,140860,132032],{"class":3632},[33,140862,17228],{"class":59},[33,140864,140865,140867,140869,140871],{"class":35,"line":43},[33,140866,132664],{"class":39},[33,140868,53082],{"class":59},[33,140870,25391],{"class":39},[33,140872,2976],{"class":59},[33,140874,140875],{"class":35,"line":130},[33,140876,3247],{"class":59},[19,140878,140063],{},[23,140880,140881],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,140882,140883,140889,140899],{"__ignoreMap":28},[33,140884,140885,140887],{"class":35,"line":36},[33,140886,132032],{"class":3632},[33,140888,17228],{"class":59},[33,140890,140891,140893,140895,140897],{"class":35,"line":43},[33,140892,132664],{"class":39},[33,140894,53082],{"class":59},[33,140896,25391],{"class":39},[33,140898,2976],{"class":59},[33,140900,140901],{"class":35,"line":130},[33,140902,3247],{"class":59},[19,140904,140905],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3145,140907],{"style":128040,"src":140908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[23,140910,140911],{"className":128184,"code":132341,"language":128186,"meta":28,"style":28},[30,140912,140913,140919,140935],{"__ignoreMap":28},[33,140914,140915,140917],{"class":35,"line":36},[33,140916,53256],{"class":52945},[33,140918,17228],{"class":59},[33,140920,140921,140923,140925,140927,140929,140931,140933],{"class":35,"line":43},[33,140922,72538],{"class":39},[33,140924,53082],{"class":59},[33,140926,2036],{"class":39},[33,140928,53137],{"class":63},[33,140930,53166],{"class":39},[33,140932,131576],{"class":39},[33,140934,2976],{"class":59},[33,140936,140937],{"class":35,"line":130},[33,140938,3247],{"class":59},[633,140940,140942],{"id":140941},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3145,140944],{"style":128040,"src":140945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2822,140947,140948,140953,140958],{},[165,140949,140950,140952],{},[30,140951,133387],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[165,140954,140955,140957],{},[30,140956,133387],{}," 里面有一个大的版心",[165,140959,140960,140961,140964,140965],{},"版心里面包含 1 号盒子，",[30,140962,140963],{},"mod_service"," 是服务模块，mod 是模块的意思",[2822,140966,140967,140972,140985,141001,141006],{},[165,140968,140684,140969,140971],{},[30,140970,140963],{}," 设置高度（80px）和下边框",[165,140973,140974,140975,140978,140979,140981,140982,140984],{},"在里面定义 ",[30,140976,140977],{},"ul > li"," ,每个",[30,140980,165],{}," 宽度是300px 高度是 50px，给每个",[30,140983,165],{},"设置35px的左内边距",[165,140986,140987,140988,140990,140991,140993,140994,140996,140997,20065,140999,121872],{},"在每个",[30,140989,165],{},"里面，放一个 ",[30,140992,24565],{},"（里面放图标），一个",[30,140995,53256],{},"（里面放",[30,140998,53256],{},[30,141000,19],{},[165,141002,140684,141003,141005],{},[30,141004,24565],{},"设置浮动，让h5与这个div左右排列",[165,141007,141008],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141010,140023],{},[23,141012,141014],{"className":128184,"code":141013,"language":128186,"meta":28,"style":28},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[30,141015,141016,141022,141034,141046,141073],{"__ignoreMap":28},[33,141017,141018,141020],{"class":35,"line":36},[33,141019,135941],{"class":3632},[33,141021,17228],{"class":59},[33,141023,141024,141026,141028,141030,141032],{"class":35,"line":43},[33,141025,72210],{"class":39},[33,141027,53082],{"class":59},[33,141029,2517],{"class":39},[33,141031,53137],{"class":63},[33,141033,2976],{"class":59},[33,141035,141036,141038,141040,141042,141044],{"class":35,"line":130},[33,141037,72430],{"class":39},[33,141039,53082],{"class":59},[33,141041,2517],{"class":39},[33,141043,53137],{"class":63},[33,141045,2976],{"class":59},[33,141047,141048,141050,141052,141054,141056,141058,141060,141062,141065,141067,141069,141071],{"class":35,"line":146},[33,141049,72253],{"class":39},[33,141051,53082],{"class":59},[33,141053,63368],{"class":39},[33,141055,109],{"class":59},[33,141057,135980],{"class":6877},[33,141059,15372],{"class":59},[33,141061,63378],{"class":39},[33,141063,141064],{"class":39}," -10",[33,141066,53137],{"class":63},[33,141068,135999],{"class":39},[33,141070,53137],{"class":63},[33,141072,2976],{"class":59},[33,141074,141075],{"class":35,"line":267},[33,141076,3247],{"class":59},[19,141078,140063],{},[23,141080,141081],{"className":128184,"code":141013,"language":128186,"meta":28,"style":28},[30,141082,141083,141089,141101,141113,141139],{"__ignoreMap":28},[33,141084,141085,141087],{"class":35,"line":36},[33,141086,135941],{"class":3632},[33,141088,17228],{"class":59},[33,141090,141091,141093,141095,141097,141099],{"class":35,"line":43},[33,141092,72210],{"class":39},[33,141094,53082],{"class":59},[33,141096,2517],{"class":39},[33,141098,53137],{"class":63},[33,141100,2976],{"class":59},[33,141102,141103,141105,141107,141109,141111],{"class":35,"line":130},[33,141104,72430],{"class":39},[33,141106,53082],{"class":59},[33,141108,2517],{"class":39},[33,141110,53137],{"class":63},[33,141112,2976],{"class":59},[33,141114,141115,141117,141119,141121,141123,141125,141127,141129,141131,141133,141135,141137],{"class":35,"line":146},[33,141116,72253],{"class":39},[33,141118,53082],{"class":59},[33,141120,63368],{"class":39},[33,141122,109],{"class":59},[33,141124,135980],{"class":6877},[33,141126,15372],{"class":59},[33,141128,63378],{"class":39},[33,141130,141064],{"class":39},[33,141132,53137],{"class":63},[33,141134,135999],{"class":39},[33,141136,53137],{"class":63},[33,141138,2976],{"class":59},[33,141140,141141],{"class":35,"line":267},[33,141142,3247],{"class":59},[19,141144,141145],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2822,141147,141148,141151,141157,141163,141175],{},[165,141149,141150],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[165,141152,141153,141154,121872],{},"里面的布局利用 自定义列表来实现（",[30,141155,141156],{},"dl > dt + dd",[165,141158,140684,141159,141162],{},[30,141160,141161],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[165,141164,140684,141165,141168,141169,20065,141171,141174],{},[30,141166,141167],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[30,141170,141167],{},[30,141172,141173],{},"dd","之间有些距离",[165,141176,141177],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141179,140023],{},[23,141181,141182],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,141183,141184,141190,141202],{"__ignoreMap":28},[33,141185,141186,141188],{"class":35,"line":36},[33,141187,53256],{"class":52945},[33,141189,17228],{"class":59},[33,141191,141192,141194,141196,141198,141200],{"class":35,"line":43},[33,141193,72112],{"class":39},[33,141195,53082],{"class":59},[33,141197,2010],{"class":39},[33,141199,53201],{"class":39},[33,141201,2976],{"class":59},[33,141203,141204],{"class":35,"line":130},[33,141205,3247],{"class":59},[19,141207,140063],{},[23,141209,141210],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,141211,141212,141218,141230],{"__ignoreMap":28},[33,141213,141214,141216],{"class":35,"line":36},[33,141215,53256],{"class":52945},[33,141217,17228],{"class":59},[33,141219,141220,141222,141224,141226,141228],{"class":35,"line":43},[33,141221,72112],{"class":39},[33,141223,53082],{"class":59},[33,141225,2010],{"class":39},[33,141227,53201],{"class":39},[33,141229,2976],{"class":59},[33,141231,141232],{"class":35,"line":130},[33,141233,3247],{"class":59},[19,141235,141236],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2822,141238,141239,141248,141251,141262],{},[165,141240,141241,141242,141244,141245,141247],{},"分为上下两块，上面是 ",[30,141243,133404],{}," 友情链接，下面是 ",[30,141246,133397],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[165,141249,141250],{},"把内容分别复制到相应模块中",[165,141252,140684,141253,141255,141256,141258,141259,141261],{},[30,141254,133404],{}," 设置 15px 的下外边距，给",[30,141257,133404],{}," 里面 的 ",[30,141260,2057],{}," 标签设置 左右 3px 的外边距",[165,141263,141264,141265,141267],{},"给",[30,141266,133397],{}," 设置 20px 的行高",[19,141269,140023],{},[23,141271,141272],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,141273,141274,141280,141292],{"__ignoreMap":28},[33,141275,141276,141278],{"class":35,"line":36},[33,141277,53256],{"class":52945},[33,141279,17228],{"class":59},[33,141281,141282,141284,141286,141288,141290],{"class":35,"line":43},[33,141283,72112],{"class":39},[33,141285,53082],{"class":59},[33,141287,2010],{"class":39},[33,141289,53201],{"class":39},[33,141291,2976],{"class":59},[33,141293,141294],{"class":35,"line":130},[33,141295,3247],{"class":59},[19,141297,140063],{},[23,141299,141300],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,141301,141302,141308,141320],{"__ignoreMap":28},[33,141303,141304,141306],{"class":35,"line":36},[33,141305,53256],{"class":52945},[33,141307,17228],{"class":59},[33,141309,141310,141312,141314,141316,141318],{"class":35,"line":43},[33,141311,72112],{"class":39},[33,141313,53082],{"class":59},[33,141315,2010],{"class":39},[33,141317,53201],{"class":39},[33,141319,2976],{"class":59},[33,141321,141322],{"class":35,"line":130},[33,141323,3247],{"class":59},[19,141325,141326],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1729,141328,141329],{},"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":43,"depth":43,"links":141331},[141332,141333,141334,141341],{"id":139612,"depth":43,"text":139613},{"id":139631,"depth":43,"text":139632},{"id":139658,"depth":43,"text":139659,"children":141335},[141336,141337,141338,141339,141340],{"id":139662,"depth":130,"text":139663},{"id":139675,"depth":130,"text":139676},{"id":139699,"depth":130,"text":139700},{"id":139721,"depth":130,"text":139722},{"id":139793,"depth":130,"text":139794},{"id":139919,"depth":43,"text":139920,"children":141342},[141343,141344,141345,141346,141348],{"id":139923,"depth":130,"text":139924},{"id":139930,"depth":130,"text":139931},{"id":140102,"depth":130,"text":140103},{"id":140643,"depth":130,"text":141347},"15.4.4 nav导航模块制作",{"id":140941,"depth":130,"text":140942},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139604,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141355,"title":141356,"body":141357,"description":1751,"extension":1752,"meta":143759,"navigation":126,"path":143760,"seo":143761,"stem":143762,"__hash__":143763},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141358,"toc":143736},[141359,141362,141366,141370,141382,141385,141388,141391,141402,141404,141428,141430,141454,141459,141462,141464,141500,141502,141538,141541,141546,141549,141552,141555,141585,141592,141595,141605,141607,141641,141644,141678,141684,141701,141703,141739,141741,141777,141782,141807,141809,141835,141837,141861,141868,141871,141935,141937,141979,141981,142021,142028,142033,142035,142065,142067,142097,142101,142104,142111,142123,142125,142151,142153,142177,142180,142182,142206,142212,142222,142224,142254,142256,142286,142293,142334,142336,142372,142374,142410,142414,142417,142420,142423,142429,142434,142437,142460,142463,142487,142490,142514,142519,142522,142525,142528,142531,142534,142608,142610,142640,142642,142672,142675,142678,142710,142714,142718,142732,142741,142744,142749,142751,142845,142847,142941,142964,142966,142990,142992,143016,143023,143026,143036,143038,143062,143067,143075,143077,143107,143112,143152,143154,143180,143182,143208,143212,143215,143220,143223,143227,143235,143242,143250,143252,143282,143284,143314,143322,143325,143328,143330,143360,143362,143392,143395,143400,143402,143426,143428,143452,143455,143540,143542,143566,143568,143592,143596,143598,143622,143624,143658,143662,143676,143679,143684,143687,143692,143695,143725,143733],[10,141360,141356],{"id":141361},"_16-品优购项目下篇-主体与页面开发",[14,141363,141365],{"id":141364},"_161-项目主体模块制作","16.1 项目主体模块制作",[633,141367,141369],{"id":141368},"_1611-首页制作","16.1.1 首页制作",[19,141371,141372,141374,141375,141377,141378,141381],{},[1968,141373,103696],{}," 主体模块是 ",[1968,141376,75699],{}," 里面专有的，注意需要新的样式文件 ",[1968,141379,141380],{},"index.css，"," 就不要写在common.css中了",[3145,141383],{"style":128040,"src":141384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3145,141386],{"style":128040,"src":141387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141389,141390],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2822,141392,141393,141396,141399],{},[165,141394,141395],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[165,141397,141398],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[165,141400,141401],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141403,140023],{},[23,141405,141406],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,141407,141408,141414,141424],{"__ignoreMap":28},[33,141409,141410,141412],{"class":35,"line":36},[33,141411,132032],{"class":3632},[33,141413,17228],{"class":59},[33,141415,141416,141418,141420,141422],{"class":35,"line":43},[33,141417,132664],{"class":39},[33,141419,53082],{"class":59},[33,141421,25391],{"class":39},[33,141423,2976],{"class":59},[33,141425,141426],{"class":35,"line":130},[33,141427,3247],{"class":59},[19,141429,140063],{},[23,141431,141432],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,141433,141434,141440,141450],{"__ignoreMap":28},[33,141435,141436,141438],{"class":35,"line":36},[33,141437,132032],{"class":3632},[33,141439,17228],{"class":59},[33,141441,141442,141444,141446,141448],{"class":35,"line":43},[33,141443,132664],{"class":39},[33,141445,53082],{"class":59},[33,141447,25391],{"class":39},[33,141449,2976],{"class":59},[33,141451,141452],{"class":35,"line":130},[33,141453,3247],{"class":59},[162,141455,141456],{},[165,141457,141458],{},"左侧focus模块制作",[3145,141460],{"style":128040,"src":141461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141463,140023],{},[23,141465,141466],{"className":128184,"code":129507,"language":128186,"meta":28,"style":28},[30,141467,141468,141476,141486,141496],{"__ignoreMap":28},[33,141469,141470,141472,141474],{"class":35,"line":36},[33,141471,112],{"class":52945},[33,141473,63542],{"class":3632},[33,141475,17228],{"class":59},[33,141477,141478,141480,141482,141484],{"class":35,"line":43},[33,141479,129522],{"class":39},[33,141481,53082],{"class":59},[33,141483,56533],{"class":39},[33,141485,2976],{"class":59},[33,141487,141488,141490,141492,141494],{"class":35,"line":130},[33,141489,72440],{"class":39},[33,141491,53082],{"class":59},[33,141493,56381],{"class":39},[33,141495,2976],{"class":59},[33,141497,141498],{"class":35,"line":146},[33,141499,3247],{"class":59},[19,141501,140063],{},[23,141503,141504],{"className":128184,"code":129507,"language":128186,"meta":28,"style":28},[30,141505,141506,141514,141524,141534],{"__ignoreMap":28},[33,141507,141508,141510,141512],{"class":35,"line":36},[33,141509,112],{"class":52945},[33,141511,63542],{"class":3632},[33,141513,17228],{"class":59},[33,141515,141516,141518,141520,141522],{"class":35,"line":43},[33,141517,129522],{"class":39},[33,141519,53082],{"class":59},[33,141521,56533],{"class":39},[33,141523,2976],{"class":59},[33,141525,141526,141528,141530,141532],{"class":35,"line":130},[33,141527,72440],{"class":39},[33,141529,53082],{"class":59},[33,141531,56381],{"class":39},[33,141533,2976],{"class":59},[33,141535,141536],{"class":35,"line":146},[33,141537,3247],{"class":59},[19,141539,141540],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[162,141542,141543],{"start":43},[165,141544,141545],{},"右侧newsflash模块制作",[3145,141547],{"style":128040,"src":141548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141550,141551],{},"右侧的模块 分为上中下三个盒子",[19,141553,141554],{},"结构代码：",[23,141556,141557],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,141558,141559],{"__ignoreMap":28},[33,141560,141561,141563,141565,141567,141569,141571,141573,141575,141577,141579,141581,141583],{"class":35,"line":36},[33,141562,2726],{"class":59},[33,141564,3145],{"class":52945},[33,141566,56883],{"class":3632},[33,141568,64],{"class":59},[33,141570,135701],{"class":117},[33,141572,56891],{"class":3632},[33,141574,64],{"class":59},[33,141576,135708],{"class":117},[33,141578,135711],{"class":3632},[33,141580,64],{"class":59},[33,141582,135716],{"class":117},[33,141584,52952],{"class":59},[19,141586,141587,141588,141591],{},"1 号盒子为 ",[30,141589,141590],{},"news"," 新闻模块 高度为 165px",[3145,141593],{"style":128040,"src":141594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141596,141597,141598,141601,141602],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[30,141599,141600],{},"news-hd","，下面是 ",[30,141603,141604],{},"news-bd",[19,141606,141554],{},[23,141608,141609],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,141610,141611,141615,141629,141633],{"__ignoreMap":28},[33,141612,141613],{"class":35,"line":36},[33,141614,132295],{"class":87},[33,141616,141617,141619,141621,141623,141625,141627],{"class":35,"line":43},[33,141618,2726],{"class":59},[33,141620,53256],{"class":52945},[33,141622,55131],{"class":3632},[33,141624,64],{"class":59},[33,141626,132308],{"class":117},[33,141628,52952],{"class":59},[33,141630,141631],{"class":35,"line":130},[33,141632,132315],{"class":59},[33,141634,141635,141637,141639],{"class":35,"line":146},[33,141636,53430],{"class":59},[33,141638,53256],{"class":52945},[33,141640,52952],{"class":59},[19,141642,141643],{},"样式代码：",[23,141645,141646],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,141647,141648,141652,141666,141670],{"__ignoreMap":28},[33,141649,141650],{"class":35,"line":36},[33,141651,132295],{"class":87},[33,141653,141654,141656,141658,141660,141662,141664],{"class":35,"line":43},[33,141655,2726],{"class":59},[33,141657,53256],{"class":52945},[33,141659,55131],{"class":3632},[33,141661,64],{"class":59},[33,141663,132308],{"class":117},[33,141665,52952],{"class":59},[33,141667,141668],{"class":35,"line":130},[33,141669,132315],{"class":59},[33,141671,141672,141674,141676],{"class":35,"line":146},[33,141673,53430],{"class":59},[33,141675,53256],{"class":52945},[33,141677,52952],{"class":59},[19,141679,141680,141681,141683],{},"上面是",[30,141682,141600],{},"，设置高度是 33px，设置下边框",[2822,141685,141686,141692],{},[165,141687,141688,141689,141691],{},"里面放一个",[30,141690,24565],{}," 标题",[165,141693,141694,141695,141697,141698,141700],{},"放一个a",[30,141696,104331],{},"，内容是 更多，然后让 ",[30,141699,2057],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141702,141554],{},[23,141704,141705],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},[30,141706,141707,141715,141725,141735],{"__ignoreMap":28},[33,141708,141709,141711,141713],{"class":35,"line":36},[33,141710,53256],{"class":52945},[33,141712,139185],{"class":3632},[33,141714,17228],{"class":59},[33,141716,141717,141719,141721,141723],{"class":35,"line":43},[33,141718,139192],{"class":39},[33,141720,53082],{"class":59},[33,141722,9312],{"class":117},[33,141724,2976],{"class":59},[33,141726,141727,141729,141731,141733],{"class":35,"line":130},[33,141728,129800],{"class":39},[33,141730,53082],{"class":59},[33,141732,62511],{"class":39},[33,141734,2976],{"class":59},[33,141736,141737],{"class":35,"line":146},[33,141738,3247],{"class":59},[19,141740,141643],{},[23,141742,141743],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},[30,141744,141745,141753,141763,141773],{"__ignoreMap":28},[33,141746,141747,141749,141751],{"class":35,"line":36},[33,141748,53256],{"class":52945},[33,141750,139185],{"class":3632},[33,141752,17228],{"class":59},[33,141754,141755,141757,141759,141761],{"class":35,"line":43},[33,141756,139192],{"class":39},[33,141758,53082],{"class":59},[33,141760,9312],{"class":117},[33,141762,2976],{"class":59},[33,141764,141765,141767,141769,141771],{"class":35,"line":130},[33,141766,129800],{"class":39},[33,141768,53082],{"class":59},[33,141770,62511],{"class":39},[33,141772,2976],{"class":59},[33,141774,141775],{"class":35,"line":146},[33,141776,3247],{"class":59},[19,141778,141779,141780],{},"下面是",[30,141781,141604],{},[2822,141783,141784,141792],{},[165,141785,141786,141787,102657,141789,141791],{},"里面包含 ",[30,141788,2822],{},[30,141790,165],{}," 还有链接",[165,141793,141264,141794,141796,141797,141799,141800,141803,141804],{},[30,141795,165],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[30,141798,132850],{}," 2.设置 ",[30,141801,141802],{},"white-space: nowrap;"," 3. 设置 ",[30,141805,141806],{},"text-overflow: ellipsis;",[19,141808,141554],{},[23,141810,141812],{"className":128184,"code":141811,"language":128186,"meta":28,"style":28},"div {\n  overflow: hidden;\n}\n",[30,141813,141814,141820,141831],{"__ignoreMap":28},[33,141815,141816,141818],{"class":35,"line":36},[33,141817,53256],{"class":52945},[33,141819,17228],{"class":59},[33,141821,141822,141825,141827,141829],{"class":35,"line":43},[33,141823,141824],{"class":39},"  overflow",[33,141826,53082],{"class":59},[33,141828,63356],{"class":39},[33,141830,2976],{"class":59},[33,141832,141833],{"class":35,"line":130},[33,141834,3247],{"class":59},[19,141836,141643],{},[23,141838,141839],{"className":128184,"code":141811,"language":128186,"meta":28,"style":28},[30,141840,141841,141847,141857],{"__ignoreMap":28},[33,141842,141843,141845],{"class":35,"line":36},[33,141844,53256],{"class":52945},[33,141846,17228],{"class":59},[33,141848,141849,141851,141853,141855],{"class":35,"line":43},[33,141850,141824],{"class":39},[33,141852,53082],{"class":59},[33,141854,63356],{"class":39},[33,141856,2976],{"class":59},[33,141858,141859],{"class":35,"line":130},[33,141860,3247],{"class":59},[19,141862,141863,141864,141867],{},"2 号盒子为 ",[30,141865,141866],{},"lifeservice"," 生活服务模块 高度为 209px",[3145,141869],{"style":128040,"src":141870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2822,141872,141873,141876,141886,141910,141921],{},[165,141874,141875],{},"设置边框（左右下边框）",[165,141877,141878,141879,141882,141883,141885],{},"里面的内容 是 ",[30,141880,141881],{},"ul > 12*li","，给",[30,141884,165],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[165,141887,141888,141889],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2822,141890,141891,141896,141905],{},[165,141892,141893,141895],{},[30,141894,141866],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[165,141897,141898,141899,141901,141902,141904],{},"可以让 ",[30,141900,141866],{}," 里面的 ",[30,141903,2822],{}," 宽度为 252，就可以装的下 4 个 小 li",[165,141906,141907,141909],{},[30,141908,141866],{}," 盒子 overflow 隐藏多余的部分就可以了",[165,141911,898,141912,141914,141915,141917,141918,141920],{},[30,141913,165],{}," 里面放一个 ",[30,141916,2259],{},"（里面放图标），下面的文本用 ",[30,141919,19],{}," 标签包裹",[165,141922,140684,141923,141925,141926,141928,141929,140718,141931,141934],{},[30,141924,2259],{}," 设置 24px宽和28px的高（注意 ",[30,141927,2259],{}," 是行内元素， 转成行内块），给 ",[30,141930,165],{},[30,141932,141933],{},"text-align:center"," 让里面内容居中显示",[19,141936,141554],{},[23,141938,141940],{"className":128184,"code":141939,"language":128186,"meta":28,"style":28},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[30,141941,141942,141960,141965,141975],{"__ignoreMap":28},[33,141943,141944,141946,141948,141950,141952,141954,141956,141958],{"class":35,"line":36},[33,141945,33],{"class":52945},[33,141947,14093],{"class":59},[33,141949,2057],{"class":52945},[33,141951,14093],{"class":59},[33,141953,25208],{"class":52945},[33,141955,14093],{"class":59},[33,141957,1968],{"class":52945},[33,141959,17228],{"class":59},[33,141961,141962],{"class":35,"line":43},[33,141963,141964],{"class":87},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[33,141966,141967,141969,141971,141973],{"class":35,"line":130},[33,141968,129800],{"class":39},[33,141970,53082],{"class":59},[33,141972,129862],{"class":39},[33,141974,2976],{"class":59},[33,141976,141977],{"class":35,"line":146},[33,141978,3247],{"class":59},[19,141980,141643],{},[23,141982,141983],{"className":128184,"code":141939,"language":128186,"meta":28,"style":28},[30,141984,141985,142003,142007,142017],{"__ignoreMap":28},[33,141986,141987,141989,141991,141993,141995,141997,141999,142001],{"class":35,"line":36},[33,141988,33],{"class":52945},[33,141990,14093],{"class":59},[33,141992,2057],{"class":52945},[33,141994,14093],{"class":59},[33,141996,25208],{"class":52945},[33,141998,14093],{"class":59},[33,142000,1968],{"class":52945},[33,142002,17228],{"class":59},[33,142004,142005],{"class":35,"line":43},[33,142006,141964],{"class":87},[33,142008,142009,142011,142013,142015],{"class":35,"line":130},[33,142010,129800],{"class":39},[33,142012,53082],{"class":59},[33,142014,129862],{"class":39},[33,142016,2976],{"class":59},[33,142018,142019],{"class":35,"line":146},[33,142020,3247],{"class":59},[19,142022,142023,142024,142027],{},"3 号盒子为 ",[30,142025,142026],{},"bargain"," 特价商品",[2822,142029,142030],{},[165,142031,142032],{},"这个比较简单，直接插入一张图片即可",[19,142034,141554],{},[23,142036,142037],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,142038,142039],{"__ignoreMap":28},[33,142040,142041,142043,142045,142047,142049,142051,142053,142055,142057,142059,142061,142063],{"class":35,"line":36},[33,142042,2726],{"class":59},[33,142044,3145],{"class":52945},[33,142046,56883],{"class":3632},[33,142048,64],{"class":59},[33,142050,135701],{"class":117},[33,142052,56891],{"class":3632},[33,142054,64],{"class":59},[33,142056,135708],{"class":117},[33,142058,135711],{"class":3632},[33,142060,64],{"class":59},[33,142062,135716],{"class":117},[33,142064,52952],{"class":59},[19,142066,141643],{},[23,142068,142069],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,142070,142071],{"__ignoreMap":28},[33,142072,142073,142075,142077,142079,142081,142083,142085,142087,142089,142091,142093,142095],{"class":35,"line":36},[33,142074,2726],{"class":59},[33,142076,3145],{"class":52945},[33,142078,56883],{"class":3632},[33,142080,64],{"class":59},[33,142082,135701],{"class":117},[33,142084,56891],{"class":3632},[33,142086,64],{"class":59},[33,142088,135708],{"class":117},[33,142090,135711],{"class":3632},[33,142092,64],{"class":59},[33,142094,135716],{"class":117},[33,142096,52952],{"class":59},[633,142098,142100],{"id":142099},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3145,142102],{"style":128040,"src":142103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142105,142106,142107,142110],{},"大盒子 ",[30,142108,142109],{},"recom"," 推荐模块 recommend",[2822,142112,142113],{},[165,142114,142115,142116,142118,142119,142122],{},"给这个 ",[30,142117,142109],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[30,142120,142121],{},"#ebebeb","），设置距离上边 12px",[19,142124,141554],{},[23,142126,142128],{"className":128184,"code":142127,"language":128186,"meta":28,"style":28},"div {\n  background-color: #f0f0f0;\n}\n",[30,142129,142130,142136,142147],{"__ignoreMap":28},[33,142131,142132,142134],{"class":35,"line":36},[33,142133,53256],{"class":52945},[33,142135,17228],{"class":59},[33,142137,142138,142140,142142,142145],{"class":35,"line":43},[33,142139,72520],{"class":39},[33,142141,53082],{"class":59},[33,142143,142144],{"class":39},"#f0f0f0",[33,142146,2976],{"class":59},[33,142148,142149],{"class":35,"line":130},[33,142150,3247],{"class":59},[19,142152,141643],{},[23,142154,142155],{"className":128184,"code":142127,"language":128186,"meta":28,"style":28},[30,142156,142157,142163,142173],{"__ignoreMap":28},[33,142158,142159,142161],{"class":35,"line":36},[33,142160,53256],{"class":52945},[33,142162,17228],{"class":59},[33,142164,142165,142167,142169,142171],{"class":35,"line":43},[33,142166,72520],{"class":39},[33,142168,53082],{"class":59},[33,142170,142144],{"class":39},[33,142172,2976],{"class":59},[33,142174,142175],{"class":35,"line":130},[33,142176,3247],{"class":59},[19,142178,142179],{},"里面包含 2 个盒子， 浮动即可",[19,142181,141554],{},[23,142183,142184],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,142185,142186,142192,142202],{"__ignoreMap":28},[33,142187,142188,142190],{"class":35,"line":36},[33,142189,132032],{"class":3632},[33,142191,17228],{"class":59},[33,142193,142194,142196,142198,142200],{"class":35,"line":43},[33,142195,132664],{"class":39},[33,142197,53082],{"class":59},[33,142199,25391],{"class":39},[33,142201,2976],{"class":59},[33,142203,142204],{"class":35,"line":130},[33,142205,3247],{"class":59},[19,142207,142208,142209],{},"1 号盒子 ",[30,142210,142211],{},"recom_hd",[2822,142213,142214,142217],{},[165,142215,142216],{},"设置宽度205px，高度163px",[165,142218,141688,142219,142221],{},[30,142220,3145],{},"标签，插入图片即可",[19,142223,141554],{},[23,142225,142226],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,142227,142228],{"__ignoreMap":28},[33,142229,142230,142232,142234,142236,142238,142240,142242,142244,142246,142248,142250,142252],{"class":35,"line":36},[33,142231,2726],{"class":59},[33,142233,3145],{"class":52945},[33,142235,56883],{"class":3632},[33,142237,64],{"class":59},[33,142239,135701],{"class":117},[33,142241,56891],{"class":3632},[33,142243,64],{"class":59},[33,142245,135708],{"class":117},[33,142247,135711],{"class":3632},[33,142249,64],{"class":59},[33,142251,135716],{"class":117},[33,142253,52952],{"class":59},[19,142255,141643],{},[23,142257,142258],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,142259,142260],{"__ignoreMap":28},[33,142261,142262,142264,142266,142268,142270,142272,142274,142276,142278,142280,142282,142284],{"class":35,"line":36},[33,142263,2726],{"class":59},[33,142265,3145],{"class":52945},[33,142267,56883],{"class":3632},[33,142269,64],{"class":59},[33,142271,135701],{"class":117},[33,142273,56891],{"class":3632},[33,142275,64],{"class":59},[33,142277,135708],{"class":117},[33,142279,135711],{"class":3632},[33,142281,64],{"class":59},[33,142283,135716],{"class":117},[33,142285,52952],{"class":59},[19,142287,142288,142289,142292],{},"2 号盒子 ",[30,142290,142291],{},"recom_bd"," ，注意里面的小竖线",[2822,142294,142295,142306,142309,142314,142319],{},[165,142296,142297,142298,142300,142301,142303,142304],{},"右侧结构里面放 ",[30,142299,2822],{}," 包含 4个 ",[30,142302,165],{},"，每个li里面包含一个",[30,142305,3145],{},[165,142307,142308],{},"直接利用切片工具把里面的内容当成一张图片",[165,142310,140684,142311,142313],{},[30,142312,165],{}," 设置浮动",[165,142315,140684,142316,142318],{},[30,142317,3145],{}," 设置宽高，宽度 248px，高度 163px",[165,142320,142321,142322,141882,142325,142327,142328,142330,142331],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[30,142323,142324],{},"top 10px",[30,142326,165],{},"设置相对定位（注意，最后一个",[30,142329,165],{},"不用设置伪元素），可以利用 ",[30,142332,142333],{},"nth-child(-n+3){...}",[19,142335,141554],{},[23,142337,142338],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},[30,142339,142340,142348,142358,142368],{"__ignoreMap":28},[33,142341,142342,142344,142346],{"class":35,"line":36},[33,142343,53256],{"class":52945},[33,142345,139185],{"class":3632},[33,142347,17228],{"class":59},[33,142349,142350,142352,142354,142356],{"class":35,"line":43},[33,142351,139192],{"class":39},[33,142353,53082],{"class":59},[33,142355,9312],{"class":117},[33,142357,2976],{"class":59},[33,142359,142360,142362,142364,142366],{"class":35,"line":130},[33,142361,129800],{"class":39},[33,142363,53082],{"class":59},[33,142365,62511],{"class":39},[33,142367,2976],{"class":59},[33,142369,142370],{"class":35,"line":146},[33,142371,3247],{"class":59},[19,142373,141643],{},[23,142375,142376],{"className":128184,"code":140026,"language":128186,"meta":28,"style":28},[30,142377,142378,142386,142396,142406],{"__ignoreMap":28},[33,142379,142380,142382,142384],{"class":35,"line":36},[33,142381,53256],{"class":52945},[33,142383,139185],{"class":3632},[33,142385,17228],{"class":59},[33,142387,142388,142390,142392,142394],{"class":35,"line":43},[33,142389,139192],{"class":39},[33,142391,53082],{"class":59},[33,142393,9312],{"class":117},[33,142395,2976],{"class":59},[33,142397,142398,142400,142402,142404],{"class":35,"line":130},[33,142399,129800],{"class":39},[33,142401,53082],{"class":59},[33,142403,62511],{"class":39},[33,142405,2976],{"class":59},[33,142407,142408],{"class":35,"line":146},[33,142409,3247],{"class":59},[633,142411,142413],{"id":142412},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3145,142415],{"style":128040,"src":142416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142418,142419],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142421,142422],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142424,142425,142428],{},[30,142426,142427],{},"box_hd"," 制作",[19,142430,142208,142431,142433],{},[30,142432,142427],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3145,142435],{"style":128040,"src":142436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2822,142438,142439,142444,142449,142452],{},[165,142440,142441,142443],{},[30,142442,142427],{}," 给 30px 的高度，2个像素的下边框",[165,142445,142446,142447],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[30,142448,140695],{},[165,142450,142451],{},"左侧盒左浮动，右侧盒子右浮动",[165,142453,142454,142456,142457,142459],{},[30,142455,2057],{},"标签之间的距离用左右的",[30,142458,32534],{},"撑开即可",[19,142461,142462],{},"结构代码",[23,142464,142465],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,142466,142467,142473,142483],{"__ignoreMap":28},[33,142468,142469,142471],{"class":35,"line":36},[33,142470,132032],{"class":3632},[33,142472,17228],{"class":59},[33,142474,142475,142477,142479,142481],{"class":35,"line":43},[33,142476,132664],{"class":39},[33,142478,53082],{"class":59},[33,142480,25391],{"class":39},[33,142482,2976],{"class":59},[33,142484,142485],{"class":35,"line":130},[33,142486,3247],{"class":59},[19,142488,142489],{},"样式代码",[23,142491,142492],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,142493,142494,142500,142510],{"__ignoreMap":28},[33,142495,142496,142498],{"class":35,"line":36},[33,142497,132032],{"class":3632},[33,142499,17228],{"class":59},[33,142501,142502,142504,142506,142508],{"class":35,"line":43},[33,142503,132664],{"class":39},[33,142505,53082],{"class":59},[33,142507,25391],{"class":39},[33,142509,2976],{"class":59},[33,142511,142512],{"class":35,"line":130},[33,142513,3247],{"class":59},[19,142515,142516,142428],{},[30,142517,142518],{},"box_bd",[19,142520,142521],{},"2 号盒子 box_bd，不要给高度",[3145,142523],{"style":128040,"src":142524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142526,142527],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142529,142530],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142532,142533],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2822,142535,142536,142548,142564],{},[165,142537,142538,142540,142541,142544,142545,142547],{},[30,142539,142518],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[30,142542,142543],{},"tab_content","，在",[30,142546,142543],{}," 里面包裹tab选项卡对应的内容",[165,142549,142550,142551,142554,142555,142557,142558,142560,142561,142563],{},"内容被一个大盒子包裹（",[30,142552,142553],{},"tab_list_item","），里面是 ",[30,142556,2822],{}," 包裹 5个 ",[30,142559,165],{},"，每个",[30,142562,165],{},"设置对应的宽度，然后设置浮动",[165,142565,142566,142567,142569,142570,142572,142573],{},"而这5个",[30,142568,165],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[30,142571,165],{},"设置",[2822,142574,142575,142593,142596],{},[165,142576,142577,142578,142580,142581,142583,142584,142586,142587,142589,142590,142592],{},"第一个小 ",[30,142579,165],{}," 分为上下结构，上面是 ",[30,142582,2822],{}," 包裹 ",[30,142585,165],{}," ，",[30,142588,165],{},"里面包裹 ",[30,142591,2057],{},"，下面插入一张图片",[165,142594,142595],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[165,142597,142598,142599,142601,142602,142604,142605,142607],{},"后面的小 ",[30,142600,165],{}," 里面先放一个",[30,142603,2057],{},"标签，然后在",[30,142606,2057],{},"标签里面插入图片即可",[19,142609,142462],{},[23,142611,142612],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,142613,142614],{"__ignoreMap":28},[33,142615,142616,142618,142620,142622,142624,142626,142628,142630,142632,142634,142636,142638],{"class":35,"line":36},[33,142617,2726],{"class":59},[33,142619,3145],{"class":52945},[33,142621,56883],{"class":3632},[33,142623,64],{"class":59},[33,142625,135701],{"class":117},[33,142627,56891],{"class":3632},[33,142629,64],{"class":59},[33,142631,135708],{"class":117},[33,142633,135711],{"class":3632},[33,142635,64],{"class":59},[33,142637,135716],{"class":117},[33,142639,52952],{"class":59},[19,142641,142489],{},[23,142643,142644],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,142645,142646],{"__ignoreMap":28},[33,142647,142648,142650,142652,142654,142656,142658,142660,142662,142664,142666,142668,142670],{"class":35,"line":36},[33,142649,2726],{"class":59},[33,142651,3145],{"class":52945},[33,142653,56883],{"class":3632},[33,142655,64],{"class":59},[33,142657,135701],{"class":117},[33,142659,56891],{"class":3632},[33,142661,64],{"class":59},[33,142663,135708],{"class":117},[33,142665,135711],{"class":3632},[33,142667,64],{"class":59},[33,142669,135716],{"class":117},[33,142671,52952],{"class":59},[19,142673,142674],{},"tab栏切换需求！！！！！！介绍：",[3145,142676],{"style":128040,"src":142677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2822,142679,142680,142688,142694,142697],{},[165,142681,142682,142685,142686],{},[30,142683,142684],{},"tab","栏的布局是 ",[30,142687,140695],{},[165,142689,142690,142691,142693],{},"有多少个",[30,142692,142684],{},"选项卡，那么对应就有多少个内容",[165,142695,142696],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[165,142698,142699,142700,142703,142704,142706,142707,142709],{},"等后面我们学习了",[30,142701,142702],{},"js","之后，我们就会配合",[30,142705,142702],{},"来实现，",[30,142708,142684],{},"栏的切换",[14,142711,142713],{"id":142712},"_162-列表制作","16.2 列表制作",[633,142715,142717],{"id":142716},"_1621-准备工作","16.2.1 准备工作",[2822,142719,142720,142723,142726,142729],{},[165,142721,142722],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[165,142724,142725],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[165,142727,142728],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[165,142730,142731],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[633,142733,142735,142736,102657,142738,142740],{"id":142734},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[30,142737,133189],{},[30,142739,55358],{}," 修改",[3145,142742],{"style":128040,"src":142743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2822,142745,142746],{},[165,142747,142748],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142750,141554],{},[23,142752,142753],{"className":128184,"code":133616,"language":128186,"meta":28,"style":28},[30,142754,142755,142759,142773,142777,142791,142795,142809,142813,142827,142831],{"__ignoreMap":28},[33,142756,142757],{"class":35,"line":36},[33,142758,133623],{"class":87},[33,142760,142761,142763,142765,142767,142769,142771],{"class":35,"line":43},[33,142762,133628],{"class":3632},[33,142764,81448],{"class":59},[33,142766,130544],{"class":39},[33,142768,53082],{"class":59},[33,142770,133637],{"class":39},[33,142772,131114],{"class":59},[33,142774,142775],{"class":35,"line":130},[33,142776,133644],{"class":87},[33,142778,142779,142781,142783,142785,142787,142789],{"class":35,"line":146},[33,142780,133649],{"class":3632},[33,142782,81448],{"class":59},[33,142784,130544],{"class":39},[33,142786,53082],{"class":59},[33,142788,56408],{"class":39},[33,142790,131114],{"class":59},[33,142792,142793],{"class":35,"line":267},[33,142794,133664],{"class":87},[33,142796,142797,142799,142801,142803,142805,142807],{"class":35,"line":275},[33,142798,133669],{"class":3632},[33,142800,81448],{"class":59},[33,142802,130544],{"class":39},[33,142804,53082],{"class":59},[33,142806,56475],{"class":39},[33,142808,131114],{"class":59},[33,142810,142811],{"class":35,"line":392},[33,142812,133684],{"class":87},[33,142814,142815,142817,142819,142821,142823,142825],{"class":35,"line":406},[33,142816,133689],{"class":3632},[33,142818,81448],{"class":59},[33,142820,130544],{"class":39},[33,142822,53082],{"class":59},[33,142824,87873],{"class":39},[33,142826,131114],{"class":59},[33,142828,142829],{"class":35,"line":418},[33,142830,133704],{"class":87},[33,142832,142833,142835,142837,142839,142841,142843],{"class":35,"line":425},[33,142834,133709],{"class":3632},[33,142836,81448],{"class":59},[33,142838,130544],{"class":39},[33,142840,53082],{"class":59},[33,142842,133718],{"class":39},[33,142844,131114],{"class":59},[19,142846,141643],{},[23,142848,142849],{"className":128184,"code":133616,"language":128186,"meta":28,"style":28},[30,142850,142851,142855,142869,142873,142887,142891,142905,142909,142923,142927],{"__ignoreMap":28},[33,142852,142853],{"class":35,"line":36},[33,142854,133623],{"class":87},[33,142856,142857,142859,142861,142863,142865,142867],{"class":35,"line":43},[33,142858,133628],{"class":3632},[33,142860,81448],{"class":59},[33,142862,130544],{"class":39},[33,142864,53082],{"class":59},[33,142866,133637],{"class":39},[33,142868,131114],{"class":59},[33,142870,142871],{"class":35,"line":130},[33,142872,133644],{"class":87},[33,142874,142875,142877,142879,142881,142883,142885],{"class":35,"line":146},[33,142876,133649],{"class":3632},[33,142878,81448],{"class":59},[33,142880,130544],{"class":39},[33,142882,53082],{"class":59},[33,142884,56408],{"class":39},[33,142886,131114],{"class":59},[33,142888,142889],{"class":35,"line":267},[33,142890,133664],{"class":87},[33,142892,142893,142895,142897,142899,142901,142903],{"class":35,"line":275},[33,142894,133669],{"class":3632},[33,142896,81448],{"class":59},[33,142898,130544],{"class":39},[33,142900,53082],{"class":59},[33,142902,56475],{"class":39},[33,142904,131114],{"class":59},[33,142906,142907],{"class":35,"line":392},[33,142908,133684],{"class":87},[33,142910,142911,142913,142915,142917,142919,142921],{"class":35,"line":406},[33,142912,133689],{"class":3632},[33,142914,81448],{"class":59},[33,142916,130544],{"class":39},[33,142918,53082],{"class":59},[33,142920,87873],{"class":39},[33,142922,131114],{"class":59},[33,142924,142925],{"class":35,"line":418},[33,142926,133704],{"class":87},[33,142928,142929,142931,142933,142935,142937,142939],{"class":35,"line":425},[33,142930,133709],{"class":3632},[33,142932,81448],{"class":59},[33,142934,130544],{"class":39},[33,142936,53082],{"class":59},[33,142938,133718],{"class":39},[33,142940,131114],{"class":59},[2822,142942,142943,142954],{},[165,142944,142945,142946,142949,142950,102657,142952],{},"1 号盒子左侧浮动 ",[30,142947,142948],{},"sk_list"," 里面包含 ",[30,142951,2822],{},[30,142953,165],{},[165,142955,142956,142957,142949,142960,102657,142962],{},"2 号盒子左侧浮动 ",[30,142958,142959],{},"sk_con",[30,142961,2822],{},[30,142963,165],{},[19,142965,141554],{},[23,142967,142968],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,142969,142970,142976,142986],{"__ignoreMap":28},[33,142971,142972,142974],{"class":35,"line":36},[33,142973,132032],{"class":3632},[33,142975,17228],{"class":59},[33,142977,142978,142980,142982,142984],{"class":35,"line":43},[33,142979,132664],{"class":39},[33,142981,53082],{"class":59},[33,142983,25391],{"class":39},[33,142985,2976],{"class":59},[33,142987,142988],{"class":35,"line":130},[33,142989,3247],{"class":59},[19,142991,141643],{},[23,142993,142994],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,142995,142996,143002,143012],{"__ignoreMap":28},[33,142997,142998,143000],{"class":35,"line":36},[33,142999,132032],{"class":3632},[33,143001,17228],{"class":59},[33,143003,143004,143006,143008,143010],{"class":35,"line":43},[33,143005,132664],{"class":39},[33,143007,53082],{"class":59},[33,143009,25391],{"class":39},[33,143011,2976],{"class":59},[33,143013,143014],{"class":35,"line":130},[33,143015,3247],{"class":59},[633,143017,143019,143020],{"id":143018},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[30,143021,143022],{},"sk_container",[3145,143024],{"style":128040,"src":143025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2822,143027,143028,143033],{},[165,143029,142208,143030,143032],{},[30,143031,143022],{}," 给宽度 1200，不要给高度",[165,143034,143035],{},"一定不要忘记清除浮动",[19,143037,141554],{},[23,143039,143040],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,143041,143042,143048,143058],{"__ignoreMap":28},[33,143043,143044,143046],{"class":35,"line":36},[33,143045,132032],{"class":3632},[33,143047,17228],{"class":59},[33,143049,143050,143052,143054,143056],{"class":35,"line":43},[33,143051,132664],{"class":39},[33,143053,53082],{"class":59},[33,143055,25391],{"class":39},[33,143057,2976],{"class":59},[33,143059,143060],{"class":35,"line":130},[33,143061,3247],{"class":59},[162,143063,143064],{},[165,143065,143066],{},"sk_hd制作",[2822,143068,143069],{},[165,143070,142288,143071,143074],{},[30,143072,143073],{},"sk_hd"," ，插入图片即可",[19,143076,141554],{},[23,143078,143079],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,143080,143081],{"__ignoreMap":28},[33,143082,143083,143085,143087,143089,143091,143093,143095,143097,143099,143101,143103,143105],{"class":35,"line":36},[33,143084,2726],{"class":59},[33,143086,3145],{"class":52945},[33,143088,56883],{"class":3632},[33,143090,64],{"class":59},[33,143092,135701],{"class":117},[33,143094,56891],{"class":3632},[33,143096,64],{"class":59},[33,143098,135708],{"class":117},[33,143100,135711],{"class":3632},[33,143102,64],{"class":59},[33,143104,135716],{"class":117},[33,143106,52952],{"class":59},[162,143108,143109],{"start":43},[165,143110,143111],{},"sk_bd制作",[2822,143113,143114],{},[165,143115,143116,143117,143120,143121,102657,143123,143125],{},"3 号盒子 ",[30,143118,143119],{},"sk_bd"," ，里面包含很多的 ",[30,143122,2822],{},[30,143124,165],{},[2822,143126,143127,143136],{},[165,143128,143129,143130,143132,143133,143135],{},"当鼠标移入到 ",[30,143131,165],{}," 上面的时候显示红色的边框，在这里先给 ",[30,143134,165],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[165,143137,143138,143139,143141,143142,143144,143145,143148,143149,143151],{},"由于给每个 ",[30,143140,165],{}," 都设置了外边距，导致一行的最后一个 ",[30,143143,165],{}," 掉了下来，在这里我们利用 ",[30,143146,143147],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[30,143150,165],{},"，去掉外边距就好了",[19,143153,141554],{},[23,143155,143156],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,143157,143158,143164,143176],{"__ignoreMap":28},[33,143159,143160,143162],{"class":35,"line":36},[33,143161,53256],{"class":52945},[33,143163,17228],{"class":59},[33,143165,143166,143168,143170,143172,143174],{"class":35,"line":43},[33,143167,72112],{"class":39},[33,143169,53082],{"class":59},[33,143171,2010],{"class":39},[33,143173,53201],{"class":39},[33,143175,2976],{"class":59},[33,143177,143178],{"class":35,"line":130},[33,143179,3247],{"class":59},[19,143181,141643],{},[23,143183,143184],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,143185,143186,143192,143204],{"__ignoreMap":28},[33,143187,143188,143190],{"class":35,"line":36},[33,143189,53256],{"class":52945},[33,143191,17228],{"class":59},[33,143193,143194,143196,143198,143200,143202],{"class":35,"line":43},[33,143195,72112],{"class":39},[33,143197,53082],{"class":59},[33,143199,2010],{"class":39},[33,143201,53201],{"class":39},[33,143203,2976],{"class":59},[33,143205,143206],{"class":35,"line":130},[33,143207,3247],{"class":59},[14,143209,143211],{"id":143210},"_163-注册页面制作","16.3 注册页面制作",[3145,143213],{"style":128040,"src":143214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143216,143217,143219],{},[1968,143218,160],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3145,143221],{"style":128040,"src":143222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[633,143224,143226],{"id":143225},"_1631-准备工作","16.3.1 准备工作",[2822,143228,143229,143232],{},[165,143230,143231],{},"创建register.html，引入 base.css，引入favicon图标",[165,143233,143234],{},"创建register.css ，在html页面进行引入",[633,143236,143238,143239,143241],{"id":143237},"_1632-header-头部实现","16.3.2 ",[30,143240,133189],{}," 头部实现",[2822,143243,143244,143247],{},[165,143245,143246],{},"整个内容用 版心 进行包裹",[165,143248,143249],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143251,141554],{},[23,143253,143254],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,143255,143256],{"__ignoreMap":28},[33,143257,143258,143260,143262,143264,143266,143268,143270,143272,143274,143276,143278,143280],{"class":35,"line":36},[33,143259,2726],{"class":59},[33,143261,3145],{"class":52945},[33,143263,56883],{"class":3632},[33,143265,64],{"class":59},[33,143267,135701],{"class":117},[33,143269,56891],{"class":3632},[33,143271,64],{"class":59},[33,143273,135708],{"class":117},[33,143275,135711],{"class":3632},[33,143277,64],{"class":59},[33,143279,135716],{"class":117},[33,143281,52952],{"class":59},[19,143283,141643],{},[23,143285,143286],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,143287,143288],{"__ignoreMap":28},[33,143289,143290,143292,143294,143296,143298,143300,143302,143304,143306,143308,143310,143312],{"class":35,"line":36},[33,143291,2726],{"class":59},[33,143293,3145],{"class":52945},[33,143295,56883],{"class":3632},[33,143297,64],{"class":59},[33,143299,135701],{"class":117},[33,143301,56891],{"class":3632},[33,143303,64],{"class":59},[33,143305,135708],{"class":117},[33,143307,135711],{"class":3632},[33,143309,64],{"class":59},[33,143311,135716],{"class":117},[33,143313,52952],{"class":59},[633,143315,143317,143318,143321],{"id":143316},"_1633-registerarea-主体模块实现","16.3.3 ",[30,143319,143320],{},"registerarea"," 主体模块实现",[3145,143323],{"style":128040,"src":143324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143326,143327],{},"整个大盒子 高度为 522px，设置4个边框",[19,143329,141554],{},[23,143331,143332],{"className":128184,"code":132341,"language":128186,"meta":28,"style":28},[30,143333,143334,143340,143356],{"__ignoreMap":28},[33,143335,143336,143338],{"class":35,"line":36},[33,143337,53256],{"class":52945},[33,143339,17228],{"class":59},[33,143341,143342,143344,143346,143348,143350,143352,143354],{"class":35,"line":43},[33,143343,72538],{"class":39},[33,143345,53082],{"class":59},[33,143347,2036],{"class":39},[33,143349,53137],{"class":63},[33,143351,53166],{"class":39},[33,143353,131576],{"class":39},[33,143355,2976],{"class":59},[33,143357,143358],{"class":35,"line":130},[33,143359,3247],{"class":59},[19,143361,141643],{},[23,143363,143364],{"className":128184,"code":132341,"language":128186,"meta":28,"style":28},[30,143365,143366,143372,143388],{"__ignoreMap":28},[33,143367,143368,143370],{"class":35,"line":36},[33,143369,53256],{"class":52945},[33,143371,17228],{"class":59},[33,143373,143374,143376,143378,143380,143382,143384,143386],{"class":35,"line":43},[33,143375,72538],{"class":39},[33,143377,53082],{"class":59},[33,143379,2036],{"class":39},[33,143381,53137],{"class":63},[33,143383,53166],{"class":39},[33,143385,131576],{"class":39},[33,143387,2976],{"class":59},[33,143389,143390],{"class":35,"line":130},[33,143391,3247],{"class":59},[19,143393,143394],{},"1号盒子 是一个 h3 标签，放标题",[2822,143396,143397],{},[165,143398,143399],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143401,141554],{},[23,143403,143404],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,143405,143406,143412,143422],{"__ignoreMap":28},[33,143407,143408,143410],{"class":35,"line":36},[33,143409,132032],{"class":3632},[33,143411,17228],{"class":59},[33,143413,143414,143416,143418,143420],{"class":35,"line":43},[33,143415,132664],{"class":39},[33,143417,53082],{"class":59},[33,143419,25391],{"class":39},[33,143421,2976],{"class":59},[33,143423,143424],{"class":35,"line":130},[33,143425,3247],{"class":59},[19,143427,141643],{},[23,143429,143430],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,143431,143432,143438,143448],{"__ignoreMap":28},[33,143433,143434,143436],{"class":35,"line":36},[33,143435,132032],{"class":3632},[33,143437,17228],{"class":59},[33,143439,143440,143442,143444,143446],{"class":35,"line":43},[33,143441,132664],{"class":39},[33,143443,53082],{"class":59},[33,143445,25391],{"class":39},[33,143447,2976],{"class":59},[33,143449,143450],{"class":35,"line":130},[33,143451,3247],{"class":59},[19,143453,143454],{},"2号盒子 里面放注册的内容",[2822,143456,143457,143460,143469,143483,143496,143499,143502,143520,143534],{},[165,143458,143459],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[165,143461,143462,143463,143465,143466,143468],{},"里面的内容利用 ",[30,143464,2822],{}," 包含 ",[30,143467,165],{}," 来实现的（不需要用表格）",[165,143470,140698,143471,143473,143474,143476,143477,143479,143480,143482],{},[30,143472,165],{}," 里面，左侧放 ",[30,143475,35255],{}," 标签， 中间放",[30,143478,112],{}," 标签， 右侧放 ",[30,143481,33],{}," 提示信息",[165,143484,143485,143486,143488,143489,143491,143492,143495],{},"左侧 ",[30,143487,35255],{},"里面的文字都是右对齐，我们可以给",[30,143490,35255],{},"设置一个宽度（88px），然后利用",[30,143493,143494],{},"text-align"," 来设置右对齐",[165,143497,143498],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[165,143500,143501],{},"右侧 span修饰一下文字颜色",[165,143503,143504,143505],{},"提示信息的样式优化",[2822,143506,143507,143510,143513],{},[165,143508,143509],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[165,143511,143512],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[165,143514,143515,143516,143519],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[30,143517,143518],{},"vertical-algin"," 来设置 图片与文字对齐方式",[165,143521,143522,143523],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2822,143524,143525,143531],{},[165,143526,143527,143528,143530],{},"设置 ",[30,143529,25208],{}," 的 左右 12px 的内边距，设置一下文字颜色",[165,143532,143533],{},"分别设置 背景颜色",[165,143535,143536,143537,143539],{},"同意协议 和 完成注册 都是用 ",[30,143538,165],{}," 进行包裹",[19,143541,141554],{},[23,143543,143544],{"className":128184,"code":142127,"language":128186,"meta":28,"style":28},[30,143545,143546,143552,143562],{"__ignoreMap":28},[33,143547,143548,143550],{"class":35,"line":36},[33,143549,53256],{"class":52945},[33,143551,17228],{"class":59},[33,143553,143554,143556,143558,143560],{"class":35,"line":43},[33,143555,72520],{"class":39},[33,143557,53082],{"class":59},[33,143559,142144],{"class":39},[33,143561,2976],{"class":59},[33,143563,143564],{"class":35,"line":130},[33,143565,3247],{"class":59},[19,143567,141643],{},[23,143569,143570],{"className":128184,"code":142127,"language":128186,"meta":28,"style":28},[30,143571,143572,143578,143588],{"__ignoreMap":28},[33,143573,143574,143576],{"class":35,"line":36},[33,143575,53256],{"class":52945},[33,143577,17228],{"class":59},[33,143579,143580,143582,143584,143586],{"class":35,"line":43},[33,143581,72520],{"class":39},[33,143583,53082],{"class":59},[33,143585,142144],{"class":39},[33,143587,2976],{"class":59},[33,143589,143590],{"class":35,"line":130},[33,143591,3247],{"class":59},[633,143593,143595],{"id":143594},"_1634-底部实现","16.3.4 底部实现",[19,143597,141554],{},[23,143599,143600],{"className":128184,"code":142127,"language":128186,"meta":28,"style":28},[30,143601,143602,143608,143618],{"__ignoreMap":28},[33,143603,143604,143606],{"class":35,"line":36},[33,143605,53256],{"class":52945},[33,143607,17228],{"class":59},[33,143609,143610,143612,143614,143616],{"class":35,"line":43},[33,143611,72520],{"class":39},[33,143613,53082],{"class":59},[33,143615,142144],{"class":39},[33,143617,2976],{"class":59},[33,143619,143620],{"class":35,"line":130},[33,143621,3247],{"class":59},[19,143623,141643],{},[23,143625,143626],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,143627,143628,143632,143646,143650],{"__ignoreMap":28},[33,143629,143630],{"class":35,"line":36},[33,143631,132295],{"class":87},[33,143633,143634,143636,143638,143640,143642,143644],{"class":35,"line":43},[33,143635,2726],{"class":59},[33,143637,53256],{"class":52945},[33,143639,55131],{"class":3632},[33,143641,64],{"class":59},[33,143643,132308],{"class":117},[33,143645,52952],{"class":59},[33,143647,143648],{"class":35,"line":130},[33,143649,132315],{"class":59},[33,143651,143652,143654,143656],{"class":35,"line":146},[33,143653,53430],{"class":59},[33,143655,53256],{"class":52945},[33,143657,52952],{"class":59},[14,143659,143661],{"id":143660},"_164-项目总结","16.4 项目总结",[162,143663,143664,143667,143670,143673],{},[165,143665,143666],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[165,143668,143669],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[165,143671,143672],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[165,143674,143675],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3145,143677],{"style":128040,"src":143678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[162,143680,143681],{"start":267},[165,143682,143683],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3145,143685],{"style":128040,"src":143686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[162,143688,143689],{"start":275},[165,143690,143691],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3145,143693],{"style":128040,"src":143694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[23,143696,143697],{"className":128931,"code":138341,"language":128933,"meta":28,"style":28},[30,143698,143699],{"__ignoreMap":28},[33,143700,143701,143703,143705,143707,143709,143711,143713,143715,143717,143719,143721,143723],{"class":35,"line":36},[33,143702,2726],{"class":59},[33,143704,112],{"class":52945},[33,143706,55468],{"class":3632},[33,143708,64],{"class":59},[33,143710,64341],{"class":117},[33,143712,16578],{"class":3632},[33,143714,64],{"class":59},[33,143716,138362],{"class":117},[33,143718,62662],{"class":3632},[33,143720,64],{"class":59},[33,143722,138369],{"class":117},[33,143724,52952],{"class":59},[162,143726,143727,143730],{"start":392},[165,143728,143729],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[165,143731,143732],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1729,143734,143735],{},"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":43,"depth":43,"links":143737},[143738,143743,143750,143758],{"id":141364,"depth":43,"text":141365,"children":143739},[143740,143741,143742],{"id":141368,"depth":130,"text":141369},{"id":142099,"depth":130,"text":142100},{"id":142412,"depth":130,"text":142413},{"id":142712,"depth":43,"text":142713,"children":143744},[143745,143746,143748],{"id":142716,"depth":130,"text":142717},{"id":142734,"depth":130,"text":143747},"16.2.2 列表页 header 和 nav 修改",{"id":143018,"depth":130,"text":143749},"16.2.3 列表页主体 sk_container",{"id":143210,"depth":43,"text":143211,"children":143751},[143752,143753,143755,143757],{"id":143225,"depth":130,"text":143226},{"id":143237,"depth":130,"text":143754},"16.3.2 header 头部实现",{"id":143316,"depth":130,"text":143756},"16.3.3 registerarea 主体模块实现",{"id":143594,"depth":130,"text":143595},{"id":143660,"depth":43,"text":143661},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141356,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143765,"title":143766,"body":143767,"description":1751,"extension":1752,"meta":143875,"navigation":126,"path":143876,"seo":143877,"stem":143878,"__hash__":143879},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143768,"toc":143870},[143769,143772,143776,143779,143782,143791,143800,143804,143809,143816,143834,143837,143840,143843,143846,143849,143852,143855,143858,143861,143864,143867],[10,143770,143766],{"id":143771},"_17-web服务器与网站发布",[14,143773,143775],{"id":143774},"_171-web服务器","17.1 Web服务器",[19,143777,143778],{},"把自己网站上传到服务器上，可以让其他人访问",[3145,143780],{"style":128040,"src":143781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143783,143784,143787,143788],{},[1968,143785,143786],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[1968,143789,143790],{},"Web 服务器等",[19,143792,143793,143794,102657,143797,27396],{},"根据服务器在网络中所在的位置不同，又可分为 ",[1968,143795,143796],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[1968,143798,143799],{},"远程服务器",[633,143801,143803],{"id":143802},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143805,143806],{},[1968,143807,143808],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143810,143811,143812],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2057,143813,143814],{"href":143814,"rel":143815},"http:\u002F\u002Ffree.3v.do\u002F",[25520],[2822,143817,143818,143821,143824,143831],{},[165,143819,143820],{},"去免费空间网站注册账号。",[165,143822,143823],{},"记录下主机名、用户名、密码、域名。",[165,143825,143826,143827,143830],{},"利用 ",[30,143828,143829],{},"utftp"," 软件 上传网站到远程服务器",[165,143832,143833],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143835,143836],{},"使用软件上传，对上传软件文件进行解压",[3145,143838],{"style":128040,"src":143839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3145,143841],{"style":128040,"src":143842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143844,143845],{},"输入刚刚申请的服务器账号信息：",[3145,143847],{"style":128040,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3145,143850],{"style":128040,"src":143851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3145,143853],{"style":128040,"src":143854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3145,143856],{"style":128040,"src":143857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143859,143860],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3145,143862],{"style":128040,"src":143863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143865,143866],{},"浏览器输入域名即可访问",[19,143868,143869],{},"首页一定必须是index",{"title":28,"searchDepth":43,"depth":43,"links":143871},[143872],{"id":143774,"depth":43,"text":143775,"children":143873},[143874],{"id":143802,"depth":130,"text":143803},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143766,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143881,"title":143882,"body":143883,"description":1751,"extension":1752,"meta":144810,"navigation":126,"path":144811,"seo":144812,"stem":144813,"__hash__":144814},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143884,"toc":144793},[143885,143888,143892,143895,143898,143909,143912,143916,143920,143925,143928,143931,143934,143937,143941,143967,143971,143975,143978,143981,143985,144018,144022,144025,144028,144092,144096,144100,144103,144106,144109,144113,144158,144162,144165,144195,144199,144203,144206,144209,144213,144216,144285,144288,144396,144398,144404,144408,144411,144414,144510,144513,144517,144541,144545,144548,144552,144555,144559,144562,144565,144568,144571,144575,144578,144581,144585,144589,144592,144595,144598,144601,144605,144608,144612,144615,144618,144663,144667,144671,144674,144677,144680,144712,144716,144719,144753,144757,144760,144790],[10,143886,143882],{"id":143887},"_18-2d动画与3d转换",[14,143889,143891],{"id":143890},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143893,143894],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143896,143897],{},"转换（transform）你可以简单理解为变形",[2822,143899,143900,143903,143906],{},[165,143901,143902],{},"移动：translate",[165,143904,143905],{},"旋转：rotate",[165,143907,143908],{},"缩放：scale",[3145,143910],{"style":128040,"src":143911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[633,143913,143915],{"id":143914},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23653,143917,143919],{"id":143918},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143921,143922,143923],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[1968,143924,134843],{},[3145,143926],{"style":128040,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143929,143930],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143932,143933],{},"对于行内元素无效",[19,143935,143936],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23653,143938,143940],{"id":143939},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[23,143942,143943],{"className":128184,"code":140373,"language":128186,"meta":28,"style":28},[30,143944,143945,143951,143963],{"__ignoreMap":28},[33,143946,143947,143949],{"class":35,"line":36},[33,143948,53256],{"class":52945},[33,143950,17228],{"class":59},[33,143952,143953,143955,143957,143959,143961],{"class":35,"line":43},[33,143954,72112],{"class":39},[33,143956,53082],{"class":59},[33,143958,2010],{"class":39},[33,143960,53201],{"class":39},[33,143962,2976],{"class":59},[33,143964,143965],{"class":35,"line":130},[33,143966,3247],{"class":59},[633,143968,143970],{"id":143969},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23653,143972,143974],{"id":143973},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143976,143977],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3145,143979],{"style":128040,"src":143980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23653,143982,143984],{"id":143983},"_18122-旋转效果","18.1.2.2 旋转效果",[23,143986,143988],{"className":128184,"code":143987,"language":128186,"meta":28,"style":28},"div {\n  transform: rotate(45deg);\n}\n",[30,143989,143990,143996,144014],{"__ignoreMap":28},[33,143991,143992,143994],{"class":35,"line":36},[33,143993,53256],{"class":52945},[33,143995,17228],{"class":59},[33,143997,143998,144000,144002,144005,144007,144009,144012],{"class":35,"line":43},[33,143999,138168],{"class":39},[33,144001,53082],{"class":59},[33,144003,144004],{"class":39},"rotate",[33,144006,109],{"class":59},[33,144008,2346],{"class":39},[33,144010,144011],{"class":63},"deg",[33,144013,4385],{"class":59},[33,144015,144016],{"class":35,"line":130},[33,144017,3247],{"class":59},[23653,144019,144021],{"id":144020},"_18123-三角做法","18.1.2.3 三角做法",[19,144023,144024],{},"该下标当经过最外层大盒子时会实现向上反转",[3145,144026],{"style":128040,"src":144027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[23,144029,144030],{"className":128184,"code":136704,"language":128186,"meta":28,"style":28},[30,144031,144032,144036,144042,144052,144062,144078,144088],{"__ignoreMap":28},[33,144033,144034],{"class":35,"line":36},[33,144035,136711],{"class":87},[33,144037,144038,144040],{"class":35,"line":43},[33,144039,136716],{"class":3632},[33,144041,17228],{"class":59},[33,144043,144044,144046,144048,144050],{"class":35,"line":130},[33,144045,72210],{"class":39},[33,144047,53082],{"class":59},[33,144049,2010],{"class":39},[33,144051,2976],{"class":59},[33,144053,144054,144056,144058,144060],{"class":35,"line":146},[33,144055,72430],{"class":39},[33,144057,53082],{"class":59},[33,144059,2010],{"class":39},[33,144061,2976],{"class":59},[33,144063,144064,144066,144068,144070,144072,144074,144076],{"class":35,"line":267},[33,144065,72538],{"class":39},[33,144067,53082],{"class":59},[33,144069,2264],{"class":39},[33,144071,53137],{"class":63},[33,144073,53166],{"class":39},[33,144075,65633],{"class":39},[33,144077,2976],{"class":59},[33,144079,144080,144082,144084,144086],{"class":35,"line":275},[33,144081,136759],{"class":39},[33,144083,53082],{"class":59},[33,144085,64011],{"class":39},[33,144087,2976],{"class":59},[33,144089,144090],{"class":35,"line":392},[33,144091,3247],{"class":59},[633,144093,144095],{"id":144094},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23653,144097,144099],{"id":144098},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144101,144102],{},"设置中心点",[3145,144104],{"style":128040,"src":144105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144107,144108],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23653,144110,144112],{"id":144111},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[23,144114,144116],{"className":128184,"code":144115,"language":128186,"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,144117,144118,144123,144129,144144,144149,144154],{"__ignoreMap":28},[33,144119,144120],{"class":35,"line":36},[33,144121,144122],{"class":87},"\u002F* 转换中心点 *\u002F\n",[33,144124,144125,144127],{"class":35,"line":43},[33,144126,53256],{"class":52945},[33,144128,17228],{"class":59},[33,144130,144131,144134,144136,144138,144140,144142],{"class":35,"line":130},[33,144132,144133],{"class":39},"  transform-origin",[33,144135,53082],{"class":59},[33,144137,53237],{"class":39},[33,144139,18799],{"class":39},[33,144141,132047],{"class":59},[33,144143,136857],{"class":87},[33,144145,144146],{"class":35,"line":146},[33,144147,144148],{"class":87},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[33,144150,144151],{"class":35,"line":267},[33,144152,144153],{"class":87},"  \u002F* transform-origin: left top; *\u002F\n",[33,144155,144156],{"class":35,"line":275},[33,144157,3247],{"class":59},[23653,144159,144161],{"id":144160},"_18133-旋转案例","18.1.3.3 旋转案例",[3145,144163],{"style":128040,"src":144164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[23,144166,144167],{"className":128184,"code":143987,"language":128186,"meta":28,"style":28},[30,144168,144169,144175,144191],{"__ignoreMap":28},[33,144170,144171,144173],{"class":35,"line":36},[33,144172,53256],{"class":52945},[33,144174,17228],{"class":59},[33,144176,144177,144179,144181,144183,144185,144187,144189],{"class":35,"line":43},[33,144178,138168],{"class":39},[33,144180,53082],{"class":59},[33,144182,144004],{"class":39},[33,144184,109],{"class":59},[33,144186,2346],{"class":39},[33,144188,144011],{"class":63},[33,144190,4385],{"class":59},[33,144192,144193],{"class":35,"line":130},[33,144194,3247],{"class":59},[633,144196,144198],{"id":144197},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23653,144200,144202],{"id":144201},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144204,144205],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3145,144207],{"style":128040,"src":144208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23653,144210,144212],{"id":144211},"_18142-分页按钮","18.1.4.2 分页按钮",[3145,144214],{"style":128040,"src":144215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[23,144217,144219],{"className":128184,"code":144218,"language":128186,"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,144220,144221,144227,144243,144247,144251,144256,144262,144276,144281],{"__ignoreMap":28},[33,144222,144223,144225],{"class":35,"line":36},[33,144224,53256],{"class":52945},[33,144226,17228],{"class":59},[33,144228,144229,144231,144233,144236,144238,144241],{"class":35,"line":43},[33,144230,138168],{"class":39},[33,144232,53082],{"class":59},[33,144234,144235],{"class":39},"scale",[33,144237,109],{"class":59},[33,144239,144240],{"class":39},"1.2",[33,144242,4385],{"class":59},[33,144244,144245],{"class":35,"line":130},[33,144246,3247],{"class":59},[33,144248,144249],{"class":35,"line":146},[33,144250,137645],{"class":59},[33,144252,144253],{"class":35,"line":267},[33,144254,144255],{"class":87},"\u002F* 2D 缩放 *\u002F\n",[33,144257,144258,144260],{"class":35,"line":275},[33,144259,53256],{"class":52945},[33,144261,17228],{"class":59},[33,144263,144264,144266,144268,144270,144272,144274],{"class":35,"line":392},[33,144265,138168],{"class":39},[33,144267,53082],{"class":59},[33,144269,144235],{"class":39},[33,144271,109],{"class":59},[33,144273,144240],{"class":39},[33,144275,4385],{"class":59},[33,144277,144278],{"class":35,"line":406},[33,144279,144280],{"class":87},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[33,144282,144283],{"class":35,"line":418},[33,144284,3247],{"class":59},[19,144286,144287],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[23,144289,144291],{"className":128184,"code":144290,"language":128186,"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,144292,144293,144298,144308,144329,144350,144354,144359,144365,144392],{"__ignoreMap":28},[33,144294,144295],{"class":35,"line":36},[33,144296,144297],{"class":87},"\u002F* 定义动画 *\u002F\n",[33,144299,144300,144303,144306],{"class":35,"line":43},[33,144301,144302],{"class":63},"@keyframes",[33,144304,144305],{"class":6877}," move",[33,144307,17228],{"class":59},[33,144309,144310,144313,144315,144317,144319,144322,144324,144326],{"class":35,"line":130},[33,144311,144312],{"class":3632},"  0%",[33,144314,81448],{"class":59},[33,144316,49779],{"class":39},[33,144318,53082],{"class":59},[33,144320,144321],{"class":39},"translateX",[33,144323,109],{"class":59},[33,144325,2010],{"class":39},[33,144327,144328],{"class":59},"); }\n",[33,144330,144331,144334,144336,144338,144340,144342,144344,144346,144348],{"class":35,"line":146},[33,144332,144333],{"class":3632},"  100%",[33,144335,81448],{"class":59},[33,144337,49779],{"class":39},[33,144339,53082],{"class":59},[33,144341,144321],{"class":39},[33,144343,109],{"class":59},[33,144345,2129],{"class":39},[33,144347,53137],{"class":63},[33,144349,144328],{"class":59},[33,144351,144352],{"class":35,"line":267},[33,144353,3247],{"class":59},[33,144355,144356],{"class":35,"line":275},[33,144357,144358],{"class":87},"\u002F* 调用动画 *\u002F\n",[33,144360,144361,144363],{"class":35,"line":392},[33,144362,53256],{"class":52945},[33,144364,17228],{"class":59},[33,144366,144367,144370,144372,144374,144376,144378,144380,144382,144384,144387,144390],{"class":35,"line":406},[33,144368,144369],{"class":39},"  animation",[33,144371,53082],{"class":59},[33,144373,136870],{"class":39},[33,144375,26774],{"class":39},[33,144377,2512],{"class":63},[33,144379,80321],{"class":39},[33,144381,829],{"class":39},[33,144383,2512],{"class":63},[33,144385,144386],{"class":39}," infinite",[33,144388,144389],{"class":39}," alternate",[33,144391,2976],{"class":59},[33,144393,144394],{"class":35,"line":418},[33,144395,3247],{"class":59},[19,144397,144287],{},[23,144399,144402],{"className":144400,"code":144401,"language":6848},[6846],"\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,144403,144401],{"__ignoreMap":28},[23653,144405,144407],{"id":144406},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144409,144410],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3145,144412],{"style":128040,"src":144413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[23,144415,144416],{"className":128184,"code":144290,"language":128186,"meta":28,"style":28},[30,144417,144418,144422,144430,144448,144468,144472,144476,144482,144506],{"__ignoreMap":28},[33,144419,144420],{"class":35,"line":36},[33,144421,144297],{"class":87},[33,144423,144424,144426,144428],{"class":35,"line":43},[33,144425,144302],{"class":63},[33,144427,144305],{"class":6877},[33,144429,17228],{"class":59},[33,144431,144432,144434,144436,144438,144440,144442,144444,144446],{"class":35,"line":130},[33,144433,144312],{"class":3632},[33,144435,81448],{"class":59},[33,144437,49779],{"class":39},[33,144439,53082],{"class":59},[33,144441,144321],{"class":39},[33,144443,109],{"class":59},[33,144445,2010],{"class":39},[33,144447,144328],{"class":59},[33,144449,144450,144452,144454,144456,144458,144460,144462,144464,144466],{"class":35,"line":146},[33,144451,144333],{"class":3632},[33,144453,81448],{"class":59},[33,144455,49779],{"class":39},[33,144457,53082],{"class":59},[33,144459,144321],{"class":39},[33,144461,109],{"class":59},[33,144463,2129],{"class":39},[33,144465,53137],{"class":63},[33,144467,144328],{"class":59},[33,144469,144470],{"class":35,"line":267},[33,144471,3247],{"class":59},[33,144473,144474],{"class":35,"line":275},[33,144475,144358],{"class":87},[33,144477,144478,144480],{"class":35,"line":392},[33,144479,53256],{"class":52945},[33,144481,17228],{"class":59},[33,144483,144484,144486,144488,144490,144492,144494,144496,144498,144500,144502,144504],{"class":35,"line":406},[33,144485,144369],{"class":39},[33,144487,53082],{"class":59},[33,144489,136870],{"class":39},[33,144491,26774],{"class":39},[33,144493,2512],{"class":63},[33,144495,80321],{"class":39},[33,144497,829],{"class":39},[33,144499,2512],{"class":63},[33,144501,144386],{"class":39},[33,144503,144389],{"class":39},[33,144505,2976],{"class":59},[33,144507,144508],{"class":35,"line":418},[33,144509,3247],{"class":59},[19,144511,144512],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[633,144514,144516],{"id":144515},"_1823-知识点回顾","18.2.3 知识点回顾",[23,144518,144519],{"className":128184,"code":130353,"language":128186,"meta":28,"style":28},[30,144520,144521,144527,144537],{"__ignoreMap":28},[33,144522,144523,144525],{"class":35,"line":36},[33,144524,53256],{"class":52945},[33,144526,17228],{"class":59},[33,144528,144529,144531,144533,144535],{"class":35,"line":43},[33,144530,130366],{"class":39},[33,144532,53082],{"class":59},[33,144534,63378],{"class":39},[33,144536,2976],{"class":59},[33,144538,144539],{"class":35,"line":130},[33,144540,3247],{"class":59},[14,144542,144544],{"id":144543},"_183-3d-转换","18.3 3D 转换",[19,144546,144547],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[633,144549,144551],{"id":144550},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3145,144553],{"style":128040,"src":144554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[633,144556,144558],{"id":144557},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3145,144560],{"style":128040,"src":144561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144563,144564],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144566,144567],{},"translate3d的效果需要搭配透视perspective来使用",[3145,144569],{"style":128040,"src":144570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[633,144572,144574],{"id":144573},"_1833-透视-perspective","18.3.3 透视 perspective",[3145,144576],{"style":128040,"src":144577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144579,144580],{},"透视写在父盒子上，单位为像素",[633,144582,144584],{"id":144583},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23653,144586,144588],{"id":144587},"_18341-分开解释","18.3.4.1 分开解释",[3145,144590],{"style":128040,"src":144591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3145,144593],{"style":128040,"src":144594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3145,144596],{"style":128040,"src":144597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144599,144600],{},"总结来说就是左手原则",[23653,144602,144604],{"id":144603},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3145,144606],{"style":128040,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[633,144609,144611],{"id":144610},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3145,144613],{"style":128040,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3145,144616],{"style":128040,"src":144617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[23,144619,144621],{"className":128184,"code":144620,"language":128186,"meta":28,"style":28},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[30,144622,144623,144629,144642,144659],{"__ignoreMap":28},[33,144624,144625,144627],{"class":35,"line":36},[33,144626,53256],{"class":52945},[33,144628,17228],{"class":59},[33,144630,144631,144634,144636,144638,144640],{"class":35,"line":43},[33,144632,144633],{"class":39},"  perspective",[33,144635,53082],{"class":59},[33,144637,66716],{"class":39},[33,144639,53137],{"class":63},[33,144641,2976],{"class":59},[33,144643,144644,144646,144648,144651,144653,144655,144657],{"class":35,"line":130},[33,144645,138168],{"class":39},[33,144647,53082],{"class":59},[33,144649,144650],{"class":39},"rotateX",[33,144652,109],{"class":59},[33,144654,2346],{"class":39},[33,144656,144011],{"class":63},[33,144658,4385],{"class":59},[33,144660,144661],{"class":35,"line":146},[33,144662,3247],{"class":59},[633,144664,144666],{"id":144665},"_1836-案例","18.3.6 案例",[23653,144668,144670],{"id":144669},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3145,144672],{"style":128040,"src":144673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3145,144675],{"style":128040,"src":144676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3145,144678],{"style":128040,"src":144679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[23,144681,144683],{"className":128184,"code":144682,"language":128186,"meta":28,"style":28},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[30,144684,144685,144690,144696,144708],{"__ignoreMap":28},[33,144686,144687],{"class":35,"line":36},[33,144688,144689],{"class":87},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[33,144691,144692,144694],{"class":35,"line":43},[33,144693,135181],{"class":3632},[33,144695,17228],{"class":59},[33,144697,144698,144700,144702,144704,144706],{"class":35,"line":130},[33,144699,144633],{"class":39},[33,144701,53082],{"class":59},[33,144703,66716],{"class":39},[33,144705,53137],{"class":63},[33,144707,2976],{"class":59},[33,144709,144710],{"class":35,"line":146},[33,144711,3247],{"class":59},[23653,144713,144715],{"id":144714},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3145,144717],{"style":128040,"src":144718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[23,144720,144721],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,144722,144723,144727,144741,144745],{"__ignoreMap":28},[33,144724,144725],{"class":35,"line":36},[33,144726,132295],{"class":87},[33,144728,144729,144731,144733,144735,144737,144739],{"class":35,"line":43},[33,144730,2726],{"class":59},[33,144732,53256],{"class":52945},[33,144734,55131],{"class":3632},[33,144736,64],{"class":59},[33,144738,132308],{"class":117},[33,144740,52952],{"class":59},[33,144742,144743],{"class":35,"line":130},[33,144744,132315],{"class":59},[33,144746,144747,144749,144751],{"class":35,"line":146},[33,144748,53430],{"class":59},[33,144750,53256],{"class":52945},[33,144752,52952],{"class":59},[23653,144754,144756],{"id":144755},"_18363-旋转木马","18.3.6.3 旋转木马",[3145,144758],{"style":128040,"src":144759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[23,144761,144762],{"className":128184,"code":143987,"language":128186,"meta":28,"style":28},[30,144763,144764,144770,144786],{"__ignoreMap":28},[33,144765,144766,144768],{"class":35,"line":36},[33,144767,53256],{"class":52945},[33,144769,17228],{"class":59},[33,144771,144772,144774,144776,144778,144780,144782,144784],{"class":35,"line":43},[33,144773,138168],{"class":39},[33,144775,53082],{"class":59},[33,144777,144004],{"class":39},[33,144779,109],{"class":59},[33,144781,2346],{"class":39},[33,144783,144011],{"class":63},[33,144785,4385],{"class":59},[33,144787,144788],{"class":35,"line":130},[33,144789,3247],{"class":59},[1729,144791,144792],{},"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":43,"depth":43,"links":144794},[144795,144802],{"id":143890,"depth":43,"text":143891,"children":144796},[144797,144798,144799,144800,144801],{"id":143914,"depth":130,"text":143915},{"id":143969,"depth":130,"text":143970},{"id":144094,"depth":130,"text":144095},{"id":144197,"depth":130,"text":144198},{"id":144515,"depth":130,"text":144516},{"id":144543,"depth":43,"text":144544,"children":144803},[144804,144805,144806,144807,144808,144809],{"id":144550,"depth":130,"text":144551},{"id":144557,"depth":130,"text":144558},{"id":144573,"depth":130,"text":144574},{"id":144583,"depth":130,"text":144584},{"id":144610,"depth":130,"text":144611},{"id":144665,"depth":130,"text":144666},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143882,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144816,"title":144817,"body":144818,"description":1751,"extension":1752,"meta":145021,"navigation":126,"path":145022,"seo":145023,"stem":145024,"__hash__":145025},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144819,"toc":145010},[144820,144823,144827,144830,144833,144837,144840,144843,144846,144850,144853,144857,144860,144864,144867,144871,144885,144889,144914,144917,144920,144937,144941,144945,144948,144951,144955,144958,144961,144979,144983,144986,145000,145004,145007],[10,144821,144817],{"id":144822},"_19-移动端基础-前缀现状与视口",[14,144824,144826],{"id":144825},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3145,144828],{"style":128040,"src":144829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144831,144832],{},"意思就是加个前缀，增加兼容性",[14,144834,144836],{"id":144835},"_192-移动端现状认识","19.2 移动端现状认识",[3145,144838],{"style":128040,"src":144839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144841,144842],{},"调试方法：",[3145,144844],{"style":128040,"src":144845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144847,144849],{"id":144848},"_193-视口","19.3 视口",[19,144851,144852],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[633,144854,144856],{"id":144855},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3145,144858],{"style":128040,"src":144859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[633,144861,144863],{"id":144862},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3145,144865],{"style":128040,"src":144866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[633,144868,144870],{"id":144869},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2822,144872,144873,144876,144879,144882],{},[165,144874,144875],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[165,144877,144878],{},"理想视口，对设备来讲，是最理想的视口尺寸",[165,144880,144881],{},"需要手动添写meta视口标签通知浏览器操作",[165,144883,144884],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[633,144886,144888],{"id":144887},"_1934-meta视口标签","19.3.4 meta视口标签",[23,144890,144892],{"className":128931,"code":144891,"language":128933,"meta":28,"style":28},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[30,144893,144894],{"__ignoreMap":28},[33,144895,144896,144898,144900,144902,144904,144906,144908,144910,144912],{"class":35,"line":36},[33,144897,2726],{"class":59},[33,144899,52989],{"class":52945},[33,144901,16578],{"class":3632},[33,144903,64],{"class":59},[33,144905,53036],{"class":117},[33,144907,53016],{"class":3632},[33,144909,64],{"class":59},[33,144911,53043],{"class":117},[33,144913,52952],{"class":59},[3145,144915],{"style":128040,"src":144916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144918,144919],{},"标准视口设置：",[162,144921,144922,144925,144928,144931,144934],{},[165,144923,144924],{},"视口宽度和设备保持一致",[165,144926,144927],{},"视口的默认缩放比例1.0",[165,144929,144930],{},"不允许用户自行缩放",[165,144932,144933],{},"最大允许的缩放比例1.0",[165,144935,144936],{},"最小允许的缩放比例1.0",[633,144938,144940],{"id":144939},"_1935-二倍图","19.3.5 二倍图",[23653,144942,144944],{"id":144943},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3145,144946],{"style":128040,"src":144947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3145,144949],{"style":128040,"src":144950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23653,144952,144954],{"id":144953},"_19352-多倍图","19.3.5.2 多倍图",[3145,144956],{"style":128040,"src":144957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144959,144960],{},"二倍图法，代码如下：",[23,144962,144964],{"className":128184,"code":144963,"language":128186,"meta":28,"style":28},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[30,144965,144966,144971],{"__ignoreMap":28},[33,144967,144968],{"class":35,"line":36},[33,144969,144970],{"class":87},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[33,144972,144973,144976],{"class":35,"line":43},[33,144974,144975],{"class":52945},"background-size",[33,144977,144978],{"class":59},": 50% 50%;\n",[23653,144980,144982],{"id":144981},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3145,144984],{"style":128040,"src":144985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[162,144987,144988,144991,144994,144997],{},[165,144989,144990],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[165,144992,144993],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[165,144995,144996],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[165,144998,144999],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23653,145001,145003],{"id":145002},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3145,145005],{"style":128040,"src":145006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1729,145008,145009],{},"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":43,"depth":43,"links":145011},[145012,145013,145014],{"id":144825,"depth":43,"text":144826},{"id":144835,"depth":43,"text":144836},{"id":144848,"depth":43,"text":144849,"children":145015},[145016,145017,145018,145019,145020],{"id":144855,"depth":130,"text":144856},{"id":144862,"depth":130,"text":144863},{"id":144869,"depth":130,"text":144870},{"id":144887,"depth":130,"text":144888},{"id":144939,"depth":130,"text":144940},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144817,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145027,"title":145028,"body":145029,"description":1751,"extension":1752,"meta":145906,"navigation":126,"path":145907,"seo":145908,"stem":145909,"__hash__":145910},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145030,"toc":145890},[145031,145034,145038,145045,145048,145055,145058,145063,145066,145070,145074,145081,145084,145087,145091,145094,145097,145100,145103,145106,145110,145113,145117,145119,145122,145125,145128,145131,145133,145136,145138,145168,145170,145200,145204,145207,145211,145214,145231,145234,145237,145313,145315,145318,145321,145324,145327,145329,145332,145335,145339,145361,145364,145367,145371,145374,145380,145383,145387,145390,145393,145397,145400,145403,145406,145410,145413,145416,145419,145422,145426,145429,145433,145440,145443,145446,145449,145452,145462,145465,145468,145475,145478,145482,145485,145488,145492,145495,145498,145501,145546,145549,145552,145555,145557,145686,145688,145726,145729,145732,145734,145852,145854,145888],[10,145032,145028],{"id":145033},"_20-移动端布局实战上篇",[14,145035,145037],{"id":145036},"_201-移动端主流方案","20.1 移动端主流方案",[162,145039,145040],{},[165,145041,145042],{},[1968,145043,145044],{},"单独移动端页面（主流）",[3145,145046],{"style":128040,"src":145047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[162,145049,145050],{"start":43},[165,145051,145052],{},[1968,145053,145054],{},"响应式兼容PC移动端",[3145,145056],{"style":128040,"src":145057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[162,145059,145060],{"start":130},[165,145061,145062],{},"两种页面选型布局方式",[3145,145064],{"style":128040,"src":145065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145067,145069],{"id":145068},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[633,145071,145073],{"id":145072},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145075,145076,145077],{},"官网地址： ",[2057,145078,145079],{"href":145079,"rel":145080},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25520],[3145,145082],{"style":128040,"src":145083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3145,145085],{"style":128040,"src":145086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[633,145088,145090],{"id":145089},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3145,145092],{"style":128040,"src":145093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3145,145095],{"style":128040,"src":145096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145098,145099],{},"去除高亮：",[19,145101,145102],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145104,145105],{},"-webkit- tap-highlight-color: transparent;",[14,145107,145109],{"id":145108},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3145,145111],{"style":128040,"src":145112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145114,145116],{"id":145115},"_204-流式布局案例","20.4 流式布局案例",[19,145118,1853],{},[19,145120,145121],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145123,145124],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145126,145127],{},"图片格式：",[3145,145129],{"style":128040,"src":145130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145132,137227],{},[3145,145134],{"style":128040,"src":145135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145137,141554],{},[23,145139,145140],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,145141,145142],{"__ignoreMap":28},[33,145143,145144,145146,145148,145150,145152,145154,145156,145158,145160,145162,145164,145166],{"class":35,"line":36},[33,145145,2726],{"class":59},[33,145147,3145],{"class":52945},[33,145149,56883],{"class":3632},[33,145151,64],{"class":59},[33,145153,135701],{"class":117},[33,145155,56891],{"class":3632},[33,145157,64],{"class":59},[33,145159,135708],{"class":117},[33,145161,135711],{"class":3632},[33,145163,64],{"class":59},[33,145165,135716],{"class":117},[33,145167,52952],{"class":59},[19,145169,141643],{},[23,145171,145172],{"className":128931,"code":135686,"language":128933,"meta":28,"style":28},[30,145173,145174],{"__ignoreMap":28},[33,145175,145176,145178,145180,145182,145184,145186,145188,145190,145192,145194,145196,145198],{"class":35,"line":36},[33,145177,2726],{"class":59},[33,145179,3145],{"class":52945},[33,145181,56883],{"class":3632},[33,145183,64],{"class":59},[33,145185,135701],{"class":117},[33,145187,56891],{"class":3632},[33,145189,64],{"class":59},[33,145191,135708],{"class":117},[33,145193,135711],{"class":3632},[33,145195,64],{"class":59},[33,145197,135716],{"class":117},[33,145199,52952],{"class":59},[14,145201,145203],{"id":145202},"_205-flex布局","20.5 flex布局",[3145,145205],{"style":128040,"src":145206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[633,145208,145210],{"id":145209},"_2051-布局原理","20.5.1 布局原理",[19,145212,145213],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2822,145215,145216,145219,145222,145225,145228],{},[165,145217,145218],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[165,145220,145221],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[165,145223,145224],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[165,145226,145227],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[165,145229,145230],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145232,145233],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145235,145236],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[23,145238,145240],{"className":128184,"code":145239,"language":128186,"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,145241,145242,145247,145254,145264,145276,145287,145298,145309],{"__ignoreMap":28},[33,145243,145244],{"class":35,"line":36},[33,145245,145246],{"class":87},"\u002F* Flex 弹性布局 *\u002F\n",[33,145248,145249,145252],{"class":35,"line":43},[33,145250,145251],{"class":3632},".container",[33,145253,17228],{"class":59},[33,145255,145256,145258,145260,145262],{"class":35,"line":130},[33,145257,129800],{"class":39},[33,145259,53082],{"class":59},[33,145261,53122],{"class":39},[33,145263,2976],{"class":59},[33,145265,145266,145269,145271,145274],{"class":35,"line":146},[33,145267,145268],{"class":39},"  flex-direction",[33,145270,53082],{"class":59},[33,145272,145273],{"class":39},"row",[33,145275,2976],{"class":59},[33,145277,145278,145281,145283,145285],{"class":35,"line":267},[33,145279,145280],{"class":39},"  justify-content",[33,145282,53082],{"class":59},[33,145284,53313],{"class":39},[33,145286,2976],{"class":59},[33,145288,145289,145292,145294,145296],{"class":35,"line":275},[33,145290,145291],{"class":39},"  align-items",[33,145293,53082],{"class":59},[33,145295,53237],{"class":39},[33,145297,2976],{"class":59},[33,145299,145300,145303,145305,145307],{"class":35,"line":392},[33,145301,145302],{"class":39},"  flex-wrap",[33,145304,53082],{"class":59},[33,145306,80251],{"class":39},[33,145308,2976],{"class":59},[33,145310,145311],{"class":35,"line":406},[33,145312,3247],{"class":59},[19,145314,72095],{},[19,145316,145317],{},".form-item .male-label {",[19,145319,145320],{},"   margin-right: 20px;",[19,145322,145323],{},"   display: inline-flex;",[19,145325,145326],{},"   align-items: center;",[19,145328,1011],{},[3145,145330],{"style":128040,"src":145331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3145,145333],{"style":128040,"src":145334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[633,145336,145338],{"id":145337},"_2052-常见父项属性","20.5.2 常见父项属性",[162,145340,145341,145344,145347,145350,145353,145356,145359],{},[165,145342,145343],{},"flex-direction：设置主轴的方向",[165,145345,145346],{},"justify-content：设置主轴上的子元素排列方式",[165,145348,145349],{},"flex-wrap：设置子元素是否换行",[165,145351,145352],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[165,145354,145355],{},"align-items：设置侧轴上的子元素排列方式（单行）",[165,145357,145358],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[165,145360,145343],{},[3145,145362],{"style":128040,"src":145363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3145,145365],{"style":128040,"src":145366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[162,145368,145369],{"start":43},[165,145370,145346],{},[3145,145372],{"style":128040,"src":145373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145375,145376,145379],{},[30,145377,145378],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145381,145382],{},"跟着主轴走",[162,145384,145385],{"start":130},[165,145386,145349],{},[3145,145388],{"style":128040,"src":145389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145391,145392],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[162,145394,145395],{"start":146},[165,145396,145352],{},[3145,145398],{"style":128040,"src":145399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145401,145402],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145404,145405],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[162,145407,145408],{"start":267},[165,145409,145355],{},[3145,145411],{"style":128040,"src":145412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145414,145415],{},"align-items与align-content之间的区别：",[19,145417,145418],{},"单找items，多找content",[3145,145420],{"style":128040,"src":145421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[162,145423,145424],{"start":275},[165,145425,145358],{},[3145,145427],{"style":128040,"src":145428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[633,145430,145432],{"id":145431},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[162,145434,145435],{},[165,145436,145437],{},[1968,145438,145439],{},"flex 属性",[19,145441,145442],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3145,145444],{"style":128040,"src":145445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145447,145448],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145450,145451],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[162,145453,145454],{"start":43},[165,145455,145456,15453,145459],{},[1968,145457,145458],{},"align-self",[1968,145460,145461],{},"控制子项自己在侧轴上的排列方式",[3145,145463],{"style":128040,"src":145464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145466,145467],{},"单个子盒子在父盒子侧轴上的排列方式",[162,145469,145470],{"start":130},[165,145471,145472,145474],{},[1968,145473,96936],{}," 属性定义项目的排列顺序",[3145,145476],{"style":128040,"src":145477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[633,145479,145481],{"id":145480},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3145,145483],{"style":128040,"src":145484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145486,145487],{},"必须要添加浏览器的私有前缀",[633,145489,145491],{"id":145490},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145493,145494],{},"学到最重要的知识：",[19,145496,145497],{},"flex处理这样的布局思路",[3145,145499],{"style":128040,"src":145500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[23,145502,145504],{"className":128184,"code":145503,"language":128186,"meta":28,"style":28},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[30,145505,145506,145512,145522,145532,145542],{"__ignoreMap":28},[33,145507,145508,145510],{"class":35,"line":36},[33,145509,145251],{"class":3632},[33,145511,17228],{"class":59},[33,145513,145514,145516,145518,145520],{"class":35,"line":43},[33,145515,129800],{"class":39},[33,145517,53082],{"class":59},[33,145519,53122],{"class":39},[33,145521,2976],{"class":59},[33,145523,145524,145526,145528,145530],{"class":35,"line":130},[33,145525,145280],{"class":39},[33,145527,53082],{"class":59},[33,145529,53237],{"class":39},[33,145531,2976],{"class":59},[33,145533,145534,145536,145538,145540],{"class":35,"line":146},[33,145535,145291],{"class":39},[33,145537,53082],{"class":59},[33,145539,53237],{"class":39},[33,145541,2976],{"class":59},[33,145543,145544],{"class":35,"line":267},[33,145545,3247],{"class":59},[19,145547,145548],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145550,145551],{},"使用属性选择器",[3145,145553],{"style":128040,"src":145554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145556,70531],{},[23,145558,145560],{"className":128931,"code":145559,"language":128933,"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,145561,145562,145567,145581,145586,145606,145611,145630,145635,145654,145659,145678],{"__ignoreMap":28},[33,145563,145564],{"class":35,"line":36},[33,145565,145566],{"class":87},"\u003C!-- 携程网移动端案例结构 -->\n",[33,145568,145569,145571,145573,145575,145577,145579],{"class":35,"line":43},[33,145570,2726],{"class":59},[33,145572,53256],{"class":52945},[33,145574,55131],{"class":3632},[33,145576,64],{"class":59},[33,145578,93962],{"class":117},[33,145580,52952],{"class":59},[33,145582,145583],{"class":35,"line":130},[33,145584,145585],{"class":87},"  \u003C!-- 搜索栏 -->\n",[33,145587,145588,145590,145592,145594,145596,145599,145602,145604],{"class":35,"line":146},[33,145589,53789],{"class":59},[33,145591,53256],{"class":52945},[33,145593,55131],{"class":3632},[33,145595,64],{"class":59},[33,145597,145598],{"class":117},"\"search-index\"",[33,145600,145601],{"class":59},">...\u003C\u002F",[33,145603,53256],{"class":52945},[33,145605,52952],{"class":59},[33,145607,145608],{"class":35,"line":267},[33,145609,145610],{"class":87},"  \u003C!-- 焦点图 -->\n",[33,145612,145613,145615,145617,145619,145621,145624,145626,145628],{"class":35,"line":275},[33,145614,53789],{"class":59},[33,145616,53256],{"class":52945},[33,145618,55131],{"class":3632},[33,145620,64],{"class":59},[33,145622,145623],{"class":117},"\"focus\"",[33,145625,145601],{"class":59},[33,145627,53256],{"class":52945},[33,145629,52952],{"class":59},[33,145631,145632],{"class":35,"line":392},[33,145633,145634],{"class":87},"  \u003C!-- 主导航 -->\n",[33,145636,145637,145639,145641,145643,145645,145648,145650,145652],{"class":35,"line":406},[33,145638,53789],{"class":59},[33,145640,53256],{"class":52945},[33,145642,55131],{"class":3632},[33,145644,64],{"class":59},[33,145646,145647],{"class":117},"\"local-nav\"",[33,145649,145601],{"class":59},[33,145651,53256],{"class":52945},[33,145653,52952],{"class":59},[33,145655,145656],{"class":35,"line":418},[33,145657,145658],{"class":87},"  \u003C!-- 子导航 -->\n",[33,145660,145661,145663,145665,145667,145669,145672,145674,145676],{"class":35,"line":425},[33,145662,53789],{"class":59},[33,145664,53256],{"class":52945},[33,145666,55131],{"class":3632},[33,145668,64],{"class":59},[33,145670,145671],{"class":117},"\"nav-common\"",[33,145673,145601],{"class":59},[33,145675,53256],{"class":52945},[33,145677,52952],{"class":59},[33,145679,145680,145682,145684],{"class":35,"line":1147},[33,145681,53430],{"class":59},[33,145683,53256],{"class":52945},[33,145685,52952],{"class":59},[19,145687,72095],{},[23,145689,145690],{"className":128184,"code":138636,"language":128186,"meta":28,"style":28},[30,145691,145692,145706,145722],{"__ignoreMap":28},[33,145693,145694,145696,145698,145700,145702,145704],{"class":35,"line":36},[33,145695,112],{"class":52945},[33,145697,2707],{"class":59},[33,145699,104745],{"class":3632},[33,145701,64],{"class":63},[33,145703,64341],{"class":117},[33,145705,138653],{"class":59},[33,145707,145708,145710,145712,145714,145716,145718,145720],{"class":35,"line":43},[33,145709,72538],{"class":39},[33,145711,53082],{"class":59},[33,145713,2036],{"class":39},[33,145715,53137],{"class":63},[33,145717,53166],{"class":39},[33,145719,131764],{"class":39},[33,145721,2976],{"class":59},[33,145723,145724],{"class":35,"line":130},[33,145725,3247],{"class":59},[19,145727,145728],{},"总代码和效果展示：",[3145,145730],{"style":128040,"src":145731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145733,70531],{},[23,145735,145736],{"className":128931,"code":145559,"language":128933,"meta":28,"style":28},[30,145737,145738,145742,145756,145760,145778,145782,145800,145804,145822,145826,145844],{"__ignoreMap":28},[33,145739,145740],{"class":35,"line":36},[33,145741,145566],{"class":87},[33,145743,145744,145746,145748,145750,145752,145754],{"class":35,"line":43},[33,145745,2726],{"class":59},[33,145747,53256],{"class":52945},[33,145749,55131],{"class":3632},[33,145751,64],{"class":59},[33,145753,93962],{"class":117},[33,145755,52952],{"class":59},[33,145757,145758],{"class":35,"line":130},[33,145759,145585],{"class":87},[33,145761,145762,145764,145766,145768,145770,145772,145774,145776],{"class":35,"line":146},[33,145763,53789],{"class":59},[33,145765,53256],{"class":52945},[33,145767,55131],{"class":3632},[33,145769,64],{"class":59},[33,145771,145598],{"class":117},[33,145773,145601],{"class":59},[33,145775,53256],{"class":52945},[33,145777,52952],{"class":59},[33,145779,145780],{"class":35,"line":267},[33,145781,145610],{"class":87},[33,145783,145784,145786,145788,145790,145792,145794,145796,145798],{"class":35,"line":275},[33,145785,53789],{"class":59},[33,145787,53256],{"class":52945},[33,145789,55131],{"class":3632},[33,145791,64],{"class":59},[33,145793,145623],{"class":117},[33,145795,145601],{"class":59},[33,145797,53256],{"class":52945},[33,145799,52952],{"class":59},[33,145801,145802],{"class":35,"line":392},[33,145803,145634],{"class":87},[33,145805,145806,145808,145810,145812,145814,145816,145818,145820],{"class":35,"line":406},[33,145807,53789],{"class":59},[33,145809,53256],{"class":52945},[33,145811,55131],{"class":3632},[33,145813,64],{"class":59},[33,145815,145647],{"class":117},[33,145817,145601],{"class":59},[33,145819,53256],{"class":52945},[33,145821,52952],{"class":59},[33,145823,145824],{"class":35,"line":418},[33,145825,145658],{"class":87},[33,145827,145828,145830,145832,145834,145836,145838,145840,145842],{"class":35,"line":425},[33,145829,53789],{"class":59},[33,145831,53256],{"class":52945},[33,145833,55131],{"class":3632},[33,145835,64],{"class":59},[33,145837,145671],{"class":117},[33,145839,145601],{"class":59},[33,145841,53256],{"class":52945},[33,145843,52952],{"class":59},[33,145845,145846,145848,145850],{"class":35,"line":1147},[33,145847,53430],{"class":59},[33,145849,53256],{"class":52945},[33,145851,52952],{"class":59},[19,145853,72095],{},[23,145855,145856],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,145857,145858,145862,145876,145880],{"__ignoreMap":28},[33,145859,145860],{"class":35,"line":36},[33,145861,132295],{"class":87},[33,145863,145864,145866,145868,145870,145872,145874],{"class":35,"line":43},[33,145865,2726],{"class":59},[33,145867,53256],{"class":52945},[33,145869,55131],{"class":3632},[33,145871,64],{"class":59},[33,145873,132308],{"class":117},[33,145875,52952],{"class":59},[33,145877,145878],{"class":35,"line":130},[33,145879,132315],{"class":59},[33,145881,145882,145884,145886],{"class":35,"line":146},[33,145883,53430],{"class":59},[33,145885,53256],{"class":52945},[33,145887,52952],{"class":59},[1729,145889,139585],{},{"title":28,"searchDepth":43,"depth":43,"links":145891},[145892,145893,145897,145898,145899],{"id":145036,"depth":43,"text":145037},{"id":145068,"depth":43,"text":145069,"children":145894},[145895,145896],{"id":145072,"depth":130,"text":145073},{"id":145089,"depth":130,"text":145090},{"id":145108,"depth":43,"text":145109},{"id":145115,"depth":43,"text":145116},{"id":145202,"depth":43,"text":145203,"children":145900},[145901,145902,145903,145904,145905],{"id":145209,"depth":130,"text":145210},{"id":145337,"depth":130,"text":145338},{"id":145431,"depth":130,"text":145432},{"id":145480,"depth":130,"text":145481},{"id":145490,"depth":130,"text":145491},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145028,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145912,"title":145913,"body":145914,"description":1751,"extension":1752,"meta":147141,"navigation":126,"path":147142,"seo":147143,"stem":147144,"__hash__":147145},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145915,"toc":147119},[145916,145919,145923,145927,145930,145933,145937,145942,145945,145948,145951,145954,145957,146014,146017,146022,146025,146028,146032,146043,146047,146050,146053,146060,146065,146069,146072,146078,146081,146085,146088,146095,146098,146101,146108,146111,146118,146121,146124,146131,146134,146137,146139,146156,146160,146163,146166,146169,146173,146176,146179,146182,146185,146188,146191,146193,146196,146199,146261,146264,146374,146381,146387,146390,146393,146397,146400,146404,146409,146412,146419,146422,146428,146433,146436,146439,146442,146445,146448,146451,146454,146457,146513,146515,146541,146545,146548,146551,146554,146562,146565,146568,146572,146628,146631,146635,146641,146652,146655,146660,146663,146666,146672,146675,146678,146681,146684,146687,146690,146693,146696,146721,146727,146730,146733,146736,146739,146742,146745,146750,146753,146756,146759,146767,146770,146777,146780,146783,146785,146809,146811,146814,146817,146820,146823,146826,146829,146832,146866,146869,146872,146906,146913,146916,146919,146922,146925,146928,146931,146938,146941,146944,146947,146950,146957,146960,146963,146970,146973,146976,146980,146983,146986,146989,146992,146995,146998,147001,147004,147006,147030,147032,147056,147060,147071,147074,147077,147080,147083,147086,147089,147092,147095,147098,147101,147104,147107,147110,147113,147116],[10,145917,145913],{"id":145918},"_21-移动端布局实战下篇",[14,145920,145922],{"id":145921},"_211-rem适配布局","21.1 rem适配布局",[633,145924,145926],{"id":145925},"_2111-rem单位","21.1.1 rem单位",[3145,145928],{"style":128040,"src":145929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145931,145932],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[633,145934,145936],{"id":145935},"_2112-媒体查询","21.1.2 媒体查询",[162,145938,145939],{},[165,145940,145941],{},"参数介绍",[3145,145943],{"style":128040,"src":145944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3145,145946],{"style":128040,"src":145947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3145,145949],{"style":128040,"src":145950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3145,145952],{"style":128040,"src":145953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3145,145955],{"style":128040,"src":145956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[23,145958,145960],{"className":128184,"code":145959,"language":128186,"meta":28,"style":28},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[30,145961,145962,145967,145986,145993,146006,146010],{"__ignoreMap":28},[33,145963,145964],{"class":35,"line":36},[33,145965,145966],{"class":87},"\u002F* 媒体查询 *\u002F\n",[33,145968,145969,145972,145974,145977,145979,145982,145984],{"class":35,"line":43},[33,145970,145971],{"class":63},"@media",[33,145973,3332],{"class":59},[33,145975,145976],{"class":39},"max-width",[33,145978,53082],{"class":59},[33,145980,145981],{"class":39},"768",[33,145983,53137],{"class":63},[33,145985,14100],{"class":59},[33,145987,145988,145991],{"class":35,"line":130},[33,145989,145990],{"class":3632},"  .container",[33,145992,17228],{"class":59},[33,145994,145995,145998,146000,146002,146004],{"class":35,"line":146},[33,145996,145997],{"class":39},"    width",[33,145999,53082],{"class":59},[33,146001,2129],{"class":39},[33,146003,2146],{"class":63},[33,146005,2976],{"class":59},[33,146007,146008],{"class":35,"line":267},[33,146009,128980],{"class":59},[33,146011,146012],{"class":35,"line":275},[33,146013,3247],{"class":59},[19,146015,146016],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[162,146018,146019],{"start":43},[165,146020,146021],{},"引入资源",[3145,146023],{"style":128040,"src":146024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146026,146027],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[633,146029,146031],{"id":146030},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2822,146033,146034,146037,146040],{},[165,146035,146036],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[165,146038,146039],{},"媒体查询可以根据不同设备宽度来修改样式",[165,146041,146042],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146044,146046],{"id":146045},"_212-less基础","21.2 Less基础",[19,146048,146049],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146051,146052],{},"Less可以解决该问题，它是css的扩展语言",[19,146054,146055,146056],{},"Less中文网址： ",[2057,146057,146058],{"href":146058,"rel":146059},"http:\u002F\u002Flesscss.cn\u002F",[25520],[19,146061,146062],{},[1968,146063,146064],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[633,146066,146068],{"id":146067},"_2121-less安装","21.2.1 less安装",[19,146070,146071],{},"如果使用vscode，则无需进行下方安装步骤",[19,146073,146074],{},[2057,146075,146076],{"href":146076,"rel":146077},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25520],[3145,146079],{"style":128040,"src":146080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[633,146082,146084],{"id":146083},"_2122-less使用","21.2.2 less使用",[19,146086,146087],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[162,146089,146090],{},[165,146091,146092],{},[1968,146093,146094],{},"Less 变量",[3145,146096],{"style":128040,"src":146097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3145,146099],{"style":128040,"src":146100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[162,146102,146103],{"start":43},[165,146104,146105],{},[1968,146106,146107],{},"Less 编译",[3145,146109],{"style":128040,"src":146110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[162,146112,146113],{"start":130},[165,146114,146115],{},[1968,146116,146117],{},"Less 嵌套",[3145,146119],{"style":128040,"src":146120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3145,146122],{"style":128040,"src":146123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[162,146125,146126],{"start":146},[165,146127,146128],{},[1968,146129,146130],{},"Less 运算",[3145,146132],{"style":128040,"src":146133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146135,146136],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146138,1853],{},[2822,146140,146141,146144,146147,146150,146153],{},[165,146142,146143],{},"乘号（*）和除号（\u002F）的写法",[165,146145,146146],{},"运算符中间左右有个空格隔开 1px + 5",[165,146148,146149],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[165,146151,146152],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[165,146154,146155],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146157,146159],{"id":146158},"_213-rem-适配方案","21.3 rem 适配方案",[19,146161,146162],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146164,146165],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3145,146167],{"style":128040,"src":146168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[633,146170,146172],{"id":146171},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146174,146175],{},"rem + 媒体查询 + less 技术",[3145,146177],{"style":128040,"src":146178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146180,146181],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146183,146184],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3145,146186],{"style":128040,"src":146187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146189,146190],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146192,16291],{},[3145,146194],{"style":128040,"src":146195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146197,146198],{},"index.html:",[23,146200,146202],{"className":128184,"code":146201,"language":128186,"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,146203,146204,146209,146215,146231,146235,146241,146257],{"__ignoreMap":28},[33,146205,146206],{"class":35,"line":36},[33,146207,146208],{"class":87},"\u002F* rem 适配方案 *\u002F\n",[33,146210,146211,146213],{"class":35,"line":43},[33,146212,52280],{"class":52945},[33,146214,17228],{"class":59},[33,146216,146217,146219,146221,146224,146226,146228],{"class":35,"line":130},[33,146218,72268],{"class":39},[33,146220,53082],{"class":59},[33,146222,146223],{"class":39},"62.5",[33,146225,2146],{"class":63},[33,146227,132047],{"class":59},[33,146229,146230],{"class":87},"\u002F* 1rem = 10px *\u002F\n",[33,146232,146233],{"class":35,"line":146},[33,146234,3247],{"class":59},[33,146236,146237,146239],{"class":35,"line":267},[33,146238,132032],{"class":3632},[33,146240,17228],{"class":59},[33,146242,146243,146245,146247,146249,146252,146254],{"class":35,"line":275},[33,146244,72210],{"class":39},[33,146246,53082],{"class":59},[33,146248,2264],{"class":39},[33,146250,146251],{"class":63},"rem",[33,146253,132047],{"class":59},[33,146255,146256],{"class":87},"\u002F* 100px *\u002F\n",[33,146258,146259],{"class":35,"line":392},[33,146260,3247],{"class":59},[19,146262,146263],{},"common.less",[23,146265,146267],{"className":128184,"code":146266,"language":128186,"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,146268,146269,146275,146290,146294,146300,146314,146318,146322,146326,146332,146346,146350,146356,146370],{"__ignoreMap":28},[33,146270,146271,146273],{"class":35,"line":36},[33,146272,52280],{"class":52945},[33,146274,17228],{"class":59},[33,146276,146277,146279,146281,146283,146285,146287],{"class":35,"line":43},[33,146278,72268],{"class":39},[33,146280,53082],{"class":59},[33,146282,146223],{"class":39},[33,146284,2146],{"class":63},[33,146286,27723],{"class":59},[33,146288,146289],{"class":87},"\u002F* 10px *\u002F\n",[33,146291,146292],{"class":35,"line":130},[33,146293,3247],{"class":59},[33,146295,146296,146298],{"class":35,"line":146},[33,146297,53256],{"class":52945},[33,146299,17228],{"class":59},[33,146301,146302,146304,146306,146308,146310,146312],{"class":35,"line":267},[33,146303,72210],{"class":39},[33,146305,53082],{"class":59},[33,146307,2264],{"class":39},[33,146309,146251],{"class":63},[33,146311,27723],{"class":59},[33,146313,146256],{"class":87},[33,146315,146316],{"class":35,"line":275},[33,146317,3247],{"class":59},[33,146319,146320],{"class":35,"line":392},[33,146321,137645],{"class":59},[33,146323,146324],{"class":35,"line":406},[33,146325,146208],{"class":87},[33,146327,146328,146330],{"class":35,"line":418},[33,146329,52280],{"class":52945},[33,146331,17228],{"class":59},[33,146333,146334,146336,146338,146340,146342,146344],{"class":35,"line":425},[33,146335,72268],{"class":39},[33,146337,53082],{"class":59},[33,146339,146223],{"class":39},[33,146341,2146],{"class":63},[33,146343,132047],{"class":59},[33,146345,146230],{"class":87},[33,146347,146348],{"class":35,"line":1147},[33,146349,3247],{"class":59},[33,146351,146352,146354],{"class":35,"line":1329},[33,146353,132032],{"class":3632},[33,146355,17228],{"class":59},[33,146357,146358,146360,146362,146364,146366,146368],{"class":35,"line":1341},[33,146359,72210],{"class":39},[33,146361,53082],{"class":59},[33,146363,2264],{"class":39},[33,146365,146251],{"class":63},[33,146367,132047],{"class":59},[33,146369,146256],{"class":87},[33,146371,146372],{"class":35,"line":1348},[33,146373,3247],{"class":59},[19,146375,146376,146377,146380],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25208,146378,146379],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[23,146382,146385],{"className":146383,"code":146384,"language":6848},[6846],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[30,146386,146384],{"__ignoreMap":28},[19,146388,146389],{},"less保存时会自动变成.css文件",[19,146391,146392],{},"好好搞懂上述代码写法",[633,146394,146396],{"id":146395},"_2132-样式导入样式","21.3.2 样式导入样式",[3145,146398],{"style":128040,"src":146399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[633,146401,146403],{"id":146402},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[162,146405,146406],{},[165,146407,146408],{},"准备工作",[3145,146410],{"style":128040,"src":146411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146413,146414,146415],{},"github地址：",[2057,146416,146417],{"href":146417,"rel":146418},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25520],[19,146420,146421],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146423,146424,146425],{},"js文件引入到index.html中使用的是",[30,146426,146427],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[162,146429,146430],{"start":43},[165,146431,146432],{},"vscode插件",[3145,146434],{"style":128040,"src":146435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146437,146438],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146440,146441],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3145,146443],{"style":128040,"src":146444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146446,146447],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3145,146449],{"style":128040,"src":146450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146452,146453],{},"修改成75就可以，alt+z为快捷键",[19,146455,146456],{},"index.css：",[23,146458,146459],{"className":128184,"code":146201,"language":128186,"meta":28,"style":28},[30,146460,146461,146465,146471,146485,146489,146495,146509],{"__ignoreMap":28},[33,146462,146463],{"class":35,"line":36},[33,146464,146208],{"class":87},[33,146466,146467,146469],{"class":35,"line":43},[33,146468,52280],{"class":52945},[33,146470,17228],{"class":59},[33,146472,146473,146475,146477,146479,146481,146483],{"class":35,"line":130},[33,146474,72268],{"class":39},[33,146476,53082],{"class":59},[33,146478,146223],{"class":39},[33,146480,2146],{"class":63},[33,146482,132047],{"class":59},[33,146484,146230],{"class":87},[33,146486,146487],{"class":35,"line":146},[33,146488,3247],{"class":59},[33,146490,146491,146493],{"class":35,"line":267},[33,146492,132032],{"class":3632},[33,146494,17228],{"class":59},[33,146496,146497,146499,146501,146503,146505,146507],{"class":35,"line":275},[33,146498,72210],{"class":39},[33,146500,53082],{"class":59},[33,146502,2264],{"class":39},[33,146504,146251],{"class":63},[33,146506,132047],{"class":59},[33,146508,146256],{"class":87},[33,146510,146511],{"class":35,"line":392},[33,146512,3247],{"class":59},[19,146514,146198],{},[23,146516,146517],{"className":128184,"code":128588,"language":128186,"meta":28,"style":28},[30,146518,146519,146525,146537],{"__ignoreMap":28},[33,146520,146521,146523],{"class":35,"line":36},[33,146522,53445],{"class":52945},[33,146524,17228],{"class":59},[33,146526,146527,146529,146531,146533,146535],{"class":35,"line":43},[33,146528,72268],{"class":39},[33,146530,53082],{"class":59},[33,146532,2418],{"class":39},[33,146534,53137],{"class":63},[33,146536,2976],{"class":59},[33,146538,146539],{"class":35,"line":130},[33,146540,3247],{"class":59},[14,146542,146544],{"id":146543},"_214-响应式开发","21.4 响应式开发",[19,146546,146547],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3145,146549],{"style":128040,"src":146550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146552,146553],{},"做法：",[2822,146555,146556,146559],{},[165,146557,146558],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[165,146560,146561],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3145,146563],{"style":128040,"src":146564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146566,146567],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[633,146569,146571],{"id":146570},"_2141-简单代码示范","21.4.1 简单代码示范",[23,146573,146574],{"className":128184,"code":146201,"language":128186,"meta":28,"style":28},[30,146575,146576,146580,146586,146600,146604,146610,146624],{"__ignoreMap":28},[33,146577,146578],{"class":35,"line":36},[33,146579,146208],{"class":87},[33,146581,146582,146584],{"class":35,"line":43},[33,146583,52280],{"class":52945},[33,146585,17228],{"class":59},[33,146587,146588,146590,146592,146594,146596,146598],{"class":35,"line":130},[33,146589,72268],{"class":39},[33,146591,53082],{"class":59},[33,146593,146223],{"class":39},[33,146595,2146],{"class":63},[33,146597,132047],{"class":59},[33,146599,146230],{"class":87},[33,146601,146602],{"class":35,"line":146},[33,146603,3247],{"class":59},[33,146605,146606,146608],{"class":35,"line":267},[33,146607,132032],{"class":3632},[33,146609,17228],{"class":59},[33,146611,146612,146614,146616,146618,146620,146622],{"class":35,"line":275},[33,146613,72210],{"class":39},[33,146615,53082],{"class":59},[33,146617,2264],{"class":39},[33,146619,146251],{"class":63},[33,146621,132047],{"class":59},[33,146623,146256],{"class":87},[33,146625,146626],{"class":35,"line":392},[33,146627,3247],{"class":59},[19,146629,146630],{},"父盒子一般命名为container",[633,146632,146634],{"id":146633},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146636,146637,146638],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[1968,146639,146640],{},"使得 Web 开发更加快捷",[2822,146642,146643],{},[165,146644,146645,146646],{},"官网：",[1968,146647,146648],{},[2057,146649,146650],{"href":146650,"rel":146651},"http:\u002F\u002Fgetbootstrap.com\u002F",[25520],[19,146653,146654],{},"可以直接去官网拿现成的东西",[162,146656,146657],{},[165,146658,146659],{},"Bootstrap的使用",[19,146661,146662],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146664,146665],{},"Bootstrap 使用四步曲：",[19,146667,146668,146671],{},[1968,146669,146670],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3145,146673],{"style":128040,"src":146674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146676,146677],{},"打开Bootstrap官网，然后下载",[3145,146679],{"style":128040,"src":146680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3145,146682],{"style":128040,"src":146683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146685,146686],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146688,146689],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146691,146692],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3145,146694],{"style":128040,"src":146695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[23,146697,146699],{"className":128184,"code":146698,"language":128186,"meta":28,"style":28},".center {\n  color: red;\n}\n",[30,146700,146701,146707,146717],{"__ignoreMap":28},[33,146702,146703,146705],{"class":35,"line":36},[33,146704,128475],{"class":3632},[33,146706,17228],{"class":59},[33,146708,146709,146711,146713,146715],{"class":35,"line":43},[33,146710,72547],{"class":39},[33,146712,53082],{"class":59},[33,146714,59064],{"class":39},[33,146716,2976],{"class":59},[33,146718,146719],{"class":35,"line":130},[33,146720,3247],{"class":59},[19,146722,146723,146726],{},[30,146724,146725],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3145,146728],{"style":128040,"src":146729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3145,146731],{"style":128040,"src":146732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3145,146734],{"style":128040,"src":146735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146737,146738],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3145,146740],{"style":128040,"src":146741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146743,146744],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[162,146746,146747],{"start":43},[165,146748,146749],{},"布局容器",[3145,146751],{"style":128040,"src":146752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146754,146755],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146757,146758],{},"container-fluid用于移动式布局比较方便",[162,146760,146761],{"start":130},[165,146762,146763,146764],{},"bootstrap ",[1968,146765,146766],{},"栅格系统原理",[3145,146768],{"style":128040,"src":146769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[162,146771,146772],{"start":146},[165,146773,146774],{},[1968,146775,146776],{},"栅格选项参数",[3145,146778],{"style":128040,"src":146779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146781,146782],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146784,16291],{},[23,146786,146787],{"className":128184,"code":146698,"language":128186,"meta":28,"style":28},[30,146788,146789,146795,146805],{"__ignoreMap":28},[33,146790,146791,146793],{"class":35,"line":36},[33,146792,128475],{"class":3632},[33,146794,17228],{"class":59},[33,146796,146797,146799,146801,146803],{"class":35,"line":43},[33,146798,72547],{"class":39},[33,146800,53082],{"class":59},[33,146802,59064],{"class":39},[33,146804,2976],{"class":59},[33,146806,146807],{"class":35,"line":130},[33,146808,3247],{"class":59},[19,146810,137227],{},[3145,146812],{"style":128040,"src":146813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146815,146816],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146818,146819],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146821,146822],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146824,146825],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146827,146828],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146830,146831],{},"汇总展示说明：",[23,146833,146834],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,146835,146836,146840,146854,146858],{"__ignoreMap":28},[33,146837,146838],{"class":35,"line":36},[33,146839,132295],{"class":87},[33,146841,146842,146844,146846,146848,146850,146852],{"class":35,"line":43},[33,146843,2726],{"class":59},[33,146845,53256],{"class":52945},[33,146847,55131],{"class":3632},[33,146849,64],{"class":59},[33,146851,132308],{"class":117},[33,146853,52952],{"class":59},[33,146855,146856],{"class":35,"line":130},[33,146857,132315],{"class":59},[33,146859,146860,146862,146864],{"class":35,"line":146},[33,146861,53430],{"class":59},[33,146863,53256],{"class":52945},[33,146865,52952],{"class":59},[3145,146867],{"style":128040,"src":146868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146870,146871],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[23,146873,146874],{"className":128931,"code":132288,"language":128933,"meta":28,"style":28},[30,146875,146876,146880,146894,146898],{"__ignoreMap":28},[33,146877,146878],{"class":35,"line":36},[33,146879,132295],{"class":87},[33,146881,146882,146884,146886,146888,146890,146892],{"class":35,"line":43},[33,146883,2726],{"class":59},[33,146885,53256],{"class":52945},[33,146887,55131],{"class":3632},[33,146889,64],{"class":59},[33,146891,132308],{"class":117},[33,146893,52952],{"class":59},[33,146895,146896],{"class":35,"line":130},[33,146897,132315],{"class":59},[33,146899,146900,146902,146904],{"class":35,"line":146},[33,146901,53430],{"class":59},[33,146903,53256],{"class":52945},[33,146905,52952],{"class":59},[162,146907,146908],{"start":267},[165,146909,146910],{},[1968,146911,146912],{},"列嵌套",[3145,146914],{"style":128040,"src":146915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146917,146918],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146920,146921],{},"没加row内部这样：",[3145,146923],{"style":128040,"src":146924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146926,146927],{},"加上row之后内部为：",[3145,146929],{"style":128040,"src":146930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[162,146932,146933],{"start":275},[165,146934,146935],{},[1968,146936,146937],{},"列偏移",[3145,146939],{"style":128040,"src":146940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146942,146943],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146945,146946],{},"要加偏移量，即偏移份数",[19,146948,146949],{},"偏移的份数=12-两个盒子的份数",[162,146951,146952],{"start":392},[165,146953,146954],{},[1968,146955,146956],{},"列排序",[3145,146958],{"style":128040,"src":146959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146961,146962],{},"pull拉左；push推右",[162,146964,146965],{"start":406},[165,146966,146967],{},[1968,146968,146969],{},"响应式工具",[3145,146971],{"style":128040,"src":146972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146974,146975],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[633,146977,146979],{"id":146978},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146981,146982],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146984,146985],{},"ul {",[19,146987,146988],{},"list-style: none;",[19,146990,146991],{},"margin:0;",[19,146993,146994],{},"padding:0; }",[3145,146996],{"style":128040,"src":146997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3145,146999],{"style":128040,"src":147000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147002,147003],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147005,70531],{},[23,147007,147008],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,147009,147010,147016,147026],{"__ignoreMap":28},[33,147011,147012,147014],{"class":35,"line":36},[33,147013,132032],{"class":3632},[33,147015,17228],{"class":59},[33,147017,147018,147020,147022,147024],{"class":35,"line":43},[33,147019,132664],{"class":39},[33,147021,53082],{"class":59},[33,147023,25391],{"class":39},[33,147025,2976],{"class":59},[33,147027,147028],{"class":35,"line":130},[33,147029,3247],{"class":59},[19,147031,72095],{},[23,147033,147034],{"className":128184,"code":140854,"language":128186,"meta":28,"style":28},[30,147035,147036,147042,147052],{"__ignoreMap":28},[33,147037,147038,147040],{"class":35,"line":36},[33,147039,132032],{"class":3632},[33,147041,17228],{"class":59},[33,147043,147044,147046,147048,147050],{"class":35,"line":43},[33,147045,132664],{"class":39},[33,147047,53082],{"class":59},[33,147049,25391],{"class":39},[33,147051,2976],{"class":59},[33,147053,147054],{"class":35,"line":130},[33,147055,3247],{"class":59},[14,147057,147059],{"id":147058},"_215-swiper-插件使用","21.5 swiper 插件使用",[2822,147061,147062,147065,147068],{},[165,147063,147064],{},"下载需要的css和js文件html页面中 引入相关文件",[165,147066,147067],{},"官网找到类似案例，复制html结构，css样式 js 语法",[165,147069,147070],{},"根据需求定制修改模块",[3145,147072],{"style":128040,"src":147073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147075,147076],{},"解压后将这两部分放到项目中",[3145,147078],{"style":128040,"src":147079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147081,147082],{},"这个插件可以帮助我们实现轮播图效果",[19,147084,147085],{},"用法：",[3145,147087],{"style":128040,"src":147088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147090,147091],{},"找到自己喜欢的",[3145,147093],{"style":128040,"src":147094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147096,147097],{},"右键，查看网页源代码",[3145,147099],{"style":128040,"src":147100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147102,147103],{},"复制人家的结构内容",[19,147105,147106],{},"然后去看API文档：",[3145,147108],{"style":128040,"src":147109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147111,147112],{},"可以看看如何修改样式",[19,147114,147115],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1729,147117,147118],{},"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":43,"depth":43,"links":147120},[147121,147126,147130,147135,147140],{"id":145921,"depth":43,"text":145922,"children":147122},[147123,147124,147125],{"id":145925,"depth":130,"text":145926},{"id":145935,"depth":130,"text":145936},{"id":146030,"depth":130,"text":146031},{"id":146045,"depth":43,"text":146046,"children":147127},[147128,147129],{"id":146067,"depth":130,"text":146068},{"id":146083,"depth":130,"text":146084},{"id":146158,"depth":43,"text":146159,"children":147131},[147132,147133,147134],{"id":146171,"depth":130,"text":146172},{"id":146395,"depth":130,"text":146396},{"id":146402,"depth":130,"text":146403},{"id":146543,"depth":43,"text":146544,"children":147136},[147137,147138,147139],{"id":146570,"depth":130,"text":146571},{"id":146633,"depth":130,"text":146634},{"id":146978,"depth":130,"text":146979},{"id":147058,"depth":43,"text":147059},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145913,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147147,"title":147148,"body":147149,"description":1751,"extension":1752,"meta":147369,"navigation":126,"path":147370,"seo":147371,"stem":147372,"__hash__":147373},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147150,"toc":147365},[147151,147154,147158,147161,147176,147181,147184,147189,147224,147229,147241,147246,147259,147264,147281,147286,147306,147311,147329,147332,147335,147338,147341,147345,147348,147351,147354,147357,147360,147363],[10,147152,147148],{"id":147153},"_22-代码提交与新型相对单位",[14,147155,147157],{"id":147156},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147159,147160],{},"法1：",[162,147162,147163,147170,147173],{},[165,147164,147165,147166],{},"登录网站注册：",[2057,147167,147168],{"href":147168,"rel":147169},"https:\u002F\u002Fgitee.com\u002F",[25520],[165,147171,147172],{},"码云创建新的仓库",[165,147174,147175],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2822,147177,147178],{},[165,147179,147180],{},"在网站根目录右键-- Git Bash Here",[3145,147182],{"style":128040,"src":147183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2822,147185,147186],{},[165,147187,147188],{},"如果是第一次利用git提交，请配置好全局选项",[23,147190,147192],{"className":118931,"code":147191,"language":118933,"meta":28,"style":28},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[30,147193,147194,147210],{"__ignoreMap":28},[33,147195,147196,147199,147201,147204,147207],{"class":35,"line":36},[33,147197,147198],{"class":3632},"git",[33,147200,121354],{"class":117},[33,147202,147203],{"class":39}," --global",[33,147205,147206],{"class":117}," user.name",[33,147208,147209],{"class":117}," \"你的名字\"\n",[33,147211,147212,147214,147216,147218,147221],{"class":35,"line":43},[33,147213,147198],{"class":3632},[33,147215,121354],{"class":117},[33,147217,147203],{"class":39},[33,147219,147220],{"class":117}," user.email",[33,147222,147223],{"class":117}," \"你的邮箱\"\n",[2822,147225,147226],{},[165,147227,147228],{},"初始化仓库",[23,147230,147232],{"className":118931,"code":147231,"language":118933,"meta":28,"style":28},"git init\n",[30,147233,147234],{"__ignoreMap":28},[33,147235,147236,147238],{"class":35,"line":36},[33,147237,147198],{"class":3632},[33,147239,147240],{"class":117}," init\n",[2822,147242,147243],{},[165,147244,147245],{},"把本地文件放到暂存区",[23,147247,147249],{"className":118931,"code":147248,"language":118933,"meta":28,"style":28},"git add .\n",[30,147250,147251],{"__ignoreMap":28},[33,147252,147253,147255,147257],{"class":35,"line":36},[33,147254,147198],{"class":3632},[33,147256,6870],{"class":117},[33,147258,30396],{"class":117},[2822,147260,147261],{},[165,147262,147263],{},"把本地文件放到本地仓库里面",[23,147265,147267],{"className":118931,"code":147266,"language":118933,"meta":28,"style":28},"git commit -m \"first commit\"\n",[30,147268,147269],{"__ignoreMap":28},[33,147270,147271,147273,147276,147278],{"class":35,"line":36},[33,147272,147198],{"class":3632},[33,147274,147275],{"class":117}," commit",[33,147277,102521],{"class":39},[33,147279,147280],{"class":117}," \"first commit\"\n",[2822,147282,147283],{},[165,147284,147285],{},"链接远程仓库",[23,147287,147289],{"className":118931,"code":147288,"language":118933,"meta":28,"style":28},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[30,147290,147291],{"__ignoreMap":28},[33,147292,147293,147295,147298,147300,147303],{"class":35,"line":36},[33,147294,147198],{"class":3632},[33,147296,147297],{"class":117}," remote",[33,147299,6870],{"class":117},[33,147301,147302],{"class":117}," origin",[33,147304,147305],{"class":117}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2822,147307,147308],{},[165,147309,147310],{},"把本地仓库的文件推送到远程仓库 push",[23,147312,147314],{"className":118931,"code":147313,"language":118933,"meta":28,"style":28},"git push -u origin master\n",[30,147315,147316],{"__ignoreMap":28},[33,147317,147318,147320,147322,147324,147326],{"class":35,"line":36},[33,147319,147198],{"class":3632},[33,147321,30671],{"class":117},[33,147323,29946],{"class":39},[33,147325,147302],{"class":117},[33,147327,147328],{"class":117}," master\n",[3145,147330],{"style":128040,"src":147331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147333,147334],{},"上方方法暂未实现，后边学完git后在整",[19,147336,147337],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3145,147339],{"style":128040,"src":147340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147342,147344],{"id":147343},"_222-新型相对单位","22.2 新型相对单位",[3145,147346],{"style":128040,"src":147347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3145,147349],{"style":128040,"src":147350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147352,147353],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147355,147356],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3145,147358],{"style":128040,"src":147359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147361,147362],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1729,147364,25613],{},{"title":28,"searchDepth":43,"depth":43,"links":147366},[147367,147368],{"id":147156,"depth":43,"text":147157},{"id":147343,"depth":43,"text":147344},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147148,"description":1751},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147375,"title":147376,"body":147377,"description":147381,"extension":1752,"meta":147382,"navigation":126,"path":147383,"seo":147384,"stem":147385,"__hash__":147386},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147378,"toc":147379},[],{"title":28,"searchDepth":43,"depth":43,"links":147380},[],"自己正经开始学编程的第一门语言！",{"category":94478},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147376,"description":147381},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147388,"title":147389,"body":147390,"description":1751,"extension":1752,"meta":148534,"navigation":126,"path":148535,"seo":148536,"stem":148537,"__hash__":148538},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147391,"toc":148510},[147392,147395,147399,147402,147405,147430,147433,147439,147443,147446,147473,147476,147516,147519,147531,147534,147540,147544,147548,147575,147592,147599,147603,147606,147632,147635,147639,147642,147682,147685,147702,147708,147712,147717,147761,147764,147782,147785,147853,147857,147864,147867,147882,147885,147894,147897,147908,147911,147920,147923,147940,147943,147958,147962,147966,147969,147971,147991,147995,147998,148001,148012,148015,148021,148025,148031,148058,148061,148073,148076,148087,148090,148096,148100,148106,148156,148159,148198,148201,148234,148237,148271,148275,148278,148298,148301,148337,148340,148353,148357,148361,148367,148370,148383,148387,148390,148396,148399,148403,148406,148409,148458,148462,148478,148484,148491,148497,148507],[10,147393,147389],{"id":147394},"_1-python环境与第一个程序",[14,147396,147398],{"id":147397},"_11-什么是python","1.1 什么是Python",[19,147400,147401],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147403,147404],{},"理解 Python 时抓住三个关键词：",[162,147406,147407,147410,147413],{},[165,147408,147409],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[165,147411,147412],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[165,147414,147415,147416,2031,147419,2031,147422,2031,147425,2031,147427,1628],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[30,147417,147418],{},"os",[30,147420,147421],{},"sys",[30,147423,147424],{},"json",[30,147426,59503],{},[30,147428,147429],{},"datetime",[19,147431,147432],{},"Python 程序的运行链路：",[23,147434,147437],{"className":147435,"code":147436,"language":6848,"meta":28},[6846],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[30,147438,147436],{"__ignoreMap":28},[14,147440,147442],{"id":147441},"_12-python解释器","1.2 Python解释器",[19,147444,147445],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[23,147447,147449],{"className":25477,"code":147448,"language":25479,"meta":28,"style":28},"python --version\npython3 --version\npython\npython3\n",[30,147450,147451,147457,147463,147468],{"__ignoreMap":28},[33,147452,147453,147455],{"class":35,"line":36},[33,147454,27],{"class":3632},[33,147456,27949],{"class":39},[33,147458,147459,147461],{"class":35,"line":43},[33,147460,102518],{"class":3632},[33,147462,27949],{"class":39},[33,147464,147465],{"class":35,"line":130},[33,147466,147467],{"class":3632},"python\n",[33,147469,147470],{"class":35,"line":146},[33,147471,147472],{"class":3632},"python3\n",[19,147474,147475],{},"进入交互模式后，可以直接输入表达式：",[23,147477,147479],{"className":25,"code":147478,"language":27,"meta":28,"style":28},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[30,147480,147481,147492,147497,147511],{"__ignoreMap":28},[33,147482,147483,147486,147488,147490],{"class":35,"line":36},[33,147484,147485],{"class":63},">>>",[33,147487,26774],{"class":39},[33,147489,47212],{"class":63},[33,147491,49368],{"class":39},[33,147493,147494],{"class":35,"line":43},[33,147495,147496],{"class":39},"3\n",[33,147498,147499,147501,147504,147506,147509],{"class":35,"line":130},[33,147500,147485],{"class":63},[33,147502,147503],{"class":39}," print",[33,147505,109],{"class":59},[33,147507,147508],{"class":117},"\"hello python\"",[33,147510,157],{"class":59},[33,147512,147513],{"class":35,"line":146},[33,147514,147515],{"class":59},"hello python\n",[19,147517,147518],{},"退出交互模式：",[23,147520,147522],{"className":25,"code":147521,"language":27,"meta":28,"style":28},"exit()\n",[30,147523,147524],{"__ignoreMap":28},[33,147525,147526,147529],{"class":35,"line":36},[33,147527,147528],{"class":39},"exit",[33,147530,943],{"class":59},[19,147532,147533],{},"或使用快捷键：",[23,147535,147538],{"className":147536,"code":147537,"language":6848,"meta":28},[6846],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[30,147539,147537],{"__ignoreMap":28},[14,147541,147543],{"id":147542},"_13-安装python","1.3 安装Python",[633,147545,147547],{"id":147546},"_131-windows安装","1.3.1 Windows安装",[162,147549,147550,147557,147560,147566,147572],{},[165,147551,147552,147553],{},"打开 Python 官网：",[2057,147554,147555],{"href":147555,"rel":147556},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25520],[165,147558,147559],{},"下载 Windows Installer。",[165,147561,147562,147563,1628],{},"安装时勾选 ",[30,147564,147565],{},"Add Python to PATH",[165,147567,147568,147569,1628],{},"点击 ",[30,147570,147571],{},"Install Now",[165,147573,147574],{},"安装完成后打开命令提示符验证：",[23,147576,147578],{"className":25477,"code":147577,"language":25479,"meta":28,"style":28},"python --version\npip --version\n",[30,147579,147580,147586],{"__ignoreMap":28},[33,147581,147582,147584],{"class":35,"line":36},[33,147583,27],{"class":3632},[33,147585,27949],{"class":39},[33,147587,147588,147590],{"class":35,"line":43},[33,147589,25486],{"class":3632},[33,147591,27949],{"class":39},[19,147593,147594,147595,147598],{},"如果提示 ",[30,147596,147597],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[633,147600,147602],{"id":147601},"_132-macos安装","1.3.2 macOS安装",[19,147604,147605],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[23,147607,147609],{"className":25477,"code":147608,"language":25479,"meta":28,"style":28},"brew install python\npython3 --version\npip3 --version\n",[30,147610,147611,147620,147626],{"__ignoreMap":28},[33,147612,147613,147616,147618],{"class":35,"line":36},[33,147614,147615],{"class":3632},"brew",[33,147617,25489],{"class":117},[33,147619,125951],{"class":117},[33,147621,147622,147624],{"class":35,"line":43},[33,147623,102518],{"class":3632},[33,147625,27949],{"class":39},[33,147627,147628,147630],{"class":35,"line":130},[33,147629,121335],{"class":3632},[33,147631,27949],{"class":39},[19,147633,147634],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[633,147636,147638],{"id":147637},"_133-linux安装","1.3.3 Linux安装",[19,147640,147641],{},"Ubuntu\u002FDebian：",[23,147643,147645],{"className":25477,"code":147644,"language":25479,"meta":28,"style":28},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[30,147646,147647,147655,147670,147676],{"__ignoreMap":28},[33,147648,147649,147651,147653],{"class":35,"line":36},[33,147650,26232],{"class":3632},[33,147652,118952],{"class":117},[33,147654,27898],{"class":117},[33,147656,147657,147659,147661,147663,147665,147667],{"class":35,"line":43},[33,147658,26232],{"class":3632},[33,147660,118952],{"class":117},[33,147662,25489],{"class":117},[33,147664,106041],{"class":117},[33,147666,102437],{"class":117},[33,147668,147669],{"class":117}," python3-venv\n",[33,147671,147672,147674],{"class":35,"line":130},[33,147673,102518],{"class":3632},[33,147675,27949],{"class":39},[33,147677,147678,147680],{"class":35,"line":146},[33,147679,121335],{"class":3632},[33,147681,27949],{"class":39},[19,147683,147684],{},"Fedora：",[23,147686,147688],{"className":25477,"code":147687,"language":25479,"meta":28,"style":28},"sudo dnf install python3 python3-pip\n",[30,147689,147690],{"__ignoreMap":28},[33,147691,147692,147694,147696,147698,147700],{"class":35,"line":36},[33,147693,26232],{"class":3632},[33,147695,27971],{"class":117},[33,147697,25489],{"class":117},[33,147699,106041],{"class":117},[33,147701,121400],{"class":117},[19,147703,147704,147705,147707],{},"Linux 上通常使用 ",[30,147706,102518],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147709,147711],{"id":147710},"_14-pip包管理器","1.4 pip包管理器",[19,147713,147714,147716],{},[30,147715,25486],{}," 用来安装第三方库。",[23,147718,147720],{"className":25477,"code":147719,"language":25479,"meta":28,"style":28},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[30,147721,147722,147731,147740,147748,147754],{"__ignoreMap":28},[33,147723,147724,147726,147728],{"class":35,"line":36},[33,147725,25486],{"class":3632},[33,147727,25489],{"class":117},[33,147729,147730],{"class":117}," requests\n",[33,147732,147733,147735,147738],{"class":35,"line":43},[33,147734,25486],{"class":3632},[33,147736,147737],{"class":117}," uninstall",[33,147739,147730],{"class":117},[33,147741,147742,147744,147746],{"class":35,"line":130},[33,147743,25486],{"class":3632},[33,147745,119209],{"class":117},[33,147747,147730],{"class":117},[33,147749,147750,147752],{"class":35,"line":146},[33,147751,25486],{"class":3632},[33,147753,120590],{"class":117},[33,147755,147756,147758],{"class":35,"line":267},[33,147757,25486],{"class":3632},[33,147759,147760],{"class":117}," freeze\n",[19,147762,147763],{},"国内网络较慢时可以临时使用镜像：",[23,147765,147767],{"className":25477,"code":147766,"language":25479,"meta":28,"style":28},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,147768,147769],{"__ignoreMap":28},[33,147770,147771,147773,147775,147778,147780],{"class":35,"line":36},[33,147772,25486],{"class":3632},[33,147774,25489],{"class":117},[33,147776,147777],{"class":117}," requests",[33,147779,28086],{"class":39},[33,147781,121363],{"class":117},[19,147783,147784],{},"常见第三方库：",[1956,147786,147787,147796],{},[1959,147788,147789],{},[1962,147790,147791,147794],{},[1965,147792,147793],{},"库",[1965,147795,104334],{},[2003,147797,147798,147806,147813,147821,147829,147837,147845],{},[1962,147799,147800,147803],{},[2008,147801,147802],{},"requests",[2008,147804,147805],{},"网络请求",[1962,147807,147808,147810],{},[2008,147809,102265],{},[2008,147811,147812],{},"数值计算",[1962,147814,147815,147818],{},[2008,147816,147817],{},"pandas",[2008,147819,147820],{},"表格数据处理",[1962,147822,147823,147826],{},[2008,147824,147825],{},"matplotlib",[2008,147827,147828],{},"绘图",[1962,147830,147831,147834],{},[2008,147832,147833],{},"pyecharts",[2008,147835,147836],{},"ECharts 图表",[1962,147838,147839,147842],{},[2008,147840,147841],{},"flask",[2008,147843,147844],{},"Web 后端",[1962,147846,147847,147850],{},[2008,147848,147849],{},"pytest",[2008,147851,147852],{},"自动化测试",[14,147854,147856],{"id":147855},"_15-虚拟环境","1.5 虚拟环境",[19,147858,147859,147860,147863],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[30,147861,147862],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147865,147866],{},"创建虚拟环境：",[23,147868,147870],{"className":25477,"code":147869,"language":25479,"meta":28,"style":28},"python -m venv .venv\n",[30,147871,147872],{"__ignoreMap":28},[33,147873,147874,147876,147878,147880],{"class":35,"line":36},[33,147875,27],{"class":3632},[33,147877,102521],{"class":39},[33,147879,102524],{"class":117},[33,147881,102527],{"class":117},[19,147883,147884],{},"Windows 激活：",[23,147886,147888],{"className":25477,"code":147887,"language":25479,"meta":28,"style":28},".venv\\Scripts\\activate\n",[30,147889,147890],{"__ignoreMap":28},[33,147891,147892],{"class":35,"line":36},[33,147893,147887],{"class":3632},[19,147895,147896],{},"macOS\u002FLinux 激活：",[23,147898,147900],{"className":25477,"code":147899,"language":25479,"meta":28,"style":28},"source .venv\u002Fbin\u002Factivate\n",[30,147901,147902],{"__ignoreMap":28},[33,147903,147904,147906],{"class":35,"line":36},[33,147905,102532],{"class":39},[33,147907,102535],{"class":117},[19,147909,147910],{},"退出虚拟环境：",[23,147912,147914],{"className":25477,"code":147913,"language":25479,"meta":28,"style":28},"deactivate\n",[30,147915,147916],{"__ignoreMap":28},[33,147917,147918],{"class":35,"line":36},[33,147919,147913],{"class":3632},[19,147921,147922],{},"保存依赖：",[23,147924,147926],{"className":25477,"code":147925,"language":25479,"meta":28,"style":28},"pip freeze > requirements.txt\n",[30,147927,147928],{"__ignoreMap":28},[33,147929,147930,147932,147935,147937],{"class":35,"line":36},[33,147931,25486],{"class":3632},[33,147933,147934],{"class":117}," freeze",[33,147936,27878],{"class":63},[33,147938,147939],{"class":117}," requirements.txt\n",[19,147941,147942],{},"安装依赖：",[23,147944,147946],{"className":25477,"code":147945,"language":25479,"meta":28,"style":28},"pip install -r requirements.txt\n",[30,147947,147948],{"__ignoreMap":28},[33,147949,147950,147952,147954,147956],{"class":35,"line":36},[33,147951,25486],{"class":3632},[33,147953,25489],{"class":117},[33,147955,121274],{"class":39},[33,147957,147939],{"class":117},[14,147959,147961],{"id":147960},"_16-开发工具","1.6 开发工具",[633,147963,147965],{"id":147964},"_161-pycharm","1.6.1 PyCharm",[19,147967,147968],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147970,123696],{},[162,147972,147973,147976,147979,147985,147988],{},[165,147974,147975],{},"New Project：创建项目。",[165,147977,147978],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[165,147980,147981,147982,127615],{},"New Python File：创建 ",[30,147983,147984],{},".py",[165,147986,147987],{},"Run：运行当前文件。",[165,147989,147990],{},"Debug：断点调试。",[633,147992,147994],{"id":147993},"_162-vs-code","1.6.2 VS Code",[19,147996,147997],{},"VS Code 轻量，适合后续多语言开发。",[19,147999,148000],{},"建议安装插件：",[162,148002,148003,148006,148009],{},[165,148004,148005],{},"Python。",[165,148007,148008],{},"Pylance。",[165,148010,148011],{},"Jupyter。",[19,148013,148014],{},"选择解释器：",[23,148016,148019],{"className":148017,"code":148018,"language":6848,"meta":28},[6846],"Ctrl + Shift + P -> Python: Select Interpreter\n",[30,148020,148018],{"__ignoreMap":28},[14,148022,148024],{"id":148023},"_17-第一个python程序","1.7 第一个Python程序",[19,148026,148027,148028,26274],{},"创建文件 ",[30,148029,148030],{},"hello.py",[23,148032,148034],{"className":25,"code":148033,"language":27,"meta":28,"style":28},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[30,148035,148036,148047],{"__ignoreMap":28},[33,148037,148038,148040,148042,148045],{"class":35,"line":36},[33,148039,72],{"class":39},[33,148041,109],{"class":59},[33,148043,148044],{"class":117},"\"Hello World\"",[33,148046,157],{"class":59},[33,148048,148049,148051,148053,148056],{"class":35,"line":43},[33,148050,72],{"class":39},[33,148052,109],{"class":59},[33,148054,148055],{"class":117},"\"你好，Python\"",[33,148057,157],{"class":59},[19,148059,148060],{},"在终端运行：",[23,148062,148064],{"className":25477,"code":148063,"language":25479,"meta":28,"style":28},"python hello.py\n",[30,148065,148066],{"__ignoreMap":28},[33,148067,148068,148070],{"class":35,"line":36},[33,148069,27],{"class":3632},[33,148071,148072],{"class":117}," hello.py\n",[19,148074,148075],{},"或：",[23,148077,148079],{"className":25477,"code":148078,"language":25479,"meta":28,"style":28},"python3 hello.py\n",[30,148080,148081],{"__ignoreMap":28},[33,148082,148083,148085],{"class":35,"line":36},[33,148084,102518],{"class":3632},[33,148086,148072],{"class":117},[19,148088,148089],{},"输出：",[23,148091,148094],{"className":148092,"code":148093,"language":6848,"meta":28},[6846],"Hello World\n你好，Python\n",[30,148095,148093],{"__ignoreMap":28},[14,148097,148099],{"id":148098},"_18-print函数","1.8 print函数",[19,148101,148102,148105],{},[30,148103,148104],{},"print()"," 用来输出内容。",[23,148107,148109],{"className":25,"code":148108,"language":27,"meta":28,"style":28},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[30,148110,148111,148121,148131,148141],{"__ignoreMap":28},[33,148112,148113,148115,148117,148119],{"class":35,"line":36},[33,148114,72],{"class":39},[33,148116,109],{"class":59},[33,148118,7504],{"class":117},[33,148120,157],{"class":59},[33,148122,148123,148125,148127,148129],{"class":35,"line":43},[33,148124,72],{"class":39},[33,148126,109],{"class":59},[33,148128,2129],{"class":39},[33,148130,157],{"class":59},[33,148132,148133,148135,148137,148139],{"class":35,"line":130},[33,148134,72],{"class":39},[33,148136,109],{"class":59},[33,148138,1871],{"class":39},[33,148140,157],{"class":59},[33,148142,148143,148145,148147,148150,148152,148154],{"class":35,"line":146},[33,148144,72],{"class":39},[33,148146,109],{"class":59},[33,148148,148149],{"class":117},"\"年龄:\"",[33,148151,14093],{"class":59},[33,148153,2467],{"class":39},[33,148155,157],{"class":59},[19,148157,148158],{},"多个内容用逗号隔开，默认中间加空格：",[23,148160,148162],{"className":25,"code":148161,"language":27,"meta":28,"style":28},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[30,148163,148164,148173,148181],{"__ignoreMap":28},[33,148165,148166,148168,148170],{"class":35,"line":36},[33,148167,968],{"class":59},[33,148169,64],{"class":63},[33,148171,148172],{"class":117}," \"张三\"\n",[33,148174,148175,148177,148179],{"class":35,"line":43},[33,148176,60],{"class":59},[33,148178,64],{"class":63},[33,148180,67],{"class":39},[33,148182,148183,148185,148187,148190,148193,148195],{"class":35,"line":130},[33,148184,72],{"class":39},[33,148186,109],{"class":59},[33,148188,148189],{"class":117},"\"姓名:\"",[33,148191,148192],{"class":59},", name, ",[33,148194,148149],{"class":117},[33,148196,148197],{"class":59},", age)\n",[19,148199,148200],{},"修改分隔符：",[23,148202,148204],{"className":25,"code":148203,"language":27,"meta":28,"style":28},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[30,148205,148206],{"__ignoreMap":28},[33,148207,148208,148210,148212,148215,148217,148219,148221,148223,148225,148228,148230,148232],{"class":35,"line":36},[33,148209,72],{"class":39},[33,148211,109],{"class":59},[33,148213,148214],{"class":117},"\"2024\"",[33,148216,14093],{"class":59},[33,148218,55960],{"class":117},[33,148220,14093],{"class":59},[33,148222,55960],{"class":117},[33,148224,14093],{"class":59},[33,148226,148227],{"class":6877},"sep",[33,148229,64],{"class":63},[33,148231,34130],{"class":117},[33,148233,157],{"class":59},[19,148235,148236],{},"修改结尾符：",[23,148238,148240],{"className":25,"code":148239,"language":27,"meta":28,"style":28},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[30,148241,148242,148260],{"__ignoreMap":28},[33,148243,148244,148246,148248,148250,148252,148254,148256,148258],{"class":35,"line":36},[33,148245,72],{"class":39},[33,148247,109],{"class":59},[33,148249,7504],{"class":117},[33,148251,14093],{"class":59},[33,148253,47447],{"class":6877},[33,148255,64],{"class":63},[33,148257,6020],{"class":117},[33,148259,157],{"class":59},[33,148261,148262,148264,148266,148269],{"class":35,"line":43},[33,148263,72],{"class":39},[33,148265,109],{"class":59},[33,148267,148268],{"class":117},"\"python\"",[33,148270,157],{"class":59},[14,148272,148274],{"id":148273},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148276,148277],{},"交互运行适合临时验证：",[23,148279,148281],{"className":25,"code":148280,"language":27,"meta":28,"style":28},">>> 10 * 3\n30\n",[30,148282,148283,148293],{"__ignoreMap":28},[33,148284,148285,148287,148289,148291],{"class":35,"line":36},[33,148286,147485],{"class":63},[33,148288,3706],{"class":39},[33,148290,8178],{"class":63},[33,148292,121671],{"class":39},[33,148294,148295],{"class":35,"line":43},[33,148296,148297],{"class":39},"30\n",[19,148299,148300],{},"脚本运行适合保存程序：",[23,148302,148304],{"className":25,"code":148303,"language":27,"meta":28,"style":28},"price = 8\ncount = 5\nprint(price * count)\n",[30,148305,148306,148316,148325],{"__ignoreMap":28},[33,148307,148308,148311,148313],{"class":35,"line":36},[33,148309,148310],{"class":59},"price ",[33,148312,64],{"class":63},[33,148314,148315],{"class":39}," 8\n",[33,148317,148318,148321,148323],{"class":35,"line":43},[33,148319,148320],{"class":59},"count ",[33,148322,64],{"class":63},[33,148324,56071],{"class":39},[33,148326,148327,148329,148332,148334],{"class":35,"line":130},[33,148328,72],{"class":39},[33,148330,148331],{"class":59},"(price ",[33,148333,1540],{"class":63},[33,148335,148336],{"class":59}," count)\n",[19,148338,148339],{},"实际学习中推荐：",[162,148341,148342,148345,148350],{},[165,148343,148344],{},"临时试一个语法，用交互模式。",[165,148346,148347,148348,127615],{},"写完整练习，用 ",[30,148349,147984],{},[165,148351,148352],{},"写项目，用独立目录和虚拟环境。",[14,148354,148356],{"id":148355},"_110-常见错误","1.10 常见错误",[633,148358,148360],{"id":148359},"_1101-命令找不到","1.10.1 命令找不到",[23,148362,148365],{"className":148363,"code":148364,"language":6848,"meta":28},[6846],"python: command not found\n",[30,148366,148364],{"__ignoreMap":28},[19,148368,148369],{},"原因：",[162,148371,148372,148375,148378],{},[165,148373,148374],{},"没安装 Python。",[165,148376,148377],{},"PATH 没配置。",[165,148379,148380,148381,1628],{},"Linux\u002FmacOS 应该使用 ",[30,148382,102518],{},[633,148384,148386],{"id":148385},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148388,148389],{},"不要把文件命名为：",[23,148391,148394],{"className":148392,"code":148393,"language":6848,"meta":28},[6846],"random.py\njson.py\ntime.py\nrequests.py\n",[30,148395,148393],{"__ignoreMap":28},[19,148397,148398],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[633,148400,148402],{"id":148401},"_1103-中文乱码","1.10.3 中文乱码",[19,148404,148405],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148407,148408],{},"如果读写文件出现乱码，要明确指定编码：",[23,148410,148412],{"className":25,"code":148411,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[30,148413,148414,148448],{"__ignoreMap":28},[33,148415,148416,148418,148421,148423,148426,148428,148431,148433,148436,148438,148441,148443,148445],{"class":35,"line":36},[33,148417,109471],{"class":63},[33,148419,148420],{"class":39}," open",[33,148422,109],{"class":59},[33,148424,148425],{"class":117},"\"data.txt\"",[33,148427,14093],{"class":59},[33,148429,148430],{"class":117},"\"r\"",[33,148432,14093],{"class":59},[33,148434,148435],{"class":6877},"encoding",[33,148437,64],{"class":63},[33,148439,148440],{"class":117},"\"utf-8\"",[33,148442,15372],{"class":59},[33,148444,33033],{"class":63},[33,148446,148447],{"class":59}," f:\n",[33,148449,148450,148453,148455],{"class":35,"line":43},[33,148451,148452],{"class":59},"    content ",[33,148454,64],{"class":63},[33,148456,148457],{"class":59}," f.read()\n",[14,148459,148461],{"id":148460},"_111-本章练习","1.11 本章练习",[162,148463,148464,148467,148473],{},[165,148465,148466],{},"安装 Python，并在终端输出版本号。",[165,148468,148469,148470,148472],{},"新建 ",[30,148471,148030],{},"，输出自己的姓名、年龄、学习目标。",[165,148474,106004,148475,148477],{},[30,148476,148104],{}," 输出下面格式：",[23,148479,148482],{"className":148480,"code":148481,"language":6848,"meta":28},[6846],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[30,148483,148481],{"__ignoreMap":28},[162,148485,148486],{"start":146},[165,148487,106004,148488,148490],{},[30,148489,148227],{}," 输出日期：",[23,148492,148495],{"className":148493,"code":148494,"language":6848,"meta":28},[6846],"2024-10-10\n",[30,148496,148494],{"__ignoreMap":28},[162,148498,148499],{"start":267},[165,148500,106004,148501,148503,148504,148506],{},[30,148502,47447],{}," 让两次 ",[30,148505,148104],{}," 输出在同一行。",[1729,148508,148509],{},"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":43,"depth":43,"links":148511},[148512,148513,148514,148519,148520,148521,148525,148526,148527,148528,148533],{"id":147397,"depth":43,"text":147398},{"id":147441,"depth":43,"text":147442},{"id":147542,"depth":43,"text":147543,"children":148515},[148516,148517,148518],{"id":147546,"depth":130,"text":147547},{"id":147601,"depth":130,"text":147602},{"id":147637,"depth":130,"text":147638},{"id":147710,"depth":43,"text":147711},{"id":147855,"depth":43,"text":147856},{"id":147960,"depth":43,"text":147961,"children":148522},[148523,148524],{"id":147964,"depth":130,"text":147965},{"id":147993,"depth":130,"text":147994},{"id":148023,"depth":43,"text":148024},{"id":148098,"depth":43,"text":148099},{"id":148273,"depth":43,"text":148274},{"id":148355,"depth":43,"text":148356,"children":148529},[148530,148531,148532],{"id":148359,"depth":130,"text":148360},{"id":148385,"depth":130,"text":148386},{"id":148401,"depth":130,"text":148402},{"id":148460,"depth":43,"text":148461},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147389,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148540,"title":148541,"body":148542,"description":1751,"extension":1752,"meta":150946,"navigation":126,"path":150947,"seo":150948,"stem":150949,"__hash__":150950},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148543,"toc":150931},[148544,148547,148551,148554,148557,148574,148577,148619,148622,148626,148629,148632,148669,148672,148706,148709,148801,148805,148819,148822,148849,148852,148856,148959,148966,148969,148986,148990,148997,149186,149189,149262,149266,149269,149353,149356,149388,149392,149596,149599,149603,149609,149711,149714,149970,149974,149977,149980,149994,149996,150182,150186,150548,150554,150558,150561,150685,150688,150867,150870,150874,150907,150911,150928],[10,148545,148541],{"id":148546},"_10-json与pyecharts折线图",[14,148548,148550],{"id":148549},"_101-数据可视化","10.1 数据可视化",[19,148552,148553],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148555,148556],{},"常见图表：",[162,148558,148559,148562,148565,148568,148571],{},[165,148560,148561],{},"折线图：看趋势。",[165,148563,148564],{},"柱状图：看分类对比。",[165,148566,148567],{},"饼图：看占比。",[165,148569,148570],{},"地图：看地域分布。",[165,148572,148573],{},"散点图：看两个变量之间的关系。",[19,148575,148576],{},"Python 可视化常用库：",[1956,148578,148579,148587],{},[1959,148580,148581],{},[1962,148582,148583,148585],{},[1965,148584,147793],{},[1965,148586,25395],{},[2003,148588,148589,148596,148604,148611],{},[1962,148590,148591,148593],{},[2008,148592,147825],{},[2008,148594,148595],{},"基础、经典、可定制",[1962,148597,148598,148601],{},[2008,148599,148600],{},"seaborn",[2008,148602,148603],{},"统计图表更美观",[1962,148605,148606,148608],{},[2008,148607,147833],{},[2008,148609,148610],{},"生成交互式网页图表",[1962,148612,148613,148616],{},[2008,148614,148615],{},"plotly",[2008,148617,148618],{},"交互图表能力强",[19,148620,148621],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148623,148625],{"id":148624},"_102-json回顾","10.2 JSON回顾",[19,148627,148628],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148630,148631],{},"Python 字典：",[23,148633,148635],{"className":25,"code":148634,"language":27,"meta":28,"style":28},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[30,148636,148637,148645,148656,148665],{"__ignoreMap":28},[33,148638,148639,148641,148643],{"class":35,"line":36},[33,148640,103296],{"class":59},[33,148642,64],{"class":63},[33,148644,17228],{"class":59},[33,148646,148647,148650,148652,148654],{"class":35,"line":43},[33,148648,148649],{"class":117},"    \"name\"",[33,148651,53082],{"class":59},[33,148653,70911],{"class":117},[33,148655,33116],{"class":59},[33,148657,148658,148661,148663],{"class":35,"line":130},[33,148659,148660],{"class":117},"    \"value\"",[33,148662,53082],{"class":59},[33,148664,99097],{"class":39},[33,148666,148667],{"class":35,"line":146},[33,148668,3247],{"class":59},[19,148670,148671],{},"JSON 字符串：",[23,148673,148676],{"className":148674,"code":148675,"language":147424,"meta":28,"style":28},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[30,148677,148678,148682,148693,148702],{"__ignoreMap":28},[33,148679,148680],{"class":35,"line":36},[33,148681,3228],{"class":59},[33,148683,148684,148687,148689,148691],{"class":35,"line":43},[33,148685,148686],{"class":39},"  \"name\"",[33,148688,53082],{"class":59},[33,148690,70911],{"class":117},[33,148692,33116],{"class":59},[33,148694,148695,148698,148700],{"class":35,"line":130},[33,148696,148697],{"class":39},"  \"value\"",[33,148699,53082],{"class":59},[33,148701,99097],{"class":39},[33,148703,148704],{"class":35,"line":146},[33,148705,3247],{"class":59},[19,148707,148708],{},"Python 与 JSON 的转换：",[23,148710,148712],{"className":25,"code":148711,"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,148713,148714,148721,148725,148750,148754,148773,148780,148784,148794],{"__ignoreMap":28},[33,148715,148716,148718],{"class":35,"line":36},[33,148717,32045],{"class":63},[33,148719,148720],{"class":59}," json\n",[33,148722,148723],{"class":35,"line":43},[33,148724,127],{"emptyLinePlaceholder":126},[33,148726,148727,148729,148731,148733,148735,148737,148739,148741,148744,148746,148748],{"class":35,"line":130},[33,148728,103296],{"class":59},[33,148730,64],{"class":63},[33,148732,6109],{"class":59},[33,148734,64321],{"class":117},[33,148736,53082],{"class":59},[33,148738,70911],{"class":117},[33,148740,14093],{"class":59},[33,148742,148743],{"class":117},"\"value\"",[33,148745,53082],{"class":59},[33,148747,2129],{"class":39},[33,148749,3247],{"class":59},[33,148751,148752],{"class":35,"line":146},[33,148753,127],{"emptyLinePlaceholder":126},[33,148755,148756,148759,148761,148764,148767,148769,148771],{"class":35,"line":267},[33,148757,148758],{"class":59},"json_text ",[33,148760,64],{"class":63},[33,148762,148763],{"class":59}," json.dumps(data, ",[33,148765,148766],{"class":6877},"ensure_ascii",[33,148768,64],{"class":63},[33,148770,35634],{"class":39},[33,148772,157],{"class":59},[33,148774,148775,148777],{"class":35,"line":275},[33,148776,72],{"class":39},[33,148778,148779],{"class":59},"(json_text)\n",[33,148781,148782],{"class":35,"line":392},[33,148783,127],{"emptyLinePlaceholder":126},[33,148785,148786,148789,148791],{"class":35,"line":406},[33,148787,148788],{"class":59},"new_data ",[33,148790,64],{"class":63},[33,148792,148793],{"class":59}," json.loads(json_text)\n",[33,148795,148796,148798],{"class":35,"line":418},[33,148797,72],{"class":39},[33,148799,148800],{"class":59},"(new_data)\n",[14,148802,148804],{"id":148803},"_103-安装pyecharts","10.3 安装pyecharts",[23,148806,148808],{"className":25477,"code":148807,"language":25479,"meta":28,"style":28},"pip install pyecharts\n",[30,148809,148810],{"__ignoreMap":28},[33,148811,148812,148814,148816],{"class":35,"line":36},[33,148813,25486],{"class":3632},[33,148815,25489],{"class":117},[33,148817,148818],{"class":117}," pyecharts\n",[19,148820,148821],{},"验证：",[23,148823,148825],{"className":25,"code":148824,"language":27,"meta":28,"style":28},"import pyecharts\n\nprint(pyecharts.__version__)\n",[30,148826,148827,148833,148837],{"__ignoreMap":28},[33,148828,148829,148831],{"class":35,"line":36},[33,148830,32045],{"class":63},[33,148832,148818],{"class":59},[33,148834,148835],{"class":35,"line":43},[33,148836,127],{"emptyLinePlaceholder":126},[33,148838,148839,148841,148844,148847],{"class":35,"line":130},[33,148840,72],{"class":39},[33,148842,148843],{"class":59},"(pyecharts.",[33,148845,148846],{"class":39},"__version__",[33,148848,157],{"class":59},[19,148850,148851],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148853,148855],{"id":148854},"_104-第一个折线图","10.4 第一个折线图",[23,148857,148859],{"className":25,"code":148858,"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,148860,148861,148873,148877,148887,148917,148949],{"__ignoreMap":28},[33,148862,148863,148865,148868,148870],{"class":35,"line":36},[33,148864,32388],{"class":63},[33,148866,148867],{"class":59}," pyecharts.charts ",[33,148869,32045],{"class":63},[33,148871,148872],{"class":59}," Line\n",[33,148874,148875],{"class":35,"line":43},[33,148876,127],{"emptyLinePlaceholder":126},[33,148878,148879,148882,148884],{"class":35,"line":130},[33,148880,148881],{"class":59},"line ",[33,148883,64],{"class":63},[33,148885,148886],{"class":59}," Line()\n",[33,148888,148889,148892,148895,148897,148900,148902,148905,148907,148910,148912,148915],{"class":35,"line":146},[33,148890,148891],{"class":59},"line.add_xaxis([",[33,148893,148894],{"class":117},"\"周一\"",[33,148896,14093],{"class":59},[33,148898,148899],{"class":117},"\"周二\"",[33,148901,14093],{"class":59},[33,148903,148904],{"class":117},"\"周三\"",[33,148906,14093],{"class":59},[33,148908,148909],{"class":117},"\"周四\"",[33,148911,14093],{"class":59},[33,148913,148914],{"class":117},"\"周五\"",[33,148916,6318],{"class":59},[33,148918,148919,148922,148925,148927,148929,148931,148933,148935,148937,148939,148942,148944,148947],{"class":35,"line":267},[33,148920,148921],{"class":59},"line.add_yaxis(",[33,148923,148924],{"class":117},"\"销售额\"",[33,148926,79159],{"class":59},[33,148928,2129],{"class":39},[33,148930,14093],{"class":59},[33,148932,2634],{"class":39},[33,148934,14093],{"class":59},[33,148936,2679],{"class":39},[33,148938,14093],{"class":59},[33,148940,148941],{"class":39},"150",[33,148943,14093],{"class":59},[33,148945,148946],{"class":39},"180",[33,148948,6318],{"class":59},[33,148950,148951,148954,148957],{"class":35,"line":275},[33,148952,148953],{"class":59},"line.render(",[33,148955,148956],{"class":117},"\"line.html\"",[33,148958,157],{"class":59},[19,148960,148961,148962,148965],{},"运行后会生成 ",[30,148963,148964],{},"line.html","，用浏览器打开即可看到图表。",[19,148967,148968],{},"核心步骤：",[162,148970,148971,148974,148977,148980,148983],{},[165,148972,148973],{},"导入图表类。",[165,148975,148976],{},"创建图表对象。",[165,148978,148979],{},"添加 x 轴数据。",[165,148981,148982],{},"添加 y 轴数据。",[165,148984,148985],{},"渲染为 HTML。",[14,148987,148989],{"id":148988},"_105-全局配置","10.5 全局配置",[19,148991,148992,148993,148996],{},"常用配置在 ",[30,148994,148995],{},"pyecharts.options"," 中。",[23,148998,149000],{"className":25,"code":148999,"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,149001,149002,149019,149029,149033,149041,149065,149093,149098,149117,149136,149154,149174,149178],{"__ignoreMap":28},[33,149003,149004,149006,149009,149011,149014,149016],{"class":35,"line":36},[33,149005,32388],{"class":63},[33,149007,149008],{"class":59}," pyecharts ",[33,149010,32045],{"class":63},[33,149012,149013],{"class":59}," options ",[33,149015,33033],{"class":63},[33,149017,149018],{"class":59}," opts\n",[33,149020,149021,149023,149025,149027],{"class":35,"line":43},[33,149022,32388],{"class":63},[33,149024,148867],{"class":59},[33,149026,32045],{"class":63},[33,149028,148872],{"class":59},[33,149030,149031],{"class":35,"line":130},[33,149032,127],{"emptyLinePlaceholder":126},[33,149034,149035,149037,149039],{"class":35,"line":146},[33,149036,148881],{"class":59},[33,149038,64],{"class":63},[33,149040,148886],{"class":59},[33,149042,149043,149045,149047,149049,149051,149053,149055,149057,149059,149061,149063],{"class":35,"line":267},[33,149044,148891],{"class":59},[33,149046,148894],{"class":117},[33,149048,14093],{"class":59},[33,149050,148899],{"class":117},[33,149052,14093],{"class":59},[33,149054,148904],{"class":117},[33,149056,14093],{"class":59},[33,149058,148909],{"class":117},[33,149060,14093],{"class":59},[33,149062,148914],{"class":117},[33,149064,6318],{"class":59},[33,149066,149067,149069,149071,149073,149075,149077,149079,149081,149083,149085,149087,149089,149091],{"class":35,"line":275},[33,149068,148921],{"class":59},[33,149070,148924],{"class":117},[33,149072,79159],{"class":59},[33,149074,2129],{"class":39},[33,149076,14093],{"class":59},[33,149078,2634],{"class":39},[33,149080,14093],{"class":59},[33,149082,2679],{"class":39},[33,149084,14093],{"class":59},[33,149086,148941],{"class":39},[33,149088,14093],{"class":59},[33,149090,148946],{"class":39},[33,149092,6318],{"class":59},[33,149094,149095],{"class":35,"line":392},[33,149096,149097],{"class":59},"line.set_global_opts(\n",[33,149099,149100,149103,149105,149108,149110,149112,149115],{"class":35,"line":406},[33,149101,149102],{"class":6877},"    title_opts",[33,149104,64],{"class":63},[33,149106,149107],{"class":59},"opts.TitleOpts(",[33,149109,53052],{"class":6877},[33,149111,64],{"class":63},[33,149113,149114],{"class":117},"\"一周销售额\"",[33,149116,39694],{"class":59},[33,149118,149119,149122,149124,149127,149129,149131,149134],{"class":35,"line":418},[33,149120,149121],{"class":6877},"    xaxis_opts",[33,149123,64],{"class":63},[33,149125,149126],{"class":59},"opts.AxisOpts(",[33,149128,1008],{"class":6877},[33,149130,64],{"class":63},[33,149132,149133],{"class":117},"\"日期\"",[33,149135,39694],{"class":59},[33,149137,149138,149141,149143,149145,149147,149149,149152],{"class":35,"line":425},[33,149139,149140],{"class":6877},"    yaxis_opts",[33,149142,64],{"class":63},[33,149144,149126],{"class":59},[33,149146,1008],{"class":6877},[33,149148,64],{"class":63},[33,149150,149151],{"class":117},"\"金额\"",[33,149153,39694],{"class":59},[33,149155,149156,149159,149161,149164,149167,149169,149172],{"class":35,"line":1147},[33,149157,149158],{"class":6877},"    tooltip_opts",[33,149160,64],{"class":63},[33,149162,149163],{"class":59},"opts.TooltipOpts(",[33,149165,149166],{"class":6877},"trigger",[33,149168,64],{"class":63},[33,149170,149171],{"class":117},"\"axis\"",[33,149173,39694],{"class":59},[33,149175,149176],{"class":35,"line":1329},[33,149177,157],{"class":59},[33,149179,149180,149182,149184],{"class":35,"line":1341},[33,149181,148953],{"class":59},[33,149183,148956],{"class":117},[33,149185,157],{"class":59},[19,149187,149188],{},"常见全局配置：",[1956,149190,149191,149200],{},[1959,149192,149193],{},[1962,149194,149195,149198],{},[1965,149196,149197],{},"配置",[1965,149199,104334],{},[2003,149201,149202,149212,149222,149232,149242,149252],{},[1962,149203,149204,149209],{},[2008,149205,149206],{},[30,149207,149208],{},"TitleOpts",[2008,149210,149211],{},"标题",[1962,149213,149214,149219],{},[2008,149215,149216],{},[30,149217,149218],{},"LegendOpts",[2008,149220,149221],{},"图例",[1962,149223,149224,149229],{},[2008,149225,149226],{},[30,149227,149228],{},"TooltipOpts",[2008,149230,149231],{},"提示框",[1962,149233,149234,149239],{},[2008,149235,149236],{},[30,149237,149238],{},"AxisOpts",[2008,149240,149241],{},"坐标轴",[1962,149243,149244,149249],{},[2008,149245,149246],{},[30,149247,149248],{},"VisualMapOpts",[2008,149250,149251],{},"视觉映射",[1962,149253,149254,149259],{},[2008,149255,149256],{},[30,149257,149258],{},"DataZoomOpts",[2008,149260,149261],{},"区域缩放",[14,149263,149265],{"id":149264},"_106-系列配置","10.6 系列配置",[19,149267,149268],{},"系列配置作用于某一组数据。",[23,149270,149272],{"className":25,"code":149271,"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,149273,149274,149279,149290,149319,149330,149349],{"__ignoreMap":28},[33,149275,149276],{"class":35,"line":36},[33,149277,149278],{"class":59},"line.add_yaxis(\n",[33,149280,149281,149284,149286,149288],{"class":35,"line":43},[33,149282,149283],{"class":6877},"    series_name",[33,149285,64],{"class":63},[33,149287,148924],{"class":117},[33,149289,33116],{"class":59},[33,149291,149292,149295,149297,149299,149301,149303,149305,149307,149309,149311,149313,149315,149317],{"class":35,"line":130},[33,149293,149294],{"class":6877},"    y_axis",[33,149296,64],{"class":63},[33,149298,2707],{"class":59},[33,149300,2129],{"class":39},[33,149302,14093],{"class":59},[33,149304,2634],{"class":39},[33,149306,14093],{"class":59},[33,149308,2679],{"class":39},[33,149310,14093],{"class":59},[33,149312,148941],{"class":39},[33,149314,14093],{"class":59},[33,149316,148946],{"class":39},[33,149318,89476],{"class":59},[33,149320,149321,149324,149326,149328],{"class":35,"line":146},[33,149322,149323],{"class":6877},"    is_smooth",[33,149325,64],{"class":63},[33,149327,33126],{"class":39},[33,149329,33116],{"class":59},[33,149331,149332,149335,149337,149340,149343,149345,149347],{"class":35,"line":267},[33,149333,149334],{"class":6877},"    label_opts",[33,149336,64],{"class":63},[33,149338,149339],{"class":59},"opts.LabelOpts(",[33,149341,149342],{"class":6877},"is_show",[33,149344,64],{"class":63},[33,149346,33126],{"class":39},[33,149348,39694],{"class":59},[33,149350,149351],{"class":35,"line":275},[33,149352,157],{"class":59},[19,149354,149355],{},"常用参数：",[162,149357,149358,149364,149370,149376,149382],{},[165,149359,149360,149363],{},[30,149361,149362],{},"series_name","：系列名称。",[165,149365,149366,149369],{},[30,149367,149368],{},"y_axis","：y 轴数据。",[165,149371,149372,149375],{},[30,149373,149374],{},"is_smooth","：是否平滑曲线。",[165,149377,149378,149381],{},[30,149379,149380],{},"label_opts","：标签配置。",[165,149383,149384,149387],{},[30,149385,149386],{},"symbol_size","：标记点大小。",[14,149389,149391],{"id":149390},"_107-多条折线","10.7 多条折线",[23,149393,149395],{"className":25,"code":149394,"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,149396,149397,149411,149421,149425,149454,149458,149466,149471,149509,149546,149550,149567,149583,149587],{"__ignoreMap":28},[33,149398,149399,149401,149403,149405,149407,149409],{"class":35,"line":36},[33,149400,32388],{"class":63},[33,149402,149008],{"class":59},[33,149404,32045],{"class":63},[33,149406,149013],{"class":59},[33,149408,33033],{"class":63},[33,149410,149018],{"class":59},[33,149412,149413,149415,149417,149419],{"class":35,"line":43},[33,149414,32388],{"class":63},[33,149416,148867],{"class":59},[33,149418,32045],{"class":63},[33,149420,148872],{"class":59},[33,149422,149423],{"class":35,"line":130},[33,149424,127],{"emptyLinePlaceholder":126},[33,149426,149427,149430,149432,149434,149436,149438,149440,149442,149444,149446,149448,149450,149452],{"class":35,"line":146},[33,149428,149429],{"class":59},"dates ",[33,149431,64],{"class":63},[33,149433,53871],{"class":59},[33,149435,148894],{"class":117},[33,149437,14093],{"class":59},[33,149439,148899],{"class":117},[33,149441,14093],{"class":59},[33,149443,148904],{"class":117},[33,149445,14093],{"class":59},[33,149447,148909],{"class":117},[33,149449,14093],{"class":59},[33,149451,148914],{"class":117},[33,149453,34893],{"class":59},[33,149455,149456],{"class":35,"line":267},[33,149457,127],{"emptyLinePlaceholder":126},[33,149459,149460,149462,149464],{"class":35,"line":275},[33,149461,148881],{"class":59},[33,149463,64],{"class":63},[33,149465,148886],{"class":59},[33,149467,149468],{"class":35,"line":392},[33,149469,149470],{"class":59},"line.add_xaxis(dates)\n",[33,149472,149473,149475,149478,149480,149482,149484,149487,149489,149491,149493,149495,149497,149499,149501,149503,149505,149507],{"class":35,"line":406},[33,149474,148921],{"class":59},[33,149476,149477],{"class":117},"\"线上销售\"",[33,149479,79159],{"class":59},[33,149481,2129],{"class":39},[33,149483,14093],{"class":59},[33,149485,149486],{"class":39},"130",[33,149488,14093],{"class":59},[33,149490,2634],{"class":39},[33,149492,14093],{"class":59},[33,149494,22703],{"class":39},[33,149496,14093],{"class":59},[33,149498,3391],{"class":39},[33,149500,113839],{"class":59},[33,149502,149374],{"class":6877},[33,149504,64],{"class":63},[33,149506,33126],{"class":39},[33,149508,157],{"class":59},[33,149510,149511,149513,149516,149518,149520,149522,149524,149526,149528,149530,149532,149534,149536,149538,149540,149542,149544],{"class":35,"line":418},[33,149512,148921],{"class":59},[33,149514,149515],{"class":117},"\"线下销售\"",[33,149517,79159],{"class":59},[33,149519,2429],{"class":39},[33,149521,14093],{"class":59},[33,149523,2679],{"class":39},[33,149525,14093],{"class":59},[33,149527,2129],{"class":39},[33,149529,14093],{"class":59},[33,149531,2634],{"class":39},[33,149533,14093],{"class":59},[33,149535,148941],{"class":39},[33,149537,113839],{"class":59},[33,149539,149374],{"class":6877},[33,149541,64],{"class":63},[33,149543,33126],{"class":39},[33,149545,157],{"class":59},[33,149547,149548],{"class":35,"line":425},[33,149549,149097],{"class":59},[33,149551,149552,149554,149556,149558,149560,149562,149565],{"class":35,"line":1147},[33,149553,149102],{"class":6877},[33,149555,64],{"class":63},[33,149557,149107],{"class":59},[33,149559,53052],{"class":6877},[33,149561,64],{"class":63},[33,149563,149564],{"class":117},"\"线上线下销售趋势\"",[33,149566,39694],{"class":59},[33,149568,149569,149571,149573,149575,149577,149579,149581],{"class":35,"line":1329},[33,149570,149158],{"class":6877},[33,149572,64],{"class":63},[33,149574,149163],{"class":59},[33,149576,149166],{"class":6877},[33,149578,64],{"class":63},[33,149580,149171],{"class":117},[33,149582,39694],{"class":59},[33,149584,149585],{"class":35,"line":1341},[33,149586,157],{"class":59},[33,149588,149589,149591,149594],{"class":35,"line":1348},[33,149590,148953],{"class":59},[33,149592,149593],{"class":117},"\"sales.html\"",[33,149595,157],{"class":59},[19,149597,149598],{},"多条折线适合比较不同指标或不同地区。",[14,149600,149602],{"id":149601},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149604,149605,149606,26274],{},"假设 ",[30,149607,149608],{},"sales.json",[23,149610,149612],{"className":148674,"code":149611,"language":147424,"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,149613,149614,149619,149651,149679,149707],{"__ignoreMap":28},[33,149615,149616],{"class":35,"line":36},[33,149617,149618],{"class":59},"[\n",[33,149620,149621,149624,149627,149629,149631,149633,149636,149638,149640,149642,149645,149647,149649],{"class":35,"line":43},[33,149622,149623],{"class":59},"  {",[33,149625,149626],{"class":39},"\"date\"",[33,149628,53082],{"class":59},[33,149630,148894],{"class":117},[33,149632,14093],{"class":59},[33,149634,149635],{"class":39},"\"online\"",[33,149637,53082],{"class":59},[33,149639,2129],{"class":39},[33,149641,14093],{"class":59},[33,149643,149644],{"class":39},"\"offline\"",[33,149646,53082],{"class":59},[33,149648,2429],{"class":39},[33,149650,6591],{"class":59},[33,149652,149653,149655,149657,149659,149661,149663,149665,149667,149669,149671,149673,149675,149677],{"class":35,"line":130},[33,149654,149623],{"class":59},[33,149656,149626],{"class":39},[33,149658,53082],{"class":59},[33,149660,148899],{"class":117},[33,149662,14093],{"class":59},[33,149664,149635],{"class":39},[33,149666,53082],{"class":59},[33,149668,149486],{"class":39},[33,149670,14093],{"class":59},[33,149672,149644],{"class":39},[33,149674,53082],{"class":59},[33,149676,2679],{"class":39},[33,149678,6591],{"class":59},[33,149680,149681,149683,149685,149687,149689,149691,149693,149695,149697,149699,149701,149703,149705],{"class":35,"line":146},[33,149682,149623],{"class":59},[33,149684,149626],{"class":39},[33,149686,53082],{"class":59},[33,149688,148904],{"class":117},[33,149690,14093],{"class":59},[33,149692,149635],{"class":39},[33,149694,53082],{"class":59},[33,149696,2634],{"class":39},[33,149698,14093],{"class":59},[33,149700,149644],{"class":39},[33,149702,53082],{"class":59},[33,149704,2129],{"class":39},[33,149706,3247],{"class":59},[33,149708,149709],{"class":35,"line":267},[33,149710,34893],{"class":59},[19,149712,149713],{},"读取并绘图：",[23,149715,149717],{"className":25,"code":149716,"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,149718,149719,149725,149739,149749,149753,149785,149798,149802,149810,149819,149828,149832,149844,149853,149862,149871,149875,149883,149887,149904,149921,149925,149942,149958,149962],{"__ignoreMap":28},[33,149720,149721,149723],{"class":35,"line":36},[33,149722,32045],{"class":63},[33,149724,148720],{"class":59},[33,149726,149727,149729,149731,149733,149735,149737],{"class":35,"line":43},[33,149728,32388],{"class":63},[33,149730,149008],{"class":59},[33,149732,32045],{"class":63},[33,149734,149013],{"class":59},[33,149736,33033],{"class":63},[33,149738,149018],{"class":59},[33,149740,149741,149743,149745,149747],{"class":35,"line":130},[33,149742,32388],{"class":63},[33,149744,148867],{"class":59},[33,149746,32045],{"class":63},[33,149748,148872],{"class":59},[33,149750,149751],{"class":35,"line":146},[33,149752,127],{"emptyLinePlaceholder":126},[33,149754,149755,149757,149759,149761,149764,149766,149768,149770,149772,149774,149776,149778,149780,149783],{"class":35,"line":267},[33,149756,109471],{"class":63},[33,149758,148420],{"class":39},[33,149760,109],{"class":59},[33,149762,149763],{"class":117},"\"sales.json\"",[33,149765,14093],{"class":59},[33,149767,148430],{"class":117},[33,149769,14093],{"class":59},[33,149771,148435],{"class":6877},[33,149773,64],{"class":63},[33,149775,148440],{"class":117},[33,149777,15372],{"class":59},[33,149779,33033],{"class":63},[33,149781,149782],{"class":6877}," file",[33,149784,143],{"class":59},[33,149786,149787,149789,149791,149794,149796],{"class":35,"line":275},[33,149788,103060],{"class":59},[33,149790,64],{"class":63},[33,149792,149793],{"class":59}," json.load(",[33,149795,47000],{"class":6877},[33,149797,157],{"class":59},[33,149799,149800],{"class":35,"line":392},[33,149801,127],{"emptyLinePlaceholder":126},[33,149803,149804,149806,149808],{"class":35,"line":406},[33,149805,149429],{"class":59},[33,149807,64],{"class":63},[33,149809,53483],{"class":59},[33,149811,149812,149815,149817],{"class":35,"line":418},[33,149813,149814],{"class":59},"online_sales ",[33,149816,64],{"class":63},[33,149818,53483],{"class":59},[33,149820,149821,149824,149826],{"class":35,"line":425},[33,149822,149823],{"class":59},"offline_sales ",[33,149825,64],{"class":63},[33,149827,53483],{"class":59},[33,149829,149830],{"class":35,"line":1147},[33,149831,127],{"emptyLinePlaceholder":126},[33,149833,149834,149836,149839,149841],{"class":35,"line":1329},[33,149835,4690],{"class":63},[33,149837,149838],{"class":59}," item ",[33,149840,27699],{"class":63},[33,149842,149843],{"class":59}," data:\n",[33,149845,149846,149849,149851],{"class":35,"line":1341},[33,149847,149848],{"class":59},"    dates.append(item[",[33,149850,149626],{"class":117},[33,149852,6318],{"class":59},[33,149854,149855,149858,149860],{"class":35,"line":1348},[33,149856,149857],{"class":59},"    online_sales.append(item[",[33,149859,149635],{"class":117},[33,149861,6318],{"class":59},[33,149863,149864,149867,149869],{"class":35,"line":1529},[33,149865,149866],{"class":59},"    offline_sales.append(item[",[33,149868,149644],{"class":117},[33,149870,6318],{"class":59},[33,149872,149873],{"class":35,"line":1546},[33,149874,127],{"emptyLinePlaceholder":126},[33,149876,149877,149879,149881],{"class":35,"line":1551},[33,149878,148881],{"class":59},[33,149880,64],{"class":63},[33,149882,148886],{"class":59},[33,149884,149885],{"class":35,"line":1566},[33,149886,149470],{"class":59},[33,149888,149889,149891,149893,149896,149898,149900,149902],{"class":35,"line":1578},[33,149890,148921],{"class":59},[33,149892,149477],{"class":117},[33,149894,149895],{"class":59},", online_sales, ",[33,149897,149374],{"class":6877},[33,149899,64],{"class":63},[33,149901,33126],{"class":39},[33,149903,157],{"class":59},[33,149905,149906,149908,149910,149913,149915,149917,149919],{"class":35,"line":1583},[33,149907,148921],{"class":59},[33,149909,149515],{"class":117},[33,149911,149912],{"class":59},", offline_sales, ",[33,149914,149374],{"class":6877},[33,149916,64],{"class":63},[33,149918,33126],{"class":39},[33,149920,157],{"class":59},[33,149922,149923],{"class":35,"line":3369},[33,149924,149097],{"class":59},[33,149926,149927,149929,149931,149933,149935,149937,149940],{"class":35,"line":3396},[33,149928,149102],{"class":6877},[33,149930,64],{"class":63},[33,149932,149107],{"class":59},[33,149934,53052],{"class":6877},[33,149936,64],{"class":63},[33,149938,149939],{"class":117},"\"销售趋势\"",[33,149941,39694],{"class":59},[33,149943,149944,149946,149948,149950,149952,149954,149956],{"class":35,"line":3401},[33,149945,149158],{"class":6877},[33,149947,64],{"class":63},[33,149949,149163],{"class":59},[33,149951,149166],{"class":6877},[33,149953,64],{"class":63},[33,149955,149171],{"class":117},[33,149957,39694],{"class":59},[33,149959,149960],{"class":35,"line":3418},[33,149961,157],{"class":59},[33,149963,149964,149966,149968],{"class":35,"line":3423},[33,149965,148953],{"class":59},[33,149967,149593],{"class":117},[33,149969,157],{"class":59},[14,149971,149973],{"id":149972},"_109-数据清洗","10.9 数据清洗",[19,149975,149976],{},"真实数据经常不整齐，需要清洗。",[19,149978,149979],{},"常见问题：",[162,149981,149982,149985,149988,149991],{},[165,149983,149984],{},"数字是字符串。",[165,149986,149987],{},"字段缺失。",[165,149989,149990],{},"空值。",[165,149992,149993],{},"日期格式不统一。",[19,149995,958],{},[23,149997,149999],{"className":25,"code":149998,"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,150000,150001,150010,150033,150053,150074,150078,150082,150090,150099,150103,150114,150128,150137,150142,150146,150154,150164,150168,150175],{"__ignoreMap":28},[33,150002,150003,150006,150008],{"class":35,"line":36},[33,150004,150005],{"class":59},"raw_data ",[33,150007,64],{"class":63},[33,150009,57091],{"class":59},[33,150011,150012,150015,150017,150019,150021,150023,150026,150028,150031],{"class":35,"line":43},[33,150013,150014],{"class":59},"    {",[33,150016,149626],{"class":117},[33,150018,53082],{"class":59},[33,150020,148894],{"class":117},[33,150022,14093],{"class":59},[33,150024,150025],{"class":117},"\"sales\"",[33,150027,53082],{"class":59},[33,150029,150030],{"class":117},"\"100\"",[33,150032,6591],{"class":59},[33,150034,150035,150037,150039,150041,150043,150045,150047,150049,150051],{"class":35,"line":130},[33,150036,150014],{"class":59},[33,150038,149626],{"class":117},[33,150040,53082],{"class":59},[33,150042,148899],{"class":117},[33,150044,14093],{"class":59},[33,150046,150025],{"class":117},[33,150048,53082],{"class":59},[33,150050,9312],{"class":117},[33,150052,6591],{"class":59},[33,150054,150055,150057,150059,150061,150063,150065,150067,150069,150072],{"class":35,"line":146},[33,150056,150014],{"class":59},[33,150058,149626],{"class":117},[33,150060,53082],{"class":59},[33,150062,148904],{"class":117},[33,150064,14093],{"class":59},[33,150066,150025],{"class":117},[33,150068,53082],{"class":59},[33,150070,150071],{"class":117},"\"120\"",[33,150073,6591],{"class":59},[33,150075,150076],{"class":35,"line":267},[33,150077,34893],{"class":59},[33,150079,150080],{"class":35,"line":275},[33,150081,127],{"emptyLinePlaceholder":126},[33,150083,150084,150086,150088],{"class":35,"line":392},[33,150085,149429],{"class":59},[33,150087,64],{"class":63},[33,150089,53483],{"class":59},[33,150091,150092,150095,150097],{"class":35,"line":406},[33,150093,150094],{"class":59},"sales ",[33,150096,64],{"class":63},[33,150098,53483],{"class":59},[33,150100,150101],{"class":35,"line":418},[33,150102,127],{"emptyLinePlaceholder":126},[33,150104,150105,150107,150109,150111],{"class":35,"line":425},[33,150106,4690],{"class":63},[33,150108,149838],{"class":59},[33,150110,27699],{"class":63},[33,150112,150113],{"class":59}," raw_data:\n",[33,150115,150116,150119,150121,150124,150126],{"class":35,"line":1147},[33,150117,150118],{"class":59},"    value ",[33,150120,64],{"class":63},[33,150122,150123],{"class":59}," item.get(",[33,150125,150025],{"class":117},[33,150127,157],{"class":59},[33,150129,150130,150132,150134],{"class":35,"line":1329},[33,150131,567],{"class":63},[33,150133,783],{"class":63},[33,150135,150136],{"class":59}," value:\n",[33,150138,150139],{"class":35,"line":1341},[33,150140,150141],{"class":63},"        continue\n",[33,150143,150144],{"class":35,"line":1348},[33,150145,127],{"emptyLinePlaceholder":126},[33,150147,150148,150150,150152],{"class":35,"line":1529},[33,150149,149848],{"class":59},[33,150151,149626],{"class":117},[33,150153,6318],{"class":59},[33,150155,150156,150159,150161],{"class":35,"line":1546},[33,150157,150158],{"class":59},"    sales.append(",[33,150160,1828],{"class":39},[33,150162,150163],{"class":59},"(value))\n",[33,150165,150166],{"class":35,"line":1551},[33,150167,127],{"emptyLinePlaceholder":126},[33,150169,150170,150172],{"class":35,"line":1566},[33,150171,72],{"class":39},[33,150173,150174],{"class":59},"(dates)\n",[33,150176,150177,150179],{"class":35,"line":1578},[33,150178,72],{"class":39},[33,150180,150181],{"class":59},"(sales)\n",[14,150183,150185],{"id":150184},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[23,150187,150189],{"className":25,"code":150188,"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,150190,150191,150205,150215,150219,150227,150248,150270,150292,150314,150336,150340,150344,150366,150387,150391,150399,150403,150407,150417,150426,150436,150452,150456,150460,150477,150493,150509,150525,150535,150539],{"__ignoreMap":28},[33,150192,150193,150195,150197,150199,150201,150203],{"class":35,"line":36},[33,150194,32388],{"class":63},[33,150196,149008],{"class":59},[33,150198,32045],{"class":63},[33,150200,149013],{"class":59},[33,150202,33033],{"class":63},[33,150204,149018],{"class":59},[33,150206,150207,150209,150211,150213],{"class":35,"line":43},[33,150208,32388],{"class":63},[33,150210,148867],{"class":59},[33,150212,32045],{"class":63},[33,150214,148872],{"class":59},[33,150216,150217],{"class":35,"line":130},[33,150218,127],{"emptyLinePlaceholder":126},[33,150220,150221,150223,150225],{"class":35,"line":146},[33,150222,150094],{"class":59},[33,150224,64],{"class":63},[33,150226,57091],{"class":59},[33,150228,150229,150231,150233,150235,150238,150240,150242,150244,150246],{"class":35,"line":267},[33,150230,150014],{"class":59},[33,150232,149626],{"class":117},[33,150234,53082],{"class":59},[33,150236,150237],{"class":117},"\"2024-10-01\"",[33,150239,14093],{"class":59},[33,150241,85724],{"class":117},[33,150243,53082],{"class":59},[33,150245,93662],{"class":39},[33,150247,6591],{"class":59},[33,150249,150250,150252,150254,150256,150259,150261,150263,150265,150268],{"class":35,"line":275},[33,150251,150014],{"class":59},[33,150253,149626],{"class":117},[33,150255,53082],{"class":59},[33,150257,150258],{"class":117},"\"2024-10-02\"",[33,150260,14093],{"class":59},[33,150262,85724],{"class":117},[33,150264,53082],{"class":59},[33,150266,150267],{"class":39},"1800",[33,150269,6591],{"class":59},[33,150271,150272,150274,150276,150278,150281,150283,150285,150287,150290],{"class":35,"line":392},[33,150273,150014],{"class":59},[33,150275,149626],{"class":117},[33,150277,53082],{"class":59},[33,150279,150280],{"class":117},"\"2024-10-03\"",[33,150282,14093],{"class":59},[33,150284,85724],{"class":117},[33,150286,53082],{"class":59},[33,150288,150289],{"class":39},"1500",[33,150291,6591],{"class":59},[33,150293,150294,150296,150298,150300,150303,150305,150307,150309,150312],{"class":35,"line":406},[33,150295,150014],{"class":59},[33,150297,149626],{"class":117},[33,150299,53082],{"class":59},[33,150301,150302],{"class":117},"\"2024-10-04\"",[33,150304,14093],{"class":59},[33,150306,85724],{"class":117},[33,150308,53082],{"class":59},[33,150310,150311],{"class":39},"2100",[33,150313,6591],{"class":59},[33,150315,150316,150318,150320,150322,150325,150327,150329,150331,150334],{"class":35,"line":418},[33,150317,150014],{"class":59},[33,150319,149626],{"class":117},[33,150321,53082],{"class":59},[33,150323,150324],{"class":117},"\"2024-10-05\"",[33,150326,14093],{"class":59},[33,150328,85724],{"class":117},[33,150330,53082],{"class":59},[33,150332,150333],{"class":39},"2600",[33,150335,6591],{"class":59},[33,150337,150338],{"class":35,"line":425},[33,150339,34893],{"class":59},[33,150341,150342],{"class":35,"line":1147},[33,150343,127],{"emptyLinePlaceholder":126},[33,150345,150346,150348,150350,150353,150355,150357,150359,150361,150363],{"class":35,"line":1329},[33,150347,149429],{"class":59},[33,150349,64],{"class":63},[33,150351,150352],{"class":59}," [item[",[33,150354,149626],{"class":117},[33,150356,6104],{"class":59},[33,150358,4690],{"class":63},[33,150360,149838],{"class":59},[33,150362,27699],{"class":63},[33,150364,150365],{"class":59}," sales]\n",[33,150367,150368,150371,150373,150375,150377,150379,150381,150383,150385],{"class":35,"line":1341},[33,150369,150370],{"class":59},"amounts ",[33,150372,64],{"class":63},[33,150374,150352],{"class":59},[33,150376,85724],{"class":117},[33,150378,6104],{"class":59},[33,150380,4690],{"class":63},[33,150382,149838],{"class":59},[33,150384,27699],{"class":63},[33,150386,150365],{"class":59},[33,150388,150389],{"class":35,"line":1348},[33,150390,127],{"emptyLinePlaceholder":126},[33,150392,150393,150395,150397],{"class":35,"line":1529},[33,150394,148881],{"class":59},[33,150396,64],{"class":63},[33,150398,148886],{"class":59},[33,150400,150401],{"class":35,"line":1546},[33,150402,149470],{"class":59},[33,150404,150405],{"class":35,"line":1551},[33,150406,149278],{"class":59},[33,150408,150409,150411,150413,150415],{"class":35,"line":1566},[33,150410,149283],{"class":6877},[33,150412,64],{"class":63},[33,150414,148924],{"class":117},[33,150416,33116],{"class":59},[33,150418,150419,150421,150423],{"class":35,"line":1578},[33,150420,149294],{"class":6877},[33,150422,64],{"class":63},[33,150424,150425],{"class":59},"amounts,\n",[33,150427,150428,150430,150432,150434],{"class":35,"line":1583},[33,150429,149323],{"class":6877},[33,150431,64],{"class":63},[33,150433,33126],{"class":39},[33,150435,33116],{"class":59},[33,150437,150438,150440,150442,150444,150446,150448,150450],{"class":35,"line":3369},[33,150439,149334],{"class":6877},[33,150441,64],{"class":63},[33,150443,149339],{"class":59},[33,150445,149342],{"class":6877},[33,150447,64],{"class":63},[33,150449,33126],{"class":39},[33,150451,39694],{"class":59},[33,150453,150454],{"class":35,"line":3396},[33,150455,157],{"class":59},[33,150457,150458],{"class":35,"line":3401},[33,150459,149097],{"class":59},[33,150461,150462,150464,150466,150468,150470,150472,150475],{"class":35,"line":3418},[33,150463,149102],{"class":6877},[33,150465,64],{"class":63},[33,150467,149107],{"class":59},[33,150469,53052],{"class":6877},[33,150471,64],{"class":63},[33,150473,150474],{"class":117},"\"每日销售额\"",[33,150476,39694],{"class":59},[33,150478,150479,150481,150483,150485,150487,150489,150491],{"class":35,"line":3423},[33,150480,149121],{"class":6877},[33,150482,64],{"class":63},[33,150484,149126],{"class":59},[33,150486,1008],{"class":6877},[33,150488,64],{"class":63},[33,150490,149133],{"class":117},[33,150492,39694],{"class":59},[33,150494,150495,150497,150499,150501,150503,150505,150507],{"class":35,"line":3428},[33,150496,149140],{"class":6877},[33,150498,64],{"class":63},[33,150500,149126],{"class":59},[33,150502,1008],{"class":6877},[33,150504,64],{"class":63},[33,150506,149151],{"class":117},[33,150508,39694],{"class":59},[33,150510,150511,150513,150515,150517,150519,150521,150523],{"class":35,"line":3433},[33,150512,149158],{"class":6877},[33,150514,64],{"class":63},[33,150516,149163],{"class":59},[33,150518,149166],{"class":6877},[33,150520,64],{"class":63},[33,150522,149171],{"class":117},[33,150524,39694],{"class":59},[33,150526,150527,150530,150532],{"class":35,"line":3447},[33,150528,150529],{"class":6877},"    datazoom_opts",[33,150531,64],{"class":63},[33,150533,150534],{"class":59},"[opts.DataZoomOpts()],\n",[33,150536,150537],{"class":35,"line":3452},[33,150538,157],{"class":59},[33,150540,150541,150543,150546],{"class":35,"line":4243},[33,150542,148953],{"class":59},[33,150544,150545],{"class":117},"\"daily_sales.html\"",[33,150547,157],{"class":59},[19,150549,150550,150553],{},[30,150551,150552],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150555,150557],{"id":150556},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150559,150560],{},"如果数据结构如下：",[23,150562,150564],{"className":25,"code":150563,"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,150565,150566,150574,150582,150604,150625,150630,150637,150657,150677,150681],{"__ignoreMap":28},[33,150567,150568,150570,150572],{"class":35,"line":36},[33,150569,103296],{"class":59},[33,150571,64],{"class":63},[33,150573,17228],{"class":59},[33,150575,150576,150579],{"class":35,"line":43},[33,150577,150578],{"class":117},"    \"北京\"",[33,150580,150581],{"class":59},": [\n",[33,150583,150584,150586,150588,150590,150593,150595,150598,150600,150602],{"class":35,"line":130},[33,150585,6578],{"class":59},[33,150587,149626],{"class":117},[33,150589,53082],{"class":59},[33,150591,150592],{"class":117},"\"2024-01-01\"",[33,150594,14093],{"class":59},[33,150596,150597],{"class":117},"\"confirm\"",[33,150599,53082],{"class":59},[33,150601,2264],{"class":39},[33,150603,6591],{"class":59},[33,150605,150606,150608,150610,150612,150615,150617,150619,150621,150623],{"class":35,"line":146},[33,150607,6578],{"class":59},[33,150609,149626],{"class":117},[33,150611,53082],{"class":59},[33,150613,150614],{"class":117},"\"2024-01-02\"",[33,150616,14093],{"class":59},[33,150618,150597],{"class":117},[33,150620,53082],{"class":59},[33,150622,2315],{"class":39},[33,150624,6591],{"class":59},[33,150626,150627],{"class":35,"line":267},[33,150628,150629],{"class":59},"    ],\n",[33,150631,150632,150635],{"class":35,"line":275},[33,150633,150634],{"class":117},"    \"上海\"",[33,150636,150581],{"class":59},[33,150638,150639,150641,150643,150645,150647,150649,150651,150653,150655],{"class":35,"line":392},[33,150640,6578],{"class":59},[33,150642,149626],{"class":117},[33,150644,53082],{"class":59},[33,150646,150592],{"class":117},[33,150648,14093],{"class":59},[33,150650,150597],{"class":117},[33,150652,53082],{"class":59},[33,150654,2213],{"class":39},[33,150656,6591],{"class":59},[33,150658,150659,150661,150663,150665,150667,150669,150671,150673,150675],{"class":35,"line":406},[33,150660,6578],{"class":59},[33,150662,149626],{"class":117},[33,150664,53082],{"class":59},[33,150666,150614],{"class":117},[33,150668,14093],{"class":59},[33,150670,150597],{"class":117},[33,150672,53082],{"class":59},[33,150674,2340],{"class":39},[33,150676,6591],{"class":59},[33,150678,150679],{"class":35,"line":418},[33,150680,150629],{"class":59},[33,150682,150683],{"class":35,"line":425},[33,150684,3247],{"class":59},[19,150686,150687],{},"绘制多地区趋势：",[23,150689,150691],{"className":25,"code":150690,"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,150692,150693,150707,150717,150721,150746,150750,150758,150762,150766,150778,150800,150813,150817,150821,150838,150854,150858],{"__ignoreMap":28},[33,150694,150695,150697,150699,150701,150703,150705],{"class":35,"line":36},[33,150696,32388],{"class":63},[33,150698,149008],{"class":59},[33,150700,32045],{"class":63},[33,150702,149013],{"class":59},[33,150704,33033],{"class":63},[33,150706,149018],{"class":59},[33,150708,150709,150711,150713,150715],{"class":35,"line":43},[33,150710,32388],{"class":63},[33,150712,148867],{"class":59},[33,150714,32045],{"class":63},[33,150716,148872],{"class":59},[33,150718,150719],{"class":35,"line":130},[33,150720,127],{"emptyLinePlaceholder":126},[33,150722,150723,150725,150727,150729,150731,150733,150735,150737,150739,150742,150744],{"class":35,"line":146},[33,150724,149429],{"class":59},[33,150726,64],{"class":63},[33,150728,150352],{"class":59},[33,150730,149626],{"class":117},[33,150732,6104],{"class":59},[33,150734,4690],{"class":63},[33,150736,149838],{"class":59},[33,150738,27699],{"class":63},[33,150740,150741],{"class":59}," data[",[33,150743,70911],{"class":117},[33,150745,79168],{"class":59},[33,150747,150748],{"class":35,"line":267},[33,150749,127],{"emptyLinePlaceholder":126},[33,150751,150752,150754,150756],{"class":35,"line":275},[33,150753,148881],{"class":59},[33,150755,64],{"class":63},[33,150757,148886],{"class":59},[33,150759,150760],{"class":35,"line":392},[33,150761,149470],{"class":59},[33,150763,150764],{"class":35,"line":406},[33,150765,127],{"emptyLinePlaceholder":126},[33,150767,150768,150770,150773,150775],{"class":35,"line":418},[33,150769,4690],{"class":63},[33,150771,150772],{"class":59}," city, records ",[33,150774,27699],{"class":63},[33,150776,150777],{"class":59}," data.items():\n",[33,150779,150780,150783,150785,150787,150789,150791,150793,150795,150797],{"class":35,"line":425},[33,150781,150782],{"class":59},"    values ",[33,150784,64],{"class":63},[33,150786,150352],{"class":59},[33,150788,150597],{"class":117},[33,150790,6104],{"class":59},[33,150792,4690],{"class":63},[33,150794,149838],{"class":59},[33,150796,27699],{"class":63},[33,150798,150799],{"class":59}," records]\n",[33,150801,150802,150805,150807,150809,150811],{"class":35,"line":1147},[33,150803,150804],{"class":59},"    line.add_yaxis(city, values, ",[33,150806,149374],{"class":6877},[33,150808,64],{"class":63},[33,150810,33126],{"class":39},[33,150812,157],{"class":59},[33,150814,150815],{"class":35,"line":1329},[33,150816,127],{"emptyLinePlaceholder":126},[33,150818,150819],{"class":35,"line":1341},[33,150820,149097],{"class":59},[33,150822,150823,150825,150827,150829,150831,150833,150836],{"class":35,"line":1348},[33,150824,149102],{"class":6877},[33,150826,64],{"class":63},[33,150828,149107],{"class":59},[33,150830,53052],{"class":6877},[33,150832,64],{"class":63},[33,150834,150835],{"class":117},"\"多地区趋势图\"",[33,150837,39694],{"class":59},[33,150839,150840,150842,150844,150846,150848,150850,150852],{"class":35,"line":1529},[33,150841,149158],{"class":6877},[33,150843,64],{"class":63},[33,150845,149163],{"class":59},[33,150847,149166],{"class":6877},[33,150849,64],{"class":63},[33,150851,149171],{"class":117},[33,150853,39694],{"class":59},[33,150855,150856],{"class":35,"line":1546},[33,150857,157],{"class":59},[33,150859,150860,150862,150865],{"class":35,"line":1551},[33,150861,148953],{"class":59},[33,150863,150864],{"class":117},"\"trend.html\"",[33,150866,157],{"class":59},[19,150868,150869],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150871,150873],{"id":150872},"_1012-易错点","10.12 易错点",[162,150875,150876,150882,150888,150898,150904],{},[165,150877,150878,150881],{},[30,150879,150880],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[165,150883,150884,150887],{},[30,150885,150886],{},"render()"," 生成的是 HTML，不是图片。",[165,150889,150890,150891,150894,150895,1628],{},"JSON 字符串用 ",[30,150892,150893],{},"json.loads()","，JSON 文件用 ",[30,150896,150897],{},"json.load()",[165,150899,150900,150901,1628],{},"中文 JSON 保存时加 ",[30,150902,150903],{},"ensure_ascii=False",[165,150905,150906],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150908,150910],{"id":150909},"_1013-本章练习","10.13 本章练习",[162,150912,150913,150916,150919,150922,150925],{},[165,150914,150915],{},"安装 pyecharts 并生成第一个折线图。",[165,150917,150918],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[165,150920,150921],{},"绘制两条折线，对比线上和线下销售额。",[165,150923,150924],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[165,150926,150927],{},"对含有空值的销售数据进行清洗后再绘图。",[1729,150929,150930],{},"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":43,"depth":43,"links":150932},[150933,150934,150935,150936,150937,150938,150939,150940,150941,150942,150943,150944,150945],{"id":148549,"depth":43,"text":148550},{"id":148624,"depth":43,"text":148625},{"id":148803,"depth":43,"text":148804},{"id":148854,"depth":43,"text":148855},{"id":148988,"depth":43,"text":148989},{"id":149264,"depth":43,"text":149265},{"id":149390,"depth":43,"text":149391},{"id":149601,"depth":43,"text":149602},{"id":149972,"depth":43,"text":149973},{"id":150184,"depth":43,"text":150185},{"id":150556,"depth":43,"text":150557},{"id":150872,"depth":43,"text":150873},{"id":150909,"depth":43,"text":150910},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148541,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150952,"title":150953,"body":150954,"description":1751,"extension":1752,"meta":153313,"navigation":126,"path":153314,"seo":153315,"stem":153316,"__hash__":153317},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150955,"toc":153290},[150956,150959,150963,150966,150969,151045,151048,151139,151142,151146,151149,151193,151206,151210,151213,151280,151283,151287,151290,151374,151382,151386,151391,151532,151535,151546,151552,151558,151672,151676,151679,151682,151934,151937,151941,151944,152048,152051,152055,152206,152210,152217,152330,152334,152337,152443,152446,152450,152453,152484,152487,152592,152595,152599,152603,152613,152681,152685,152692,152756,152759,152763,152769,152865,152874,152878,153202,153211,153215,153243,153247,153287],[10,150957,150953],{"id":150958},"_11-面向对象基础",[14,150960,150962],{"id":150961},"_111-什么是面向对象","11.1 什么是面向对象",[19,150964,150965],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150967,150968],{},"面向过程：",[23,150970,150972],{"className":25,"code":150971,"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,150973,150974,150983,150991,150995,151005,151036,151040],{"__ignoreMap":28},[33,150975,150976,150978,150980],{"class":35,"line":36},[33,150977,968],{"class":59},[33,150979,64],{"class":63},[33,150981,150982],{"class":117}," \"小明\"\n",[33,150984,150985,150987,150989],{"class":35,"line":43},[33,150986,60],{"class":59},[33,150988,64],{"class":63},[33,150990,67],{"class":39},[33,150992,150993],{"class":35,"line":130},[33,150994,127],{"emptyLinePlaceholder":126},[33,150996,150997,150999,151002],{"class":35,"line":146},[33,150998,33597],{"class":63},[33,151000,151001],{"class":3632}," introduce",[33,151003,151004],{"class":59},"(name, age):\n",[33,151006,151007,151009,151011,151013,151016,151018,151020,151022,151025,151027,151029,151031,151034],{"class":35,"line":267},[33,151008,149],{"class":39},[33,151010,109],{"class":59},[33,151012,999],{"class":63},[33,151014,151015],{"class":117},"\"我叫",[33,151017,1005],{"class":39},[33,151019,1008],{"class":59},[33,151021,1011],{"class":39},[33,151023,151024],{"class":117},"，今年",[33,151026,1005],{"class":39},[33,151028,71863],{"class":59},[33,151030,1011],{"class":39},[33,151032,151033],{"class":117},"岁\"",[33,151035,157],{"class":59},[33,151037,151038],{"class":35,"line":275},[33,151039,127],{"emptyLinePlaceholder":126},[33,151041,151042],{"class":35,"line":392},[33,151043,151044],{"class":59},"introduce(name, age)\n",[19,151046,151047],{},"面向对象：",[23,151049,151051],{"className":25,"code":151050,"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,151052,151053,151061,151069,151098,151102,151106,151116,151125,151134],{"__ignoreMap":28},[33,151054,151055,151057,151059],{"class":35,"line":36},[33,151056,16352],{"class":63},[33,151058,9558],{"class":3632},[33,151060,143],{"class":59},[33,151062,151063,151065,151067],{"class":35,"line":43},[33,151064,32452],{"class":63},[33,151066,151001],{"class":3632},[33,151068,32458],{"class":59},[33,151070,151071,151073,151075,151077,151079,151082,151084,151086,151088,151090,151092,151094,151096],{"class":35,"line":130},[33,151072,583],{"class":39},[33,151074,109],{"class":59},[33,151076,999],{"class":63},[33,151078,151015],{"class":117},[33,151080,151081],{"class":39},"{self",[33,151083,81941],{"class":59},[33,151085,1011],{"class":39},[33,151087,151024],{"class":117},[33,151089,151081],{"class":39},[33,151091,81953],{"class":59},[33,151093,1011],{"class":39},[33,151095,151033],{"class":117},[33,151097,157],{"class":59},[33,151099,151100],{"class":35,"line":146},[33,151101,127],{"emptyLinePlaceholder":126},[33,151103,151104],{"class":35,"line":267},[33,151105,127],{"emptyLinePlaceholder":126},[33,151107,151108,151111,151113],{"class":35,"line":275},[33,151109,151110],{"class":59},"student ",[33,151112,64],{"class":63},[33,151114,151115],{"class":59}," Student()\n",[33,151117,151118,151121,151123],{"class":35,"line":392},[33,151119,151120],{"class":59},"student.name ",[33,151122,64],{"class":63},[33,151124,150982],{"class":117},[33,151126,151127,151130,151132],{"class":35,"line":406},[33,151128,151129],{"class":59},"student.age ",[33,151131,64],{"class":63},[33,151133,67],{"class":39},[33,151135,151136],{"class":35,"line":418},[33,151137,151138],{"class":59},"student.introduce()\n",[19,151140,151141],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151143,151145],{"id":151144},"_112-类和对象","11.2 类和对象",[19,151147,151148],{},"类是模板，对象是根据模板创建出来的具体实例。",[23,151150,151152],{"className":25,"code":151151,"language":27,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[30,151153,151154,151162,151167,151171,151175,151184],{"__ignoreMap":28},[33,151155,151156,151158,151160],{"class":35,"line":36},[33,151157,16352],{"class":63},[33,151159,9558],{"class":3632},[33,151161,143],{"class":59},[33,151163,151164],{"class":35,"line":43},[33,151165,151166],{"class":63},"    pass\n",[33,151168,151169],{"class":35,"line":130},[33,151170,127],{"emptyLinePlaceholder":126},[33,151172,151173],{"class":35,"line":146},[33,151174,127],{"emptyLinePlaceholder":126},[33,151176,151177,151180,151182],{"class":35,"line":267},[33,151178,151179],{"class":59},"student1 ",[33,151181,64],{"class":63},[33,151183,151115],{"class":59},[33,151185,151186,151189,151191],{"class":35,"line":275},[33,151187,151188],{"class":59},"student2 ",[33,151190,64],{"class":63},[33,151192,151115],{"class":59},[19,151194,151195,151198,151199,102657,151202,151205],{},[30,151196,151197],{},"Student"," 是类，",[30,151200,151201],{},"student1",[30,151203,151204],{},"student2"," 是对象。",[14,151207,151209],{"id":151208},"_113-属性","11.3 属性",[19,151211,151212],{},"属性是对象保存的数据。",[23,151214,151216],{"className":25,"code":151215,"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,151217,151218,151226,151230,151234,151238,151246,151254,151262,151266,151273],{"__ignoreMap":28},[33,151219,151220,151222,151224],{"class":35,"line":36},[33,151221,16352],{"class":63},[33,151223,9558],{"class":3632},[33,151225,143],{"class":59},[33,151227,151228],{"class":35,"line":43},[33,151229,151166],{"class":63},[33,151231,151232],{"class":35,"line":130},[33,151233,127],{"emptyLinePlaceholder":126},[33,151235,151236],{"class":35,"line":146},[33,151237,127],{"emptyLinePlaceholder":126},[33,151239,151240,151242,151244],{"class":35,"line":267},[33,151241,151110],{"class":59},[33,151243,64],{"class":63},[33,151245,151115],{"class":59},[33,151247,151248,151250,151252],{"class":35,"line":275},[33,151249,151120],{"class":59},[33,151251,64],{"class":63},[33,151253,150982],{"class":117},[33,151255,151256,151258,151260],{"class":35,"line":392},[33,151257,151129],{"class":59},[33,151259,64],{"class":63},[33,151261,67],{"class":39},[33,151263,151264],{"class":35,"line":406},[33,151265,127],{"emptyLinePlaceholder":126},[33,151267,151268,151270],{"class":35,"line":418},[33,151269,72],{"class":39},[33,151271,151272],{"class":59},"(student.name)\n",[33,151274,151275,151277],{"class":35,"line":425},[33,151276,72],{"class":39},[33,151278,151279],{"class":59},"(student.age)\n",[19,151281,151282],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151284,151286],{"id":151285},"_114-方法","11.4 方法",[19,151288,151289],{},"类中的函数叫方法。",[23,151291,151292],{"className":25,"code":151050,"language":27,"meta":28,"style":28},[30,151293,151294,151302,151310,151338,151342,151346,151354,151362,151370],{"__ignoreMap":28},[33,151295,151296,151298,151300],{"class":35,"line":36},[33,151297,16352],{"class":63},[33,151299,9558],{"class":3632},[33,151301,143],{"class":59},[33,151303,151304,151306,151308],{"class":35,"line":43},[33,151305,32452],{"class":63},[33,151307,151001],{"class":3632},[33,151309,32458],{"class":59},[33,151311,151312,151314,151316,151318,151320,151322,151324,151326,151328,151330,151332,151334,151336],{"class":35,"line":130},[33,151313,583],{"class":39},[33,151315,109],{"class":59},[33,151317,999],{"class":63},[33,151319,151015],{"class":117},[33,151321,151081],{"class":39},[33,151323,81941],{"class":59},[33,151325,1011],{"class":39},[33,151327,151024],{"class":117},[33,151329,151081],{"class":39},[33,151331,81953],{"class":59},[33,151333,1011],{"class":39},[33,151335,151033],{"class":117},[33,151337,157],{"class":59},[33,151339,151340],{"class":35,"line":146},[33,151341,127],{"emptyLinePlaceholder":126},[33,151343,151344],{"class":35,"line":267},[33,151345,127],{"emptyLinePlaceholder":126},[33,151347,151348,151350,151352],{"class":35,"line":275},[33,151349,151110],{"class":59},[33,151351,64],{"class":63},[33,151353,151115],{"class":59},[33,151355,151356,151358,151360],{"class":35,"line":392},[33,151357,151120],{"class":59},[33,151359,64],{"class":63},[33,151361,150982],{"class":117},[33,151363,151364,151366,151368],{"class":35,"line":406},[33,151365,151129],{"class":59},[33,151367,64],{"class":63},[33,151369,67],{"class":39},[33,151371,151372],{"class":35,"line":418},[33,151373,151138],{"class":59},[19,151375,151376,151378,151379,151381],{},[30,151377,32474],{}," 表示当前对象。调用方法时不需要手动传入 ",[30,151380,32474],{},"，Python 会自动传。",[14,151383,151385],{"id":151384},"_115-构造方法__init__","11.5 构造方法__init__",[19,151387,151388,151390],{},[30,151389,32480],{}," 在对象创建时自动执行，用于初始化属性。",[23,151392,151394],{"className":25,"code":151393,"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,151395,151396,151404,151413,151425,151437,151448,151452,151460,151498,151502,151506,151528],{"__ignoreMap":28},[33,151397,151398,151400,151402],{"class":35,"line":36},[33,151399,16352],{"class":63},[33,151401,9558],{"class":3632},[33,151403,143],{"class":59},[33,151405,151406,151408,151410],{"class":35,"line":43},[33,151407,32452],{"class":63},[33,151409,32455],{"class":39},[33,151411,151412],{"class":59},"(self, name, age, score):\n",[33,151414,151415,151417,151420,151422],{"class":35,"line":130},[33,151416,32496],{"class":39},[33,151418,151419],{"class":59},".name ",[33,151421,64],{"class":63},[33,151423,151424],{"class":59}," name\n",[33,151426,151427,151429,151432,151434],{"class":35,"line":146},[33,151428,32496],{"class":39},[33,151430,151431],{"class":59},".age ",[33,151433,64],{"class":63},[33,151435,151436],{"class":59}," age\n",[33,151438,151439,151441,151444,151446],{"class":35,"line":267},[33,151440,32496],{"class":39},[33,151442,151443],{"class":59},".score ",[33,151445,64],{"class":63},[33,151447,3261],{"class":59},[33,151449,151450],{"class":35,"line":275},[33,151451,127],{"emptyLinePlaceholder":126},[33,151453,151454,151456,151458],{"class":35,"line":392},[33,151455,32452],{"class":63},[33,151457,151001],{"class":3632},[33,151459,32458],{"class":59},[33,151461,151462,151464,151466,151468,151470,151472,151474,151476,151478,151480,151482,151484,151487,151489,151492,151494,151496],{"class":35,"line":406},[33,151463,583],{"class":39},[33,151465,109],{"class":59},[33,151467,999],{"class":63},[33,151469,151015],{"class":117},[33,151471,151081],{"class":39},[33,151473,81941],{"class":59},[33,151475,1011],{"class":39},[33,151477,151024],{"class":117},[33,151479,151081],{"class":39},[33,151481,81953],{"class":59},[33,151483,1011],{"class":39},[33,151485,151486],{"class":117},"岁，成绩",[33,151488,151081],{"class":39},[33,151490,151491],{"class":59},".score",[33,151493,1011],{"class":39},[33,151495,1014],{"class":117},[33,151497,157],{"class":59},[33,151499,151500],{"class":35,"line":418},[33,151501,127],{"emptyLinePlaceholder":126},[33,151503,151504],{"class":35,"line":425},[33,151505,127],{"emptyLinePlaceholder":126},[33,151507,151508,151510,151512,151515,151518,151520,151522,151524,151526],{"class":35,"line":1147},[33,151509,151110],{"class":59},[33,151511,64],{"class":63},[33,151513,151514],{"class":59}," Student(",[33,151516,151517],{"class":117},"\"小明\"",[33,151519,14093],{"class":59},[33,151521,2467],{"class":39},[33,151523,14093],{"class":59},[33,151525,2804],{"class":39},[33,151527,157],{"class":59},[33,151529,151530],{"class":35,"line":1329},[33,151531,151138],{"class":59},[19,151533,151534],{},"构造方法的好处：",[162,151536,151537,151540,151543],{},[165,151538,151539],{},"创建对象时必须提供必要数据。",[165,151541,151542],{},"属性初始化集中，不容易漏。",[165,151544,151545],{},"对象状态更完整。",[14,151547,151549,151550],{"id":151548},"_116-str","11.6 ",[1968,151551,2985],{},[19,151553,151554,151555,1628],{},"直接打印对象时，默认输出不直观。可以定义 ",[30,151556,151557],{},"__str__",[23,151559,151561],{"className":25,"code":151560,"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,151562,151563,151571,151580,151590,151600,151604,151613,151641,151645,151649,151665],{"__ignoreMap":28},[33,151564,151565,151567,151569],{"class":35,"line":36},[33,151566,16352],{"class":63},[33,151568,9558],{"class":3632},[33,151570,143],{"class":59},[33,151572,151573,151575,151577],{"class":35,"line":43},[33,151574,32452],{"class":63},[33,151576,32455],{"class":39},[33,151578,151579],{"class":59},"(self, name, age):\n",[33,151581,151582,151584,151586,151588],{"class":35,"line":130},[33,151583,32496],{"class":39},[33,151585,151419],{"class":59},[33,151587,64],{"class":63},[33,151589,151424],{"class":59},[33,151591,151592,151594,151596,151598],{"class":35,"line":146},[33,151593,32496],{"class":39},[33,151595,151431],{"class":59},[33,151597,64],{"class":63},[33,151599,151436],{"class":59},[33,151601,151602],{"class":35,"line":267},[33,151603,127],{"emptyLinePlaceholder":126},[33,151605,151606,151608,151611],{"class":35,"line":275},[33,151607,32452],{"class":63},[33,151609,151610],{"class":39}," __str__",[33,151612,32458],{"class":59},[33,151614,151615,151617,151620,151623,151625,151627,151629,151632,151634,151636,151638],{"class":35,"line":392},[33,151616,16410],{"class":63},[33,151618,151619],{"class":63}," f",[33,151621,151622],{"class":117},"\"Student(name=",[33,151624,151081],{"class":39},[33,151626,81941],{"class":59},[33,151628,1011],{"class":39},[33,151630,151631],{"class":117},", age=",[33,151633,151081],{"class":39},[33,151635,81953],{"class":59},[33,151637,1011],{"class":39},[33,151639,151640],{"class":117},")\"\n",[33,151642,151643],{"class":35,"line":406},[33,151644,127],{"emptyLinePlaceholder":126},[33,151646,151647],{"class":35,"line":418},[33,151648,127],{"emptyLinePlaceholder":126},[33,151650,151651,151653,151655,151657,151659,151661,151663],{"class":35,"line":425},[33,151652,151110],{"class":59},[33,151654,64],{"class":63},[33,151656,151514],{"class":59},[33,151658,151517],{"class":117},[33,151660,14093],{"class":59},[33,151662,2467],{"class":39},[33,151664,157],{"class":59},[33,151666,151667,151669],{"class":35,"line":1147},[33,151668,72],{"class":39},[33,151670,151671],{"class":59},"(student)\n",[14,151673,151675],{"id":151674},"_117-封装","11.7 封装",[19,151677,151678],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151680,151681],{},"Python 中以双下划线开头的属性通常视为私有属性。",[23,151683,151685],{"className":25,"code":151684,"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,151686,151687,151696,151705,151717,151729,151733,151742,151751,151755,151765,151778,151789,151794,151805,151809,151818,151830,151841,151845,151858,151869,151873,151883,151887,151891,151909,151918,151927],{"__ignoreMap":28},[33,151688,151689,151691,151694],{"class":35,"line":36},[33,151690,16352],{"class":63},[33,151692,151693],{"class":3632}," Account",[33,151695,143],{"class":59},[33,151697,151698,151700,151702],{"class":35,"line":43},[33,151699,32452],{"class":63},[33,151701,32455],{"class":39},[33,151703,151704],{"class":59},"(self, owner, balance):\n",[33,151706,151707,151709,151712,151714],{"class":35,"line":130},[33,151708,32496],{"class":39},[33,151710,151711],{"class":59},".owner ",[33,151713,64],{"class":63},[33,151715,151716],{"class":59}," owner\n",[33,151718,151719,151721,151724,151726],{"class":35,"line":146},[33,151720,32496],{"class":39},[33,151722,151723],{"class":59},".__balance ",[33,151725,64],{"class":63},[33,151727,151728],{"class":59}," balance\n",[33,151730,151731],{"class":35,"line":267},[33,151732,127],{"emptyLinePlaceholder":126},[33,151734,151735,151737,151740],{"class":35,"line":275},[33,151736,32452],{"class":63},[33,151738,151739],{"class":3632}," get_balance",[33,151741,32458],{"class":59},[33,151743,151744,151746,151748],{"class":35,"line":392},[33,151745,16410],{"class":63},[33,151747,40520],{"class":39},[33,151749,151750],{"class":59},".__balance\n",[33,151752,151753],{"class":35,"line":406},[33,151754,127],{"emptyLinePlaceholder":126},[33,151756,151757,151759,151762],{"class":35,"line":418},[33,151758,32452],{"class":63},[33,151760,151761],{"class":3632}," deposit",[33,151763,151764],{"class":59},"(self, money):\n",[33,151766,151767,151769,151772,151774,151776],{"class":35,"line":425},[33,151768,4163],{"class":63},[33,151770,151771],{"class":59}," money ",[33,151773,837],{"class":63},[33,151775,829],{"class":39},[33,151777,143],{"class":59},[33,151779,151780,151782,151784,151787],{"class":35,"line":1147},[33,151781,36297],{"class":39},[33,151783,109],{"class":59},[33,151785,151786],{"class":117},"\"存款金额必须大于0\"",[33,151788,157],{"class":59},[33,151790,151791],{"class":35,"line":1329},[33,151792,151793],{"class":63},"            return\n",[33,151795,151796,151798,151800,151802],{"class":35,"line":1341},[33,151797,32496],{"class":39},[33,151799,151723],{"class":59},[33,151801,11136],{"class":63},[33,151803,151804],{"class":59}," money\n",[33,151806,151807],{"class":35,"line":1348},[33,151808,127],{"emptyLinePlaceholder":126},[33,151810,151811,151813,151816],{"class":35,"line":1529},[33,151812,32452],{"class":63},[33,151814,151815],{"class":3632}," withdraw",[33,151817,151764],{"class":59},[33,151819,151820,151822,151824,151826,151828],{"class":35,"line":1546},[33,151821,4163],{"class":63},[33,151823,151771],{"class":59},[33,151825,837],{"class":63},[33,151827,829],{"class":39},[33,151829,143],{"class":59},[33,151831,151832,151834,151836,151839],{"class":35,"line":1551},[33,151833,36297],{"class":39},[33,151835,109],{"class":59},[33,151837,151838],{"class":117},"\"取款金额必须大于0\"",[33,151840,157],{"class":59},[33,151842,151843],{"class":35,"line":1566},[33,151844,151793],{"class":63},[33,151846,151847,151849,151851,151853,151855],{"class":35,"line":1578},[33,151848,4163],{"class":63},[33,151850,151771],{"class":59},[33,151852,2775],{"class":63},[33,151854,40520],{"class":39},[33,151856,151857],{"class":59},".__balance:\n",[33,151859,151860,151862,151864,151867],{"class":35,"line":1583},[33,151861,36297],{"class":39},[33,151863,109],{"class":59},[33,151865,151866],{"class":117},"\"余额不足\"",[33,151868,157],{"class":59},[33,151870,151871],{"class":35,"line":3369},[33,151872,151793],{"class":63},[33,151874,151875,151877,151879,151881],{"class":35,"line":3396},[33,151876,32496],{"class":39},[33,151878,151723],{"class":59},[33,151880,1572],{"class":63},[33,151882,151804],{"class":59},[33,151884,151885],{"class":35,"line":3401},[33,151886,127],{"emptyLinePlaceholder":126},[33,151888,151889],{"class":35,"line":3418},[33,151890,127],{"emptyLinePlaceholder":126},[33,151892,151893,151896,151898,151901,151903,151905,151907],{"class":35,"line":3423},[33,151894,151895],{"class":59},"account ",[33,151897,64],{"class":63},[33,151899,151900],{"class":59}," Account(",[33,151902,151517],{"class":117},[33,151904,14093],{"class":59},[33,151906,8070],{"class":39},[33,151908,157],{"class":59},[33,151910,151911,151914,151916],{"class":35,"line":3428},[33,151912,151913],{"class":59},"account.deposit(",[33,151915,3391],{"class":39},[33,151917,157],{"class":59},[33,151919,151920,151923,151925],{"class":35,"line":3433},[33,151921,151922],{"class":59},"account.withdraw(",[33,151924,2129],{"class":39},[33,151926,157],{"class":59},[33,151928,151929,151931],{"class":35,"line":3447},[33,151930,72],{"class":39},[33,151932,151933],{"class":59},"(account.get_balance())\n",[19,151935,151936],{},"封装的意义是避免外部随意修改内部状态。",[14,151938,151940],{"id":151939},"_118-继承","11.8 继承",[19,151942,151943],{},"继承可以让子类复用父类的属性和方法。",[23,151945,151947],{"className":25,"code":151946,"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,151948,151949,151958,151967,151978,151982,151986,152000,152009,152020,152024,152028,152038,152043],{"__ignoreMap":28},[33,151950,151951,151953,151956],{"class":35,"line":36},[33,151952,16352],{"class":63},[33,151954,151955],{"class":3632}," Animal",[33,151957,143],{"class":59},[33,151959,151960,151962,151965],{"class":35,"line":43},[33,151961,32452],{"class":63},[33,151963,151964],{"class":3632}," eat",[33,151966,32458],{"class":59},[33,151968,151969,151971,151973,151976],{"class":35,"line":130},[33,151970,583],{"class":39},[33,151972,109],{"class":59},[33,151974,151975],{"class":117},"\"吃东西\"",[33,151977,157],{"class":59},[33,151979,151980],{"class":35,"line":146},[33,151981,127],{"emptyLinePlaceholder":126},[33,151983,151984],{"class":35,"line":267},[33,151985,127],{"emptyLinePlaceholder":126},[33,151987,151988,151990,151993,151995,151998],{"class":35,"line":275},[33,151989,16352],{"class":63},[33,151991,151992],{"class":3632}," Dog",[33,151994,109],{"class":59},[33,151996,151997],{"class":3632},"Animal",[33,151999,32437],{"class":59},[33,152001,152002,152004,152007],{"class":35,"line":392},[33,152003,32452],{"class":63},[33,152005,152006],{"class":3632}," bark",[33,152008,32458],{"class":59},[33,152010,152011,152013,152015,152018],{"class":35,"line":406},[33,152012,583],{"class":39},[33,152014,109],{"class":59},[33,152016,152017],{"class":117},"\"汪汪\"",[33,152019,157],{"class":59},[33,152021,152022],{"class":35,"line":418},[33,152023,127],{"emptyLinePlaceholder":126},[33,152025,152026],{"class":35,"line":425},[33,152027,127],{"emptyLinePlaceholder":126},[33,152029,152030,152033,152035],{"class":35,"line":1147},[33,152031,152032],{"class":59},"dog ",[33,152034,64],{"class":63},[33,152036,152037],{"class":59}," Dog()\n",[33,152039,152040],{"class":35,"line":1329},[33,152041,152042],{"class":59},"dog.eat()\n",[33,152044,152045],{"class":35,"line":1341},[33,152046,152047],{"class":59},"dog.bark()\n",[19,152049,152050],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152052,152054],{"id":152053},"_119-方法重写","11.9 方法重写",[23,152056,152058],{"className":25,"code":152057,"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,152059,152060,152068,152077,152088,152092,152096,152108,152116,152126,152130,152134,152147,152155,152166,152170,152174,152182,152192,152196,152201],{"__ignoreMap":28},[33,152061,152062,152064,152066],{"class":35,"line":36},[33,152063,16352],{"class":63},[33,152065,151955],{"class":3632},[33,152067,143],{"class":59},[33,152069,152070,152072,152075],{"class":35,"line":43},[33,152071,32452],{"class":63},[33,152073,152074],{"class":3632}," speak",[33,152076,32458],{"class":59},[33,152078,152079,152081,152083,152086],{"class":35,"line":130},[33,152080,583],{"class":39},[33,152082,109],{"class":59},[33,152084,152085],{"class":117},"\"动物叫\"",[33,152087,157],{"class":59},[33,152089,152090],{"class":35,"line":146},[33,152091,127],{"emptyLinePlaceholder":126},[33,152093,152094],{"class":35,"line":267},[33,152095,127],{"emptyLinePlaceholder":126},[33,152097,152098,152100,152102,152104,152106],{"class":35,"line":275},[33,152099,16352],{"class":63},[33,152101,151992],{"class":3632},[33,152103,109],{"class":59},[33,152105,151997],{"class":3632},[33,152107,32437],{"class":59},[33,152109,152110,152112,152114],{"class":35,"line":392},[33,152111,32452],{"class":63},[33,152113,152074],{"class":3632},[33,152115,32458],{"class":59},[33,152117,152118,152120,152122,152124],{"class":35,"line":406},[33,152119,583],{"class":39},[33,152121,109],{"class":59},[33,152123,152017],{"class":117},[33,152125,157],{"class":59},[33,152127,152128],{"class":35,"line":418},[33,152129,127],{"emptyLinePlaceholder":126},[33,152131,152132],{"class":35,"line":425},[33,152133,127],{"emptyLinePlaceholder":126},[33,152135,152136,152138,152141,152143,152145],{"class":35,"line":1147},[33,152137,16352],{"class":63},[33,152139,152140],{"class":3632}," Cat",[33,152142,109],{"class":59},[33,152144,151997],{"class":3632},[33,152146,32437],{"class":59},[33,152148,152149,152151,152153],{"class":35,"line":1329},[33,152150,32452],{"class":63},[33,152152,152074],{"class":3632},[33,152154,32458],{"class":59},[33,152156,152157,152159,152161,152164],{"class":35,"line":1341},[33,152158,583],{"class":39},[33,152160,109],{"class":59},[33,152162,152163],{"class":117},"\"喵喵\"",[33,152165,157],{"class":59},[33,152167,152168],{"class":35,"line":1348},[33,152169,127],{"emptyLinePlaceholder":126},[33,152171,152172],{"class":35,"line":1529},[33,152173,127],{"emptyLinePlaceholder":126},[33,152175,152176,152178,152180],{"class":35,"line":1546},[33,152177,152032],{"class":59},[33,152179,64],{"class":63},[33,152181,152037],{"class":59},[33,152183,152184,152187,152189],{"class":35,"line":1551},[33,152185,152186],{"class":59},"cat ",[33,152188,64],{"class":63},[33,152190,152191],{"class":59}," Cat()\n",[33,152193,152194],{"class":35,"line":1566},[33,152195,127],{"emptyLinePlaceholder":126},[33,152197,152198],{"class":35,"line":1578},[33,152199,152200],{"class":59},"dog.speak()\n",[33,152202,152203],{"class":35,"line":1583},[33,152204,152205],{"class":59},"cat.speak()\n",[14,152207,152209],{"id":152208},"_1110-super","11.10 super",[19,152211,152212,152213,152216],{},"子类可以通过 ",[30,152214,152215],{},"super()"," 调用父类方法。",[23,152218,152220],{"className":25,"code":152219,"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,152221,152222,152230,152239,152249,152253,152257,152269,152278,152289,152299,152303,152307,152323],{"__ignoreMap":28},[33,152223,152224,152226,152228],{"class":35,"line":36},[33,152225,16352],{"class":63},[33,152227,17225],{"class":3632},[33,152229,143],{"class":59},[33,152231,152232,152234,152236],{"class":35,"line":43},[33,152233,32452],{"class":63},[33,152235,32455],{"class":39},[33,152237,152238],{"class":59},"(self, name):\n",[33,152240,152241,152243,152245,152247],{"class":35,"line":130},[33,152242,32496],{"class":39},[33,152244,151419],{"class":59},[33,152246,64],{"class":63},[33,152248,151424],{"class":59},[33,152250,152251],{"class":35,"line":146},[33,152252,127],{"emptyLinePlaceholder":126},[33,152254,152255],{"class":35,"line":267},[33,152256,127],{"emptyLinePlaceholder":126},[33,152258,152259,152261,152263,152265,152267],{"class":35,"line":275},[33,152260,16352],{"class":63},[33,152262,9558],{"class":3632},[33,152264,109],{"class":59},[33,152266,20701],{"class":3632},[33,152268,32437],{"class":59},[33,152270,152271,152273,152275],{"class":35,"line":392},[33,152272,32452],{"class":63},[33,152274,32455],{"class":39},[33,152276,152277],{"class":59},"(self, name, score):\n",[33,152279,152280,152282,152284,152286],{"class":35,"line":406},[33,152281,32468],{"class":39},[33,152283,18916],{"class":59},[33,152285,32480],{"class":39},[33,152287,152288],{"class":59},"(name)\n",[33,152290,152291,152293,152295,152297],{"class":35,"line":418},[33,152292,32496],{"class":39},[33,152294,151443],{"class":59},[33,152296,64],{"class":63},[33,152298,3261],{"class":59},[33,152300,152301],{"class":35,"line":425},[33,152302,127],{"emptyLinePlaceholder":126},[33,152304,152305],{"class":35,"line":1147},[33,152306,127],{"emptyLinePlaceholder":126},[33,152308,152309,152311,152313,152315,152317,152319,152321],{"class":35,"line":1329},[33,152310,151110],{"class":59},[33,152312,64],{"class":63},[33,152314,151514],{"class":59},[33,152316,151517],{"class":117},[33,152318,14093],{"class":59},[33,152320,2804],{"class":39},[33,152322,157],{"class":59},[33,152324,152325,152327],{"class":35,"line":1341},[33,152326,72],{"class":39},[33,152328,152329],{"class":59},"(student.name, student.score)\n",[14,152331,152333],{"id":152332},"_1111-多态","11.11 多态",[19,152335,152336],{},"多态指不同对象响应同一个方法，表现出不同结果。",[23,152338,152340],{"className":25,"code":152339,"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,152341,152342,152350,152358,152368,152372,152376,152384,152392,152402,152406,152410,152420,152425,152429,152433,152438],{"__ignoreMap":28},[33,152343,152344,152346,152348],{"class":35,"line":36},[33,152345,16352],{"class":63},[33,152347,151992],{"class":3632},[33,152349,143],{"class":59},[33,152351,152352,152354,152356],{"class":35,"line":43},[33,152353,32452],{"class":63},[33,152355,152074],{"class":3632},[33,152357,32458],{"class":59},[33,152359,152360,152362,152364,152366],{"class":35,"line":130},[33,152361,583],{"class":39},[33,152363,109],{"class":59},[33,152365,152017],{"class":117},[33,152367,157],{"class":59},[33,152369,152370],{"class":35,"line":146},[33,152371,127],{"emptyLinePlaceholder":126},[33,152373,152374],{"class":35,"line":267},[33,152375,127],{"emptyLinePlaceholder":126},[33,152377,152378,152380,152382],{"class":35,"line":275},[33,152379,16352],{"class":63},[33,152381,152140],{"class":3632},[33,152383,143],{"class":59},[33,152385,152386,152388,152390],{"class":35,"line":392},[33,152387,32452],{"class":63},[33,152389,152074],{"class":3632},[33,152391,32458],{"class":59},[33,152393,152394,152396,152398,152400],{"class":35,"line":406},[33,152395,583],{"class":39},[33,152397,109],{"class":59},[33,152399,152163],{"class":117},[33,152401,157],{"class":59},[33,152403,152404],{"class":35,"line":418},[33,152405,127],{"emptyLinePlaceholder":126},[33,152407,152408],{"class":35,"line":425},[33,152409,127],{"emptyLinePlaceholder":126},[33,152411,152412,152414,152417],{"class":35,"line":1147},[33,152413,33597],{"class":63},[33,152415,152416],{"class":3632}," make_sound",[33,152418,152419],{"class":59},"(animal):\n",[33,152421,152422],{"class":35,"line":1329},[33,152423,152424],{"class":59},"    animal.speak()\n",[33,152426,152427],{"class":35,"line":1341},[33,152428,127],{"emptyLinePlaceholder":126},[33,152430,152431],{"class":35,"line":1348},[33,152432,127],{"emptyLinePlaceholder":126},[33,152434,152435],{"class":35,"line":1529},[33,152436,152437],{"class":59},"make_sound(Dog())\n",[33,152439,152440],{"class":35,"line":1546},[33,152441,152442],{"class":59},"make_sound(Cat())\n",[19,152444,152445],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152447,152449],{"id":152448},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152451,152452],{},"实例属性属于对象：",[23,152454,152456],{"className":25,"code":152455,"language":27,"meta":28,"style":28},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[30,152457,152458,152466,152474],{"__ignoreMap":28},[33,152459,152460,152462,152464],{"class":35,"line":36},[33,152461,16352],{"class":63},[33,152463,9558],{"class":3632},[33,152465,143],{"class":59},[33,152467,152468,152470,152472],{"class":35,"line":43},[33,152469,32452],{"class":63},[33,152471,32455],{"class":39},[33,152473,152238],{"class":59},[33,152475,152476,152478,152480,152482],{"class":35,"line":130},[33,152477,32496],{"class":39},[33,152479,151419],{"class":59},[33,152481,64],{"class":63},[33,152483,151424],{"class":59},[19,152485,152486],{},"类属性属于类，所有对象共享：",[23,152488,152490],{"className":25,"code":152489,"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,152491,152492,152500,152510,152514,152522,152532,152536,152540,152553,152567,152571,152578,152585],{"__ignoreMap":28},[33,152493,152494,152496,152498],{"class":35,"line":36},[33,152495,16352],{"class":63},[33,152497,9558],{"class":3632},[33,152499,143],{"class":59},[33,152501,152502,152505,152507],{"class":35,"line":43},[33,152503,152504],{"class":59},"    school ",[33,152506,64],{"class":63},[33,152508,152509],{"class":117}," \"黑马学校\"\n",[33,152511,152512],{"class":35,"line":130},[33,152513,127],{"emptyLinePlaceholder":126},[33,152515,152516,152518,152520],{"class":35,"line":146},[33,152517,32452],{"class":63},[33,152519,32455],{"class":39},[33,152521,152238],{"class":59},[33,152523,152524,152526,152528,152530],{"class":35,"line":267},[33,152525,32496],{"class":39},[33,152527,151419],{"class":59},[33,152529,64],{"class":63},[33,152531,151424],{"class":59},[33,152533,152534],{"class":35,"line":275},[33,152535,127],{"emptyLinePlaceholder":126},[33,152537,152538],{"class":35,"line":392},[33,152539,127],{"emptyLinePlaceholder":126},[33,152541,152542,152545,152547,152549,152551],{"class":35,"line":406},[33,152543,152544],{"class":59},"s1 ",[33,152546,64],{"class":63},[33,152548,151514],{"class":59},[33,152550,151517],{"class":117},[33,152552,157],{"class":59},[33,152554,152555,152558,152560,152562,152565],{"class":35,"line":418},[33,152556,152557],{"class":59},"s2 ",[33,152559,64],{"class":63},[33,152561,151514],{"class":59},[33,152563,152564],{"class":117},"\"小红\"",[33,152566,157],{"class":59},[33,152568,152569],{"class":35,"line":425},[33,152570,127],{"emptyLinePlaceholder":126},[33,152572,152573,152575],{"class":35,"line":1147},[33,152574,72],{"class":39},[33,152576,152577],{"class":59},"(s1.school)\n",[33,152579,152580,152582],{"class":35,"line":1329},[33,152581,72],{"class":39},[33,152583,152584],{"class":59},"(s2.school)\n",[33,152586,152587,152589],{"class":35,"line":1341},[33,152588,72],{"class":39},[33,152590,152591],{"class":59},"(Student.school)\n",[19,152593,152594],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152596,152598],{"id":152597},"_1113-类方法和静态方法","11.13 类方法和静态方法",[633,152600,152602],{"id":152601},"_11131-类方法","11.13.1 类方法",[19,152604,152605,152606,152609,152610,1628],{},"类方法使用 ",[30,152607,152608],{},"@classmethod","，第一个参数通常是 ",[30,152611,152612],{},"cls",[23,152614,152616],{"className":25,"code":152615,"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,152617,152618,152626,152634,152638,152646,152656,152666,152670,152674],{"__ignoreMap":28},[33,152619,152620,152622,152624],{"class":35,"line":36},[33,152621,16352],{"class":63},[33,152623,9558],{"class":3632},[33,152625,143],{"class":59},[33,152627,152628,152630,152632],{"class":35,"line":43},[33,152629,152504],{"class":59},[33,152631,64],{"class":63},[33,152633,152509],{"class":117},[33,152635,152636],{"class":35,"line":130},[33,152637,127],{"emptyLinePlaceholder":126},[33,152639,152640,152643],{"class":35,"line":146},[33,152641,152642],{"class":3632},"    @",[33,152644,152645],{"class":39},"classmethod\n",[33,152647,152648,152650,152653],{"class":35,"line":267},[33,152649,32452],{"class":63},[33,152651,152652],{"class":3632}," get_school",[33,152654,152655],{"class":59},"(cls):\n",[33,152657,152658,152660,152663],{"class":35,"line":275},[33,152659,16410],{"class":63},[33,152661,152662],{"class":39}," cls",[33,152664,152665],{"class":59},".school\n",[33,152667,152668],{"class":35,"line":392},[33,152669,127],{"emptyLinePlaceholder":126},[33,152671,152672],{"class":35,"line":406},[33,152673,127],{"emptyLinePlaceholder":126},[33,152675,152676,152678],{"class":35,"line":418},[33,152677,72],{"class":39},[33,152679,152680],{"class":59},"(Student.get_school())\n",[633,152682,152684],{"id":152683},"_11132-静态方法","11.13.2 静态方法",[19,152686,152687,152688,152691],{},"静态方法使用 ",[30,152689,152690],{},"@staticmethod","，不需要访问实例和类。",[23,152693,152695],{"className":25,"code":152694,"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,152696,152697,152706,152713,152722,152733,152737,152741],{"__ignoreMap":28},[33,152698,152699,152701,152704],{"class":35,"line":36},[33,152700,16352],{"class":63},[33,152702,152703],{"class":3632}," MathUtils",[33,152705,143],{"class":59},[33,152707,152708,152710],{"class":35,"line":43},[33,152709,152642],{"class":3632},[33,152711,152712],{"class":39},"staticmethod\n",[33,152714,152715,152717,152719],{"class":35,"line":130},[33,152716,32452],{"class":63},[33,152718,6870],{"class":3632},[33,152720,152721],{"class":59},"(a, b):\n",[33,152723,152724,152726,152728,152730],{"class":35,"line":146},[33,152725,16410],{"class":63},[33,152727,12527],{"class":59},[33,152729,2298],{"class":63},[33,152731,152732],{"class":59}," b\n",[33,152734,152735],{"class":35,"line":267},[33,152736,127],{"emptyLinePlaceholder":126},[33,152738,152739],{"class":35,"line":275},[33,152740,127],{"emptyLinePlaceholder":126},[33,152742,152743,152745,152748,152750,152752,152754],{"class":35,"line":392},[33,152744,72],{"class":39},[33,152746,152747],{"class":59},"(MathUtils.add(",[33,152749,2036],{"class":39},[33,152751,14093],{"class":59},[33,152753,1897],{"class":39},[33,152755,121],{"class":59},[19,152757,152758],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152760,152762],{"id":152761},"_1114-dataclass","11.14 dataclass",[19,152764,152765,152768],{},[30,152766,152767],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[23,152770,152772],{"className":25,"code":152771,"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,152773,152774,152786,152790,152794,152799,152807,152815,152823,152831,152835,152839,152859],{"__ignoreMap":28},[33,152775,152776,152778,152781,152783],{"class":35,"line":36},[33,152777,32388],{"class":63},[33,152779,152780],{"class":59}," dataclasses ",[33,152782,32045],{"class":63},[33,152784,152785],{"class":59}," dataclass\n",[33,152787,152788],{"class":35,"line":43},[33,152789,127],{"emptyLinePlaceholder":126},[33,152791,152792],{"class":35,"line":130},[33,152793,127],{"emptyLinePlaceholder":126},[33,152795,152796],{"class":35,"line":146},[33,152797,152798],{"class":3632},"@dataclass\n",[33,152800,152801,152803,152805],{"class":35,"line":267},[33,152802,16352],{"class":63},[33,152804,9558],{"class":3632},[33,152806,143],{"class":59},[33,152808,152809,152812],{"class":35,"line":275},[33,152810,152811],{"class":59},"    name: ",[33,152813,152814],{"class":39},"str\n",[33,152816,152817,152820],{"class":35,"line":392},[33,152818,152819],{"class":59},"    age: ",[33,152821,152822],{"class":39},"int\n",[33,152824,152825,152828],{"class":35,"line":406},[33,152826,152827],{"class":59},"    score: ",[33,152829,152830],{"class":39},"float\n",[33,152832,152833],{"class":35,"line":418},[33,152834,127],{"emptyLinePlaceholder":126},[33,152836,152837],{"class":35,"line":425},[33,152838,127],{"emptyLinePlaceholder":126},[33,152840,152841,152843,152845,152847,152849,152851,152853,152855,152857],{"class":35,"line":1147},[33,152842,151110],{"class":59},[33,152844,64],{"class":63},[33,152846,151514],{"class":59},[33,152848,151517],{"class":117},[33,152850,14093],{"class":59},[33,152852,2467],{"class":39},[33,152854,14093],{"class":59},[33,152856,2804],{"class":39},[33,152858,157],{"class":59},[33,152860,152861,152863],{"class":35,"line":1329},[33,152862,72],{"class":39},[33,152864,151671],{"class":59},[19,152866,152867,152868,2031,152870,152873],{},"它会自动生成 ",[30,152869,32480],{},[30,152871,152872],{},"__repr__"," 等方法。适合数据模型类。",[14,152875,152877],{"id":152876},"_1115-小案例学生类","11.15 小案例：学生类",[23,152879,152881],{"className":25,"code":152880,"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,152882,152883,152891,152900,152912,152922,152932,152942,152946,152955,152968,152972,152981,152987,152999,153011,153023,153035,153039,153043,153049,153059,153068,153078,153086,153094,153103,153107,153111,153119,153155,153159,153163,153188,153195],{"__ignoreMap":28},[33,152884,152885,152887,152889],{"class":35,"line":36},[33,152886,16352],{"class":63},[33,152888,9558],{"class":3632},[33,152890,143],{"class":59},[33,152892,152893,152895,152897],{"class":35,"line":43},[33,152894,32452],{"class":63},[33,152896,32455],{"class":39},[33,152898,152899],{"class":59},"(self, student_id, name, age, score):\n",[33,152901,152902,152904,152907,152909],{"class":35,"line":130},[33,152903,32496],{"class":39},[33,152905,152906],{"class":59},".student_id ",[33,152908,64],{"class":63},[33,152910,152911],{"class":59}," student_id\n",[33,152913,152914,152916,152918,152920],{"class":35,"line":146},[33,152915,32496],{"class":39},[33,152917,151419],{"class":59},[33,152919,64],{"class":63},[33,152921,151424],{"class":59},[33,152923,152924,152926,152928,152930],{"class":35,"line":267},[33,152925,32496],{"class":39},[33,152927,151431],{"class":59},[33,152929,64],{"class":63},[33,152931,151436],{"class":59},[33,152933,152934,152936,152938,152940],{"class":35,"line":275},[33,152935,32496],{"class":39},[33,152937,151443],{"class":59},[33,152939,64],{"class":63},[33,152941,3261],{"class":59},[33,152943,152944],{"class":35,"line":392},[33,152945,127],{"emptyLinePlaceholder":126},[33,152947,152948,152950,152953],{"class":35,"line":406},[33,152949,32452],{"class":63},[33,152951,152952],{"class":3632}," is_passed",[33,152954,32458],{"class":59},[33,152956,152957,152959,152961,152963,152965],{"class":35,"line":418},[33,152958,16410],{"class":63},[33,152960,40520],{"class":39},[33,152962,151443],{"class":59},[33,152964,78],{"class":63},[33,152966,152967],{"class":39}," 60\n",[33,152969,152970],{"class":35,"line":425},[33,152971,127],{"emptyLinePlaceholder":126},[33,152973,152974,152976,152979],{"class":35,"line":1147},[33,152975,32452],{"class":63},[33,152977,152978],{"class":3632}," to_dict",[33,152980,32458],{"class":59},[33,152982,152983,152985],{"class":35,"line":1329},[33,152984,16410],{"class":63},[33,152986,17228],{"class":59},[33,152988,152989,152992,152994,152996],{"class":35,"line":1341},[33,152990,152991],{"class":117},"            \"student_id\"",[33,152993,53082],{"class":59},[33,152995,32474],{"class":39},[33,152997,152998],{"class":59},".student_id,\n",[33,153000,153001,153004,153006,153008],{"class":35,"line":1348},[33,153002,153003],{"class":117},"            \"name\"",[33,153005,53082],{"class":59},[33,153007,32474],{"class":39},[33,153009,153010],{"class":59},".name,\n",[33,153012,153013,153016,153018,153020],{"class":35,"line":1529},[33,153014,153015],{"class":117},"            \"age\"",[33,153017,53082],{"class":59},[33,153019,32474],{"class":39},[33,153021,153022],{"class":59},".age,\n",[33,153024,153025,153028,153030,153032],{"class":35,"line":1546},[33,153026,153027],{"class":117},"            \"score\"",[33,153029,53082],{"class":59},[33,153031,32474],{"class":39},[33,153033,153034],{"class":59},".score,\n",[33,153036,153037],{"class":35,"line":1551},[33,153038,4195],{"class":59},[33,153040,153041],{"class":35,"line":1566},[33,153042,127],{"emptyLinePlaceholder":126},[33,153044,153045,153047],{"class":35,"line":1578},[33,153046,152642],{"class":3632},[33,153048,152645],{"class":39},[33,153050,153051,153053,153056],{"class":35,"line":1583},[33,153052,32452],{"class":63},[33,153054,153055],{"class":3632}," from_dict",[33,153057,153058],{"class":59},"(cls, data):\n",[33,153060,153061,153063,153065],{"class":35,"line":3369},[33,153062,16410],{"class":63},[33,153064,152662],{"class":39},[33,153066,153067],{"class":59},"(\n",[33,153069,153070,153073,153076],{"class":35,"line":3396},[33,153071,153072],{"class":59},"            data[",[33,153074,153075],{"class":117},"\"student_id\"",[33,153077,89476],{"class":59},[33,153079,153080,153082,153084],{"class":35,"line":3401},[33,153081,153072],{"class":59},[33,153083,64321],{"class":117},[33,153085,89476],{"class":59},[33,153087,153088,153090,153092],{"class":35,"line":3418},[33,153089,153072],{"class":59},[33,153091,70766],{"class":117},[33,153093,89476],{"class":59},[33,153095,153096,153098,153101],{"class":35,"line":3423},[33,153097,153072],{"class":59},[33,153099,153100],{"class":117},"\"score\"",[33,153102,89476],{"class":59},[33,153104,153105],{"class":35,"line":3428},[33,153106,39773],{"class":59},[33,153108,153109],{"class":35,"line":3433},[33,153110,127],{"emptyLinePlaceholder":126},[33,153112,153113,153115,153117],{"class":35,"line":3447},[33,153114,32452],{"class":63},[33,153116,151610],{"class":39},[33,153118,32458],{"class":59},[33,153120,153121,153123,153125,153127,153129,153132,153134,153137,153139,153141,153143,153145,153147,153149,153151,153153],{"class":35,"line":3452},[33,153122,16410],{"class":63},[33,153124,151619],{"class":63},[33,153126,1014],{"class":117},[33,153128,151081],{"class":39},[33,153130,153131],{"class":59},".student_id",[33,153133,1011],{"class":39},[33,153135,153136],{"class":39}," {self",[33,153138,81941],{"class":59},[33,153140,1011],{"class":39},[33,153142,153136],{"class":39},[33,153144,81953],{"class":59},[33,153146,1011],{"class":39},[33,153148,153136],{"class":39},[33,153150,151491],{"class":59},[33,153152,1011],{"class":39},[33,153154,26789],{"class":117},[33,153156,153157],{"class":35,"line":4243},[33,153158,127],{"emptyLinePlaceholder":126},[33,153160,153161],{"class":35,"line":4257},[33,153162,127],{"emptyLinePlaceholder":126},[33,153164,153165,153167,153169,153171,153174,153176,153178,153180,153182,153184,153186],{"class":35,"line":4265},[33,153166,151110],{"class":59},[33,153168,64],{"class":63},[33,153170,151514],{"class":59},[33,153172,153173],{"class":117},"\"001\"",[33,153175,14093],{"class":59},[33,153177,151517],{"class":117},[33,153179,14093],{"class":59},[33,153181,2467],{"class":39},[33,153183,14093],{"class":59},[33,153185,2804],{"class":39},[33,153187,157],{"class":59},[33,153189,153190,153192],{"class":35,"line":4270},[33,153191,72],{"class":39},[33,153193,153194],{"class":59},"(student.is_passed())\n",[33,153196,153197,153199],{"class":35,"line":4276},[33,153198,72],{"class":39},[33,153200,153201],{"class":59},"(student.to_dict())\n",[19,153203,153204,102657,153207,153210],{},[30,153205,153206],{},"to_dict()",[30,153208,153209],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153212,153214],{"id":153213},"_1116-易错点","11.16 易错点",[162,153216,153217,153223,153229,153234,153237,153240],{},[165,153218,153219,153220,1628],{},"类名推荐使用大驼峰，如 ",[30,153221,153222],{},"StudentManager",[165,153224,153225,153226,153228],{},"方法第一个参数必须写 ",[30,153227,32474],{},"，调用时不用传。",[165,153230,153231,153233],{},[30,153232,32480],{}," 不是普通方法，它在创建对象时自动执行。",[165,153235,153236],{},"私有属性不是绝对安全，只是约定和名称改写。",[165,153238,153239],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[165,153241,153242],{},"类中方法太多时，说明职责可能过重。",[14,153244,153246],{"id":153245},"_1117-本章练习","11.17 本章练习",[162,153248,153249,153255,153261,153266,153279],{},[165,153250,153251,153252,153254],{},"定义 ",[30,153253,151197],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[165,153256,153251,153257,153260],{},[30,153258,153259],{},"Account"," 类，实现存款、取款、查询余额。",[165,153262,153251,153263,153265],{},[30,153264,18881],{}," 类，计算圆的周长和面积。",[165,153267,153251,153268,2031,153271,153274,153275,153278],{},[30,153269,153270],{},"Dog",[30,153272,153273],{},"Cat"," 类，并用同一个函数调用它们的 ",[30,153276,153277],{},"speak()"," 方法。",[165,153280,106004,153281,153283,153284,1628],{},[30,153282,152767],{}," 定义一个商品类 ",[30,153285,153286],{},"Product",[1729,153288,153289],{},"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":43,"depth":43,"links":153291},[153292,153293,153294,153295,153296,153297,153299,153300,153301,153302,153303,153304,153305,153309,153310,153311,153312],{"id":150961,"depth":43,"text":150962},{"id":151144,"depth":43,"text":151145},{"id":151208,"depth":43,"text":151209},{"id":151285,"depth":43,"text":151286},{"id":151384,"depth":43,"text":151385},{"id":151548,"depth":43,"text":153298},"11.6 str",{"id":151674,"depth":43,"text":151675},{"id":151939,"depth":43,"text":151940},{"id":152053,"depth":43,"text":152054},{"id":152208,"depth":43,"text":152209},{"id":152332,"depth":43,"text":152333},{"id":152448,"depth":43,"text":152449},{"id":152597,"depth":43,"text":152598,"children":153306},[153307,153308],{"id":152601,"depth":130,"text":152602},{"id":152683,"depth":130,"text":152684},{"id":152761,"depth":43,"text":152762},{"id":152876,"depth":43,"text":152877},{"id":153213,"depth":43,"text":153214},{"id":153245,"depth":43,"text":153246},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150953,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153319,"title":153320,"body":153321,"description":1751,"extension":1752,"meta":156629,"navigation":126,"path":156630,"seo":156631,"stem":156632,"__hash__":156633},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153322,"toc":156605},[153323,153326,153330,153333,153336,153365,153368,153376,153380,153384,153387,153410,153413,153419,153423,154866,154869,154890,154894,154897,154909,154912,155096,155099,155224,155227,155231,155235,155371,155375,155461,155465,155547,155551,155588,155592,155781,155785,155788,156018,156022,156025,156206,156209,156213,156216,156222,156225,156251,156255,156258,156272,156275,156299,156302,156316,156319,156336,156339,156356,156359,156376,156380,156406,156410,156433,156437,156440,156442,156448,156450,156471,156474,156480,156486,156490,156493,156569,156572,156576,156602],[10,153324,153320],{"id":153325},"_12-综合案例与复习路线",[14,153327,153329],{"id":153328},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153331,153332],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153334,153335],{},"一个合格的入门综合项目最好覆盖：",[162,153337,153338,153341,153344,153347,153350,153353,153356,153359,153362],{},[165,153339,153340],{},"输入输出。",[165,153342,153343],{},"判断和循环。",[165,153345,153346],{},"函数拆分。",[165,153348,153349],{},"列表、字典等容器。",[165,153351,153352],{},"文件持久化。",[165,153354,153355],{},"异常处理。",[165,153357,153358],{},"模块拆分。",[165,153360,153361],{},"可选：面向对象。",[165,153363,153364],{},"可选：数据可视化。",[19,153366,153367],{},"本章整理两个方向：",[162,153369,153370,153373],{},[165,153371,153372],{},"学生管理系统。",[165,153374,153375],{},"销售数据统计和可视化。",[14,153377,153379],{"id":153378},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[633,153381,153383],{"id":153382},"_1221-需求","12.2.1 需求",[19,153385,153386],{},"实现一个命令行学生管理系统：",[162,153388,153389,153392,153395,153398,153401,153404,153407],{},[165,153390,153391],{},"添加学生。",[165,153393,153394],{},"删除学生。",[165,153396,153397],{},"修改学生。",[165,153399,153400],{},"查询学生。",[165,153402,153403],{},"显示所有学生。",[165,153405,153406],{},"保存到 JSON 文件。",[165,153408,153409],{},"程序启动时自动读取 JSON 文件。",[19,153411,153412],{},"学生字段：",[23,153414,153417],{"className":153415,"code":153416,"language":6848,"meta":28},[6846],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[30,153418,153416],{"__ignoreMap":28},[14,153420,153422],{"id":153421},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[23,153424,153426],{"className":25,"code":153425,"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,153427,153428,153434,153444,153448,153462,153466,153470,153479,153491,153497,153501,153507,153538,153548,153555,153566,153572,153576,153580,153590,153621,153647,153651,153655,153664,153675,153686,153697,153708,153719,153730,153741,153745,153749,153759,153771,153787,153794,153801,153805,153809,153819,153827,153834,153847,153857,153868,153872,153876,153885,153893,153899,153911,153919,153930,153934,153938,153947,153963,153967,153974,153985,153990,153994,154009,154023,154037,154041,154046,154054,154062,154070,154078,154082,154087,154098,154102,154106,154115,154130,154140,154144,154156,154167,154171,154175,154180,154184,154195,154199,154203,154212,154227,154235,154239,154251,154261,154265,154269,154284,154297,154310,154314,154327,154339,154351,154355,154359,154370,154374,154378,154387,154402,154410,154414,154426,154436,154440,154444,154449,154453,154457,154467,154473,154495,154514,154533,154552,154557,154561,154565,154574,154582,154593,154597,154601,154627,154637,154642,154646,154650,154658,154668,154672,154680,154685,154701,154705,154719,154724,154738,154743,154756,154761,154774,154779,154792,154797,154810,154821,154825,154831,154842,154846,154850,154862],{"__ignoreMap":28},[33,153429,153430,153432],{"class":35,"line":36},[33,153431,32045],{"class":63},[33,153433,148720],{"class":59},[33,153435,153436,153438,153440,153442],{"class":35,"line":43},[33,153437,32388],{"class":63},[33,153439,109949],{"class":59},[33,153441,32045],{"class":63},[33,153443,109954],{"class":59},[33,153445,153446],{"class":35,"line":130},[33,153447,127],{"emptyLinePlaceholder":126},[33,153449,153450,153453,153455,153457,153460],{"class":35,"line":146},[33,153451,153452],{"class":39},"DATA_FILE",[33,153454,15222],{"class":63},[33,153456,110183],{"class":59},[33,153458,153459],{"class":117},"\"students.json\"",[33,153461,157],{"class":59},[33,153463,153464],{"class":35,"line":267},[33,153465,127],{"emptyLinePlaceholder":126},[33,153467,153468],{"class":35,"line":275},[33,153469,127],{"emptyLinePlaceholder":126},[33,153471,153472,153474,153477],{"class":35,"line":392},[33,153473,33597],{"class":63},[33,153475,153476],{"class":3632}," load_students",[33,153478,33603],{"class":59},[33,153480,153481,153483,153485,153488],{"class":35,"line":406},[33,153482,567],{"class":63},[33,153484,783],{"class":63},[33,153486,153487],{"class":39}," DATA_FILE",[33,153489,153490],{"class":59},".exists():\n",[33,153492,153493,153495],{"class":35,"line":418},[33,153494,16410],{"class":63},[33,153496,53483],{"class":59},[33,153498,153499],{"class":35,"line":425},[33,153500,127],{"emptyLinePlaceholder":126},[33,153502,153503,153505],{"class":35,"line":1147},[33,153504,127417],{"class":63},[33,153506,143],{"class":59},[33,153508,153509,153512,153514,153516,153518,153520,153522,153524,153526,153528,153530,153532,153534,153536],{"class":35,"line":1329},[33,153510,153511],{"class":63},"        with",[33,153513,148420],{"class":39},[33,153515,109],{"class":59},[33,153517,153452],{"class":39},[33,153519,14093],{"class":59},[33,153521,148430],{"class":117},[33,153523,14093],{"class":59},[33,153525,148435],{"class":6877},[33,153527,64],{"class":63},[33,153529,148440],{"class":117},[33,153531,15372],{"class":59},[33,153533,33033],{"class":63},[33,153535,149782],{"class":6877},[33,153537,143],{"class":59},[33,153539,153540,153542,153544,153546],{"class":35,"line":1341},[33,153541,17387],{"class":63},[33,153543,149793],{"class":59},[33,153545,47000],{"class":6877},[33,153547,157],{"class":59},[33,153549,153550,153552],{"class":35,"line":1348},[33,153551,127444],{"class":63},[33,153553,153554],{"class":59}," json.JSONDecodeError:\n",[33,153556,153557,153559,153561,153564],{"class":35,"line":1529},[33,153558,583],{"class":39},[33,153560,109],{"class":59},[33,153562,153563],{"class":117},"\"数据文件格式错误，已使用空数据启动\"",[33,153565,157],{"class":59},[33,153567,153568,153570],{"class":35,"line":1546},[33,153569,16410],{"class":63},[33,153571,53483],{"class":59},[33,153573,153574],{"class":35,"line":1551},[33,153575,127],{"emptyLinePlaceholder":126},[33,153577,153578],{"class":35,"line":1566},[33,153579,127],{"emptyLinePlaceholder":126},[33,153581,153582,153584,153587],{"class":35,"line":1578},[33,153583,33597],{"class":63},[33,153585,153586],{"class":3632}," save_students",[33,153588,153589],{"class":59},"(students):\n",[33,153591,153592,153594,153596,153598,153600,153602,153605,153607,153609,153611,153613,153615,153617,153619],{"class":35,"line":1583},[33,153593,35825],{"class":63},[33,153595,148420],{"class":39},[33,153597,109],{"class":59},[33,153599,153452],{"class":39},[33,153601,14093],{"class":59},[33,153603,153604],{"class":117},"\"w\"",[33,153606,14093],{"class":59},[33,153608,148435],{"class":6877},[33,153610,64],{"class":63},[33,153612,148440],{"class":117},[33,153614,15372],{"class":59},[33,153616,33033],{"class":63},[33,153618,149782],{"class":6877},[33,153620,143],{"class":59},[33,153622,153623,153626,153628,153630,153632,153634,153636,153638,153641,153643,153645],{"class":35,"line":3369},[33,153624,153625],{"class":59},"        json.dump(students, ",[33,153627,47000],{"class":6877},[33,153629,14093],{"class":59},[33,153631,148766],{"class":6877},[33,153633,64],{"class":63},[33,153635,35634],{"class":39},[33,153637,14093],{"class":59},[33,153639,153640],{"class":6877},"indent",[33,153642,64],{"class":63},[33,153644,1897],{"class":39},[33,153646,157],{"class":59},[33,153648,153649],{"class":35,"line":3396},[33,153650,127],{"emptyLinePlaceholder":126},[33,153652,153653],{"class":35,"line":3401},[33,153654,127],{"emptyLinePlaceholder":126},[33,153656,153657,153659,153662],{"class":35,"line":3418},[33,153658,33597],{"class":63},[33,153660,153661],{"class":3632}," show_menu",[33,153663,33603],{"class":59},[33,153665,153666,153668,153670,153673],{"class":35,"line":3423},[33,153667,149],{"class":39},[33,153669,109],{"class":59},[33,153671,153672],{"class":117},"\"====== 学生管理系统 ======\"",[33,153674,157],{"class":59},[33,153676,153677,153679,153681,153684],{"class":35,"line":3428},[33,153678,149],{"class":39},[33,153680,109],{"class":59},[33,153682,153683],{"class":117},"\"1. 添加学生\"",[33,153685,157],{"class":59},[33,153687,153688,153690,153692,153695],{"class":35,"line":3433},[33,153689,149],{"class":39},[33,153691,109],{"class":59},[33,153693,153694],{"class":117},"\"2. 删除学生\"",[33,153696,157],{"class":59},[33,153698,153699,153701,153703,153706],{"class":35,"line":3447},[33,153700,149],{"class":39},[33,153702,109],{"class":59},[33,153704,153705],{"class":117},"\"3. 修改学生\"",[33,153707,157],{"class":59},[33,153709,153710,153712,153714,153717],{"class":35,"line":3452},[33,153711,149],{"class":39},[33,153713,109],{"class":59},[33,153715,153716],{"class":117},"\"4. 查询学生\"",[33,153718,157],{"class":59},[33,153720,153721,153723,153725,153728],{"class":35,"line":4243},[33,153722,149],{"class":39},[33,153724,109],{"class":59},[33,153726,153727],{"class":117},"\"5. 显示所有学生\"",[33,153729,157],{"class":59},[33,153731,153732,153734,153736,153739],{"class":35,"line":4257},[33,153733,149],{"class":39},[33,153735,109],{"class":59},[33,153737,153738],{"class":117},"\"0. 退出系统\"",[33,153740,157],{"class":59},[33,153742,153743],{"class":35,"line":4265},[33,153744,127],{"emptyLinePlaceholder":126},[33,153746,153747],{"class":35,"line":4270},[33,153748,127],{"emptyLinePlaceholder":126},[33,153750,153751,153753,153756],{"class":35,"line":4276},[33,153752,33597],{"class":63},[33,153754,153755],{"class":3632}," find_student",[33,153757,153758],{"class":59},"(students, student_id):\n",[33,153760,153761,153763,153766,153768],{"class":35,"line":4282},[33,153762,4864],{"class":63},[33,153764,153765],{"class":59}," student ",[33,153767,27699],{"class":63},[33,153769,153770],{"class":59}," students:\n",[33,153772,153773,153775,153778,153780,153782,153784],{"class":35,"line":4287},[33,153774,4163],{"class":63},[33,153776,153777],{"class":59}," student[",[33,153779,153075],{"class":117},[33,153781,6104],{"class":59},[33,153783,573],{"class":63},[33,153785,153786],{"class":59}," student_id:\n",[33,153788,153789,153791],{"class":35,"line":9608},[33,153790,17387],{"class":63},[33,153792,153793],{"class":59}," student\n",[33,153795,153796,153798],{"class":35,"line":9632},[33,153797,5752],{"class":63},[33,153799,153800],{"class":39}," None\n",[33,153802,153803],{"class":35,"line":9637},[33,153804,127],{"emptyLinePlaceholder":126},[33,153806,153807],{"class":35,"line":9643},[33,153808,127],{"emptyLinePlaceholder":126},[33,153810,153811,153813,153816],{"class":35,"line":9670},[33,153812,33597],{"class":63},[33,153814,153815],{"class":3632}," input_int",[33,153817,153818],{"class":59},"(prompt):\n",[33,153820,153821,153823,153825],{"class":35,"line":9675},[33,153822,3919],{"class":63},[33,153824,96931],{"class":39},[33,153826,143],{"class":59},[33,153828,153829,153832],{"class":35,"line":9681},[33,153830,153831],{"class":63},"        try",[33,153833,143],{"class":59},[33,153835,153836,153838,153840,153842,153844],{"class":35,"line":9693},[33,153837,17387],{"class":63},[33,153839,106],{"class":39},[33,153841,109],{"class":59},[33,153843,112],{"class":39},[33,153845,153846],{"class":59},"(prompt))\n",[33,153848,153849,153852,153855],{"class":35,"line":9705},[33,153850,153851],{"class":63},"        except",[33,153853,153854],{"class":39}," ValueError",[33,153856,143],{"class":59},[33,153858,153859,153861,153863,153866],{"class":35,"line":9717},[33,153860,36297],{"class":39},[33,153862,109],{"class":59},[33,153864,153865],{"class":117},"\"请输入整数\"",[33,153867,157],{"class":59},[33,153869,153870],{"class":35,"line":11375},[33,153871,127],{"emptyLinePlaceholder":126},[33,153873,153874],{"class":35,"line":11400},[33,153875,127],{"emptyLinePlaceholder":126},[33,153877,153878,153880,153883],{"class":35,"line":11423},[33,153879,33597],{"class":63},[33,153881,153882],{"class":3632}," input_float",[33,153884,153818],{"class":59},[33,153886,153887,153889,153891],{"class":35,"line":11447},[33,153888,3919],{"class":63},[33,153890,96931],{"class":39},[33,153892,143],{"class":59},[33,153894,153895,153897],{"class":35,"line":11452},[33,153896,153831],{"class":63},[33,153898,143],{"class":59},[33,153900,153901,153903,153905,153907,153909],{"class":35,"line":11457},[33,153902,17387],{"class":63},[33,153904,1201],{"class":39},[33,153906,109],{"class":59},[33,153908,112],{"class":39},[33,153910,153846],{"class":59},[33,153912,153913,153915,153917],{"class":35,"line":11462},[33,153914,153851],{"class":63},[33,153916,153854],{"class":39},[33,153918,143],{"class":59},[33,153920,153921,153923,153925,153928],{"class":35,"line":11471},[33,153922,36297],{"class":39},[33,153924,109],{"class":59},[33,153926,153927],{"class":117},"\"请输入数字\"",[33,153929,157],{"class":59},[33,153931,153932],{"class":35,"line":11476},[33,153933,127],{"emptyLinePlaceholder":126},[33,153935,153936],{"class":35,"line":11482},[33,153937,127],{"emptyLinePlaceholder":126},[33,153939,153940,153942,153945],{"class":35,"line":11503},[33,153941,33597],{"class":63},[33,153943,153944],{"class":3632}," add_student",[33,153946,153589],{"class":59},[33,153948,153949,153952,153954,153956,153958,153961],{"class":35,"line":11509},[33,153950,153951],{"class":59},"    student_id ",[33,153953,64],{"class":63},[33,153955,539],{"class":39},[33,153957,109],{"class":59},[33,153959,153960],{"class":117},"\"请输入学号:\"",[33,153962,157],{"class":59},[33,153964,153965],{"class":35,"line":11523},[33,153966,127],{"emptyLinePlaceholder":126},[33,153968,153969,153971],{"class":35,"line":11529},[33,153970,567],{"class":63},[33,153972,153973],{"class":59}," find_student(students, student_id):\n",[33,153975,153976,153978,153980,153983],{"class":35,"line":11556},[33,153977,583],{"class":39},[33,153979,109],{"class":59},[33,153981,153982],{"class":117},"\"学号已存在\"",[33,153984,157],{"class":59},[33,153986,153987],{"class":35,"line":11565},[33,153988,153989],{"class":63},"        return\n",[33,153991,153992],{"class":35,"line":11571},[33,153993,127],{"emptyLinePlaceholder":126},[33,153995,153996,153999,154001,154003,154005,154007],{"class":35,"line":11579},[33,153997,153998],{"class":59},"    name ",[33,154000,64],{"class":63},[33,154002,539],{"class":39},[33,154004,109],{"class":59},[33,154006,977],{"class":117},[33,154008,157],{"class":59},[33,154010,154011,154014,154016,154019,154021],{"class":35,"line":11584},[33,154012,154013],{"class":59},"    age ",[33,154015,64],{"class":63},[33,154017,154018],{"class":59}," input_int(",[33,154020,118],{"class":117},[33,154022,157],{"class":59},[33,154024,154025,154028,154030,154033,154035],{"class":35,"line":18259},[33,154026,154027],{"class":59},"    score ",[33,154029,64],{"class":63},[33,154031,154032],{"class":59}," input_float(",[33,154034,333],{"class":117},[33,154036,157],{"class":59},[33,154038,154039],{"class":35,"line":18265},[33,154040,127],{"emptyLinePlaceholder":126},[33,154042,154043],{"class":35,"line":18288},[33,154044,154045],{"class":59},"    students.append({\n",[33,154047,154048,154051],{"class":35,"line":18294},[33,154049,154050],{"class":117},"        \"student_id\"",[33,154052,154053],{"class":59},": student_id,\n",[33,154055,154056,154059],{"class":35,"line":18317},[33,154057,154058],{"class":117},"        \"name\"",[33,154060,154061],{"class":59},": name,\n",[33,154063,154064,154067],{"class":35,"line":18331},[33,154065,154066],{"class":117},"        \"age\"",[33,154068,154069],{"class":59},": age,\n",[33,154071,154072,154075],{"class":35,"line":18351},[33,154073,154074],{"class":117},"        \"score\"",[33,154076,154077],{"class":59},": score,\n",[33,154079,154080],{"class":35,"line":18357},[33,154081,35108],{"class":59},[33,154083,154084],{"class":35,"line":18368},[33,154085,154086],{"class":59},"    save_students(students)\n",[33,154088,154089,154091,154093,154096],{"class":35,"line":18391},[33,154090,149],{"class":39},[33,154092,109],{"class":59},[33,154094,154095],{"class":117},"\"添加成功\"",[33,154097,157],{"class":59},[33,154099,154100],{"class":35,"line":18413},[33,154101,127],{"emptyLinePlaceholder":126},[33,154103,154104],{"class":35,"line":18418},[33,154105,127],{"emptyLinePlaceholder":126},[33,154107,154108,154110,154113],{"class":35,"line":18424},[33,154109,33597],{"class":63},[33,154111,154112],{"class":3632}," delete_student",[33,154114,153589],{"class":59},[33,154116,154117,154119,154121,154123,154125,154128],{"class":35,"line":18438},[33,154118,153951],{"class":59},[33,154120,64],{"class":63},[33,154122,539],{"class":39},[33,154124,109],{"class":59},[33,154126,154127],{"class":117},"\"请输入要删除的学号:\"",[33,154129,157],{"class":59},[33,154131,154132,154135,154137],{"class":35,"line":18451},[33,154133,154134],{"class":59},"    student ",[33,154136,64],{"class":63},[33,154138,154139],{"class":59}," find_student(students, student_id)\n",[33,154141,154142],{"class":35,"line":18456},[33,154143,127],{"emptyLinePlaceholder":126},[33,154145,154146,154148,154150,154152,154154],{"class":35,"line":18470},[33,154147,567],{"class":63},[33,154149,153765],{"class":59},[33,154151,40574],{"class":63},[33,154153,40579],{"class":39},[33,154155,143],{"class":59},[33,154157,154158,154160,154162,154165],{"class":35,"line":18475},[33,154159,583],{"class":39},[33,154161,109],{"class":59},[33,154163,154164],{"class":117},"\"学生不存在\"",[33,154166,157],{"class":59},[33,154168,154169],{"class":35,"line":18481},[33,154170,153989],{"class":63},[33,154172,154173],{"class":35,"line":18486},[33,154174,127],{"emptyLinePlaceholder":126},[33,154176,154177],{"class":35,"line":18500},[33,154178,154179],{"class":59},"    students.remove(student)\n",[33,154181,154182],{"class":35,"line":18505},[33,154183,154086],{"class":59},[33,154185,154186,154188,154190,154193],{"class":35,"line":18510},[33,154187,149],{"class":39},[33,154189,109],{"class":59},[33,154191,154192],{"class":117},"\"删除成功\"",[33,154194,157],{"class":59},[33,154196,154197],{"class":35,"line":18524},[33,154198,127],{"emptyLinePlaceholder":126},[33,154200,154201],{"class":35,"line":18536},[33,154202,127],{"emptyLinePlaceholder":126},[33,154204,154205,154207,154210],{"class":35,"line":18541},[33,154206,33597],{"class":63},[33,154208,154209],{"class":3632}," update_student",[33,154211,153589],{"class":59},[33,154213,154214,154216,154218,154220,154222,154225],{"class":35,"line":18554},[33,154215,153951],{"class":59},[33,154217,64],{"class":63},[33,154219,539],{"class":39},[33,154221,109],{"class":59},[33,154223,154224],{"class":117},"\"请输入要修改的学号:\"",[33,154226,157],{"class":59},[33,154228,154229,154231,154233],{"class":35,"line":18559},[33,154230,154134],{"class":59},[33,154232,64],{"class":63},[33,154234,154139],{"class":59},[33,154236,154237],{"class":35,"line":18564},[33,154238,127],{"emptyLinePlaceholder":126},[33,154240,154241,154243,154245,154247,154249],{"class":35,"line":18569},[33,154242,567],{"class":63},[33,154244,153765],{"class":59},[33,154246,40574],{"class":63},[33,154248,40579],{"class":39},[33,154250,143],{"class":59},[33,154252,154253,154255,154257,154259],{"class":35,"line":18582},[33,154254,583],{"class":39},[33,154256,109],{"class":59},[33,154258,154164],{"class":117},[33,154260,157],{"class":59},[33,154262,154263],{"class":35,"line":18587},[33,154264,153989],{"class":63},[33,154266,154267],{"class":35,"line":34280},[33,154268,127],{"emptyLinePlaceholder":126},[33,154270,154271,154273,154275,154277,154279,154282],{"class":35,"line":34286},[33,154272,153998],{"class":59},[33,154274,64],{"class":63},[33,154276,539],{"class":39},[33,154278,109],{"class":59},[33,154280,154281],{"class":117},"\"请输入新姓名:\"",[33,154283,157],{"class":59},[33,154285,154286,154288,154290,154292,154295],{"class":35,"line":34292},[33,154287,154013],{"class":59},[33,154289,64],{"class":63},[33,154291,154018],{"class":59},[33,154293,154294],{"class":117},"\"请输入新年龄:\"",[33,154296,157],{"class":59},[33,154298,154299,154301,154303,154305,154308],{"class":35,"line":34298},[33,154300,154027],{"class":59},[33,154302,64],{"class":63},[33,154304,154032],{"class":59},[33,154306,154307],{"class":117},"\"请输入新成绩:\"",[33,154309,157],{"class":59},[33,154311,154312],{"class":35,"line":34304},[33,154313,127],{"emptyLinePlaceholder":126},[33,154315,154316,154319,154321,154323,154325],{"class":35,"line":34315},[33,154317,154318],{"class":59},"    student[",[33,154320,64321],{"class":117},[33,154322,6104],{"class":59},[33,154324,64],{"class":63},[33,154326,151424],{"class":59},[33,154328,154329,154331,154333,154335,154337],{"class":35,"line":34321},[33,154330,154318],{"class":59},[33,154332,70766],{"class":117},[33,154334,6104],{"class":59},[33,154336,64],{"class":63},[33,154338,151436],{"class":59},[33,154340,154341,154343,154345,154347,154349],{"class":35,"line":34341},[33,154342,154318],{"class":59},[33,154344,153100],{"class":117},[33,154346,6104],{"class":59},[33,154348,64],{"class":63},[33,154350,3261],{"class":59},[33,154352,154353],{"class":35,"line":34347},[33,154354,127],{"emptyLinePlaceholder":126},[33,154356,154357],{"class":35,"line":34358},[33,154358,154086],{"class":59},[33,154360,154361,154363,154365,154368],{"class":35,"line":34364},[33,154362,149],{"class":39},[33,154364,109],{"class":59},[33,154366,154367],{"class":117},"\"修改成功\"",[33,154369,157],{"class":59},[33,154371,154372],{"class":35,"line":34370},[33,154373,127],{"emptyLinePlaceholder":126},[33,154375,154376],{"class":35,"line":34376},[33,154377,127],{"emptyLinePlaceholder":126},[33,154379,154380,154382,154385],{"class":35,"line":34382},[33,154381,33597],{"class":63},[33,154383,154384],{"class":3632}," query_student",[33,154386,153589],{"class":59},[33,154388,154389,154391,154393,154395,154397,154400],{"class":35,"line":34388},[33,154390,153951],{"class":59},[33,154392,64],{"class":63},[33,154394,539],{"class":39},[33,154396,109],{"class":59},[33,154398,154399],{"class":117},"\"请输入要查询的学号:\"",[33,154401,157],{"class":59},[33,154403,154404,154406,154408],{"class":35,"line":34394},[33,154405,154134],{"class":59},[33,154407,64],{"class":63},[33,154409,154139],{"class":59},[33,154411,154412],{"class":35,"line":34400},[33,154413,127],{"emptyLinePlaceholder":126},[33,154415,154416,154418,154420,154422,154424],{"class":35,"line":34420},[33,154417,567],{"class":63},[33,154419,153765],{"class":59},[33,154421,40574],{"class":63},[33,154423,40579],{"class":39},[33,154425,143],{"class":59},[33,154427,154428,154430,154432,154434],{"class":35,"line":34426},[33,154429,583],{"class":39},[33,154431,109],{"class":59},[33,154433,154164],{"class":117},[33,154435,157],{"class":59},[33,154437,154438],{"class":35,"line":34442},[33,154439,153989],{"class":63},[33,154441,154442],{"class":35,"line":34448},[33,154443,127],{"emptyLinePlaceholder":126},[33,154445,154446],{"class":35,"line":34462},[33,154447,154448],{"class":59},"    print_student(student)\n",[33,154450,154451],{"class":35,"line":34468},[33,154452,127],{"emptyLinePlaceholder":126},[33,154454,154455],{"class":35,"line":34483},[33,154456,127],{"emptyLinePlaceholder":126},[33,154458,154459,154461,154464],{"class":35,"line":34489},[33,154460,33597],{"class":63},[33,154462,154463],{"class":3632}," print_student",[33,154465,154466],{"class":59},"(student):\n",[33,154468,154469,154471],{"class":35,"line":34498},[33,154470,149],{"class":39},[33,154472,153067],{"class":59},[33,154474,154475,154478,154480,154482,154485,154488,154490,154493],{"class":35,"line":34504},[33,154476,154477],{"class":63},"        f",[33,154479,1014],{"class":117},[33,154481,1005],{"class":39},[33,154483,154484],{"class":59},"student[",[33,154486,154487],{"class":117},"'student_id'",[33,154489,2756],{"class":59},[33,154491,154492],{"class":39},"}\\t",[33,154494,26789],{"class":117},[33,154496,154497,154499,154501,154503,154505,154508,154510,154512],{"class":35,"line":34513},[33,154498,154477],{"class":63},[33,154500,1014],{"class":117},[33,154502,1005],{"class":39},[33,154504,154484],{"class":59},[33,154506,154507],{"class":117},"'name'",[33,154509,2756],{"class":59},[33,154511,154492],{"class":39},[33,154513,26789],{"class":117},[33,154515,154516,154518,154520,154522,154524,154527,154529,154531],{"class":35,"line":34519},[33,154517,154477],{"class":63},[33,154519,1014],{"class":117},[33,154521,1005],{"class":39},[33,154523,154484],{"class":59},[33,154525,154526],{"class":117},"'age'",[33,154528,2756],{"class":59},[33,154530,154492],{"class":39},[33,154532,26789],{"class":117},[33,154534,154535,154537,154539,154541,154543,154546,154548,154550],{"class":35,"line":34525},[33,154536,154477],{"class":63},[33,154538,1014],{"class":117},[33,154540,1005],{"class":39},[33,154542,154484],{"class":59},[33,154544,154545],{"class":117},"'score'",[33,154547,2756],{"class":59},[33,154549,1011],{"class":39},[33,154551,26789],{"class":117},[33,154553,154554],{"class":35,"line":34534},[33,154555,154556],{"class":59},"    )\n",[33,154558,154559],{"class":35,"line":34540},[33,154560,127],{"emptyLinePlaceholder":126},[33,154562,154563],{"class":35,"line":34551},[33,154564,127],{"emptyLinePlaceholder":126},[33,154566,154567,154569,154572],{"class":35,"line":34557},[33,154568,33597],{"class":63},[33,154570,154571],{"class":3632}," show_all_students",[33,154573,153589],{"class":59},[33,154575,154576,154578,154580],{"class":35,"line":34576},[33,154577,567],{"class":63},[33,154579,783],{"class":63},[33,154581,153770],{"class":59},[33,154583,154584,154586,154588,154591],{"class":35,"line":34582},[33,154585,583],{"class":39},[33,154587,109],{"class":59},[33,154589,154590],{"class":117},"\"暂无学生\"",[33,154592,157],{"class":59},[33,154594,154595],{"class":35,"line":34593},[33,154596,153989],{"class":63},[33,154598,154599],{"class":35,"line":34599},[33,154600,127],{"emptyLinePlaceholder":126},[33,154602,154603,154605,154607,154610,154612,154615,154617,154620,154622,154625],{"class":35,"line":34619},[33,154604,149],{"class":39},[33,154606,109],{"class":59},[33,154608,154609],{"class":117},"\"学号",[33,154611,2916],{"class":39},[33,154613,154614],{"class":117},"姓名",[33,154616,2916],{"class":39},[33,154618,154619],{"class":117},"年龄",[33,154621,2916],{"class":39},[33,154623,154624],{"class":117},"成绩\"",[33,154626,157],{"class":59},[33,154628,154629,154631,154633,154635],{"class":35,"line":34635},[33,154630,4864],{"class":63},[33,154632,153765],{"class":59},[33,154634,27699],{"class":63},[33,154636,153770],{"class":59},[33,154638,154639],{"class":35,"line":34641},[33,154640,154641],{"class":59},"        print_student(student)\n",[33,154643,154644],{"class":35,"line":34655},[33,154645,127],{"emptyLinePlaceholder":126},[33,154647,154648],{"class":35,"line":34661},[33,154649,127],{"emptyLinePlaceholder":126},[33,154651,154652,154654,154656],{"class":35,"line":34667},[33,154653,33597],{"class":63},[33,154655,3642],{"class":3632},[33,154657,33603],{"class":59},[33,154659,154660,154663,154665],{"class":35,"line":34678},[33,154661,154662],{"class":59},"    students ",[33,154664,64],{"class":63},[33,154666,154667],{"class":59}," load_students()\n",[33,154669,154670],{"class":35,"line":34684},[33,154671,127],{"emptyLinePlaceholder":126},[33,154673,154674,154676,154678],{"class":35,"line":34690},[33,154675,3919],{"class":63},[33,154677,96931],{"class":39},[33,154679,143],{"class":59},[33,154681,154682],{"class":35,"line":34700},[33,154683,154684],{"class":59},"        show_menu()\n",[33,154686,154687,154690,154692,154694,154696,154699],{"class":35,"line":34706},[33,154688,154689],{"class":59},"        choice ",[33,154691,64],{"class":63},[33,154693,539],{"class":39},[33,154695,109],{"class":59},[33,154697,154698],{"class":117},"\"请输入操作:\"",[33,154700,157],{"class":59},[33,154702,154703],{"class":35,"line":34717},[33,154704,127],{"emptyLinePlaceholder":126},[33,154706,154707,154709,154712,154714,154717],{"class":35,"line":34723},[33,154708,4163],{"class":63},[33,154710,154711],{"class":59}," choice ",[33,154713,573],{"class":63},[33,154715,154716],{"class":117}," \"1\"",[33,154718,143],{"class":59},[33,154720,154721],{"class":35,"line":34733},[33,154722,154723],{"class":59},"            add_student(students)\n",[33,154725,154726,154729,154731,154733,154736],{"class":35,"line":34738},[33,154727,154728],{"class":63},"        elif",[33,154730,154711],{"class":59},[33,154732,573],{"class":63},[33,154734,154735],{"class":117}," \"2\"",[33,154737,143],{"class":59},[33,154739,154740],{"class":35,"line":34744},[33,154741,154742],{"class":59},"            delete_student(students)\n",[33,154744,154745,154747,154749,154751,154754],{"class":35,"line":34793},[33,154746,154728],{"class":63},[33,154748,154711],{"class":59},[33,154750,573],{"class":63},[33,154752,154753],{"class":117}," \"3\"",[33,154755,143],{"class":59},[33,154757,154758],{"class":35,"line":34840},[33,154759,154760],{"class":59},"            update_student(students)\n",[33,154762,154763,154765,154767,154769,154772],{"class":35,"line":34845},[33,154764,154728],{"class":63},[33,154766,154711],{"class":59},[33,154768,573],{"class":63},[33,154770,154771],{"class":117}," \"4\"",[33,154773,143],{"class":59},[33,154775,154776],{"class":35,"line":34851},[33,154777,154778],{"class":59},"            query_student(students)\n",[33,154780,154781,154783,154785,154787,154790],{"class":35,"line":34870},[33,154782,154728],{"class":63},[33,154784,154711],{"class":59},[33,154786,573],{"class":63},[33,154788,154789],{"class":117}," \"5\"",[33,154791,143],{"class":59},[33,154793,154794],{"class":35,"line":34876},[33,154795,154796],{"class":59},"            show_all_students(students)\n",[33,154798,154799,154801,154803,154805,154808],{"class":35,"line":34896},[33,154800,154728],{"class":63},[33,154802,154711],{"class":59},[33,154804,573],{"class":63},[33,154806,154807],{"class":117}," \"0\"",[33,154809,143],{"class":59},[33,154811,154812,154814,154816,154819],{"class":35,"line":34902},[33,154813,36297],{"class":39},[33,154815,109],{"class":59},[33,154817,154818],{"class":117},"\"退出系统\"",[33,154820,157],{"class":59},[33,154822,154823],{"class":35,"line":34908},[33,154824,116734],{"class":63},[33,154826,154827,154829],{"class":35,"line":34918},[33,154828,4200],{"class":63},[33,154830,143],{"class":59},[33,154832,154833,154835,154837,154840],{"class":35,"line":34923},[33,154834,36297],{"class":39},[33,154836,109],{"class":59},[33,154838,154839],{"class":117},"\"输入错误\"",[33,154841,157],{"class":59},[33,154843,154844],{"class":35,"line":34929},[33,154845,127],{"emptyLinePlaceholder":126},[33,154847,154848],{"class":35,"line":34945},[33,154849,127],{"emptyLinePlaceholder":126},[33,154851,154852,154854,154856,154858,154860],{"class":35,"line":34990},[33,154853,133],{"class":63},[33,154855,32871],{"class":39},[33,154857,1644],{"class":63},[33,154859,103200],{"class":117},[33,154861,143],{"class":59},[33,154863,154864],{"class":35,"line":34996},[33,154865,103207],{"class":59},[19,154867,154868],{},"这个项目串联了：",[162,154870,154871,154874,154877,154880,154883,154885],{},[165,154872,154873],{},"菜单循环。",[165,154875,154876],{},"函数封装。",[165,154878,154879],{},"列表字典。",[165,154881,154882],{},"JSON 读写。",[165,154884,153355],{},[165,154886,154887,1628],{},[30,154888,154889],{},"if __name__ == \"__main__\"",[14,154891,154893],{"id":154892},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154895,154896],{},"可以进一步拆成两个类：",[162,154898,154899,154904],{},[165,154900,154901,154903],{},[30,154902,151197],{},"：表示单个学生。",[165,154905,154906,154908],{},[30,154907,153222],{},"：负责学生增删改查和文件保存。",[19,154910,154911],{},"示意代码：",[23,154913,154915],{"className":25,"code":154914,"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,154916,154917,154927,154931,154935,154939,154947,154954,154960,154966,154972,154976,154984,154990,155000,155010,155020,155030,155034,155038,155044,155052,155060,155068,155076,155084,155092],{"__ignoreMap":28},[33,154918,154919,154921,154923,154925],{"class":35,"line":36},[33,154920,32388],{"class":63},[33,154922,152780],{"class":59},[33,154924,32045],{"class":63},[33,154926,152785],{"class":59},[33,154928,154929],{"class":35,"line":43},[33,154930,127],{"emptyLinePlaceholder":126},[33,154932,154933],{"class":35,"line":130},[33,154934,127],{"emptyLinePlaceholder":126},[33,154936,154937],{"class":35,"line":146},[33,154938,152798],{"class":3632},[33,154940,154941,154943,154945],{"class":35,"line":267},[33,154942,16352],{"class":63},[33,154944,9558],{"class":3632},[33,154946,143],{"class":59},[33,154948,154949,154952],{"class":35,"line":275},[33,154950,154951],{"class":59},"    student_id: ",[33,154953,152814],{"class":39},[33,154955,154956,154958],{"class":35,"line":392},[33,154957,152811],{"class":59},[33,154959,152814],{"class":39},[33,154961,154962,154964],{"class":35,"line":406},[33,154963,152819],{"class":59},[33,154965,152822],{"class":39},[33,154967,154968,154970],{"class":35,"line":418},[33,154969,152827],{"class":59},[33,154971,152830],{"class":39},[33,154973,154974],{"class":35,"line":425},[33,154975,127],{"emptyLinePlaceholder":126},[33,154977,154978,154980,154982],{"class":35,"line":1147},[33,154979,32452],{"class":63},[33,154981,152978],{"class":3632},[33,154983,32458],{"class":59},[33,154985,154986,154988],{"class":35,"line":1329},[33,154987,16410],{"class":63},[33,154989,17228],{"class":59},[33,154991,154992,154994,154996,154998],{"class":35,"line":1341},[33,154993,152991],{"class":117},[33,154995,53082],{"class":59},[33,154997,32474],{"class":39},[33,154999,152998],{"class":59},[33,155001,155002,155004,155006,155008],{"class":35,"line":1348},[33,155003,153003],{"class":117},[33,155005,53082],{"class":59},[33,155007,32474],{"class":39},[33,155009,153010],{"class":59},[33,155011,155012,155014,155016,155018],{"class":35,"line":1529},[33,155013,153015],{"class":117},[33,155015,53082],{"class":59},[33,155017,32474],{"class":39},[33,155019,153022],{"class":59},[33,155021,155022,155024,155026,155028],{"class":35,"line":1546},[33,155023,153027],{"class":117},[33,155025,53082],{"class":59},[33,155027,32474],{"class":39},[33,155029,153034],{"class":59},[33,155031,155032],{"class":35,"line":1551},[33,155033,4195],{"class":59},[33,155035,155036],{"class":35,"line":1566},[33,155037,127],{"emptyLinePlaceholder":126},[33,155039,155040,155042],{"class":35,"line":1578},[33,155041,152642],{"class":3632},[33,155043,152645],{"class":39},[33,155045,155046,155048,155050],{"class":35,"line":1583},[33,155047,32452],{"class":63},[33,155049,153055],{"class":3632},[33,155051,153058],{"class":59},[33,155053,155054,155056,155058],{"class":35,"line":3369},[33,155055,16410],{"class":63},[33,155057,152662],{"class":39},[33,155059,153067],{"class":59},[33,155061,155062,155064,155066],{"class":35,"line":3396},[33,155063,153072],{"class":59},[33,155065,153075],{"class":117},[33,155067,89476],{"class":59},[33,155069,155070,155072,155074],{"class":35,"line":3401},[33,155071,153072],{"class":59},[33,155073,64321],{"class":117},[33,155075,89476],{"class":59},[33,155077,155078,155080,155082],{"class":35,"line":3418},[33,155079,153072],{"class":59},[33,155081,70766],{"class":117},[33,155083,89476],{"class":59},[33,155085,155086,155088,155090],{"class":35,"line":3423},[33,155087,153072],{"class":59},[33,155089,153100],{"class":117},[33,155091,89476],{"class":59},[33,155093,155094],{"class":35,"line":3428},[33,155095,39773],{"class":59},[19,155097,155098],{},"管理器示意：",[23,155100,155102],{"className":25,"code":155101,"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,155103,155104,155113,155121,155132,155136,155146,155159,155170,155177,155183,155187,155196,155205,155211,155218],{"__ignoreMap":28},[33,155105,155106,155108,155111],{"class":35,"line":36},[33,155107,16352],{"class":63},[33,155109,155110],{"class":3632}," StudentManager",[33,155112,143],{"class":59},[33,155114,155115,155117,155119],{"class":35,"line":43},[33,155116,32452],{"class":63},[33,155118,32455],{"class":39},[33,155120,32458],{"class":59},[33,155122,155123,155125,155128,155130],{"class":35,"line":130},[33,155124,32496],{"class":39},[33,155126,155127],{"class":59},".students ",[33,155129,64],{"class":63},[33,155131,53483],{"class":59},[33,155133,155134],{"class":35,"line":146},[33,155135,127],{"emptyLinePlaceholder":126},[33,155137,155138,155140,155143],{"class":35,"line":267},[33,155139,32452],{"class":63},[33,155141,155142],{"class":3632}," find_by_id",[33,155144,155145],{"class":59},"(self, student_id):\n",[33,155147,155148,155150,155152,155154,155156],{"class":35,"line":275},[33,155149,5066],{"class":63},[33,155151,153765],{"class":59},[33,155153,27699],{"class":63},[33,155155,40520],{"class":39},[33,155157,155158],{"class":59},".students:\n",[33,155160,155161,155163,155166,155168],{"class":35,"line":392},[33,155162,6303],{"class":63},[33,155164,155165],{"class":59}," student.student_id ",[33,155167,573],{"class":63},[33,155169,153786],{"class":59},[33,155171,155172,155175],{"class":35,"line":406},[33,155173,155174],{"class":63},"                return",[33,155176,153793],{"class":59},[33,155178,155179,155181],{"class":35,"line":418},[33,155180,16410],{"class":63},[33,155182,153800],{"class":39},[33,155184,155185],{"class":35,"line":425},[33,155186,127],{"emptyLinePlaceholder":126},[33,155188,155189,155191,155193],{"class":35,"line":1147},[33,155190,32452],{"class":63},[33,155192,6870],{"class":3632},[33,155194,155195],{"class":59},"(self, student):\n",[33,155197,155198,155200,155202],{"class":35,"line":1329},[33,155199,4163],{"class":63},[33,155201,40520],{"class":39},[33,155203,155204],{"class":59},".find_by_id(student.student_id):\n",[33,155206,155207,155209],{"class":35,"line":1341},[33,155208,17387],{"class":63},[33,155210,714],{"class":39},[33,155212,155213,155215],{"class":35,"line":1348},[33,155214,32496],{"class":39},[33,155216,155217],{"class":59},".students.append(student)\n",[33,155219,155220,155222],{"class":35,"line":1529},[33,155221,16410],{"class":63},[33,155223,662],{"class":39},[19,155225,155226],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155228,155230],{"id":155229},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[633,155232,155234],{"id":155233},"_1251-数据结构","12.5.1 数据结构",[23,155236,155238],{"className":25,"code":155237,"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,155239,155240,155248,155279,155309,155338,155367],{"__ignoreMap":28},[33,155241,155242,155244,155246],{"class":35,"line":36},[33,155243,150094],{"class":59},[33,155245,64],{"class":63},[33,155247,57091],{"class":59},[33,155249,155250,155252,155254,155256,155258,155260,155263,155265,155268,155270,155272,155274,155277],{"class":35,"line":43},[33,155251,150014],{"class":59},[33,155253,149626],{"class":117},[33,155255,53082],{"class":59},[33,155257,150237],{"class":117},[33,155259,14093],{"class":59},[33,155261,155262],{"class":117},"\"category\"",[33,155264,53082],{"class":59},[33,155266,155267],{"class":117},"\"手机\"",[33,155269,14093],{"class":59},[33,155271,85724],{"class":117},[33,155273,53082],{"class":59},[33,155275,155276],{"class":39},"12000",[33,155278,6591],{"class":59},[33,155280,155281,155283,155285,155287,155289,155291,155293,155295,155298,155300,155302,155304,155307],{"class":35,"line":130},[33,155282,150014],{"class":59},[33,155284,149626],{"class":117},[33,155286,53082],{"class":59},[33,155288,150237],{"class":117},[33,155290,14093],{"class":59},[33,155292,155262],{"class":117},[33,155294,53082],{"class":59},[33,155296,155297],{"class":117},"\"电脑\"",[33,155299,14093],{"class":59},[33,155301,85724],{"class":117},[33,155303,53082],{"class":59},[33,155305,155306],{"class":39},"18000",[33,155308,6591],{"class":59},[33,155310,155311,155313,155315,155317,155319,155321,155323,155325,155327,155329,155331,155333,155336],{"class":35,"line":146},[33,155312,150014],{"class":59},[33,155314,149626],{"class":117},[33,155316,53082],{"class":59},[33,155318,150258],{"class":117},[33,155320,14093],{"class":59},[33,155322,155262],{"class":117},[33,155324,53082],{"class":59},[33,155326,155267],{"class":117},[33,155328,14093],{"class":59},[33,155330,85724],{"class":117},[33,155332,53082],{"class":59},[33,155334,155335],{"class":39},"15000",[33,155337,6591],{"class":59},[33,155339,155340,155342,155344,155346,155348,155350,155352,155354,155356,155358,155360,155362,155365],{"class":35,"line":267},[33,155341,150014],{"class":59},[33,155343,149626],{"class":117},[33,155345,53082],{"class":59},[33,155347,150258],{"class":117},[33,155349,14093],{"class":59},[33,155351,155262],{"class":117},[33,155353,53082],{"class":59},[33,155355,155297],{"class":117},[33,155357,14093],{"class":59},[33,155359,85724],{"class":117},[33,155361,53082],{"class":59},[33,155363,155364],{"class":39},"16000",[33,155366,6591],{"class":59},[33,155368,155369],{"class":35,"line":275},[33,155370,34893],{"class":59},[633,155372,155374],{"id":155373},"_1252-按日期统计","12.5.2 按日期统计",[23,155376,155378],{"className":25,"code":155377,"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,155379,155380,155389,155393,155404,155418,155431,155450,155454],{"__ignoreMap":28},[33,155381,155382,155385,155387],{"class":35,"line":36},[33,155383,155384],{"class":59},"daily_total ",[33,155386,64],{"class":63},[33,155388,89508],{"class":59},[33,155390,155391],{"class":35,"line":43},[33,155392,127],{"emptyLinePlaceholder":126},[33,155394,155395,155397,155399,155401],{"class":35,"line":130},[33,155396,4690],{"class":63},[33,155398,149838],{"class":59},[33,155400,27699],{"class":63},[33,155402,155403],{"class":59}," sales:\n",[33,155405,155406,155409,155411,155414,155416],{"class":35,"line":146},[33,155407,155408],{"class":59},"    date ",[33,155410,64],{"class":63},[33,155412,155413],{"class":59}," item[",[33,155415,149626],{"class":117},[33,155417,34893],{"class":59},[33,155419,155420,155423,155425,155427,155429],{"class":35,"line":267},[33,155421,155422],{"class":59},"    amount ",[33,155424,64],{"class":63},[33,155426,155413],{"class":59},[33,155428,85724],{"class":117},[33,155430,34893],{"class":59},[33,155432,155433,155436,155438,155441,155443,155445,155447],{"class":35,"line":275},[33,155434,155435],{"class":59},"    daily_total[date] ",[33,155437,64],{"class":63},[33,155439,155440],{"class":59}," daily_total.get(date, ",[33,155442,2010],{"class":39},[33,155444,15372],{"class":59},[33,155446,2298],{"class":63},[33,155448,155449],{"class":59}," amount\n",[33,155451,155452],{"class":35,"line":392},[33,155453,127],{"emptyLinePlaceholder":126},[33,155455,155456,155458],{"class":35,"line":406},[33,155457,72],{"class":39},[33,155459,155460],{"class":59},"(daily_total)\n",[633,155462,155464],{"id":155463},"_1253-按类别统计","12.5.3 按类别统计",[23,155466,155468],{"className":25,"code":155467,"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,155469,155470,155479,155483,155493,155506,155518,155536,155540],{"__ignoreMap":28},[33,155471,155472,155475,155477],{"class":35,"line":36},[33,155473,155474],{"class":59},"category_total ",[33,155476,64],{"class":63},[33,155478,89508],{"class":59},[33,155480,155481],{"class":35,"line":43},[33,155482,127],{"emptyLinePlaceholder":126},[33,155484,155485,155487,155489,155491],{"class":35,"line":130},[33,155486,4690],{"class":63},[33,155488,149838],{"class":59},[33,155490,27699],{"class":63},[33,155492,155403],{"class":59},[33,155494,155495,155498,155500,155502,155504],{"class":35,"line":146},[33,155496,155497],{"class":59},"    category ",[33,155499,64],{"class":63},[33,155501,155413],{"class":59},[33,155503,155262],{"class":117},[33,155505,34893],{"class":59},[33,155507,155508,155510,155512,155514,155516],{"class":35,"line":267},[33,155509,155422],{"class":59},[33,155511,64],{"class":63},[33,155513,155413],{"class":59},[33,155515,85724],{"class":117},[33,155517,34893],{"class":59},[33,155519,155520,155523,155525,155528,155530,155532,155534],{"class":35,"line":275},[33,155521,155522],{"class":59},"    category_total[category] ",[33,155524,64],{"class":63},[33,155526,155527],{"class":59}," category_total.get(category, ",[33,155529,2010],{"class":39},[33,155531,15372],{"class":59},[33,155533,2298],{"class":63},[33,155535,155449],{"class":59},[33,155537,155538],{"class":35,"line":392},[33,155539,127],{"emptyLinePlaceholder":126},[33,155541,155542,155544],{"class":35,"line":406},[33,155543,72],{"class":39},[33,155545,155546],{"class":59},"(category_total)\n",[633,155548,155550],{"id":155549},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[23,155552,155554],{"className":25,"code":155553,"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,155555,155556,155581],{"__ignoreMap":28},[33,155557,155558,155561,155563,155565,155568,155571,155574,155577,155579],{"class":35,"line":36},[33,155559,155560],{"class":59},"top_date, top_amount ",[33,155562,64],{"class":63},[33,155564,7611],{"class":39},[33,155566,155567],{"class":59},"(daily_total.items(), ",[33,155569,155570],{"class":6877},"key",[33,155572,155573],{"class":63},"=lambda",[33,155575,155576],{"class":59}," item: item[",[33,155578,2036],{"class":39},[33,155580,6318],{"class":59},[33,155582,155583,155585],{"class":35,"line":43},[33,155584,72],{"class":39},[33,155586,155587],{"class":59},"(top_date, top_amount)\n",[14,155589,155591],{"id":155590},"_126-绘制柱状图","12.6 绘制柱状图",[23,155593,155595],{"className":25,"code":155594,"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,155596,155597,155611,155622,155626,155634,155646,155658,155669,155673,155677,155687,155698,155712,155717,155734,155751,155767,155771],{"__ignoreMap":28},[33,155598,155599,155601,155603,155605,155607,155609],{"class":35,"line":36},[33,155600,32388],{"class":63},[33,155602,149008],{"class":59},[33,155604,32045],{"class":63},[33,155606,149013],{"class":59},[33,155608,33033],{"class":63},[33,155610,149018],{"class":59},[33,155612,155613,155615,155617,155619],{"class":35,"line":43},[33,155614,32388],{"class":63},[33,155616,148867],{"class":59},[33,155618,32045],{"class":63},[33,155620,155621],{"class":59}," Bar\n",[33,155623,155624],{"class":35,"line":130},[33,155625,127],{"emptyLinePlaceholder":126},[33,155627,155628,155630,155632],{"class":35,"line":146},[33,155629,155474],{"class":59},[33,155631,64],{"class":63},[33,155633,17228],{"class":59},[33,155635,155636,155639,155641,155644],{"class":35,"line":267},[33,155637,155638],{"class":117},"    \"手机\"",[33,155640,53082],{"class":59},[33,155642,155643],{"class":39},"27000",[33,155645,33116],{"class":59},[33,155647,155648,155651,155653,155656],{"class":35,"line":275},[33,155649,155650],{"class":117},"    \"电脑\"",[33,155652,53082],{"class":59},[33,155654,155655],{"class":39},"34000",[33,155657,33116],{"class":59},[33,155659,155660,155663,155665,155667],{"class":35,"line":392},[33,155661,155662],{"class":117},"    \"耳机\"",[33,155664,53082],{"class":59},[33,155666,126032],{"class":39},[33,155668,33116],{"class":59},[33,155670,155671],{"class":35,"line":406},[33,155672,3247],{"class":59},[33,155674,155675],{"class":35,"line":418},[33,155676,127],{"emptyLinePlaceholder":126},[33,155678,155679,155682,155684],{"class":35,"line":425},[33,155680,155681],{"class":59},"bar ",[33,155683,64],{"class":63},[33,155685,155686],{"class":59}," Bar()\n",[33,155688,155689,155692,155695],{"class":35,"line":1147},[33,155690,155691],{"class":59},"bar.add_xaxis(",[33,155693,155694],{"class":39},"list",[33,155696,155697],{"class":59},"(category_total.keys()))\n",[33,155699,155700,155703,155705,155707,155709],{"class":35,"line":1329},[33,155701,155702],{"class":59},"bar.add_yaxis(",[33,155704,148924],{"class":117},[33,155706,14093],{"class":59},[33,155708,155694],{"class":39},[33,155710,155711],{"class":59},"(category_total.values()))\n",[33,155713,155714],{"class":35,"line":1341},[33,155715,155716],{"class":59},"bar.set_global_opts(\n",[33,155718,155719,155721,155723,155725,155727,155729,155732],{"class":35,"line":1348},[33,155720,149102],{"class":6877},[33,155722,64],{"class":63},[33,155724,149107],{"class":59},[33,155726,53052],{"class":6877},[33,155728,64],{"class":63},[33,155730,155731],{"class":117},"\"品类销售额\"",[33,155733,39694],{"class":59},[33,155735,155736,155738,155740,155742,155744,155746,155749],{"class":35,"line":1529},[33,155737,149121],{"class":6877},[33,155739,64],{"class":63},[33,155741,149126],{"class":59},[33,155743,1008],{"class":6877},[33,155745,64],{"class":63},[33,155747,155748],{"class":117},"\"品类\"",[33,155750,39694],{"class":59},[33,155752,155753,155755,155757,155759,155761,155763,155765],{"class":35,"line":1546},[33,155754,149140],{"class":6877},[33,155756,64],{"class":63},[33,155758,149126],{"class":59},[33,155760,1008],{"class":6877},[33,155762,64],{"class":63},[33,155764,148924],{"class":117},[33,155766,39694],{"class":59},[33,155768,155769],{"class":35,"line":1551},[33,155770,157],{"class":59},[33,155772,155773,155776,155779],{"class":35,"line":1566},[33,155774,155775],{"class":59},"bar.render(",[33,155777,155778],{"class":117},"\"category_sales.html\"",[33,155780,157],{"class":59},[14,155782,155784],{"id":155783},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155786,155787],{},"时间线适合展示不同日期、月份、年份的数据变化。",[23,155789,155791],{"className":25,"code":155790,"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,155792,155793,155807,155818,155822,155830,155854,155877,155902,155906,155910,155920,155924,155935,155944,155954,155968,155999,156004,156008],{"__ignoreMap":28},[33,155794,155795,155797,155799,155801,155803,155805],{"class":35,"line":36},[33,155796,32388],{"class":63},[33,155798,149008],{"class":59},[33,155800,32045],{"class":63},[33,155802,149013],{"class":59},[33,155804,33033],{"class":63},[33,155806,149018],{"class":59},[33,155808,155809,155811,155813,155815],{"class":35,"line":43},[33,155810,32388],{"class":63},[33,155812,148867],{"class":59},[33,155814,32045],{"class":63},[33,155816,155817],{"class":59}," Bar, Timeline\n",[33,155819,155820],{"class":35,"line":130},[33,155821,127],{"emptyLinePlaceholder":126},[33,155823,155824,155826,155828],{"class":35,"line":146},[33,155825,103296],{"class":59},[33,155827,64],{"class":63},[33,155829,17228],{"class":59},[33,155831,155832,155835,155838,155840,155842,155844,155846,155848,155850,155852],{"class":35,"line":267},[33,155833,155834],{"class":117},"    \"2024-10-01\"",[33,155836,155837],{"class":59},": {",[33,155839,155267],{"class":117},[33,155841,53082],{"class":59},[33,155843,155276],{"class":39},[33,155845,14093],{"class":59},[33,155847,155297],{"class":117},[33,155849,53082],{"class":59},[33,155851,155306],{"class":39},[33,155853,6591],{"class":59},[33,155855,155856,155859,155861,155863,155865,155867,155869,155871,155873,155875],{"class":35,"line":275},[33,155857,155858],{"class":117},"    \"2024-10-02\"",[33,155860,155837],{"class":59},[33,155862,155267],{"class":117},[33,155864,53082],{"class":59},[33,155866,155335],{"class":39},[33,155868,14093],{"class":59},[33,155870,155297],{"class":117},[33,155872,53082],{"class":59},[33,155874,155364],{"class":39},[33,155876,6591],{"class":59},[33,155878,155879,155882,155884,155886,155888,155891,155893,155895,155897,155900],{"class":35,"line":392},[33,155880,155881],{"class":117},"    \"2024-10-03\"",[33,155883,155837],{"class":59},[33,155885,155267],{"class":117},[33,155887,53082],{"class":59},[33,155889,155890],{"class":39},"17000",[33,155892,14093],{"class":59},[33,155894,155297],{"class":117},[33,155896,53082],{"class":59},[33,155898,155899],{"class":39},"19000",[33,155901,6591],{"class":59},[33,155903,155904],{"class":35,"line":406},[33,155905,3247],{"class":59},[33,155907,155908],{"class":35,"line":418},[33,155909,127],{"emptyLinePlaceholder":126},[33,155911,155912,155915,155917],{"class":35,"line":425},[33,155913,155914],{"class":59},"timeline ",[33,155916,64],{"class":63},[33,155918,155919],{"class":59}," Timeline()\n",[33,155921,155922],{"class":35,"line":1147},[33,155923,127],{"emptyLinePlaceholder":126},[33,155925,155926,155928,155931,155933],{"class":35,"line":1329},[33,155927,4690],{"class":63},[33,155929,155930],{"class":59}," date, category_data ",[33,155932,27699],{"class":63},[33,155934,150777],{"class":59},[33,155936,155937,155940,155942],{"class":35,"line":1341},[33,155938,155939],{"class":59},"    bar ",[33,155941,64],{"class":63},[33,155943,155686],{"class":59},[33,155945,155946,155949,155951],{"class":35,"line":1348},[33,155947,155948],{"class":59},"    bar.add_xaxis(",[33,155950,155694],{"class":39},[33,155952,155953],{"class":59},"(category_data.keys()))\n",[33,155955,155956,155959,155961,155963,155965],{"class":35,"line":1529},[33,155957,155958],{"class":59},"    bar.add_yaxis(",[33,155960,148924],{"class":117},[33,155962,14093],{"class":59},[33,155964,155694],{"class":39},[33,155966,155967],{"class":59},"(category_data.values()))\n",[33,155969,155970,155973,155976,155978,155980,155982,155984,155986,155988,155990,155992,155994,155997],{"class":35,"line":1546},[33,155971,155972],{"class":59},"    bar.set_global_opts(",[33,155974,155975],{"class":6877},"title_opts",[33,155977,64],{"class":63},[33,155979,149107],{"class":59},[33,155981,53052],{"class":6877},[33,155983,64],{"class":63},[33,155985,999],{"class":63},[33,155987,1014],{"class":117},[33,155989,1005],{"class":39},[33,155991,75567],{"class":59},[33,155993,1011],{"class":39},[33,155995,155996],{"class":117},"销售额\"",[33,155998,121],{"class":59},[33,156000,156001],{"class":35,"line":1551},[33,156002,156003],{"class":59},"    timeline.add(bar, date)\n",[33,156005,156006],{"class":35,"line":1566},[33,156007,127],{"emptyLinePlaceholder":126},[33,156009,156010,156013,156016],{"class":35,"line":1578},[33,156011,156012],{"class":59},"timeline.render(",[33,156014,156015],{"class":117},"\"timeline_sales.html\"",[33,156017,157],{"class":59},[14,156019,156021],{"id":156020},"_128-绘制地图","12.8 绘制地图",[19,156023,156024],{},"地图适合展示地区数据。",[23,156026,156028],{"className":25,"code":156027,"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,156029,156030,156044,156055,156059,156067,156080,156092,156105,156118,156122,156126,156136,156151,156156,156173,156192,156196],{"__ignoreMap":28},[33,156031,156032,156034,156036,156038,156040,156042],{"class":35,"line":36},[33,156033,32388],{"class":63},[33,156035,149008],{"class":59},[33,156037,32045],{"class":63},[33,156039,149013],{"class":59},[33,156041,33033],{"class":63},[33,156043,149018],{"class":59},[33,156045,156046,156048,156050,156052],{"class":35,"line":43},[33,156047,32388],{"class":63},[33,156049,148867],{"class":59},[33,156051,32045],{"class":63},[33,156053,156054],{"class":59}," Map\n",[33,156056,156057],{"class":35,"line":130},[33,156058,127],{"emptyLinePlaceholder":126},[33,156060,156061,156063,156065],{"class":35,"line":146},[33,156062,103296],{"class":59},[33,156064,64],{"class":63},[33,156066,57091],{"class":59},[33,156068,156069,156072,156074,156076,156078],{"class":35,"line":267},[33,156070,156071],{"class":59},"    (",[33,156073,70911],{"class":117},[33,156075,14093],{"class":59},[33,156077,2634],{"class":39},[33,156079,39694],{"class":59},[33,156081,156082,156084,156086,156088,156090],{"class":35,"line":275},[33,156083,156071],{"class":59},[33,156085,70931],{"class":117},[33,156087,14093],{"class":59},[33,156089,148941],{"class":39},[33,156091,39694],{"class":59},[33,156093,156094,156096,156099,156101,156103],{"class":35,"line":392},[33,156095,156071],{"class":59},[33,156097,156098],{"class":117},"\"广东\"",[33,156100,14093],{"class":59},[33,156102,3391],{"class":39},[33,156104,39694],{"class":59},[33,156106,156107,156109,156112,156114,156116],{"class":35,"line":406},[33,156108,156071],{"class":59},[33,156110,156111],{"class":117},"\"浙江\"",[33,156113,14093],{"class":59},[33,156115,148946],{"class":39},[33,156117,39694],{"class":59},[33,156119,156120],{"class":35,"line":418},[33,156121,34893],{"class":59},[33,156123,156124],{"class":35,"line":425},[33,156125,127],{"emptyLinePlaceholder":126},[33,156127,156128,156131,156133],{"class":35,"line":1147},[33,156129,156130],{"class":59},"map_chart ",[33,156132,64],{"class":63},[33,156134,156135],{"class":59}," Map()\n",[33,156137,156138,156141,156143,156146,156149],{"class":35,"line":1329},[33,156139,156140],{"class":59},"map_chart.add(",[33,156142,148924],{"class":117},[33,156144,156145],{"class":59},", data, ",[33,156147,156148],{"class":117},"\"china\"",[33,156150,157],{"class":59},[33,156152,156153],{"class":35,"line":1341},[33,156154,156155],{"class":59},"map_chart.set_global_opts(\n",[33,156157,156158,156160,156162,156164,156166,156168,156171],{"class":35,"line":1348},[33,156159,149102],{"class":6877},[33,156161,64],{"class":63},[33,156163,149107],{"class":59},[33,156165,53052],{"class":6877},[33,156167,64],{"class":63},[33,156169,156170],{"class":117},"\"地区销售额\"",[33,156172,39694],{"class":59},[33,156174,156175,156178,156180,156183,156186,156188,156190],{"class":35,"line":1529},[33,156176,156177],{"class":6877},"    visualmap_opts",[33,156179,64],{"class":63},[33,156181,156182],{"class":59},"opts.VisualMapOpts(",[33,156184,156185],{"class":6877},"max_",[33,156187,64],{"class":63},[33,156189,3391],{"class":39},[33,156191,39694],{"class":59},[33,156193,156194],{"class":35,"line":1546},[33,156195,157],{"class":59},[33,156197,156198,156201,156204],{"class":35,"line":1551},[33,156199,156200],{"class":59},"map_chart.render(",[33,156202,156203],{"class":117},"\"map_sales.html\"",[33,156205,157],{"class":59},[19,156207,156208],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156210,156212],{"id":156211},"_129-项目拆分建议","12.9 项目拆分建议",[19,156214,156215],{},"当代码超过一个文件时，可以这样组织：",[23,156217,156220],{"className":156218,"code":156219,"language":6848,"meta":28},[6846],"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,156221,156219],{"__ignoreMap":28},[19,156223,156224],{},"职责：",[162,156226,156227,156233,156239,156245],{},[165,156228,156229,156232],{},[30,156230,156231],{},"main.py","：程序入口。",[165,156234,156235,156238],{},[30,156236,156237],{},"file_utils.py","：读写 JSON。",[165,156240,156241,156244],{},[30,156242,156243],{},"sales_service.py","：统计销售数据。",[165,156246,156247,156250],{},[30,156248,156249],{},"chart_builder.py","：生成图表。",[14,156252,156254],{"id":156253},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156256,156257],{},"语法基础：",[162,156259,156260,156263,156266,156269],{},[165,156261,156262],{},"会写变量、注释、输入输出。",[165,156264,156265],{},"会使用 int、float、str、bool。",[165,156267,156268],{},"会做类型转换。",[165,156270,156271],{},"会使用 f-string 格式化输出。",[19,156273,156274],{},"流程控制：",[162,156276,156277,156282,156288,156296],{},[165,156278,156279,156280,1628],{},"会写 ",[30,156281,1162],{},[165,156283,156279,156284,102657,156286,1628],{},[30,156285,110301],{},[30,156287,4690],{},[165,156289,156290,156291,102657,156293,1628],{},"理解 ",[30,156292,3721],{},[30,156294,156295],{},"continue",[165,156297,156298],{},"能写嵌套循环。",[19,156300,156301],{},"函数：",[162,156303,156304,156307,156310,156313],{},[165,156305,156306],{},"会定义和调用函数。",[165,156308,156309],{},"理解参数和返回值。",[165,156311,156312],{},"知道局部变量和全局变量。",[165,156314,156315],{},"会使用默认参数、关键字参数、不定长参数。",[19,156317,156318],{},"容器：",[162,156320,156321,156324,156327,156330,156333],{},[165,156322,156323],{},"会使用列表增删改查。",[165,156325,156326],{},"会遍历列表、字典。",[165,156328,156329],{},"会使用切片。",[165,156331,156332],{},"会用集合去重。",[165,156334,156335],{},"会处理列表嵌套字典。",[19,156337,156338],{},"文件和模块：",[162,156340,156341,156344,156347,156350,156353],{},[165,156342,156343],{},"会读写文本文件。",[165,156345,156346],{},"会读写 JSON。",[165,156348,156349],{},"会捕获常见异常。",[165,156351,156352],{},"会导入模块和第三方包。",[165,156354,156355],{},"会创建简单包结构。",[19,156357,156358],{},"项目能力：",[162,156360,156361,156364,156367,156370,156373],{},[165,156362,156363],{},"能把代码拆成函数。",[165,156365,156366],{},"能把数据保存到文件。",[165,156368,156369],{},"能处理用户输入错误。",[165,156371,156372],{},"能写一个完整菜单程序。",[165,156374,156375],{},"能用 pyecharts 生成图表。",[14,156377,156379],{"id":156378},"_1211-推荐练习顺序","12.11 推荐练习顺序",[162,156381,156382,156385,156388,156391,156394,156397,156400,156403],{},[165,156383,156384],{},"猜数字游戏。",[165,156386,156387],{},"ATM 菜单程序。",[165,156389,156390],{},"学生成绩统计。",[165,156392,156393],{},"学生管理系统函数版。",[165,156395,156396],{},"学生管理系统文件持久化版。",[165,156398,156399],{},"学生管理系统面向对象版。",[165,156401,156402],{},"销售数据统计。",[165,156404,156405],{},"销售数据可视化。",[14,156407,156409],{"id":156408},"_1212-常见学习误区","12.12 常见学习误区",[162,156411,156412,156415,156418,156421,156424,156427,156430],{},[165,156413,156414],{},"只看视频不敲代码。",[165,156416,156417],{},"一报错就复制错误去搜，不先读报错位置。",[165,156419,156420],{},"变量名随便写，后续自己看不懂。",[165,156422,156423],{},"所有代码都写在一个文件一个函数里。",[165,156425,156426],{},"不保存练习代码，复习时没有材料。",[165,156428,156429],{},"还没掌握列表字典就急着学框架。",[165,156431,156432],{},"不会读官方文档，只依赖教程。",[14,156434,156436],{"id":156435},"_1213-如何读报错","12.13 如何读报错",[19,156438,156439],{},"报错通常从下往上看最后几行。",[19,156441,958],{},[23,156443,156446],{"className":156444,"code":156445,"language":6848,"meta":28},[6846],"ValueError: invalid literal for int() with base 10: 'abc'\n",[30,156447,156445],{"__ignoreMap":28},[19,156449,26255],{},[162,156451,156452,156458,156468],{},[165,156453,156454,156455,1628],{},"异常类型是 ",[30,156456,156457],{},"ValueError",[165,156459,108983,156460,156463,156464,156467],{},[30,156461,156462],{},"int()"," 无法把 ",[30,156465,156466],{},"'abc'"," 转成整数。",[165,156469,156470],{},"应该检查输入内容或增加异常处理。",[19,156472,156473],{},"再看文件名和行号：",[23,156475,156478],{"className":156476,"code":156477,"language":6848,"meta":28},[6846],"File \"main.py\", line 10, in \u003Cmodule>\n",[30,156479,156477],{"__ignoreMap":28},[19,156481,156482,156483,156485],{},"表示错误发生在 ",[30,156484,156231],{}," 第 10 行。",[14,156487,156489],{"id":156488},"_1214-后续学习方向","12.14 后续学习方向",[19,156491,156492],{},"Python 基础完成后，可以按兴趣选择方向：",[162,156494,156495,156507,156516,156528,156539,156548,156558],{},[165,156496,156497,156498,2031,156501,2031,156504,1628],{},"自动化办公：",[30,156499,156500],{},"openpyxl",[30,156502,156503],{},"python-docx",[30,156505,156506],{},"pdfplumber",[165,156508,156509,156510,2031,156512,2031,156514,1628],{},"数据分析：",[30,156511,102265],{},[30,156513,147817],{},[30,156515,147825],{},[165,156517,156518,156519,2031,156522,2031,156525,1628],{},"Web 后端：",[30,156520,156521],{},"Flask",[30,156523,156524],{},"FastAPI",[30,156526,156527],{},"Django",[165,156529,156530,156531,2031,156533,2031,156536,1628],{},"爬虫：",[30,156532,147802],{},[30,156534,156535],{},"BeautifulSoup",[30,156537,156538],{},"Scrapy",[165,156540,156541,156542,2031,156544,156547],{},"测试开发：",[30,156543,147849],{},[30,156545,156546],{},"selenium","、接口测试。",[165,156549,156550,156551,2031,156553,2031,156555,1628],{},"人工智能：",[30,156552,102265],{},[30,156554,147817],{},[30,156556,156557],{},"pytorch",[165,156559,156560,156561,2031,156563,2031,156566,1628],{},"运维脚本：",[30,156562,147418],{},[30,156564,156565],{},"subprocess",[30,156567,156568],{},"paramiko",[19,156570,156571],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156573,156575],{"id":156574},"_1215-结课练习","12.15 结课练习",[162,156577,156578,156581,156584,156587,156590,156593,156596,156599],{},[165,156579,156580],{},"完成函数版学生管理系统。",[165,156582,156583],{},"给学生管理系统增加 JSON 持久化。",[165,156585,156586],{},"给学生管理系统增加异常处理。",[165,156588,156589],{},"把学生管理系统改成面向对象版。",[165,156591,156592],{},"使用 pyecharts 绘制学生成绩柱状图。",[165,156594,156595],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[165,156597,156598],{},"按品类统计销售额并绘制柱状图。",[165,156600,156601],{},"写一份自己的 Python 学习路线图。",[1729,156603,156604],{},"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":43,"depth":43,"links":156606},[156607,156608,156611,156612,156613,156619,156620,156621,156622,156623,156624,156625,156626,156627,156628],{"id":153328,"depth":43,"text":153329},{"id":153378,"depth":43,"text":153379,"children":156609},[156610],{"id":153382,"depth":130,"text":153383},{"id":153421,"depth":43,"text":153422},{"id":154892,"depth":43,"text":154893},{"id":155229,"depth":43,"text":155230,"children":156614},[156615,156616,156617,156618],{"id":155233,"depth":130,"text":155234},{"id":155373,"depth":130,"text":155374},{"id":155463,"depth":130,"text":155464},{"id":155549,"depth":130,"text":155550},{"id":155590,"depth":43,"text":155591},{"id":155783,"depth":43,"text":155784},{"id":156020,"depth":43,"text":156021},{"id":156211,"depth":43,"text":156212},{"id":156253,"depth":43,"text":156254},{"id":156378,"depth":43,"text":156379},{"id":156408,"depth":43,"text":156409},{"id":156435,"depth":43,"text":156436},{"id":156488,"depth":43,"text":156489},{"id":156574,"depth":43,"text":156575},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153320,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156635,"title":156636,"body":156637,"description":1751,"extension":1752,"meta":159095,"navigation":126,"path":159096,"seo":159097,"stem":159098,"__hash__":159099},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156638,"toc":159070},[156639,156642,156646,156649,156652,156672,156675,156698,156701,156704,156726,156729,156751,156755,156758,156798,156801,156921,156925,156928,156968,156971,156994,156997,157001,157004,157018,157051,157054,157089,157092,157115,157118,157151,157154,157156,157162,157237,157240,157246,157263,157303,157307,157310,157356,157358,157395,157398,157433,157436,157471,157474,157506,157509,157528,157532,157536,157649,157651,157726,157730,157776,157779,157805,157814,157818,157821,157884,157892,157919,157923,157963,158027,158031,158034,158073,158076,158121,158124,158185,158189,158216,158219,158247,158250,158254,158258,158323,158326,158364,158367,158399,158403,158502,158506,158509,158582,158585,158632,158636,158642,158681,158684,158731,158734,158782,158786,158788,158802,158804,158982,158986,159013,159033,159040,159044,159061,159067],[10,156640,156636],{"id":156641},"_2-基础语法变量与字符串",[14,156643,156645],{"id":156644},"_21-注释","2.1 注释",[19,156647,156648],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156650,156651],{},"单行注释：",[23,156653,156655],{"className":25,"code":156654,"language":27,"meta":28,"style":28},"# 这是单行注释\nprint(\"hello\")\n",[30,156656,156657,156662],{"__ignoreMap":28},[33,156658,156659],{"class":35,"line":36},[33,156660,156661],{"class":87},"# 这是单行注释\n",[33,156663,156664,156666,156668,156670],{"class":35,"line":43},[33,156665,72],{"class":39},[33,156667,109],{"class":59},[33,156669,7504],{"class":117},[33,156671,157],{"class":59},[19,156673,156674],{},"多行说明常用三引号：",[23,156676,156678],{"className":25,"code":156677,"language":27,"meta":28,"style":28},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[30,156679,156680,156684,156689,156694],{"__ignoreMap":28},[33,156681,156682],{"class":35,"line":36},[33,156683,97337],{"class":117},[33,156685,156686],{"class":35,"line":43},[33,156687,156688],{"class":117},"这是多行说明。\n",[33,156690,156691],{"class":35,"line":130},[33,156692,156693],{"class":117},"常用于文件顶部说明、函数说明等。\n",[33,156695,156696],{"class":35,"line":146},[33,156697,97337],{"class":117},[19,156699,156700],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156702,156703],{},"不好：",[23,156705,156707],{"className":25,"code":156706,"language":27,"meta":28,"style":28},"# age 加 1\nage = age + 1\n",[30,156708,156709,156714],{"__ignoreMap":28},[33,156710,156711],{"class":35,"line":36},[33,156712,156713],{"class":87},"# age 加 1\n",[33,156715,156716,156718,156720,156722,156724],{"class":35,"line":43},[33,156717,60],{"class":59},[33,156719,64],{"class":63},[33,156721,136],{"class":59},[33,156723,2298],{"class":63},[33,156725,1434],{"class":39},[19,156727,156728],{},"较好：",[23,156730,156732],{"className":25,"code":156731,"language":27,"meta":28,"style":28},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[30,156733,156734,156739],{"__ignoreMap":28},[33,156735,156736],{"class":35,"line":36},[33,156737,156738],{"class":87},"# 用户过完生日后，年龄增加一岁\n",[33,156740,156741,156743,156745,156747,156749],{"class":35,"line":43},[33,156742,60],{"class":59},[33,156744,64],{"class":63},[33,156746,136],{"class":59},[33,156748,2298],{"class":63},[33,156750,1434],{"class":39},[14,156752,156754],{"id":156753},"_22-字面量","2.2 字面量",[19,156756,156757],{},"字面量就是代码中直接写出来的数据。",[23,156759,156761],{"className":25,"code":156760,"language":27,"meta":28,"style":28},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[30,156762,156763,156770,156777,156784,156791],{"__ignoreMap":28},[33,156764,156765,156767],{"class":35,"line":36},[33,156766,2129],{"class":39},[33,156768,156769],{"class":87},"          # 整数\n",[33,156771,156772,156774],{"class":35,"line":43},[33,156773,1871],{"class":39},[33,156775,156776],{"class":87},"         # 小数\n",[33,156778,156779,156781],{"class":35,"line":130},[33,156780,7504],{"class":117},[33,156782,156783],{"class":87},"      # 字符串\n",[33,156785,156786,156788],{"class":35,"line":146},[33,156787,33126],{"class":39},[33,156789,156790],{"class":87},"         # 布尔值\n",[33,156792,156793,156795],{"class":35,"line":267},[33,156794,97325],{"class":39},[33,156796,156797],{"class":87},"         # 空值\n",[19,156799,156800],{},"常见字面量类型：",[1956,156802,156803,156813],{},[1959,156804,156805],{},[1962,156806,156807,156809,156811],{},[1965,156808,25392],{},[1965,156810,29148],{},[1965,156812,27525],{},[2003,156814,156815,156826,156837,156848,156860,156872,156884,156897,156909],{},[1962,156816,156817,156819,156823],{},[2008,156818,1828],{},[2008,156820,156821],{},[30,156822,2129],{},[2008,156824,156825],{},"整数",[1962,156827,156828,156830,156834],{},[2008,156829,1863],{},[2008,156831,156832],{},[30,156833,1871],{},[2008,156835,156836],{},"浮点数",[1962,156838,156839,156841,156845],{},[2008,156840,2985],{},[2008,156842,156843],{},[30,156844,7504],{},[2008,156846,156847],{},"字符串",[1962,156849,156850,156852,156858],{},[2008,156851,3037],{},[2008,156853,156854,2031,156856],{},[30,156855,33126],{},[30,156857,35634],{},[2008,156859,67657],{},[1962,156861,156862,156865,156869],{},[2008,156863,156864],{},"NoneType",[2008,156866,156867],{},[30,156868,97325],{},[2008,156870,156871],{},"空值",[1962,156873,156874,156876,156881],{},[2008,156875,155694],{},[2008,156877,156878],{},[30,156879,156880],{},"[1, 2, 3]",[2008,156882,156883],{},"列表",[1962,156885,156886,156889,156894],{},[2008,156887,156888],{},"tuple",[2008,156890,156891],{},[30,156892,156893],{},"(1, 2, 3)",[2008,156895,156896],{},"元组",[1962,156898,156899,156901,156906],{},[2008,156900,116183],{},[2008,156902,156903],{},[30,156904,156905],{},"{\"name\": \"张三\"}",[2008,156907,156908],{},"字典",[1962,156910,156911,156913,156918],{},[2008,156912,953],{},[2008,156914,156915],{},[30,156916,156917],{},"{1, 2, 3}",[2008,156919,156920],{},"集合",[14,156922,156924],{"id":156923},"_23-变量","2.3 变量",[19,156926,156927],{},"变量是保存数据的名字。",[23,156929,156931],{"className":25,"code":156930,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[30,156932,156933,156941,156949,156959],{"__ignoreMap":28},[33,156934,156935,156937,156939],{"class":35,"line":36},[33,156936,968],{"class":59},[33,156938,64],{"class":63},[33,156940,150982],{"class":117},[33,156942,156943,156945,156947],{"class":35,"line":43},[33,156944,60],{"class":59},[33,156946,64],{"class":63},[33,156948,67],{"class":39},[33,156950,156951,156954,156956],{"class":35,"line":130},[33,156952,156953],{"class":59},"height ",[33,156955,64],{"class":63},[33,156957,156958],{"class":39}," 1.75\n",[33,156960,156961,156964,156966],{"class":35,"line":146},[33,156962,156963],{"class":59},"is_student ",[33,156965,64],{"class":63},[33,156967,662],{"class":39},[19,156969,156970],{},"Python 的变量不需要提前声明类型：",[23,156972,156974],{"className":25,"code":156973,"language":27,"meta":28,"style":28},"score = 100\nscore = \"满分\"\n",[30,156975,156976,156985],{"__ignoreMap":28},[33,156977,156978,156980,156982],{"class":35,"line":36},[33,156979,320],{"class":59},[33,156981,64],{"class":63},[33,156983,156984],{"class":39}," 100\n",[33,156986,156987,156989,156991],{"class":35,"line":43},[33,156988,320],{"class":59},[33,156990,64],{"class":63},[33,156992,156993],{"class":117}," \"满分\"\n",[19,156995,156996],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156998,157000],{"id":156999},"_24-变量命名规则","2.4 变量命名规则",[19,157002,157003],{},"硬性规则：",[162,157005,157006,157009,157012,157015],{},[165,157007,157008],{},"只能由字母、数字、下划线组成。",[165,157010,157011],{},"不能以数字开头。",[165,157013,157014],{},"不能使用 Python 关键字。",[165,157016,157017],{},"区分大小写。",[23,157019,157021],{"className":25,"code":157020,"language":27,"meta":28,"style":28},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[30,157022,157023,157032,157041],{"__ignoreMap":28},[33,157024,157025,157028,157030],{"class":35,"line":36},[33,157026,157027],{"class":59},"user_name ",[33,157029,64],{"class":63},[33,157031,148172],{"class":117},[33,157033,157034,157037,157039],{"class":35,"line":43},[33,157035,157036],{"class":59},"age2 ",[33,157038,64],{"class":63},[33,157040,67],{"class":39},[33,157042,157043,157046,157048],{"class":35,"line":130},[33,157044,157045],{"class":59},"_token ",[33,157047,64],{"class":63},[33,157049,157050],{"class":117}," \"abc\"\n",[19,157052,157053],{},"错误写法：",[23,157055,157057],{"className":25,"code":157056,"language":27,"meta":28,"style":28},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[30,157058,157059,157068,157080],{"__ignoreMap":28},[33,157060,157061,157064,157066],{"class":35,"line":36},[33,157062,157063],{"class":79044},"2age",[33,157065,15222],{"class":63},[33,157067,67],{"class":39},[33,157069,157070,157072,157074,157076,157078],{"class":35,"line":43},[33,157071,133216],{"class":59},[33,157073,2349],{"class":63},[33,157075,968],{"class":59},[33,157077,64],{"class":63},[33,157079,148172],{"class":117},[33,157081,157082,157084,157086],{"class":35,"line":130},[33,157083,16352],{"class":63},[33,157085,15222],{"class":63},[33,157087,157088],{"class":117}," \"一班\"\n",[19,157090,157091],{},"查看关键字：",[23,157093,157095],{"className":25,"code":157094,"language":27,"meta":28,"style":28},"import keyword\n\nprint(keyword.kwlist)\n",[30,157096,157097,157104,157108],{"__ignoreMap":28},[33,157098,157099,157101],{"class":35,"line":36},[33,157100,32045],{"class":63},[33,157102,157103],{"class":59}," keyword\n",[33,157105,157106],{"class":35,"line":43},[33,157107,127],{"emptyLinePlaceholder":126},[33,157109,157110,157112],{"class":35,"line":130},[33,157111,72],{"class":39},[33,157113,157114],{"class":59},"(keyword.kwlist)\n",[19,157116,157117],{},"推荐命名风格：",[23,157119,157121],{"className":25,"code":157120,"language":27,"meta":28,"style":28},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[30,157122,157123,157132,157142],{"__ignoreMap":28},[33,157124,157125,157128,157130],{"class":35,"line":36},[33,157126,157127],{"class":59},"student_name ",[33,157129,64],{"class":63},[33,157131,150982],{"class":117},[33,157133,157134,157137,157139],{"class":35,"line":43},[33,157135,157136],{"class":59},"total_price ",[33,157138,64],{"class":63},[33,157140,157141],{"class":39}," 99.8\n",[33,157143,157144,157147,157149],{"class":35,"line":130},[33,157145,157146],{"class":59},"is_finished ",[33,157148,64],{"class":63},[33,157150,714],{"class":39},[19,157152,157153],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157155,52377],{"id":52376},[19,157157,106004,157158,157161],{},[30,157159,157160],{},"type()"," 查看数据类型：",[23,157163,157165],{"className":25,"code":157164,"language":27,"meta":28,"style":28},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[30,157166,157167,157181,157195,157209,157223],{"__ignoreMap":28},[33,157168,157169,157171,157173,157175,157177,157179],{"class":35,"line":36},[33,157170,72],{"class":39},[33,157172,109],{"class":59},[33,157174,104745],{"class":39},[33,157176,109],{"class":59},[33,157178,2129],{"class":39},[33,157180,121],{"class":59},[33,157182,157183,157185,157187,157189,157191,157193],{"class":35,"line":43},[33,157184,72],{"class":39},[33,157186,109],{"class":59},[33,157188,104745],{"class":39},[33,157190,109],{"class":59},[33,157192,1871],{"class":39},[33,157194,121],{"class":59},[33,157196,157197,157199,157201,157203,157205,157207],{"class":35,"line":130},[33,157198,72],{"class":39},[33,157200,109],{"class":59},[33,157202,104745],{"class":39},[33,157204,109],{"class":59},[33,157206,7504],{"class":117},[33,157208,121],{"class":59},[33,157210,157211,157213,157215,157217,157219,157221],{"class":35,"line":146},[33,157212,72],{"class":39},[33,157214,109],{"class":59},[33,157216,104745],{"class":39},[33,157218,109],{"class":59},[33,157220,33126],{"class":39},[33,157222,121],{"class":59},[33,157224,157225,157227,157229,157231,157233,157235],{"class":35,"line":267},[33,157226,72],{"class":39},[33,157228,109],{"class":59},[33,157230,104745],{"class":39},[33,157232,109],{"class":59},[33,157234,97325],{"class":39},[33,157236,121],{"class":59},[19,157238,157239],{},"输出类似：",[23,157241,157244],{"className":157242,"code":157243,"language":6848,"meta":28},[6846],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[30,157245,157243],{"__ignoreMap":28},[19,157247,160,157248,108921,157250,157252,157253,157255,157256,23155,157258,157255,157260,157262],{},[30,157249,3037],{},[30,157251,1828],{}," 的子类，",[30,157254,33126],{}," 可以当作 ",[30,157257,2036],{},[30,157259,35634],{},[30,157261,2010],{},"，但业务代码中不要滥用。",[23,157264,157266],{"className":25,"code":157265,"language":27,"meta":28,"style":28},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[30,157267,157268,157286],{"__ignoreMap":28},[33,157269,157270,157272,157274,157276,157278,157280,157283],{"class":35,"line":36},[33,157271,72],{"class":39},[33,157273,109],{"class":59},[33,157275,33126],{"class":39},[33,157277,47212],{"class":63},[33,157279,26774],{"class":39},[33,157281,157282],{"class":59},")   ",[33,157284,157285],{"class":87},"# 2\n",[33,157287,157288,157290,157292,157294,157296,157298,157300],{"class":35,"line":43},[33,157289,72],{"class":39},[33,157291,109],{"class":59},[33,157293,35634],{"class":39},[33,157295,47212],{"class":63},[33,157297,26774],{"class":39},[33,157299,84],{"class":59},[33,157301,157302],{"class":87},"# 1\n",[14,157304,157306],{"id":157305},"_26-类型转换","2.6 类型转换",[19,157308,157309],{},"常用转换函数：",[23,157311,157313],{"className":25,"code":157312,"language":27,"meta":28,"style":28},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[30,157314,157315,157325,157336,157346],{"__ignoreMap":28},[33,157316,157317,157319,157321,157323],{"class":35,"line":36},[33,157318,1828],{"class":39},[33,157320,109],{"class":59},[33,157322,55960],{"class":117},[33,157324,157],{"class":59},[33,157326,157327,157329,157331,157334],{"class":35,"line":43},[33,157328,1863],{"class":39},[33,157330,109],{"class":59},[33,157332,157333],{"class":117},"\"3.14\"",[33,157335,157],{"class":59},[33,157337,157338,157340,157342,157344],{"class":35,"line":130},[33,157339,2985],{"class":39},[33,157341,109],{"class":59},[33,157343,2129],{"class":39},[33,157345,157],{"class":59},[33,157347,157348,157350,157352,157354],{"class":35,"line":146},[33,157349,3037],{"class":39},[33,157351,109],{"class":59},[33,157353,2036],{"class":39},[33,157355,157],{"class":59},[19,157357,958],{},[23,157359,157361],{"className":25,"code":157360,"language":27,"meta":28,"style":28},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[30,157362,157363,157372,157383],{"__ignoreMap":28},[33,157364,157365,157367,157369],{"class":35,"line":36},[33,157366,60],{"class":59},[33,157368,64],{"class":63},[33,157370,157371],{"class":117}," \"18\"\n",[33,157373,157374,157376,157378,157380],{"class":35,"line":43},[33,157375,60],{"class":59},[33,157377,64],{"class":63},[33,157379,106],{"class":39},[33,157381,157382],{"class":59},"(age)\n",[33,157384,157385,157387,157389,157391,157393],{"class":35,"line":130},[33,157386,72],{"class":39},[33,157388,75],{"class":59},[33,157390,2298],{"class":63},[33,157392,26774],{"class":39},[33,157394,157],{"class":59},[19,157396,157397],{},"输入得到的内容永远是字符串：",[23,157399,157401],{"className":25,"code":157400,"language":27,"meta":28,"style":28},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[30,157402,157403,157419],{"__ignoreMap":28},[33,157404,157405,157408,157410,157412,157414,157417],{"class":35,"line":36},[33,157406,157407],{"class":59},"num ",[33,157409,64],{"class":63},[33,157411,539],{"class":39},[33,157413,109],{"class":59},[33,157415,157416],{"class":117},"\"请输入数字:\"",[33,157418,157],{"class":59},[33,157420,157421,157423,157425,157427,157430],{"class":35,"line":43},[33,157422,72],{"class":39},[33,157424,109],{"class":59},[33,157426,104745],{"class":39},[33,157428,157429],{"class":59},"(num))  ",[33,157431,157432],{"class":87},"# str\n",[19,157434,157435],{},"如果要做数学运算，必须转换：",[23,157437,157439],{"className":25,"code":157438,"language":27,"meta":28,"style":28},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[30,157440,157441,157459],{"__ignoreMap":28},[33,157442,157443,157445,157447,157449,157451,157453,157455,157457],{"class":35,"line":36},[33,157444,157407],{"class":59},[33,157446,64],{"class":63},[33,157448,106],{"class":39},[33,157450,109],{"class":59},[33,157452,112],{"class":39},[33,157454,109],{"class":59},[33,157456,157416],{"class":117},[33,157458,121],{"class":59},[33,157460,157461,157463,157465,157467,157469],{"class":35,"line":43},[33,157462,72],{"class":39},[33,157464,47265],{"class":59},[33,157466,2298],{"class":63},[33,157468,3706],{"class":39},[33,157470,157],{"class":59},[19,157472,157473],{},"常见错误：",[23,157475,157477],{"className":25,"code":157476,"language":27,"meta":28,"style":28},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[30,157478,157479,157492],{"__ignoreMap":28},[33,157480,157481,157483,157485,157487,157489],{"class":35,"line":36},[33,157482,1828],{"class":39},[33,157484,109],{"class":59},[33,157486,157333],{"class":117},[33,157488,157282],{"class":59},[33,157490,157491],{"class":87},"# 错误\n",[33,157493,157494,157496,157498,157501,157504],{"class":35,"line":43},[33,157495,1828],{"class":39},[33,157497,109],{"class":59},[33,157499,157500],{"class":117},"\"abc\"",[33,157502,157503],{"class":59},")    ",[33,157505,157491],{"class":87},[19,157507,157508],{},"正确写法：",[23,157510,157512],{"className":25,"code":157511,"language":27,"meta":28,"style":28},"num = float(\"3.14\")\n",[30,157513,157514],{"__ignoreMap":28},[33,157515,157516,157518,157520,157522,157524,157526],{"class":35,"line":36},[33,157517,157407],{"class":59},[33,157519,64],{"class":63},[33,157521,1201],{"class":39},[33,157523,109],{"class":59},[33,157525,157333],{"class":117},[33,157527,157],{"class":59},[14,157529,157531],{"id":157530},"_27-运算符","2.7 运算符",[633,157533,157535],{"id":157534},"_271-算术运算符","2.7.1 算术运算符",[1956,157537,157538,157549],{},[1959,157539,157540],{},[1962,157541,157542,157545,157547],{},[1965,157543,157544],{},"运算符",[1965,157546,27525],{},[1965,157548,29148],{},[2003,157550,157551,157565,157579,157593,157607,157621,157635],{},[1962,157552,157553,157557,157560],{},[2008,157554,157555],{},[30,157556,2298],{},[2008,157558,157559],{},"加法",[2008,157561,157562],{},[30,157563,157564],{},"1 + 2",[1962,157566,157567,157571,157574],{},[2008,157568,157569],{},[30,157570,2349],{},[2008,157572,157573],{},"减法",[2008,157575,157576],{},[30,157577,157578],{},"5 - 3",[1962,157580,157581,157585,157588],{},[2008,157582,157583],{},[30,157584,1540],{},[2008,157586,157587],{},"乘法",[2008,157589,157590],{},[30,157591,157592],{},"2 * 3",[1962,157594,157595,157599,157602],{},[2008,157596,157597],{},[30,157598,2401],{},[2008,157600,157601],{},"除法，结果是浮点数",[2008,157603,157604],{},[30,157605,157606],{},"5 \u002F 2",[1962,157608,157609,157613,157616],{},[2008,157610,157611],{},[30,157612,34976],{},[2008,157614,157615],{},"整除",[2008,157617,157618],{},[30,157619,157620],{},"5 \u002F\u002F 2",[1962,157622,157623,157627,157630],{},[2008,157624,157625],{},[30,157626,2146],{},[2008,157628,157629],{},"取余",[2008,157631,157632],{},[30,157633,157634],{},"5 % 2",[1962,157636,157637,157641,157644],{},[2008,157638,157639],{},[30,157640,12319],{},[2008,157642,157643],{},"幂运算",[2008,157645,157646],{},[30,157647,157648],{},"2 ** 3",[19,157650,958],{},[23,157652,157654],{"className":25,"code":157653,"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,157655,157656,157674,157691,157708],{"__ignoreMap":28},[33,157657,157658,157660,157662,157664,157667,157669,157671],{"class":35,"line":36},[33,157659,72],{"class":39},[33,157661,109],{"class":59},[33,157663,2137],{"class":39},[33,157665,157666],{"class":63}," \u002F",[33,157668,16413],{"class":39},[33,157670,157282],{"class":59},[33,157672,157673],{"class":87},"# 2.5\n",[33,157675,157676,157678,157680,157682,157685,157687,157689],{"class":35,"line":43},[33,157677,72],{"class":39},[33,157679,109],{"class":59},[33,157681,2137],{"class":39},[33,157683,157684],{"class":63}," \u002F\u002F",[33,157686,16413],{"class":39},[33,157688,84],{"class":59},[33,157690,157285],{"class":87},[33,157692,157693,157695,157697,157699,157702,157704,157706],{"class":35,"line":130},[33,157694,72],{"class":39},[33,157696,109],{"class":59},[33,157698,2137],{"class":39},[33,157700,157701],{"class":63}," %",[33,157703,16413],{"class":39},[33,157705,157282],{"class":59},[33,157707,157302],{"class":87},[33,157709,157710,157712,157714,157716,157719,157721,157723],{"class":35,"line":146},[33,157711,72],{"class":39},[33,157713,109],{"class":59},[33,157715,1897],{"class":39},[33,157717,157718],{"class":63}," **",[33,157720,79711],{"class":39},[33,157722,84],{"class":59},[33,157724,157725],{"class":87},"# 8\n",[633,157727,157729],{"id":157728},"_272-赋值运算符","2.7.2 赋值运算符",[23,157731,157733],{"className":25,"code":157732,"language":27,"meta":28,"style":28},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[30,157734,157735,157743,157751,157759,157767],{"__ignoreMap":28},[33,157736,157737,157739,157741],{"class":35,"line":36},[33,157738,157407],{"class":59},[33,157740,64],{"class":63},[33,157742,60071],{"class":39},[33,157744,157745,157747,157749],{"class":35,"line":43},[33,157746,157407],{"class":59},[33,157748,11136],{"class":63},[33,157750,56071],{"class":39},[33,157752,157753,157755,157757],{"class":35,"line":130},[33,157754,157407],{"class":59},[33,157756,1572],{"class":63},[33,157758,49368],{"class":39},[33,157760,157761,157763,157765],{"class":35,"line":146},[33,157762,157407],{"class":59},[33,157764,138780],{"class":63},[33,157766,121671],{"class":39},[33,157768,157769,157771,157774],{"class":35,"line":267},[33,157770,157407],{"class":59},[33,157772,157773],{"class":63},"\u002F=",[33,157775,49368],{"class":39},[19,157777,157778],{},"等价关系：",[23,157780,157782],{"className":25,"code":157781,"language":27,"meta":28,"style":28},"num += 1\nnum = num + 1\n",[30,157783,157784,157792],{"__ignoreMap":28},[33,157785,157786,157788,157790],{"class":35,"line":36},[33,157787,157407],{"class":59},[33,157789,11136],{"class":63},[33,157791,1434],{"class":39},[33,157793,157794,157796,157798,157801,157803],{"class":35,"line":43},[33,157795,157407],{"class":59},[33,157797,64],{"class":63},[33,157799,157800],{"class":59}," num ",[33,157802,2298],{"class":63},[33,157804,1434],{"class":39},[19,157806,157807,157808,102657,157811,1628],{},"Python 没有 ",[30,157809,157810],{},"num++",[30,157812,157813],{},"num--",[633,157815,157817],{"id":157816},"_273-比较运算符","2.7.3 比较运算符",[19,157819,157820],{},"比较运算结果是布尔值。",[23,157822,157824],{"className":25,"code":157823,"language":27,"meta":28,"style":28},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[30,157825,157826,157840,157855,157869],{"__ignoreMap":28},[33,157827,157828,157830,157832,157834,157836,157838],{"class":35,"line":36},[33,157829,72],{"class":39},[33,157831,109],{"class":59},[33,157833,2264],{"class":39},[33,157835,27878],{"class":63},[33,157837,3816],{"class":39},[33,157839,157],{"class":59},[33,157841,157842,157844,157846,157848,157851,157853],{"class":35,"line":43},[33,157843,72],{"class":39},[33,157845,109],{"class":59},[33,157847,2264],{"class":39},[33,157849,157850],{"class":63}," >=",[33,157852,3706],{"class":39},[33,157854,157],{"class":59},[33,157856,157857,157859,157861,157863,157865,157867],{"class":35,"line":130},[33,157858,72],{"class":39},[33,157860,109],{"class":59},[33,157862,2264],{"class":39},[33,157864,1644],{"class":63},[33,157866,3751],{"class":39},[33,157868,157],{"class":59},[33,157870,157871,157873,157875,157877,157880,157882],{"class":35,"line":146},[33,157872,72],{"class":39},[33,157874,109],{"class":59},[33,157876,2264],{"class":39},[33,157878,157879],{"class":63}," !=",[33,157881,3751],{"class":39},[33,157883,157],{"class":59},[19,157885,157886,157887,157889,157890,1628],{},"注意：判断相等用 ",[30,157888,573],{},"，赋值用 ",[30,157891,64],{},[23,157893,157895],{"className":25,"code":157894,"language":27,"meta":28,"style":28},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[30,157896,157897,157908],{"__ignoreMap":28},[33,157898,157899,157901,157903,157905],{"class":35,"line":36},[33,157900,60],{"class":59},[33,157902,64],{"class":63},[33,157904,81],{"class":39},[33,157906,157907],{"class":87},"       # 赋值\n",[33,157909,157910,157912,157914,157916],{"class":35,"line":43},[33,157911,60],{"class":59},[33,157913,573],{"class":63},[33,157915,81],{"class":39},[33,157917,157918],{"class":87},"      # 判断是否相等\n",[633,157920,157922],{"id":157921},"_274-逻辑运算符","2.7.4 逻辑运算符",[1956,157924,157925,157933],{},[1959,157926,157927],{},[1962,157928,157929,157931],{},[1965,157930,157544],{},[1965,157932,27525],{},[2003,157934,157935,157944,157953],{},[1962,157936,157937,157941],{},[2008,157938,157939],{},[30,157940,32114],{},[2008,157942,157943],{},"并且",[1962,157945,157946,157950],{},[2008,157947,157948],{},[30,157949,737],{},[2008,157951,157952],{},"或者",[1962,157954,157955,157960],{},[2008,157956,157957],{},[30,157958,157959],{},"not",[2008,157961,157962],{},"取反",[23,157964,157966],{"className":25,"code":157965,"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,157967,157968,157976,157984,157988,158003,158017],{"__ignoreMap":28},[33,157969,157970,157972,157974],{"class":35,"line":36},[33,157971,60],{"class":59},[33,157973,64],{"class":63},[33,157975,653],{"class":39},[33,157977,157978,157980,157982],{"class":35,"line":43},[33,157979,534],{"class":59},[33,157981,64],{"class":63},[33,157983,662],{"class":39},[33,157985,157986],{"class":35,"line":130},[33,157987,127],{"emptyLinePlaceholder":126},[33,157989,157990,157992,157994,157996,157998,158000],{"class":35,"line":146},[33,157991,72],{"class":39},[33,157993,75],{"class":59},[33,157995,78],{"class":63},[33,157997,81],{"class":39},[33,157999,679],{"class":63},[33,158001,158002],{"class":59}," has_ticket)\n",[33,158004,158005,158007,158009,158011,158013,158015],{"class":35,"line":267},[33,158006,72],{"class":39},[33,158008,75],{"class":59},[33,158010,2726],{"class":63},[33,158012,81],{"class":39},[33,158014,115838],{"class":63},[33,158016,158002],{"class":59},[33,158018,158019,158021,158023,158025],{"class":35,"line":275},[33,158020,72],{"class":39},[33,158022,109],{"class":59},[33,158024,157959],{"class":63},[33,158026,158002],{"class":59},[14,158028,158030],{"id":158029},"_28-字符串定义","2.8 字符串定义",[19,158032,158033],{},"三种常见写法：",[23,158035,158037],{"className":25,"code":158036,"language":27,"meta":28,"style":28},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[30,158038,158039,158049,158058,158068],{"__ignoreMap":28},[33,158040,158041,158044,158046],{"class":35,"line":36},[33,158042,158043],{"class":59},"name1 ",[33,158045,64],{"class":63},[33,158047,158048],{"class":117}," '小明'\n",[33,158050,158051,158054,158056],{"class":35,"line":43},[33,158052,158053],{"class":59},"name2 ",[33,158055,64],{"class":63},[33,158057,150982],{"class":117},[33,158059,158060,158063,158065],{"class":35,"line":130},[33,158061,158062],{"class":59},"text ",[33,158064,64],{"class":63},[33,158066,158067],{"class":117}," \"\"\"这是多行字符串\n",[33,158069,158070],{"class":35,"line":146},[33,158071,158072],{"class":117},"可以换行\"\"\"\n",[19,158074,158075],{},"字符串中包含引号：",[23,158077,158079],{"className":25,"code":158078,"language":27,"meta":28,"style":28},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[30,158080,158081,158091,158101],{"__ignoreMap":28},[33,158082,158083,158086,158088],{"class":35,"line":36},[33,158084,158085],{"class":59},"msg ",[33,158087,64],{"class":63},[33,158089,158090],{"class":117}," \"他说:'你好'\"\n",[33,158092,158093,158096,158098],{"class":35,"line":43},[33,158094,158095],{"class":59},"msg2 ",[33,158097,64],{"class":63},[33,158099,158100],{"class":117}," '他说:\"你好\"'\n",[33,158102,158103,158106,158108,158111,158114,158117,158119],{"class":35,"line":130},[33,158104,158105],{"class":59},"msg3 ",[33,158107,64],{"class":63},[33,158109,158110],{"class":117}," \"他说:",[33,158112,158113],{"class":39},"\\\"",[33,158115,158116],{"class":117},"你好",[33,158118,158113],{"class":39},[33,158120,26789],{"class":117},[19,158122,158123],{},"常见转义字符：",[1956,158125,158126,158135],{},[1959,158127,158128],{},[1962,158129,158130,158133],{},[1965,158131,158132],{},"写法",[1965,158134,102339],{},[2003,158136,158137,158147,158156,158166,158175],{},[1962,158138,158139,158144],{},[2008,158140,158141],{},[30,158142,158143],{},"\\n",[2008,158145,158146],{},"换行",[1962,158148,158149,158153],{},[2008,158150,158151],{},[30,158152,2916],{},[2008,158154,158155],{},"制表符",[1962,158157,158158,158163],{},[2008,158159,158160],{},[30,158161,158162],{},"\\\\",[2008,158164,158165],{},"反斜杠",[1962,158167,158168,158172],{},[2008,158169,158170],{},[30,158171,158113],{},[2008,158173,158174],{},"双引号",[1962,158176,158177,158182],{},[2008,158178,158179],{},[30,158180,158181],{},"\\'",[2008,158183,158184],{},"单引号",[14,158186,158188],{"id":158187},"_29-字符串拼接","2.9 字符串拼接",[23,158190,158192],{"className":25,"code":158191,"language":27,"meta":28,"style":28},"name = \"小明\"\nprint(\"你好，\" + name)\n",[30,158193,158194,158202],{"__ignoreMap":28},[33,158195,158196,158198,158200],{"class":35,"line":36},[33,158197,968],{"class":59},[33,158199,64],{"class":63},[33,158201,150982],{"class":117},[33,158203,158204,158206,158208,158211,158213],{"class":35,"line":43},[33,158205,72],{"class":39},[33,158207,109],{"class":59},[33,158209,158210],{"class":117},"\"你好，\"",[33,158212,47212],{"class":63},[33,158214,158215],{"class":59}," name)\n",[19,158217,158218],{},"字符串只能和字符串拼接：",[23,158220,158222],{"className":25,"code":158221,"language":27,"meta":28,"style":28},"age = 18\nprint(\"年龄:\" + str(age))\n",[30,158223,158224,158232],{"__ignoreMap":28},[33,158225,158226,158228,158230],{"class":35,"line":36},[33,158227,60],{"class":59},[33,158229,64],{"class":63},[33,158231,67],{"class":39},[33,158233,158234,158236,158238,158240,158242,158244],{"class":35,"line":43},[33,158235,72],{"class":39},[33,158237,109],{"class":59},[33,158239,148149],{"class":117},[33,158241,47212],{"class":63},[33,158243,75560],{"class":39},[33,158245,158246],{"class":59},"(age))\n",[19,158248,158249],{},"更推荐使用格式化字符串。",[14,158251,158253],{"id":158252},"_210-字符串格式化","2.10 字符串格式化",[633,158255,158257],{"id":158256},"_2101-百分号格式化","2.10.1 百分号格式化",[23,158259,158261],{"className":25,"code":158260,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[30,158262,158263,158271,158279,158288,158292],{"__ignoreMap":28},[33,158264,158265,158267,158269],{"class":35,"line":36},[33,158266,968],{"class":59},[33,158268,64],{"class":63},[33,158270,150982],{"class":117},[33,158272,158273,158275,158277],{"class":35,"line":43},[33,158274,60],{"class":59},[33,158276,64],{"class":63},[33,158278,67],{"class":39},[33,158280,158281,158283,158285],{"class":35,"line":130},[33,158282,320],{"class":59},[33,158284,64],{"class":63},[33,158286,158287],{"class":39}," 95.5\n",[33,158289,158290],{"class":35,"line":146},[33,158291,127],{"emptyLinePlaceholder":126},[33,158293,158294,158296,158298,158301,158304,158307,158310,158313,158316,158318,158320],{"class":35,"line":267},[33,158295,72],{"class":39},[33,158297,109],{"class":59},[33,158299,158300],{"class":117},"\"姓名:",[33,158302,158303],{"class":39},"%s",[33,158305,158306],{"class":117}," 年龄:",[33,158308,158309],{"class":39},"%d",[33,158311,158312],{"class":117}," 分数:",[33,158314,158315],{"class":39},"%.1f",[33,158317,1014],{"class":117},[33,158319,157701],{"class":63},[33,158321,158322],{"class":59}," (name, age, score))\n",[19,158324,158325],{},"常用占位符：",[1956,158327,158328,158337],{},[1959,158329,158330],{},[1962,158331,158332,158335],{},[1965,158333,158334],{},"占位符",[1965,158336,27525],{},[2003,158338,158339,158347,158355],{},[1962,158340,158341,158345],{},[2008,158342,158343],{},[30,158344,158303],{},[2008,158346,156847],{},[1962,158348,158349,158353],{},[2008,158350,158351],{},[30,158352,158309],{},[2008,158354,156825],{},[1962,158356,158357,158362],{},[2008,158358,158359],{},[30,158360,158361],{},"%f",[2008,158363,156836],{},[19,158365,158366],{},"精度控制：",[23,158368,158370],{"className":25,"code":158369,"language":27,"meta":28,"style":28},"price = 12.3456\nprint(\"%.2f\" % price)\n",[30,158371,158372,158381],{"__ignoreMap":28},[33,158373,158374,158376,158378],{"class":35,"line":36},[33,158375,148310],{"class":59},[33,158377,64],{"class":63},[33,158379,158380],{"class":39}," 12.3456\n",[33,158382,158383,158385,158387,158389,158392,158394,158396],{"class":35,"line":43},[33,158384,72],{"class":39},[33,158386,109],{"class":59},[33,158388,1014],{"class":117},[33,158390,158391],{"class":39},"%.2f",[33,158393,1014],{"class":117},[33,158395,157701],{"class":63},[33,158397,158398],{"class":59}," price)\n",[633,158400,158402],{"id":158401},"_2102-format方法","2.10.2 format方法",[23,158404,158406],{"className":25,"code":158405,"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,158407,158408,158416,158424,158428,158447,158467],{"__ignoreMap":28},[33,158409,158410,158412,158414],{"class":35,"line":36},[33,158411,968],{"class":59},[33,158413,64],{"class":63},[33,158415,150982],{"class":117},[33,158417,158418,158420,158422],{"class":35,"line":43},[33,158419,60],{"class":59},[33,158421,64],{"class":63},[33,158423,67],{"class":39},[33,158425,158426],{"class":35,"line":130},[33,158427,127],{"emptyLinePlaceholder":126},[33,158429,158430,158432,158434,158436,158438,158440,158442,158444],{"class":35,"line":146},[33,158431,72],{"class":39},[33,158433,109],{"class":59},[33,158435,158300],{"class":117},[33,158437,34106],{"class":39},[33,158439,158306],{"class":117},[33,158441,34106],{"class":39},[33,158443,1014],{"class":117},[33,158445,158446],{"class":59},".format(name, age))\n",[33,158448,158449,158451,158453,158455,158458,158460,158463,158465],{"class":35,"line":267},[33,158450,72],{"class":39},[33,158452,109],{"class":59},[33,158454,158300],{"class":117},[33,158456,158457],{"class":39},"{0}",[33,158459,158306],{"class":117},[33,158461,158462],{"class":39},"{1}",[33,158464,1014],{"class":117},[33,158466,158446],{"class":59},[33,158468,158469,158471,158473,158475,158478,158480,158483,158485,158488,158490,158492,158495,158497,158499],{"class":35,"line":275},[33,158470,72],{"class":39},[33,158472,109],{"class":59},[33,158474,158300],{"class":117},[33,158476,158477],{"class":39},"{name}",[33,158479,158306],{"class":117},[33,158481,158482],{"class":39},"{age}",[33,158484,1014],{"class":117},[33,158486,158487],{"class":59},".format(",[33,158489,1008],{"class":6877},[33,158491,64],{"class":63},[33,158493,158494],{"class":59},"name, ",[33,158496,71863],{"class":6877},[33,158498,64],{"class":63},[33,158500,158501],{"class":59},"age))\n",[633,158503,158505],{"id":158504},"_2103-f-string","2.10.3 f-string",[19,158507,158508],{},"推荐写法：",[23,158510,158512],{"className":25,"code":158511,"language":27,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[30,158513,158514,158522,158530,158538,158542],{"__ignoreMap":28},[33,158515,158516,158518,158520],{"class":35,"line":36},[33,158517,968],{"class":59},[33,158519,64],{"class":63},[33,158521,150982],{"class":117},[33,158523,158524,158526,158528],{"class":35,"line":43},[33,158525,60],{"class":59},[33,158527,64],{"class":63},[33,158529,67],{"class":39},[33,158531,158532,158534,158536],{"class":35,"line":130},[33,158533,320],{"class":59},[33,158535,64],{"class":63},[33,158537,158287],{"class":39},[33,158539,158540],{"class":35,"line":146},[33,158541,127],{"emptyLinePlaceholder":126},[33,158543,158544,158546,158548,158550,158552,158554,158556,158558,158560,158562,158564,158566,158568,158570,158573,158576,158578,158580],{"class":35,"line":267},[33,158545,72],{"class":39},[33,158547,109],{"class":59},[33,158549,999],{"class":63},[33,158551,158300],{"class":117},[33,158553,1005],{"class":39},[33,158555,1008],{"class":59},[33,158557,1011],{"class":39},[33,158559,158306],{"class":117},[33,158561,1005],{"class":39},[33,158563,71863],{"class":59},[33,158565,1011],{"class":39},[33,158567,158312],{"class":117},[33,158569,1005],{"class":39},[33,158571,158572],{"class":59},"score",[33,158574,158575],{"class":63},":.1f",[33,158577,1011],{"class":39},[33,158579,1014],{"class":117},[33,158581,157],{"class":59},[19,158583,158584],{},"表达式也可以放进去：",[23,158586,158588],{"className":25,"code":158587,"language":27,"meta":28,"style":28},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[30,158589,158590,158598,158606],{"__ignoreMap":28},[33,158591,158592,158594,158596],{"class":35,"line":36},[33,158593,148310],{"class":59},[33,158595,64],{"class":63},[33,158597,148315],{"class":39},[33,158599,158600,158602,158604],{"class":35,"line":43},[33,158601,148320],{"class":59},[33,158603,64],{"class":63},[33,158605,56071],{"class":39},[33,158607,158608,158610,158612,158614,158617,158619,158621,158623,158626,158628,158630],{"class":35,"line":130},[33,158609,72],{"class":39},[33,158611,109],{"class":59},[33,158613,999],{"class":63},[33,158615,158616],{"class":117},"\"总价:",[33,158618,1005],{"class":39},[33,158620,148310],{"class":59},[33,158622,1540],{"class":63},[33,158624,158625],{"class":59}," count",[33,158627,1011],{"class":39},[33,158629,1605],{"class":117},[33,158631,157],{"class":59},[14,158633,158635],{"id":158634},"_211-input输入","2.11 input输入",[19,158637,158638,158641],{},[30,158639,158640],{},"input()"," 会暂停程序，等待用户输入。",[23,158643,158645],{"className":25,"code":158644,"language":27,"meta":28,"style":28},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[30,158646,158647,158661],{"__ignoreMap":28},[33,158648,158649,158651,158653,158655,158657,158659],{"class":35,"line":36},[33,158650,968],{"class":59},[33,158652,64],{"class":63},[33,158654,539],{"class":39},[33,158656,109],{"class":59},[33,158658,977],{"class":117},[33,158660,157],{"class":59},[33,158662,158663,158665,158667,158669,158671,158673,158675,158677,158679],{"class":35,"line":43},[33,158664,72],{"class":39},[33,158666,109],{"class":59},[33,158668,999],{"class":63},[33,158670,1002],{"class":117},[33,158672,1005],{"class":39},[33,158674,1008],{"class":59},[33,158676,1011],{"class":39},[33,158678,1014],{"class":117},[33,158680,157],{"class":59},[19,158682,158683],{},"输入整数：",[23,158685,158687],{"className":25,"code":158686,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[30,158688,158689,158707],{"__ignoreMap":28},[33,158690,158691,158693,158695,158697,158699,158701,158703,158705],{"class":35,"line":36},[33,158692,60],{"class":59},[33,158694,64],{"class":63},[33,158696,106],{"class":39},[33,158698,109],{"class":59},[33,158700,112],{"class":39},[33,158702,109],{"class":59},[33,158704,118],{"class":117},[33,158706,121],{"class":59},[33,158708,158709,158711,158713,158715,158718,158720,158722,158724,158727,158729],{"class":35,"line":43},[33,158710,72],{"class":39},[33,158712,109],{"class":59},[33,158714,999],{"class":63},[33,158716,158717],{"class":117},"\"明年你",[33,158719,1005],{"class":39},[33,158721,60],{"class":59},[33,158723,2298],{"class":63},[33,158725,158726],{"class":39}," 1}",[33,158728,151033],{"class":117},[33,158730,157],{"class":59},[19,158732,158733],{},"输入小数：",[23,158735,158737],{"className":25,"code":158736,"language":27,"meta":28,"style":28},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[30,158738,158739,158758],{"__ignoreMap":28},[33,158740,158741,158743,158745,158747,158749,158751,158753,158756],{"class":35,"line":36},[33,158742,156953],{"class":59},[33,158744,64],{"class":63},[33,158746,1201],{"class":39},[33,158748,109],{"class":59},[33,158750,112],{"class":39},[33,158752,109],{"class":59},[33,158754,158755],{"class":117},"\"请输入身高:\"",[33,158757,121],{"class":59},[33,158759,158760,158762,158764,158766,158769,158771,158773,158775,158777,158780],{"class":35,"line":43},[33,158761,72],{"class":39},[33,158763,109],{"class":59},[33,158765,999],{"class":63},[33,158767,158768],{"class":117},"\"身高:",[33,158770,1005],{"class":39},[33,158772,26637],{"class":59},[33,158774,1600],{"class":63},[33,158776,1011],{"class":39},[33,158778,158779],{"class":117},"米\"",[33,158781,157],{"class":59},[14,158783,158785],{"id":158784},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158787,1173],{},[162,158789,158790,158793,158796,158799],{},[165,158791,158792],{},"输入商品单价。",[165,158794,158795],{},"输入购买数量。",[165,158797,158798],{},"输入折扣，例如 0.8 表示八折。",[165,158800,158801],{},"输出最终金额，保留两位小数。",[19,158803,1187],{},[23,158805,158807],{"className":25,"code":158806,"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,158808,158809,158828,158847,158866,158870,158889,158893,158916,158937,158959],{"__ignoreMap":28},[33,158810,158811,158813,158815,158817,158819,158821,158823,158826],{"class":35,"line":36},[33,158812,148310],{"class":59},[33,158814,64],{"class":63},[33,158816,1201],{"class":39},[33,158818,109],{"class":59},[33,158820,112],{"class":39},[33,158822,109],{"class":59},[33,158824,158825],{"class":117},"\"请输入商品单价:\"",[33,158827,121],{"class":59},[33,158829,158830,158832,158834,158836,158838,158840,158842,158845],{"class":35,"line":43},[33,158831,148320],{"class":59},[33,158833,64],{"class":63},[33,158835,106],{"class":39},[33,158837,109],{"class":59},[33,158839,112],{"class":39},[33,158841,109],{"class":59},[33,158843,158844],{"class":117},"\"请输入购买数量:\"",[33,158846,121],{"class":59},[33,158848,158849,158851,158853,158855,158857,158859,158861,158864],{"class":35,"line":130},[33,158850,1429],{"class":59},[33,158852,64],{"class":63},[33,158854,1201],{"class":39},[33,158856,109],{"class":59},[33,158858,112],{"class":39},[33,158860,109],{"class":59},[33,158862,158863],{"class":117},"\"请输入折扣:\"",[33,158865,121],{"class":59},[33,158867,158868],{"class":35,"line":146},[33,158869,127],{"emptyLinePlaceholder":126},[33,158871,158872,158875,158877,158880,158882,158885,158887],{"class":35,"line":267},[33,158873,158874],{"class":59},"total ",[33,158876,64],{"class":63},[33,158878,158879],{"class":59}," price ",[33,158881,1540],{"class":63},[33,158883,158884],{"class":59}," count ",[33,158886,1540],{"class":63},[33,158888,1543],{"class":59},[33,158890,158891],{"class":35,"line":275},[33,158892,127],{"emptyLinePlaceholder":126},[33,158894,158895,158897,158899,158901,158904,158906,158908,158910,158912,158914],{"class":35,"line":392},[33,158896,72],{"class":39},[33,158898,109],{"class":59},[33,158900,999],{"class":63},[33,158902,158903],{"class":117},"\"商品单价:",[33,158905,1005],{"class":39},[33,158907,81455],{"class":59},[33,158909,1600],{"class":63},[33,158911,1011],{"class":39},[33,158913,1014],{"class":117},[33,158915,157],{"class":59},[33,158917,158918,158920,158922,158924,158927,158929,158931,158933,158935],{"class":35,"line":406},[33,158919,72],{"class":39},[33,158921,109],{"class":59},[33,158923,999],{"class":63},[33,158925,158926],{"class":117},"\"购买数量:",[33,158928,1005],{"class":39},[33,158930,86074],{"class":59},[33,158932,1011],{"class":39},[33,158934,1014],{"class":117},[33,158936,157],{"class":59},[33,158938,158939,158941,158943,158945,158948,158950,158953,158955,158957],{"class":35,"line":418},[33,158940,72],{"class":39},[33,158942,109],{"class":59},[33,158944,999],{"class":63},[33,158946,158947],{"class":117},"\"折扣:",[33,158949,1005],{"class":39},[33,158951,158952],{"class":59},"discount",[33,158954,1011],{"class":39},[33,158956,1014],{"class":117},[33,158958,157],{"class":59},[33,158960,158961,158963,158965,158967,158969,158971,158974,158976,158978,158980],{"class":35,"line":425},[33,158962,72],{"class":39},[33,158964,109],{"class":59},[33,158966,999],{"class":63},[33,158968,1592],{"class":117},[33,158970,1005],{"class":39},[33,158972,158973],{"class":59},"total",[33,158975,1600],{"class":63},[33,158977,1011],{"class":39},[33,158979,1605],{"class":117},[33,158981,157],{"class":59},[14,158983,158985],{"id":158984},"_213-易错点","2.13 易错点",[162,158987,158988,158993,158999,159007,159010],{},[165,158989,158990,158992],{},[30,158991,158640],{}," 的结果是字符串，做运算前要转换。",[165,158994,158995,158996,1628],{},"字符串拼接时，数字要先 ",[30,158997,158998],{},"str()",[165,159000,159001,159003,159004,159006],{},[30,159002,64],{}," 是赋值，",[30,159005,573],{}," 是比较。",[165,159008,159009],{},"Python 没有自增自减运算符。",[165,159011,159012],{},"浮点数计算可能有精度误差：",[23,159014,159016],{"className":25,"code":159015,"language":27,"meta":28,"style":28},"print(0.1 + 0.2)\n",[30,159017,159018],{"__ignoreMap":28},[33,159019,159020,159022,159024,159026,159028,159031],{"class":35,"line":36},[33,159021,72],{"class":39},[33,159023,109],{"class":59},[33,159025,87850],{"class":39},[33,159027,47212],{"class":63},[33,159029,159030],{"class":39}," 0.2",[33,159032,157],{"class":59},[19,159034,159035,159036,159039],{},"金额计算如果要求严格，可以后续学习 ",[30,159037,159038],{},"decimal"," 模块。",[14,159041,159043],{"id":159042},"_214-本章练习","2.14 本章练习",[162,159045,159046,159049,159052,159055,159058],{},[165,159047,159048],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[165,159050,159051],{},"输入圆的半径，计算面积，保留两位小数。",[165,159053,159054],{},"输入工资和奖金，计算总收入。",[165,159056,159057],{},"输入摄氏温度，转换为华氏温度。",[165,159059,159060],{},"写一个 BMI 计算程序：",[23,159062,159065],{"className":159063,"code":159064,"language":6848,"meta":28},[6846],"BMI = 体重kg \u002F 身高m ** 2\n",[30,159066,159064],{"__ignoreMap":28},[1729,159068,159069],{},"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":43,"depth":43,"links":159071},[159072,159073,159074,159075,159076,159077,159078,159084,159085,159086,159091,159092,159093,159094],{"id":156644,"depth":43,"text":156645},{"id":156753,"depth":43,"text":156754},{"id":156923,"depth":43,"text":156924},{"id":156999,"depth":43,"text":157000},{"id":52376,"depth":43,"text":52377},{"id":157305,"depth":43,"text":157306},{"id":157530,"depth":43,"text":157531,"children":159079},[159080,159081,159082,159083],{"id":157534,"depth":130,"text":157535},{"id":157728,"depth":130,"text":157729},{"id":157816,"depth":130,"text":157817},{"id":157921,"depth":130,"text":157922},{"id":158029,"depth":43,"text":158030},{"id":158187,"depth":43,"text":158188},{"id":158252,"depth":43,"text":158253,"children":159087},[159088,159089,159090],{"id":158256,"depth":130,"text":158257},{"id":158401,"depth":130,"text":158402},{"id":158504,"depth":130,"text":158505},{"id":158634,"depth":43,"text":158635},{"id":158784,"depth":43,"text":158785},{"id":158984,"depth":43,"text":158985},{"id":159042,"depth":43,"text":159043},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156636,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":4,"title":5,"body":159101,"description":1751,"extension":1752,"meta":160544,"navigation":126,"path":1754,"seo":160545,"stem":1756,"__hash__":1757},{"type":7,"value":159102,"toc":160525},[159103,159105,159107,159109,159121,159123,159149,159151,159199,159201,159213,159215,159239,159241,159243,159307,159309,159321,159323,159325,159433,159435,159439,159487,159491,159493,159495,159601,159603,159605,159607,159609,159657,159659,159661,159705,159707,159709,159743,159745,159747,159789,159791,159825,159827,159831,159833,159875,159877,159941,159943,159947,160045,160051,160053,160055,160063,160065,160223,160225,160227,160237,160239,160433,160435,160449,160463,160465,160505,160507,160523],[10,159104,5],{"id":12},[14,159106,17],{"id":16},[19,159108,21],{},[23,159110,159111],{"className":25,"code":26,"language":27,"meta":28,"style":28},[30,159112,159113,159117],{"__ignoreMap":28},[33,159114,159115],{"class":35,"line":36},[33,159116,40],{"class":39},[33,159118,159119],{"class":35,"line":43},[33,159120,46],{"class":39},[19,159122,49],{},[23,159124,159125],{"className":25,"code":52,"language":27,"meta":28,"style":28},[30,159126,159127,159135],{"__ignoreMap":28},[33,159128,159129,159131,159133],{"class":35,"line":36},[33,159130,60],{"class":59},[33,159132,64],{"class":63},[33,159134,67],{"class":39},[33,159136,159137,159139,159141,159143,159145,159147],{"class":35,"line":43},[33,159138,72],{"class":39},[33,159140,75],{"class":59},[33,159142,78],{"class":63},[33,159144,81],{"class":39},[33,159146,84],{"class":59},[33,159148,88],{"class":87},[14,159150,92],{"id":91},[23,159152,159153],{"className":25,"code":95,"language":27,"meta":28,"style":28},[30,159154,159155,159173,159177,159189],{"__ignoreMap":28},[33,159156,159157,159159,159161,159163,159165,159167,159169,159171],{"class":35,"line":36},[33,159158,60],{"class":59},[33,159160,64],{"class":63},[33,159162,106],{"class":39},[33,159164,109],{"class":59},[33,159166,112],{"class":39},[33,159168,109],{"class":59},[33,159170,118],{"class":117},[33,159172,121],{"class":59},[33,159174,159175],{"class":35,"line":43},[33,159176,127],{"emptyLinePlaceholder":126},[33,159178,159179,159181,159183,159185,159187],{"class":35,"line":130},[33,159180,133],{"class":63},[33,159182,136],{"class":59},[33,159184,78],{"class":63},[33,159186,81],{"class":39},[33,159188,143],{"class":59},[33,159190,159191,159193,159195,159197],{"class":35,"line":146},[33,159192,149],{"class":39},[33,159194,109],{"class":59},[33,159196,154],{"class":117},[33,159198,157],{"class":59},[19,159200,160],{},[162,159202,159203,159207,159209,159211],{},[165,159204,159205,169],{},[30,159206,133],{},[165,159208,172],{},[165,159210,175],{},[165,159212,178],{},[19,159214,181],{},[23,159216,159217],{"className":25,"code":184,"language":27,"meta":28,"style":28},[30,159218,159219,159229],{"__ignoreMap":28},[33,159220,159221,159223,159225,159227],{"class":35,"line":36},[33,159222,133],{"class":63},[33,159224,136],{"class":59},[33,159226,78],{"class":63},[33,159228,67],{"class":39},[33,159230,159231,159233,159235,159237],{"class":35,"line":43},[33,159232,149],{"class":39},[33,159234,109],{"class":59},[33,159236,205],{"class":117},[33,159238,157],{"class":59},[19,159240,210],{},[14,159242,214],{"id":213},[23,159244,159245],{"className":25,"code":217,"language":27,"meta":28,"style":28},[30,159246,159247,159265,159269,159281,159291,159297],{"__ignoreMap":28},[33,159248,159249,159251,159253,159255,159257,159259,159261,159263],{"class":35,"line":36},[33,159250,60],{"class":59},[33,159252,64],{"class":63},[33,159254,106],{"class":39},[33,159256,109],{"class":59},[33,159258,112],{"class":39},[33,159260,109],{"class":59},[33,159262,118],{"class":117},[33,159264,121],{"class":59},[33,159266,159267],{"class":35,"line":43},[33,159268,127],{"emptyLinePlaceholder":126},[33,159270,159271,159273,159275,159277,159279],{"class":35,"line":130},[33,159272,133],{"class":63},[33,159274,136],{"class":59},[33,159276,78],{"class":63},[33,159278,81],{"class":39},[33,159280,143],{"class":59},[33,159282,159283,159285,159287,159289],{"class":35,"line":146},[33,159284,149],{"class":39},[33,159286,109],{"class":59},[33,159288,262],{"class":117},[33,159290,157],{"class":59},[33,159292,159293,159295],{"class":35,"line":267},[33,159294,270],{"class":63},[33,159296,143],{"class":59},[33,159298,159299,159301,159303,159305],{"class":35,"line":275},[33,159300,149],{"class":39},[33,159302,109],{"class":59},[33,159304,282],{"class":117},[33,159306,157],{"class":59},[19,159308,287],{},[162,159310,159311,159315,159319],{},[165,159312,292,159313,295],{},[30,159314,133],{},[165,159316,298,159317,295],{},[30,159318,270],{},[165,159320,303],{},[14,159322,307],{"id":306},[19,159324,310],{},[23,159326,159327],{"className":25,"code":313,"language":27,"meta":28,"style":28},[30,159328,159329,159347,159351,159363,159373,159385,159395,159407,159417,159423],{"__ignoreMap":28},[33,159330,159331,159333,159335,159337,159339,159341,159343,159345],{"class":35,"line":36},[33,159332,320],{"class":59},[33,159334,64],{"class":63},[33,159336,106],{"class":39},[33,159338,109],{"class":59},[33,159340,112],{"class":39},[33,159342,109],{"class":59},[33,159344,333],{"class":117},[33,159346,121],{"class":59},[33,159348,159349],{"class":35,"line":43},[33,159350,127],{"emptyLinePlaceholder":126},[33,159352,159353,159355,159357,159359,159361],{"class":35,"line":130},[33,159354,133],{"class":63},[33,159356,346],{"class":59},[33,159358,78],{"class":63},[33,159360,351],{"class":39},[33,159362,143],{"class":59},[33,159364,159365,159367,159369,159371],{"class":35,"line":146},[33,159366,149],{"class":39},[33,159368,109],{"class":59},[33,159370,362],{"class":117},[33,159372,157],{"class":59},[33,159374,159375,159377,159379,159381,159383],{"class":35,"line":267},[33,159376,369],{"class":63},[33,159378,346],{"class":59},[33,159380,78],{"class":63},[33,159382,376],{"class":39},[33,159384,143],{"class":59},[33,159386,159387,159389,159391,159393],{"class":35,"line":275},[33,159388,149],{"class":39},[33,159390,109],{"class":59},[33,159392,387],{"class":117},[33,159394,157],{"class":59},[33,159396,159397,159399,159401,159403,159405],{"class":35,"line":392},[33,159398,369],{"class":63},[33,159400,346],{"class":59},[33,159402,78],{"class":63},[33,159404,401],{"class":39},[33,159406,143],{"class":59},[33,159408,159409,159411,159413,159415],{"class":35,"line":406},[33,159410,149],{"class":39},[33,159412,109],{"class":59},[33,159414,413],{"class":117},[33,159416,157],{"class":59},[33,159418,159419,159421],{"class":35,"line":418},[33,159420,270],{"class":63},[33,159422,143],{"class":59},[33,159424,159425,159427,159429,159431],{"class":35,"line":425},[33,159426,149],{"class":39},[33,159428,109],{"class":59},[33,159430,432],{"class":117},[33,159432,157],{"class":59},[19,159434,437],{},[19,159436,440,159437,444],{},[30,159438,443],{},[23,159440,159441],{"className":25,"code":447,"language":27,"meta":28,"style":28},[30,159442,159443,159455,159465,159477],{"__ignoreMap":28},[33,159444,159445,159447,159449,159451,159453],{"class":35,"line":36},[33,159446,133],{"class":63},[33,159448,346],{"class":59},[33,159450,78],{"class":63},[33,159452,401],{"class":39},[33,159454,143],{"class":59},[33,159456,159457,159459,159461,159463],{"class":35,"line":43},[33,159458,149],{"class":39},[33,159460,109],{"class":59},[33,159462,413],{"class":117},[33,159464,157],{"class":59},[33,159466,159467,159469,159471,159473,159475],{"class":35,"line":130},[33,159468,369],{"class":63},[33,159470,346],{"class":59},[33,159472,78],{"class":63},[33,159474,351],{"class":39},[33,159476,143],{"class":59},[33,159478,159479,159481,159483,159485],{"class":35,"line":146},[33,159480,149],{"class":39},[33,159482,109],{"class":59},[33,159484,362],{"class":117},[33,159486,157],{"class":59},[19,159488,496,159489,499],{},[30,159490,443],{},[14,159492,503],{"id":502},[19,159494,506],{},[23,159496,159497],{"className":25,"code":509,"language":27,"meta":28,"style":28},[30,159498,159499,159517,159531,159535,159547,159559,159569,159575,159585,159591],{"__ignoreMap":28},[33,159500,159501,159503,159505,159507,159509,159511,159513,159515],{"class":35,"line":36},[33,159502,60],{"class":59},[33,159504,64],{"class":63},[33,159506,106],{"class":39},[33,159508,109],{"class":59},[33,159510,112],{"class":39},[33,159512,109],{"class":59},[33,159514,118],{"class":117},[33,159516,121],{"class":59},[33,159518,159519,159521,159523,159525,159527,159529],{"class":35,"line":43},[33,159520,534],{"class":59},[33,159522,64],{"class":63},[33,159524,539],{"class":39},[33,159526,109],{"class":59},[33,159528,544],{"class":117},[33,159530,157],{"class":59},[33,159532,159533],{"class":35,"line":130},[33,159534,127],{"emptyLinePlaceholder":126},[33,159536,159537,159539,159541,159543,159545],{"class":35,"line":146},[33,159538,133],{"class":63},[33,159540,136],{"class":59},[33,159542,78],{"class":63},[33,159544,81],{"class":39},[33,159546,143],{"class":59},[33,159548,159549,159551,159553,159555,159557],{"class":35,"line":267},[33,159550,567],{"class":63},[33,159552,570],{"class":59},[33,159554,573],{"class":63},[33,159556,576],{"class":117},[33,159558,143],{"class":59},[33,159560,159561,159563,159565,159567],{"class":35,"line":275},[33,159562,583],{"class":39},[33,159564,109],{"class":59},[33,159566,205],{"class":117},[33,159568,157],{"class":59},[33,159570,159571,159573],{"class":35,"line":392},[33,159572,594],{"class":63},[33,159574,143],{"class":59},[33,159576,159577,159579,159581,159583],{"class":35,"line":406},[33,159578,583],{"class":39},[33,159580,109],{"class":59},[33,159582,605],{"class":117},[33,159584,157],{"class":59},[33,159586,159587,159589],{"class":35,"line":418},[33,159588,270],{"class":63},[33,159590,143],{"class":59},[33,159592,159593,159595,159597,159599],{"class":35,"line":425},[33,159594,149],{"class":39},[33,159596,109],{"class":59},[33,159598,622],{"class":117},[33,159600,157],{"class":59},[19,159602,627],{},[14,159604,631],{"id":630},[633,159606,636],{"id":635},[19,159608,639],{},[23,159610,159611],{"className":25,"code":642,"language":27,"meta":28,"style":28},[30,159612,159613,159621,159629,159633,159647],{"__ignoreMap":28},[33,159614,159615,159617,159619],{"class":35,"line":36},[33,159616,60],{"class":59},[33,159618,64],{"class":63},[33,159620,653],{"class":39},[33,159622,159623,159625,159627],{"class":35,"line":43},[33,159624,534],{"class":59},[33,159626,64],{"class":63},[33,159628,662],{"class":39},[33,159630,159631],{"class":35,"line":130},[33,159632,127],{"emptyLinePlaceholder":126},[33,159634,159635,159637,159639,159641,159643,159645],{"class":35,"line":146},[33,159636,133],{"class":63},[33,159638,136],{"class":59},[33,159640,78],{"class":63},[33,159642,81],{"class":39},[33,159644,679],{"class":63},[33,159646,682],{"class":59},[33,159648,159649,159651,159653,159655],{"class":35,"line":267},[33,159650,149],{"class":39},[33,159652,109],{"class":59},[33,159654,205],{"class":117},[33,159656,157],{"class":59},[633,159658,696],{"id":695},[19,159660,699],{},[23,159662,159663],{"className":25,"code":702,"language":27,"meta":28,"style":28},[30,159664,159665,159673,159681,159685,159695],{"__ignoreMap":28},[33,159666,159667,159669,159671],{"class":35,"line":36},[33,159668,709],{"class":59},[33,159670,64],{"class":63},[33,159672,714],{"class":39},[33,159674,159675,159677,159679],{"class":35,"line":43},[33,159676,719],{"class":59},[33,159678,64],{"class":63},[33,159680,662],{"class":39},[33,159682,159683],{"class":35,"line":130},[33,159684,127],{"emptyLinePlaceholder":126},[33,159686,159687,159689,159691,159693],{"class":35,"line":146},[33,159688,133],{"class":63},[33,159690,734],{"class":59},[33,159692,737],{"class":63},[33,159694,740],{"class":59},[33,159696,159697,159699,159701,159703],{"class":35,"line":267},[33,159698,149],{"class":39},[33,159700,109],{"class":59},[33,159702,749],{"class":117},[33,159704,157],{"class":59},[633,159706,755],{"id":754},[19,159708,758],{},[23,159710,159711],{"className":25,"code":761,"language":27,"meta":28,"style":28},[30,159712,159713,159721,159725,159733],{"__ignoreMap":28},[33,159714,159715,159717,159719],{"class":35,"line":36},[33,159716,768],{"class":59},[33,159718,64],{"class":63},[33,159720,714],{"class":39},[33,159722,159723],{"class":35,"line":43},[33,159724,127],{"emptyLinePlaceholder":126},[33,159726,159727,159729,159731],{"class":35,"line":130},[33,159728,133],{"class":63},[33,159730,783],{"class":63},[33,159732,786],{"class":59},[33,159734,159735,159737,159739,159741],{"class":35,"line":146},[33,159736,149],{"class":39},[33,159738,109],{"class":59},[33,159740,795],{"class":117},[33,159742,157],{"class":59},[14,159744,801],{"id":800},[19,159746,804],{},[23,159748,159749],{"className":25,"code":807,"language":27,"meta":28,"style":28},[30,159750,159751,159759,159763,159779],{"__ignoreMap":28},[33,159752,159753,159755,159757],{"class":35,"line":36},[33,159754,320],{"class":59},[33,159756,64],{"class":63},[33,159758,818],{"class":39},[33,159760,159761],{"class":35,"line":43},[33,159762,127],{"emptyLinePlaceholder":126},[33,159764,159765,159767,159769,159771,159773,159775,159777],{"class":35,"line":130},[33,159766,133],{"class":63},[33,159768,829],{"class":39},[33,159770,832],{"class":63},[33,159772,346],{"class":59},[33,159774,837],{"class":63},[33,159776,840],{"class":39},[33,159778,143],{"class":59},[33,159780,159781,159783,159785,159787],{"class":35,"line":146},[33,159782,149],{"class":39},[33,159784,109],{"class":59},[33,159786,851],{"class":117},[33,159788,157],{"class":59},[19,159790,856],{},[23,159792,159793],{"className":25,"code":859,"language":27,"meta":28,"style":28},[30,159794,159795,159815],{"__ignoreMap":28},[33,159796,159797,159799,159801,159803,159805,159807,159809,159811,159813],{"class":35,"line":36},[33,159798,133],{"class":63},[33,159800,346],{"class":59},[33,159802,78],{"class":63},[33,159804,829],{"class":39},[33,159806,679],{"class":63},[33,159808,346],{"class":59},[33,159810,837],{"class":63},[33,159812,840],{"class":39},[33,159814,143],{"class":59},[33,159816,159817,159819,159821,159823],{"class":35,"line":43},[33,159818,149],{"class":39},[33,159820,109],{"class":59},[33,159822,851],{"class":117},[33,159824,157],{"class":59},[14,159826,895],{"id":894},[19,159828,898,159829,901],{},[30,159830,133],{},[19,159832,904],{},[23,159834,159835],{"className":25,"code":907,"language":27,"meta":28,"style":28},[30,159836,159837,159841,159845,159849,159853,159857,159861,159865,159869],{"__ignoreMap":28},[33,159838,159839],{"class":35,"line":36},[33,159840,46],{"class":39},[33,159842,159843],{"class":35,"line":43},[33,159844,918],{"class":39},[33,159846,159847],{"class":35,"line":130},[33,159848,923],{"class":39},[33,159850,159851],{"class":35,"line":146},[33,159852,928],{"class":39},[33,159854,159855],{"class":35,"line":267},[33,159856,933],{"class":117},[33,159858,159859],{"class":35,"line":275},[33,159860,938],{"class":59},[33,159862,159863],{"class":35,"line":392},[33,159864,943],{"class":59},[33,159866,159867],{"class":35,"line":406},[33,159868,948],{"class":59},[33,159870,159871,159873],{"class":35,"line":418},[33,159872,953],{"class":39},[33,159874,943],{"class":59},[19,159876,958],{},[23,159878,159879],{"className":25,"code":961,"language":27,"meta":28,"style":28},[30,159880,159881,159895,159899,159905,159925,159931],{"__ignoreMap":28},[33,159882,159883,159885,159887,159889,159891,159893],{"class":35,"line":36},[33,159884,968],{"class":59},[33,159886,64],{"class":63},[33,159888,539],{"class":39},[33,159890,109],{"class":59},[33,159892,977],{"class":117},[33,159894,157],{"class":59},[33,159896,159897],{"class":35,"line":43},[33,159898,127],{"emptyLinePlaceholder":126},[33,159900,159901,159903],{"class":35,"line":130},[33,159902,133],{"class":63},[33,159904,990],{"class":59},[33,159906,159907,159909,159911,159913,159915,159917,159919,159921,159923],{"class":35,"line":146},[33,159908,149],{"class":39},[33,159910,109],{"class":59},[33,159912,999],{"class":63},[33,159914,1002],{"class":117},[33,159916,1005],{"class":39},[33,159918,1008],{"class":59},[33,159920,1011],{"class":39},[33,159922,1014],{"class":117},[33,159924,157],{"class":59},[33,159926,159927,159929],{"class":35,"line":267},[33,159928,270],{"class":63},[33,159930,143],{"class":59},[33,159932,159933,159935,159937,159939],{"class":35,"line":275},[33,159934,149],{"class":39},[33,159936,109],{"class":59},[33,159938,1031],{"class":117},[33,159940,157],{"class":59},[14,159942,1037],{"id":1036},[19,159944,1040,159945,1044],{},[30,159946,1043],{},[23,159948,159949],{"className":25,"code":1047,"language":27,"meta":28,"style":28},[30,159950,159951,159965,159969,159975,159983,159993,160001,160011,160019,160029,160035],{"__ignoreMap":28},[33,159952,159953,159955,159957,159959,159961,159963],{"class":35,"line":36},[33,159954,1054],{"class":59},[33,159956,64],{"class":63},[33,159958,539],{"class":39},[33,159960,109],{"class":59},[33,159962,1063],{"class":117},[33,159964,157],{"class":59},[33,159966,159967],{"class":35,"line":43},[33,159968,127],{"emptyLinePlaceholder":126},[33,159970,159971,159973],{"class":35,"line":130},[33,159972,1043],{"class":63},[33,159974,1076],{"class":59},[33,159976,159977,159979,159981],{"class":35,"line":146},[33,159978,1081],{"class":63},[33,159980,1084],{"class":117},[33,159982,143],{"class":59},[33,159984,159985,159987,159989,159991],{"class":35,"line":267},[33,159986,583],{"class":39},[33,159988,109],{"class":59},[33,159990,1095],{"class":117},[33,159992,157],{"class":59},[33,159994,159995,159997,159999],{"class":35,"line":275},[33,159996,1081],{"class":63},[33,159998,1104],{"class":117},[33,160000,143],{"class":59},[33,160002,160003,160005,160007,160009],{"class":35,"line":392},[33,160004,583],{"class":39},[33,160006,109],{"class":59},[33,160008,1115],{"class":117},[33,160010,157],{"class":59},[33,160012,160013,160015,160017],{"class":35,"line":406},[33,160014,1081],{"class":63},[33,160016,1124],{"class":117},[33,160018,143],{"class":59},[33,160020,160021,160023,160025,160027],{"class":35,"line":418},[33,160022,583],{"class":39},[33,160024,109],{"class":59},[33,160026,1135],{"class":117},[33,160028,157],{"class":59},[33,160030,160031,160033],{"class":35,"line":425},[33,160032,1081],{"class":63},[33,160034,1144],{"class":59},[33,160036,160037,160039,160041,160043],{"class":35,"line":1147},[33,160038,583],{"class":39},[33,160040,109],{"class":59},[33,160042,1154],{"class":117},[33,160044,157],{"class":59},[19,160046,1159,160047,1163,160049,1166],{},[30,160048,1162],{},[30,160050,1043],{},[14,160052,1170],{"id":1169},[19,160054,1173],{},[162,160056,160057,160059,160061],{},[165,160058,1178],{},[165,160060,1181],{},[165,160062,1184],{},[19,160064,1187],{},[23,160066,160067],{"className":25,"code":1190,"language":27,"meta":28,"style":28},[30,160068,160069,160087,160091,160109,160119,160131,160141,160153,160163,160175,160185,160197,160207,160213],{"__ignoreMap":28},[33,160070,160071,160073,160075,160077,160079,160081,160083,160085],{"class":35,"line":36},[33,160072,320],{"class":59},[33,160074,64],{"class":63},[33,160076,1201],{"class":39},[33,160078,109],{"class":59},[33,160080,112],{"class":39},[33,160082,109],{"class":59},[33,160084,333],{"class":117},[33,160086,121],{"class":59},[33,160088,160089],{"class":35,"line":43},[33,160090,127],{"emptyLinePlaceholder":126},[33,160092,160093,160095,160097,160099,160101,160103,160105,160107],{"class":35,"line":130},[33,160094,133],{"class":63},[33,160096,783],{"class":63},[33,160098,829],{"class":39},[33,160100,832],{"class":63},[33,160102,346],{"class":59},[33,160104,837],{"class":63},[33,160106,840],{"class":39},[33,160108,143],{"class":59},[33,160110,160111,160113,160115,160117],{"class":35,"line":146},[33,160112,149],{"class":39},[33,160114,109],{"class":59},[33,160116,1242],{"class":117},[33,160118,157],{"class":59},[33,160120,160121,160123,160125,160127,160129],{"class":35,"line":267},[33,160122,369],{"class":63},[33,160124,346],{"class":59},[33,160126,78],{"class":63},[33,160128,351],{"class":39},[33,160130,143],{"class":59},[33,160132,160133,160135,160137,160139],{"class":35,"line":275},[33,160134,149],{"class":39},[33,160136,109],{"class":59},[33,160138,1265],{"class":117},[33,160140,157],{"class":59},[33,160142,160143,160145,160147,160149,160151],{"class":35,"line":392},[33,160144,369],{"class":63},[33,160146,346],{"class":59},[33,160148,78],{"class":63},[33,160150,376],{"class":39},[33,160152,143],{"class":59},[33,160154,160155,160157,160159,160161],{"class":35,"line":406},[33,160156,149],{"class":39},[33,160158,109],{"class":59},[33,160160,1288],{"class":117},[33,160162,157],{"class":59},[33,160164,160165,160167,160169,160171,160173],{"class":35,"line":418},[33,160166,369],{"class":63},[33,160168,346],{"class":59},[33,160170,78],{"class":63},[33,160172,1301],{"class":39},[33,160174,143],{"class":59},[33,160176,160177,160179,160181,160183],{"class":35,"line":425},[33,160178,149],{"class":39},[33,160180,109],{"class":59},[33,160182,1312],{"class":117},[33,160184,157],{"class":59},[33,160186,160187,160189,160191,160193,160195],{"class":35,"line":1147},[33,160188,369],{"class":63},[33,160190,346],{"class":59},[33,160192,78],{"class":63},[33,160194,401],{"class":39},[33,160196,143],{"class":59},[33,160198,160199,160201,160203,160205],{"class":35,"line":1329},[33,160200,149],{"class":39},[33,160202,109],{"class":59},[33,160204,1336],{"class":117},[33,160206,157],{"class":59},[33,160208,160209,160211],{"class":35,"line":1341},[33,160210,270],{"class":63},[33,160212,143],{"class":59},[33,160214,160215,160217,160219,160221],{"class":35,"line":1348},[33,160216,149],{"class":39},[33,160218,109],{"class":59},[33,160220,1355],{"class":117},[33,160222,157],{"class":59},[14,160224,1361],{"id":1360},[19,160226,1173],{},[162,160228,160229,160231,160233,160235],{},[165,160230,1368],{},[165,160232,1371],{},[165,160234,1374],{},[165,160236,1377],{},[19,160238,1187],{},[23,160240,160241],{"className":25,"code":1382,"language":27,"meta":28,"style":28},[30,160242,160243,160261,160275,160279,160287,160291,160303,160311,160323,160331,160343,160351,160357,160367,160371,160383,160387,160399,160407,160411],{"__ignoreMap":28},[33,160244,160245,160247,160249,160251,160253,160255,160257,160259],{"class":35,"line":36},[33,160246,1389],{"class":59},[33,160248,64],{"class":63},[33,160250,1201],{"class":39},[33,160252,109],{"class":59},[33,160254,112],{"class":39},[33,160256,109],{"class":59},[33,160258,1402],{"class":117},[33,160260,121],{"class":59},[33,160262,160263,160265,160267,160269,160271,160273],{"class":35,"line":43},[33,160264,1409],{"class":59},[33,160266,64],{"class":63},[33,160268,539],{"class":39},[33,160270,109],{"class":59},[33,160272,1418],{"class":117},[33,160274,157],{"class":59},[33,160276,160277],{"class":35,"line":130},[33,160278,127],{"emptyLinePlaceholder":126},[33,160280,160281,160283,160285],{"class":35,"line":146},[33,160282,1429],{"class":59},[33,160284,64],{"class":63},[33,160286,1434],{"class":39},[33,160288,160289],{"class":35,"line":267},[33,160290,127],{"emptyLinePlaceholder":126},[33,160292,160293,160295,160297,160299,160301],{"class":35,"line":275},[33,160294,133],{"class":63},[33,160296,1445],{"class":59},[33,160298,573],{"class":63},[33,160300,1450],{"class":117},[33,160302,143],{"class":59},[33,160304,160305,160307,160309],{"class":35,"line":392},[33,160306,1457],{"class":59},[33,160308,64],{"class":63},[33,160310,1462],{"class":39},[33,160312,160313,160315,160317,160319,160321],{"class":35,"line":406},[33,160314,369],{"class":63},[33,160316,1445],{"class":59},[33,160318,573],{"class":63},[33,160320,1473],{"class":117},[33,160322,143],{"class":59},[33,160324,160325,160327,160329],{"class":35,"line":418},[33,160326,1457],{"class":59},[33,160328,64],{"class":63},[33,160330,1484],{"class":39},[33,160332,160333,160335,160337,160339,160341],{"class":35,"line":425},[33,160334,369],{"class":63},[33,160336,1445],{"class":59},[33,160338,573],{"class":63},[33,160340,1495],{"class":117},[33,160342,143],{"class":59},[33,160344,160345,160347,160349],{"class":35,"line":1147},[33,160346,1457],{"class":59},[33,160348,64],{"class":63},[33,160350,1434],{"class":39},[33,160352,160353,160355],{"class":35,"line":1329},[33,160354,270],{"class":63},[33,160356,143],{"class":59},[33,160358,160359,160361,160363,160365],{"class":35,"line":1341},[33,160360,149],{"class":39},[33,160362,109],{"class":59},[33,160364,1520],{"class":117},[33,160366,157],{"class":59},[33,160368,160369],{"class":35,"line":1348},[33,160370,127],{"emptyLinePlaceholder":126},[33,160372,160373,160375,160377,160379,160381],{"class":35,"line":1529},[33,160374,1532],{"class":59},[33,160376,64],{"class":63},[33,160378,1537],{"class":59},[33,160380,1540],{"class":63},[33,160382,1543],{"class":59},[33,160384,160385],{"class":35,"line":1546},[33,160386,127],{"emptyLinePlaceholder":126},[33,160388,160389,160391,160393,160395,160397],{"class":35,"line":1551},[33,160390,133],{"class":63},[33,160392,1556],{"class":59},[33,160394,78],{"class":63},[33,160396,1561],{"class":39},[33,160398,143],{"class":59},[33,160400,160401,160403,160405],{"class":35,"line":1566},[33,160402,1569],{"class":59},[33,160404,1572],{"class":63},[33,160406,1575],{"class":39},[33,160408,160409],{"class":35,"line":1578},[33,160410,127],{"emptyLinePlaceholder":126},[33,160412,160413,160415,160417,160419,160421,160423,160425,160427,160429,160431],{"class":35,"line":1583},[33,160414,72],{"class":39},[33,160416,109],{"class":59},[33,160418,999],{"class":63},[33,160420,1592],{"class":117},[33,160422,1005],{"class":39},[33,160424,1597],{"class":59},[33,160426,1600],{"class":63},[33,160428,1011],{"class":39},[33,160430,1605],{"class":117},[33,160432,157],{"class":59},[14,160434,1611],{"id":1610},[162,160436,160437,160439,160441,160443,160447],{},[165,160438,1616],{},[165,160440,1619],{},[165,160442,1622],{},[165,160444,1625,160445,1628],{},[30,160446,573],{},[165,160448,1631],{},[23,160450,160451],{"className":25,"code":1634,"language":27,"meta":28,"style":28},[30,160452,160453],{"__ignoreMap":28},[33,160454,160455,160457,160459,160461],{"class":35,"line":36},[33,160456,1641],{"class":117},[33,160458,1644],{"class":63},[33,160460,576],{"class":117},[33,160462,1649],{"class":87},[19,160464,1652],{},[23,160466,160467],{"className":25,"code":1655,"language":27,"meta":28,"style":28},[30,160468,160469,160483,160495],{"__ignoreMap":28},[33,160470,160471,160473,160475,160477,160479,160481],{"class":35,"line":36},[33,160472,1662],{"class":59},[33,160474,64],{"class":63},[33,160476,539],{"class":39},[33,160478,109],{"class":59},[33,160480,1671],{"class":117},[33,160482,1674],{"class":59},[33,160484,160485,160487,160489,160491,160493],{"class":35,"line":43},[33,160486,133],{"class":63},[33,160488,1681],{"class":59},[33,160490,573],{"class":63},[33,160492,576],{"class":117},[33,160494,143],{"class":59},[33,160496,160497,160499,160501,160503],{"class":35,"line":130},[33,160498,149],{"class":39},[33,160500,109],{"class":59},[33,160502,1696],{"class":117},[33,160504,157],{"class":59},[14,160506,1702],{"id":1701},[162,160508,160509,160511,160513,160515,160521],{},[165,160510,1707],{},[165,160512,1710],{},[165,160514,1713],{},[165,160516,1716,160517,1720,160519,1724],{},[30,160518,1719],{},[30,160520,1723],{},[165,160522,1727],{},[1729,160524,1731],{},{"title":28,"searchDepth":43,"depth":43,"links":160526},[160527,160528,160529,160530,160531,160532,160537,160538,160539,160540,160541,160542,160543],{"id":16,"depth":43,"text":17},{"id":91,"depth":43,"text":92},{"id":213,"depth":43,"text":214},{"id":306,"depth":43,"text":307},{"id":502,"depth":43,"text":503},{"id":630,"depth":43,"text":631,"children":160533},[160534,160535,160536],{"id":635,"depth":130,"text":636},{"id":695,"depth":130,"text":696},{"id":754,"depth":130,"text":755},{"id":800,"depth":43,"text":801},{"id":894,"depth":43,"text":895},{"id":1036,"depth":43,"text":1037},{"id":1169,"depth":43,"text":1170},{"id":1360,"depth":43,"text":1361},{"id":1610,"depth":43,"text":1611},{"id":1701,"depth":43,"text":1702},{},{"title":5,"description":1751},{"id":160547,"title":160548,"body":160549,"description":1751,"extension":1752,"meta":162318,"navigation":126,"path":162319,"seo":162320,"stem":162321,"__hash__":162322},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160550,"toc":162298},[160551,160554,160558,160564,160567,160584,160588,160590,160607,160609,160654,160656,160673,160677,160680,160746,160749,160767,160771,160932,160941,160945,160949,160954,161001,161003,161009,161013,161018,161065,161067,161073,161077,161082,161118,161121,161168,161172,161178,161236,161241,161272,161277,161281,161336,161339,161411,161414,161473,161477,161480,161555,161558,161562,161668,161671,161697,161701,161713,161782,161785,161877,161881,161883,161894,161896,162026,162030,162232,162240,162244,162274,162278,162295],[10,160552,160548],{"id":160553},"_4-循环语句",[14,160555,160557],{"id":160556},"_41-为什么需要循环","4.1 为什么需要循环",[19,160559,160560,160561,160563],{},"如果要输出 1 到 100，不应该写 100 行 ",[30,160562,148104],{},"，而应该用循环。",[19,160565,160566],{},"循环适合处理重复任务：",[162,160568,160569,160572,160575,160578,160581],{},[165,160570,160571],{},"重复输出。",[165,160573,160574],{},"重复输入。",[165,160576,160577],{},"遍历数据。",[165,160579,160580],{},"持续执行菜单。",[165,160582,160583],{},"批量处理文件或数据。",[14,160585,160587],{"id":160586},"_42-while循环","4.2 while循环",[19,160589,6842],{},[23,160591,160593],{"className":25,"code":160592,"language":27,"meta":28,"style":28},"while 条件:\n    循环体\n",[30,160594,160595,160602],{"__ignoreMap":28},[33,160596,160597,160599],{"class":35,"line":36},[33,160598,110301],{"class":63},[33,160600,160601],{"class":59}," 条件:\n",[33,160603,160604],{"class":35,"line":43},[33,160605,160606],{"class":59},"    循环体\n",[19,160608,958],{},[23,160610,160612],{"className":25,"code":160611,"language":27,"meta":28,"style":28},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[30,160613,160614,160622,160626,160638,160645],{"__ignoreMap":28},[33,160615,160616,160618,160620],{"class":35,"line":36},[33,160617,101787],{"class":59},[33,160619,64],{"class":63},[33,160621,1434],{"class":39},[33,160623,160624],{"class":35,"line":43},[33,160625,127],{"emptyLinePlaceholder":126},[33,160627,160628,160630,160632,160634,160636],{"class":35,"line":130},[33,160629,110301],{"class":63},[33,160631,11097],{"class":59},[33,160633,837],{"class":63},[33,160635,3816],{"class":39},[33,160637,143],{"class":59},[33,160639,160640,160642],{"class":35,"line":146},[33,160641,149],{"class":39},[33,160643,160644],{"class":59},"(i)\n",[33,160646,160647,160650,160652],{"class":35,"line":267},[33,160648,160649],{"class":59},"    i ",[33,160651,11136],{"class":63},[33,160653,1434],{"class":39},[19,160655,82569],{},[162,160657,160658,160664,160667,160670],{},[165,160659,160660,160661,1628],{},"判断条件 ",[30,160662,160663],{},"i \u003C= 5",[165,160665,160666],{},"条件成立，执行循环体。",[165,160668,160669],{},"执行完后回到条件判断。",[165,160671,160672],{},"条件不成立，退出循环。",[14,160674,160676],{"id":160675},"_43-while累加","4.3 while累加",[19,160678,160679],{},"计算 1 到 100 的和：",[23,160681,160683],{"className":25,"code":160682,"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,160684,160685,160693,160701,160705,160717,160727,160735,160739],{"__ignoreMap":28},[33,160686,160687,160689,160691],{"class":35,"line":36},[33,160688,101787],{"class":59},[33,160690,64],{"class":63},[33,160692,1434],{"class":39},[33,160694,160695,160697,160699],{"class":35,"line":43},[33,160696,158874],{"class":59},[33,160698,64],{"class":63},[33,160700,48978],{"class":39},[33,160702,160703],{"class":35,"line":130},[33,160704,127],{"emptyLinePlaceholder":126},[33,160706,160707,160709,160711,160713,160715],{"class":35,"line":146},[33,160708,110301],{"class":63},[33,160710,11097],{"class":59},[33,160712,837],{"class":63},[33,160714,840],{"class":39},[33,160716,143],{"class":59},[33,160718,160719,160722,160724],{"class":35,"line":267},[33,160720,160721],{"class":59},"    total ",[33,160723,11136],{"class":63},[33,160725,160726],{"class":59}," i\n",[33,160728,160729,160731,160733],{"class":35,"line":275},[33,160730,160649],{"class":59},[33,160732,11136],{"class":63},[33,160734,1434],{"class":39},[33,160736,160737],{"class":35,"line":392},[33,160738,127],{"emptyLinePlaceholder":126},[33,160740,160741,160743],{"class":35,"line":406},[33,160742,72],{"class":39},[33,160744,160745],{"class":59},"(total)\n",[19,160747,160748],{},"核心思想：",[162,160750,160751,160756,160761],{},[165,160752,160753,160755],{},[30,160754,2259],{}," 控制循环次数。",[165,160757,160758,160760],{},[30,160759,158973],{}," 保存累加结果。",[165,160762,160763,160764,160766],{},"每轮循环都要更新 ",[30,160765,2259],{},"，否则可能死循环。",[14,160768,160770],{"id":160769},"_44-while猜数字","4.4 while猜数字",[23,160772,160774],{"className":25,"code":160773,"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,160775,160776,160782,160786,160803,160811,160815,160823,160843,160852,160856,160868,160879,160889,160900,160906,160928],{"__ignoreMap":28},[33,160777,160778,160780],{"class":35,"line":36},[33,160779,32045],{"class":63},[33,160781,46974],{"class":59},[33,160783,160784],{"class":35,"line":43},[33,160785,127],{"emptyLinePlaceholder":126},[33,160787,160788,160790,160792,160795,160797,160799,160801],{"class":35,"line":130},[33,160789,1662],{"class":59},[33,160791,64],{"class":63},[33,160793,160794],{"class":59}," random.randint(",[33,160796,2036],{"class":39},[33,160798,14093],{"class":59},[33,160800,2129],{"class":39},[33,160802,157],{"class":59},[33,160804,160805,160807,160809],{"class":35,"line":146},[33,160806,148320],{"class":59},[33,160808,64],{"class":63},[33,160810,48978],{"class":39},[33,160812,160813],{"class":35,"line":267},[33,160814,127],{"emptyLinePlaceholder":126},[33,160816,160817,160819,160821],{"class":35,"line":275},[33,160818,110301],{"class":63},[33,160820,96931],{"class":39},[33,160822,143],{"class":59},[33,160824,160825,160828,160830,160832,160834,160836,160838,160841],{"class":35,"line":392},[33,160826,160827],{"class":59},"    guess ",[33,160829,64],{"class":63},[33,160831,106],{"class":39},[33,160833,109],{"class":59},[33,160835,112],{"class":39},[33,160837,109],{"class":59},[33,160839,160840],{"class":117},"\"请输入1到100之间的数字:\"",[33,160842,121],{"class":59},[33,160844,160845,160848,160850],{"class":35,"line":406},[33,160846,160847],{"class":59},"    count ",[33,160849,11136],{"class":63},[33,160851,1434],{"class":39},[33,160853,160854],{"class":35,"line":418},[33,160855,127],{"emptyLinePlaceholder":126},[33,160857,160858,160860,160863,160865],{"class":35,"line":425},[33,160859,567],{"class":63},[33,160861,160862],{"class":59}," guess ",[33,160864,2775],{"class":63},[33,160866,160867],{"class":59}," answer:\n",[33,160869,160870,160872,160874,160877],{"class":35,"line":1147},[33,160871,583],{"class":39},[33,160873,109],{"class":59},[33,160875,160876],{"class":117},"\"猜大了\"",[33,160878,157],{"class":59},[33,160880,160881,160883,160885,160887],{"class":35,"line":1329},[33,160882,40939],{"class":63},[33,160884,160862],{"class":59},[33,160886,2726],{"class":63},[33,160888,160867],{"class":59},[33,160890,160891,160893,160895,160898],{"class":35,"line":1341},[33,160892,583],{"class":39},[33,160894,109],{"class":59},[33,160896,160897],{"class":117},"\"猜小了\"",[33,160899,157],{"class":59},[33,160901,160902,160904],{"class":35,"line":1348},[33,160903,594],{"class":63},[33,160905,143],{"class":59},[33,160907,160908,160910,160912,160914,160917,160919,160921,160923,160926],{"class":35,"line":1529},[33,160909,583],{"class":39},[33,160911,109],{"class":59},[33,160913,999],{"class":63},[33,160915,160916],{"class":117},"\"猜对了，一共猜了",[33,160918,1005],{"class":39},[33,160920,86074],{"class":59},[33,160922,1011],{"class":39},[33,160924,160925],{"class":117},"次\"",[33,160927,157],{"class":59},[33,160929,160930],{"class":35,"line":1546},[33,160931,33277],{"class":63},[19,160933,160934,160937,160938,160940],{},[30,160935,160936],{},"while True"," 表示无限循环，通常配合 ",[30,160939,3721],{}," 使用。",[14,160942,160944],{"id":160943},"_45-break和continue","4.5 break和continue",[633,160946,160948],{"id":160947},"_451-break","4.5.1 break",[19,160950,160951,160953],{},[30,160952,3721],{}," 直接结束整个循环。",[23,160955,160957],{"className":25,"code":160956,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[30,160958,160959,160979,160991,160995],{"__ignoreMap":28},[33,160960,160961,160963,160965,160967,160969,160971,160973,160975,160977],{"class":35,"line":36},[33,160962,4690],{"class":63},[33,160964,11097],{"class":59},[33,160966,27699],{"class":63},[33,160968,34091],{"class":39},[33,160970,109],{"class":59},[33,160972,2036],{"class":39},[33,160974,14093],{"class":59},[33,160976,2162],{"class":39},[33,160978,32437],{"class":59},[33,160980,160981,160983,160985,160987,160989],{"class":35,"line":43},[33,160982,567],{"class":63},[33,160984,11097],{"class":59},[33,160986,573],{"class":63},[33,160988,79711],{"class":39},[33,160990,143],{"class":59},[33,160992,160993],{"class":35,"line":130},[33,160994,33277],{"class":63},[33,160996,160997,160999],{"class":35,"line":146},[33,160998,149],{"class":39},[33,161000,160644],{"class":59},[19,161002,148089],{},[23,161004,161007],{"className":161005,"code":161006,"language":6848,"meta":28},[6846],"1\n2\n",[30,161008,161006],{"__ignoreMap":28},[633,161010,161012],{"id":161011},"_452-continue","4.5.2 continue",[19,161014,161015,161017],{},[30,161016,156295],{}," 跳过本轮剩余代码，进入下一轮循环。",[23,161019,161021],{"className":25,"code":161020,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[30,161022,161023,161043,161055,161059],{"__ignoreMap":28},[33,161024,161025,161027,161029,161031,161033,161035,161037,161039,161041],{"class":35,"line":36},[33,161026,4690],{"class":63},[33,161028,11097],{"class":59},[33,161030,27699],{"class":63},[33,161032,34091],{"class":39},[33,161034,109],{"class":59},[33,161036,2036],{"class":39},[33,161038,14093],{"class":59},[33,161040,2162],{"class":39},[33,161042,32437],{"class":59},[33,161044,161045,161047,161049,161051,161053],{"class":35,"line":43},[33,161046,567],{"class":63},[33,161048,11097],{"class":59},[33,161050,573],{"class":63},[33,161052,79711],{"class":39},[33,161054,143],{"class":59},[33,161056,161057],{"class":35,"line":130},[33,161058,150141],{"class":63},[33,161060,161061,161063],{"class":35,"line":146},[33,161062,149],{"class":39},[33,161064,160644],{"class":59},[19,161066,148089],{},[23,161068,161071],{"className":161069,"code":161070,"language":6848,"meta":28},[6846],"1\n2\n4\n5\n",[30,161072,161070],{"__ignoreMap":28},[14,161074,161076],{"id":161075},"_46-for循环","4.6 for循环",[19,161078,161079,161081],{},[30,161080,4690],{}," 常用于遍历序列。",[23,161083,161085],{"className":25,"code":161084,"language":27,"meta":28,"style":28},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[30,161086,161087,161096,161100,161111],{"__ignoreMap":28},[33,161088,161089,161091,161093],{"class":35,"line":36},[33,161090,968],{"class":59},[33,161092,64],{"class":63},[33,161094,161095],{"class":117}," \"python\"\n",[33,161097,161098],{"class":35,"line":43},[33,161099,127],{"emptyLinePlaceholder":126},[33,161101,161102,161104,161107,161109],{"class":35,"line":130},[33,161103,4690],{"class":63},[33,161105,161106],{"class":59}," ch ",[33,161108,27699],{"class":63},[33,161110,990],{"class":59},[33,161112,161113,161115],{"class":35,"line":146},[33,161114,149],{"class":39},[33,161116,161117],{"class":59},"(ch)\n",[19,161119,161120],{},"遍历列表：",[23,161122,161124],{"className":25,"code":161123,"language":27,"meta":28,"style":28},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[30,161125,161126,161148,161152,161162],{"__ignoreMap":28},[33,161127,161128,161131,161133,161135,161137,161139,161141,161143,161146],{"class":35,"line":36},[33,161129,161130],{"class":59},"students ",[33,161132,64],{"class":63},[33,161134,53871],{"class":59},[33,161136,151517],{"class":117},[33,161138,14093],{"class":59},[33,161140,152564],{"class":117},[33,161142,14093],{"class":59},[33,161144,161145],{"class":117},"\"小刚\"",[33,161147,34893],{"class":59},[33,161149,161150],{"class":35,"line":43},[33,161151,127],{"emptyLinePlaceholder":126},[33,161153,161154,161156,161158,161160],{"class":35,"line":130},[33,161155,4690],{"class":63},[33,161157,153765],{"class":59},[33,161159,27699],{"class":63},[33,161161,153770],{"class":59},[33,161163,161164,161166],{"class":35,"line":146},[33,161165,149],{"class":39},[33,161167,151671],{"class":59},[14,161169,161171],{"id":161170},"_47-range函数","4.7 range函数",[19,161173,161174,161177],{},[30,161175,161176],{},"range()"," 用于生成整数序列。",[23,161179,161181],{"className":25,"code":161180,"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,161182,161183,161197,161215],{"__ignoreMap":28},[33,161184,161185,161187,161189,161191,161194],{"class":35,"line":36},[33,161186,35063],{"class":39},[33,161188,109],{"class":59},[33,161190,2137],{"class":39},[33,161192,161193],{"class":59},")          ",[33,161195,161196],{"class":87},"# 0,1,2,3,4\n",[33,161198,161199,161201,161203,161205,161207,161209,161212],{"class":35,"line":43},[33,161200,35063],{"class":39},[33,161202,109],{"class":59},[33,161204,2036],{"class":39},[33,161206,14093],{"class":59},[33,161208,2137],{"class":39},[33,161210,161211],{"class":59},")       ",[33,161213,161214],{"class":87},"# 1,2,3,4\n",[33,161216,161217,161219,161221,161223,161225,161227,161229,161231,161233],{"class":35,"line":130},[33,161218,35063],{"class":39},[33,161220,109],{"class":59},[33,161222,2036],{"class":39},[33,161224,14093],{"class":59},[33,161226,2264],{"class":39},[33,161228,14093],{"class":59},[33,161230,1897],{"class":39},[33,161232,157282],{"class":59},[33,161234,161235],{"class":87},"# 1,3,5,7,9\n",[19,161237,161238,161239,26274],{},"配合 ",[30,161240,4690],{},[23,161242,161244],{"className":25,"code":161243,"language":27,"meta":28,"style":28},"for i in range(1, 6):\n    print(i)\n",[30,161245,161246,161266],{"__ignoreMap":28},[33,161247,161248,161250,161252,161254,161256,161258,161260,161262,161264],{"class":35,"line":36},[33,161249,4690],{"class":63},[33,161251,11097],{"class":59},[33,161253,27699],{"class":63},[33,161255,34091],{"class":39},[33,161257,109],{"class":59},[33,161259,2036],{"class":39},[33,161261,14093],{"class":59},[33,161263,2162],{"class":39},[33,161265,32437],{"class":59},[33,161267,161268,161270],{"class":35,"line":43},[33,161269,149],{"class":39},[33,161271,160644],{"class":59},[19,161273,160,161274,161276],{},[30,161275,35063],{}," 的结束值不包含在内。",[14,161278,161280],{"id":161279},"_48-for循环求和","4.8 for循环求和",[23,161282,161284],{"className":25,"code":161283,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[30,161285,161286,161294,161298,161318,161326,161330],{"__ignoreMap":28},[33,161287,161288,161290,161292],{"class":35,"line":36},[33,161289,158874],{"class":59},[33,161291,64],{"class":63},[33,161293,48978],{"class":39},[33,161295,161296],{"class":35,"line":43},[33,161297,127],{"emptyLinePlaceholder":126},[33,161299,161300,161302,161304,161306,161308,161310,161312,161314,161316],{"class":35,"line":130},[33,161301,4690],{"class":63},[33,161303,11097],{"class":59},[33,161305,27699],{"class":63},[33,161307,34091],{"class":39},[33,161309,109],{"class":59},[33,161311,2036],{"class":39},[33,161313,14093],{"class":59},[33,161315,2155],{"class":39},[33,161317,32437],{"class":59},[33,161319,161320,161322,161324],{"class":35,"line":146},[33,161321,160721],{"class":59},[33,161323,11136],{"class":63},[33,161325,160726],{"class":59},[33,161327,161328],{"class":35,"line":267},[33,161329,127],{"emptyLinePlaceholder":126},[33,161331,161332,161334],{"class":35,"line":275},[33,161333,72],{"class":39},[33,161335,160745],{"class":59},[19,161337,161338],{},"求偶数和：",[23,161340,161342],{"className":25,"code":161341,"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,161343,161344,161352,161356,161376,161392,161401,161405],{"__ignoreMap":28},[33,161345,161346,161348,161350],{"class":35,"line":36},[33,161347,158874],{"class":59},[33,161349,64],{"class":63},[33,161351,48978],{"class":39},[33,161353,161354],{"class":35,"line":43},[33,161355,127],{"emptyLinePlaceholder":126},[33,161357,161358,161360,161362,161364,161366,161368,161370,161372,161374],{"class":35,"line":130},[33,161359,4690],{"class":63},[33,161361,11097],{"class":59},[33,161363,27699],{"class":63},[33,161365,34091],{"class":39},[33,161367,109],{"class":59},[33,161369,2036],{"class":39},[33,161371,14093],{"class":59},[33,161373,2155],{"class":39},[33,161375,32437],{"class":59},[33,161377,161378,161380,161382,161384,161386,161388,161390],{"class":35,"line":146},[33,161379,567],{"class":63},[33,161381,11097],{"class":59},[33,161383,2146],{"class":63},[33,161385,16413],{"class":39},[33,161387,1644],{"class":63},[33,161389,829],{"class":39},[33,161391,143],{"class":59},[33,161393,161394,161397,161399],{"class":35,"line":267},[33,161395,161396],{"class":59},"        total ",[33,161398,11136],{"class":63},[33,161400,160726],{"class":59},[33,161402,161403],{"class":35,"line":275},[33,161404,127],{"emptyLinePlaceholder":126},[33,161406,161407,161409],{"class":35,"line":392},[33,161408,72],{"class":39},[33,161410,160745],{"class":59},[19,161412,161413],{},"也可以：",[23,161415,161417],{"className":25,"code":161416,"language":27,"meta":28,"style":28},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[30,161418,161419,161427,161431,161455,161463,161467],{"__ignoreMap":28},[33,161420,161421,161423,161425],{"class":35,"line":36},[33,161422,158874],{"class":59},[33,161424,64],{"class":63},[33,161426,48978],{"class":39},[33,161428,161429],{"class":35,"line":43},[33,161430,127],{"emptyLinePlaceholder":126},[33,161432,161433,161435,161437,161439,161441,161443,161445,161447,161449,161451,161453],{"class":35,"line":130},[33,161434,4690],{"class":63},[33,161436,11097],{"class":59},[33,161438,27699],{"class":63},[33,161440,34091],{"class":39},[33,161442,109],{"class":59},[33,161444,1897],{"class":39},[33,161446,14093],{"class":59},[33,161448,2155],{"class":39},[33,161450,14093],{"class":59},[33,161452,1897],{"class":39},[33,161454,32437],{"class":59},[33,161456,161457,161459,161461],{"class":35,"line":146},[33,161458,160721],{"class":59},[33,161460,11136],{"class":63},[33,161462,160726],{"class":59},[33,161464,161465],{"class":35,"line":267},[33,161466,127],{"emptyLinePlaceholder":126},[33,161468,161469,161471],{"class":35,"line":275},[33,161470,72],{"class":39},[33,161472,160745],{"class":59},[14,161474,161476],{"id":161475},"_49-循环嵌套","4.9 循环嵌套",[19,161478,161479],{},"嵌套循环就是循环里面再写循环。",[23,161481,161483],{"className":25,"code":161482,"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,161484,161485,161505,161525],{"__ignoreMap":28},[33,161486,161487,161489,161491,161493,161495,161497,161499,161501,161503],{"class":35,"line":36},[33,161488,4690],{"class":63},[33,161490,11097],{"class":59},[33,161492,27699],{"class":63},[33,161494,34091],{"class":39},[33,161496,109],{"class":59},[33,161498,2036],{"class":39},[33,161500,14093],{"class":59},[33,161502,2111],{"class":39},[33,161504,32437],{"class":59},[33,161506,161507,161509,161511,161513,161515,161517,161519,161521,161523],{"class":35,"line":43},[33,161508,4864],{"class":63},[33,161510,11159],{"class":59},[33,161512,27699],{"class":63},[33,161514,34091],{"class":39},[33,161516,109],{"class":59},[33,161518,2036],{"class":39},[33,161520,14093],{"class":59},[33,161522,2111],{"class":39},[33,161524,32437],{"class":59},[33,161526,161527,161529,161531,161533,161536,161538,161540,161542,161545,161547,161549,161551,161553],{"class":35,"line":130},[33,161528,583],{"class":39},[33,161530,109],{"class":59},[33,161532,999],{"class":63},[33,161534,161535],{"class":117},"\"i=",[33,161537,1005],{"class":39},[33,161539,2259],{"class":59},[33,161541,1011],{"class":39},[33,161543,161544],{"class":117},", j=",[33,161546,1005],{"class":39},[33,161548,2284],{"class":59},[33,161550,1011],{"class":39},[33,161552,1014],{"class":117},[33,161554,157],{"class":59},[19,161556,161557],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161559,161561],{"id":161560},"_410-九九乘法表","4.10 九九乘法表",[23,161563,161565],{"className":25,"code":161564,"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,161566,161567,161587,161610,161662],{"__ignoreMap":28},[33,161568,161569,161571,161573,161575,161577,161579,161581,161583,161585],{"class":35,"line":36},[33,161570,4690],{"class":63},[33,161572,11097],{"class":59},[33,161574,27699],{"class":63},[33,161576,34091],{"class":39},[33,161578,109],{"class":59},[33,161580,2036],{"class":39},[33,161582,14093],{"class":59},[33,161584,2264],{"class":39},[33,161586,32437],{"class":59},[33,161588,161589,161591,161593,161595,161597,161599,161601,161604,161606,161608],{"class":35,"line":43},[33,161590,4864],{"class":63},[33,161592,11159],{"class":59},[33,161594,27699],{"class":63},[33,161596,34091],{"class":39},[33,161598,109],{"class":59},[33,161600,2036],{"class":39},[33,161602,161603],{"class":59},", i ",[33,161605,2298],{"class":63},[33,161607,26774],{"class":39},[33,161609,32437],{"class":59},[33,161611,161612,161614,161616,161618,161620,161622,161624,161626,161628,161630,161632,161634,161636,161638,161640,161642,161644,161646,161648,161650,161652,161654,161656,161658,161660],{"class":35,"line":130},[33,161613,583],{"class":39},[33,161615,109],{"class":59},[33,161617,999],{"class":63},[33,161619,1014],{"class":117},[33,161621,1005],{"class":39},[33,161623,2284],{"class":59},[33,161625,1011],{"class":39},[33,161627,1540],{"class":117},[33,161629,1005],{"class":39},[33,161631,2259],{"class":59},[33,161633,1011],{"class":39},[33,161635,64],{"class":117},[33,161637,1005],{"class":39},[33,161639,101787],{"class":59},[33,161641,1540],{"class":63},[33,161643,5073],{"class":59},[33,161645,1011],{"class":39},[33,161647,1014],{"class":117},[33,161649,14093],{"class":59},[33,161651,47447],{"class":6877},[33,161653,64],{"class":63},[33,161655,1014],{"class":117},[33,161657,2916],{"class":39},[33,161659,1014],{"class":117},[33,161661,157],{"class":59},[33,161663,161664,161666],{"class":35,"line":146},[33,161665,149],{"class":39},[33,161667,943],{"class":59},[19,161669,161670],{},"关键点：",[162,161672,161673,161679,161685,161691],{},[165,161674,161675,161676,161678],{},"外层 ",[30,161677,2259],{}," 控制行。",[165,161680,161681,161682,161684],{},"内层 ",[30,161683,2284],{}," 控制列。",[165,161686,161687,161688,161690],{},"每行结束后用 ",[30,161689,148104],{}," 换行。",[165,161692,161693,161696],{},[30,161694,161695],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161698,161700],{"id":161699},"_411-循环else","4.11 循环else",[19,161702,161703,161704,161706,161707,161709,161710,161712],{},"Python 的循环可以带 ",[30,161705,270],{},"。当循环正常结束时执行 ",[30,161708,270],{},"，如果被 ",[30,161711,3721],{}," 打断，则不执行。",[23,161714,161716],{"className":25,"code":161715,"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,161717,161718,161738,161750,161761,161765,161771],{"__ignoreMap":28},[33,161719,161720,161722,161724,161726,161728,161730,161732,161734,161736],{"class":35,"line":36},[33,161721,4690],{"class":63},[33,161723,11097],{"class":59},[33,161725,27699],{"class":63},[33,161727,34091],{"class":39},[33,161729,109],{"class":59},[33,161731,2036],{"class":39},[33,161733,14093],{"class":59},[33,161735,2162],{"class":39},[33,161737,32437],{"class":59},[33,161739,161740,161742,161744,161746,161748],{"class":35,"line":43},[33,161741,567],{"class":63},[33,161743,11097],{"class":59},[33,161745,573],{"class":63},[33,161747,3706],{"class":39},[33,161749,143],{"class":59},[33,161751,161752,161754,161756,161759],{"class":35,"line":130},[33,161753,583],{"class":39},[33,161755,109],{"class":59},[33,161757,161758],{"class":117},"\"找到了\"",[33,161760,157],{"class":59},[33,161762,161763],{"class":35,"line":146},[33,161764,33277],{"class":63},[33,161766,161767,161769],{"class":35,"line":267},[33,161768,270],{"class":63},[33,161770,143],{"class":59},[33,161772,161773,161775,161777,161780],{"class":35,"line":275},[33,161774,149],{"class":39},[33,161776,109],{"class":59},[33,161778,161779],{"class":117},"\"没找到\"",[33,161781,157],{"class":59},[19,161783,161784],{},"常用于搜索。",[23,161786,161788],{"className":25,"code":161787,"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,161789,161790,161811,161820,161824,161836,161847,161857,161861,161867],{"__ignoreMap":28},[33,161791,161792,161795,161797,161799,161801,161803,161805,161807,161809],{"class":35,"line":36},[33,161793,161794],{"class":59},"names ",[33,161796,64],{"class":63},[33,161798,53871],{"class":59},[33,161800,151517],{"class":117},[33,161802,14093],{"class":59},[33,161804,152564],{"class":117},[33,161806,14093],{"class":59},[33,161808,161145],{"class":117},[33,161810,34893],{"class":59},[33,161812,161813,161815,161817],{"class":35,"line":43},[33,161814,113215],{"class":59},[33,161816,64],{"class":63},[33,161818,161819],{"class":117}," \"小李\"\n",[33,161821,161822],{"class":35,"line":130},[33,161823,127],{"emptyLinePlaceholder":126},[33,161825,161826,161828,161831,161833],{"class":35,"line":146},[33,161827,4690],{"class":63},[33,161829,161830],{"class":59}," name ",[33,161832,27699],{"class":63},[33,161834,161835],{"class":59}," names:\n",[33,161837,161838,161840,161842,161844],{"class":35,"line":267},[33,161839,567],{"class":63},[33,161841,161830],{"class":59},[33,161843,573],{"class":63},[33,161845,161846],{"class":59}," target:\n",[33,161848,161849,161851,161853,161855],{"class":35,"line":275},[33,161850,583],{"class":39},[33,161852,109],{"class":59},[33,161854,161758],{"class":117},[33,161856,157],{"class":59},[33,161858,161859],{"class":35,"line":392},[33,161860,33277],{"class":63},[33,161862,161863,161865],{"class":35,"line":406},[33,161864,270],{"class":63},[33,161866,143],{"class":59},[33,161868,161869,161871,161873,161875],{"class":35,"line":418},[33,161870,149],{"class":39},[33,161872,109],{"class":59},[33,161874,161779],{"class":117},[33,161876,157],{"class":59},[14,161878,161880],{"id":161879},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161882,1173],{},[162,161884,161885,161888,161891],{},[165,161886,161887],{},"用户最多输入 3 次密码。",[165,161889,161890],{},"密码正确则登录成功。",[165,161892,161893],{},"3 次都错误则锁定账号。",[19,161895,1187],{},[23,161897,161899],{"className":25,"code":161898,"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,161900,161901,161911,161915,161931,161947,161951,161963,161974,161978,161984,162009,162015],{"__ignoreMap":28},[33,161902,161903,161906,161908],{"class":35,"line":36},[33,161904,161905],{"class":59},"password ",[33,161907,64],{"class":63},[33,161909,161910],{"class":117}," \"123456\"\n",[33,161912,161913],{"class":35,"line":43},[33,161914,127],{"emptyLinePlaceholder":126},[33,161916,161917,161919,161921,161923,161925,161927,161929],{"class":35,"line":130},[33,161918,4690],{"class":63},[33,161920,11097],{"class":59},[33,161922,27699],{"class":63},[33,161924,34091],{"class":39},[33,161926,109],{"class":59},[33,161928,1891],{"class":39},[33,161930,32437],{"class":59},[33,161932,161933,161936,161938,161940,161942,161945],{"class":35,"line":146},[33,161934,161935],{"class":59},"    user_password ",[33,161937,64],{"class":63},[33,161939,539],{"class":39},[33,161941,109],{"class":59},[33,161943,161944],{"class":117},"\"请输入密码:\"",[33,161946,157],{"class":59},[33,161948,161949],{"class":35,"line":267},[33,161950,127],{"emptyLinePlaceholder":126},[33,161952,161953,161955,161958,161960],{"class":35,"line":275},[33,161954,567],{"class":63},[33,161956,161957],{"class":59}," user_password ",[33,161959,573],{"class":63},[33,161961,161962],{"class":59}," password:\n",[33,161964,161965,161967,161969,161972],{"class":35,"line":392},[33,161966,583],{"class":39},[33,161968,109],{"class":59},[33,161970,161971],{"class":117},"\"登录成功\"",[33,161973,157],{"class":59},[33,161975,161976],{"class":35,"line":406},[33,161977,33277],{"class":63},[33,161979,161980,161982],{"class":35,"line":418},[33,161981,594],{"class":63},[33,161983,143],{"class":59},[33,161985,161986,161988,161990,161992,161995,161998,162000,162002,162004,162007],{"class":35,"line":425},[33,161987,583],{"class":39},[33,161989,109],{"class":59},[33,161991,999],{"class":63},[33,161993,161994],{"class":117},"\"密码错误，还剩",[33,161996,161997],{"class":39},"{2",[33,161999,53916],{"class":63},[33,162001,4697],{"class":59},[33,162003,1011],{"class":39},[33,162005,162006],{"class":117},"次机会\"",[33,162008,157],{"class":59},[33,162010,162011,162013],{"class":35,"line":1147},[33,162012,270],{"class":63},[33,162014,143],{"class":59},[33,162016,162017,162019,162021,162024],{"class":35,"line":1329},[33,162018,149],{"class":39},[33,162020,109],{"class":59},[33,162022,162023],{"class":117},"\"账号已锁定\"",[33,162025,157],{"class":59},[14,162027,162029],{"id":162028},"_413-小案例菜单程序","4.13 小案例：菜单程序",[23,162031,162033],{"className":25,"code":162032,"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,162034,162035,162043,162054,162065,162076,162087,162098,162102,162117,162121,162133,162144,162156,162167,162179,162190,162202,162212,162216,162222],{"__ignoreMap":28},[33,162036,162037,162039,162041],{"class":35,"line":36},[33,162038,110301],{"class":63},[33,162040,96931],{"class":39},[33,162042,143],{"class":59},[33,162044,162045,162047,162049,162052],{"class":35,"line":43},[33,162046,149],{"class":39},[33,162048,109],{"class":59},[33,162050,162051],{"class":117},"\"====== 菜单 ======\"",[33,162053,157],{"class":59},[33,162055,162056,162058,162060,162063],{"class":35,"line":130},[33,162057,149],{"class":39},[33,162059,109],{"class":59},[33,162061,162062],{"class":117},"\"1. 查询余额\"",[33,162064,157],{"class":59},[33,162066,162067,162069,162071,162074],{"class":35,"line":146},[33,162068,149],{"class":39},[33,162070,109],{"class":59},[33,162072,162073],{"class":117},"\"2. 存款\"",[33,162075,157],{"class":59},[33,162077,162078,162080,162082,162085],{"class":35,"line":267},[33,162079,149],{"class":39},[33,162081,109],{"class":59},[33,162083,162084],{"class":117},"\"3. 取款\"",[33,162086,157],{"class":59},[33,162088,162089,162091,162093,162096],{"class":35,"line":275},[33,162090,149],{"class":39},[33,162092,109],{"class":59},[33,162094,162095],{"class":117},"\"0. 退出\"",[33,162097,157],{"class":59},[33,162099,162100],{"class":35,"line":392},[33,162101,127],{"emptyLinePlaceholder":126},[33,162103,162104,162107,162109,162111,162113,162115],{"class":35,"line":406},[33,162105,162106],{"class":59},"    choice ",[33,162108,64],{"class":63},[33,162110,539],{"class":39},[33,162112,109],{"class":59},[33,162114,154698],{"class":117},[33,162116,157],{"class":59},[33,162118,162119],{"class":35,"line":418},[33,162120,127],{"emptyLinePlaceholder":126},[33,162122,162123,162125,162127,162129,162131],{"class":35,"line":425},[33,162124,567],{"class":63},[33,162126,154711],{"class":59},[33,162128,573],{"class":63},[33,162130,154716],{"class":117},[33,162132,143],{"class":59},[33,162134,162135,162137,162139,162142],{"class":35,"line":1147},[33,162136,583],{"class":39},[33,162138,109],{"class":59},[33,162140,162141],{"class":117},"\"余额为1000元\"",[33,162143,157],{"class":59},[33,162145,162146,162148,162150,162152,162154],{"class":35,"line":1329},[33,162147,40939],{"class":63},[33,162149,154711],{"class":59},[33,162151,573],{"class":63},[33,162153,154735],{"class":117},[33,162155,143],{"class":59},[33,162157,162158,162160,162162,162165],{"class":35,"line":1341},[33,162159,583],{"class":39},[33,162161,109],{"class":59},[33,162163,162164],{"class":117},"\"存款功能\"",[33,162166,157],{"class":59},[33,162168,162169,162171,162173,162175,162177],{"class":35,"line":1348},[33,162170,40939],{"class":63},[33,162172,154711],{"class":59},[33,162174,573],{"class":63},[33,162176,154753],{"class":117},[33,162178,143],{"class":59},[33,162180,162181,162183,162185,162188],{"class":35,"line":1529},[33,162182,583],{"class":39},[33,162184,109],{"class":59},[33,162186,162187],{"class":117},"\"取款功能\"",[33,162189,157],{"class":59},[33,162191,162192,162194,162196,162198,162200],{"class":35,"line":1546},[33,162193,40939],{"class":63},[33,162195,154711],{"class":59},[33,162197,573],{"class":63},[33,162199,154807],{"class":117},[33,162201,143],{"class":59},[33,162203,162204,162206,162208,162210],{"class":35,"line":1551},[33,162205,583],{"class":39},[33,162207,109],{"class":59},[33,162209,154818],{"class":117},[33,162211,157],{"class":59},[33,162213,162214],{"class":35,"line":1566},[33,162215,33277],{"class":63},[33,162217,162218,162220],{"class":35,"line":1578},[33,162219,594],{"class":63},[33,162221,143],{"class":59},[33,162223,162224,162226,162228,162230],{"class":35,"line":1583},[33,162225,583],{"class":39},[33,162227,109],{"class":59},[33,162229,154839],{"class":117},[33,162231,157],{"class":59},[19,162233,162234,162235,162237,162238,1628],{},"菜单类程序通常使用 ",[30,162236,160936],{},"，用户选择退出时 ",[30,162239,3721],{},[14,162241,162243],{"id":162242},"_414-易错点","4.14 易错点",[162,162245,162246,162251,162257,162265,162271],{},[165,162247,162248,162250],{},[30,162249,110301],{}," 循环必须更新控制变量。",[165,162252,162253,162256],{},[30,162254,162255],{},"range(1, 10)"," 不包含 10。",[165,162258,162259,162261,162262,162264],{},[30,162260,3721],{}," 结束整个循环，",[30,162263,156295],{}," 只跳过本轮。",[165,162266,162267,162268,162270],{},"嵌套循环中，",[30,162269,3721],{}," 只跳出当前所在的一层循环。",[165,162272,162273],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162275,162277],{"id":162276},"_415-本章练习","4.15 本章练习",[162,162279,162280,162283,162286,162289,162292],{},[165,162281,162282],{},"输出 1 到 100。",[165,162284,162285],{},"计算 1 到 100 的偶数和。",[165,162287,162288],{},"输出 100 以内能被 3 和 5 同时整除的数。",[165,162290,162291],{},"编写猜数字游戏，限制最多猜 7 次。",[165,162293,162294],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1729,162296,162297],{},"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":43,"depth":43,"links":162299},[162300,162301,162302,162303,162304,162308,162309,162310,162311,162312,162313,162314,162315,162316,162317],{"id":160556,"depth":43,"text":160557},{"id":160586,"depth":43,"text":160587},{"id":160675,"depth":43,"text":160676},{"id":160769,"depth":43,"text":160770},{"id":160943,"depth":43,"text":160944,"children":162305},[162306,162307],{"id":160947,"depth":130,"text":160948},{"id":161011,"depth":130,"text":161012},{"id":161075,"depth":43,"text":161076},{"id":161170,"depth":43,"text":161171},{"id":161279,"depth":43,"text":161280},{"id":161475,"depth":43,"text":161476},{"id":161560,"depth":43,"text":161561},{"id":161699,"depth":43,"text":161700},{"id":161879,"depth":43,"text":161880},{"id":162028,"depth":43,"text":162029},{"id":162242,"depth":43,"text":162243},{"id":162276,"depth":43,"text":162277},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160548,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162324,"title":162325,"body":162326,"description":1751,"extension":1752,"meta":164331,"navigation":126,"path":164332,"seo":164333,"stem":164334,"__hash__":164335},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162327,"toc":164311},[162328,162331,162335,162338,162341,162355,162358,162372,162376,162378,162397,162399,162446,162448,162462,162466,162540,162543,162547,162550,162609,162617,162620,162673,162676,162680,162685,162740,162748,162798,162802,162807,162815,162914,162920,162924,162929,162932,162943,162984,162997,163001,163004,163040,163043,163056,163059,163119,163123,163127,163130,163181,163185,163188,163235,163241,163307,163310,163314,163317,163433,163436,163440,163443,163549,163553,163556,163594,163597,163639,163642,163702,163705,163709,164173,164176,164180,164207,164213,164274,164278,164308],[10,162329,162325],{"id":162330},"_5-函数基础",[14,162332,162334],{"id":162333},"_51-为什么需要函数","5.1 为什么需要函数",[19,162336,162337],{},"函数用于封装一段可以重复使用的代码。",[19,162339,162340],{},"不使用函数的问题：",[162,162342,162343,162346,162349,162352],{},[165,162344,162345],{},"重复代码多。",[165,162347,162348],{},"修改逻辑时容易漏改。",[165,162350,162351],{},"主流程不清晰。",[165,162353,162354],{},"程序越写越长，难以维护。",[19,162356,162357],{},"使用函数后的好处：",[162,162359,162360,162363,162366,162369],{},[165,162361,162362],{},"提高复用性。",[165,162364,162365],{},"提高可读性。",[165,162367,162368],{},"便于调试。",[165,162370,162371],{},"便于分工。",[14,162373,162375],{"id":162374},"_52-函数定义","5.2 函数定义",[19,162377,6842],{},[23,162379,162381],{"className":25,"code":162380,"language":27,"meta":28,"style":28},"def 函数名():\n    函数体\n",[30,162382,162383,162392],{"__ignoreMap":28},[33,162384,162385,162387,162390],{"class":35,"line":36},[33,162386,33597],{"class":63},[33,162388,162389],{"class":3632}," 函数名",[33,162391,33603],{"class":59},[33,162393,162394],{"class":35,"line":43},[33,162395,162396],{"class":59},"    函数体\n",[19,162398,958],{},[23,162400,162402],{"className":25,"code":162401,"language":27,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[30,162403,162404,162413,162423,162433,162437,162441],{"__ignoreMap":28},[33,162405,162406,162408,162411],{"class":35,"line":36},[33,162407,33597],{"class":63},[33,162409,162410],{"class":3632}," say_hello",[33,162412,33603],{"class":59},[33,162414,162415,162417,162419,162421],{"class":35,"line":43},[33,162416,149],{"class":39},[33,162418,109],{"class":59},[33,162420,7504],{"class":117},[33,162422,157],{"class":59},[33,162424,162425,162427,162429,162431],{"class":35,"line":130},[33,162426,149],{"class":39},[33,162428,109],{"class":59},[33,162430,148268],{"class":117},[33,162432,157],{"class":59},[33,162434,162435],{"class":35,"line":146},[33,162436,127],{"emptyLinePlaceholder":126},[33,162438,162439],{"class":35,"line":267},[33,162440,127],{"emptyLinePlaceholder":126},[33,162442,162443],{"class":35,"line":275},[33,162444,162445],{"class":59},"say_hello()\n",[19,162447,160],{},[162,162449,162450,162453,162456,162459],{},[165,162451,162452],{},"函数必须先定义，再调用。",[165,162454,162455],{},"函数名遵循变量命名规则。",[165,162457,162458],{},"函数体需要缩进。",[165,162460,162461],{},"函数不调用就不会执行。",[14,162463,162465],{"id":162464},"_53-函数调用","5.3 函数调用",[23,162467,162469],{"className":25,"code":162468,"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,162470,162471,162480,162491,162502,162513,162523,162527,162531,162536],{"__ignoreMap":28},[33,162472,162473,162475,162478],{"class":35,"line":36},[33,162474,33597],{"class":63},[33,162476,162477],{"class":3632}," print_menu",[33,162479,33603],{"class":59},[33,162481,162482,162484,162486,162489],{"class":35,"line":43},[33,162483,149],{"class":39},[33,162485,109],{"class":59},[33,162487,162488],{"class":117},"\"1. 查询\"",[33,162490,157],{"class":59},[33,162492,162493,162495,162497,162500],{"class":35,"line":130},[33,162494,149],{"class":39},[33,162496,109],{"class":59},[33,162498,162499],{"class":117},"\"2. 添加\"",[33,162501,157],{"class":59},[33,162503,162504,162506,162508,162511],{"class":35,"line":146},[33,162505,149],{"class":39},[33,162507,109],{"class":59},[33,162509,162510],{"class":117},"\"3. 删除\"",[33,162512,157],{"class":59},[33,162514,162515,162517,162519,162521],{"class":35,"line":267},[33,162516,149],{"class":39},[33,162518,109],{"class":59},[33,162520,162095],{"class":117},[33,162522,157],{"class":59},[33,162524,162525],{"class":35,"line":275},[33,162526,127],{"emptyLinePlaceholder":126},[33,162528,162529],{"class":35,"line":392},[33,162530,127],{"emptyLinePlaceholder":126},[33,162532,162533],{"class":35,"line":406},[33,162534,162535],{"class":59},"print_menu()\n",[33,162537,162538],{"class":35,"line":418},[33,162539,162535],{"class":59},[19,162541,162542],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162544,162546],{"id":162545},"_54-参数","5.4 参数",[19,162548,162549],{},"参数用于向函数传递数据。",[23,162551,162553],{"className":25,"code":162552,"language":27,"meta":28,"style":28},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[30,162554,162555,162564,162584,162588,162592,162601],{"__ignoreMap":28},[33,162556,162557,162559,162561],{"class":35,"line":36},[33,162558,33597],{"class":63},[33,162560,162410],{"class":3632},[33,162562,162563],{"class":59},"(name):\n",[33,162565,162566,162568,162570,162572,162574,162576,162578,162580,162582],{"class":35,"line":43},[33,162567,149],{"class":39},[33,162569,109],{"class":59},[33,162571,999],{"class":63},[33,162573,1002],{"class":117},[33,162575,1005],{"class":39},[33,162577,1008],{"class":59},[33,162579,1011],{"class":39},[33,162581,1014],{"class":117},[33,162583,157],{"class":59},[33,162585,162586],{"class":35,"line":130},[33,162587,127],{"emptyLinePlaceholder":126},[33,162589,162590],{"class":35,"line":146},[33,162591,127],{"emptyLinePlaceholder":126},[33,162593,162594,162597,162599],{"class":35,"line":267},[33,162595,162596],{"class":59},"say_hello(",[33,162598,151517],{"class":117},[33,162600,157],{"class":59},[33,162602,162603,162605,162607],{"class":35,"line":275},[33,162604,162596],{"class":59},[33,162606,152564],{"class":117},[33,162608,157],{"class":59},[19,162610,162611,162613,162614,162616],{},[30,162612,1008],{}," 是形参，",[30,162615,151517],{}," 是实参。",[19,162618,162619],{},"多个参数：",[23,162621,162623],{"className":25,"code":162622,"language":27,"meta":28,"style":28},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[30,162624,162625,162633,162646,162652,162656,162660],{"__ignoreMap":28},[33,162626,162627,162629,162631],{"class":35,"line":36},[33,162628,33597],{"class":63},[33,162630,6870],{"class":3632},[33,162632,152721],{"class":59},[33,162634,162635,162638,162640,162642,162644],{"class":35,"line":43},[33,162636,162637],{"class":59},"    result ",[33,162639,64],{"class":63},[33,162641,12527],{"class":59},[33,162643,2298],{"class":63},[33,162645,152732],{"class":59},[33,162647,162648,162650],{"class":35,"line":130},[33,162649,149],{"class":39},[33,162651,78226],{"class":59},[33,162653,162654],{"class":35,"line":146},[33,162655,127],{"emptyLinePlaceholder":126},[33,162657,162658],{"class":35,"line":267},[33,162659,127],{"emptyLinePlaceholder":126},[33,162661,162662,162665,162667,162669,162671],{"class":35,"line":275},[33,162663,162664],{"class":59},"add(",[33,162666,2264],{"class":39},[33,162668,14093],{"class":59},[33,162670,2517],{"class":39},[33,162672,157],{"class":59},[19,162674,162675],{},"调用时参数数量必须匹配。",[14,162677,162679],{"id":162678},"_55-返回值","5.5 返回值",[19,162681,162682,162684],{},[30,162683,18701],{}," 用于把函数内部的结果返回给调用者。",[23,162686,162688],{"className":25,"code":162687,"language":27,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[30,162689,162690,162698,162708,162712,162716,162734],{"__ignoreMap":28},[33,162691,162692,162694,162696],{"class":35,"line":36},[33,162693,33597],{"class":63},[33,162695,6870],{"class":3632},[33,162697,152721],{"class":59},[33,162699,162700,162702,162704,162706],{"class":35,"line":43},[33,162701,5752],{"class":63},[33,162703,12527],{"class":59},[33,162705,2298],{"class":63},[33,162707,152732],{"class":59},[33,162709,162710],{"class":35,"line":130},[33,162711,127],{"emptyLinePlaceholder":126},[33,162713,162714],{"class":35,"line":146},[33,162715,127],{"emptyLinePlaceholder":126},[33,162717,162718,162721,162723,162726,162728,162730,162732],{"class":35,"line":267},[33,162719,162720],{"class":59},"result ",[33,162722,64],{"class":63},[33,162724,162725],{"class":59}," add(",[33,162727,2264],{"class":39},[33,162729,14093],{"class":59},[33,162731,2517],{"class":39},[33,162733,157],{"class":59},[33,162735,162736,162738],{"class":35,"line":275},[33,162737,72],{"class":39},[33,162739,78226],{"class":59},[19,162741,162742,162743,162745,162746,1628],{},"如果函数没有写 ",[30,162744,18701],{},"，默认返回 ",[30,162747,97325],{},[23,162749,162751],{"className":25,"code":162750,"language":27,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[30,162752,162753,162761,162771,162775,162779,162788],{"__ignoreMap":28},[33,162754,162755,162757,162759],{"class":35,"line":36},[33,162756,33597],{"class":63},[33,162758,162410],{"class":3632},[33,162760,33603],{"class":59},[33,162762,162763,162765,162767,162769],{"class":35,"line":43},[33,162764,149],{"class":39},[33,162766,109],{"class":59},[33,162768,7504],{"class":117},[33,162770,157],{"class":59},[33,162772,162773],{"class":35,"line":130},[33,162774,127],{"emptyLinePlaceholder":126},[33,162776,162777],{"class":35,"line":146},[33,162778,127],{"emptyLinePlaceholder":126},[33,162780,162781,162783,162785],{"class":35,"line":267},[33,162782,162720],{"class":59},[33,162784,64],{"class":63},[33,162786,162787],{"class":59}," say_hello()\n",[33,162789,162790,162792,162795],{"class":35,"line":275},[33,162791,72],{"class":39},[33,162793,162794],{"class":59},"(result)  ",[33,162796,162797],{"class":87},"# None\n",[14,162799,162801],{"id":162800},"_56-return的作用","5.6 return的作用",[19,162803,162804,162806],{},[30,162805,18701],{}," 有两个作用：",[162,162808,162809,162812],{},[165,162810,162811],{},"返回结果。",[165,162813,162814],{},"结束函数。",[23,162816,162818],{"className":25,"code":162817,"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,162819,162820,162830,162842,162849,162853,162865,162872,162876,162883,162887,162891,162902],{"__ignoreMap":28},[33,162821,162822,162824,162827],{"class":35,"line":36},[33,162823,33597],{"class":63},[33,162825,162826],{"class":3632}," check_age",[33,162828,162829],{"class":59},"(age):\n",[33,162831,162832,162834,162836,162838,162840],{"class":35,"line":43},[33,162833,567],{"class":63},[33,162835,136],{"class":59},[33,162837,2726],{"class":63},[33,162839,829],{"class":39},[33,162841,143],{"class":59},[33,162843,162844,162846],{"class":35,"line":130},[33,162845,16410],{"class":63},[33,162847,162848],{"class":117}," \"年龄不合法\"\n",[33,162850,162851],{"class":35,"line":146},[33,162852,127],{"emptyLinePlaceholder":126},[33,162854,162855,162857,162859,162861,162863],{"class":35,"line":267},[33,162856,567],{"class":63},[33,162858,136],{"class":59},[33,162860,78],{"class":63},[33,162862,81],{"class":39},[33,162864,143],{"class":59},[33,162866,162867,162869],{"class":35,"line":275},[33,162868,16410],{"class":63},[33,162870,162871],{"class":117}," \"成年人\"\n",[33,162873,162874],{"class":35,"line":392},[33,162875,127],{"emptyLinePlaceholder":126},[33,162877,162878,162880],{"class":35,"line":406},[33,162879,5752],{"class":63},[33,162881,162882],{"class":117}," \"未成年人\"\n",[33,162884,162885],{"class":35,"line":418},[33,162886,127],{"emptyLinePlaceholder":126},[33,162888,162889],{"class":35,"line":425},[33,162890,127],{"emptyLinePlaceholder":126},[33,162892,162893,162895,162898,162900],{"class":35,"line":1147},[33,162894,72],{"class":39},[33,162896,162897],{"class":59},"(check_age(",[33,162899,2517],{"class":39},[33,162901,121],{"class":59},[33,162903,162904,162906,162908,162910,162912],{"class":35,"line":1329},[33,162905,72],{"class":39},[33,162907,162897],{"class":59},[33,162909,2349],{"class":63},[33,162911,2036],{"class":39},[33,162913,121],{"class":59},[19,162915,162916,162917,162919],{},"函数执行到 ",[30,162918,18701],{}," 后，后面的代码不会继续执行。",[14,162921,162923],{"id":162922},"_57-none","5.7 None",[19,162925,162926,162928],{},[30,162927,97325],{}," 表示空值或没有结果。",[19,162930,162931],{},"常见使用场景：",[162,162933,162934,162937,162940],{},[165,162935,162936],{},"函数没有返回值。",[165,162938,162939],{},"变量暂时没有具体值。",[165,162941,162942],{},"表示查询不到结果。",[23,162944,162946],{"className":25,"code":162945,"language":27,"meta":28,"style":28},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[30,162947,162948,162956,162960,162973],{"__ignoreMap":28},[33,162949,162950,162952,162954],{"class":35,"line":36},[33,162951,162720],{"class":59},[33,162953,64],{"class":63},[33,162955,153800],{"class":39},[33,162957,162958],{"class":35,"line":43},[33,162959,127],{"emptyLinePlaceholder":126},[33,162961,162962,162964,162967,162969,162971],{"class":35,"line":130},[33,162963,133],{"class":63},[33,162965,162966],{"class":59}," result ",[33,162968,40574],{"class":63},[33,162970,40579],{"class":39},[33,162972,143],{"class":59},[33,162974,162975,162977,162979,162982],{"class":35,"line":146},[33,162976,149],{"class":39},[33,162978,109],{"class":59},[33,162980,162981],{"class":117},"\"没有数据\"",[33,162983,157],{"class":59},[19,162985,162986,162987,162989,162990,162993,162994,1628],{},"判断 ",[30,162988,97325],{}," 推荐使用 ",[30,162991,162992],{},"is None","，不要写成 ",[30,162995,162996],{},"== None",[14,162998,163000],{"id":162999},"_58-函数文档字符串","5.8 函数文档字符串",[19,163002,163003],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[23,163005,163007],{"className":25,"code":163006,"language":27,"meta":28,"style":28},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[30,163008,163009,163019,163024],{"__ignoreMap":28},[33,163010,163011,163013,163016],{"class":35,"line":36},[33,163012,33597],{"class":63},[33,163014,163015],{"class":3632}," calculate_bmi",[33,163017,163018],{"class":59},"(weight, height):\n",[33,163020,163021],{"class":35,"line":43},[33,163022,163023],{"class":117},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[33,163025,163026,163028,163031,163033,163036,163038],{"class":35,"line":130},[33,163027,5752],{"class":63},[33,163029,163030],{"class":59}," weight ",[33,163032,2401],{"class":63},[33,163034,163035],{"class":59}," height ",[33,163037,12319],{"class":63},[33,163039,49368],{"class":39},[19,163041,163042],{},"查看说明：",[23,163044,163046],{"className":25,"code":163045,"language":27,"meta":28,"style":28},"help(calculate_bmi)\n",[30,163047,163048],{"__ignoreMap":28},[33,163049,163050,163053],{"class":35,"line":36},[33,163051,163052],{"class":39},"help",[33,163054,163055],{"class":59},"(calculate_bmi)\n",[19,163057,163058],{},"较完整的写法：",[23,163060,163062],{"className":25,"code":163061,"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,163063,163064,163072,163077,163082,163086,163091,163096,163101,163105],{"__ignoreMap":28},[33,163065,163066,163068,163070],{"class":35,"line":36},[33,163067,33597],{"class":63},[33,163069,163015],{"class":3632},[33,163071,163018],{"class":59},[33,163073,163074],{"class":35,"line":43},[33,163075,163076],{"class":117},"    \"\"\"\n",[33,163078,163079],{"class":35,"line":130},[33,163080,163081],{"class":117},"    计算BMI。\n",[33,163083,163084],{"class":35,"line":146},[33,163085,127],{"emptyLinePlaceholder":126},[33,163087,163088],{"class":35,"line":267},[33,163089,163090],{"class":117},"    :param weight: 体重，单位kg\n",[33,163092,163093],{"class":35,"line":275},[33,163094,163095],{"class":117},"    :param height: 身高，单位m\n",[33,163097,163098],{"class":35,"line":392},[33,163099,163100],{"class":117},"    :return: BMI数值\n",[33,163102,163103],{"class":35,"line":406},[33,163104,163076],{"class":117},[33,163106,163107,163109,163111,163113,163115,163117],{"class":35,"line":418},[33,163108,5752],{"class":63},[33,163110,163030],{"class":59},[33,163112,2401],{"class":63},[33,163114,163035],{"class":59},[33,163116,12319],{"class":63},[33,163118,49368],{"class":39},[14,163120,163122],{"id":163121},"_59-变量作用域","5.9 变量作用域",[633,163124,163126],{"id":163125},"_591-局部变量","5.9.1 局部变量",[19,163128,163129],{},"在函数内部定义的变量，只能在函数内部使用。",[23,163131,163133],{"className":25,"code":163132,"language":27,"meta":28,"style":28},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[30,163134,163135,163144,163152,163158,163162,163166,163171],{"__ignoreMap":28},[33,163136,163137,163139,163142],{"class":35,"line":36},[33,163138,33597],{"class":63},[33,163140,163141],{"class":3632}," test",[33,163143,33603],{"class":59},[33,163145,163146,163148,163150],{"class":35,"line":43},[33,163147,47239],{"class":59},[33,163149,64],{"class":63},[33,163151,60071],{"class":39},[33,163153,163154,163156],{"class":35,"line":130},[33,163155,149],{"class":39},[33,163157,1837],{"class":59},[33,163159,163160],{"class":35,"line":146},[33,163161,127],{"emptyLinePlaceholder":126},[33,163163,163164],{"class":35,"line":267},[33,163165,127],{"emptyLinePlaceholder":126},[33,163167,163168],{"class":35,"line":275},[33,163169,163170],{"class":59},"test()\n",[33,163172,163173,163175,163178],{"class":35,"line":392},[33,163174,72],{"class":39},[33,163176,163177],{"class":59},"(num)  ",[33,163179,163180],{"class":87},"# 报错\n",[633,163182,163184],{"id":163183},"_592-全局变量","5.9.2 全局变量",[19,163186,163187],{},"在函数外部定义的变量，可以在函数内部读取。",[23,163189,163191],{"className":25,"code":163190,"language":27,"meta":28,"style":28},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[30,163192,163193,163201,163205,163209,163217,163223,163227,163231],{"__ignoreMap":28},[33,163194,163195,163197,163199],{"class":35,"line":36},[33,163196,968],{"class":59},[33,163198,64],{"class":63},[33,163200,150982],{"class":117},[33,163202,163203],{"class":35,"line":43},[33,163204,127],{"emptyLinePlaceholder":126},[33,163206,163207],{"class":35,"line":130},[33,163208,127],{"emptyLinePlaceholder":126},[33,163210,163211,163213,163215],{"class":35,"line":146},[33,163212,33597],{"class":63},[33,163214,162410],{"class":3632},[33,163216,33603],{"class":59},[33,163218,163219,163221],{"class":35,"line":267},[33,163220,149],{"class":39},[33,163222,152288],{"class":59},[33,163224,163225],{"class":35,"line":275},[33,163226,127],{"emptyLinePlaceholder":126},[33,163228,163229],{"class":35,"line":392},[33,163230,127],{"emptyLinePlaceholder":126},[33,163232,163233],{"class":35,"line":406},[33,163234,162445],{"class":59},[19,163236,163237,163238,1628],{},"如果要在函数内部修改全局变量，需要 ",[30,163239,163240],{},"global",[23,163242,163244],{"className":25,"code":163243,"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,163245,163246,163254,163258,163262,163271,163279,163287,163291,163295,163300],{"__ignoreMap":28},[33,163247,163248,163250,163252],{"class":35,"line":36},[33,163249,148320],{"class":59},[33,163251,64],{"class":63},[33,163253,48978],{"class":39},[33,163255,163256],{"class":35,"line":43},[33,163257,127],{"emptyLinePlaceholder":126},[33,163259,163260],{"class":35,"line":130},[33,163261,127],{"emptyLinePlaceholder":126},[33,163263,163264,163266,163269],{"class":35,"line":146},[33,163265,33597],{"class":63},[33,163267,163268],{"class":3632}," add_count",[33,163270,33603],{"class":59},[33,163272,163273,163276],{"class":35,"line":267},[33,163274,163275],{"class":63},"    global",[33,163277,163278],{"class":59}," count\n",[33,163280,163281,163283,163285],{"class":35,"line":275},[33,163282,160847],{"class":59},[33,163284,11136],{"class":63},[33,163286,1434],{"class":39},[33,163288,163289],{"class":35,"line":392},[33,163290,127],{"emptyLinePlaceholder":126},[33,163292,163293],{"class":35,"line":406},[33,163294,127],{"emptyLinePlaceholder":126},[33,163296,163297],{"class":35,"line":418},[33,163298,163299],{"class":59},"add_count()\n",[33,163301,163302,163304],{"class":35,"line":425},[33,163303,72],{"class":39},[33,163305,163306],{"class":59},"(count)\n",[19,163308,163309],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163311,163313],{"id":163312},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163315,163316],{},"一个函数中可以调用另一个函数。",[23,163318,163320],{"className":25,"code":163319,"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,163321,163322,163331,163345,163349,163353,163362,163367,163387,163408,163412,163416,163420],{"__ignoreMap":28},[33,163323,163324,163326,163329],{"class":35,"line":36},[33,163325,33597],{"class":63},[33,163327,163328],{"class":3632}," print_line",[33,163330,33603],{"class":59},[33,163332,163333,163335,163337,163339,163341,163343],{"class":35,"line":43},[33,163334,149],{"class":39},[33,163336,109],{"class":59},[33,163338,34130],{"class":117},[33,163340,8178],{"class":63},[33,163342,80306],{"class":39},[33,163344,157],{"class":59},[33,163346,163347],{"class":35,"line":130},[33,163348,127],{"emptyLinePlaceholder":126},[33,163350,163351],{"class":35,"line":146},[33,163352,127],{"emptyLinePlaceholder":126},[33,163354,163355,163357,163360],{"class":35,"line":267},[33,163356,33597],{"class":63},[33,163358,163359],{"class":3632}," print_info",[33,163361,151004],{"class":59},[33,163363,163364],{"class":35,"line":275},[33,163365,163366],{"class":59},"    print_line()\n",[33,163368,163369,163371,163373,163375,163377,163379,163381,163383,163385],{"class":35,"line":392},[33,163370,149],{"class":39},[33,163372,109],{"class":59},[33,163374,999],{"class":63},[33,163376,158300],{"class":117},[33,163378,1005],{"class":39},[33,163380,1008],{"class":59},[33,163382,1011],{"class":39},[33,163384,1014],{"class":117},[33,163386,157],{"class":59},[33,163388,163389,163391,163393,163395,163398,163400,163402,163404,163406],{"class":35,"line":406},[33,163390,149],{"class":39},[33,163392,109],{"class":59},[33,163394,999],{"class":63},[33,163396,163397],{"class":117},"\"年龄:",[33,163399,1005],{"class":39},[33,163401,71863],{"class":59},[33,163403,1011],{"class":39},[33,163405,1014],{"class":117},[33,163407,157],{"class":59},[33,163409,163410],{"class":35,"line":418},[33,163411,163366],{"class":59},[33,163413,163414],{"class":35,"line":425},[33,163415,127],{"emptyLinePlaceholder":126},[33,163417,163418],{"class":35,"line":1147},[33,163419,127],{"emptyLinePlaceholder":126},[33,163421,163422,163425,163427,163429,163431],{"class":35,"line":1329},[33,163423,163424],{"class":59},"print_info(",[33,163426,151517],{"class":117},[33,163428,14093],{"class":59},[33,163430,2467],{"class":39},[33,163432,157],{"class":59},[19,163434,163435],{},"这种方式可以把小功能组合成大功能。",[14,163437,163439],{"id":163438},"_511-参数检查","5.11 参数检查",[19,163441,163442],{},"函数内部可以检查参数是否合法。",[23,163444,163446],{"className":25,"code":163445,"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,163447,163448,163457,163469,163475,163485,163489,163493,163510,163514,163526,163537,163543],{"__ignoreMap":28},[33,163449,163450,163452,163455],{"class":35,"line":36},[33,163451,33597],{"class":63},[33,163453,163454],{"class":3632}," divide",[33,163456,152721],{"class":59},[33,163458,163459,163461,163463,163465,163467],{"class":35,"line":43},[33,163460,567],{"class":63},[33,163462,12540],{"class":59},[33,163464,573],{"class":63},[33,163466,829],{"class":39},[33,163468,143],{"class":59},[33,163470,163471,163473],{"class":35,"line":130},[33,163472,16410],{"class":63},[33,163474,153800],{"class":39},[33,163476,163477,163479,163481,163483],{"class":35,"line":146},[33,163478,5752],{"class":63},[33,163480,12527],{"class":59},[33,163482,2401],{"class":63},[33,163484,152732],{"class":59},[33,163486,163487],{"class":35,"line":267},[33,163488,127],{"emptyLinePlaceholder":126},[33,163490,163491],{"class":35,"line":275},[33,163492,127],{"emptyLinePlaceholder":126},[33,163494,163495,163497,163499,163502,163504,163506,163508],{"class":35,"line":392},[33,163496,162720],{"class":59},[33,163498,64],{"class":63},[33,163500,163501],{"class":59}," divide(",[33,163503,2264],{"class":39},[33,163505,14093],{"class":59},[33,163507,2010],{"class":39},[33,163509,157],{"class":59},[33,163511,163512],{"class":35,"line":406},[33,163513,127],{"emptyLinePlaceholder":126},[33,163515,163516,163518,163520,163522,163524],{"class":35,"line":418},[33,163517,133],{"class":63},[33,163519,162966],{"class":59},[33,163521,40574],{"class":63},[33,163523,40579],{"class":39},[33,163525,143],{"class":59},[33,163527,163528,163530,163532,163535],{"class":35,"line":425},[33,163529,149],{"class":39},[33,163531,109],{"class":59},[33,163533,163534],{"class":117},"\"除数不能为0\"",[33,163536,157],{"class":59},[33,163538,163539,163541],{"class":35,"line":1147},[33,163540,270],{"class":63},[33,163542,143],{"class":59},[33,163544,163545,163547],{"class":35,"line":1329},[33,163546,149],{"class":39},[33,163548,78226],{"class":59},[14,163550,163552],{"id":163551},"_512-类型提示","5.12 类型提示",[19,163554,163555],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[23,163557,163559],{"className":25,"code":163558,"language":27,"meta":28,"style":28},"def add(a: int, b: int) -> int:\n    return a + b\n",[30,163560,163561,163584],{"__ignoreMap":28},[33,163562,163563,163565,163567,163570,163572,163575,163577,163580,163582],{"class":35,"line":36},[33,163564,33597],{"class":63},[33,163566,6870],{"class":3632},[33,163568,163569],{"class":59},"(a: ",[33,163571,1828],{"class":39},[33,163573,163574],{"class":59},", b: ",[33,163576,1828],{"class":39},[33,163578,163579],{"class":59},") -> ",[33,163581,1828],{"class":39},[33,163583,143],{"class":59},[33,163585,163586,163588,163590,163592],{"class":35,"line":43},[33,163587,5752],{"class":63},[33,163589,12527],{"class":59},[33,163591,2298],{"class":63},[33,163593,152732],{"class":59},[19,163595,163596],{},"字符串参数：",[23,163598,163600],{"className":25,"code":163599,"language":27,"meta":28,"style":28},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[30,163601,163602,163619],{"__ignoreMap":28},[33,163603,163604,163606,163608,163611,163613,163615,163617],{"class":35,"line":36},[33,163605,33597],{"class":63},[33,163607,162410],{"class":3632},[33,163609,163610],{"class":59},"(name: ",[33,163612,2985],{"class":39},[33,163614,163579],{"class":59},[33,163616,97325],{"class":39},[33,163618,143],{"class":59},[33,163620,163621,163623,163625,163627,163629,163631,163633,163635,163637],{"class":35,"line":43},[33,163622,149],{"class":39},[33,163624,109],{"class":59},[33,163626,999],{"class":63},[33,163628,1002],{"class":117},[33,163630,1005],{"class":39},[33,163632,1008],{"class":59},[33,163634,1011],{"class":39},[33,163636,1014],{"class":117},[33,163638,157],{"class":59},[19,163640,163641],{},"列表参数：",[23,163643,163645],{"className":25,"code":163644,"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,163646,163647,163666,163674,163686,163695],{"__ignoreMap":28},[33,163648,163649,163651,163654,163657,163659,163662,163664],{"class":35,"line":36},[33,163650,33597],{"class":63},[33,163652,163653],{"class":3632}," get_total",[33,163655,163656],{"class":59},"(numbers: list[",[33,163658,1828],{"class":39},[33,163660,163661],{"class":59},"]) -> ",[33,163663,1828],{"class":39},[33,163665,143],{"class":59},[33,163667,163668,163670,163672],{"class":35,"line":43},[33,163669,160721],{"class":59},[33,163671,64],{"class":63},[33,163673,48978],{"class":39},[33,163675,163676,163678,163681,163683],{"class":35,"line":130},[33,163677,4864],{"class":63},[33,163679,163680],{"class":59}," number ",[33,163682,27699],{"class":63},[33,163684,163685],{"class":59}," numbers:\n",[33,163687,163688,163690,163692],{"class":35,"line":146},[33,163689,161396],{"class":59},[33,163691,11136],{"class":63},[33,163693,163694],{"class":59}," number\n",[33,163696,163697,163699],{"class":35,"line":267},[33,163698,5752],{"class":63},[33,163700,163701],{"class":59}," total\n",[19,163703,163704],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163706,163708],{"id":163707},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[23,163710,163712],{"className":25,"code":163711,"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,163713,163714,163724,163728,163732,163740,163751,163761,163771,163781,163791,163795,163799,163808,163830,163834,163838,163847,163853,163873,163885,163896,163900,163909,163920,163925,163929,163933,163942,163948,163967,163979,163989,163993,164004,164014,164018,164026,164037,164041,164045,164049,164057,164062,164076,164080,164092,164097,164109,164114,164126,164131,164143,164153,164157,164163],{"__ignoreMap":28},[33,163715,163716,163719,163721],{"class":35,"line":36},[33,163717,163718],{"class":59},"balance ",[33,163720,64],{"class":63},[33,163722,163723],{"class":39}," 1000\n",[33,163725,163726],{"class":35,"line":43},[33,163727,127],{"emptyLinePlaceholder":126},[33,163729,163730],{"class":35,"line":130},[33,163731,127],{"emptyLinePlaceholder":126},[33,163733,163734,163736,163738],{"class":35,"line":146},[33,163735,33597],{"class":63},[33,163737,153661],{"class":3632},[33,163739,33603],{"class":59},[33,163741,163742,163744,163746,163749],{"class":35,"line":267},[33,163743,149],{"class":39},[33,163745,109],{"class":59},[33,163747,163748],{"class":117},"\"====== ATM ======\"",[33,163750,157],{"class":59},[33,163752,163753,163755,163757,163759],{"class":35,"line":275},[33,163754,149],{"class":39},[33,163756,109],{"class":59},[33,163758,162062],{"class":117},[33,163760,157],{"class":59},[33,163762,163763,163765,163767,163769],{"class":35,"line":392},[33,163764,149],{"class":39},[33,163766,109],{"class":59},[33,163768,162073],{"class":117},[33,163770,157],{"class":59},[33,163772,163773,163775,163777,163779],{"class":35,"line":406},[33,163774,149],{"class":39},[33,163776,109],{"class":59},[33,163778,162084],{"class":117},[33,163780,157],{"class":59},[33,163782,163783,163785,163787,163789],{"class":35,"line":418},[33,163784,149],{"class":39},[33,163786,109],{"class":59},[33,163788,162095],{"class":117},[33,163790,157],{"class":59},[33,163792,163793],{"class":35,"line":425},[33,163794,127],{"emptyLinePlaceholder":126},[33,163796,163797],{"class":35,"line":1147},[33,163798,127],{"emptyLinePlaceholder":126},[33,163800,163801,163803,163806],{"class":35,"line":1329},[33,163802,33597],{"class":63},[33,163804,163805],{"class":3632}," show_balance",[33,163807,33603],{"class":59},[33,163809,163810,163812,163814,163816,163819,163821,163824,163826,163828],{"class":35,"line":1341},[33,163811,149],{"class":39},[33,163813,109],{"class":59},[33,163815,999],{"class":63},[33,163817,163818],{"class":117},"\"当前余额:",[33,163820,1005],{"class":39},[33,163822,163823],{"class":59},"balance",[33,163825,1011],{"class":39},[33,163827,1605],{"class":117},[33,163829,157],{"class":59},[33,163831,163832],{"class":35,"line":1348},[33,163833,127],{"emptyLinePlaceholder":126},[33,163835,163836],{"class":35,"line":1529},[33,163837,127],{"emptyLinePlaceholder":126},[33,163839,163840,163842,163845],{"class":35,"line":1546},[33,163841,33597],{"class":63},[33,163843,163844],{"class":3632}," save_money",[33,163846,33603],{"class":59},[33,163848,163849,163851],{"class":35,"line":1551},[33,163850,163275],{"class":63},[33,163852,151728],{"class":59},[33,163854,163855,163858,163860,163862,163864,163866,163868,163871],{"class":35,"line":1566},[33,163856,163857],{"class":59},"    money ",[33,163859,64],{"class":63},[33,163861,1201],{"class":39},[33,163863,109],{"class":59},[33,163865,112],{"class":39},[33,163867,109],{"class":59},[33,163869,163870],{"class":117},"\"请输入存款金额:\"",[33,163872,121],{"class":59},[33,163874,163875,163877,163879,163881,163883],{"class":35,"line":1578},[33,163876,567],{"class":63},[33,163878,151771],{"class":59},[33,163880,837],{"class":63},[33,163882,829],{"class":39},[33,163884,143],{"class":59},[33,163886,163887,163889,163891,163894],{"class":35,"line":1583},[33,163888,583],{"class":39},[33,163890,109],{"class":59},[33,163892,163893],{"class":117},"\"金额必须大于0\"",[33,163895,157],{"class":59},[33,163897,163898],{"class":35,"line":3369},[33,163899,153989],{"class":63},[33,163901,163902,163905,163907],{"class":35,"line":3396},[33,163903,163904],{"class":59},"    balance ",[33,163906,11136],{"class":63},[33,163908,151804],{"class":59},[33,163910,163911,163913,163915,163918],{"class":35,"line":3401},[33,163912,149],{"class":39},[33,163914,109],{"class":59},[33,163916,163917],{"class":117},"\"存款成功\"",[33,163919,157],{"class":59},[33,163921,163922],{"class":35,"line":3418},[33,163923,163924],{"class":59},"    show_balance()\n",[33,163926,163927],{"class":35,"line":3423},[33,163928,127],{"emptyLinePlaceholder":126},[33,163930,163931],{"class":35,"line":3428},[33,163932,127],{"emptyLinePlaceholder":126},[33,163934,163935,163937,163940],{"class":35,"line":3433},[33,163936,33597],{"class":63},[33,163938,163939],{"class":3632}," withdraw_money",[33,163941,33603],{"class":59},[33,163943,163944,163946],{"class":35,"line":3447},[33,163945,163275],{"class":63},[33,163947,151728],{"class":59},[33,163949,163950,163952,163954,163956,163958,163960,163962,163965],{"class":35,"line":3452},[33,163951,163857],{"class":59},[33,163953,64],{"class":63},[33,163955,1201],{"class":39},[33,163957,109],{"class":59},[33,163959,112],{"class":39},[33,163961,109],{"class":59},[33,163963,163964],{"class":117},"\"请输入取款金额:\"",[33,163966,121],{"class":59},[33,163968,163969,163971,163973,163975,163977],{"class":35,"line":4243},[33,163970,567],{"class":63},[33,163972,151771],{"class":59},[33,163974,837],{"class":63},[33,163976,829],{"class":39},[33,163978,143],{"class":59},[33,163980,163981,163983,163985,163987],{"class":35,"line":4257},[33,163982,583],{"class":39},[33,163984,109],{"class":59},[33,163986,163893],{"class":117},[33,163988,157],{"class":59},[33,163990,163991],{"class":35,"line":4265},[33,163992,153989],{"class":63},[33,163994,163995,163997,163999,164001],{"class":35,"line":4270},[33,163996,567],{"class":63},[33,163998,151771],{"class":59},[33,164000,2775],{"class":63},[33,164002,164003],{"class":59}," balance:\n",[33,164005,164006,164008,164010,164012],{"class":35,"line":4276},[33,164007,583],{"class":39},[33,164009,109],{"class":59},[33,164011,151866],{"class":117},[33,164013,157],{"class":59},[33,164015,164016],{"class":35,"line":4282},[33,164017,153989],{"class":63},[33,164019,164020,164022,164024],{"class":35,"line":4287},[33,164021,163904],{"class":59},[33,164023,1572],{"class":63},[33,164025,151804],{"class":59},[33,164027,164028,164030,164032,164035],{"class":35,"line":9608},[33,164029,149],{"class":39},[33,164031,109],{"class":59},[33,164033,164034],{"class":117},"\"取款成功\"",[33,164036,157],{"class":59},[33,164038,164039],{"class":35,"line":9632},[33,164040,163924],{"class":59},[33,164042,164043],{"class":35,"line":9637},[33,164044,127],{"emptyLinePlaceholder":126},[33,164046,164047],{"class":35,"line":9643},[33,164048,127],{"emptyLinePlaceholder":126},[33,164050,164051,164053,164055],{"class":35,"line":9670},[33,164052,110301],{"class":63},[33,164054,96931],{"class":39},[33,164056,143],{"class":59},[33,164058,164059],{"class":35,"line":9675},[33,164060,164061],{"class":59},"    show_menu()\n",[33,164063,164064,164066,164068,164070,164072,164074],{"class":35,"line":9681},[33,164065,162106],{"class":59},[33,164067,64],{"class":63},[33,164069,539],{"class":39},[33,164071,109],{"class":59},[33,164073,154698],{"class":117},[33,164075,157],{"class":59},[33,164077,164078],{"class":35,"line":9693},[33,164079,127],{"emptyLinePlaceholder":126},[33,164081,164082,164084,164086,164088,164090],{"class":35,"line":9705},[33,164083,567],{"class":63},[33,164085,154711],{"class":59},[33,164087,573],{"class":63},[33,164089,154716],{"class":117},[33,164091,143],{"class":59},[33,164093,164094],{"class":35,"line":9717},[33,164095,164096],{"class":59},"        show_balance()\n",[33,164098,164099,164101,164103,164105,164107],{"class":35,"line":11375},[33,164100,40939],{"class":63},[33,164102,154711],{"class":59},[33,164104,573],{"class":63},[33,164106,154735],{"class":117},[33,164108,143],{"class":59},[33,164110,164111],{"class":35,"line":11400},[33,164112,164113],{"class":59},"        save_money()\n",[33,164115,164116,164118,164120,164122,164124],{"class":35,"line":11423},[33,164117,40939],{"class":63},[33,164119,154711],{"class":59},[33,164121,573],{"class":63},[33,164123,154753],{"class":117},[33,164125,143],{"class":59},[33,164127,164128],{"class":35,"line":11447},[33,164129,164130],{"class":59},"        withdraw_money()\n",[33,164132,164133,164135,164137,164139,164141],{"class":35,"line":11452},[33,164134,40939],{"class":63},[33,164136,154711],{"class":59},[33,164138,573],{"class":63},[33,164140,154807],{"class":117},[33,164142,143],{"class":59},[33,164144,164145,164147,164149,164151],{"class":35,"line":11457},[33,164146,583],{"class":39},[33,164148,109],{"class":59},[33,164150,154818],{"class":117},[33,164152,157],{"class":59},[33,164154,164155],{"class":35,"line":11462},[33,164156,33277],{"class":63},[33,164158,164159,164161],{"class":35,"line":11471},[33,164160,594],{"class":63},[33,164162,143],{"class":59},[33,164164,164165,164167,164169,164171],{"class":35,"line":11476},[33,164166,583],{"class":39},[33,164168,109],{"class":59},[33,164170,154839],{"class":117},[33,164172,157],{"class":59},[19,164174,164175],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164177,164179],{"id":164178},"_514-易错点","5.14 易错点",[162,164181,164182,164185,164188,164193,164198,164201],{},[165,164183,164184],{},"函数定义后必须调用才会执行。",[165,164186,164187],{},"函数名后面有括号才是调用。",[165,164189,164190,164192],{},[30,164191,18701],{}," 后面的代码不会执行。",[165,164194,164195,164196,1628],{},"没有返回值的函数默认返回 ",[30,164197,97325],{},[165,164199,164200],{},"局部变量不能在函数外部访问。",[165,164202,164203,164204,164206],{},"不要滥用 ",[30,164205,163240],{},"，更好的方式是让函数返回新值。",[19,164208,164209,164210,164212],{},"例如不用 ",[30,164211,163240],{}," 改写存款：",[23,164214,164216],{"className":25,"code":164215,"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,164217,164218,164227,164238,164242,164246,164254,164267],{"__ignoreMap":28},[33,164219,164220,164222,164224],{"class":35,"line":36},[33,164221,33597],{"class":63},[33,164223,163844],{"class":3632},[33,164225,164226],{"class":59},"(balance, money):\n",[33,164228,164229,164231,164234,164236],{"class":35,"line":43},[33,164230,5752],{"class":63},[33,164232,164233],{"class":59}," balance ",[33,164235,2298],{"class":63},[33,164237,151804],{"class":59},[33,164239,164240],{"class":35,"line":130},[33,164241,127],{"emptyLinePlaceholder":126},[33,164243,164244],{"class":35,"line":146},[33,164245,127],{"emptyLinePlaceholder":126},[33,164247,164248,164250,164252],{"class":35,"line":267},[33,164249,163718],{"class":59},[33,164251,64],{"class":63},[33,164253,163723],{"class":39},[33,164255,164256,164258,164260,164263,164265],{"class":35,"line":275},[33,164257,163718],{"class":59},[33,164259,64],{"class":63},[33,164261,164262],{"class":59}," save_money(balance, ",[33,164264,3391],{"class":39},[33,164266,157],{"class":59},[33,164268,164269,164271],{"class":35,"line":392},[33,164270,72],{"class":39},[33,164272,164273],{"class":59},"(balance)\n",[14,164275,164277],{"id":164276},"_515-本章练习","5.15 本章练习",[162,164279,164280,164287,164293,164299,164305],{},[165,164281,164282,164283,164286],{},"定义函数 ",[30,164284,164285],{},"print_student(name, age)","，输出学生信息。",[165,164288,164282,164289,164292],{},[30,164290,164291],{},"get_max(a, b, c)","，返回三个数中的最大值。",[165,164294,164282,164295,164298],{},[30,164296,164297],{},"is_even(num)","，判断一个数是否为偶数。",[165,164300,164282,164301,164304],{},[30,164302,164303],{},"calculate_bmi(weight, height)","，返回 BMI。",[165,164306,164307],{},"把第 4 章的菜单程序拆分成多个函数。",[1729,164309,164310],{},"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":43,"depth":43,"links":164312},[164313,164314,164315,164316,164317,164318,164319,164320,164321,164325,164326,164327,164328,164329,164330],{"id":162333,"depth":43,"text":162334},{"id":162374,"depth":43,"text":162375},{"id":162464,"depth":43,"text":162465},{"id":162545,"depth":43,"text":162546},{"id":162678,"depth":43,"text":162679},{"id":162800,"depth":43,"text":162801},{"id":162922,"depth":43,"text":162923},{"id":162999,"depth":43,"text":163000},{"id":163121,"depth":43,"text":163122,"children":164322},[164323,164324],{"id":163125,"depth":130,"text":163126},{"id":163183,"depth":130,"text":163184},{"id":163312,"depth":43,"text":163313},{"id":163438,"depth":43,"text":163439},{"id":163551,"depth":43,"text":163552},{"id":163707,"depth":43,"text":163708},{"id":164178,"depth":43,"text":164179},{"id":164276,"depth":43,"text":164277},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162325,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164337,"title":164338,"body":164339,"description":1751,"extension":1752,"meta":167383,"navigation":126,"path":167384,"seo":167385,"stem":167386,"__hash__":167387},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164340,"toc":167364},[164341,164344,164348,164351,164354,164458,164461,164465,164468,164548,164551,164555,164558,164618,164621,164657,164660,164675,164679,164752,164755,164810,164813,164883,164886,164970,164980,165038,165042,165087,165090,165116,165119,165225,165229,165232,165274,165277,165341,165344,165348,165351,165412,165415,165445,165448,165486,165490,165493,165502,165505,165629,165632,165673,165677,165680,165691,165731,165734,165749,165754,165757,165824,165827,165917,165921,165924,165972,165975,166002,166004,166034,166037,166057,166060,166091,166094,166127,166131,166134,166158,166161,166185,166188,166212,166216,166219,166349,166352,166432,166435,166510,166514,166517,166567,166570,166612,166615,166639,166641,166665,166668,166723,166726,166792,166796,166799,166802,166840,166843,166896,166899,166945,166948,166981,166984,166988,167307,167311,167340,167344,167361],[10,164342,164338],{"id":164343},"_6-数据容器",[14,164345,164347],{"id":164346},"_61-什么是数据容器","6.1 什么是数据容器",[19,164349,164350],{},"数据容器用于一次保存多个数据。",[19,164352,164353],{},"常见容器：",[1956,164355,164356,164373],{},[1959,164357,164358],{},[1962,164359,164360,164362,164365,164368,164371],{},[1965,164361,27427],{},[1965,164363,164364],{},"是否有序",[1965,164366,164367],{},"是否可变",[1965,164369,164370],{},"是否允许重复",[1965,164372,29148],{},[2003,164374,164375,164393,164409,164424,164441],{},[1962,164376,164377,164380,164383,164386,164389],{},[2008,164378,164379],{},"list列表",[2008,164381,164382],{},"有序",[2008,164384,164385],{},"可变",[2008,164387,164388],{},"允许",[2008,164390,164391],{},[30,164392,156880],{},[1962,164394,164395,164398,164400,164403,164405],{},[2008,164396,164397],{},"tuple元组",[2008,164399,164382],{},[2008,164401,164402],{},"不可变",[2008,164404,164388],{},[2008,164406,164407],{},[30,164408,156893],{},[1962,164410,164411,164414,164416,164418,164420],{},[2008,164412,164413],{},"str字符串",[2008,164415,164382],{},[2008,164417,164402],{},[2008,164419,164388],{},[2008,164421,164422],{},[30,164423,157500],{},[1962,164425,164426,164429,164432,164434,164437],{},[2008,164427,164428],{},"set集合",[2008,164430,164431],{},"无序",[2008,164433,164385],{},[2008,164435,164436],{},"不允许",[2008,164438,164439],{},[30,164440,156917],{},[1962,164442,164443,164446,164448,164450,164453],{},[2008,164444,164445],{},"dict字典",[2008,164447,164382],{},[2008,164449,164385],{},[2008,164451,164452],{},"key不允许重复",[2008,164454,164455],{},[30,164456,164457],{},"{\"name\": \"小明\"}",[19,164459,164460],{},"Python 3.7 之后，字典保持插入顺序。",[14,164462,164464],{"id":164463},"_62-列表list","6.2 列表list",[19,164466,164467],{},"列表用于保存一组有顺序的数据。",[23,164469,164471],{"className":25,"code":164470,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[30,164472,164473,164493,164518,164539],{"__ignoreMap":28},[33,164474,164475,164477,164479,164481,164483,164485,164487,164489,164491],{"class":35,"line":36},[33,164476,161794],{"class":59},[33,164478,64],{"class":63},[33,164480,53871],{"class":59},[33,164482,151517],{"class":117},[33,164484,14093],{"class":59},[33,164486,152564],{"class":117},[33,164488,14093],{"class":59},[33,164490,161145],{"class":117},[33,164492,34893],{"class":59},[33,164494,164495,164498,164500,164502,164504,164506,164508,164510,164512,164514,164516],{"class":35,"line":43},[33,164496,164497],{"class":59},"numbers ",[33,164499,64],{"class":63},[33,164501,53871],{"class":59},[33,164503,2036],{"class":39},[33,164505,14093],{"class":59},[33,164507,1897],{"class":39},[33,164509,14093],{"class":59},[33,164511,1891],{"class":39},[33,164513,14093],{"class":59},[33,164515,2111],{"class":39},[33,164517,34893],{"class":59},[33,164519,164520,164523,164525,164527,164529,164531,164533,164535,164537],{"class":35,"line":130},[33,164521,164522],{"class":59},"mixed ",[33,164524,64],{"class":63},[33,164526,53871],{"class":59},[33,164528,151517],{"class":117},[33,164530,14093],{"class":59},[33,164532,2467],{"class":39},[33,164534,14093],{"class":59},[33,164536,33126],{"class":39},[33,164538,34893],{"class":59},[33,164540,164541,164544,164546],{"class":35,"line":146},[33,164542,164543],{"class":59},"empty ",[33,164545,64],{"class":63},[33,164547,53483],{"class":59},[19,164549,164550],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164552,164554],{"id":164553},"_63-列表索引","6.3 列表索引",[19,164556,164557],{},"正向索引从 0 开始：",[23,164559,164561],{"className":25,"code":164560,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[30,164562,164563,164583,164587,164598,164608],{"__ignoreMap":28},[33,164564,164565,164567,164569,164571,164573,164575,164577,164579,164581],{"class":35,"line":36},[33,164566,161794],{"class":59},[33,164568,64],{"class":63},[33,164570,53871],{"class":59},[33,164572,151517],{"class":117},[33,164574,14093],{"class":59},[33,164576,152564],{"class":117},[33,164578,14093],{"class":59},[33,164580,161145],{"class":117},[33,164582,34893],{"class":59},[33,164584,164585],{"class":35,"line":43},[33,164586,127],{"emptyLinePlaceholder":126},[33,164588,164589,164591,164594,164596],{"class":35,"line":130},[33,164590,72],{"class":39},[33,164592,164593],{"class":59},"(names[",[33,164595,2010],{"class":39},[33,164597,6318],{"class":59},[33,164599,164600,164602,164604,164606],{"class":35,"line":146},[33,164601,72],{"class":39},[33,164603,164593],{"class":59},[33,164605,2036],{"class":39},[33,164607,6318],{"class":59},[33,164609,164610,164612,164614,164616],{"class":35,"line":267},[33,164611,72],{"class":39},[33,164613,164593],{"class":59},[33,164615,1897],{"class":39},[33,164617,6318],{"class":59},[19,164619,164620],{},"反向索引从 -1 开始：",[23,164622,164624],{"className":25,"code":164623,"language":27,"meta":28,"style":28},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[30,164625,164626,164642],{"__ignoreMap":28},[33,164627,164628,164630,164632,164634,164636,164639],{"class":35,"line":36},[33,164629,72],{"class":39},[33,164631,164593],{"class":59},[33,164633,2349],{"class":63},[33,164635,2036],{"class":39},[33,164637,164638],{"class":59},"])  ",[33,164640,164641],{"class":87},"# 小刚\n",[33,164643,164644,164646,164648,164650,164652,164654],{"class":35,"line":43},[33,164645,72],{"class":39},[33,164647,164593],{"class":59},[33,164649,2349],{"class":63},[33,164651,1897],{"class":39},[33,164653,164638],{"class":59},[33,164655,164656],{"class":87},"# 小红\n",[19,164658,164659],{},"索引越界会报错：",[23,164661,164663],{"className":25,"code":164662,"language":27,"meta":28,"style":28},"print(names[3])\n",[30,164664,164665],{"__ignoreMap":28},[33,164666,164667,164669,164671,164673],{"class":35,"line":36},[33,164668,72],{"class":39},[33,164670,164593],{"class":59},[33,164672,1891],{"class":39},[33,164674,6318],{"class":59},[14,164676,164678],{"id":164677},"_64-列表常用方法","6.4 列表常用方法",[23,164680,164682],{"className":25,"code":164681,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[30,164683,164684,164700,164704,164713,164727,164741,164745],{"__ignoreMap":28},[33,164685,164686,164688,164690,164692,164694,164696,164698],{"class":35,"line":36},[33,164687,161794],{"class":59},[33,164689,64],{"class":63},[33,164691,53871],{"class":59},[33,164693,151517],{"class":117},[33,164695,14093],{"class":59},[33,164697,152564],{"class":117},[33,164699,34893],{"class":59},[33,164701,164702],{"class":35,"line":43},[33,164703,127],{"emptyLinePlaceholder":126},[33,164705,164706,164709,164711],{"class":35,"line":130},[33,164707,164708],{"class":59},"names.append(",[33,164710,161145],{"class":117},[33,164712,157],{"class":59},[33,164714,164715,164718,164720,164722,164725],{"class":35,"line":146},[33,164716,164717],{"class":59},"names.insert(",[33,164719,2036],{"class":39},[33,164721,14093],{"class":59},[33,164723,164724],{"class":117},"\"小李\"",[33,164726,157],{"class":59},[33,164728,164729,164732,164734,164736,164739],{"class":35,"line":267},[33,164730,164731],{"class":59},"names.extend([",[33,164733,10343],{"class":117},[33,164735,14093],{"class":59},[33,164737,164738],{"class":117},"\"小赵\"",[33,164740,6318],{"class":59},[33,164742,164743],{"class":35,"line":275},[33,164744,127],{"emptyLinePlaceholder":126},[33,164746,164747,164749],{"class":35,"line":392},[33,164748,72],{"class":39},[33,164750,164751],{"class":59},"(names)\n",[19,164753,164754],{},"删除元素：",[23,164756,164758],{"className":25,"code":164757,"language":27,"meta":28,"style":28},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[30,164759,164760,164769,164779,164793,164805],{"__ignoreMap":28},[33,164761,164762,164765,164767],{"class":35,"line":36},[33,164763,164764],{"class":59},"names.remove(",[33,164766,152564],{"class":117},[33,164768,157],{"class":59},[33,164770,164771,164774,164776],{"class":35,"line":43},[33,164772,164773],{"class":59},"last ",[33,164775,64],{"class":63},[33,164777,164778],{"class":59}," names.pop()\n",[33,164780,164781,164784,164786,164789,164791],{"class":35,"line":130},[33,164782,164783],{"class":59},"first ",[33,164785,64],{"class":63},[33,164787,164788],{"class":59}," names.pop(",[33,164790,2010],{"class":39},[33,164792,157],{"class":59},[33,164794,164795,164798,164801,164803],{"class":35,"line":146},[33,164796,164797],{"class":63},"del",[33,164799,164800],{"class":59}," names[",[33,164802,2010],{"class":39},[33,164804,34893],{"class":59},[33,164806,164807],{"class":35,"line":267},[33,164808,164809],{"class":59},"names.clear()\n",[19,164811,164812],{},"查询和统计：",[23,164814,164816],{"className":25,"code":164815,"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,164817,164818,164846,164850,164861,164872],{"__ignoreMap":28},[33,164819,164820,164822,164824,164826,164828,164830,164832,164834,164836,164838,164840,164842,164844],{"class":35,"line":36},[33,164821,164497],{"class":59},[33,164823,64],{"class":63},[33,164825,53871],{"class":59},[33,164827,2036],{"class":39},[33,164829,14093],{"class":59},[33,164831,1897],{"class":39},[33,164833,14093],{"class":59},[33,164835,1891],{"class":39},[33,164837,14093],{"class":59},[33,164839,1897],{"class":39},[33,164841,14093],{"class":59},[33,164843,2111],{"class":39},[33,164845,34893],{"class":59},[33,164847,164848],{"class":35,"line":43},[33,164849,127],{"emptyLinePlaceholder":126},[33,164851,164852,164854,164857,164859],{"class":35,"line":130},[33,164853,72],{"class":39},[33,164855,164856],{"class":59},"(numbers.index(",[33,164858,1891],{"class":39},[33,164860,121],{"class":59},[33,164862,164863,164865,164868,164870],{"class":35,"line":146},[33,164864,72],{"class":39},[33,164866,164867],{"class":59},"(numbers.count(",[33,164869,1897],{"class":39},[33,164871,121],{"class":59},[33,164873,164874,164876,164878,164880],{"class":35,"line":267},[33,164875,72],{"class":39},[33,164877,109],{"class":59},[33,164879,9018],{"class":39},[33,164881,164882],{"class":59},"(numbers))\n",[19,164884,164885],{},"排序：",[23,164887,164889],{"className":25,"code":164888,"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,164890,164891,164915,164919,164924,164931,164935,164949,164955,164959,164964],{"__ignoreMap":28},[33,164892,164893,164895,164897,164899,164901,164903,164905,164907,164909,164911,164913],{"class":35,"line":36},[33,164894,164497],{"class":59},[33,164896,64],{"class":63},[33,164898,53871],{"class":59},[33,164900,1891],{"class":39},[33,164902,14093],{"class":59},[33,164904,2036],{"class":39},[33,164906,14093],{"class":59},[33,164908,2137],{"class":39},[33,164910,14093],{"class":59},[33,164912,1897],{"class":39},[33,164914,34893],{"class":59},[33,164916,164917],{"class":35,"line":43},[33,164918,127],{"emptyLinePlaceholder":126},[33,164920,164921],{"class":35,"line":130},[33,164922,164923],{"class":59},"numbers.sort()\n",[33,164925,164926,164928],{"class":35,"line":146},[33,164927,72],{"class":39},[33,164929,164930],{"class":59},"(numbers)\n",[33,164932,164933],{"class":35,"line":267},[33,164934,127],{"emptyLinePlaceholder":126},[33,164936,164937,164940,164943,164945,164947],{"class":35,"line":275},[33,164938,164939],{"class":59},"numbers.sort(",[33,164941,164942],{"class":6877},"reverse",[33,164944,64],{"class":63},[33,164946,33126],{"class":39},[33,164948,157],{"class":59},[33,164950,164951,164953],{"class":35,"line":392},[33,164952,72],{"class":39},[33,164954,164930],{"class":59},[33,164956,164957],{"class":35,"line":406},[33,164958,127],{"emptyLinePlaceholder":126},[33,164960,164961],{"class":35,"line":418},[33,164962,164963],{"class":59},"numbers.reverse()\n",[33,164965,164966,164968],{"class":35,"line":425},[33,164967,72],{"class":39},[33,164969,164930],{"class":59},[19,164971,164972,164975,164976,164979],{},[30,164973,164974],{},"sort()"," 会修改原列表，",[30,164977,164978],{},"sorted()"," 返回新列表。",[23,164981,164983],{"className":25,"code":164982,"language":27,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[30,164984,164985,165009,165021,165025,165031],{"__ignoreMap":28},[33,164986,164987,164989,164991,164993,164995,164997,164999,165001,165003,165005,165007],{"class":35,"line":36},[33,164988,164497],{"class":59},[33,164990,64],{"class":63},[33,164992,53871],{"class":59},[33,164994,1891],{"class":39},[33,164996,14093],{"class":59},[33,164998,2036],{"class":39},[33,165000,14093],{"class":59},[33,165002,2137],{"class":39},[33,165004,14093],{"class":59},[33,165006,1897],{"class":39},[33,165008,34893],{"class":59},[33,165010,165011,165014,165016,165019],{"class":35,"line":43},[33,165012,165013],{"class":59},"new_numbers ",[33,165015,64],{"class":63},[33,165017,165018],{"class":39}," sorted",[33,165020,164930],{"class":59},[33,165022,165023],{"class":35,"line":130},[33,165024,127],{"emptyLinePlaceholder":126},[33,165026,165027,165029],{"class":35,"line":146},[33,165028,72],{"class":39},[33,165030,164930],{"class":59},[33,165032,165033,165035],{"class":35,"line":267},[33,165034,72],{"class":39},[33,165036,165037],{"class":59},"(new_numbers)\n",[14,165039,165041],{"id":165040},"_65-列表遍历","6.5 列表遍历",[23,165043,165045],{"className":25,"code":165044,"language":27,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[30,165046,165047,165067,165071,165081],{"__ignoreMap":28},[33,165048,165049,165051,165053,165055,165057,165059,165061,165063,165065],{"class":35,"line":36},[33,165050,161794],{"class":59},[33,165052,64],{"class":63},[33,165054,53871],{"class":59},[33,165056,151517],{"class":117},[33,165058,14093],{"class":59},[33,165060,152564],{"class":117},[33,165062,14093],{"class":59},[33,165064,161145],{"class":117},[33,165066,34893],{"class":59},[33,165068,165069],{"class":35,"line":43},[33,165070,127],{"emptyLinePlaceholder":126},[33,165072,165073,165075,165077,165079],{"class":35,"line":130},[33,165074,4690],{"class":63},[33,165076,161830],{"class":59},[33,165078,27699],{"class":63},[33,165080,161835],{"class":59},[33,165082,165083,165085],{"class":35,"line":146},[33,165084,149],{"class":39},[33,165086,152288],{"class":59},[19,165088,165089],{},"需要索引时：",[23,165091,165093],{"className":25,"code":165092,"language":27,"meta":28,"style":28},"for index, name in enumerate(names):\n    print(index, name)\n",[30,165094,165095,165109],{"__ignoreMap":28},[33,165096,165097,165099,165102,165104,165106],{"class":35,"line":36},[33,165098,4690],{"class":63},[33,165100,165101],{"class":59}," index, name ",[33,165103,27699],{"class":63},[33,165105,33256],{"class":39},[33,165107,165108],{"class":59},"(names):\n",[33,165110,165111,165113],{"class":35,"line":43},[33,165112,149],{"class":39},[33,165114,165115],{"class":59},"(index, name)\n",[19,165117,165118],{},"统计总分：",[23,165120,165122],{"className":25,"code":165121,"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,165123,165124,165149,165157,165161,165172,165180,165184,165201],{"__ignoreMap":28},[33,165125,165126,165129,165131,165133,165135,165137,165139,165141,165143,165145,165147],{"class":35,"line":36},[33,165127,165128],{"class":59},"scores ",[33,165130,64],{"class":63},[33,165132,53871],{"class":59},[33,165134,2679],{"class":39},[33,165136,14093],{"class":59},[33,165138,2553],{"class":39},[33,165140,14093],{"class":59},[33,165142,2072],{"class":39},[33,165144,14093],{"class":59},[33,165146,2378],{"class":39},[33,165148,34893],{"class":59},[33,165150,165151,165153,165155],{"class":35,"line":43},[33,165152,158874],{"class":59},[33,165154,64],{"class":63},[33,165156,48978],{"class":39},[33,165158,165159],{"class":35,"line":130},[33,165160,127],{"emptyLinePlaceholder":126},[33,165162,165163,165165,165167,165169],{"class":35,"line":146},[33,165164,4690],{"class":63},[33,165166,346],{"class":59},[33,165168,27699],{"class":63},[33,165170,165171],{"class":59}," scores:\n",[33,165173,165174,165176,165178],{"class":35,"line":267},[33,165175,160721],{"class":59},[33,165177,11136],{"class":63},[33,165179,3261],{"class":59},[33,165181,165182],{"class":35,"line":275},[33,165183,127],{"emptyLinePlaceholder":126},[33,165185,165186,165189,165191,165194,165196,165198],{"class":35,"line":392},[33,165187,165188],{"class":59},"avg ",[33,165190,64],{"class":63},[33,165192,165193],{"class":59}," total ",[33,165195,2401],{"class":63},[33,165197,8991],{"class":39},[33,165199,165200],{"class":59},"(scores)\n",[33,165202,165203,165205,165207,165209,165212,165214,165217,165219,165221,165223],{"class":35,"line":406},[33,165204,72],{"class":39},[33,165206,109],{"class":59},[33,165208,999],{"class":63},[33,165210,165211],{"class":117},"\"平均分:",[33,165213,1005],{"class":39},[33,165215,165216],{"class":59},"avg",[33,165218,1600],{"class":63},[33,165220,1011],{"class":39},[33,165222,1014],{"class":117},[33,165224,157],{"class":59},[14,165226,165228],{"id":165227},"_66-元组tuple","6.6 元组tuple",[19,165230,165231],{},"元组和列表类似，但不可修改。",[23,165233,165235],{"className":25,"code":165234,"language":27,"meta":28,"style":28},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[30,165236,165237,165254],{"__ignoreMap":28},[33,165238,165239,165242,165244,165246,165248,165250,165252],{"class":35,"line":36},[33,165240,165241],{"class":59},"point ",[33,165243,64],{"class":63},[33,165245,3332],{"class":59},[33,165247,2264],{"class":39},[33,165249,14093],{"class":59},[33,165251,2517],{"class":39},[33,165253,157],{"class":59},[33,165255,165256,165258,165260,165262,165264,165266,165268,165270,165272],{"class":35,"line":43},[33,165257,117950],{"class":59},[33,165259,64],{"class":63},[33,165261,3332],{"class":59},[33,165263,151517],{"class":117},[33,165265,14093],{"class":59},[33,165267,2467],{"class":39},[33,165269,14093],{"class":59},[33,165271,70911],{"class":117},[33,165273,157],{"class":59},[19,165275,165276],{},"单元素元组必须加逗号：",[23,165278,165280],{"className":25,"code":165279,"language":27,"meta":28,"style":28},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[30,165281,165282,165296,165309,165313,165327],{"__ignoreMap":28},[33,165283,165284,165287,165289,165291,165293],{"class":35,"line":36},[33,165285,165286],{"class":59},"t1 ",[33,165288,64],{"class":63},[33,165290,3332],{"class":59},[33,165292,2264],{"class":39},[33,165294,165295],{"class":59},",)\n",[33,165297,165298,165301,165303,165305,165307],{"class":35,"line":43},[33,165299,165300],{"class":59},"t2 ",[33,165302,64],{"class":63},[33,165304,3332],{"class":59},[33,165306,2264],{"class":39},[33,165308,157],{"class":59},[33,165310,165311],{"class":35,"line":130},[33,165312,127],{"emptyLinePlaceholder":126},[33,165314,165315,165317,165319,165321,165324],{"class":35,"line":146},[33,165316,72],{"class":39},[33,165318,109],{"class":59},[33,165320,104745],{"class":39},[33,165322,165323],{"class":59},"(t1))  ",[33,165325,165326],{"class":87},"# tuple\n",[33,165328,165329,165331,165333,165335,165338],{"class":35,"line":267},[33,165330,72],{"class":39},[33,165332,109],{"class":59},[33,165334,104745],{"class":39},[33,165336,165337],{"class":59},"(t2))  ",[33,165339,165340],{"class":87},"# int\n",[19,165342,165343],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165345,165347],{"id":165346},"_67-字符串str","6.7 字符串str",[19,165349,165350],{},"字符串也是序列，可以索引、切片和遍历。",[23,165352,165354],{"className":25,"code":165353,"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,165355,165356,165364,165368,165379,165391,165395,165406],{"__ignoreMap":28},[33,165357,165358,165360,165362],{"class":35,"line":36},[33,165359,158062],{"class":59},[33,165361,64],{"class":63},[33,165363,161095],{"class":117},[33,165365,165366],{"class":35,"line":43},[33,165367,127],{"emptyLinePlaceholder":126},[33,165369,165370,165372,165375,165377],{"class":35,"line":130},[33,165371,72],{"class":39},[33,165373,165374],{"class":59},"(text[",[33,165376,2010],{"class":39},[33,165378,6318],{"class":59},[33,165380,165381,165383,165385,165387,165389],{"class":35,"line":146},[33,165382,72],{"class":39},[33,165384,165374],{"class":59},[33,165386,2349],{"class":63},[33,165388,2036],{"class":39},[33,165390,6318],{"class":59},[33,165392,165393],{"class":35,"line":267},[33,165394,127],{"emptyLinePlaceholder":126},[33,165396,165397,165399,165401,165403],{"class":35,"line":275},[33,165398,4690],{"class":63},[33,165400,161106],{"class":59},[33,165402,27699],{"class":63},[33,165404,165405],{"class":59}," text:\n",[33,165407,165408,165410],{"class":35,"line":392},[33,165409,149],{"class":39},[33,165411,161117],{"class":59},[19,165413,165414],{},"字符串不可变：",[23,165416,165418],{"className":25,"code":165417,"language":27,"meta":28,"style":28},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[30,165419,165420,165428],{"__ignoreMap":28},[33,165421,165422,165424,165426],{"class":35,"line":36},[33,165423,158062],{"class":59},[33,165425,64],{"class":63},[33,165427,161095],{"class":117},[33,165429,165430,165433,165435,165437,165439,165442],{"class":35,"line":43},[33,165431,165432],{"class":59},"text[",[33,165434,2010],{"class":39},[33,165436,6104],{"class":59},[33,165438,64],{"class":63},[33,165440,165441],{"class":117}," \"P\"",[33,165443,165444],{"class":87},"  # 报错\n",[19,165446,165447],{},"如果要得到新字符串：",[23,165449,165451],{"className":25,"code":165450,"language":27,"meta":28,"style":28},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[30,165452,165453,165461,165479],{"__ignoreMap":28},[33,165454,165455,165457,165459],{"class":35,"line":36},[33,165456,158062],{"class":59},[33,165458,64],{"class":63},[33,165460,161095],{"class":117},[33,165462,165463,165465,165467,165469,165471,165474,165476],{"class":35,"line":43},[33,165464,158062],{"class":59},[33,165466,64],{"class":63},[33,165468,165441],{"class":117},[33,165470,47212],{"class":63},[33,165472,165473],{"class":59}," text[",[33,165475,2036],{"class":39},[33,165477,165478],{"class":59},":]\n",[33,165480,165481,165483],{"class":35,"line":130},[33,165482,72],{"class":39},[33,165484,165485],{"class":59},"(text)\n",[14,165487,165489],{"id":165488},"_68-切片","6.8 切片",[19,165491,165492],{},"切片用于从序列中取一部分。",[23,165494,165496],{"className":25,"code":165495,"language":27,"meta":28,"style":28},"序列[开始:结束:步长]\n",[30,165497,165498],{"__ignoreMap":28},[33,165499,165500],{"class":35,"line":36},[33,165501,165495],{"class":59},[19,165503,165504],{},"结束位置不包含。",[23,165506,165508],{"className":25,"code":165507,"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,165509,165510,165547,165551,165570,165585,165599,165613],{"__ignoreMap":28},[33,165511,165512,165515,165517,165519,165521,165523,165525,165527,165529,165531,165533,165535,165537,165539,165541,165543,165545],{"class":35,"line":36},[33,165513,165514],{"class":59},"nums ",[33,165516,64],{"class":63},[33,165518,53871],{"class":59},[33,165520,2010],{"class":39},[33,165522,14093],{"class":59},[33,165524,2036],{"class":39},[33,165526,14093],{"class":59},[33,165528,1897],{"class":39},[33,165530,14093],{"class":59},[33,165532,1891],{"class":39},[33,165534,14093],{"class":59},[33,165536,2111],{"class":39},[33,165538,14093],{"class":59},[33,165540,2137],{"class":39},[33,165542,14093],{"class":59},[33,165544,2162],{"class":39},[33,165546,34893],{"class":59},[33,165548,165549],{"class":35,"line":43},[33,165550,127],{"emptyLinePlaceholder":126},[33,165552,165553,165555,165558,165560,165562,165564,165567],{"class":35,"line":130},[33,165554,72],{"class":39},[33,165556,165557],{"class":59},"(nums[",[33,165559,2036],{"class":39},[33,165561,2676],{"class":59},[33,165563,2111],{"class":39},[33,165565,165566],{"class":59},"])    ",[33,165568,165569],{"class":87},"# [1, 2, 3]\n",[33,165571,165572,165574,165577,165579,165582],{"class":35,"line":146},[33,165573,72],{"class":39},[33,165575,165576],{"class":59},"(nums[:",[33,165578,1891],{"class":39},[33,165580,165581],{"class":59},"])     ",[33,165583,165584],{"class":87},"# [0, 1, 2]\n",[33,165586,165587,165589,165591,165593,165596],{"class":35,"line":267},[33,165588,72],{"class":39},[33,165590,165557],{"class":59},[33,165592,1891],{"class":39},[33,165594,165595],{"class":59},":])     ",[33,165597,165598],{"class":87},"# [3, 4, 5, 6]\n",[33,165600,165601,165603,165606,165608,165610],{"class":35,"line":275},[33,165602,72],{"class":39},[33,165604,165605],{"class":59},"(nums[::",[33,165607,1897],{"class":39},[33,165609,165566],{"class":59},[33,165611,165612],{"class":87},"# [0, 2, 4, 6]\n",[33,165614,165615,165617,165619,165621,165623,165626],{"class":35,"line":392},[33,165616,72],{"class":39},[33,165618,165605],{"class":59},[33,165620,2349],{"class":63},[33,165622,2036],{"class":39},[33,165624,165625],{"class":59},"])   ",[33,165627,165628],{"class":87},"# 反转\n",[19,165630,165631],{},"字符串切片：",[23,165633,165635],{"className":25,"code":165634,"language":27,"meta":28,"style":28},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[30,165636,165637,165646,165660],{"__ignoreMap":28},[33,165638,165639,165641,165643],{"class":35,"line":36},[33,165640,158062],{"class":59},[33,165642,64],{"class":63},[33,165644,165645],{"class":117}," \"abcdef\"\n",[33,165647,165648,165650,165652,165654,165656,165658],{"class":35,"line":43},[33,165649,72],{"class":39},[33,165651,165374],{"class":59},[33,165653,2036],{"class":39},[33,165655,2676],{"class":59},[33,165657,2111],{"class":39},[33,165659,6318],{"class":59},[33,165661,165662,165664,165667,165669,165671],{"class":35,"line":130},[33,165663,72],{"class":39},[33,165665,165666],{"class":59},"(text[::",[33,165668,2349],{"class":63},[33,165670,2036],{"class":39},[33,165672,6318],{"class":59},[14,165674,165676],{"id":165675},"_69-集合set","6.9 集合set",[19,165678,165679],{},"集合特点：",[162,165681,165682,165685,165688],{},[165,165683,165684],{},"无序。",[165,165686,165687],{},"元素不重复。",[165,165689,165690],{},"可以做交集、并集、差集。",[23,165692,165694],{"className":25,"code":165693,"language":27,"meta":28,"style":28},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[30,165695,165696,165724],{"__ignoreMap":28},[33,165697,165698,165700,165702,165704,165706,165708,165710,165712,165714,165716,165718,165720,165722],{"class":35,"line":36},[33,165699,165514],{"class":59},[33,165701,64],{"class":63},[33,165703,6109],{"class":59},[33,165705,2036],{"class":39},[33,165707,14093],{"class":59},[33,165709,1897],{"class":39},[33,165711,14093],{"class":59},[33,165713,1891],{"class":39},[33,165715,14093],{"class":59},[33,165717,1891],{"class":39},[33,165719,14093],{"class":59},[33,165721,2111],{"class":39},[33,165723,3247],{"class":59},[33,165725,165726,165728],{"class":35,"line":43},[33,165727,72],{"class":39},[33,165729,165730],{"class":59},"(nums)\n",[19,165732,165733],{},"创建空集合：",[23,165735,165737],{"className":25,"code":165736,"language":27,"meta":28,"style":28},"s = set()\n",[30,165738,165739],{"__ignoreMap":28},[33,165740,165741,165743,165745,165747],{"class":35,"line":36},[33,165742,12237],{"class":59},[33,165744,64],{"class":63},[33,165746,121357],{"class":39},[33,165748,943],{"class":59},[19,165750,160,165751,165753],{},[30,165752,34106],{}," 是空字典，不是空集合。",[19,165755,165756],{},"集合常用操作：",[23,165758,165760],{"className":25,"code":165759,"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,165761,165762,165782,165786,165795,165804,165813],{"__ignoreMap":28},[33,165763,165764,165766,165768,165770,165772,165774,165776,165778,165780],{"class":35,"line":36},[33,165765,12237],{"class":59},[33,165767,64],{"class":63},[33,165769,6109],{"class":59},[33,165771,2036],{"class":39},[33,165773,14093],{"class":59},[33,165775,1897],{"class":39},[33,165777,14093],{"class":59},[33,165779,1891],{"class":39},[33,165781,3247],{"class":59},[33,165783,165784],{"class":35,"line":43},[33,165785,127],{"emptyLinePlaceholder":126},[33,165787,165788,165791,165793],{"class":35,"line":130},[33,165789,165790],{"class":59},"s.add(",[33,165792,2111],{"class":39},[33,165794,157],{"class":59},[33,165796,165797,165800,165802],{"class":35,"line":146},[33,165798,165799],{"class":59},"s.remove(",[33,165801,1897],{"class":39},[33,165803,157],{"class":59},[33,165805,165806,165809,165811],{"class":35,"line":267},[33,165807,165808],{"class":59},"s.discard(",[33,165810,2264],{"class":39},[33,165812,157],{"class":59},[33,165814,165815,165817,165819,165821],{"class":35,"line":275},[33,165816,72],{"class":39},[33,165818,109],{"class":59},[33,165820,9018],{"class":39},[33,165822,165823],{"class":59},"(s))\n",[19,165825,165826],{},"交并差：",[23,165828,165830],{"className":25,"code":165829,"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,165831,165832,165852,165872,165876,165891,165904],{"__ignoreMap":28},[33,165833,165834,165836,165838,165840,165842,165844,165846,165848,165850],{"class":35,"line":36},[33,165835,12577],{"class":59},[33,165837,64],{"class":63},[33,165839,6109],{"class":59},[33,165841,2036],{"class":39},[33,165843,14093],{"class":59},[33,165845,1897],{"class":39},[33,165847,14093],{"class":59},[33,165849,1891],{"class":39},[33,165851,3247],{"class":59},[33,165853,165854,165856,165858,165860,165862,165864,165866,165868,165870],{"class":35,"line":43},[33,165855,12603],{"class":59},[33,165857,64],{"class":63},[33,165859,6109],{"class":59},[33,165861,1891],{"class":39},[33,165863,14093],{"class":59},[33,165865,2111],{"class":39},[33,165867,14093],{"class":59},[33,165869,2137],{"class":39},[33,165871,3247],{"class":59},[33,165873,165874],{"class":35,"line":130},[33,165875,127],{"emptyLinePlaceholder":126},[33,165877,165878,165880,165883,165885,165888],{"class":35,"line":146},[33,165879,72],{"class":39},[33,165881,165882],{"class":59},"(a ",[33,165884,2171],{"class":63},[33,165886,165887],{"class":59}," b)  ",[33,165889,165890],{"class":87},"# 交集\n",[33,165892,165893,165895,165897,165899,165901],{"class":35,"line":267},[33,165894,72],{"class":39},[33,165896,165882],{"class":59},[33,165898,2737],{"class":63},[33,165900,165887],{"class":59},[33,165902,165903],{"class":87},"# 并集\n",[33,165905,165906,165908,165910,165912,165914],{"class":35,"line":275},[33,165907,72],{"class":39},[33,165909,165882],{"class":59},[33,165911,2349],{"class":63},[33,165913,165887],{"class":59},[33,165915,165916],{"class":87},"# 差集\n",[14,165918,165920],{"id":165919},"_610-字典dict","6.10 字典dict",[19,165922,165923],{},"字典通过 key-value 保存数据。",[23,165925,165927],{"className":25,"code":165926,"language":27,"meta":28,"style":28},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[30,165928,165929,165937,165947,165958,165968],{"__ignoreMap":28},[33,165930,165931,165933,165935],{"class":35,"line":36},[33,165932,151110],{"class":59},[33,165934,64],{"class":63},[33,165936,17228],{"class":59},[33,165938,165939,165941,165943,165945],{"class":35,"line":43},[33,165940,148649],{"class":117},[33,165942,53082],{"class":59},[33,165944,151517],{"class":117},[33,165946,33116],{"class":59},[33,165948,165949,165952,165954,165956],{"class":35,"line":130},[33,165950,165951],{"class":117},"    \"age\"",[33,165953,53082],{"class":59},[33,165955,2467],{"class":39},[33,165957,33116],{"class":59},[33,165959,165960,165963,165965],{"class":35,"line":146},[33,165961,165962],{"class":117},"    \"score\"",[33,165964,53082],{"class":59},[33,165966,165967],{"class":39},"95\n",[33,165969,165970],{"class":35,"line":267},[33,165971,3247],{"class":59},[19,165973,165974],{},"获取值：",[23,165976,165978],{"className":25,"code":165977,"language":27,"meta":28,"style":28},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[30,165979,165980,165991],{"__ignoreMap":28},[33,165981,165982,165984,165987,165989],{"class":35,"line":36},[33,165983,72],{"class":39},[33,165985,165986],{"class":59},"(student[",[33,165988,64321],{"class":117},[33,165990,6318],{"class":59},[33,165992,165993,165995,165998,166000],{"class":35,"line":43},[33,165994,72],{"class":39},[33,165996,165997],{"class":59},"(student.get(",[33,165999,64321],{"class":117},[33,166001,121],{"class":59},[19,166003,17044],{},[23,166005,166007],{"className":25,"code":166006,"language":27,"meta":28,"style":28},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[30,166008,166009,166022],{"__ignoreMap":28},[33,166010,166011,166013,166016,166019],{"class":35,"line":36},[33,166012,154484],{"class":59},[33,166014,166015],{"class":117},"\"address\"",[33,166017,166018],{"class":59},"]     ",[33,166020,166021],{"class":87},"# key不存在会报错\n",[33,166023,166024,166027,166029,166031],{"class":35,"line":43},[33,166025,166026],{"class":59},"student.get(",[33,166028,166015],{"class":117},[33,166030,15372],{"class":59},[33,166032,166033],{"class":87},"# key不存在返回None\n",[19,166035,166036],{},"设置默认值：",[23,166038,166040],{"className":25,"code":166039,"language":27,"meta":28,"style":28},"print(student.get(\"address\", \"未知\"))\n",[30,166041,166042],{"__ignoreMap":28},[33,166043,166044,166046,166048,166050,166052,166055],{"class":35,"line":36},[33,166045,72],{"class":39},[33,166047,165997],{"class":59},[33,166049,166015],{"class":117},[33,166051,14093],{"class":59},[33,166053,166054],{"class":117},"\"未知\"",[33,166056,121],{"class":59},[19,166058,166059],{},"新增和修改：",[23,166061,166063],{"className":25,"code":166062,"language":27,"meta":28,"style":28},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[30,166064,166065,166078],{"__ignoreMap":28},[33,166066,166067,166069,166071,166073,166075],{"class":35,"line":36},[33,166068,154484],{"class":59},[33,166070,70766],{"class":117},[33,166072,6104],{"class":59},[33,166074,64],{"class":63},[33,166076,166077],{"class":39}," 19\n",[33,166079,166080,166082,166084,166086,166088],{"class":35,"line":43},[33,166081,154484],{"class":59},[33,166083,166015],{"class":117},[33,166085,6104],{"class":59},[33,166087,64],{"class":63},[33,166089,166090],{"class":117}," \"北京\"\n",[19,166092,166093],{},"删除：",[23,166095,166097],{"className":25,"code":166096,"language":27,"meta":28,"style":28},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[30,166098,166099,166112,166122],{"__ignoreMap":28},[33,166100,166101,166103,166105,166108,166110],{"class":35,"line":36},[33,166102,320],{"class":59},[33,166104,64],{"class":63},[33,166106,166107],{"class":59}," student.pop(",[33,166109,153100],{"class":117},[33,166111,157],{"class":59},[33,166113,166114,166116,166118,166120],{"class":35,"line":43},[33,166115,164797],{"class":63},[33,166117,153777],{"class":59},[33,166119,70766],{"class":117},[33,166121,34893],{"class":59},[33,166123,166124],{"class":35,"line":130},[33,166125,166126],{"class":59},"student.clear()\n",[14,166128,166130],{"id":166129},"_611-字典遍历","6.11 字典遍历",[19,166132,166133],{},"遍历 key：",[23,166135,166137],{"className":25,"code":166136,"language":27,"meta":28,"style":28},"for key in student:\n    print(key, student[key])\n",[30,166138,166139,166151],{"__ignoreMap":28},[33,166140,166141,166143,166146,166148],{"class":35,"line":36},[33,166142,4690],{"class":63},[33,166144,166145],{"class":59}," key ",[33,166147,27699],{"class":63},[33,166149,166150],{"class":59}," student:\n",[33,166152,166153,166155],{"class":35,"line":43},[33,166154,149],{"class":39},[33,166156,166157],{"class":59},"(key, student[key])\n",[19,166159,166160],{},"遍历 value：",[23,166162,166164],{"className":25,"code":166163,"language":27,"meta":28,"style":28},"for value in student.values():\n    print(value)\n",[30,166165,166166,166178],{"__ignoreMap":28},[33,166167,166168,166170,166173,166175],{"class":35,"line":36},[33,166169,4690],{"class":63},[33,166171,166172],{"class":59}," value ",[33,166174,27699],{"class":63},[33,166176,166177],{"class":59}," student.values():\n",[33,166179,166180,166182],{"class":35,"line":43},[33,166181,149],{"class":39},[33,166183,166184],{"class":59},"(value)\n",[19,166186,166187],{},"遍历 key 和 value：",[23,166189,166191],{"className":25,"code":166190,"language":27,"meta":28,"style":28},"for key, value in student.items():\n    print(key, value)\n",[30,166192,166193,166205],{"__ignoreMap":28},[33,166194,166195,166197,166200,166202],{"class":35,"line":36},[33,166196,4690],{"class":63},[33,166198,166199],{"class":59}," key, value ",[33,166201,27699],{"class":63},[33,166203,166204],{"class":59}," student.items():\n",[33,166206,166207,166209],{"class":35,"line":43},[33,166208,149],{"class":39},[33,166210,166211],{"class":59},"(key, value)\n",[14,166213,166215],{"id":166214},"_612-嵌套容器","6.12 嵌套容器",[19,166217,166218],{},"列表中保存字典，是项目中最常见的结构之一。",[23,166220,166222],{"className":25,"code":166221,"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,166223,166224,166232,166260,166288,166316,166320,166324,166334],{"__ignoreMap":28},[33,166225,166226,166228,166230],{"class":35,"line":36},[33,166227,161130],{"class":59},[33,166229,64],{"class":63},[33,166231,57091],{"class":59},[33,166233,166234,166236,166238,166240,166242,166244,166246,166248,166250,166252,166254,166256,166258],{"class":35,"line":43},[33,166235,150014],{"class":59},[33,166237,64321],{"class":117},[33,166239,53082],{"class":59},[33,166241,151517],{"class":117},[33,166243,14093],{"class":59},[33,166245,70766],{"class":117},[33,166247,53082],{"class":59},[33,166249,2467],{"class":39},[33,166251,14093],{"class":59},[33,166253,153100],{"class":117},[33,166255,53082],{"class":59},[33,166257,2804],{"class":39},[33,166259,6591],{"class":59},[33,166261,166262,166264,166266,166268,166270,166272,166274,166276,166278,166280,166282,166284,166286],{"class":35,"line":130},[33,166263,150014],{"class":59},[33,166265,64321],{"class":117},[33,166267,53082],{"class":59},[33,166269,152564],{"class":117},[33,166271,14093],{"class":59},[33,166273,70766],{"class":117},[33,166275,53082],{"class":59},[33,166277,2442],{"class":39},[33,166279,14093],{"class":59},[33,166281,153100],{"class":117},[33,166283,53082],{"class":59},[33,166285,2628],{"class":39},[33,166287,6591],{"class":59},[33,166289,166290,166292,166294,166296,166298,166300,166302,166304,166306,166308,166310,166312,166314],{"class":35,"line":146},[33,166291,150014],{"class":59},[33,166293,64321],{"class":117},[33,166295,53082],{"class":59},[33,166297,161145],{"class":117},[33,166299,14093],{"class":59},[33,166301,70766],{"class":117},[33,166303,53082],{"class":59},[33,166305,2492],{"class":39},[33,166307,14093],{"class":59},[33,166309,153100],{"class":117},[33,166311,53082],{"class":59},[33,166313,2224],{"class":39},[33,166315,6591],{"class":59},[33,166317,166318],{"class":35,"line":267},[33,166319,34893],{"class":59},[33,166321,166322],{"class":35,"line":275},[33,166323,127],{"emptyLinePlaceholder":126},[33,166325,166326,166328,166330,166332],{"class":35,"line":392},[33,166327,4690],{"class":63},[33,166329,153765],{"class":59},[33,166331,27699],{"class":63},[33,166333,153770],{"class":59},[33,166335,166336,166338,166340,166342,166345,166347],{"class":35,"line":406},[33,166337,149],{"class":39},[33,166339,165986],{"class":59},[33,166341,64321],{"class":117},[33,166343,166344],{"class":59},"], student[",[33,166346,153100],{"class":117},[33,166348,6318],{"class":59},[19,166350,166351],{},"统计平均分：",[23,166353,166355],{"className":25,"code":166354,"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,166356,166357,166365,166369,166379,166391,166395,166410],{"__ignoreMap":28},[33,166358,166359,166361,166363],{"class":35,"line":36},[33,166360,158874],{"class":59},[33,166362,64],{"class":63},[33,166364,48978],{"class":39},[33,166366,166367],{"class":35,"line":43},[33,166368,127],{"emptyLinePlaceholder":126},[33,166370,166371,166373,166375,166377],{"class":35,"line":130},[33,166372,4690],{"class":63},[33,166374,153765],{"class":59},[33,166376,27699],{"class":63},[33,166378,153770],{"class":59},[33,166380,166381,166383,166385,166387,166389],{"class":35,"line":146},[33,166382,160721],{"class":59},[33,166384,11136],{"class":63},[33,166386,153777],{"class":59},[33,166388,153100],{"class":117},[33,166390,34893],{"class":59},[33,166392,166393],{"class":35,"line":267},[33,166394,127],{"emptyLinePlaceholder":126},[33,166396,166397,166399,166401,166403,166405,166407],{"class":35,"line":275},[33,166398,165188],{"class":59},[33,166400,64],{"class":63},[33,166402,165193],{"class":59},[33,166404,2401],{"class":63},[33,166406,8991],{"class":39},[33,166408,166409],{"class":59},"(students)\n",[33,166411,166412,166414,166416,166418,166420,166422,166424,166426,166428,166430],{"class":35,"line":392},[33,166413,72],{"class":39},[33,166415,109],{"class":59},[33,166417,999],{"class":63},[33,166419,165211],{"class":117},[33,166421,1005],{"class":39},[33,166423,165216],{"class":59},[33,166425,1600],{"class":63},[33,166427,1011],{"class":39},[33,166429,1014],{"class":117},[33,166431,157],{"class":59},[19,166433,166434],{},"查找学生：",[23,166436,166438],{"className":25,"code":166437,"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,166439,166440,166455,166459,166469,166483,166489,166493,166499],{"__ignoreMap":28},[33,166441,166442,166444,166446,166448,166450,166453],{"class":35,"line":36},[33,166443,113215],{"class":59},[33,166445,64],{"class":63},[33,166447,539],{"class":39},[33,166449,109],{"class":59},[33,166451,166452],{"class":117},"\"请输入学生姓名:\"",[33,166454,157],{"class":59},[33,166456,166457],{"class":35,"line":43},[33,166458,127],{"emptyLinePlaceholder":126},[33,166460,166461,166463,166465,166467],{"class":35,"line":130},[33,166462,4690],{"class":63},[33,166464,153765],{"class":59},[33,166466,27699],{"class":63},[33,166468,153770],{"class":59},[33,166470,166471,166473,166475,166477,166479,166481],{"class":35,"line":146},[33,166472,567],{"class":63},[33,166474,153777],{"class":59},[33,166476,64321],{"class":117},[33,166478,6104],{"class":59},[33,166480,573],{"class":63},[33,166482,161846],{"class":59},[33,166484,166485,166487],{"class":35,"line":267},[33,166486,583],{"class":39},[33,166488,151671],{"class":59},[33,166490,166491],{"class":35,"line":275},[33,166492,33277],{"class":63},[33,166494,166495,166497],{"class":35,"line":392},[33,166496,270],{"class":63},[33,166498,143],{"class":59},[33,166500,166501,166503,166505,166508],{"class":35,"line":406},[33,166502,149],{"class":39},[33,166504,109],{"class":59},[33,166506,166507],{"class":117},"\"没有找到\"",[33,166509,157],{"class":59},[14,166511,166513],{"id":166512},"_613-容器通用操作","6.13 容器通用操作",[19,166515,166516],{},"长度：",[23,166518,166520],{"className":25,"code":166519,"language":27,"meta":28,"style":28},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[30,166521,166522,166541,166551],{"__ignoreMap":28},[33,166523,166524,166526,166529,166531,166533,166535,166537,166539],{"class":35,"line":36},[33,166525,9018],{"class":39},[33,166527,166528],{"class":59},"([",[33,166530,2036],{"class":39},[33,166532,14093],{"class":59},[33,166534,1897],{"class":39},[33,166536,14093],{"class":59},[33,166538,1891],{"class":39},[33,166540,6318],{"class":59},[33,166542,166543,166545,166547,166549],{"class":35,"line":43},[33,166544,9018],{"class":39},[33,166546,109],{"class":59},[33,166548,157500],{"class":117},[33,166550,157],{"class":59},[33,166552,166553,166555,166558,166560,166562,166564],{"class":35,"line":130},[33,166554,9018],{"class":39},[33,166556,166557],{"class":59},"({",[33,166559,64321],{"class":117},[33,166561,53082],{"class":59},[33,166563,151517],{"class":117},[33,166565,166566],{"class":59},"})\n",[19,166568,166569],{},"最大最小：",[23,166571,166573],{"className":25,"code":166572,"language":27,"meta":28,"style":28},"max([1, 2, 3])\nmin([1, 2, 3])\n",[30,166574,166575,166593],{"__ignoreMap":28},[33,166576,166577,166579,166581,166583,166585,166587,166589,166591],{"class":35,"line":36},[33,166578,7675],{"class":39},[33,166580,166528],{"class":59},[33,166582,2036],{"class":39},[33,166584,14093],{"class":59},[33,166586,1897],{"class":39},[33,166588,14093],{"class":59},[33,166590,1891],{"class":39},[33,166592,6318],{"class":59},[33,166594,166595,166598,166600,166602,166604,166606,166608,166610],{"class":35,"line":43},[33,166596,166597],{"class":39},"min",[33,166599,166528],{"class":59},[33,166601,2036],{"class":39},[33,166603,14093],{"class":59},[33,166605,1897],{"class":39},[33,166607,14093],{"class":59},[33,166609,1891],{"class":39},[33,166611,6318],{"class":59},[19,166613,166614],{},"求和：",[23,166616,166618],{"className":25,"code":166617,"language":27,"meta":28,"style":28},"sum([1, 2, 3])\n",[30,166619,166620],{"__ignoreMap":28},[33,166621,166622,166625,166627,166629,166631,166633,166635,166637],{"class":35,"line":36},[33,166623,166624],{"class":39},"sum",[33,166626,166528],{"class":59},[33,166628,2036],{"class":39},[33,166630,14093],{"class":59},[33,166632,1897],{"class":39},[33,166634,14093],{"class":59},[33,166636,1891],{"class":39},[33,166638,6318],{"class":59},[19,166640,164885],{},[23,166642,166644],{"className":25,"code":166643,"language":27,"meta":28,"style":28},"sorted([3, 1, 2])\n",[30,166645,166646],{"__ignoreMap":28},[33,166647,166648,166651,166653,166655,166657,166659,166661,166663],{"class":35,"line":36},[33,166649,166650],{"class":39},"sorted",[33,166652,166528],{"class":59},[33,166654,1891],{"class":39},[33,166656,14093],{"class":59},[33,166658,2036],{"class":39},[33,166660,14093],{"class":59},[33,166662,1897],{"class":39},[33,166664,6318],{"class":59},[19,166666,166667],{},"类型转换：",[23,166669,166671],{"className":25,"code":166670,"language":27,"meta":28,"style":28},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[30,166672,166673,166683,166701],{"__ignoreMap":28},[33,166674,166675,166677,166679,166681],{"class":35,"line":36},[33,166676,155694],{"class":39},[33,166678,109],{"class":59},[33,166680,157500],{"class":117},[33,166682,157],{"class":59},[33,166684,166685,166687,166689,166691,166693,166695,166697,166699],{"class":35,"line":43},[33,166686,156888],{"class":39},[33,166688,166528],{"class":59},[33,166690,2036],{"class":39},[33,166692,14093],{"class":59},[33,166694,1897],{"class":39},[33,166696,14093],{"class":59},[33,166698,1891],{"class":39},[33,166700,6318],{"class":59},[33,166702,166703,166705,166707,166709,166711,166713,166715,166717,166719,166721],{"class":35,"line":130},[33,166704,953],{"class":39},[33,166706,166528],{"class":59},[33,166708,2036],{"class":39},[33,166710,14093],{"class":59},[33,166712,2036],{"class":39},[33,166714,14093],{"class":59},[33,166716,1897],{"class":39},[33,166718,14093],{"class":59},[33,166720,1891],{"class":39},[33,166722,6318],{"class":59},[19,166724,166725],{},"成员判断：",[23,166727,166729],{"className":25,"code":166728,"language":27,"meta":28,"style":28},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[30,166730,166731,166748,166772],{"__ignoreMap":28},[33,166732,166733,166735,166737,166740,166743,166746],{"class":35,"line":36},[33,166734,72],{"class":39},[33,166736,109],{"class":59},[33,166738,166739],{"class":117},"\"a\"",[33,166741,166742],{"class":63}," in",[33,166744,166745],{"class":117}," \"abc\"",[33,166747,157],{"class":59},[33,166749,166750,166752,166754,166756,166758,166760,166762,166764,166766,166768,166770],{"class":35,"line":43},[33,166751,72],{"class":39},[33,166753,109],{"class":59},[33,166755,2036],{"class":39},[33,166757,166742],{"class":63},[33,166759,53871],{"class":59},[33,166761,2036],{"class":39},[33,166763,14093],{"class":59},[33,166765,1897],{"class":39},[33,166767,14093],{"class":59},[33,166769,1891],{"class":39},[33,166771,6318],{"class":59},[33,166773,166774,166776,166778,166780,166782,166784,166786,166788,166790],{"class":35,"line":130},[33,166775,72],{"class":39},[33,166777,109],{"class":59},[33,166779,64321],{"class":117},[33,166781,166742],{"class":63},[33,166783,6109],{"class":59},[33,166785,64321],{"class":117},[33,166787,53082],{"class":59},[33,166789,151517],{"class":117},[33,166791,166566],{"class":59},[14,166793,166795],{"id":166794},"_614-推导式","6.14 推导式",[19,166797,166798],{},"推导式用于快速生成容器。",[19,166800,166801],{},"列表推导式：",[23,166803,166805],{"className":25,"code":166804,"language":27,"meta":28,"style":28},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[30,166806,166807,166834],{"__ignoreMap":28},[33,166808,166809,166811,166813,166816,166818,166820,166822,166824,166826,166828,166830,166832],{"class":35,"line":36},[33,166810,165514],{"class":59},[33,166812,64],{"class":63},[33,166814,166815],{"class":59}," [i ",[33,166817,4690],{"class":63},[33,166819,11097],{"class":59},[33,166821,27699],{"class":63},[33,166823,34091],{"class":39},[33,166825,109],{"class":59},[33,166827,2036],{"class":39},[33,166829,14093],{"class":59},[33,166831,2162],{"class":39},[33,166833,98939],{"class":59},[33,166835,166836,166838],{"class":35,"line":43},[33,166837,72],{"class":39},[33,166839,165730],{"class":59},[19,166841,166842],{},"带条件：",[23,166844,166846],{"className":25,"code":166845,"language":27,"meta":28,"style":28},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[30,166847,166848,166889],{"__ignoreMap":28},[33,166849,166850,166853,166855,166857,166859,166861,166863,166865,166867,166869,166871,166873,166875,166877,166879,166881,166883,166885,166887],{"class":35,"line":36},[33,166851,166852],{"class":59},"even_nums ",[33,166854,64],{"class":63},[33,166856,166815],{"class":59},[33,166858,4690],{"class":63},[33,166860,11097],{"class":59},[33,166862,27699],{"class":63},[33,166864,34091],{"class":39},[33,166866,109],{"class":59},[33,166868,2036],{"class":39},[33,166870,14093],{"class":59},[33,166872,2155],{"class":39},[33,166874,15372],{"class":59},[33,166876,133],{"class":63},[33,166878,11097],{"class":59},[33,166880,2146],{"class":63},[33,166882,16413],{"class":39},[33,166884,1644],{"class":63},[33,166886,829],{"class":39},[33,166888,34893],{"class":59},[33,166890,166891,166893],{"class":35,"line":43},[33,166892,72],{"class":39},[33,166894,166895],{"class":59},"(even_nums)\n",[19,166897,166898],{},"字典推导式：",[23,166900,166902],{"className":25,"code":166901,"language":27,"meta":28,"style":28},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[30,166903,166904,166938],{"__ignoreMap":28},[33,166905,166906,166909,166911,166914,166916,166918,166921,166923,166925,166927,166929,166931,166933,166935],{"class":35,"line":36},[33,166907,166908],{"class":59},"squares ",[33,166910,64],{"class":63},[33,166912,166913],{"class":59}," {i: i ",[33,166915,12319],{"class":63},[33,166917,16413],{"class":39},[33,166919,166920],{"class":63}," for",[33,166922,11097],{"class":59},[33,166924,27699],{"class":63},[33,166926,34091],{"class":39},[33,166928,109],{"class":59},[33,166930,2036],{"class":39},[33,166932,14093],{"class":59},[33,166934,2162],{"class":39},[33,166936,166937],{"class":59},")}\n",[33,166939,166940,166942],{"class":35,"line":43},[33,166941,72],{"class":39},[33,166943,166944],{"class":59},"(squares)\n",[19,166946,166947],{},"集合推导式：",[23,166949,166951],{"className":25,"code":166950,"language":27,"meta":28,"style":28},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[30,166952,166953,166974],{"__ignoreMap":28},[33,166954,166955,166958,166960,166963,166965,166967,166969,166972],{"class":35,"line":36},[33,166956,166957],{"class":59},"chars ",[33,166959,64],{"class":63},[33,166961,166962],{"class":59}," {ch ",[33,166964,4690],{"class":63},[33,166966,161106],{"class":59},[33,166968,27699],{"class":63},[33,166970,166971],{"class":117}," \"hello\"",[33,166973,3247],{"class":59},[33,166975,166976,166978],{"class":35,"line":43},[33,166977,72],{"class":39},[33,166979,166980],{"class":59},"(chars)\n",[19,166982,166983],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166985,166987],{"id":166986},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[23,166989,166991],{"className":25,"code":166990,"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,166992,166993,167001,167021,167041,167061,167081,167085,167089,167097,167111,167120,167124,167134,167146,167150,167170,167179,167183,167199,167204,167208,167222,167226,167248,167284],{"__ignoreMap":28},[33,166994,166995,166997,166999],{"class":35,"line":36},[33,166996,161130],{"class":59},[33,166998,64],{"class":63},[33,167000,57091],{"class":59},[33,167002,167003,167005,167007,167009,167011,167013,167015,167017,167019],{"class":35,"line":43},[33,167004,150014],{"class":59},[33,167006,64321],{"class":117},[33,167008,53082],{"class":59},[33,167010,151517],{"class":117},[33,167012,14093],{"class":59},[33,167014,153100],{"class":117},[33,167016,53082],{"class":59},[33,167018,2804],{"class":39},[33,167020,6591],{"class":59},[33,167022,167023,167025,167027,167029,167031,167033,167035,167037,167039],{"class":35,"line":130},[33,167024,150014],{"class":59},[33,167026,64321],{"class":117},[33,167028,53082],{"class":59},[33,167030,152564],{"class":117},[33,167032,14093],{"class":59},[33,167034,153100],{"class":117},[33,167036,53082],{"class":59},[33,167038,2628],{"class":39},[33,167040,6591],{"class":59},[33,167042,167043,167045,167047,167049,167051,167053,167055,167057,167059],{"class":35,"line":146},[33,167044,150014],{"class":59},[33,167046,64321],{"class":117},[33,167048,53082],{"class":59},[33,167050,161145],{"class":117},[33,167052,14093],{"class":59},[33,167054,153100],{"class":117},[33,167056,53082],{"class":59},[33,167058,2224],{"class":39},[33,167060,6591],{"class":59},[33,167062,167063,167065,167067,167069,167071,167073,167075,167077,167079],{"class":35,"line":267},[33,167064,150014],{"class":59},[33,167066,64321],{"class":117},[33,167068,53082],{"class":59},[33,167070,164724],{"class":117},[33,167072,14093],{"class":59},[33,167074,153100],{"class":117},[33,167076,53082],{"class":59},[33,167078,2699],{"class":39},[33,167080,6591],{"class":59},[33,167082,167083],{"class":35,"line":275},[33,167084,34893],{"class":59},[33,167086,167087],{"class":35,"line":392},[33,167088,127],{"emptyLinePlaceholder":126},[33,167090,167091,167093,167095],{"class":35,"line":406},[33,167092,158874],{"class":59},[33,167094,64],{"class":63},[33,167096,48978],{"class":39},[33,167098,167099,167102,167104,167107,167109],{"class":35,"line":418},[33,167100,167101],{"class":59},"max_student ",[33,167103,64],{"class":63},[33,167105,167106],{"class":59}," students[",[33,167108,2010],{"class":39},[33,167110,34893],{"class":59},[33,167112,167113,167116,167118],{"class":35,"line":425},[33,167114,167115],{"class":59},"passed ",[33,167117,64],{"class":63},[33,167119,53483],{"class":59},[33,167121,167122],{"class":35,"line":1147},[33,167123,127],{"emptyLinePlaceholder":126},[33,167125,167126,167128,167130,167132],{"class":35,"line":1329},[33,167127,4690],{"class":63},[33,167129,153765],{"class":59},[33,167131,27699],{"class":63},[33,167133,153770],{"class":59},[33,167135,167136,167138,167140,167142,167144],{"class":35,"line":1341},[33,167137,160721],{"class":59},[33,167139,11136],{"class":63},[33,167141,153777],{"class":59},[33,167143,153100],{"class":117},[33,167145,34893],{"class":59},[33,167147,167148],{"class":35,"line":1348},[33,167149,127],{"emptyLinePlaceholder":126},[33,167151,167152,167154,167156,167158,167160,167162,167165,167167],{"class":35,"line":1529},[33,167153,567],{"class":63},[33,167155,153777],{"class":59},[33,167157,153100],{"class":117},[33,167159,6104],{"class":59},[33,167161,2775],{"class":63},[33,167163,167164],{"class":59}," max_student[",[33,167166,153100],{"class":117},[33,167168,167169],{"class":59},"]:\n",[33,167171,167172,167175,167177],{"class":35,"line":1546},[33,167173,167174],{"class":59},"        max_student ",[33,167176,64],{"class":63},[33,167178,153793],{"class":59},[33,167180,167181],{"class":35,"line":1551},[33,167182,127],{"emptyLinePlaceholder":126},[33,167184,167185,167187,167189,167191,167193,167195,167197],{"class":35,"line":1566},[33,167186,567],{"class":63},[33,167188,153777],{"class":59},[33,167190,153100],{"class":117},[33,167192,6104],{"class":59},[33,167194,78],{"class":63},[33,167196,401],{"class":39},[33,167198,143],{"class":59},[33,167200,167201],{"class":35,"line":1578},[33,167202,167203],{"class":59},"        passed.append(student)\n",[33,167205,167206],{"class":35,"line":1583},[33,167207,127],{"emptyLinePlaceholder":126},[33,167209,167210,167212,167214,167216,167218,167220],{"class":35,"line":3369},[33,167211,165188],{"class":59},[33,167213,64],{"class":63},[33,167215,165193],{"class":59},[33,167217,2401],{"class":63},[33,167219,8991],{"class":39},[33,167221,166409],{"class":59},[33,167223,167224],{"class":35,"line":3396},[33,167225,127],{"emptyLinePlaceholder":126},[33,167227,167228,167230,167232,167234,167236,167238,167240,167242,167244,167246],{"class":35,"line":3401},[33,167229,72],{"class":39},[33,167231,109],{"class":59},[33,167233,999],{"class":63},[33,167235,165211],{"class":117},[33,167237,1005],{"class":39},[33,167239,165216],{"class":59},[33,167241,1600],{"class":63},[33,167243,1011],{"class":39},[33,167245,1014],{"class":117},[33,167247,157],{"class":59},[33,167249,167250,167252,167254,167256,167259,167261,167264,167266,167268,167270,167272,167274,167276,167278,167280,167282],{"class":35,"line":3418},[33,167251,72],{"class":39},[33,167253,109],{"class":59},[33,167255,999],{"class":63},[33,167257,167258],{"class":117},"\"最高分学生:",[33,167260,1005],{"class":39},[33,167262,167263],{"class":59},"max_student[",[33,167265,154507],{"class":117},[33,167267,2756],{"class":59},[33,167269,1011],{"class":39},[33,167271,6109],{"class":39},[33,167273,167263],{"class":59},[33,167275,154545],{"class":117},[33,167277,2756],{"class":59},[33,167279,1011],{"class":39},[33,167281,1014],{"class":117},[33,167283,157],{"class":59},[33,167285,167286,167288,167290,167292,167295,167298,167301,167303,167305],{"class":35,"line":3423},[33,167287,72],{"class":39},[33,167289,109],{"class":59},[33,167291,999],{"class":63},[33,167293,167294],{"class":117},"\"及格人数:",[33,167296,167297],{"class":39},"{len",[33,167299,167300],{"class":59},"(passed)",[33,167302,1011],{"class":39},[33,167304,1014],{"class":117},[33,167306,157],{"class":59},[14,167308,167310],{"id":167309},"_616-易错点","6.16 易错点",[162,167312,167313,167316,167319,167322,167328,167337],{},[165,167314,167315],{},"列表可变，元组和字符串不可变。",[165,167317,167318],{},"切片结束位置不包含。",[165,167320,167321],{},"字典通过 key 取值，不是通过索引。",[165,167323,167324,167325,1628],{},"空集合要用 ",[30,167326,167327],{},"set()",[165,167329,106004,167330,167333,167334,1628],{},[30,167331,167332],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[30,167335,167336],{},"get()",[165,167338,167339],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167341,167343],{"id":167342},"_617-本章练习","6.17 本章练习",[162,167345,167346,167349,167352,167355,167358],{},[165,167347,167348],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[165,167350,167351],{},"输入一句话，统计每个字符出现次数。",[165,167353,167354],{},"使用集合去除列表中的重复元素。",[165,167356,167357],{},"使用字典保存一个学生的信息，并实现修改成绩。",[165,167359,167360],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1729,167362,167363],{},"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":43,"depth":43,"links":167365},[167366,167367,167368,167369,167370,167371,167372,167373,167374,167375,167376,167377,167378,167379,167380,167381,167382],{"id":164346,"depth":43,"text":164347},{"id":164463,"depth":43,"text":164464},{"id":164553,"depth":43,"text":164554},{"id":164677,"depth":43,"text":164678},{"id":165040,"depth":43,"text":165041},{"id":165227,"depth":43,"text":165228},{"id":165346,"depth":43,"text":165347},{"id":165488,"depth":43,"text":165489},{"id":165675,"depth":43,"text":165676},{"id":165919,"depth":43,"text":165920},{"id":166129,"depth":43,"text":166130},{"id":166214,"depth":43,"text":166215},{"id":166512,"depth":43,"text":166513},{"id":166794,"depth":43,"text":166795},{"id":166986,"depth":43,"text":166987},{"id":167309,"depth":43,"text":167310},{"id":167342,"depth":43,"text":167343},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164338,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167389,"title":167390,"body":167391,"description":1751,"extension":1752,"meta":169563,"navigation":126,"path":169564,"seo":169565,"stem":169566,"__hash__":169567},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167392,"toc":169538},[167393,167396,167400,167403,167483,167486,167507,167510,167514,167517,167579,167582,167599,167603,167606,167651,167653,167661,167665,167668,167750,167753,167756,167781,167784,167807,167811,167814,167816,167878,167881,167883,167934,167938,167942,167948,168053,168057,168063,168134,168138,168141,168209,168212,168292,168296,168302,168338,168341,168344,168454,168460,168464,168467,168539,168542,168546,168550,168555,168617,168621,168626,168694,168698,168703,168819,168823,168826,168906,168909,168913,168916,169020,169022,169037,169040,169044,169182,169190,169194,169196,169207,169209,169467,169471,169503,169507,169535],[10,167394,167390],{"id":167395},"_7-函数进阶",[14,167397,167399],{"id":167398},"_71-多返回值","7.1 多返回值",[19,167401,167402],{},"Python 函数可以返回多个值，本质上返回的是元组。",[23,167404,167406],{"className":25,"code":167405,"language":27,"meta":28,"style":28},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[30,167407,167408,167417,167425,167433,167442,167449,167453,167457,167466,167472],{"__ignoreMap":28},[33,167409,167410,167412,167415],{"class":35,"line":36},[33,167411,33597],{"class":63},[33,167413,167414],{"class":3632}," get_info",[33,167416,33603],{"class":59},[33,167418,167419,167421,167423],{"class":35,"line":43},[33,167420,153998],{"class":59},[33,167422,64],{"class":63},[33,167424,150982],{"class":117},[33,167426,167427,167429,167431],{"class":35,"line":130},[33,167428,154013],{"class":59},[33,167430,64],{"class":63},[33,167432,67],{"class":39},[33,167434,167435,167437,167439],{"class":35,"line":146},[33,167436,154027],{"class":59},[33,167438,64],{"class":63},[33,167440,167441],{"class":39}," 95\n",[33,167443,167444,167446],{"class":35,"line":267},[33,167445,5752],{"class":63},[33,167447,167448],{"class":59}," name, age, score\n",[33,167450,167451],{"class":35,"line":275},[33,167452,127],{"emptyLinePlaceholder":126},[33,167454,167455],{"class":35,"line":392},[33,167456,127],{"emptyLinePlaceholder":126},[33,167458,167459,167461,167463],{"class":35,"line":406},[33,167460,162720],{"class":59},[33,167462,64],{"class":63},[33,167464,167465],{"class":59}," get_info()\n",[33,167467,167468,167470],{"class":35,"line":418},[33,167469,72],{"class":39},[33,167471,78226],{"class":59},[33,167473,167474,167476,167478,167480],{"class":35,"line":425},[33,167475,72],{"class":39},[33,167477,109],{"class":59},[33,167479,104745],{"class":39},[33,167481,167482],{"class":59},"(result))\n",[19,167484,167485],{},"可以直接解包：",[23,167487,167489],{"className":25,"code":167488,"language":27,"meta":28,"style":28},"name, age, score = get_info()\nprint(name, age, score)\n",[30,167490,167491,167500],{"__ignoreMap":28},[33,167492,167493,167496,167498],{"class":35,"line":36},[33,167494,167495],{"class":59},"name, age, score ",[33,167497,64],{"class":63},[33,167499,167465],{"class":59},[33,167501,167502,167504],{"class":35,"line":43},[33,167503,72],{"class":39},[33,167505,167506],{"class":59},"(name, age, score)\n",[19,167508,167509],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167511,167513],{"id":167512},"_72-位置参数","7.2 位置参数",[19,167515,167516],{},"位置参数按顺序传递。",[23,167518,167520],{"className":25,"code":167519,"language":27,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[30,167521,167522,167530,167558,167562,167566],{"__ignoreMap":28},[33,167523,167524,167526,167528],{"class":35,"line":36},[33,167525,33597],{"class":63},[33,167527,151001],{"class":3632},[33,167529,151004],{"class":59},[33,167531,167532,167534,167536,167538,167540,167542,167544,167546,167548,167550,167552,167554,167556],{"class":35,"line":43},[33,167533,149],{"class":39},[33,167535,109],{"class":59},[33,167537,999],{"class":63},[33,167539,151015],{"class":117},[33,167541,1005],{"class":39},[33,167543,1008],{"class":59},[33,167545,1011],{"class":39},[33,167547,151024],{"class":117},[33,167549,1005],{"class":39},[33,167551,71863],{"class":59},[33,167553,1011],{"class":39},[33,167555,151033],{"class":117},[33,167557,157],{"class":59},[33,167559,167560],{"class":35,"line":130},[33,167561,127],{"emptyLinePlaceholder":126},[33,167563,167564],{"class":35,"line":146},[33,167565,127],{"emptyLinePlaceholder":126},[33,167567,167568,167571,167573,167575,167577],{"class":35,"line":267},[33,167569,167570],{"class":59},"introduce(",[33,167572,151517],{"class":117},[33,167574,14093],{"class":59},[33,167576,2467],{"class":39},[33,167578,157],{"class":59},[19,167580,167581],{},"顺序错了就会得到错误含义：",[23,167583,167585],{"className":25,"code":167584,"language":27,"meta":28,"style":28},"introduce(18, \"小明\")\n",[30,167586,167587],{"__ignoreMap":28},[33,167588,167589,167591,167593,167595,167597],{"class":35,"line":36},[33,167590,167570],{"class":59},[33,167592,2467],{"class":39},[33,167594,14093],{"class":59},[33,167596,151517],{"class":117},[33,167598,157],{"class":59},[14,167600,167602],{"id":167601},"_73-关键字参数","7.3 关键字参数",[19,167604,167605],{},"关键字参数按参数名传递。",[23,167607,167609],{"className":25,"code":167608,"language":27,"meta":28,"style":28},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[30,167610,167611,167631],{"__ignoreMap":28},[33,167612,167613,167615,167617,167619,167621,167623,167625,167627,167629],{"class":35,"line":36},[33,167614,167570],{"class":59},[33,167616,1008],{"class":6877},[33,167618,64],{"class":63},[33,167620,151517],{"class":117},[33,167622,14093],{"class":59},[33,167624,71863],{"class":6877},[33,167626,64],{"class":63},[33,167628,2467],{"class":39},[33,167630,157],{"class":59},[33,167632,167633,167635,167637,167639,167641,167643,167645,167647,167649],{"class":35,"line":43},[33,167634,167570],{"class":59},[33,167636,71863],{"class":6877},[33,167638,64],{"class":63},[33,167640,2467],{"class":39},[33,167642,14093],{"class":59},[33,167644,1008],{"class":6877},[33,167646,64],{"class":63},[33,167648,151517],{"class":117},[33,167650,157],{"class":59},[19,167652,119569],{},[162,167654,167655,167658],{},[165,167656,167657],{},"顺序不容易错。",[165,167659,167660],{},"调用时可读性更强。",[14,167662,167664],{"id":167663},"_74-默认参数","7.4 默认参数",[19,167666,167667],{},"默认参数给参数设置默认值。",[23,167669,167671],{"className":25,"code":167670,"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,167672,167673,167689,167719,167723,167727,167737],{"__ignoreMap":28},[33,167674,167675,167677,167679,167682,167684,167687],{"class":35,"line":36},[33,167676,33597],{"class":63},[33,167678,123727],{"class":3632},[33,167680,167681],{"class":59},"(host, port",[33,167683,64],{"class":63},[33,167685,167686],{"class":39},"3306",[33,167688,32437],{"class":59},[33,167690,167691,167693,167695,167697,167700,167702,167704,167706,167708,167710,167713,167715,167717],{"class":35,"line":43},[33,167692,149],{"class":39},[33,167694,109],{"class":59},[33,167696,999],{"class":63},[33,167698,167699],{"class":117},"\"连接",[33,167701,1005],{"class":39},[33,167703,29051],{"class":59},[33,167705,1011],{"class":39},[33,167707,2676],{"class":117},[33,167709,1005],{"class":39},[33,167711,167712],{"class":59},"port",[33,167714,1011],{"class":39},[33,167716,1014],{"class":117},[33,167718,157],{"class":59},[33,167720,167721],{"class":35,"line":130},[33,167722,127],{"emptyLinePlaceholder":126},[33,167724,167725],{"class":35,"line":146},[33,167726,127],{"emptyLinePlaceholder":126},[33,167728,167729,167732,167735],{"class":35,"line":267},[33,167730,167731],{"class":59},"connect(",[33,167733,167734],{"class":117},"\"localhost\"",[33,167736,157],{"class":59},[33,167738,167739,167741,167743,167745,167748],{"class":35,"line":275},[33,167740,167731],{"class":59},[33,167742,167734],{"class":117},[33,167744,14093],{"class":59},[33,167746,167747],{"class":39},"6379",[33,167749,157],{"class":59},[19,167751,167752],{},"注意：默认参数必须放在非默认参数后面。",[19,167754,167755],{},"错误：",[23,167757,167759],{"className":25,"code":167758,"language":27,"meta":28,"style":28},"def connect(port=3306, host):\n    pass\n",[30,167760,167761,167777],{"__ignoreMap":28},[33,167762,167763,167765,167767,167770,167772,167774],{"class":35,"line":36},[33,167764,33597],{"class":63},[33,167766,123727],{"class":3632},[33,167768,167769],{"class":59},"(port",[33,167771,64],{"class":63},[33,167773,167686],{"class":39},[33,167775,167776],{"class":59},", host):\n",[33,167778,167779],{"class":35,"line":43},[33,167780,151166],{"class":63},[19,167782,167783],{},"正确：",[23,167785,167787],{"className":25,"code":167786,"language":27,"meta":28,"style":28},"def connect(host, port=3306):\n    pass\n",[30,167788,167789,167803],{"__ignoreMap":28},[33,167790,167791,167793,167795,167797,167799,167801],{"class":35,"line":36},[33,167792,33597],{"class":63},[33,167794,123727],{"class":3632},[33,167796,167681],{"class":59},[33,167798,64],{"class":63},[33,167800,167686],{"class":39},[33,167802,32437],{"class":59},[33,167804,167805],{"class":35,"line":43},[33,167806,151166],{"class":63},[14,167808,167810],{"id":167809},"_75-默认参数的坑","7.5 默认参数的坑",[19,167812,167813],{},"不要使用可变对象作为默认参数。",[19,167815,181],{},[23,167817,167819],{"className":25,"code":167818,"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,167820,167821,167836,167841,167848,167852,167856,167867],{"__ignoreMap":28},[33,167822,167823,167825,167828,167831,167833],{"class":35,"line":36},[33,167824,33597],{"class":63},[33,167826,167827],{"class":3632}," add_item",[33,167829,167830],{"class":59},"(item, items",[33,167832,64],{"class":63},[33,167834,167835],{"class":59},"[]):\n",[33,167837,167838],{"class":35,"line":43},[33,167839,167840],{"class":59},"    items.append(item)\n",[33,167842,167843,167845],{"class":35,"line":130},[33,167844,5752],{"class":63},[33,167846,167847],{"class":59}," items\n",[33,167849,167850],{"class":35,"line":146},[33,167851,127],{"emptyLinePlaceholder":126},[33,167853,167854],{"class":35,"line":267},[33,167855,127],{"emptyLinePlaceholder":126},[33,167857,167858,167860,167863,167865],{"class":35,"line":275},[33,167859,72],{"class":39},[33,167861,167862],{"class":59},"(add_item(",[33,167864,166739],{"class":117},[33,167866,121],{"class":59},[33,167868,167869,167871,167873,167876],{"class":35,"line":392},[33,167870,72],{"class":39},[33,167872,167862],{"class":59},[33,167874,167875],{"class":117},"\"b\"",[33,167877,121],{"class":59},[19,167879,167880],{},"第二次调用会复用第一次的列表。",[19,167882,157508],{},[23,167884,167886],{"className":25,"code":167885,"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,167887,167888,167902,167915,167924,167928],{"__ignoreMap":28},[33,167889,167890,167892,167894,167896,167898,167900],{"class":35,"line":36},[33,167891,33597],{"class":63},[33,167893,167827],{"class":3632},[33,167895,167830],{"class":59},[33,167897,64],{"class":63},[33,167899,97325],{"class":39},[33,167901,32437],{"class":59},[33,167903,167904,167906,167909,167911,167913],{"class":35,"line":43},[33,167905,567],{"class":63},[33,167907,167908],{"class":59}," items ",[33,167910,40574],{"class":63},[33,167912,40579],{"class":39},[33,167914,143],{"class":59},[33,167916,167917,167920,167922],{"class":35,"line":130},[33,167918,167919],{"class":59},"        items ",[33,167921,64],{"class":63},[33,167923,53483],{"class":59},[33,167925,167926],{"class":35,"line":146},[33,167927,167840],{"class":59},[33,167929,167930,167932],{"class":35,"line":267},[33,167931,5752],{"class":63},[33,167933,167847],{"class":59},[14,167935,167937],{"id":167936},"_76-不定长参数","7.6 不定长参数",[633,167939,167941],{"id":167940},"_761-args","7.6.1 *args",[19,167943,167944,167947],{},[30,167945,167946],{},"*args"," 接收任意数量的位置参数，得到元组。",[23,167949,167951],{"className":25,"code":167950,"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,167952,167953,167966,167974,167985,167994,168000,168004,168008,168027],{"__ignoreMap":28},[33,167954,167955,167957,167959,167961,167963],{"class":35,"line":36},[33,167956,33597],{"class":63},[33,167958,6870],{"class":3632},[33,167960,109],{"class":59},[33,167962,1540],{"class":63},[33,167964,167965],{"class":59},"args):\n",[33,167967,167968,167970,167972],{"class":35,"line":43},[33,167969,160721],{"class":59},[33,167971,64],{"class":63},[33,167973,48978],{"class":39},[33,167975,167976,167978,167980,167982],{"class":35,"line":130},[33,167977,4864],{"class":63},[33,167979,157800],{"class":59},[33,167981,27699],{"class":63},[33,167983,167984],{"class":59}," args:\n",[33,167986,167987,167989,167991],{"class":35,"line":146},[33,167988,161396],{"class":59},[33,167990,11136],{"class":63},[33,167992,167993],{"class":59}," num\n",[33,167995,167996,167998],{"class":35,"line":267},[33,167997,5752],{"class":63},[33,167999,163701],{"class":59},[33,168001,168002],{"class":35,"line":275},[33,168003,127],{"emptyLinePlaceholder":126},[33,168005,168006],{"class":35,"line":392},[33,168007,127],{"emptyLinePlaceholder":126},[33,168009,168010,168012,168015,168017,168019,168021,168023,168025],{"class":35,"line":406},[33,168011,72],{"class":39},[33,168013,168014],{"class":59},"(add(",[33,168016,2036],{"class":39},[33,168018,14093],{"class":59},[33,168020,1897],{"class":39},[33,168022,14093],{"class":59},[33,168024,1891],{"class":39},[33,168026,121],{"class":59},[33,168028,168029,168031,168033,168035,168037,168039,168041,168043,168045,168047,168049,168051],{"class":35,"line":418},[33,168030,72],{"class":39},[33,168032,168014],{"class":59},[33,168034,2036],{"class":39},[33,168036,14093],{"class":59},[33,168038,1897],{"class":39},[33,168040,14093],{"class":59},[33,168042,1891],{"class":39},[33,168044,14093],{"class":59},[33,168046,2111],{"class":39},[33,168048,14093],{"class":59},[33,168050,2137],{"class":39},[33,168052,121],{"class":59},[633,168054,168056],{"id":168055},"_762-kwargs","7.6.2 **kwargs",[19,168058,168059,168062],{},[30,168060,168061],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[23,168064,168066],{"className":25,"code":168065,"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,168067,168068,168081,168092,168098,168102,168106],{"__ignoreMap":28},[33,168069,168070,168072,168074,168076,168078],{"class":35,"line":36},[33,168071,33597],{"class":63},[33,168073,163359],{"class":3632},[33,168075,109],{"class":59},[33,168077,12319],{"class":63},[33,168079,168080],{"class":59},"kwargs):\n",[33,168082,168083,168085,168087,168089],{"class":35,"line":43},[33,168084,4864],{"class":63},[33,168086,166199],{"class":59},[33,168088,27699],{"class":63},[33,168090,168091],{"class":59}," kwargs.items():\n",[33,168093,168094,168096],{"class":35,"line":130},[33,168095,583],{"class":39},[33,168097,166211],{"class":59},[33,168099,168100],{"class":35,"line":146},[33,168101,127],{"emptyLinePlaceholder":126},[33,168103,168104],{"class":35,"line":267},[33,168105,127],{"emptyLinePlaceholder":126},[33,168107,168108,168110,168112,168114,168116,168118,168120,168122,168124,168126,168128,168130,168132],{"class":35,"line":275},[33,168109,163424],{"class":59},[33,168111,1008],{"class":6877},[33,168113,64],{"class":63},[33,168115,151517],{"class":117},[33,168117,14093],{"class":59},[33,168119,71863],{"class":6877},[33,168121,64],{"class":63},[33,168123,2467],{"class":39},[33,168125,14093],{"class":59},[33,168127,71914],{"class":6877},[33,168129,64],{"class":63},[33,168131,70911],{"class":117},[33,168133,157],{"class":59},[14,168135,168137],{"id":168136},"_77-参数解包","7.7 参数解包",[19,168139,168140],{},"列表或元组解包为位置参数：",[23,168142,168144],{"className":25,"code":168143,"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,168145,168146,168155,168170,168174,168178,168198],{"__ignoreMap":28},[33,168147,168148,168150,168152],{"class":35,"line":36},[33,168149,33597],{"class":63},[33,168151,6870],{"class":3632},[33,168153,168154],{"class":59},"(a, b, c):\n",[33,168156,168157,168159,168161,168163,168165,168167],{"class":35,"line":43},[33,168158,5752],{"class":63},[33,168160,12527],{"class":59},[33,168162,2298],{"class":63},[33,168164,12540],{"class":59},[33,168166,2298],{"class":63},[33,168168,168169],{"class":59}," c\n",[33,168171,168172],{"class":35,"line":130},[33,168173,127],{"emptyLinePlaceholder":126},[33,168175,168176],{"class":35,"line":146},[33,168177,127],{"emptyLinePlaceholder":126},[33,168179,168180,168182,168184,168186,168188,168190,168192,168194,168196],{"class":35,"line":267},[33,168181,165514],{"class":59},[33,168183,64],{"class":63},[33,168185,53871],{"class":59},[33,168187,2036],{"class":39},[33,168189,14093],{"class":59},[33,168191,1897],{"class":39},[33,168193,14093],{"class":59},[33,168195,1891],{"class":39},[33,168197,34893],{"class":59},[33,168199,168200,168202,168204,168206],{"class":35,"line":275},[33,168201,72],{"class":39},[33,168203,168014],{"class":59},[33,168205,1540],{"class":63},[33,168207,168208],{"class":59},"nums))\n",[19,168210,168211],{},"字典解包为关键字参数：",[23,168213,168215],{"className":25,"code":168214,"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,168216,168217,168225,168251,168255,168259,168283],{"__ignoreMap":28},[33,168218,168219,168221,168223],{"class":35,"line":36},[33,168220,33597],{"class":63},[33,168222,151001],{"class":3632},[33,168224,151004],{"class":59},[33,168226,168227,168229,168231,168233,168235,168237,168239,168241,168243,168245,168247,168249],{"class":35,"line":43},[33,168228,149],{"class":39},[33,168230,109],{"class":59},[33,168232,999],{"class":63},[33,168234,1014],{"class":117},[33,168236,1005],{"class":39},[33,168238,1008],{"class":59},[33,168240,1011],{"class":39},[33,168242,6109],{"class":39},[33,168244,71863],{"class":59},[33,168246,1011],{"class":39},[33,168248,1014],{"class":117},[33,168250,157],{"class":59},[33,168252,168253],{"class":35,"line":130},[33,168254,127],{"emptyLinePlaceholder":126},[33,168256,168257],{"class":35,"line":146},[33,168258,127],{"emptyLinePlaceholder":126},[33,168260,168261,168263,168265,168267,168269,168271,168273,168275,168277,168279,168281],{"class":35,"line":267},[33,168262,117950],{"class":59},[33,168264,64],{"class":63},[33,168266,6109],{"class":59},[33,168268,64321],{"class":117},[33,168270,53082],{"class":59},[33,168272,151517],{"class":117},[33,168274,14093],{"class":59},[33,168276,70766],{"class":117},[33,168278,53082],{"class":59},[33,168280,2467],{"class":39},[33,168282,3247],{"class":59},[33,168284,168285,168287,168289],{"class":35,"line":275},[33,168286,167570],{"class":59},[33,168288,12319],{"class":63},[33,168290,168291],{"class":59},"info)\n",[14,168293,168295],{"id":168294},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168297,168298,168301],{},[30,168299,168300],{},"lambda"," 用于定义简单匿名函数。",[23,168303,168305],{"className":25,"code":168304,"language":27,"meta":28,"style":28},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[30,168306,168307,168324],{"__ignoreMap":28},[33,168308,168309,168312,168314,168317,168320,168322],{"class":35,"line":36},[33,168310,168311],{"class":59},"add ",[33,168313,64],{"class":63},[33,168315,168316],{"class":63}," lambda",[33,168318,168319],{"class":59}," a, b: a ",[33,168321,2298],{"class":63},[33,168323,152732],{"class":59},[33,168325,168326,168328,168330,168332,168334,168336],{"class":35,"line":43},[33,168327,72],{"class":39},[33,168329,168014],{"class":59},[33,168331,2036],{"class":39},[33,168333,14093],{"class":59},[33,168335,1897],{"class":39},[33,168337,121],{"class":59},[19,168339,168340],{},"常和排序、过滤等函数一起使用。",[19,168342,168343],{},"按分数排序：",[23,168345,168347],{"className":25,"code":168346,"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,168348,168349,168357,168377,168397,168417,168421,168425,168448],{"__ignoreMap":28},[33,168350,168351,168353,168355],{"class":35,"line":36},[33,168352,161130],{"class":59},[33,168354,64],{"class":63},[33,168356,57091],{"class":59},[33,168358,168359,168361,168363,168365,168367,168369,168371,168373,168375],{"class":35,"line":43},[33,168360,150014],{"class":59},[33,168362,64321],{"class":117},[33,168364,53082],{"class":59},[33,168366,151517],{"class":117},[33,168368,14093],{"class":59},[33,168370,153100],{"class":117},[33,168372,53082],{"class":59},[33,168374,2804],{"class":39},[33,168376,6591],{"class":59},[33,168378,168379,168381,168383,168385,168387,168389,168391,168393,168395],{"class":35,"line":130},[33,168380,150014],{"class":59},[33,168382,64321],{"class":117},[33,168384,53082],{"class":59},[33,168386,152564],{"class":117},[33,168388,14093],{"class":59},[33,168390,153100],{"class":117},[33,168392,53082],{"class":59},[33,168394,2628],{"class":39},[33,168396,6591],{"class":59},[33,168398,168399,168401,168403,168405,168407,168409,168411,168413,168415],{"class":35,"line":146},[33,168400,150014],{"class":59},[33,168402,64321],{"class":117},[33,168404,53082],{"class":59},[33,168406,161145],{"class":117},[33,168408,14093],{"class":59},[33,168410,153100],{"class":117},[33,168412,53082],{"class":59},[33,168414,2224],{"class":39},[33,168416,6591],{"class":59},[33,168418,168419],{"class":35,"line":267},[33,168420,34893],{"class":59},[33,168422,168423],{"class":35,"line":275},[33,168424,127],{"emptyLinePlaceholder":126},[33,168426,168427,168430,168432,168434,168436,168438,168440,168442,168444,168446],{"class":35,"line":392},[33,168428,168429],{"class":59},"students.sort(",[33,168431,155570],{"class":6877},[33,168433,155573],{"class":63},[33,168435,155576],{"class":59},[33,168437,153100],{"class":117},[33,168439,113839],{"class":59},[33,168441,164942],{"class":6877},[33,168443,64],{"class":63},[33,168445,33126],{"class":39},[33,168447,157],{"class":59},[33,168449,168450,168452],{"class":35,"line":406},[33,168451,72],{"class":39},[33,168453,166409],{"class":59},[19,168455,168456,168457,168459],{},"如果逻辑复杂，不要硬写 ",[30,168458,168300],{},"，定义普通函数更清晰。",[14,168461,168463],{"id":168462},"_79-函数作为参数","7.9 函数作为参数",[19,168465,168466],{},"函数可以作为参数传给另一个函数。",[23,168468,168470],{"className":25,"code":168469,"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,168471,168472,168480,168490,168494,168498,168508,168515,168519,168523],{"__ignoreMap":28},[33,168473,168474,168476,168478],{"class":35,"line":36},[33,168475,33597],{"class":63},[33,168477,6870],{"class":3632},[33,168479,152721],{"class":59},[33,168481,168482,168484,168486,168488],{"class":35,"line":43},[33,168483,5752],{"class":63},[33,168485,12527],{"class":59},[33,168487,2298],{"class":63},[33,168489,152732],{"class":59},[33,168491,168492],{"class":35,"line":130},[33,168493,127],{"emptyLinePlaceholder":126},[33,168495,168496],{"class":35,"line":146},[33,168497,127],{"emptyLinePlaceholder":126},[33,168499,168500,168502,168505],{"class":35,"line":267},[33,168501,33597],{"class":63},[33,168503,168504],{"class":3632}," calculate",[33,168506,168507],{"class":59},"(a, b, func):\n",[33,168509,168510,168512],{"class":35,"line":275},[33,168511,5752],{"class":63},[33,168513,168514],{"class":59}," func(a, b)\n",[33,168516,168517],{"class":35,"line":392},[33,168518,127],{"emptyLinePlaceholder":126},[33,168520,168521],{"class":35,"line":406},[33,168522,127],{"emptyLinePlaceholder":126},[33,168524,168525,168527,168530,168532,168534,168536],{"class":35,"line":418},[33,168526,72],{"class":39},[33,168528,168529],{"class":59},"(calculate(",[33,168531,2264],{"class":39},[33,168533,14093],{"class":59},[33,168535,2517],{"class":39},[33,168537,168538],{"class":59},", add))\n",[19,168540,168541],{},"这种思想在排序、回调、框架中经常出现。",[14,168543,168545],{"id":168544},"_710-mapfiltersorted","7.10 map、filter、sorted",[633,168547,168549],{"id":168548},"_7101-map","7.10.1 map",[19,168551,168552,168554],{},[30,168553,75685],{}," 对每个元素执行函数。",[23,168556,168558],{"className":25,"code":168557,"language":27,"meta":28,"style":28},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[30,168559,168560,168584,168607],{"__ignoreMap":28},[33,168561,168562,168564,168566,168568,168570,168572,168574,168576,168578,168580,168582],{"class":35,"line":36},[33,168563,165514],{"class":59},[33,168565,64],{"class":63},[33,168567,53871],{"class":59},[33,168569,2036],{"class":39},[33,168571,14093],{"class":59},[33,168573,1897],{"class":39},[33,168575,14093],{"class":59},[33,168577,1891],{"class":39},[33,168579,14093],{"class":59},[33,168581,2111],{"class":39},[33,168583,34893],{"class":59},[33,168585,168586,168588,168590,168593,168595,168597,168600,168602,168604],{"class":35,"line":43},[33,168587,162720],{"class":59},[33,168589,64],{"class":63},[33,168591,168592],{"class":39}," map",[33,168594,109],{"class":59},[33,168596,168300],{"class":63},[33,168598,168599],{"class":59}," x: x ",[33,168601,1540],{"class":63},[33,168603,16413],{"class":39},[33,168605,168606],{"class":59},", nums)\n",[33,168608,168609,168611,168613,168615],{"class":35,"line":130},[33,168610,72],{"class":39},[33,168612,109],{"class":59},[33,168614,155694],{"class":39},[33,168616,167482],{"class":59},[633,168618,168620],{"id":168619},"_7102-filter","7.10.2 filter",[19,168622,168623,168625],{},[30,168624,81691],{}," 保留满足条件的元素。",[23,168627,168629],{"className":25,"code":168628,"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,168630,168631,168659,168684],{"__ignoreMap":28},[33,168632,168633,168635,168637,168639,168641,168643,168645,168647,168649,168651,168653,168655,168657],{"class":35,"line":36},[33,168634,165514],{"class":59},[33,168636,64],{"class":63},[33,168638,53871],{"class":59},[33,168640,2036],{"class":39},[33,168642,14093],{"class":59},[33,168644,1897],{"class":39},[33,168646,14093],{"class":59},[33,168648,1891],{"class":39},[33,168650,14093],{"class":59},[33,168652,2111],{"class":39},[33,168654,14093],{"class":59},[33,168656,2137],{"class":39},[33,168658,34893],{"class":59},[33,168660,168661,168663,168665,168668,168670,168672,168674,168676,168678,168680,168682],{"class":35,"line":43},[33,168662,162720],{"class":59},[33,168664,64],{"class":63},[33,168666,168667],{"class":39}," filter",[33,168669,109],{"class":59},[33,168671,168300],{"class":63},[33,168673,168599],{"class":59},[33,168675,2146],{"class":63},[33,168677,16413],{"class":39},[33,168679,1644],{"class":63},[33,168681,829],{"class":39},[33,168683,168606],{"class":59},[33,168685,168686,168688,168690,168692],{"class":35,"line":130},[33,168687,72],{"class":39},[33,168689,109],{"class":59},[33,168691,155694],{"class":39},[33,168693,167482],{"class":59},[633,168695,168697],{"id":168696},"_7103-sorted","7.10.3 sorted",[19,168699,168700,168702],{},[30,168701,166650],{}," 返回排序后的新列表。",[23,168704,168706],{"className":25,"code":168705,"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,168707,168708,168716,168736,168756,168776,168780,168784,168813],{"__ignoreMap":28},[33,168709,168710,168712,168714],{"class":35,"line":36},[33,168711,161130],{"class":59},[33,168713,64],{"class":63},[33,168715,57091],{"class":59},[33,168717,168718,168720,168722,168724,168726,168728,168730,168732,168734],{"class":35,"line":43},[33,168719,150014],{"class":59},[33,168721,64321],{"class":117},[33,168723,53082],{"class":59},[33,168725,151517],{"class":117},[33,168727,14093],{"class":59},[33,168729,153100],{"class":117},[33,168731,53082],{"class":59},[33,168733,2804],{"class":39},[33,168735,6591],{"class":59},[33,168737,168738,168740,168742,168744,168746,168748,168750,168752,168754],{"class":35,"line":130},[33,168739,150014],{"class":59},[33,168741,64321],{"class":117},[33,168743,53082],{"class":59},[33,168745,152564],{"class":117},[33,168747,14093],{"class":59},[33,168749,153100],{"class":117},[33,168751,53082],{"class":59},[33,168753,2628],{"class":39},[33,168755,6591],{"class":59},[33,168757,168758,168760,168762,168764,168766,168768,168770,168772,168774],{"class":35,"line":146},[33,168759,150014],{"class":59},[33,168761,64321],{"class":117},[33,168763,53082],{"class":59},[33,168765,161145],{"class":117},[33,168767,14093],{"class":59},[33,168769,153100],{"class":117},[33,168771,53082],{"class":59},[33,168773,2224],{"class":39},[33,168775,6591],{"class":59},[33,168777,168778],{"class":35,"line":267},[33,168779,34893],{"class":59},[33,168781,168782],{"class":35,"line":275},[33,168783,127],{"emptyLinePlaceholder":126},[33,168785,168786,168788,168790,168792,168795,168797,168799,168801,168803,168805,168807,168809,168811],{"class":35,"line":392},[33,168787,162720],{"class":59},[33,168789,64],{"class":63},[33,168791,165018],{"class":39},[33,168793,168794],{"class":59},"(students, ",[33,168796,155570],{"class":6877},[33,168798,155573],{"class":63},[33,168800,155576],{"class":59},[33,168802,153100],{"class":117},[33,168804,113839],{"class":59},[33,168806,164942],{"class":6877},[33,168808,64],{"class":63},[33,168810,33126],{"class":39},[33,168812,157],{"class":59},[33,168814,168815,168817],{"class":35,"line":406},[33,168816,72],{"class":39},[33,168818,78226],{"class":59},[14,168820,168822],{"id":168821},"_711-闭包入门","7.11 闭包入门",[19,168824,168825],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[23,168827,168829],{"className":25,"code":168828,"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,168830,168831,168841,168851,168862,168866,168873,168877,168881,168895],{"__ignoreMap":28},[33,168832,168833,168835,168838],{"class":35,"line":36},[33,168834,33597],{"class":63},[33,168836,168837],{"class":3632}," outer",[33,168839,168840],{"class":59},"(base):\n",[33,168842,168843,168845,168848],{"class":35,"line":43},[33,168844,32452],{"class":63},[33,168846,168847],{"class":3632}," inner",[33,168849,168850],{"class":59},"(num):\n",[33,168852,168853,168855,168858,168860],{"class":35,"line":130},[33,168854,16410],{"class":63},[33,168856,168857],{"class":59}," base ",[33,168859,2298],{"class":63},[33,168861,167993],{"class":59},[33,168863,168864],{"class":35,"line":146},[33,168865,127],{"emptyLinePlaceholder":126},[33,168867,168868,168870],{"class":35,"line":267},[33,168869,5752],{"class":63},[33,168871,168872],{"class":59}," inner\n",[33,168874,168875],{"class":35,"line":275},[33,168876,127],{"emptyLinePlaceholder":126},[33,168878,168879],{"class":35,"line":392},[33,168880,127],{"emptyLinePlaceholder":126},[33,168882,168883,168886,168888,168891,168893],{"class":35,"line":406},[33,168884,168885],{"class":59},"add_10 ",[33,168887,64],{"class":63},[33,168889,168890],{"class":59}," outer(",[33,168892,2264],{"class":39},[33,168894,157],{"class":59},[33,168896,168897,168899,168902,168904],{"class":35,"line":418},[33,168898,72],{"class":39},[33,168900,168901],{"class":59},"(add_10(",[33,168903,2137],{"class":39},[33,168905,121],{"class":59},[19,168907,168908],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168910,168912],{"id":168911},"_712-装饰器入门","7.12 装饰器入门",[19,168914,168915],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[23,168917,168919],{"className":25,"code":168918,"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,168920,168921,168930,168939,168950,168955,168966,168970,168977,168981,168985,168990,168998,169008,169012,169016],{"__ignoreMap":28},[33,168922,168923,168925,168927],{"class":35,"line":36},[33,168924,33597],{"class":63},[33,168926,88831],{"class":3632},[33,168928,168929],{"class":59},"(func):\n",[33,168931,168932,168934,168937],{"class":35,"line":43},[33,168933,32452],{"class":63},[33,168935,168936],{"class":3632}," wrapper",[33,168938,33603],{"class":59},[33,168940,168941,168943,168945,168948],{"class":35,"line":130},[33,168942,583],{"class":39},[33,168944,109],{"class":59},[33,168946,168947],{"class":117},"\"函数开始执行\"",[33,168949,157],{"class":59},[33,168951,168952],{"class":35,"line":146},[33,168953,168954],{"class":59},"        func()\n",[33,168956,168957,168959,168961,168964],{"class":35,"line":267},[33,168958,583],{"class":39},[33,168960,109],{"class":59},[33,168962,168963],{"class":117},"\"函数执行结束\"",[33,168965,157],{"class":59},[33,168967,168968],{"class":35,"line":275},[33,168969,127],{"emptyLinePlaceholder":126},[33,168971,168972,168974],{"class":35,"line":392},[33,168973,5752],{"class":63},[33,168975,168976],{"class":59}," wrapper\n",[33,168978,168979],{"class":35,"line":406},[33,168980,127],{"emptyLinePlaceholder":126},[33,168982,168983],{"class":35,"line":418},[33,168984,127],{"emptyLinePlaceholder":126},[33,168986,168987],{"class":35,"line":425},[33,168988,168989],{"class":3632},"@log\n",[33,168991,168992,168994,168996],{"class":35,"line":1147},[33,168993,33597],{"class":63},[33,168995,162410],{"class":3632},[33,168997,33603],{"class":59},[33,168999,169000,169002,169004,169006],{"class":35,"line":1329},[33,169001,149],{"class":39},[33,169003,109],{"class":59},[33,169005,7504],{"class":117},[33,169007,157],{"class":59},[33,169009,169010],{"class":35,"line":1341},[33,169011,127],{"emptyLinePlaceholder":126},[33,169013,169014],{"class":35,"line":1348},[33,169015,127],{"emptyLinePlaceholder":126},[33,169017,169018],{"class":35,"line":1529},[33,169019,162445],{"class":59},[19,169021,856],{},[23,169023,169025],{"className":25,"code":169024,"language":27,"meta":28,"style":28},"say_hello = log(say_hello)\n",[30,169026,169027],{"__ignoreMap":28},[33,169028,169029,169032,169034],{"class":35,"line":36},[33,169030,169031],{"class":59},"say_hello ",[33,169033,64],{"class":63},[33,169035,169036],{"class":59}," log(say_hello)\n",[19,169038,169039],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169041,169043],{"id":169042},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[23,169045,169047],{"className":25,"code":169046,"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,169048,169049,169057,169074,169084,169103,169113,169120,169124,169130,169134,169138,169142,169150,169160,169164,169168],{"__ignoreMap":28},[33,169050,169051,169053,169055],{"class":35,"line":36},[33,169052,33597],{"class":63},[33,169054,88831],{"class":3632},[33,169056,168929],{"class":59},[33,169058,169059,169061,169063,169065,169067,169070,169072],{"class":35,"line":43},[33,169060,32452],{"class":63},[33,169062,168936],{"class":3632},[33,169064,109],{"class":59},[33,169066,1540],{"class":63},[33,169068,169069],{"class":59},"args, ",[33,169071,12319],{"class":63},[33,169073,168080],{"class":59},[33,169075,169076,169078,169080,169082],{"class":35,"line":130},[33,169077,583],{"class":39},[33,169079,109],{"class":59},[33,169081,168947],{"class":117},[33,169083,157],{"class":59},[33,169085,169086,169089,169091,169094,169096,169098,169100],{"class":35,"line":146},[33,169087,169088],{"class":59},"        result ",[33,169090,64],{"class":63},[33,169092,169093],{"class":59}," func(",[33,169095,1540],{"class":63},[33,169097,169069],{"class":59},[33,169099,12319],{"class":63},[33,169101,169102],{"class":59},"kwargs)\n",[33,169104,169105,169107,169109,169111],{"class":35,"line":267},[33,169106,583],{"class":39},[33,169108,109],{"class":59},[33,169110,168963],{"class":117},[33,169112,157],{"class":59},[33,169114,169115,169117],{"class":35,"line":275},[33,169116,16410],{"class":63},[33,169118,169119],{"class":59}," result\n",[33,169121,169122],{"class":35,"line":392},[33,169123,127],{"emptyLinePlaceholder":126},[33,169125,169126,169128],{"class":35,"line":406},[33,169127,5752],{"class":63},[33,169129,168976],{"class":59},[33,169131,169132],{"class":35,"line":418},[33,169133,127],{"emptyLinePlaceholder":126},[33,169135,169136],{"class":35,"line":425},[33,169137,127],{"emptyLinePlaceholder":126},[33,169139,169140],{"class":35,"line":1147},[33,169141,168989],{"class":3632},[33,169143,169144,169146,169148],{"class":35,"line":1329},[33,169145,33597],{"class":63},[33,169147,6870],{"class":3632},[33,169149,152721],{"class":59},[33,169151,169152,169154,169156,169158],{"class":35,"line":1341},[33,169153,5752],{"class":63},[33,169155,12527],{"class":59},[33,169157,2298],{"class":63},[33,169159,152732],{"class":59},[33,169161,169162],{"class":35,"line":1348},[33,169163,127],{"emptyLinePlaceholder":126},[33,169165,169166],{"class":35,"line":1529},[33,169167,127],{"emptyLinePlaceholder":126},[33,169169,169170,169172,169174,169176,169178,169180],{"class":35,"line":1546},[33,169171,72],{"class":39},[33,169173,168014],{"class":59},[33,169175,2264],{"class":39},[33,169177,14093],{"class":59},[33,169179,2517],{"class":39},[33,169181,121],{"class":59},[19,169183,169184,169185,102657,169187,169189],{},"这个写法使用 ",[30,169186,167946],{},[30,169188,168061],{}," 接收原函数的所有参数。",[14,169191,169193],{"id":169192},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169195,1173],{},[162,169197,169198,169201,169204],{},[165,169199,169200],{},"给定一组学生数据。",[165,169202,169203],{},"封装函数，根据传入规则筛选学生。",[165,169205,169206],{},"筛选及格、优秀、未成年学生。",[19,169208,1187],{},[23,169210,169212],{"className":25,"code":169211,"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,169213,169214,169222,169250,169278,169306,169310,169314,169318,169328,169336,169346,169353,169358,169364,169368,169372,169396,169419,169442,169446,169453,169460],{"__ignoreMap":28},[33,169215,169216,169218,169220],{"class":35,"line":36},[33,169217,161130],{"class":59},[33,169219,64],{"class":63},[33,169221,57091],{"class":59},[33,169223,169224,169226,169228,169230,169232,169234,169236,169238,169240,169242,169244,169246,169248],{"class":35,"line":43},[33,169225,150014],{"class":59},[33,169227,64321],{"class":117},[33,169229,53082],{"class":59},[33,169231,151517],{"class":117},[33,169233,14093],{"class":59},[33,169235,70766],{"class":117},[33,169237,53082],{"class":59},[33,169239,2467],{"class":39},[33,169241,14093],{"class":59},[33,169243,153100],{"class":117},[33,169245,53082],{"class":59},[33,169247,2804],{"class":39},[33,169249,6591],{"class":59},[33,169251,169252,169254,169256,169258,169260,169262,169264,169266,169268,169270,169272,169274,169276],{"class":35,"line":130},[33,169253,150014],{"class":59},[33,169255,64321],{"class":117},[33,169257,53082],{"class":59},[33,169259,152564],{"class":117},[33,169261,14093],{"class":59},[33,169263,70766],{"class":117},[33,169265,53082],{"class":59},[33,169267,2442],{"class":39},[33,169269,14093],{"class":59},[33,169271,153100],{"class":117},[33,169273,53082],{"class":59},[33,169275,2628],{"class":39},[33,169277,6591],{"class":59},[33,169279,169280,169282,169284,169286,169288,169290,169292,169294,169296,169298,169300,169302,169304],{"class":35,"line":146},[33,169281,150014],{"class":59},[33,169283,64321],{"class":117},[33,169285,53082],{"class":59},[33,169287,161145],{"class":117},[33,169289,14093],{"class":59},[33,169291,70766],{"class":117},[33,169293,53082],{"class":59},[33,169295,2492],{"class":39},[33,169297,14093],{"class":59},[33,169299,153100],{"class":117},[33,169301,53082],{"class":59},[33,169303,2699],{"class":39},[33,169305,6591],{"class":59},[33,169307,169308],{"class":35,"line":267},[33,169309,34893],{"class":59},[33,169311,169312],{"class":35,"line":275},[33,169313,127],{"emptyLinePlaceholder":126},[33,169315,169316],{"class":35,"line":392},[33,169317,127],{"emptyLinePlaceholder":126},[33,169319,169320,169322,169325],{"class":35,"line":406},[33,169321,33597],{"class":63},[33,169323,169324],{"class":3632}," filter_students",[33,169326,169327],{"class":59},"(students, condition):\n",[33,169329,169330,169332,169334],{"class":35,"line":418},[33,169331,162637],{"class":59},[33,169333,64],{"class":63},[33,169335,53483],{"class":59},[33,169337,169338,169340,169342,169344],{"class":35,"line":425},[33,169339,4864],{"class":63},[33,169341,153765],{"class":59},[33,169343,27699],{"class":63},[33,169345,153770],{"class":59},[33,169347,169348,169350],{"class":35,"line":1147},[33,169349,4163],{"class":63},[33,169351,169352],{"class":59}," condition(student):\n",[33,169354,169355],{"class":35,"line":1329},[33,169356,169357],{"class":59},"            result.append(student)\n",[33,169359,169360,169362],{"class":35,"line":1341},[33,169361,5752],{"class":63},[33,169363,169119],{"class":59},[33,169365,169366],{"class":35,"line":1348},[33,169367,127],{"emptyLinePlaceholder":126},[33,169369,169370],{"class":35,"line":1529},[33,169371,127],{"emptyLinePlaceholder":126},[33,169373,169374,169376,169378,169381,169383,169386,169388,169390,169392,169394],{"class":35,"line":1546},[33,169375,167115],{"class":59},[33,169377,64],{"class":63},[33,169379,169380],{"class":59}," filter_students(students, ",[33,169382,168300],{"class":63},[33,169384,169385],{"class":59}," s: s[",[33,169387,153100],{"class":117},[33,169389,6104],{"class":59},[33,169391,78],{"class":63},[33,169393,401],{"class":39},[33,169395,157],{"class":59},[33,169397,169398,169401,169403,169405,169407,169409,169411,169413,169415,169417],{"class":35,"line":1551},[33,169399,169400],{"class":59},"excellent ",[33,169402,64],{"class":63},[33,169404,169380],{"class":59},[33,169406,168300],{"class":63},[33,169408,169385],{"class":59},[33,169410,153100],{"class":117},[33,169412,6104],{"class":59},[33,169414,78],{"class":63},[33,169416,351],{"class":39},[33,169418,157],{"class":59},[33,169420,169421,169424,169426,169428,169430,169432,169434,169436,169438,169440],{"class":35,"line":1566},[33,169422,169423],{"class":59},"under_age ",[33,169425,64],{"class":63},[33,169427,169380],{"class":59},[33,169429,168300],{"class":63},[33,169431,169385],{"class":59},[33,169433,70766],{"class":117},[33,169435,6104],{"class":59},[33,169437,2726],{"class":63},[33,169439,81],{"class":39},[33,169441,157],{"class":59},[33,169443,169444],{"class":35,"line":1578},[33,169445,127],{"emptyLinePlaceholder":126},[33,169447,169448,169450],{"class":35,"line":1583},[33,169449,72],{"class":39},[33,169451,169452],{"class":59},"(passed)\n",[33,169454,169455,169457],{"class":35,"line":3369},[33,169456,72],{"class":39},[33,169458,169459],{"class":59},"(excellent)\n",[33,169461,169462,169464],{"class":35,"line":3396},[33,169463,72],{"class":39},[33,169465,169466],{"class":59},"(under_age)\n",[14,169468,169470],{"id":169469},"_715-易错点","7.15 易错点",[162,169472,169473,169476,169484,169489,169500],{},[165,169474,169475],{},"默认参数不要写可变对象。",[165,169477,169478,169480,169481,169483],{},[30,169479,167946],{}," 是元组，",[30,169482,168061],{}," 是字典。",[165,169485,169486,169488],{},[30,169487,168300],{}," 只适合简单表达式。",[165,169490,169491,102657,169493,169495,169496,169499],{},[30,169492,75685],{},[30,169494,81691],{}," 的结果是迭代器，常用 ",[30,169497,169498],{},"list()"," 转换查看。",[165,169501,169502],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169504,169506],{"id":169505},"_716-本章练习","7.16 本章练习",[162,169508,169509,169516,169522,169527,169532],{},[165,169510,169511,169512,169515],{},"写函数 ",[30,169513,169514],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[165,169517,169511,169518,169521],{},[30,169519,169520],{},"print_user(**kwargs)","，输出用户所有字段。",[165,169523,106004,169524,169526],{},[30,169525,168300],{}," 对学生列表按年龄排序。",[165,169528,106004,169529,169531],{},[30,169530,81691],{}," 找出成绩不及格的学生。",[165,169533,169534],{},"写一个装饰器，统计函数执行前后的提示信息。",[1729,169536,169537],{},"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":43,"depth":43,"links":169539},[169540,169541,169542,169543,169544,169545,169549,169550,169551,169552,169557,169558,169559,169560,169561,169562],{"id":167398,"depth":43,"text":167399},{"id":167512,"depth":43,"text":167513},{"id":167601,"depth":43,"text":167602},{"id":167663,"depth":43,"text":167664},{"id":167809,"depth":43,"text":167810},{"id":167936,"depth":43,"text":167937,"children":169546},[169547,169548],{"id":167940,"depth":130,"text":167941},{"id":168055,"depth":130,"text":168056},{"id":168136,"depth":43,"text":168137},{"id":168294,"depth":43,"text":168295},{"id":168462,"depth":43,"text":168463},{"id":168544,"depth":43,"text":168545,"children":169553},[169554,169555,169556],{"id":168548,"depth":130,"text":168549},{"id":168619,"depth":130,"text":168620},{"id":168696,"depth":130,"text":168697},{"id":168821,"depth":43,"text":168822},{"id":168911,"depth":43,"text":168912},{"id":169042,"depth":43,"text":169043},{"id":169192,"depth":43,"text":169193},{"id":169469,"depth":43,"text":169470},{"id":169505,"depth":43,"text":169506},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167390,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169569,"title":169570,"body":169571,"description":1751,"extension":1752,"meta":172090,"navigation":126,"path":172091,"seo":172092,"stem":172093,"__hash__":172094},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169572,"toc":172065},[169573,169576,169580,169583,169586,169617,169621,169625,169628,169655,169659,169662,169713,169716,169731,169734,169769,169773,169775,169799,169802,169862,169866,169870,169873,169930,169933,169953,169957,169960,170023,170027,170030,170086,170093,170117,170121,170124,170187,170191,170196,170247,170250,170254,170259,170326,170329,170411,170415,170420,170471,170474,170478,170481,170484,170492,170495,170541,170544,170590,170594,170600,170644,170647,170693,170696,170736,170739,170800,170804,170807,170897,170900,171042,171045,171112,171116,171119,171122,171263,171266,171344,171347,171523,171527,171529,171540,171542,171741,171745,171989,171993,172027,172031,172062],[10,169574,169570],{"id":169575},"_8-文件操作",[14,169577,169579],{"id":169578},"_81-文件操作的意义","8.1 文件操作的意义",[19,169581,169582],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169584,169585],{},"常见文件类型：",[162,169587,169588,169594,169600,169606,169612],{},[165,169589,169590,169593],{},[30,169591,169592],{},".txt","：普通文本。",[165,169595,169596,169599],{},[30,169597,169598],{},".csv","：表格文本。",[165,169601,169602,169605],{},[30,169603,169604],{},".json","：结构化数据。",[165,169607,169608,169611],{},[30,169609,169610],{},".log","：日志文件。",[165,169613,169614,169616],{},[30,169615,147984],{},"：Python 源代码。",[14,169618,169620],{"id":169619},"_82-路径","8.2 路径",[633,169622,169624],{"id":169623},"_821-相对路径","8.2.1 相对路径",[19,169626,169627],{},"相对当前运行目录：",[23,169629,169631],{"className":25,"code":169630,"language":27,"meta":28,"style":28},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[30,169632,169633],{"__ignoreMap":28},[33,169634,169635,169637,169639,169641,169643,169645,169647,169649,169651,169653],{"class":35,"line":36},[33,169636,88555],{"class":39},[33,169638,109],{"class":59},[33,169640,148425],{"class":117},[33,169642,14093],{"class":59},[33,169644,148430],{"class":117},[33,169646,14093],{"class":59},[33,169648,148435],{"class":6877},[33,169650,64],{"class":63},[33,169652,148440],{"class":117},[33,169654,157],{"class":59},[633,169656,169658],{"id":169657},"_822-绝对路径","8.2.2 绝对路径",[19,169660,169661],{},"从根目录或盘符开始：",[23,169663,169665],{"className":25,"code":169664,"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,169666,169667,169690],{"__ignoreMap":28},[33,169668,169669,169671,169673,169676,169678,169680,169682,169684,169686,169688],{"class":35,"line":36},[33,169670,88555],{"class":39},[33,169672,109],{"class":59},[33,169674,169675],{"class":117},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[33,169677,14093],{"class":59},[33,169679,148430],{"class":117},[33,169681,14093],{"class":59},[33,169683,148435],{"class":6877},[33,169685,64],{"class":63},[33,169687,148440],{"class":117},[33,169689,157],{"class":59},[33,169691,169692,169694,169696,169699,169701,169703,169705,169707,169709,169711],{"class":35,"line":43},[33,169693,88555],{"class":39},[33,169695,109],{"class":59},[33,169697,169698],{"class":117},"\"D:\u002Fdata\u002Fdata.txt\"",[33,169700,14093],{"class":59},[33,169702,148430],{"class":117},[33,169704,14093],{"class":59},[33,169706,148435],{"class":6877},[33,169708,64],{"class":63},[33,169710,148440],{"class":117},[33,169712,157],{"class":59},[19,169714,169715],{},"Windows 路径建议写成：",[23,169717,169719],{"className":25,"code":169718,"language":27,"meta":28,"style":28},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[30,169720,169721],{"__ignoreMap":28},[33,169722,169723,169726,169728],{"class":35,"line":36},[33,169724,169725],{"class":59},"path ",[33,169727,64],{"class":63},[33,169729,169730],{"class":117}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169732,169733],{},"或原始字符串：",[23,169735,169737],{"className":25,"code":169736,"language":27,"meta":28,"style":28},"path = r\"D:\\data\\data.txt\"\n",[30,169738,169739],{"__ignoreMap":28},[33,169740,169741,169743,169745,169747,169749,169752,169755,169758,169760,169762,169764,169767],{"class":35,"line":36},[33,169742,169725],{"class":59},[33,169744,64],{"class":63},[33,169746,18776],{"class":63},[33,169748,1014],{"class":117},[33,169750,169751],{"class":49622},"D:",[33,169753,169754],{"class":39},"\\d",[33,169756,169757],{"class":49622},"ata",[33,169759,169754],{"class":39},[33,169761,169757],{"class":49622},[33,169763,2375],{"class":39},[33,169765,169766],{"class":49622},"txt",[33,169768,26789],{"class":117},[14,169770,169772],{"id":169771},"_83-open函数","8.3 open函数",[19,169774,6842],{},[23,169776,169778],{"className":25,"code":169777,"language":27,"meta":28,"style":28},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[30,169779,169780],{"__ignoreMap":28},[33,169781,169782,169784,169786,169788,169791,169793,169795,169797],{"class":35,"line":36},[33,169783,47000],{"class":6877},[33,169785,15222],{"class":63},[33,169787,148420],{"class":39},[33,169789,169790],{"class":59},"(文件路径, 打开模式, ",[33,169792,148435],{"class":6877},[33,169794,64],{"class":63},[33,169796,148440],{"class":117},[33,169798,157],{"class":59},[19,169800,169801],{},"常见模式：",[1956,169803,169804,169813],{},[1959,169805,169806],{},[1962,169807,169808,169811],{},[1965,169809,169810],{},"模式",[1965,169812,27525],{},[2003,169814,169815,169824,169833,169842,169852],{},[1962,169816,169817,169821],{},[2008,169818,169819],{},[30,169820,2487],{},[2008,169822,169823],{},"只读，文件不存在会报错",[1962,169825,169826,169830],{},[2008,169827,169828],{},[30,169829,2612],{},[2008,169831,169832],{},"只写，文件不存在会创建，存在会清空",[1962,169834,169835,169839],{},[2008,169836,169837],{},[30,169838,2057],{},[2008,169840,169841],{},"追加，文件不存在会创建",[1962,169843,169844,169849],{},[2008,169845,169846],{},[30,169847,169848],{},"rb",[2008,169850,169851],{},"二进制只读",[1962,169853,169854,169859],{},[2008,169855,169856],{},[30,169857,169858],{},"wb",[2008,169860,169861],{},"二进制只写",[14,169863,169865],{"id":169864},"_84-读取文件","8.4 读取文件",[633,169867,169869],{"id":169868},"_841-read","8.4.1 read",[19,169871,169872],{},"一次读取全部内容：",[23,169874,169876],{"className":25,"code":169875,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[30,169877,169878,169904,169916,169923],{"__ignoreMap":28},[33,169879,169880,169882,169884,169886,169888,169890,169892,169894,169896,169898,169900,169902],{"class":35,"line":36},[33,169881,47000],{"class":6877},[33,169883,15222],{"class":63},[33,169885,148420],{"class":39},[33,169887,109],{"class":59},[33,169889,148425],{"class":117},[33,169891,14093],{"class":59},[33,169893,148430],{"class":117},[33,169895,14093],{"class":59},[33,169897,148435],{"class":6877},[33,169899,64],{"class":63},[33,169901,148440],{"class":117},[33,169903,157],{"class":59},[33,169905,169906,169909,169911,169913],{"class":35,"line":43},[33,169907,169908],{"class":59},"content ",[33,169910,64],{"class":63},[33,169912,149782],{"class":6877},[33,169914,169915],{"class":59},".read()\n",[33,169917,169918,169920],{"class":35,"line":130},[33,169919,72],{"class":39},[33,169921,169922],{"class":59},"(content)\n",[33,169924,169925,169927],{"class":35,"line":146},[33,169926,47000],{"class":6877},[33,169928,169929],{"class":59},".close()\n",[19,169931,169932],{},"可以指定读取字符数：",[23,169934,169936],{"className":25,"code":169935,"language":27,"meta":28,"style":28},"content = file.read(10)\n",[30,169937,169938],{"__ignoreMap":28},[33,169939,169940,169942,169944,169946,169949,169951],{"class":35,"line":36},[33,169941,169908],{"class":59},[33,169943,64],{"class":63},[33,169945,149782],{"class":6877},[33,169947,169948],{"class":59},".read(",[33,169950,2264],{"class":39},[33,169952,157],{"class":59},[633,169954,169956],{"id":169955},"_842-readline","8.4.2 readline",[19,169958,169959],{},"一次读取一行：",[23,169961,169963],{"className":25,"code":169962,"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,169964,169965,169991,169995,170006,170013,170017],{"__ignoreMap":28},[33,169966,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989],{"class":35,"line":36},[33,169968,47000],{"class":6877},[33,169970,15222],{"class":63},[33,169972,148420],{"class":39},[33,169974,109],{"class":59},[33,169976,148425],{"class":117},[33,169978,14093],{"class":59},[33,169980,148430],{"class":117},[33,169982,14093],{"class":59},[33,169984,148435],{"class":6877},[33,169986,64],{"class":63},[33,169988,148440],{"class":117},[33,169990,157],{"class":59},[33,169992,169993],{"class":35,"line":43},[33,169994,127],{"emptyLinePlaceholder":126},[33,169996,169997,169999,170001,170003],{"class":35,"line":130},[33,169998,148881],{"class":59},[33,170000,64],{"class":63},[33,170002,149782],{"class":6877},[33,170004,170005],{"class":59},".readline()\n",[33,170007,170008,170010],{"class":35,"line":146},[33,170009,72],{"class":39},[33,170011,170012],{"class":59},"(line)\n",[33,170014,170015],{"class":35,"line":267},[33,170016,127],{"emptyLinePlaceholder":126},[33,170018,170019,170021],{"class":35,"line":275},[33,170020,47000],{"class":6877},[33,170022,169929],{"class":59},[633,170024,170026],{"id":170025},"_843-readlines","8.4.3 readlines",[19,170028,170029],{},"读取所有行，返回列表：",[23,170031,170033],{"className":25,"code":170032,"language":27,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[30,170034,170035,170061,170073,170080],{"__ignoreMap":28},[33,170036,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059],{"class":35,"line":36},[33,170038,47000],{"class":6877},[33,170040,15222],{"class":63},[33,170042,148420],{"class":39},[33,170044,109],{"class":59},[33,170046,148425],{"class":117},[33,170048,14093],{"class":59},[33,170050,148430],{"class":117},[33,170052,14093],{"class":59},[33,170054,148435],{"class":6877},[33,170056,64],{"class":63},[33,170058,148440],{"class":117},[33,170060,157],{"class":59},[33,170062,170063,170066,170068,170070],{"class":35,"line":43},[33,170064,170065],{"class":59},"lines ",[33,170067,64],{"class":63},[33,170069,149782],{"class":6877},[33,170071,170072],{"class":59},".readlines()\n",[33,170074,170075,170077],{"class":35,"line":130},[33,170076,72],{"class":39},[33,170078,170079],{"class":59},"(lines)\n",[33,170081,170082,170084],{"class":35,"line":146},[33,170083,47000],{"class":6877},[33,170085,169929],{"class":59},[19,170087,170088,170089,170092],{},"每一行通常带有换行符，可以用 ",[30,170090,170091],{},"strip()"," 去掉：",[23,170094,170096],{"className":25,"code":170095,"language":27,"meta":28,"style":28},"for line in lines:\n    print(line.strip())\n",[30,170097,170098,170110],{"__ignoreMap":28},[33,170099,170100,170102,170105,170107],{"class":35,"line":36},[33,170101,4690],{"class":63},[33,170103,170104],{"class":59}," line ",[33,170106,27699],{"class":63},[33,170108,170109],{"class":59}," lines:\n",[33,170111,170112,170114],{"class":35,"line":43},[33,170113,149],{"class":39},[33,170115,170116],{"class":59},"(line.strip())\n",[633,170118,170120],{"id":170119},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170122,170123],{},"推荐读取大文件时使用：",[23,170125,170127],{"className":25,"code":170126,"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,170128,170129,170155,170159,170171,170177,170181],{"__ignoreMap":28},[33,170130,170131,170133,170135,170137,170139,170141,170143,170145,170147,170149,170151,170153],{"class":35,"line":36},[33,170132,47000],{"class":6877},[33,170134,15222],{"class":63},[33,170136,148420],{"class":39},[33,170138,109],{"class":59},[33,170140,148425],{"class":117},[33,170142,14093],{"class":59},[33,170144,148430],{"class":117},[33,170146,14093],{"class":59},[33,170148,148435],{"class":6877},[33,170150,64],{"class":63},[33,170152,148440],{"class":117},[33,170154,157],{"class":59},[33,170156,170157],{"class":35,"line":43},[33,170158,127],{"emptyLinePlaceholder":126},[33,170160,170161,170163,170165,170167,170169],{"class":35,"line":130},[33,170162,4690],{"class":63},[33,170164,170104],{"class":59},[33,170166,27699],{"class":63},[33,170168,149782],{"class":6877},[33,170170,143],{"class":59},[33,170172,170173,170175],{"class":35,"line":146},[33,170174,149],{"class":39},[33,170176,170116],{"class":59},[33,170178,170179],{"class":35,"line":267},[33,170180,127],{"emptyLinePlaceholder":126},[33,170182,170183,170185],{"class":35,"line":275},[33,170184,47000],{"class":6877},[33,170186,169929],{"class":59},[14,170188,170190],{"id":170189},"_85-with语句","8.5 with语句",[19,170192,170193,170195],{},[30,170194,109471],{}," 会自动关闭文件，推荐使用。",[23,170197,170199],{"className":25,"code":170198,"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,170200,170201,170231,170241],{"__ignoreMap":28},[33,170202,170203,170205,170207,170209,170211,170213,170215,170217,170219,170221,170223,170225,170227,170229],{"class":35,"line":36},[33,170204,109471],{"class":63},[33,170206,148420],{"class":39},[33,170208,109],{"class":59},[33,170210,148425],{"class":117},[33,170212,14093],{"class":59},[33,170214,148430],{"class":117},[33,170216,14093],{"class":59},[33,170218,148435],{"class":6877},[33,170220,64],{"class":63},[33,170222,148440],{"class":117},[33,170224,15372],{"class":59},[33,170226,33033],{"class":63},[33,170228,149782],{"class":6877},[33,170230,143],{"class":59},[33,170232,170233,170235,170237,170239],{"class":35,"line":43},[33,170234,148452],{"class":59},[33,170236,64],{"class":63},[33,170238,149782],{"class":6877},[33,170240,169915],{"class":59},[33,170242,170243,170245],{"class":35,"line":130},[33,170244,149],{"class":39},[33,170246,169922],{"class":59},[19,170248,170249],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170251,170253],{"id":170252},"_86-写入文件","8.6 写入文件",[19,170255,170256,170258],{},[30,170257,2612],{}," 模式会清空原文件。",[23,170260,170262],{"className":25,"code":170261,"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,170263,170264,170294,170311],{"__ignoreMap":28},[33,170265,170266,170268,170270,170272,170274,170276,170278,170280,170282,170284,170286,170288,170290,170292],{"class":35,"line":36},[33,170267,109471],{"class":63},[33,170269,148420],{"class":39},[33,170271,109],{"class":59},[33,170273,148425],{"class":117},[33,170275,14093],{"class":59},[33,170277,153604],{"class":117},[33,170279,14093],{"class":59},[33,170281,148435],{"class":6877},[33,170283,64],{"class":63},[33,170285,148440],{"class":117},[33,170287,15372],{"class":59},[33,170289,33033],{"class":63},[33,170291,149782],{"class":6877},[33,170293,143],{"class":59},[33,170295,170296,170299,170302,170305,170307,170309],{"class":35,"line":43},[33,170297,170298],{"class":6877},"    file",[33,170300,170301],{"class":59},".write(",[33,170303,170304],{"class":117},"\"hello",[33,170306,158143],{"class":39},[33,170308,1014],{"class":117},[33,170310,157],{"class":59},[33,170312,170313,170315,170317,170320,170322,170324],{"class":35,"line":130},[33,170314,170298],{"class":6877},[33,170316,170301],{"class":59},[33,170318,170319],{"class":117},"\"python",[33,170321,158143],{"class":39},[33,170323,1014],{"class":117},[33,170325,157],{"class":59},[19,170327,170328],{},"写入多行：",[23,170330,170332],{"className":25,"code":170331,"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,170333,170334,170369,170373,170404],{"__ignoreMap":28},[33,170335,170336,170338,170340,170342,170345,170347,170349,170351,170354,170356,170358,170360,170363,170365,170367],{"class":35,"line":36},[33,170337,170065],{"class":59},[33,170339,64],{"class":63},[33,170341,53871],{"class":59},[33,170343,170344],{"class":117},"\"小明,18",[33,170346,158143],{"class":39},[33,170348,1014],{"class":117},[33,170350,14093],{"class":59},[33,170352,170353],{"class":117},"\"小红,17",[33,170355,158143],{"class":39},[33,170357,1014],{"class":117},[33,170359,14093],{"class":59},[33,170361,170362],{"class":117},"\"小刚,19",[33,170364,158143],{"class":39},[33,170366,1014],{"class":117},[33,170368,34893],{"class":59},[33,170370,170371],{"class":35,"line":43},[33,170372,127],{"emptyLinePlaceholder":126},[33,170374,170375,170377,170379,170381,170384,170386,170388,170390,170392,170394,170396,170398,170400,170402],{"class":35,"line":130},[33,170376,109471],{"class":63},[33,170378,148420],{"class":39},[33,170380,109],{"class":59},[33,170382,170383],{"class":117},"\"students.txt\"",[33,170385,14093],{"class":59},[33,170387,153604],{"class":117},[33,170389,14093],{"class":59},[33,170391,148435],{"class":6877},[33,170393,64],{"class":63},[33,170395,148440],{"class":117},[33,170397,15372],{"class":59},[33,170399,33033],{"class":63},[33,170401,149782],{"class":6877},[33,170403,143],{"class":59},[33,170405,170406,170408],{"class":35,"line":146},[33,170407,170298],{"class":6877},[33,170409,170410],{"class":59},".writelines(lines)\n",[14,170412,170414],{"id":170413},"_87-追加文件","8.7 追加文件",[19,170416,170417,170419],{},[30,170418,2057],{}," 模式不会清空原内容，而是在末尾追加。",[23,170421,170423],{"className":25,"code":170422,"language":27,"meta":28,"style":28},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[30,170424,170425,170456],{"__ignoreMap":28},[33,170426,170427,170429,170431,170433,170436,170438,170440,170442,170444,170446,170448,170450,170452,170454],{"class":35,"line":36},[33,170428,109471],{"class":63},[33,170430,148420],{"class":39},[33,170432,109],{"class":59},[33,170434,170435],{"class":117},"\"log.txt\"",[33,170437,14093],{"class":59},[33,170439,166739],{"class":117},[33,170441,14093],{"class":59},[33,170443,148435],{"class":6877},[33,170445,64],{"class":63},[33,170447,148440],{"class":117},[33,170449,15372],{"class":59},[33,170451,33033],{"class":63},[33,170453,149782],{"class":6877},[33,170455,143],{"class":59},[33,170457,170458,170460,170462,170465,170467,170469],{"class":35,"line":43},[33,170459,170298],{"class":6877},[33,170461,170301],{"class":59},[33,170463,170464],{"class":117},"\"程序启动",[33,170466,158143],{"class":39},[33,170468,1014],{"class":117},[33,170470,157],{"class":59},[19,170472,170473],{},"日志类文件常用追加模式。",[14,170475,170477],{"id":170476},"_88-文件编码","8.8 文件编码",[19,170479,170480],{},"编码决定文字如何保存为字节。",[19,170482,170483],{},"常见编码：",[162,170485,170486,170489],{},[165,170487,170488],{},"UTF-8：推荐。",[165,170490,170491],{},"GBK：部分 Windows 中文文件常见。",[19,170493,170494],{},"读取文件乱码时，可以尝试：",[23,170496,170498],{"className":25,"code":170497,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[30,170499,170500,170531],{"__ignoreMap":28},[33,170501,170502,170504,170506,170508,170510,170512,170514,170516,170518,170520,170523,170525,170527,170529],{"class":35,"line":36},[33,170503,109471],{"class":63},[33,170505,148420],{"class":39},[33,170507,109],{"class":59},[33,170509,148425],{"class":117},[33,170511,14093],{"class":59},[33,170513,148430],{"class":117},[33,170515,14093],{"class":59},[33,170517,148435],{"class":6877},[33,170519,64],{"class":63},[33,170521,170522],{"class":117},"\"gbk\"",[33,170524,15372],{"class":59},[33,170526,33033],{"class":63},[33,170528,149782],{"class":6877},[33,170530,143],{"class":59},[33,170532,170533,170535,170537,170539],{"class":35,"line":43},[33,170534,148452],{"class":59},[33,170536,64],{"class":63},[33,170538,149782],{"class":6877},[33,170540,169915],{"class":59},[19,170542,170543],{},"写文件时建议统一 UTF-8：",[23,170545,170547],{"className":25,"code":170546,"language":27,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[30,170548,170549,170579],{"__ignoreMap":28},[33,170550,170551,170553,170555,170557,170559,170561,170563,170565,170567,170569,170571,170573,170575,170577],{"class":35,"line":36},[33,170552,109471],{"class":63},[33,170554,148420],{"class":39},[33,170556,109],{"class":59},[33,170558,148425],{"class":117},[33,170560,14093],{"class":59},[33,170562,153604],{"class":117},[33,170564,14093],{"class":59},[33,170566,148435],{"class":6877},[33,170568,64],{"class":63},[33,170570,148440],{"class":117},[33,170572,15372],{"class":59},[33,170574,33033],{"class":63},[33,170576,149782],{"class":6877},[33,170578,143],{"class":59},[33,170580,170581,170583,170585,170588],{"class":35,"line":43},[33,170582,170298],{"class":6877},[33,170584,170301],{"class":59},[33,170586,170587],{"class":117},"\"中文内容\"",[33,170589,157],{"class":59},[14,170591,170593],{"id":170592},"_89-pathlib","8.9 pathlib",[19,170595,170596,170599],{},[30,170597,170598],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[23,170601,170603],{"className":25,"code":170602,"language":27,"meta":28,"style":28},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[30,170604,170605,170615,170619,170637],{"__ignoreMap":28},[33,170606,170607,170609,170611,170613],{"class":35,"line":36},[33,170608,32388],{"class":63},[33,170610,109949],{"class":59},[33,170612,32045],{"class":63},[33,170614,109954],{"class":59},[33,170616,170617],{"class":35,"line":43},[33,170618,127],{"emptyLinePlaceholder":126},[33,170620,170621,170623,170625,170627,170630,170632,170634],{"class":35,"line":130},[33,170622,169725],{"class":59},[33,170624,64],{"class":63},[33,170626,110183],{"class":59},[33,170628,170629],{"class":117},"\"data\"",[33,170631,15372],{"class":59},[33,170633,2401],{"class":63},[33,170635,170636],{"class":117}," \"students.txt\"\n",[33,170638,170639,170641],{"class":35,"line":146},[33,170640,72],{"class":39},[33,170642,170643],{"class":59},"(path)\n",[19,170645,170646],{},"创建目录：",[23,170648,170650],{"className":25,"code":170649,"language":27,"meta":28,"style":28},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[30,170651,170652,170662,170666,170679],{"__ignoreMap":28},[33,170653,170654,170656,170658,170660],{"class":35,"line":36},[33,170655,32388],{"class":63},[33,170657,109949],{"class":59},[33,170659,32045],{"class":63},[33,170661,109954],{"class":59},[33,170663,170664],{"class":35,"line":43},[33,170665,127],{"emptyLinePlaceholder":126},[33,170667,170668,170671,170673,170675,170677],{"class":35,"line":130},[33,170669,170670],{"class":59},"data_dir ",[33,170672,64],{"class":63},[33,170674,110183],{"class":59},[33,170676,170629],{"class":117},[33,170678,157],{"class":59},[33,170680,170681,170684,170687,170689,170691],{"class":35,"line":146},[33,170682,170683],{"class":59},"data_dir.mkdir(",[33,170685,170686],{"class":6877},"exist_ok",[33,170688,64],{"class":63},[33,170690,33126],{"class":39},[33,170692,157],{"class":59},[19,170694,170695],{},"判断文件是否存在：",[23,170697,170699],{"className":25,"code":170698,"language":27,"meta":28,"style":28},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[30,170700,170701,170714,170718,170725],{"__ignoreMap":28},[33,170702,170703,170705,170707,170709,170712],{"class":35,"line":36},[33,170704,169725],{"class":59},[33,170706,64],{"class":63},[33,170708,110183],{"class":59},[33,170710,170711],{"class":117},"\"data\u002Fstudents.txt\"",[33,170713,157],{"class":59},[33,170715,170716],{"class":35,"line":43},[33,170717,127],{"emptyLinePlaceholder":126},[33,170719,170720,170722],{"class":35,"line":130},[33,170721,133],{"class":63},[33,170723,170724],{"class":59}," path.exists():\n",[33,170726,170727,170729,170731,170734],{"class":35,"line":146},[33,170728,149],{"class":39},[33,170730,109],{"class":59},[33,170732,170733],{"class":117},"\"文件存在\"",[33,170735,157],{"class":59},[19,170737,170738],{},"读写文本：",[23,170740,170742],{"className":25,"code":170741,"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,170743,170744,170756,170760,170777,170794],{"__ignoreMap":28},[33,170745,170746,170748,170750,170752,170754],{"class":35,"line":36},[33,170747,169725],{"class":59},[33,170749,64],{"class":63},[33,170751,110183],{"class":59},[33,170753,148425],{"class":117},[33,170755,157],{"class":59},[33,170757,170758],{"class":35,"line":43},[33,170759,127],{"emptyLinePlaceholder":126},[33,170761,170762,170765,170767,170769,170771,170773,170775],{"class":35,"line":130},[33,170763,170764],{"class":59},"path.write_text(",[33,170766,147508],{"class":117},[33,170768,14093],{"class":59},[33,170770,148435],{"class":6877},[33,170772,64],{"class":63},[33,170774,148440],{"class":117},[33,170776,157],{"class":59},[33,170778,170779,170781,170783,170786,170788,170790,170792],{"class":35,"line":146},[33,170780,169908],{"class":59},[33,170782,64],{"class":63},[33,170784,170785],{"class":59}," path.read_text(",[33,170787,148435],{"class":6877},[33,170789,64],{"class":63},[33,170791,148440],{"class":117},[33,170793,157],{"class":59},[33,170795,170796,170798],{"class":35,"line":267},[33,170797,72],{"class":39},[33,170799,169922],{"class":59},[14,170801,170803],{"id":170802},"_810-json文件","8.10 JSON文件",[19,170805,170806],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[23,170808,170810],{"className":25,"code":170809,"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,170811,170812,170818,170822,170830,170840,170850,170858,170862,170866,170891],{"__ignoreMap":28},[33,170813,170814,170816],{"class":35,"line":36},[33,170815,32045],{"class":63},[33,170817,148720],{"class":59},[33,170819,170820],{"class":35,"line":43},[33,170821,127],{"emptyLinePlaceholder":126},[33,170823,170824,170826,170828],{"class":35,"line":130},[33,170825,151110],{"class":59},[33,170827,64],{"class":63},[33,170829,17228],{"class":59},[33,170831,170832,170834,170836,170838],{"class":35,"line":146},[33,170833,148649],{"class":117},[33,170835,53082],{"class":59},[33,170837,151517],{"class":117},[33,170839,33116],{"class":59},[33,170841,170842,170844,170846,170848],{"class":35,"line":267},[33,170843,165951],{"class":117},[33,170845,53082],{"class":59},[33,170847,2467],{"class":39},[33,170849,33116],{"class":59},[33,170851,170852,170854,170856],{"class":35,"line":275},[33,170853,165962],{"class":117},[33,170855,53082],{"class":59},[33,170857,165967],{"class":39},[33,170859,170860],{"class":35,"line":392},[33,170861,3247],{"class":59},[33,170863,170864],{"class":35,"line":406},[33,170865,127],{"emptyLinePlaceholder":126},[33,170867,170868,170870,170872,170875,170877,170879,170881,170883,170885,170887,170889],{"class":35,"line":418},[33,170869,158062],{"class":59},[33,170871,64],{"class":63},[33,170873,170874],{"class":59}," json.dumps(student, ",[33,170876,148766],{"class":6877},[33,170878,64],{"class":63},[33,170880,35634],{"class":39},[33,170882,14093],{"class":59},[33,170884,153640],{"class":6877},[33,170886,64],{"class":63},[33,170888,1897],{"class":39},[33,170890,157],{"class":59},[33,170892,170893,170895],{"class":35,"line":425},[33,170894,72],{"class":39},[33,170896,165485],{"class":59},[19,170898,170899],{},"写入 JSON 文件：",[23,170901,170903],{"className":25,"code":170902,"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,170904,170905,170911,170915,170923,170951,170979,170983,170987,171017],{"__ignoreMap":28},[33,170906,170907,170909],{"class":35,"line":36},[33,170908,32045],{"class":63},[33,170910,148720],{"class":59},[33,170912,170913],{"class":35,"line":43},[33,170914,127],{"emptyLinePlaceholder":126},[33,170916,170917,170919,170921],{"class":35,"line":130},[33,170918,161130],{"class":59},[33,170920,64],{"class":63},[33,170922,57091],{"class":59},[33,170924,170925,170927,170929,170931,170933,170935,170937,170939,170941,170943,170945,170947,170949],{"class":35,"line":146},[33,170926,150014],{"class":59},[33,170928,64321],{"class":117},[33,170930,53082],{"class":59},[33,170932,151517],{"class":117},[33,170934,14093],{"class":59},[33,170936,70766],{"class":117},[33,170938,53082],{"class":59},[33,170940,2467],{"class":39},[33,170942,14093],{"class":59},[33,170944,153100],{"class":117},[33,170946,53082],{"class":59},[33,170948,2804],{"class":39},[33,170950,6591],{"class":59},[33,170952,170953,170955,170957,170959,170961,170963,170965,170967,170969,170971,170973,170975,170977],{"class":35,"line":267},[33,170954,150014],{"class":59},[33,170956,64321],{"class":117},[33,170958,53082],{"class":59},[33,170960,152564],{"class":117},[33,170962,14093],{"class":59},[33,170964,70766],{"class":117},[33,170966,53082],{"class":59},[33,170968,2442],{"class":39},[33,170970,14093],{"class":59},[33,170972,153100],{"class":117},[33,170974,53082],{"class":59},[33,170976,2628],{"class":39},[33,170978,6591],{"class":59},[33,170980,170981],{"class":35,"line":275},[33,170982,34893],{"class":59},[33,170984,170985],{"class":35,"line":392},[33,170986,127],{"emptyLinePlaceholder":126},[33,170988,170989,170991,170993,170995,170997,170999,171001,171003,171005,171007,171009,171011,171013,171015],{"class":35,"line":406},[33,170990,109471],{"class":63},[33,170992,148420],{"class":39},[33,170994,109],{"class":59},[33,170996,153459],{"class":117},[33,170998,14093],{"class":59},[33,171000,153604],{"class":117},[33,171002,14093],{"class":59},[33,171004,148435],{"class":6877},[33,171006,64],{"class":63},[33,171008,148440],{"class":117},[33,171010,15372],{"class":59},[33,171012,33033],{"class":63},[33,171014,149782],{"class":6877},[33,171016,143],{"class":59},[33,171018,171019,171022,171024,171026,171028,171030,171032,171034,171036,171038,171040],{"class":35,"line":418},[33,171020,171021],{"class":59},"    json.dump(students, ",[33,171023,47000],{"class":6877},[33,171025,14093],{"class":59},[33,171027,148766],{"class":6877},[33,171029,64],{"class":63},[33,171031,35634],{"class":39},[33,171033,14093],{"class":59},[33,171035,153640],{"class":6877},[33,171037,64],{"class":63},[33,171039,1897],{"class":39},[33,171041,157],{"class":59},[19,171043,171044],{},"读取 JSON 文件：",[23,171046,171048],{"className":25,"code":171047,"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,171049,171050,171056,171060,171090,171102,171106],{"__ignoreMap":28},[33,171051,171052,171054],{"class":35,"line":36},[33,171053,32045],{"class":63},[33,171055,148720],{"class":59},[33,171057,171058],{"class":35,"line":43},[33,171059,127],{"emptyLinePlaceholder":126},[33,171061,171062,171064,171066,171068,171070,171072,171074,171076,171078,171080,171082,171084,171086,171088],{"class":35,"line":130},[33,171063,109471],{"class":63},[33,171065,148420],{"class":39},[33,171067,109],{"class":59},[33,171069,153459],{"class":117},[33,171071,14093],{"class":59},[33,171073,148430],{"class":117},[33,171075,14093],{"class":59},[33,171077,148435],{"class":6877},[33,171079,64],{"class":63},[33,171081,148440],{"class":117},[33,171083,15372],{"class":59},[33,171085,33033],{"class":63},[33,171087,149782],{"class":6877},[33,171089,143],{"class":59},[33,171091,171092,171094,171096,171098,171100],{"class":35,"line":146},[33,171093,154662],{"class":59},[33,171095,64],{"class":63},[33,171097,149793],{"class":59},[33,171099,47000],{"class":6877},[33,171101,157],{"class":59},[33,171103,171104],{"class":35,"line":267},[33,171105,127],{"emptyLinePlaceholder":126},[33,171107,171108,171110],{"class":35,"line":275},[33,171109,72],{"class":39},[33,171111,166409],{"class":59},[14,171113,171115],{"id":171114},"_811-csv文件","8.11 CSV文件",[19,171117,171118],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171120,171121],{},"写入 CSV：",[23,171123,171125],{"className":25,"code":171124,"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,171126,171127,171134,171138,171146,171164,171180,171196,171200,171204,171244,171258],{"__ignoreMap":28},[33,171128,171129,171131],{"class":35,"line":36},[33,171130,32045],{"class":63},[33,171132,171133],{"class":59}," csv\n",[33,171135,171136],{"class":35,"line":43},[33,171137,127],{"emptyLinePlaceholder":126},[33,171139,171140,171142,171144],{"class":35,"line":130},[33,171141,161130],{"class":59},[33,171143,64],{"class":63},[33,171145,57091],{"class":59},[33,171147,171148,171151,171153,171155,171157,171159,171162],{"class":35,"line":146},[33,171149,171150],{"class":59},"    [",[33,171152,74740],{"class":117},[33,171154,14093],{"class":59},[33,171156,74773],{"class":117},[33,171158,14093],{"class":59},[33,171160,171161],{"class":117},"\"成绩\"",[33,171163,89476],{"class":59},[33,171165,171166,171168,171170,171172,171174,171176,171178],{"class":35,"line":267},[33,171167,171150],{"class":59},[33,171169,151517],{"class":117},[33,171171,14093],{"class":59},[33,171173,2467],{"class":39},[33,171175,14093],{"class":59},[33,171177,2804],{"class":39},[33,171179,89476],{"class":59},[33,171181,171182,171184,171186,171188,171190,171192,171194],{"class":35,"line":275},[33,171183,171150],{"class":59},[33,171185,152564],{"class":117},[33,171187,14093],{"class":59},[33,171189,2442],{"class":39},[33,171191,14093],{"class":59},[33,171193,2628],{"class":39},[33,171195,89476],{"class":59},[33,171197,171198],{"class":35,"line":392},[33,171199,34893],{"class":59},[33,171201,171202],{"class":35,"line":406},[33,171203,127],{"emptyLinePlaceholder":126},[33,171205,171206,171208,171210,171212,171215,171217,171219,171221,171223,171225,171227,171229,171232,171234,171236,171238,171240,171242],{"class":35,"line":418},[33,171207,109471],{"class":63},[33,171209,148420],{"class":39},[33,171211,109],{"class":59},[33,171213,171214],{"class":117},"\"students.csv\"",[33,171216,14093],{"class":59},[33,171218,153604],{"class":117},[33,171220,14093],{"class":59},[33,171222,148435],{"class":6877},[33,171224,64],{"class":63},[33,171226,148440],{"class":117},[33,171228,14093],{"class":59},[33,171230,171231],{"class":6877},"newline",[33,171233,64],{"class":63},[33,171235,9312],{"class":117},[33,171237,15372],{"class":59},[33,171239,33033],{"class":63},[33,171241,149782],{"class":6877},[33,171243,143],{"class":59},[33,171245,171246,171249,171251,171254,171256],{"class":35,"line":425},[33,171247,171248],{"class":59},"    writer ",[33,171250,64],{"class":63},[33,171252,171253],{"class":59}," csv.writer(",[33,171255,47000],{"class":6877},[33,171257,157],{"class":59},[33,171259,171260],{"class":35,"line":1147},[33,171261,171262],{"class":59},"    writer.writerows(students)\n",[19,171264,171265],{},"读取 CSV：",[23,171267,171269],{"className":25,"code":171268,"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,171270,171271,171277,171281,171311,171325,171337],{"__ignoreMap":28},[33,171272,171273,171275],{"class":35,"line":36},[33,171274,32045],{"class":63},[33,171276,171133],{"class":59},[33,171278,171279],{"class":35,"line":43},[33,171280,127],{"emptyLinePlaceholder":126},[33,171282,171283,171285,171287,171289,171291,171293,171295,171297,171299,171301,171303,171305,171307,171309],{"class":35,"line":130},[33,171284,109471],{"class":63},[33,171286,148420],{"class":39},[33,171288,109],{"class":59},[33,171290,171214],{"class":117},[33,171292,14093],{"class":59},[33,171294,148430],{"class":117},[33,171296,14093],{"class":59},[33,171298,148435],{"class":6877},[33,171300,64],{"class":63},[33,171302,148440],{"class":117},[33,171304,15372],{"class":59},[33,171306,33033],{"class":63},[33,171308,149782],{"class":6877},[33,171310,143],{"class":59},[33,171312,171313,171316,171318,171321,171323],{"class":35,"line":146},[33,171314,171315],{"class":59},"    reader ",[33,171317,64],{"class":63},[33,171319,171320],{"class":59}," csv.reader(",[33,171322,47000],{"class":6877},[33,171324,157],{"class":59},[33,171326,171327,171329,171332,171334],{"class":35,"line":267},[33,171328,4864],{"class":63},[33,171330,171331],{"class":59}," row ",[33,171333,27699],{"class":63},[33,171335,171336],{"class":59}," reader:\n",[33,171338,171339,171341],{"class":35,"line":275},[33,171340,583],{"class":39},[33,171342,171343],{"class":59},"(row)\n",[19,171345,171346],{},"使用字典写入：",[23,171348,171350],{"className":25,"code":171349,"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,171351,171352,171358,171362,171370,171398,171426,171430,171434,171472,171493,171514,171519],{"__ignoreMap":28},[33,171353,171354,171356],{"class":35,"line":36},[33,171355,32045],{"class":63},[33,171357,171133],{"class":59},[33,171359,171360],{"class":35,"line":43},[33,171361,127],{"emptyLinePlaceholder":126},[33,171363,171364,171366,171368],{"class":35,"line":130},[33,171365,161130],{"class":59},[33,171367,64],{"class":63},[33,171369,57091],{"class":59},[33,171371,171372,171374,171376,171378,171380,171382,171384,171386,171388,171390,171392,171394,171396],{"class":35,"line":146},[33,171373,150014],{"class":59},[33,171375,64321],{"class":117},[33,171377,53082],{"class":59},[33,171379,151517],{"class":117},[33,171381,14093],{"class":59},[33,171383,70766],{"class":117},[33,171385,53082],{"class":59},[33,171387,2467],{"class":39},[33,171389,14093],{"class":59},[33,171391,153100],{"class":117},[33,171393,53082],{"class":59},[33,171395,2804],{"class":39},[33,171397,6591],{"class":59},[33,171399,171400,171402,171404,171406,171408,171410,171412,171414,171416,171418,171420,171422,171424],{"class":35,"line":267},[33,171401,150014],{"class":59},[33,171403,64321],{"class":117},[33,171405,53082],{"class":59},[33,171407,152564],{"class":117},[33,171409,14093],{"class":59},[33,171411,70766],{"class":117},[33,171413,53082],{"class":59},[33,171415,2442],{"class":39},[33,171417,14093],{"class":59},[33,171419,153100],{"class":117},[33,171421,53082],{"class":59},[33,171423,2628],{"class":39},[33,171425,6591],{"class":59},[33,171427,171428],{"class":35,"line":275},[33,171429,34893],{"class":59},[33,171431,171432],{"class":35,"line":392},[33,171433,127],{"emptyLinePlaceholder":126},[33,171435,171436,171438,171440,171442,171444,171446,171448,171450,171452,171454,171456,171458,171460,171462,171464,171466,171468,171470],{"class":35,"line":406},[33,171437,109471],{"class":63},[33,171439,148420],{"class":39},[33,171441,109],{"class":59},[33,171443,171214],{"class":117},[33,171445,14093],{"class":59},[33,171447,153604],{"class":117},[33,171449,14093],{"class":59},[33,171451,148435],{"class":6877},[33,171453,64],{"class":63},[33,171455,148440],{"class":117},[33,171457,14093],{"class":59},[33,171459,171231],{"class":6877},[33,171461,64],{"class":63},[33,171463,9312],{"class":117},[33,171465,15372],{"class":59},[33,171467,33033],{"class":63},[33,171469,149782],{"class":6877},[33,171471,143],{"class":59},[33,171473,171474,171477,171479,171481,171483,171485,171487,171489,171491],{"class":35,"line":418},[33,171475,171476],{"class":59},"    fieldnames ",[33,171478,64],{"class":63},[33,171480,53871],{"class":59},[33,171482,64321],{"class":117},[33,171484,14093],{"class":59},[33,171486,70766],{"class":117},[33,171488,14093],{"class":59},[33,171490,153100],{"class":117},[33,171492,34893],{"class":59},[33,171494,171495,171497,171499,171502,171504,171506,171509,171511],{"class":35,"line":425},[33,171496,171248],{"class":59},[33,171498,64],{"class":63},[33,171500,171501],{"class":59}," csv.DictWriter(",[33,171503,47000],{"class":6877},[33,171505,14093],{"class":59},[33,171507,171508],{"class":6877},"fieldnames",[33,171510,64],{"class":63},[33,171512,171513],{"class":59},"fieldnames)\n",[33,171515,171516],{"class":35,"line":1147},[33,171517,171518],{"class":59},"    writer.writeheader()\n",[33,171520,171521],{"class":35,"line":1329},[33,171522,171262],{"class":59},[14,171524,171526],{"id":171525},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171528,1173],{},[162,171530,171531,171534,171537],{},[165,171532,171533],{},"读取文本文件。",[165,171535,171536],{},"统计每个单词出现次数。",[165,171538,171539],{},"输出出现次数最多的前 10 个单词。",[19,171541,1187],{},[23,171543,171545],{"className":25,"code":171544,"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,171546,171547,171557,171561,171574,171590,171594,171604,171613,171617,171629,171649,171658,171662,171680,171684,171714,171718,171734],{"__ignoreMap":28},[33,171548,171549,171551,171553,171555],{"class":35,"line":36},[33,171550,32388],{"class":63},[33,171552,109949],{"class":59},[33,171554,32045],{"class":63},[33,171556,109954],{"class":59},[33,171558,171559],{"class":35,"line":43},[33,171560,127],{"emptyLinePlaceholder":126},[33,171562,171563,171565,171567,171569,171572],{"class":35,"line":130},[33,171564,169725],{"class":59},[33,171566,64],{"class":63},[33,171568,110183],{"class":59},[33,171570,171571],{"class":117},"\"article.txt\"",[33,171573,157],{"class":59},[33,171575,171576,171578,171580,171582,171584,171586,171588],{"class":35,"line":146},[33,171577,169908],{"class":59},[33,171579,64],{"class":63},[33,171581,170785],{"class":59},[33,171583,148435],{"class":6877},[33,171585,64],{"class":63},[33,171587,148440],{"class":117},[33,171589,157],{"class":59},[33,171591,171592],{"class":35,"line":267},[33,171593,127],{"emptyLinePlaceholder":126},[33,171595,171596,171599,171601],{"class":35,"line":275},[33,171597,171598],{"class":59},"words ",[33,171600,64],{"class":63},[33,171602,171603],{"class":59}," content.lower().split()\n",[33,171605,171606,171609,171611],{"class":35,"line":392},[33,171607,171608],{"class":59},"counter ",[33,171610,64],{"class":63},[33,171612,89508],{"class":59},[33,171614,171615],{"class":35,"line":406},[33,171616,127],{"emptyLinePlaceholder":126},[33,171618,171619,171621,171624,171626],{"class":35,"line":418},[33,171620,4690],{"class":63},[33,171622,171623],{"class":59}," word ",[33,171625,27699],{"class":63},[33,171627,171628],{"class":59}," words:\n",[33,171630,171631,171634,171636,171639,171642,171644,171647],{"class":35,"line":425},[33,171632,171633],{"class":59},"    word ",[33,171635,64],{"class":63},[33,171637,171638],{"class":59}," word.strip(",[33,171640,171641],{"class":117},"\".,!?;:",[33,171643,158113],{"class":39},[33,171645,171646],{"class":117},"'()[]\"",[33,171648,157],{"class":59},[33,171650,171651,171653,171655],{"class":35,"line":1147},[33,171652,567],{"class":63},[33,171654,783],{"class":63},[33,171656,171657],{"class":59}," word:\n",[33,171659,171660],{"class":35,"line":1329},[33,171661,150141],{"class":63},[33,171663,171664,171667,171669,171672,171674,171676,171678],{"class":35,"line":1341},[33,171665,171666],{"class":59},"    counter[word] ",[33,171668,64],{"class":63},[33,171670,171671],{"class":59}," counter.get(word, ",[33,171673,2010],{"class":39},[33,171675,15372],{"class":59},[33,171677,2298],{"class":63},[33,171679,1434],{"class":39},[33,171681,171682],{"class":35,"line":1348},[33,171683,127],{"emptyLinePlaceholder":126},[33,171685,171686,171689,171691,171693,171696,171698,171700,171702,171704,171706,171708,171710,171712],{"class":35,"line":1529},[33,171687,171688],{"class":59},"items ",[33,171690,64],{"class":63},[33,171692,165018],{"class":39},[33,171694,171695],{"class":59},"(counter.items(), ",[33,171697,155570],{"class":6877},[33,171699,155573],{"class":63},[33,171701,155576],{"class":59},[33,171703,2036],{"class":39},[33,171705,113839],{"class":59},[33,171707,164942],{"class":6877},[33,171709,64],{"class":63},[33,171711,33126],{"class":39},[33,171713,157],{"class":59},[33,171715,171716],{"class":35,"line":1546},[33,171717,127],{"emptyLinePlaceholder":126},[33,171719,171720,171722,171725,171727,171730,171732],{"class":35,"line":1551},[33,171721,4690],{"class":63},[33,171723,171724],{"class":59}," word, count ",[33,171726,27699],{"class":63},[33,171728,171729],{"class":59}," items[:",[33,171731,2264],{"class":39},[33,171733,167169],{"class":59},[33,171735,171736,171738],{"class":35,"line":1566},[33,171737,149],{"class":39},[33,171739,171740],{"class":59},"(word, count)\n",[14,171742,171744],{"id":171743},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[23,171746,171748],{"className":25,"code":171747,"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,171749,171750,171756,171766,171770,171782,171786,171790,171798,171808,171814,171818,171848,171858,171862,171866,171874,171904,171928,171932,171936,171944,171973,171978],{"__ignoreMap":28},[33,171751,171752,171754],{"class":35,"line":36},[33,171753,32045],{"class":63},[33,171755,148720],{"class":59},[33,171757,171758,171760,171762,171764],{"class":35,"line":43},[33,171759,32388],{"class":63},[33,171761,109949],{"class":59},[33,171763,32045],{"class":63},[33,171765,109954],{"class":59},[33,171767,171768],{"class":35,"line":130},[33,171769,127],{"emptyLinePlaceholder":126},[33,171771,171772,171774,171776,171778,171780],{"class":35,"line":146},[33,171773,153452],{"class":39},[33,171775,15222],{"class":63},[33,171777,110183],{"class":59},[33,171779,153459],{"class":117},[33,171781,157],{"class":59},[33,171783,171784],{"class":35,"line":267},[33,171785,127],{"emptyLinePlaceholder":126},[33,171787,171788],{"class":35,"line":275},[33,171789,127],{"emptyLinePlaceholder":126},[33,171791,171792,171794,171796],{"class":35,"line":392},[33,171793,33597],{"class":63},[33,171795,153476],{"class":3632},[33,171797,33603],{"class":59},[33,171799,171800,171802,171804,171806],{"class":35,"line":406},[33,171801,567],{"class":63},[33,171803,783],{"class":63},[33,171805,153487],{"class":39},[33,171807,153490],{"class":59},[33,171809,171810,171812],{"class":35,"line":418},[33,171811,16410],{"class":63},[33,171813,53483],{"class":59},[33,171815,171816],{"class":35,"line":425},[33,171817,127],{"emptyLinePlaceholder":126},[33,171819,171820,171822,171824,171826,171828,171830,171832,171834,171836,171838,171840,171842,171844,171846],{"class":35,"line":1147},[33,171821,35825],{"class":63},[33,171823,148420],{"class":39},[33,171825,109],{"class":59},[33,171827,153452],{"class":39},[33,171829,14093],{"class":59},[33,171831,148430],{"class":117},[33,171833,14093],{"class":59},[33,171835,148435],{"class":6877},[33,171837,64],{"class":63},[33,171839,148440],{"class":117},[33,171841,15372],{"class":59},[33,171843,33033],{"class":63},[33,171845,149782],{"class":6877},[33,171847,143],{"class":59},[33,171849,171850,171852,171854,171856],{"class":35,"line":1329},[33,171851,16410],{"class":63},[33,171853,149793],{"class":59},[33,171855,47000],{"class":6877},[33,171857,157],{"class":59},[33,171859,171860],{"class":35,"line":1341},[33,171861,127],{"emptyLinePlaceholder":126},[33,171863,171864],{"class":35,"line":1348},[33,171865,127],{"emptyLinePlaceholder":126},[33,171867,171868,171870,171872],{"class":35,"line":1529},[33,171869,33597],{"class":63},[33,171871,153586],{"class":3632},[33,171873,153589],{"class":59},[33,171875,171876,171878,171880,171882,171884,171886,171888,171890,171892,171894,171896,171898,171900,171902],{"class":35,"line":1546},[33,171877,35825],{"class":63},[33,171879,148420],{"class":39},[33,171881,109],{"class":59},[33,171883,153452],{"class":39},[33,171885,14093],{"class":59},[33,171887,153604],{"class":117},[33,171889,14093],{"class":59},[33,171891,148435],{"class":6877},[33,171893,64],{"class":63},[33,171895,148440],{"class":117},[33,171897,15372],{"class":59},[33,171899,33033],{"class":63},[33,171901,149782],{"class":6877},[33,171903,143],{"class":59},[33,171905,171906,171908,171910,171912,171914,171916,171918,171920,171922,171924,171926],{"class":35,"line":1551},[33,171907,153625],{"class":59},[33,171909,47000],{"class":6877},[33,171911,14093],{"class":59},[33,171913,148766],{"class":6877},[33,171915,64],{"class":63},[33,171917,35634],{"class":39},[33,171919,14093],{"class":59},[33,171921,153640],{"class":6877},[33,171923,64],{"class":63},[33,171925,1897],{"class":39},[33,171927,157],{"class":59},[33,171929,171930],{"class":35,"line":1566},[33,171931,127],{"emptyLinePlaceholder":126},[33,171933,171934],{"class":35,"line":1578},[33,171935,127],{"emptyLinePlaceholder":126},[33,171937,171938,171940,171942],{"class":35,"line":1583},[33,171939,161130],{"class":59},[33,171941,64],{"class":63},[33,171943,154667],{"class":59},[33,171945,171946,171949,171951,171953,171955,171957,171959,171961,171963,171965,171967,171969,171971],{"class":35,"line":3369},[33,171947,171948],{"class":59},"students.append({",[33,171950,64321],{"class":117},[33,171952,53082],{"class":59},[33,171954,151517],{"class":117},[33,171956,14093],{"class":59},[33,171958,70766],{"class":117},[33,171960,53082],{"class":59},[33,171962,2467],{"class":39},[33,171964,14093],{"class":59},[33,171966,153100],{"class":117},[33,171968,53082],{"class":59},[33,171970,2804],{"class":39},[33,171972,166566],{"class":59},[33,171974,171975],{"class":35,"line":3396},[33,171976,171977],{"class":59},"save_students(students)\n",[33,171979,171980,171982,171984,171987],{"class":35,"line":3401},[33,171981,72],{"class":39},[33,171983,109],{"class":59},[33,171985,171986],{"class":117},"\"保存成功\"",[33,171988,157],{"class":59},[14,171990,171992],{"id":171991},"_814-易错点","8.14 易错点",[162,171994,171995,171999,172005,172010,172017,172024],{},[165,171996,171997,170258],{},[30,171998,2612],{},[165,172000,172001,172002,1628],{},"读写中文要指定 ",[30,172003,172004],{},"encoding=\"utf-8\"",[165,172006,172007,172008,1628],{},"打开文件后要关闭，推荐使用 ",[30,172009,109471],{},[165,172011,172012,172013,172016],{},"读取大文件不要直接 ",[30,172014,172015],{},"read()"," 全部内容。",[165,172018,172019,172020,172023],{},"Windows 写 CSV 时建议加 ",[30,172021,172022],{},"newline=\"\"","，避免空行。",[165,172025,172026],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172028,172030],{"id":172029},"_815-本章练习","8.15 本章练习",[162,172032,172033,172040,172045,172048,172051],{},[165,172034,172035,172036,172039],{},"写入一个 ",[30,172037,172038],{},"students.txt","，每行保存一个学生姓名。",[165,172041,105993,172042,172044],{},[30,172043,172038],{}," 并输出所有学生。",[165,172046,172047],{},"把学生列表保存为 JSON 文件。",[165,172049,172050],{},"从 JSON 文件读取学生数据，计算平均分。",[165,172052,172053,172054,172057,172058,172061],{},"写一个日志函数 ",[30,172055,172056],{},"write_log(message)","，每次调用向 ",[30,172059,172060],{},"app.log"," 追加一行。",[1729,172063,172064],{},"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":43,"depth":43,"links":172066},[172067,172068,172072,172073,172079,172080,172081,172082,172083,172084,172085,172086,172087,172088,172089],{"id":169578,"depth":43,"text":169579},{"id":169619,"depth":43,"text":169620,"children":172069},[172070,172071],{"id":169623,"depth":130,"text":169624},{"id":169657,"depth":130,"text":169658},{"id":169771,"depth":43,"text":169772},{"id":169864,"depth":43,"text":169865,"children":172074},[172075,172076,172077,172078],{"id":169868,"depth":130,"text":169869},{"id":169955,"depth":130,"text":169956},{"id":170025,"depth":130,"text":170026},{"id":170119,"depth":130,"text":170120},{"id":170189,"depth":43,"text":170190},{"id":170252,"depth":43,"text":170253},{"id":170413,"depth":43,"text":170414},{"id":170476,"depth":43,"text":170477},{"id":170592,"depth":43,"text":170593},{"id":170802,"depth":43,"text":170803},{"id":171114,"depth":43,"text":171115},{"id":171525,"depth":43,"text":171526},{"id":171743,"depth":43,"text":171744},{"id":171991,"depth":43,"text":171992},{"id":172029,"depth":43,"text":172030},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169570,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172096,"title":172097,"body":172098,"description":1751,"extension":1752,"meta":174284,"navigation":126,"path":174285,"seo":174286,"stem":174287,"__hash__":174288},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172099,"toc":174251},[172100,172103,172107,172110,172113,172205,172207,172226,172231,172235,172238,172241,172270,172277,172280,172284,172287,172316,172318,172370,172376,172429,172433,172531,172534,172601,172605,172662,172664,172670,172674,172679,172685,172776,172781,172785,172788,172866,172869,172907,172911,173029,173032,173036,173039,173084,173087,173091,173096,173102,173152,173155,173186,173190,173194,173224,173228,173263,173267,173302,173342,173346,173362,173365,173369,173373,173452,173456,173497,173501,173556,173560,173594,173598,173628,173637,173644,173650,173707,173710,173718,173721,173725,173732,173735,173741,173744,173761,173766,173770,173776,173789,173792,173829,173832,173843,173846,173860,173863,173877,173881,173888,173921,173924,173926,173932,173935,173939,173941,173947,173952,174125,174129,174192,174196,174220,174224,174248],[10,172101,172097],{"id":172102},"_9-异常模块与包",[14,172104,172106],{"id":172105},"_91-什么是异常","9.1 什么是异常",[19,172108,172109],{},"异常是程序运行过程中出现的错误。",[19,172111,172112],{},"常见异常：",[1956,172114,172115,172124],{},[1959,172116,172117],{},[1962,172118,172119,172122],{},[1965,172120,172121],{},"异常",[1965,172123,27525],{},[2003,172125,172126,172136,172146,172155,172165,172175,172185,172195],{},[1962,172127,172128,172133],{},[2008,172129,172130],{},[30,172131,172132],{},"NameError",[2008,172134,172135],{},"使用了未定义变量",[1962,172137,172138,172143],{},[2008,172139,172140],{},[30,172141,172142],{},"TypeError",[2008,172144,172145],{},"类型不匹配",[1962,172147,172148,172152],{},[2008,172149,172150],{},[30,172151,156457],{},[2008,172153,172154],{},"值不合法",[1962,172156,172157,172162],{},[2008,172158,172159],{},[30,172160,172161],{},"IndexError",[2008,172163,172164],{},"列表索引越界",[1962,172166,172167,172172],{},[2008,172168,172169],{},[30,172170,172171],{},"KeyError",[2008,172173,172174],{},"字典 key 不存在",[1962,172176,172177,172182],{},[2008,172178,172179],{},[30,172180,172181],{},"FileNotFoundError",[2008,172183,172184],{},"文件不存在",[1962,172186,172187,172192],{},[2008,172188,172189],{},[30,172190,172191],{},"ZeroDivisionError",[2008,172193,172194],{},"除数为 0",[1962,172196,172197,172202],{},[2008,172198,172199],{},[30,172200,172201],{},"ImportError",[2008,172203,172204],{},"导入失败",[19,172206,958],{},[23,172208,172210],{"className":25,"code":172209,"language":27,"meta":28,"style":28},"num = int(\"abc\")\n",[30,172211,172212],{"__ignoreMap":28},[33,172213,172214,172216,172218,172220,172222,172224],{"class":35,"line":36},[33,172215,157407],{"class":59},[33,172217,64],{"class":63},[33,172219,106],{"class":39},[33,172221,109],{"class":59},[33,172223,157500],{"class":117},[33,172225,157],{"class":59},[19,172227,172228,172229,1628],{},"会触发 ",[30,172230,156457],{},[14,172232,172234],{"id":172233},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172236,172237],{},"如果不处理异常，程序会直接终止。",[19,172239,172240],{},"例如用户输入年龄：",[23,172242,172244],{"className":25,"code":172243,"language":27,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[30,172245,172246,172264],{"__ignoreMap":28},[33,172247,172248,172250,172252,172254,172256,172258,172260,172262],{"class":35,"line":36},[33,172249,60],{"class":59},[33,172251,64],{"class":63},[33,172253,106],{"class":39},[33,172255,109],{"class":59},[33,172257,112],{"class":39},[33,172259,109],{"class":59},[33,172261,118],{"class":117},[33,172263,121],{"class":59},[33,172265,172266,172268],{"class":35,"line":43},[33,172267,72],{"class":39},[33,172269,157382],{"class":59},[19,172271,172272,172273,172276],{},"用户输入 ",[30,172274,172275],{},"abc","，程序就会报错退出。",[19,172278,172279],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172281,172283],{"id":172282},"_93-try-except","9.3 try except",[19,172285,172286],{},"基础语法：",[23,172288,172290],{"className":25,"code":172289,"language":27,"meta":28,"style":28},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[30,172291,172292,172299,172304,172311],{"__ignoreMap":28},[33,172293,172294,172297],{"class":35,"line":36},[33,172295,172296],{"class":63},"try",[33,172298,143],{"class":59},[33,172300,172301],{"class":35,"line":43},[33,172302,172303],{"class":59},"    可能出错的代码\n",[33,172305,172306,172309],{"class":35,"line":130},[33,172307,172308],{"class":63},"except",[33,172310,143],{"class":59},[33,172312,172313],{"class":35,"line":146},[33,172314,172315],{"class":59},"    出错后的处理代码\n",[19,172317,958],{},[23,172319,172321],{"className":25,"code":172320,"language":27,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[30,172322,172323,172329,172347,172353,172359],{"__ignoreMap":28},[33,172324,172325,172327],{"class":35,"line":36},[33,172326,172296],{"class":63},[33,172328,143],{"class":59},[33,172330,172331,172333,172335,172337,172339,172341,172343,172345],{"class":35,"line":43},[33,172332,154013],{"class":59},[33,172334,64],{"class":63},[33,172336,106],{"class":39},[33,172338,109],{"class":59},[33,172340,112],{"class":39},[33,172342,109],{"class":59},[33,172344,118],{"class":117},[33,172346,121],{"class":59},[33,172348,172349,172351],{"class":35,"line":130},[33,172350,149],{"class":39},[33,172352,157382],{"class":59},[33,172354,172355,172357],{"class":35,"line":146},[33,172356,172308],{"class":63},[33,172358,143],{"class":59},[33,172360,172361,172363,172365,172368],{"class":35,"line":267},[33,172362,149],{"class":39},[33,172364,109],{"class":59},[33,172366,172367],{"class":117},"\"年龄必须是数字\"",[33,172369,157],{"class":59},[19,172371,172372,172373,172375],{},"不建议裸写 ",[30,172374,172308],{},"，最好指定异常类型。",[23,172377,172379],{"className":25,"code":172378,"language":27,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[30,172380,172381,172387,172405,172411,172419],{"__ignoreMap":28},[33,172382,172383,172385],{"class":35,"line":36},[33,172384,172296],{"class":63},[33,172386,143],{"class":59},[33,172388,172389,172391,172393,172395,172397,172399,172401,172403],{"class":35,"line":43},[33,172390,154013],{"class":59},[33,172392,64],{"class":63},[33,172394,106],{"class":39},[33,172396,109],{"class":59},[33,172398,112],{"class":39},[33,172400,109],{"class":59},[33,172402,118],{"class":117},[33,172404,121],{"class":59},[33,172406,172407,172409],{"class":35,"line":130},[33,172408,149],{"class":39},[33,172410,157382],{"class":59},[33,172412,172413,172415,172417],{"class":35,"line":146},[33,172414,172308],{"class":63},[33,172416,153854],{"class":39},[33,172418,143],{"class":59},[33,172420,172421,172423,172425,172427],{"class":35,"line":267},[33,172422,149],{"class":39},[33,172424,109],{"class":59},[33,172426,172367],{"class":117},[33,172428,157],{"class":59},[14,172430,172432],{"id":172431},"_94-捕获多个异常","9.4 捕获多个异常",[23,172434,172436],{"className":25,"code":172435,"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,172437,172438,172444,172465,172485,172492,172500,172511,172520],{"__ignoreMap":28},[33,172439,172440,172442],{"class":35,"line":36},[33,172441,172296],{"class":63},[33,172443,143],{"class":59},[33,172445,172446,172449,172451,172453,172455,172457,172459,172461,172463],{"class":35,"line":43},[33,172447,172448],{"class":59},"    nums ",[33,172450,64],{"class":63},[33,172452,53871],{"class":59},[33,172454,2036],{"class":39},[33,172456,14093],{"class":59},[33,172458,1897],{"class":39},[33,172460,14093],{"class":59},[33,172462,1891],{"class":39},[33,172464,34893],{"class":59},[33,172466,172467,172470,172472,172474,172476,172478,172480,172483],{"class":35,"line":130},[33,172468,172469],{"class":59},"    index ",[33,172471,64],{"class":63},[33,172473,106],{"class":39},[33,172475,109],{"class":59},[33,172477,112],{"class":39},[33,172479,109],{"class":59},[33,172481,172482],{"class":117},"\"请输入索引:\"",[33,172484,121],{"class":59},[33,172486,172487,172489],{"class":35,"line":146},[33,172488,149],{"class":39},[33,172490,172491],{"class":59},"(nums[index])\n",[33,172493,172494,172496,172498],{"class":35,"line":267},[33,172495,172308],{"class":63},[33,172497,153854],{"class":39},[33,172499,143],{"class":59},[33,172501,172502,172504,172506,172509],{"class":35,"line":275},[33,172503,149],{"class":39},[33,172505,109],{"class":59},[33,172507,172508],{"class":117},"\"索引必须是整数\"",[33,172510,157],{"class":59},[33,172512,172513,172515,172518],{"class":35,"line":392},[33,172514,172308],{"class":63},[33,172516,172517],{"class":39}," IndexError",[33,172519,143],{"class":59},[33,172521,172522,172524,172526,172529],{"class":35,"line":406},[33,172523,149],{"class":39},[33,172525,109],{"class":59},[33,172527,172528],{"class":117},"\"索引越界\"",[33,172530,157],{"class":59},[19,172532,172533],{},"多个异常使用相同处理逻辑：",[23,172535,172537],{"className":25,"code":172536,"language":27,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[30,172538,172539,172545,172563,172576,172590],{"__ignoreMap":28},[33,172540,172541,172543],{"class":35,"line":36},[33,172542,172296],{"class":63},[33,172544,143],{"class":59},[33,172546,172547,172549,172551,172553,172555,172557,172559,172561],{"class":35,"line":43},[33,172548,47239],{"class":59},[33,172550,64],{"class":63},[33,172552,106],{"class":39},[33,172554,109],{"class":59},[33,172556,112],{"class":39},[33,172558,109],{"class":59},[33,172560,157416],{"class":117},[33,172562,121],{"class":59},[33,172564,172565,172567,172569,172571,172573],{"class":35,"line":130},[33,172566,149],{"class":39},[33,172568,109],{"class":59},[33,172570,2264],{"class":39},[33,172572,157666],{"class":63},[33,172574,172575],{"class":59}," num)\n",[33,172577,172578,172580,172582,172584,172586,172588],{"class":35,"line":146},[33,172579,172308],{"class":63},[33,172581,3332],{"class":59},[33,172583,156457],{"class":39},[33,172585,14093],{"class":59},[33,172587,172191],{"class":39},[33,172589,32437],{"class":59},[33,172591,172592,172594,172596,172599],{"class":35,"line":267},[33,172593,149],{"class":39},[33,172595,109],{"class":59},[33,172597,172598],{"class":117},"\"输入不合法\"",[33,172600,157],{"class":59},[14,172602,172604],{"id":172603},"_95-获取异常信息","9.5 获取异常信息",[23,172606,172608],{"className":25,"code":172607,"language":27,"meta":28,"style":28},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[30,172609,172610,172616,172630,172641],{"__ignoreMap":28},[33,172611,172612,172614],{"class":35,"line":36},[33,172613,172296],{"class":63},[33,172615,143],{"class":59},[33,172617,172618,172620,172622,172624,172626,172628],{"class":35,"line":43},[33,172619,47239],{"class":59},[33,172621,64],{"class":63},[33,172623,106],{"class":39},[33,172625,109],{"class":59},[33,172627,157500],{"class":117},[33,172629,157],{"class":59},[33,172631,172632,172634,172636,172638],{"class":35,"line":130},[33,172633,172308],{"class":63},[33,172635,153854],{"class":39},[33,172637,66246],{"class":63},[33,172639,172640],{"class":59}," e:\n",[33,172642,172643,172645,172647,172649,172652,172654,172656,172658,172660],{"class":35,"line":146},[33,172644,149],{"class":39},[33,172646,109],{"class":59},[33,172648,999],{"class":63},[33,172650,172651],{"class":117},"\"出错了:",[33,172653,1005],{"class":39},[33,172655,1894],{"class":59},[33,172657,1011],{"class":39},[33,172659,1014],{"class":117},[33,172661,157],{"class":59},[19,172663,148089],{},[23,172665,172668],{"className":172666,"code":172667,"language":6848,"meta":28},[6846],"出错了:invalid literal for int() with base 10: 'abc'\n",[30,172669,172667],{"__ignoreMap":28},[14,172671,172673],{"id":172672},"_96-else和finally","9.6 else和finally",[19,172675,172676,172678],{},[30,172677,270],{},"：没有异常时执行。",[19,172680,172681,172684],{},[30,172682,172683],{},"finally","：无论是否异常都会执行。",[23,172686,172688],{"className":25,"code":172687,"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,172689,172690,172696,172714,172722,172732,172738,172759,172765],{"__ignoreMap":28},[33,172691,172692,172694],{"class":35,"line":36},[33,172693,172296],{"class":63},[33,172695,143],{"class":59},[33,172697,172698,172700,172702,172704,172706,172708,172710,172712],{"class":35,"line":43},[33,172699,47239],{"class":59},[33,172701,64],{"class":63},[33,172703,106],{"class":39},[33,172705,109],{"class":59},[33,172707,112],{"class":39},[33,172709,109],{"class":59},[33,172711,157416],{"class":117},[33,172713,121],{"class":59},[33,172715,172716,172718,172720],{"class":35,"line":130},[33,172717,172308],{"class":63},[33,172719,153854],{"class":39},[33,172721,143],{"class":59},[33,172723,172724,172726,172728,172730],{"class":35,"line":146},[33,172725,149],{"class":39},[33,172727,109],{"class":59},[33,172729,154839],{"class":117},[33,172731,157],{"class":59},[33,172733,172734,172736],{"class":35,"line":267},[33,172735,270],{"class":63},[33,172737,143],{"class":59},[33,172739,172740,172742,172744,172746,172749,172751,172753,172755,172757],{"class":35,"line":275},[33,172741,149],{"class":39},[33,172743,109],{"class":59},[33,172745,999],{"class":63},[33,172747,172748],{"class":117},"\"输入正确:",[33,172750,1005],{"class":39},[33,172752,3339],{"class":59},[33,172754,1011],{"class":39},[33,172756,1014],{"class":117},[33,172758,157],{"class":59},[33,172760,172761,172763],{"class":35,"line":392},[33,172762,172683],{"class":63},[33,172764,143],{"class":59},[33,172766,172767,172769,172771,172774],{"class":35,"line":406},[33,172768,149],{"class":39},[33,172770,109],{"class":59},[33,172772,172773],{"class":117},"\"程序结束\"",[33,172775,157],{"class":59},[19,172777,172778,172780],{},[30,172779,172683],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172782,172784],{"id":172783},"_97-抛出异常","9.7 抛出异常",[19,172786,172787],{},"程序可以主动抛出异常。",[23,172789,172791],{"className":25,"code":172790,"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,172792,172793,172802,172814,172827,172847,172851,172855],{"__ignoreMap":28},[33,172794,172795,172797,172800],{"class":35,"line":36},[33,172796,33597],{"class":63},[33,172798,172799],{"class":3632}," set_age",[33,172801,162829],{"class":59},[33,172803,172804,172806,172808,172810,172812],{"class":35,"line":43},[33,172805,567],{"class":63},[33,172807,136],{"class":59},[33,172809,2726],{"class":63},[33,172811,829],{"class":39},[33,172813,143],{"class":59},[33,172815,172816,172818,172820,172822,172825],{"class":35,"line":130},[33,172817,105070],{"class":63},[33,172819,153854],{"class":39},[33,172821,109],{"class":59},[33,172823,172824],{"class":117},"\"年龄不能为负数\"",[33,172826,157],{"class":59},[33,172828,172829,172831,172833,172835,172837,172839,172841,172843,172845],{"class":35,"line":146},[33,172830,149],{"class":39},[33,172832,109],{"class":59},[33,172834,999],{"class":63},[33,172836,163397],{"class":117},[33,172838,1005],{"class":39},[33,172840,71863],{"class":59},[33,172842,1011],{"class":39},[33,172844,1014],{"class":117},[33,172846,157],{"class":59},[33,172848,172849],{"class":35,"line":267},[33,172850,127],{"emptyLinePlaceholder":126},[33,172852,172853],{"class":35,"line":275},[33,172854,127],{"emptyLinePlaceholder":126},[33,172856,172857,172860,172862,172864],{"class":35,"line":392},[33,172858,172859],{"class":59},"set_age(",[33,172861,2349],{"class":63},[33,172863,2036],{"class":39},[33,172865,157],{"class":59},[19,172867,172868],{},"调用者可以捕获：",[23,172870,172872],{"className":25,"code":172871,"language":27,"meta":28,"style":28},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[30,172873,172874,172880,172891,172901],{"__ignoreMap":28},[33,172875,172876,172878],{"class":35,"line":36},[33,172877,172296],{"class":63},[33,172879,143],{"class":59},[33,172881,172882,172885,172887,172889],{"class":35,"line":43},[33,172883,172884],{"class":59},"    set_age(",[33,172886,2349],{"class":63},[33,172888,2036],{"class":39},[33,172890,157],{"class":59},[33,172892,172893,172895,172897,172899],{"class":35,"line":130},[33,172894,172308],{"class":63},[33,172896,153854],{"class":39},[33,172898,66246],{"class":63},[33,172900,172640],{"class":59},[33,172902,172903,172905],{"class":35,"line":146},[33,172904,149],{"class":39},[33,172906,68641],{"class":59},[14,172908,172910],{"id":172909},"_98-自定义异常","9.8 自定义异常",[23,172912,172914],{"className":25,"code":172913,"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,172915,172916,172930,172934,172938,172942,172950,172960,172971,172981,172985,172989,172995,173012,173023],{"__ignoreMap":28},[33,172917,172918,172920,172923,172925,172928],{"class":35,"line":36},[33,172919,16352],{"class":63},[33,172921,172922],{"class":3632}," BalanceNotEnoughError",[33,172924,109],{"class":59},[33,172926,172927],{"class":39},"Exception",[33,172929,32437],{"class":59},[33,172931,172932],{"class":35,"line":43},[33,172933,151166],{"class":63},[33,172935,172936],{"class":35,"line":130},[33,172937,127],{"emptyLinePlaceholder":126},[33,172939,172940],{"class":35,"line":146},[33,172941,127],{"emptyLinePlaceholder":126},[33,172943,172944,172946,172948],{"class":35,"line":267},[33,172945,33597],{"class":63},[33,172947,151815],{"class":3632},[33,172949,164226],{"class":59},[33,172951,172952,172954,172956,172958],{"class":35,"line":275},[33,172953,567],{"class":63},[33,172955,151771],{"class":59},[33,172957,2775],{"class":63},[33,172959,164003],{"class":59},[33,172961,172962,172964,172967,172969],{"class":35,"line":392},[33,172963,105070],{"class":63},[33,172965,172966],{"class":59}," BalanceNotEnoughError(",[33,172968,151866],{"class":117},[33,172970,157],{"class":59},[33,172972,172973,172975,172977,172979],{"class":35,"line":406},[33,172974,5752],{"class":63},[33,172976,164233],{"class":59},[33,172978,2349],{"class":63},[33,172980,151804],{"class":59},[33,172982,172983],{"class":35,"line":418},[33,172984,127],{"emptyLinePlaceholder":126},[33,172986,172987],{"class":35,"line":425},[33,172988,127],{"emptyLinePlaceholder":126},[33,172990,172991,172993],{"class":35,"line":1147},[33,172992,172296],{"class":63},[33,172994,143],{"class":59},[33,172996,172997,172999,173001,173004,173006,173008,173010],{"class":35,"line":1329},[33,172998,163904],{"class":59},[33,173000,64],{"class":63},[33,173002,173003],{"class":59}," withdraw(",[33,173005,2129],{"class":39},[33,173007,14093],{"class":59},[33,173009,3391],{"class":39},[33,173011,157],{"class":59},[33,173013,173014,173016,173019,173021],{"class":35,"line":1341},[33,173015,172308],{"class":63},[33,173017,173018],{"class":59}," BalanceNotEnoughError ",[33,173020,33033],{"class":63},[33,173022,172640],{"class":59},[33,173024,173025,173027],{"class":35,"line":1348},[33,173026,149],{"class":39},[33,173028,68641],{"class":59},[19,173030,173031],{},"入门阶段大多数情况使用内置异常即可。",[14,173033,173035],{"id":173034},"_99-traceback","9.9 traceback",[19,173037,173038],{},"调试时可以输出完整异常堆栈。",[23,173040,173042],{"className":25,"code":173041,"language":27,"meta":28,"style":28},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[30,173043,173044,173051,173055,173061,173071,173079],{"__ignoreMap":28},[33,173045,173046,173048],{"class":35,"line":36},[33,173047,32045],{"class":63},[33,173049,173050],{"class":59}," traceback\n",[33,173052,173053],{"class":35,"line":43},[33,173054,127],{"emptyLinePlaceholder":126},[33,173056,173057,173059],{"class":35,"line":130},[33,173058,172296],{"class":63},[33,173060,143],{"class":59},[33,173062,173063,173065,173067,173069],{"class":35,"line":146},[33,173064,3653],{"class":39},[33,173066,109],{"class":59},[33,173068,157500],{"class":117},[33,173070,157],{"class":59},[33,173072,173073,173075,173077],{"class":35,"line":267},[33,173074,172308],{"class":63},[33,173076,153854],{"class":39},[33,173078,143],{"class":59},[33,173080,173081],{"class":35,"line":275},[33,173082,173083],{"class":59},"    traceback.print_exc()\n",[19,173085,173086],{},"日志系统中常把异常堆栈记录到文件。",[14,173088,173090],{"id":173089},"_910-什么是模块","9.10 什么是模块",[19,173092,173093,173094,127615],{},"模块就是一个 ",[30,173095,147984],{},[19,173097,173098,173099,26274],{},"例如创建 ",[30,173100,173101],{},"my_math.py",[23,173103,173105],{"className":25,"code":173104,"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,173106,173107,173115,173125,173129,173133,173142],{"__ignoreMap":28},[33,173108,173109,173111,173113],{"class":35,"line":36},[33,173110,33597],{"class":63},[33,173112,6870],{"class":3632},[33,173114,152721],{"class":59},[33,173116,173117,173119,173121,173123],{"class":35,"line":43},[33,173118,5752],{"class":63},[33,173120,12527],{"class":59},[33,173122,2298],{"class":63},[33,173124,152732],{"class":59},[33,173126,173127],{"class":35,"line":130},[33,173128,127],{"emptyLinePlaceholder":126},[33,173130,173131],{"class":35,"line":146},[33,173132,127],{"emptyLinePlaceholder":126},[33,173134,173135,173137,173140],{"class":35,"line":267},[33,173136,33597],{"class":63},[33,173138,173139],{"class":3632}," sub",[33,173141,152721],{"class":59},[33,173143,173144,173146,173148,173150],{"class":35,"line":275},[33,173145,5752],{"class":63},[33,173147,12527],{"class":59},[33,173149,2349],{"class":63},[33,173151,152732],{"class":59},[19,173153,173154],{},"在另一个文件中导入：",[23,173156,173158],{"className":25,"code":173157,"language":27,"meta":28,"style":28},"import my_math\n\nprint(my_math.add(1, 2))\n",[30,173159,173160,173167,173171],{"__ignoreMap":28},[33,173161,173162,173164],{"class":35,"line":36},[33,173163,32045],{"class":63},[33,173165,173166],{"class":59}," my_math\n",[33,173168,173169],{"class":35,"line":43},[33,173170,127],{"emptyLinePlaceholder":126},[33,173172,173173,173175,173178,173180,173182,173184],{"class":35,"line":130},[33,173174,72],{"class":39},[33,173176,173177],{"class":59},"(my_math.add(",[33,173179,2036],{"class":39},[33,173181,14093],{"class":59},[33,173183,1897],{"class":39},[33,173185,121],{"class":59},[14,173187,173189],{"id":173188},"_911-import导入","9.11 import导入",[633,173191,173193],{"id":173192},"_9111-导入模块","9.11.1 导入模块",[23,173195,173197],{"className":25,"code":173196,"language":27,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\n",[30,173198,173199,173205,173209],{"__ignoreMap":28},[33,173200,173201,173203],{"class":35,"line":36},[33,173202,32045],{"class":63},[33,173204,46974],{"class":59},[33,173206,173207],{"class":35,"line":43},[33,173208,127],{"emptyLinePlaceholder":126},[33,173210,173211,173213,173216,173218,173220,173222],{"class":35,"line":130},[33,173212,72],{"class":39},[33,173214,173215],{"class":59},"(random.randint(",[33,173217,2036],{"class":39},[33,173219,14093],{"class":59},[33,173221,2264],{"class":39},[33,173223,121],{"class":59},[633,173225,173227],{"id":173226},"_9112-导入指定内容","9.11.2 导入指定内容",[23,173229,173231],{"className":25,"code":173230,"language":27,"meta":28,"style":28},"from random import randint\n\nprint(randint(1, 10))\n",[30,173232,173233,173244,173248],{"__ignoreMap":28},[33,173234,173235,173237,173239,173241],{"class":35,"line":36},[33,173236,32388],{"class":63},[33,173238,59439],{"class":59},[33,173240,32045],{"class":63},[33,173242,173243],{"class":59}," randint\n",[33,173245,173246],{"class":35,"line":43},[33,173247,127],{"emptyLinePlaceholder":126},[33,173249,173250,173252,173255,173257,173259,173261],{"class":35,"line":130},[33,173251,72],{"class":39},[33,173253,173254],{"class":59},"(randint(",[33,173256,2036],{"class":39},[33,173258,14093],{"class":59},[33,173260,2264],{"class":39},[33,173262,121],{"class":59},[633,173264,173266],{"id":173265},"_9113-起别名","9.11.3 起别名",[23,173268,173270],{"className":25,"code":173269,"language":27,"meta":28,"style":28},"import random as rd\n\nprint(rd.randint(1, 10))\n",[30,173271,173272,173283,173287],{"__ignoreMap":28},[33,173273,173274,173276,173278,173280],{"class":35,"line":36},[33,173275,32045],{"class":63},[33,173277,59439],{"class":59},[33,173279,33033],{"class":63},[33,173281,173282],{"class":59}," rd\n",[33,173284,173285],{"class":35,"line":43},[33,173286,127],{"emptyLinePlaceholder":126},[33,173288,173289,173291,173294,173296,173298,173300],{"class":35,"line":130},[33,173290,72],{"class":39},[33,173292,173293],{"class":59},"(rd.randint(",[33,173295,2036],{"class":39},[33,173297,14093],{"class":59},[33,173299,2264],{"class":39},[33,173301,121],{"class":59},[23,173303,173305],{"className":25,"code":173304,"language":27,"meta":28,"style":28},"from random import randint as rint\n\nprint(rint(1, 10))\n",[30,173306,173307,173323,173327],{"__ignoreMap":28},[33,173308,173309,173311,173313,173315,173318,173320],{"class":35,"line":36},[33,173310,32388],{"class":63},[33,173312,59439],{"class":59},[33,173314,32045],{"class":63},[33,173316,173317],{"class":59}," randint ",[33,173319,33033],{"class":63},[33,173321,173322],{"class":59}," rint\n",[33,173324,173325],{"class":35,"line":43},[33,173326,127],{"emptyLinePlaceholder":126},[33,173328,173329,173331,173334,173336,173338,173340],{"class":35,"line":130},[33,173330,72],{"class":39},[33,173332,173333],{"class":59},"(rint(",[33,173335,2036],{"class":39},[33,173337,14093],{"class":59},[33,173339,2264],{"class":39},[33,173341,121],{"class":59},[633,173343,173345],{"id":173344},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[23,173347,173349],{"className":25,"code":173348,"language":27,"meta":28,"style":28},"from random import *\n",[30,173350,173351],{"__ignoreMap":28},[33,173352,173353,173355,173357,173359],{"class":35,"line":36},[33,173354,32388],{"class":63},[33,173356,59439],{"class":59},[33,173358,32045],{"class":63},[33,173360,173361],{"class":63}," *\n",[19,173363,173364],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173366,173368],{"id":173367},"_912-常用内置模块","9.12 常用内置模块",[633,173370,173372],{"id":173371},"_9121-random","9.12.1 random",[23,173374,173376],{"className":25,"code":173375,"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,173377,173378,173384,173388,173402,173421],{"__ignoreMap":28},[33,173379,173380,173382],{"class":35,"line":36},[33,173381,32045],{"class":63},[33,173383,46974],{"class":59},[33,173385,173386],{"class":35,"line":43},[33,173387,127],{"emptyLinePlaceholder":126},[33,173389,173390,173392,173394,173396,173398,173400],{"class":35,"line":130},[33,173391,72],{"class":39},[33,173393,173215],{"class":59},[33,173395,2036],{"class":39},[33,173397,14093],{"class":59},[33,173399,2264],{"class":39},[33,173401,121],{"class":59},[33,173403,173404,173406,173409,173411,173413,173415,173417,173419],{"class":35,"line":146},[33,173405,72],{"class":39},[33,173407,173408],{"class":59},"(random.choice([",[33,173410,151517],{"class":117},[33,173412,14093],{"class":59},[33,173414,152564],{"class":117},[33,173416,14093],{"class":59},[33,173418,161145],{"class":117},[33,173420,34790],{"class":59},[33,173422,173423,173425,173428,173430,173432,173434,173436,173438,173440,173442,173444,173446,173448,173450],{"class":35,"line":267},[33,173424,72],{"class":39},[33,173426,173427],{"class":59},"(random.sample([",[33,173429,2036],{"class":39},[33,173431,14093],{"class":59},[33,173433,1897],{"class":39},[33,173435,14093],{"class":59},[33,173437,1891],{"class":39},[33,173439,14093],{"class":59},[33,173441,2111],{"class":39},[33,173443,14093],{"class":59},[33,173445,2137],{"class":39},[33,173447,113839],{"class":59},[33,173449,1897],{"class":39},[33,173451,121],{"class":59},[633,173453,173455],{"id":173454},"_9122-time","9.12.2 time",[23,173457,173459],{"className":25,"code":173458,"language":27,"meta":28,"style":28},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[30,173460,173461,173467,173471,173478,173486],{"__ignoreMap":28},[33,173462,173463,173465],{"class":35,"line":36},[33,173464,32045],{"class":63},[33,173466,33479],{"class":59},[33,173468,173469],{"class":35,"line":43},[33,173470,127],{"emptyLinePlaceholder":126},[33,173472,173473,173475],{"class":35,"line":130},[33,173474,72],{"class":39},[33,173476,173477],{"class":59},"(time.time())\n",[33,173479,173480,173482,173484],{"class":35,"line":146},[33,173481,96710],{"class":59},[33,173483,2036],{"class":39},[33,173485,157],{"class":59},[33,173487,173488,173490,173492,173495],{"class":35,"line":267},[33,173489,72],{"class":39},[33,173491,109],{"class":59},[33,173493,173494],{"class":117},"\"1秒后执行\"",[33,173496,157],{"class":59},[633,173498,173500],{"id":173499},"_9123-datetime","9.12.3 datetime",[23,173502,173504],{"className":25,"code":173503,"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,173505,173506,173518,173522,173532,173539],{"__ignoreMap":28},[33,173507,173508,173510,173513,173515],{"class":35,"line":36},[33,173509,32388],{"class":63},[33,173511,173512],{"class":59}," datetime ",[33,173514,32045],{"class":63},[33,173516,173517],{"class":59}," datetime\n",[33,173519,173520],{"class":35,"line":43},[33,173521,127],{"emptyLinePlaceholder":126},[33,173523,173524,173527,173529],{"class":35,"line":130},[33,173525,173526],{"class":59},"now ",[33,173528,64],{"class":63},[33,173530,173531],{"class":59}," datetime.now()\n",[33,173533,173534,173536],{"class":35,"line":146},[33,173535,72],{"class":39},[33,173537,173538],{"class":59},"(now)\n",[33,173540,173541,173543,173546,173549,173551,173554],{"class":35,"line":267},[33,173542,72],{"class":39},[33,173544,173545],{"class":59},"(now.strftime(",[33,173547,173548],{"class":117},"\"%Y-%m-",[33,173550,158309],{"class":39},[33,173552,173553],{"class":117}," %H:%M:%S\"",[33,173555,121],{"class":59},[633,173557,173559],{"id":173558},"_9124-os","9.12.4 os",[23,173561,173563],{"className":25,"code":173562,"language":27,"meta":28,"style":28},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[30,173564,173565,173571,173575,173582],{"__ignoreMap":28},[33,173566,173567,173569],{"class":35,"line":36},[33,173568,32045],{"class":63},[33,173570,46951],{"class":59},[33,173572,173573],{"class":35,"line":43},[33,173574,127],{"emptyLinePlaceholder":126},[33,173576,173577,173579],{"class":35,"line":130},[33,173578,72],{"class":39},[33,173580,173581],{"class":59},"(os.getcwd())\n",[33,173583,173584,173586,173589,173592],{"class":35,"line":146},[33,173585,72],{"class":39},[33,173587,173588],{"class":59},"(os.listdir(",[33,173590,173591],{"class":117},"\".\"",[33,173593,121],{"class":59},[633,173595,173597],{"id":173596},"_9125-sys","9.12.5 sys",[23,173599,173601],{"className":25,"code":173600,"language":27,"meta":28,"style":28},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[30,173602,173603,173610,173614,173621],{"__ignoreMap":28},[33,173604,173605,173607],{"class":35,"line":36},[33,173606,32045],{"class":63},[33,173608,173609],{"class":59}," sys\n",[33,173611,173612],{"class":35,"line":43},[33,173613,127],{"emptyLinePlaceholder":126},[33,173615,173616,173618],{"class":35,"line":130},[33,173617,72],{"class":39},[33,173619,173620],{"class":59},"(sys.version)\n",[33,173622,173623,173625],{"class":35,"line":146},[33,173624,72],{"class":39},[33,173626,173627],{"class":59},"(sys.path)\n",[14,173629,173631,173632,173634,173635,1014],{"id":173630},"_913-if-name-main","9.13 if ",[1968,173633,1008],{}," == \"",[1968,173636,103696],{},[19,173638,173639,173640,173643],{},"模块被直接运行和被导入时，",[30,173641,173642],{},"__name__"," 的值不同。",[19,173645,173646,173647,26274],{},"创建 ",[30,173648,173649],{},"my_module.py",[23,173651,173653],{"className":25,"code":173652,"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,173654,173655,173663,173673,173677,173681,173693],{"__ignoreMap":28},[33,173656,173657,173659,173661],{"class":35,"line":36},[33,173658,33597],{"class":63},[33,173660,6870],{"class":3632},[33,173662,152721],{"class":59},[33,173664,173665,173667,173669,173671],{"class":35,"line":43},[33,173666,5752],{"class":63},[33,173668,12527],{"class":59},[33,173670,2298],{"class":63},[33,173672,152732],{"class":59},[33,173674,173675],{"class":35,"line":130},[33,173676,127],{"emptyLinePlaceholder":126},[33,173678,173679],{"class":35,"line":146},[33,173680,127],{"emptyLinePlaceholder":126},[33,173682,173683,173685,173687,173689,173691],{"class":35,"line":267},[33,173684,133],{"class":63},[33,173686,32871],{"class":39},[33,173688,1644],{"class":63},[33,173690,103200],{"class":117},[33,173692,143],{"class":59},[33,173694,173695,173697,173699,173701,173703,173705],{"class":35,"line":275},[33,173696,149],{"class":39},[33,173698,168014],{"class":59},[33,173700,2036],{"class":39},[33,173702,14093],{"class":59},[33,173704,1897],{"class":39},[33,173706,121],{"class":59},[19,173708,173709],{},"作用：",[162,173711,173712,173715],{},[165,173713,173714],{},"直接运行该文件时，执行测试代码。",[165,173716,173717],{},"被其他文件导入时，不执行测试代码。",[19,173719,173720],{},"这是写模块时很常用的习惯。",[14,173722,173724],{"id":173723},"_914-包","9.14 包",[19,173726,173727,173728,173731],{},"包是包含 ",[30,173729,173730],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173733,173734],{},"目录结构：",[23,173736,173739],{"className":173737,"code":173738,"language":6848,"meta":28},[6846],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[30,173740,173738],{"__ignoreMap":28},[19,173742,173743],{},"导入：",[23,173745,173747],{"className":25,"code":173746,"language":27,"meta":28,"style":28},"from utils.file_utils import read_file\n",[30,173748,173749],{"__ignoreMap":28},[33,173750,173751,173753,173756,173758],{"class":35,"line":36},[33,173752,32388],{"class":63},[33,173754,173755],{"class":59}," utils.file_utils ",[33,173757,32045],{"class":63},[33,173759,173760],{"class":59}," read_file\n",[19,173762,173763,173765],{},[30,173764,173730],{}," 可以为空，也可以写包初始化逻辑。",[14,173767,173769],{"id":173768},"_915-第三方包","9.15 第三方包",[19,173771,173772,173773,173775],{},"第三方包通过 ",[30,173774,25486],{}," 安装。",[23,173777,173779],{"className":25477,"code":173778,"language":25479,"meta":28,"style":28},"pip install requests\n",[30,173780,173781],{"__ignoreMap":28},[33,173782,173783,173785,173787],{"class":35,"line":36},[33,173784,25486],{"class":3632},[33,173786,25489],{"class":117},[33,173788,147730],{"class":117},[19,173790,173791],{},"使用：",[23,173793,173795],{"className":25,"code":173794,"language":27,"meta":28,"style":28},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[30,173796,173797,173803,173807,173822],{"__ignoreMap":28},[33,173798,173799,173801],{"class":35,"line":36},[33,173800,32045],{"class":63},[33,173802,147730],{"class":59},[33,173804,173805],{"class":35,"line":43},[33,173806,127],{"emptyLinePlaceholder":126},[33,173808,173809,173812,173814,173817,173820],{"class":35,"line":130},[33,173810,173811],{"class":59},"response ",[33,173813,64],{"class":63},[33,173815,173816],{"class":59}," requests.get(",[33,173818,173819],{"class":117},"\"https:\u002F\u002Fwww.example.com\"",[33,173821,157],{"class":59},[33,173823,173824,173826],{"class":35,"line":146},[33,173825,72],{"class":39},[33,173827,173828],{"class":59},"(response.status_code)\n",[19,173830,173831],{},"查看已安装包：",[23,173833,173835],{"className":25477,"code":173834,"language":25479,"meta":28,"style":28},"pip list\n",[30,173836,173837],{"__ignoreMap":28},[33,173838,173839,173841],{"class":35,"line":36},[33,173840,25486],{"class":3632},[33,173842,120590],{"class":117},[19,173844,173845],{},"导出项目依赖：",[23,173847,173848],{"className":25477,"code":147925,"language":25479,"meta":28,"style":28},[30,173849,173850],{"__ignoreMap":28},[33,173851,173852,173854,173856,173858],{"class":35,"line":36},[33,173853,25486],{"class":3632},[33,173855,147934],{"class":117},[33,173857,27878],{"class":63},[33,173859,147939],{"class":117},[19,173861,173862],{},"安装项目依赖：",[23,173864,173865],{"className":25477,"code":147945,"language":25479,"meta":28,"style":28},[30,173866,173867],{"__ignoreMap":28},[33,173868,173869,173871,173873,173875],{"class":35,"line":36},[33,173870,25486],{"class":3632},[33,173872,25489],{"class":117},[33,173874,121274],{"class":39},[33,173876,147939],{"class":117},[14,173878,173880],{"id":173879},"_916-模块搜索路径","9.16 模块搜索路径",[19,173882,173883,173884,173887],{},"Python 导入模块时会在 ",[30,173885,173886],{},"sys.path"," 中查找。",[23,173889,173891],{"className":25,"code":173890,"language":27,"meta":28,"style":28},"import sys\n\nfor path in sys.path:\n    print(path)\n",[30,173892,173893,173899,173903,173915],{"__ignoreMap":28},[33,173894,173895,173897],{"class":35,"line":36},[33,173896,32045],{"class":63},[33,173898,173609],{"class":59},[33,173900,173901],{"class":35,"line":43},[33,173902,127],{"emptyLinePlaceholder":126},[33,173904,173905,173907,173910,173912],{"class":35,"line":130},[33,173906,4690],{"class":63},[33,173908,173909],{"class":59}," path ",[33,173911,27699],{"class":63},[33,173913,173914],{"class":59}," sys.path:\n",[33,173916,173917,173919],{"class":35,"line":146},[33,173918,149],{"class":39},[33,173920,170643],{"class":59},[19,173922,173923],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173925,181],{},[23,173927,173930],{"className":173928,"code":173929,"language":6848,"meta":28},[6846],"random.py\njson.py\ntime.py\n",[30,173931,173929],{"__ignoreMap":28},[19,173933,173934],{},"这些文件名可能导致导入异常。",[14,173936,173938],{"id":173937},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173940,173734],{},[23,173942,173945],{"className":173943,"code":173944,"language":6848,"meta":28},[6846],"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,173946,173944],{"__ignoreMap":28},[19,173948,173949,26274],{},[30,173950,173951],{},"utils\u002Ffile_utils.py",[23,173953,173955],{"className":25,"code":173954,"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,173956,173957,173963,173973,173977,173981,173991,174001,174009,174015,174019,174046,174056,174060,174064,174074,174100],{"__ignoreMap":28},[33,173958,173959,173961],{"class":35,"line":36},[33,173960,32045],{"class":63},[33,173962,148720],{"class":59},[33,173964,173965,173967,173969,173971],{"class":35,"line":43},[33,173966,32388],{"class":63},[33,173968,109949],{"class":59},[33,173970,32045],{"class":63},[33,173972,109954],{"class":59},[33,173974,173975],{"class":35,"line":130},[33,173976,127],{"emptyLinePlaceholder":126},[33,173978,173979],{"class":35,"line":146},[33,173980,127],{"emptyLinePlaceholder":126},[33,173982,173983,173985,173988],{"class":35,"line":267},[33,173984,33597],{"class":63},[33,173986,173987],{"class":3632}," read_json",[33,173989,173990],{"class":59},"(path):\n",[33,173992,173993,173996,173998],{"class":35,"line":275},[33,173994,173995],{"class":59},"    path ",[33,173997,64],{"class":63},[33,173999,174000],{"class":59}," Path(path)\n",[33,174002,174003,174005,174007],{"class":35,"line":392},[33,174004,567],{"class":63},[33,174006,783],{"class":63},[33,174008,170724],{"class":59},[33,174010,174011,174013],{"class":35,"line":406},[33,174012,16410],{"class":63},[33,174014,53483],{"class":59},[33,174016,174017],{"class":35,"line":418},[33,174018,127],{"emptyLinePlaceholder":126},[33,174020,174021,174023,174025,174028,174030,174032,174034,174036,174038,174040,174042,174044],{"class":35,"line":425},[33,174022,35825],{"class":63},[33,174024,148420],{"class":39},[33,174026,174027],{"class":59},"(path, ",[33,174029,148430],{"class":117},[33,174031,14093],{"class":59},[33,174033,148435],{"class":6877},[33,174035,64],{"class":63},[33,174037,148440],{"class":117},[33,174039,15372],{"class":59},[33,174041,33033],{"class":63},[33,174043,149782],{"class":6877},[33,174045,143],{"class":59},[33,174047,174048,174050,174052,174054],{"class":35,"line":1147},[33,174049,16410],{"class":63},[33,174051,149793],{"class":59},[33,174053,47000],{"class":6877},[33,174055,157],{"class":59},[33,174057,174058],{"class":35,"line":1329},[33,174059,127],{"emptyLinePlaceholder":126},[33,174061,174062],{"class":35,"line":1341},[33,174063,127],{"emptyLinePlaceholder":126},[33,174065,174066,174068,174071],{"class":35,"line":1348},[33,174067,33597],{"class":63},[33,174069,174070],{"class":3632}," write_json",[33,174072,174073],{"class":59},"(path, data):\n",[33,174075,174076,174078,174080,174082,174084,174086,174088,174090,174092,174094,174096,174098],{"class":35,"line":1529},[33,174077,35825],{"class":63},[33,174079,148420],{"class":39},[33,174081,174027],{"class":59},[33,174083,153604],{"class":117},[33,174085,14093],{"class":59},[33,174087,148435],{"class":6877},[33,174089,64],{"class":63},[33,174091,148440],{"class":117},[33,174093,15372],{"class":59},[33,174095,33033],{"class":63},[33,174097,149782],{"class":6877},[33,174099,143],{"class":59},[33,174101,174102,174105,174107,174109,174111,174113,174115,174117,174119,174121,174123],{"class":35,"line":1546},[33,174103,174104],{"class":59},"        json.dump(data, ",[33,174106,47000],{"class":6877},[33,174108,14093],{"class":59},[33,174110,148766],{"class":6877},[33,174112,64],{"class":63},[33,174114,35634],{"class":39},[33,174116,14093],{"class":59},[33,174118,153640],{"class":6877},[33,174120,64],{"class":63},[33,174122,1897],{"class":39},[33,174124,157],{"class":59},[19,174126,174127,26274],{},[30,174128,156231],{},[23,174130,174132],{"className":25,"code":174131,"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,174133,174134,174145,174149,174162,174182],{"__ignoreMap":28},[33,174135,174136,174138,174140,174142],{"class":35,"line":36},[33,174137,32388],{"class":63},[33,174139,173755],{"class":59},[33,174141,32045],{"class":63},[33,174143,174144],{"class":59}," read_json, write_json\n",[33,174146,174147],{"class":35,"line":43},[33,174148,127],{"emptyLinePlaceholder":126},[33,174150,174151,174153,174155,174158,174160],{"class":35,"line":130},[33,174152,161130],{"class":59},[33,174154,64],{"class":63},[33,174156,174157],{"class":59}," read_json(",[33,174159,153459],{"class":117},[33,174161,157],{"class":59},[33,174163,174164,174166,174168,174170,174172,174174,174176,174178,174180],{"class":35,"line":146},[33,174165,171948],{"class":59},[33,174167,64321],{"class":117},[33,174169,53082],{"class":59},[33,174171,151517],{"class":117},[33,174173,14093],{"class":59},[33,174175,153100],{"class":117},[33,174177,53082],{"class":59},[33,174179,2804],{"class":39},[33,174181,166566],{"class":59},[33,174183,174184,174187,174189],{"class":35,"line":267},[33,174185,174186],{"class":59},"write_json(",[33,174188,153459],{"class":117},[33,174190,174191],{"class":59},", students)\n",[14,174193,174195],{"id":174194},"_918-易错点","9.18 易错点",[162,174197,174198,174201,174206,174211,174214,174217],{},[165,174199,174200],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[165,174202,174203,174204,1628],{},"能指定异常类型就不要裸写 ",[30,174205,172308],{},[165,174207,174208,174210],{},[30,174209,172683],{}," 无论是否出错都会执行。",[165,174212,174213],{},"模块文件名不要和标准库重名。",[165,174215,174216],{},"导入自己写的模块时，要注意运行目录。",[165,174218,174219],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174221,174223],{"id":174222},"_919-本章练习","9.19 本章练习",[162,174225,174226,174229,174232,174238,174245],{},[165,174227,174228],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[165,174230,174231],{},"写函数读取文件，如果文件不存在则返回空字符串。",[165,174233,173646,174234,174237],{},[30,174235,174236],{},"math_utils.py","，实现加减乘除函数并导入使用。",[165,174239,174240,174241,174244],{},"创建一个 ",[30,174242,174243],{},"utils"," 包，把 JSON 读写函数放进去。",[165,174246,174247],{},"写一个程序，捕获除零异常和输入格式异常。",[1729,174249,174250],{},"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":43,"depth":43,"links":174252},[174253,174254,174255,174256,174257,174258,174259,174260,174261,174262,174263,174269,174276,174278,174279,174280,174281,174282,174283],{"id":172105,"depth":43,"text":172106},{"id":172233,"depth":43,"text":172234},{"id":172282,"depth":43,"text":172283},{"id":172431,"depth":43,"text":172432},{"id":172603,"depth":43,"text":172604},{"id":172672,"depth":43,"text":172673},{"id":172783,"depth":43,"text":172784},{"id":172909,"depth":43,"text":172910},{"id":173034,"depth":43,"text":173035},{"id":173089,"depth":43,"text":173090},{"id":173188,"depth":43,"text":173189,"children":174264},[174265,174266,174267,174268],{"id":173192,"depth":130,"text":173193},{"id":173226,"depth":130,"text":173227},{"id":173265,"depth":130,"text":173266},{"id":173344,"depth":130,"text":173345},{"id":173367,"depth":43,"text":173368,"children":174270},[174271,174272,174273,174274,174275],{"id":173371,"depth":130,"text":173372},{"id":173454,"depth":130,"text":173455},{"id":173499,"depth":130,"text":173500},{"id":173558,"depth":130,"text":173559},{"id":173596,"depth":130,"text":173597},{"id":173630,"depth":43,"text":174277},"9.13 if name == \"main\"",{"id":173723,"depth":43,"text":173724},{"id":173768,"depth":43,"text":173769},{"id":173879,"depth":43,"text":173880},{"id":173937,"depth":43,"text":173938},{"id":174194,"depth":43,"text":174195},{"id":174222,"depth":43,"text":174223},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172097,"description":1751},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174290,"title":174291,"body":174292,"description":174455,"extension":1752,"meta":174456,"navigation":126,"path":174457,"seo":174458,"stem":174459,"__hash__":174460},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174293,"toc":174450},[174294,174297,174300,174303,174314,174316,174390,174393,174396,174399,174402,174405,174408,174411,174414,174417,174420],[10,174295,174291],{"id":174296},"python教程",[19,174298,174299],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174301,174302],{},"建议学习环境：",[162,174304,174305,174308,174311],{},[165,174306,174307],{},"Python 版本：Python 3.10 及以上。",[165,174309,174310],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[165,174312,174313],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174315,118713],{"id":118713},[162,174317,174318,174324,174330,174336,174342,174348,174354,174360,174366,174372,174378,174384],{},[165,174319,174320],{},[2057,174321,174323],{"href":174322},".\u002Fch1-Python","Python环境与第一个程序",[165,174325,174326],{},[2057,174327,174329],{"href":174328},".\u002Fch2","基础语法、变量与字符串",[165,174331,174332],{},[2057,174333,174335],{"href":174334},".\u002Fch3","判断语句",[165,174337,174338],{},[2057,174339,174341],{"href":174340},".\u002Fch4","循环语句",[165,174343,174344],{},[2057,174345,174347],{"href":174346},".\u002Fch5","函数基础",[165,174349,174350],{},[2057,174351,174353],{"href":174352},".\u002Fch6","数据容器",[165,174355,174356],{},[2057,174357,174359],{"href":174358},".\u002Fch7","函数进阶",[165,174361,174362],{},[2057,174363,174365],{"href":174364},".\u002Fch8","文件操作",[165,174367,174368],{},[2057,174369,174371],{"href":174370},".\u002Fch9","异常、模块与包",[165,174373,174374],{},[2057,174375,174377],{"href":174376},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[165,174379,174380],{},[2057,174381,174383],{"href":174382},".\u002Fch11","面向对象基础",[165,174385,174386],{},[2057,174387,174389],{"href":174388},".\u002Fch12","综合案例与复习路线",[14,174391,174392],{"id":174392},"学习路线",[19,174394,174395],{},"第一阶段：能运行程序。",[19,174397,174398],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174400,174401],{},"第二阶段：能组织数据。",[19,174403,174404],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174406,174407],{},"第三阶段：能封装逻辑。",[19,174409,174410],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174412,174413],{},"第四阶段：能做小项目。",[19,174415,174416],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174418,174419],{"id":174419},"参考资料",[162,174421,174422,174429,174436,174443],{},[165,174423,174424,174425],{},"黑马程序员 Python 入门教程推荐：",[2057,174426,174427],{"href":174427,"rel":174428},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25520],[165,174430,174431,174432],{},"Python 官方中文教程：",[2057,174433,174434],{"href":174434,"rel":174435},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25520],[165,174437,174438,174439],{},"Python 标准库文档：",[2057,174440,174441],{"href":174441,"rel":174442},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25520],[165,174444,174445,174446],{},"pyecharts 文档：",[2057,174447,174448],{"href":174448,"rel":174449},"https:\u002F\u002Fpyecharts.org\u002F",[25520],{"title":28,"searchDepth":43,"depth":43,"links":174451},[174452,174453,174454],{"id":118713,"depth":43,"text":118713},{"id":174392,"depth":43,"text":174392},{"id":174419,"depth":43,"text":174419},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25033},"\u002Fwiki\u002F2024-10-10-python",{"title":174291,"description":174455},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331477997]